diff --git a/src/apps/build/asset-manifest.json b/src/apps/build/asset-manifest.json index be1ac9a24..b6e273953 100644 --- a/src/apps/build/asset-manifest.json +++ b/src/apps/build/asset-manifest.json @@ -1,9 +1,9 @@ { "files": { "main.css": "./static/css/main.751babb1.css", - "main.js": "./static/js/main.b6447da4.js", - "static/js/918.c6fb41f4.chunk.js": "./static/js/918.c6fb41f4.chunk.js", - "static/js/613.043b2efc.chunk.js": "./static/js/613.043b2efc.chunk.js", + "main.js": "./static/js/main.a4a0ad96.js", + "static/js/918.e10a86be.chunk.js": "./static/js/918.e10a86be.chunk.js", + "static/js/613.beab528f.chunk.js": "./static/js/613.beab528f.chunk.js", "static/js/376.8d48e784.chunk.js": "./static/js/376.8d48e784.chunk.js", "static/js/426.9f5f69c7.chunk.js": "./static/js/426.9f5f69c7.chunk.js", "static/js/631.31672b05.chunk.js": "./static/js/631.31672b05.chunk.js", @@ -69,9 +69,9 @@ "static/media/logo-sm.svg": "./static/media/logo-sm.53b8ca70620b0b2968874a3660f195dd.svg", "index.html": "./index.html", "main.751babb1.css.map": "./static/css/main.751babb1.css.map", - "main.b6447da4.js.map": "./static/js/main.b6447da4.js.map", - "918.c6fb41f4.chunk.js.map": "./static/js/918.c6fb41f4.chunk.js.map", - "613.043b2efc.chunk.js.map": "./static/js/613.043b2efc.chunk.js.map", + "main.a4a0ad96.js.map": "./static/js/main.a4a0ad96.js.map", + "918.e10a86be.chunk.js.map": "./static/js/918.e10a86be.chunk.js.map", + "613.beab528f.chunk.js.map": "./static/js/613.beab528f.chunk.js.map", "376.8d48e784.chunk.js.map": "./static/js/376.8d48e784.chunk.js.map", "426.9f5f69c7.chunk.js.map": "./static/js/426.9f5f69c7.chunk.js.map", "631.31672b05.chunk.js.map": "./static/js/631.31672b05.chunk.js.map", @@ -88,6 +88,6 @@ }, "entrypoints": [ "static/css/main.751babb1.css", - "static/js/main.b6447da4.js" + "static/js/main.a4a0ad96.js" ] } \ No newline at end of file diff --git a/src/apps/build/index.html b/src/apps/build/index.html index 7466937cf..836ecf293 100644 --- a/src/apps/build/index.html +++ b/src/apps/build/index.html @@ -1 +1 @@ -
\n This app is pre-setup with an admin account,Please change the admin password immediately. The initial credentials are:\n
*/}\nName | \nState | \nActions | \nImage | \nCreated | \nIp Address | \nPublished Ports | \n
---|---|---|---|---|---|---|
{container.Names?.[0]?.replace(/^\\/|\\/$/g, '')} | \n\n | \n \n \n {' '}\n \n {\n container.State === \"running\" && (\n \n {' '}\n \n )\n }\n\n | \n{container.Image} | \n{new Date(container.Created * 1000).toLocaleString()} | \n{container.NetworkSettings.Networks[container.HostConfig.NetworkMode].IPAddress} | \n{container.Ports?.[0]?.PublicPort}:{container.Ports?.[0]?.PrivatePort} | \n
应用名称: | \n{props.data?.app_name} | \n
应用版本: | \n{props.data?.app_version} | \n
应用端口: | \n{props.data?.config?.port} | \n
创建时间: | \n{props.data?.create_time} | \n
配置目录: | \n{props.data?.config_path} | \n
数据目录: | \n{props.data?.volume_data} | \n
应用名称: | \n{props.data?.app_name} | \n应用版本: | \n{props.data?.app_version} | \n
应用端口: | \n{props.data?.config?.port} | \n创建时间: | \n{props.data?.create_time} | \n
配置目录: | \n{props.data?.config_path} | \n数据目录: | \n{props.data?.volume_data} | \n
\n {_(\"Apps can be stopped to conserve server resources instead of uninstalling.\")}\n
\n {props.data.status === \"running\" ?\n \n :\n \n }\n \n\n {_(\"This will uninstall the app immediately and remove all its data.The app will be inaccessible.\")}\n
\n \n \nCode : ${code}
;\n if (error) returnError : ${error}
;\n\n //用于根据应用“状态”过滤应用\n const changeStatus = (selectedStatus) => {\n setSelectedStatus(selectedStatus);\n };\n\n //用于根据用户输入搜索应用\n const handleInputChange = (searchString) => {\n setSearchString(searchString);\n }\n\n //用于用户点击应用详情\n const handleClick = (app) => {\n setSelectedApp(app);\n setShowModal(true);\n };\n\n //用于应用为failed时删除应用\n const deleteApp = (app) => {\n setSelectedApp(app);\n setShowUninstallConform(true);\n };\n\n //用于应用为failed时显示错误信息弹窗\n const showError = (app) => {\n setSelectedApp(app);\n setShowErrorInfo(true);\n };\n\n //用于关闭显示错误消息弹窗\n const cancelShowError = () => {\n setShowErrorInfo(false);\n };\n\n //用于取消删除应用\n const canceldeleteApp = () => {\n setShowUninstallConform(false);\n };\n\n //用于关闭应用详情的弹窗\n const handleClose = () => {\n setShowModal(false);\n setSelectedApp(null);\n };\n\n const handleAlertClose = (event, reason) => {\n if (reason === 'clickaway') {\n return;\n }\n setShowAlert(false);\n setAlertMessage(\"\");\n };\n\n //用于立即刷新数据\n const handleDataChange = () => {\n getAllAppsOnce();\n };\n\n //非官方应用的操作\n const appActions = {\n \"Stop\": {\n api: AppStop,\n },\n \"Start\": {\n api: AppStart,\n },\n \"Restart\": {\n api: AppRestart,\n },\n \"Uninstall\": {\n api: AppUninstall,\n }\n }\n\n //处理非官方应用的操作\n const NoOfficialAppClick = async (label, app) => {\n if (label === \"Uninstall\") {\n setSelectedApp(app);\n setShowUninstallConform(true);\n return;\n }\n\n setIsLoading(true);\n try {\n const response = await appActions[label].api({ app_id: app.app_id });\n if (response.data.Error) {\n setShowAlert(true);\n setAlertType(\"error\")\n setAlertMessage(response.data.Error.Message);\n }\n else {\n setShowAlert(true);\n setAlertType(\"success\")\n setAlertMessage(\"执行成功\");\n handleDataChange();\n }\n }\n catch (error) {\n navigate(\"/error-500\");\n }\n finally {\n setIsLoading(false);\n }\n }\n\n return (\n <>\n\n This app is pre-setup with an admin account,Please change the admin password immediately. The initial credentials are:\n
*/}\nName | \nState | \nActions | \nImage | \nCreated | \nIp Address | \nPublished Ports | \n
---|---|---|---|---|---|---|
{container.Names?.[0]?.replace(/^\\/|\\/$/g, '')} | \n\n | \n \n \n {' '}\n \n {\n container.State === \"running\" && (\n \n {' '}\n \n )\n }\n\n | \n{container.Image} | \n{new Date(container.Created * 1000).toLocaleString()} | \n{container.NetworkSettings.Networks[container.HostConfig.NetworkMode].IPAddress} | \n{container.Ports.find(port => port.IP && /^(\\d{1,3}\\.){3}\\d{1,3}$/.test(port.IP))?.PublicPort}:{container.Ports.find(port => port.IP && /^(\\d{1,3}\\.){3}\\d{1,3}$/.test(port.IP))?.PrivatePort} | \n
应用名称: | \n{props.data?.app_name} | \n
应用版本: | \n{props.data?.app_version} | \n
应用端口: | \n{props.data?.config?.port} | \n
创建时间: | \n{props.data?.create_time} | \n
配置目录: | \n{props.data?.config_path} | \n
数据目录: | \n{props.data?.volume_data} | \n
应用名称: | \n{props.data?.app_name} | \n应用版本: | \n{props.data?.app_version} | \n
应用端口: | \n{props.data?.config?.port} | \n创建时间: | \n{props.data?.create_time} | \n
配置目录: | \n{props.data?.config_path} | \n数据目录: | \n{props.data?.volume_data} | \n
\n {_(\"Apps can be stopped to conserve server resources instead of uninstalling.\")}\n
\n {props.data.status === \"running\" ?\n \n :\n \n }\n \n\n {_(\"This will uninstall the app immediately and remove all its data.The app will be inaccessible.\")}\n
\n \n \nCode : ${code}
;\n if (error) returnError : ${error}
;\n\n //用于根据应用“状态”过滤应用\n const changeStatus = (selectedStatus) => {\n setSelectedStatus(selectedStatus);\n };\n\n //用于根据用户输入搜索应用\n const handleInputChange = (searchString) => {\n setSearchString(searchString);\n }\n\n //用于用户点击应用详情\n const handleClick = (app) => {\n setSelectedApp(app);\n setShowModal(true);\n };\n\n //用于应用为failed时删除应用\n const deleteApp = (app) => {\n setSelectedApp(app);\n setShowUninstallConform(true);\n };\n\n //用于应用为failed时显示错误信息弹窗\n const showError = (app) => {\n setSelectedApp(app);\n setShowErrorInfo(true);\n };\n\n //用于关闭显示错误消息弹窗\n const cancelShowError = () => {\n setShowErrorInfo(false);\n };\n\n //用于取消删除应用\n const canceldeleteApp = () => {\n setShowUninstallConform(false);\n };\n\n //用于关闭应用详情的弹窗\n const handleClose = () => {\n setShowModal(false);\n setSelectedApp(null);\n };\n\n const handleAlertClose = (event, reason) => {\n if (reason === 'clickaway') {\n return;\n }\n setShowAlert(false);\n setAlertMessage(\"\");\n };\n\n //用于立即刷新数据\n const handleDataChange = () => {\n getAllAppsOnce();\n };\n\n //非官方应用的操作\n const appActions = {\n \"Stop\": {\n api: AppStop,\n },\n \"Start\": {\n api: AppStart,\n },\n \"Restart\": {\n api: AppRestart,\n },\n \"Uninstall\": {\n api: AppUninstall,\n }\n }\n\n //处理非官方应用的操作\n const NoOfficialAppClick = async (label, app) => {\n if (label === \"Uninstall\") {\n setSelectedApp(app);\n setShowUninstallConform(true);\n return;\n }\n\n setIsLoading(true);\n try {\n const response = await appActions[label].api({ app_id: app.app_id });\n if (response.data.Error) {\n setShowAlert(true);\n setAlertType(\"error\")\n setAlertMessage(response.data.Error.Message);\n }\n else {\n setShowAlert(true);\n setAlertType(\"success\")\n setAlertMessage(\"执行成功\");\n handleDataChange();\n }\n }\n catch (error) {\n navigate(\"/error-500\");\n }\n finally {\n setIsLoading(false);\n }\n }\n\n return (\n <>\nLoading...
;\n\n if (dataLoading) returnError : ${dataError.message}
;\n\n //用于显示应用详情的弹窗\n const handleClick = (product) => {\n setSelectedProduct(product);\n setShowModal(true);\n };\n\n //用于关闭应用详情的弹窗\n const handleClose = () => {\n setShowModal(false);\n setSelectedProduct(null);\n };\n\n //当主目录改变时\n const changeMainCatalog = (selectedMainCatalog) => {\n // 查询主目录下的二级目录\n let updatedData = null;\n // filter\n updatedData =\n selectedMainCatalog === 'All'\n ? []\n : mainCatalogs.filter(c => c.key === selectedMainCatalog)?.[0]?.linkedFrom?.catalogCollection?.items;\n setSubCatalogs(updatedData);\n\n //根据主目录过滤app数据\n let subCatalogApps = null;\n let mainCatalogAllApps = null;\n mainCatalogAllApps = apps.filter(app => app?.catalogCollection?.items.some(sub => sub?.catalogCollection?.items.some(subsub => subsub.key === selectedMainCatalog)));\n subCatalogApps =\n selectedMainCatalog === \"All\"\n ? apps\n : mainCatalogAllApps;\n setAppList(subCatalogApps);\n setAllMainCatalogApps(mainCatalogAllApps);\n setIsAllSelected(false);\n setSearchValue(\"\");\n };\n\n //当子目录改变时,过滤应用数据\n const changeSubCatalog = (selectedSubCatalog) => {\n let updatedData = null;\n updatedData =\n selectedSubCatalog === \"All\"\n ? allMainCatalogApps\n : apps.filter(app => app?.catalogCollection?.items.some(c => c.key === selectedSubCatalog));\n setAppList(updatedData);\n setSearchValue(\"\");\n };\n\n //当搜索框的内容发生改变时,进行app的过滤搜索\n const handleInputChange = (searchString) => {\n setSearchValue(searchString);\n let updatedData = null;\n updatedData =\n searchString === \"\"\n ? apps\n : apps.filter(app => { return app.trademark.toLowerCase().includes(searchString) || app.key.toLowerCase().includes(searchString) });\n\n setAppList(updatedData);\n setIsAllSelected(true);\n setSubCatalogs(null);\n }\n\n return (\n <>\nLoading...
;\n\n if (dataLoading) returnError : ${dataError.message}
;\n\n //用于显示应用详情的弹窗\n const handleClick = (product) => {\n setSelectedProduct(product);\n setShowModal(true);\n };\n\n //用于关闭应用详情的弹窗\n const handleClose = () => {\n setShowModal(false);\n setSelectedProduct(null);\n };\n\n //当主目录改变时\n const changeMainCatalog = (selectedMainCatalog) => {\n // 查询主目录下的二级目录\n let updatedData = null;\n // filter\n updatedData =\n selectedMainCatalog === 'All'\n ? []\n : mainCatalogs.filter(c => c.key === selectedMainCatalog)?.[0]?.linkedFrom?.catalogCollection?.items;\n setSubCatalogs(updatedData);\n\n //根据主目录过滤app数据\n let subCatalogApps = null;\n let mainCatalogAllApps = null;\n mainCatalogAllApps = apps.filter(app => app?.catalogCollection?.items.some(sub => sub?.catalogCollection?.items.some(subsub => subsub.key === selectedMainCatalog)));\n subCatalogApps =\n selectedMainCatalog === \"All\"\n ? apps\n : mainCatalogAllApps;\n setAppList(subCatalogApps);\n setAllMainCatalogApps(mainCatalogAllApps);\n setIsAllSelected(false);\n setSearchValue(\"\");\n };\n\n //当子目录改变时,过滤应用数据\n const changeSubCatalog = (selectedSubCatalog) => {\n let updatedData = null;\n updatedData =\n selectedSubCatalog === \"All\"\n ? allMainCatalogApps\n : apps.filter(app => app?.catalogCollection?.items.some(c => c.key === selectedSubCatalog));\n setAppList(updatedData);\n setSearchValue(\"\");\n };\n\n //当搜索框的内容发生改变时,进行app的过滤搜索\n const handleInputChange = (searchString) => {\n setSearchValue(searchString);\n let updatedData = null;\n updatedData =\n searchString === \"\"\n ? apps\n : apps.filter(app => { return app.trademark.toLowerCase().includes(searchString) || app.key.toLowerCase().includes(searchString) });\n\n setAppList(updatedData);\n setIsAllSelected(true);\n setSubCatalogs(null);\n }\n\n return (\n <>\n