feat(国际化): 新增国际化

This commit is contained in:
Zhunianya
2026-03-19 17:36:53 +08:00
parent 81ca314d93
commit 7709ec6c8c
90 changed files with 4060 additions and 2907 deletions

View File

@@ -130,5 +130,7 @@
"newPassword": "New Password",
"confirmPassword": "Confirm Password",
"batchCancelAuth": "Batch Cancel Authorization",
"cancelAuth": "Cancel Authorization"
"cancelAuth": "Cancel Authorization",
"clean": "Clear",
"cleanSuccess": "Clear Successful"
}

View File

@@ -139,6 +139,12 @@
"device.device-edit.148398-108": "Please enter a valid firmware format, such as: v1.2.3 or 1.2.3",
"device.device-edit.148398-109": "Please enter 9-64 characters for the device number",
"device.device-edit.148398-110": "ICCID",
"device.device-edit.148398-111": "Client ID",
"device.device-edit.148398-112": "MQ Account",
"device.device-edit.148398-113": "MQ Password",
"device.device-edit.148398-114": "Subscribe Topic",
"device.device-edit.148398-115": "Publish Topic",
"device.device-edit.148398-116": "Port",
"device.device-functionlog.399522-0": "Please Select A Device Slave:",
"device.device-functionlog.399522-1": "Please Select A Device Slave",
"device.device-functionlog.399522-2": "Slave Address:$",
@@ -449,6 +455,7 @@
"device.device-timer.433369-90": "The options and values in the execution action cannot be empty",
"device.device-timer.433369-91": "Modified Successfully",
"device.device-timer.433369-92": "New Successfully Added",
"device.device-timer.433369-97": "Please enter an array separated by English commas",
"device.import-record.086254-0": "Equipment Import Record",
"device.import-record.086254-2": "Batch Task Status",
"device.import-record.086254-3": "Start Date",
@@ -955,5 +962,50 @@
"device-bind-sub-device.123456-12": "sub-device configuration",
"device-bind-sub-device.123456-13": "Please go to the product side to bind the sub-product first!",
"device-bind-sub-device.123456-14": "hint",
"device-bind-sub-device.123456-15": "confirm"
"device-bind-sub-device.123456-15": "confirm",
"iot.log.index.902341-0": "Log Name",
"iot.log.index.902341-1": "Please enter log name",
"iot.log.index.902341-2": "Type",
"iot.log.index.902341-3": "Please select type",
"iot.log.index.902341-4": "Log Level",
"iot.log.index.902341-5": "Please enter log level",
"iot.log.index.902341-6": "Device ID",
"iot.log.index.902341-7": "Please enter device ID",
"iot.log.index.902341-8": "Device Name",
"iot.log.index.902341-9": "Please enter device name",
"iot.log.index.902341-10": "User Nickname",
"iot.log.index.902341-11": "Please enter user nickname",
"iot.log.index.902341-12": "Tenant Name",
"iot.log.index.902341-13": "Please enter tenant name",
"iot.log.index.902341-14": "Generate Alert",
"iot.log.index.902341-15": "Please enter whether to generate alert",
"iot.log.index.902341-16": "Alert Handling",
"iot.log.index.902341-17": "Please select alert handling",
"iot.log.index.902341-18": "Value",
"iot.log.index.902341-19": "User ID",
"iot.log.index.902341-20": "Tenant ID",
"iot.log.index.902341-21": "Trigger Source",
"iot.log.index.902341-22": "Handle",
"iot.log.index.902341-23": "Please enter user ID",
"iot.log.index.902341-24": "Please enter tenant ID",
"iot.log.index.902341-25": "Please enter trigger source",
"iot.log.index.902341-26": "Whether to generate alert",
"iot.log.index.902341-27": "Received Log Value",
"iot.log.index.902341-28": "Please enter received log value",
"iot.log.index.902341-29": "Pin to Top",
"iot.log.index.902341-30": "Please enter whether to pin",
"iot.log.index.902341-31": "Whether to Monitor",
"iot.log.index.902341-32": "Please enter whether to monitor",
"iot.log.index.902341-33": "Log name cannot be empty",
"iot.log.index.902341-34": "Type cannot be empty",
"iot.log.index.902341-35": "Log level cannot be empty",
"iot.log.index.902341-36": "Device ID cannot be empty",
"iot.log.index.902341-37": "Device name cannot be empty",
"iot.log.index.902341-38": "User ID cannot be empty",
"iot.log.index.902341-39": "User nickname cannot be empty",
"iot.log.index.902341-40": "Tenant ID cannot be empty",
"iot.log.index.902341-41": "Tenant name cannot be empty",
"iot.log.index.902341-42": "Add Device Log",
"iot.log.index.902341-43": "Edit Device Log",
"iot.log.index.902341-44": "Are you sure to delete the device log with ID {0}?"
}

View File

@@ -0,0 +1,71 @@
{
"home.equip": "Equipment Dashboard",
"home.deviceCount": "Device Count",
"home.monitorCount": "Monitor Data",
"home.productCount": "Product Count",
"home.alertCount": "Alert Count",
"home.functionCount": "Operation Records",
"home.eventCount": "Reported Events",
"home.infoBoard": "Information Board",
"home.notice": "Notice",
"home.information": "Information",
"home.platformName": "FastBee IoT Platform",
"home.licenseNotice": "Open source version uses AGPL-3.0 license, commercial use requires authorization",
"home.openSource": "Open Source Version",
"home.openSourceDesc": "Available for personal learning and use, non-commercial purposes",
"home.commercial": "Commercial Version",
"home.commercialDesc": "Commercial use, with all source code provided, features prioritized over open source version.",
"home.viewDetails": "View Details",
"home.wechatScan": "Scan QR code with WeChat to view mini program",
"home.h5Demo": "Right side is mobile H5 version demo",
"home.officialWebsite": "Official Website",
"home.onlineDoc": "Online Documentation",
"home.contactAuthor": "Contact Author",
"home.qq": "QQ",
"home.sourceCode": "Source Code",
"home.giteeSource": "Gitee Source",
"home.githubSource": "Github Source",
"home.serverName": "Server Name",
"home.javaName": "Java Name",
"home.serverIp": "Server IP",
"home.startTime": "Start Time",
"home.os": "Operating System",
"home.javaVersion": "Java Version",
"home.osArch": "System Architecture",
"home.runTime": "Running Time",
"home.cpuCore": "CPU Cores",
"home.usedMemory": "Used Memory",
"home.memSize": "Memory Size",
"home.jvmTotalMemory": "JVM Total Memory",
"home.deviceDistribution": "Device Distribution",
"home.onlineCount": "Online Count",
"home.deviceName": "Device Name",
"home.deviceSerial": "Device Serial",
"home.deviceStatus": "Device Status",
"home.notActive": "Not Active",
"home.disabled": "Disabled",
"home.online": "Online",
"home.offline": "Offline",
"home.deviceShadow": "Device Shadow",
"home.enabled": "Enabled",
"home.notEnabled": "Not Enabled",
"home.productName": "Product Name",
"home.firmwareVersion": "Firmware Version",
"home.activeTime": "Active Time",
"home.locationWay": "Location Way",
"home.autoLocation": "Auto Location",
"home.deviceLocation": "Device Location",
"home.customLocation": "Custom Location",
"home.unknown": "Unknown",
"home.address": "Address",
"home.cpuUsage": "CPU Usage",
"home.user": "User",
"home.system": "System",
"home.idle": "Idle",
"home.memUsage": "Memory Usage",
"home.used": "Used",
"home.free": "Free",
"home.diskUsage": "Disk Usage",
"home.diskStatus": "Disk Status",
"home.available": "Available"
}

View File

@@ -211,5 +211,10 @@
"oauthLogin.oauth.989807-3": "Authorized...",
"oauthLogin.oauth.989807-4": "deny",
"oauthLogin.oauth.989807-5": "Access to your personal information",
"oauthLogin.oauth.989807-6": "Modify your personal information"
"oauthLogin.oauth.989807-6": "Modify your personal information",
"login.989807-62": "Password must contain at least 2 types of: uppercase letters, lowercase letters, numbers, special characters",
"login.989807-63": "Third-party login is being integrated...",
"register.974236-18": "Congratulations, your account",
"register.974236-19": "registered successfully!",
"register.974236-20": "System Prompt"
}

View File

@@ -0,0 +1,117 @@
{
"monitor.cache.index.501234-0": "Basic Information",
"monitor.cache.index.501234-1": "Redis Version",
"monitor.cache.index.501234-2": "Running Mode",
"monitor.cache.index.501234-3": "Standalone",
"monitor.cache.index.501234-4": "Cluster",
"monitor.cache.index.501234-5": "Port",
"monitor.cache.index.501234-6": "Number of Clients",
"monitor.cache.index.501234-7": "Running Time (Days)",
"monitor.cache.index.501234-8": "Used Memory",
"monitor.cache.index.501234-9": "Used CPU",
"monitor.cache.index.501234-10": "Memory Configuration",
"monitor.cache.index.501234-11": "AOF Enabled",
"monitor.cache.index.501234-12": "Yes",
"monitor.cache.index.501234-13": "No",
"monitor.cache.index.501234-14": "RDB Success",
"monitor.cache.index.501234-15": "Key Count",
"monitor.cache.index.501234-16": "Network In/Out",
"monitor.cache.index.501234-17": "Command Statistics",
"monitor.cache.index.501234-18": "Memory Information",
"monitor.cache.index.501234-19": "Command",
"monitor.cache.index.501234-20": "Peak",
"monitor.cache.index.501234-21": "Memory Consumption",
"monitor.cache.index.501234-22": "Loading cache monitoring data, please wait...",
"monitor.cache.list.501235-0": "Cache List",
"monitor.cache.list.501235-1": "No.",
"monitor.cache.list.501235-2": "Cache Name",
"monitor.cache.list.501235-3": "Remark",
"monitor.cache.list.501235-4": "Operation",
"monitor.cache.list.501235-5": "Key List",
"monitor.cache.list.501235-6": "Cache Key",
"monitor.cache.list.501235-7": "Cache Content",
"monitor.cache.list.501235-8": "Cache Name:",
"monitor.cache.list.501235-9": "Cache Key:",
"monitor.cache.list.501235-10": "Cache Content:",
"monitor.cache.list.501235-11": "Clear All",
"monitor.cache.list.501235-12": "Cache list refreshed successfully",
"monitor.cache.list.501235-13": "Cache name [{0}] cleared successfully",
"monitor.cache.list.501235-14": "Key list refreshed successfully",
"monitor.cache.list.501235-15": "Cache key [{0}] cleared successfully",
"monitor.cache.list.501235-16": "All cache cleared successfully",
"monitor.server.index.501236-0": "Property",
"monitor.server.index.501236-1": "Value",
"monitor.server.index.501236-2": "Number of Cores",
"monitor.server.index.501236-3": "User Usage",
"monitor.server.index.501236-4": "System Usage",
"monitor.server.index.501236-5": "Current Idle Rate",
"monitor.server.index.501236-6": "Memory",
"monitor.server.index.501236-7": "JVM",
"monitor.server.index.501236-8": "Total Memory",
"monitor.server.index.501236-9": "Used Memory",
"monitor.server.index.501236-10": "Free Memory",
"monitor.server.index.501236-11": "Usage Rate",
"monitor.server.index.501236-12": "Server Information",
"monitor.server.index.501236-13": "Server Name",
"monitor.server.index.501236-14": "Operating System",
"monitor.server.index.501236-15": "Server IP",
"monitor.server.index.501236-16": "System Architecture",
"monitor.server.index.501236-17": "Java Virtual Machine Information",
"monitor.server.index.501236-18": "Java Name",
"monitor.server.index.501236-19": "Java Version",
"monitor.server.index.501236-20": "Start Time",
"monitor.server.index.501236-21": "Running Time",
"monitor.server.index.501236-22": "Install Path",
"monitor.server.index.501236-23": "Project Path",
"monitor.server.index.501236-24": "Running Parameters",
"monitor.server.index.501236-25": "Disk Status",
"monitor.server.index.501236-26": "Drive Path",
"monitor.server.index.501236-27": "File System",
"monitor.server.index.501236-28": "Drive Type",
"monitor.server.index.501236-29": "Total Size",
"monitor.server.index.501236-30": "Available Size",
"monitor.server.index.501236-31": "Used Size",
"monitor.server.index.501236-32": "Used Percentage",
"monitor.server.index.501236-33": "Loading server monitoring data, please wait...",
"monitor.jobLog.670911-0": "Task Name",
"monitor.jobLog.670911-1": "Please enter task name",
"monitor.jobLog.670911-2": "Task Group",
"monitor.jobLog.670911-3": "Please select task group",
"monitor.jobLog.670911-4": "Execution Status",
"monitor.jobLog.670911-5": "Please select execution status",
"monitor.jobLog.670911-6": "Execution Time",
"monitor.jobLog.670911-7": "Start Date",
"monitor.jobLog.670911-8": "End Date",
"monitor.jobLog.670911-9": "Log ID",
"monitor.jobLog.670911-10": "Invoke Target",
"monitor.jobLog.670911-11": "Log Message",
"monitor.jobLog.670911-12": "Schedule Log Details",
"monitor.jobLog.670911-13": "Log No.",
"monitor.jobLog.670911-14": "Task Group",
"monitor.jobLog.670911-15": "Execution Time",
"monitor.jobLog.670911-16": "Invoke Method",
"monitor.jobLog.670911-17": "Normal",
"monitor.jobLog.670911-18": "Failed",
"monitor.jobLog.670911-19": "Exception Info",
"monitor.jobLog.670911-20": "Are you sure to delete log ID \"{0}\"?",
"monitor.jobLog.670911-21": "Are you sure to clear all schedule logs?",
"monitor.logininfor.670912-0": "Login Address",
"monitor.logininfor.670912-1": "Please enter login address",
"monitor.logininfor.670912-2": "User Name",
"monitor.logininfor.670912-3": "Please enter user name",
"monitor.logininfor.670912-4": "Login Status",
"monitor.logininfor.670912-5": "Please select login status",
"monitor.logininfor.670912-6": "Login Time",
"monitor.logininfor.670912-7": "Start Date",
"monitor.logininfor.670912-8": "End Date",
"monitor.logininfor.670912-9": "Unlock",
"monitor.logininfor.670912-10": "Info ID",
"monitor.logininfor.670912-11": "Login Location",
"monitor.logininfor.670912-12": "Browser",
"monitor.logininfor.670912-13": "Operating System",
"monitor.logininfor.670912-14": "Message",
"monitor.logininfor.670912-15": "Are you sure to delete info ID \"{0}\"?",
"monitor.logininfor.670912-16": "Are you sure to clear all login logs?",
"monitor.logininfor.670912-17": "Are you sure to unlock user \"{0}\"?",
"monitor.logininfor.670912-18": "User {0} unlocked successfully"
}

View File

@@ -39,6 +39,9 @@
"product.index.091251-39": "Are you sure to delete the data item with product number {0}?",
"product.index.091251-40": "Scada Design",
"product.index.091251-41": "The configuration for this product has not yet been created.",
"product.index.091251-47": "System",
"product.index.091251-48": "Details",
"product.index.091251-49": "Modify",
"product.index.091251-42": "Scada Sharing",
"product.index.091251-43": "Download the JSON template",
"product.index.091251-44": "Import products",
@@ -122,6 +125,7 @@
"product.product-authorize.314975-66": "Copy successful!",
"product.product-authorize.314975-67": "Fail",
"product.product-authorize.314975-68": "Copy failed!",
"product.product-authorize.314975-69": "Device Authorization",
"product.product-edit.473153-0": "Basic information",
"product.product-edit.473153-1": "Product Name",
"product.product-edit.473153-2": "Please enter the product name",
@@ -215,6 +219,10 @@
"product.product-edit.473153-93": "Verify your account",
"product.product-edit.473153-94": "Authentication password",
"product.product-edit.473153-95": "Authentication key",
"product.product-edit.473153-96": "Enable Authorization",
"product.product-edit.473153-97": "Encoding Protocol",
"product.product-edit.473153-98": "Please select device type",
"product.product-edit.473153-99": "Added successfully, you can start defining the object model or configuration",
"product.product-firmware.420545-0": "Add",
"product.product-firmware.420545-1": "Refresh",
"product.product-firmware.420545-2": "Firmware Name",
@@ -399,6 +407,8 @@
"product.product-things-model.142341-140": "Topped",
"product.product-things-model.142341-141": "This is already the first item",
"product.product-things-model.142341-142": "This is the last item",
"product.product-things-model.142341-143": "Please re-enter the value range, the maximum value cannot be less than the minimum value!",
"product.product-things-model.142341-144": "The value range must be a decimal, please re-enter!",
"product.product-modbus.562372-0": "Configuration of gateway sub devices",
"product.product-modbus.562372-1": "Configure default sub device addresses and polling methods for gateway sub devices",
"product.product-modbus.562372-2": "Edit device configuration",

View File

@@ -289,5 +289,50 @@
"scene.configList.326501-0": "Alert Config List",
"scene.configList.326501-1": "Pleace enter the alert name",
"scene.configList.326501-2": "The end user cannot bind the alarm",
"scene.configList.326501-3": "Success"
"scene.configList.326501-3": "Success",
"script.index.470901-0": "Script Name",
"script.index.470901-1": "Please enter the script name",
"script.index.470901-2": "Belonging Product",
"script.index.470901-3": "Please select a product",
"script.index.470901-4": "Select Product",
"script.index.470901-5": "Script Action",
"script.index.470901-6": "Please select script action",
"script.index.470901-7": "Script Language",
"script.index.470901-8": "Status",
"script.index.470901-9": "Execution Order",
"script.index.470901-10": "Please enter execution order",
"script.index.470901-11": "Active",
"script.index.470901-12": "Paused",
"script.index.470901-13": "Loading",
"script.index.470901-14": "Edit Rule Script",
"script.index.470901-15": "Modify Rule Engine Script",
"script.index.470901-16": "Script Log",
"script.index.470901-17": "Script using Groovy engine, view tutorial>>>",
"script.index.470901-18": "Verify",
"script.index.470901-19": "Modify",
"script.index.470901-20": "Cancel",
"script.index.470901-21": "Close",
"script.index.470901-22": "The script identifier can only contain letters and numbers, starting with a letter",
"script.index.470901-23": "Log",
"script.index.470901-24": "View",
"script.index.470901-25": "Added Successfully",
"script.index.470901-26": "Modified Successfully",
"script.index.470901-27": "Deleted Successfully",
"script.index.470901-28": "Are you sure to delete the rule engine script with ID \"{0}\"?",
"script.index.470901-29": "Script ID cannot be empty",
"script.index.470901-30": "Product cannot be empty",
"script.index.470901-31": "Script name cannot be empty",
"productList.index.470902-0": "Select Product",
"productList.index.470902-1": "Product Name",
"productList.index.470902-2": "Please enter the product name",
"productList.index.470902-3": "Category Name",
"productList.index.470902-4": "Tenant Name",
"productList.index.470902-5": "Authorization Code",
"productList.index.470902-6": "Enabled",
"productList.index.470902-7": "Not Enabled",
"productList.index.470902-8": "Authentication Method",
"productList.index.470902-9": "Network Method",
"productList.index.470902-10": "Create Time",
"productList.index.470902-11": "Confirm",
"productList.index.470902-12": "Close"
}

View File

@@ -129,6 +129,7 @@
"sip.mediaServerEdit.998534-26": "Successfully configured address connection",
"sip.mediaServerEdit.998534-27": "Unable to connect to configured address",
"sip.mediaServerEdit.998534-28": "The port number should be between -65535",
"sip.mediaServerEdit.998534-31": "Please enter secret",
"sip.mediaServer.998535-0": "Add nodes",
"sip.mediaServer.998535-1": "Configuration Name",
"sip.mediaServer.998535-2": "Server IP",
@@ -158,6 +159,7 @@
"sip.sipConfig.998537-8": "The server domain cannot be empty",
"sip.sipConfig.998537-9": "Server sipid cannot be empty",
"sip.sipConfig.998537-10": "The SIP authentication password cannot be empty",
"sip.sipConfig.998537-11": "GB28181 Protocol",
"sip.sipidGen.998538-0": "administrative division",
"sip.sipidGen.998538-1": "Generate device number and channel",
"sip.sipidGen.998538-2": "Device number and channel have been generated",

View File

@@ -25,6 +25,9 @@
"system.user.index.resetPwdConfirm": "Please enter new password for {0}",
"system.user.index.enable": "Enable",
"system.user.index.disable": "Disable",
"system.user.index.userNameLength": "User name length must be between 2 and 20",
"system.user.index.passwordLength": "User password length must be between 5 and 20",
"system.user.index.confirmStatusChange": "Are you sure to \"{0}\" \"{1}\" user?",
"system.user.profile.nickNameRequired": "Nick name cannot be empty",
"system.user.profile.emailRequired": "Email cannot be empty",
"system.user.profile.emailFormat": "Please enter correct email address",
@@ -57,6 +60,8 @@
"system.user.profile.phoneNumber": "Phone Number",
"system.user.profile.emailAddress": "Email",
"system.user.profile.gender": "Gender",
"system.user.profile.passwordLength": "Length must be between 6 and 20 characters",
"system.user.profile.passwordStrength": "Password must contain at least 2 types of: uppercase, lowercase, numbers, special characters",
"system.user.authRole.nickName": "Nick Name",
"system.user.authRole.loginAccount": "Login Account",
"system.user.authRole.index": "Index",

View File

@@ -165,5 +165,13 @@
"template.paramter.038405-57": "close",
"template.paramter.038405-58": "open",
"template.paramter.038405-59": "low",
"template.paramter.038405-60": "high"
"template.paramter.038405-60": "high",
"template.index.891112-125": "Please re-enter the value range. The maximum value cannot be less than the minimum value!",
"template.index.891112-126": "The value range must be a decimal. Please re-enter!",
"template.index.891112-127": "Parameter identifier {0} is duplicated",
"template.index.891112-128": "Modified successfully",
"template.index.891112-129": "Added successfully",
"template.index.891112-130": "Deleted successfully",
"template.index.891112-131": "Edit",
"template.index.891112-132": "Minimum value must be decimal"
}

View File

@@ -0,0 +1,276 @@
{
"tool.import.670901-0": "Import Table",
"tool.import.670901-1": "Data Source",
"tool.import.670901-2": "Please select data source",
"tool.import.670901-3": "Table Name",
"tool.import.670901-4": "Please enter table name",
"tool.import.670901-5": "Table Description",
"tool.import.670901-6": "Please enter table description",
"tool.import.670901-7": "Create Time",
"tool.import.670901-8": "Update Time",
"tool.import.670901-9": "Please select tables to import",
"tool.genInfo.670902-0": "Generate Template",
"tool.genInfo.670902-1": "Single Table (CRUD)",
"tool.genInfo.670902-2": "Tree Table (CRUD)",
"tool.genInfo.670902-3": "Master-Sub Table (CRUD)",
"tool.genInfo.670902-4": "Frontend Type",
"tool.genInfo.670902-5": "Vue2 Element UI Template",
"tool.genInfo.670902-6": "Vue3 Element Plus Template",
"tool.genInfo.670902-7": "Package Path",
"tool.genInfo.670902-8": "Generate under which java package, e.g. com.ruoyi.system",
"tool.genInfo.670902-9": "Module Name",
"tool.genInfo.670902-10": "Can be understood as subsystem name, e.g. system",
"tool.genInfo.670902-11": "Business Name",
"tool.genInfo.670902-12": "Can be understood as function English name, e.g. user",
"tool.genInfo.670902-13": "Function Name",
"tool.genInfo.670902-14": "Used for class description, e.g. User",
"tool.genInfo.670902-15": "Code Generation Method",
"tool.genInfo.670902-16": "Default is zip compressed package download, can also customize generation path",
"tool.genInfo.670902-17": "Zip Package",
"tool.genInfo.670902-18": "Custom Path",
"tool.genInfo.670902-19": "Parent Menu",
"tool.genInfo.670902-20": "Assign to specified menu, e.g. System Management",
"tool.genInfo.670902-21": "Please select system menu",
"tool.genInfo.670902-22": "Fill in absolute disk path, if not filled, generate under current Web project",
"tool.genInfo.670902-23": "Recent Path Quick Select",
"tool.genInfo.670902-24": "Restore default generation base path",
"tool.genInfo.670902-25": "Other Information",
"tool.genInfo.670902-26": "Tree Code Field",
"tool.genInfo.670902-27": "Tree display code field name, e.g. dept_id",
"tool.genInfo.670902-28": "Please select",
"tool.genInfo.670902-29": "Tree Parent Code Field",
"tool.genInfo.670902-30": "Tree display parent code field name, e.g. parent_id",
"tool.genInfo.670902-31": "Tree Name Field",
"tool.genInfo.670902-32": "Tree node display name field name, e.g. dept_name",
"tool.genInfo.670902-33": "Association Information",
"tool.genInfo.670902-34": "Associated Sub Table Name",
"tool.genInfo.670902-35": "Associated sub table name, e.g. sys_user",
"tool.genInfo.670902-36": "Sub Table Foreign Key Name",
"tool.genInfo.670902-37": "Sub table associated foreign key name, e.g. user_id",
"tool.genInfo.670902-38": "Please select generate template",
"tool.genInfo.670902-39": "Please enter package path",
"tool.genInfo.670902-40": "Please enter module name",
"tool.genInfo.670902-41": "Please enter business name",
"tool.genInfo.670902-42": "Please enter function name",
"tool.editTable.670903-0": "Basic Information",
"tool.editTable.670903-1": "Column Information",
"tool.editTable.670903-2": "Generate Information",
"tool.editTable.670903-3": "No.",
"tool.editTable.670903-4": "Column Name",
"tool.editTable.670903-5": "Column Description",
"tool.editTable.670903-6": "Physical Type",
"tool.editTable.670903-7": "Java Type",
"tool.editTable.670903-8": "Java Property",
"tool.editTable.670903-9": "Insert",
"tool.editTable.670903-10": "Edit",
"tool.editTable.670903-11": "List",
"tool.editTable.670903-12": "Query",
"tool.editTable.670903-13": "Query Method",
"tool.editTable.670903-14": "Required",
"tool.editTable.670903-15": "Display Type",
"tool.editTable.670903-16": "Input Box",
"tool.editTable.670903-17": "Textarea",
"tool.editTable.670903-18": "Select",
"tool.editTable.670903-19": "Radio",
"tool.editTable.670903-20": "Checkbox",
"tool.editTable.670903-21": "Date Control",
"tool.editTable.670903-22": "Image Upload",
"tool.editTable.670903-23": "File Upload",
"tool.editTable.670903-24": "Rich Text Control",
"tool.editTable.670903-25": "Dict Type",
"tool.editTable.670903-26": "Please select",
"tool.editTable.670903-27": "Submit",
"tool.editTable.670903-28": "Back",
"tool.editTable.670903-29": "Form validation failed, please check and resubmit",
"tool.createTable.670904-0": "Create Table",
"tool.createTable.670904-1": "Create table statement (supports multiple statements):",
"tool.createTable.670904-2": "Please enter text",
"tool.createTable.670904-3": "Please enter table creation statement",
"tool.basicInfo.670905-0": "Table Name",
"tool.basicInfo.670905-1": "Please enter repository name",
"tool.basicInfo.670905-2": "Table Description",
"tool.basicInfo.670905-3": "Please enter",
"tool.basicInfo.670905-4": "Entity Class Name",
"tool.basicInfo.670905-5": "Author",
"tool.basicInfo.670905-6": "Remark",
"tool.basicInfo.670905-7": "Please enter table name",
"tool.basicInfo.670905-8": "Please enter table description",
"tool.basicInfo.670905-9": "Please enter entity class name",
"tool.basicInfo.670905-10": "Please enter author",
"tool.build.index.670906-0": "Form Generator",
"tool.build.index.670906-1": "Input Components",
"tool.build.index.670906-2": "Select Components",
"tool.build.index.670906-3": "Layout Components",
"tool.build.index.670906-4": "Export Vue File",
"tool.build.index.670906-5": "Copy Code",
"tool.build.index.670906-6": "Clear",
"tool.build.index.670906-7": "Drag or click components from the left to design form",
"tool.build.index.670906-8": "Success",
"tool.build.index.670906-9": "Code has been copied to clipboard",
"tool.build.index.670906-10": "Code copy failed",
"tool.build.index.670906-11": "Are you sure to clear all components?",
"tool.build.index.670906-12": "Tip",
"tool.rightPanel.670907-0": "Component Properties",
"tool.rightPanel.670907-1": "Form Properties",
"tool.rightPanel.670907-2": "View Component Documentation",
"tool.rightPanel.670907-3": "Component Type",
"tool.rightPanel.670907-4": "Please select component type",
"tool.rightPanel.670907-5": "Field Name",
"tool.rightPanel.670907-6": "Please enter field name (v-model)",
"tool.rightPanel.670907-7": "Component Name",
"tool.rightPanel.670907-8": "Label",
"tool.rightPanel.670907-9": "Please enter label",
"tool.rightPanel.670907-10": "Placeholder",
"tool.rightPanel.670907-11": "Please enter placeholder",
"tool.rightPanel.670907-12": "Start Placeholder",
"tool.rightPanel.670907-13": "End Placeholder",
"tool.rightPanel.670907-14": "Form Grid",
"tool.rightPanel.670907-15": "Grid Gap",
"tool.rightPanel.670907-16": "Layout Mode",
"tool.rightPanel.670907-17": "Justify Content",
"tool.rightPanel.670907-18": "Please select justify content",
"tool.rightPanel.670907-19": "Align Items",
"tool.rightPanel.670907-20": "Label Width",
"tool.rightPanel.670907-21": "Please enter label width",
"tool.rightPanel.670907-22": "Component Width",
"tool.rightPanel.670907-23": "Please enter component width",
"tool.rightPanel.670907-24": "Default Value",
"tool.rightPanel.670907-25": "Please enter default value",
"tool.rightPanel.670907-26": "Min Selection",
"tool.rightPanel.670907-27": "Max Selection",
"tool.rightPanel.670907-28": "Prefix",
"tool.rightPanel.670907-29": "Please enter prefix",
"tool.rightPanel.670907-30": "Suffix",
"tool.rightPanel.670907-31": "Please enter suffix",
"tool.rightPanel.670907-32": "Prefix Icon",
"tool.rightPanel.670907-33": "Please enter prefix icon name",
"tool.rightPanel.670907-34": "Select",
"tool.rightPanel.670907-35": "Suffix Icon",
"tool.rightPanel.670907-36": "Please enter suffix icon name",
"tool.rightPanel.670907-37": "Option Separator",
"tool.rightPanel.670907-38": "Please enter option separator",
"tool.rightPanel.670907-39": "Min Rows",
"tool.rightPanel.670907-40": "Max Rows",
"tool.rightPanel.670907-41": "Min Value",
"tool.rightPanel.670907-42": "Max Value",
"tool.rightPanel.670907-43": "Step",
"tool.rightPanel.670907-44": "Precision",
"tool.rightPanel.670907-45": "Controls Position",
"tool.rightPanel.670907-46": "Default",
"tool.rightPanel.670907-47": "Right",
"tool.rightPanel.670907-48": "Max Input",
"tool.rightPanel.670907-49": "characters",
"tool.rightPanel.670907-50": "Active Text",
"tool.rightPanel.670907-51": "Please enter active text",
"tool.rightPanel.670907-52": "Inactive Text",
"tool.rightPanel.670907-53": "Please enter inactive text",
"tool.rightPanel.670907-54": "Active Value",
"tool.rightPanel.670907-55": "Please enter active value",
"tool.rightPanel.670907-56": "Inactive Value",
"tool.rightPanel.670907-57": "Please enter inactive value",
"tool.rightPanel.670907-58": "Date Type",
"tool.rightPanel.670907-59": "Please select date type",
"tool.rightPanel.670907-60": "File Field Name",
"tool.rightPanel.670907-61": "Please enter upload file field name",
"tool.rightPanel.670907-62": "File Type",
"tool.rightPanel.670907-63": "Please select file type",
"tool.rightPanel.670907-64": "Image",
"tool.rightPanel.670907-65": "Video",
"tool.rightPanel.670907-66": "Audio",
"tool.rightPanel.670907-67": "File Size",
"tool.rightPanel.670907-68": "Please enter file size",
"tool.rightPanel.670907-69": "Upload Address",
"tool.rightPanel.670907-70": "Please enter upload address",
"tool.rightPanel.670907-71": "List Type",
"tool.rightPanel.670907-72": "Button Text",
"tool.rightPanel.670907-73": "Please enter button text",
"tool.rightPanel.670907-74": "Separator",
"tool.rightPanel.670907-75": "Please enter separator",
"tool.rightPanel.670907-76": "Time Range",
"tool.rightPanel.670907-77": "Please enter time range",
"tool.rightPanel.670907-78": "Date Format",
"tool.rightPanel.670907-79": "Please enter date format",
"tool.rightPanel.670907-80": "Options",
"tool.rightPanel.670907-81": "Option Name",
"tool.rightPanel.670907-82": "Option Value",
"tool.rightPanel.670907-83": "Add Option",
"tool.rightPanel.670907-84": "Data Type",
"tool.rightPanel.670907-85": "Dynamic Data",
"tool.rightPanel.670907-86": "Static Data",
"tool.rightPanel.670907-87": "Label Key",
"tool.rightPanel.670907-88": "Please enter label key",
"tool.rightPanel.670907-89": "Value Key",
"tool.rightPanel.670907-90": "Please enter value key",
"tool.rightPanel.670907-91": "Children Key",
"tool.rightPanel.670907-92": "Please enter children key",
"tool.rightPanel.670907-93": "Add Parent",
"tool.rightPanel.670907-94": "Option Style",
"tool.rightPanel.670907-95": "Button",
"tool.rightPanel.670907-96": "Active Color",
"tool.rightPanel.670907-97": "Inactive Color",
"tool.rightPanel.670907-98": "Allow Half",
"tool.rightPanel.670907-99": "Show Text",
"tool.rightPanel.670907-100": "Show Score",
"tool.rightPanel.670907-101": "Show Stops",
"tool.rightPanel.670907-102": "Range Selection",
"tool.rightPanel.670907-103": "Show Border",
"tool.rightPanel.670907-104": "Color Format",
"tool.rightPanel.670907-105": "Please select color format",
"tool.rightPanel.670907-106": "Option Size",
"tool.rightPanel.670907-107": "Medium",
"tool.rightPanel.670907-108": "Small",
"tool.rightPanel.670907-109": "Mini",
"tool.rightPanel.670907-110": "Show Word Limit",
"tool.rightPanel.670907-111": "Step Strictly",
"tool.rightPanel.670907-112": "Multiple Selection",
"tool.rightPanel.670907-113": "Show All Levels",
"tool.rightPanel.670907-114": "Filterable",
"tool.rightPanel.670907-115": "Clearable",
"tool.rightPanel.670907-116": "Show Tip",
"tool.rightPanel.670907-117": "Multiple Files",
"tool.rightPanel.670907-118": "Auto Upload",
"tool.rightPanel.670907-119": "Readonly",
"tool.rightPanel.670907-120": "Disabled",
"tool.rightPanel.670907-121": "Searchable",
"tool.rightPanel.670907-122": "Required",
"tool.rightPanel.670907-123": "Layout Structure Tree",
"tool.rightPanel.670907-124": "Regular Validation",
"tool.rightPanel.670907-125": "Expression",
"tool.rightPanel.670907-126": "Please enter regex",
"tool.rightPanel.670907-127": "Error Message",
"tool.rightPanel.670907-128": "Please enter error message",
"tool.rightPanel.670907-129": "Add Rule",
"tool.rightPanel.670907-130": "Form Name",
"tool.rightPanel.670907-131": "Please enter form name (ref)",
"tool.rightPanel.670907-132": "Form Model",
"tool.rightPanel.670907-133": "Please enter data model",
"tool.rightPanel.670907-134": "Validation Model",
"tool.rightPanel.670907-135": "Please enter validation model",
"tool.rightPanel.670907-136": "Form Size",
"tool.rightPanel.670907-137": "Label Position",
"tool.rightPanel.670907-138": "Left",
"tool.rightPanel.670907-139": "Right",
"tool.rightPanel.670907-140": "Top",
"tool.rightPanel.670907-141": "Disable Form",
"tool.rightPanel.670907-142": "Form Buttons",
"tool.rightPanel.670907-143": "Show Unfocused Component Border",
"tool.rightPanel.670907-144": "Add Option",
"tool.treeNode.670908-0": "Option Name",
"tool.treeNode.670908-1": "Please enter option name",
"tool.treeNode.670908-2": "Option Value",
"tool.treeNode.670908-3": "Please enter option value",
"tool.treeNode.670908-4": "String",
"tool.treeNode.670908-5": "Number",
"tool.treeNode.670908-6": "Confirm",
"tool.treeNode.670908-7": "Cancel",
"tool.icons.670909-0": "Select Icon",
"tool.icons.670909-1": "Please enter icon name",
"tool.build.index.670906-13": "Copy",
"tool.build.index.670906-14": "Delete",
"tool.codeType.670910-0": "Generate Type",
"tool.codeType.670910-1": "File Name",
"tool.codeType.670910-2": "Please enter file name",
"tool.codeType.670910-3": "Page",
"tool.codeType.670910-4": "Dialog",
"tool.codeType.670910-5": "Generate type cannot be empty"
}

View File

@@ -130,5 +130,7 @@
"newPassword": "新密码",
"confirmPassword": "确认密码",
"batchCancelAuth": "批量取消授权",
"cancelAuth": "取消授权"
"cancelAuth": "取消授权",
"clean": "清空",
"cleanSuccess": "清空成功"
}

View File

@@ -139,6 +139,12 @@
"device.device-edit.148398-108": "请输入有效的固件号格式v1.2.3 或 1.2.3",
"device.device-edit.148398-109": "请输入9-64位字符之间的设备编号",
"device.device-edit.148398-110": "ICCID",
"device.device-edit.148398-111": "客户端ID",
"device.device-edit.148398-112": "MQ账号",
"device.device-edit.148398-113": "MQ密码",
"device.device-edit.148398-114": "订阅主题",
"device.device-edit.148398-115": "发布主题",
"device.device-edit.148398-116": "连接端口",
"device.device-functionlog.399522-0": "请选择设备从机:",
"device.device-functionlog.399522-1": "请选择设备从机",
"device.device-functionlog.399522-2": "从机地址:$",
@@ -449,6 +455,7 @@
"device.device-timer.433369-90": "执行动作中的选项和值不能为空",
"device.device-timer.433369-91": "修改成功",
"device.device-timer.433369-92": "新增成功",
"device.device-timer.433369-97": "请输入英文逗号分隔的数组",
"device.import-record.086254-0": "设备导入记录",
"device.import-record.086254-2": "批次任务状态",
"device.import-record.086254-3": "开始日期",
@@ -955,5 +962,50 @@
"device-bind-sub-device.123456-12": "子设备配置",
"device-bind-sub-device.123456-13": "请先去产品侧绑定子产品!",
"device-bind-sub-device.123456-14": "提示",
"device-bind-sub-device.123456-15": "确定"
"device-bind-sub-device.123456-15": "确定",
"iot.log.index.902341-0": "日志名称",
"iot.log.index.902341-1": "请输入日志名称",
"iot.log.index.902341-2": "类型",
"iot.log.index.902341-3": "请选择类型",
"iot.log.index.902341-4": "日志级别",
"iot.log.index.902341-5": "请输入日志级别",
"iot.log.index.902341-6": "设备ID",
"iot.log.index.902341-7": "请输入设备ID",
"iot.log.index.902341-8": "设备名称",
"iot.log.index.902341-9": "请输入设备名称",
"iot.log.index.902341-10": "用户昵称",
"iot.log.index.902341-11": "请输入用户昵称",
"iot.log.index.902341-12": "租户名称",
"iot.log.index.902341-13": "请输入租户名称",
"iot.log.index.902341-14": "生成告警",
"iot.log.index.902341-15": "请输入是否生成告警",
"iot.log.index.902341-16": "告警处理",
"iot.log.index.902341-17": "请选择告警处理",
"iot.log.index.902341-18": "值",
"iot.log.index.902341-19": "用户ID",
"iot.log.index.902341-20": "租户ID",
"iot.log.index.902341-21": "触发源",
"iot.log.index.902341-22": "处理",
"iot.log.index.902341-23": "请输入用户ID",
"iot.log.index.902341-24": "请输入租户ID",
"iot.log.index.902341-25": "请输入触发源",
"iot.log.index.902341-26": "是否生成告警",
"iot.log.index.902341-27": "日志收到的值",
"iot.log.index.902341-28": "请输入日志收到的值",
"iot.log.index.902341-29": "是否置顶",
"iot.log.index.902341-30": "请输入是否置顶",
"iot.log.index.902341-31": "是否监测",
"iot.log.index.902341-32": "请输入是否监测",
"iot.log.index.902341-33": "日志名称不能为空",
"iot.log.index.902341-34": "类型不能为空",
"iot.log.index.902341-35": "日志级别不能为空",
"iot.log.index.902341-36": "设备ID不能为空",
"iot.log.index.902341-37": "设备名称不能为空",
"iot.log.index.902341-38": "用户ID不能为空",
"iot.log.index.902341-39": "用户昵称不能为空",
"iot.log.index.902341-40": "租户ID不能为空",
"iot.log.index.902341-41": "租户名称不能为空",
"iot.log.index.902341-42": "添加设备日志",
"iot.log.index.902341-43": "修改设备日志",
"iot.log.index.902341-44": "是否确认删除设备日志编号为{0}的数据项?"
}

View File

@@ -0,0 +1,71 @@
{
"home.equip": "设备看板",
"home.deviceCount": "设备数量",
"home.monitorCount": "监测数据",
"home.productCount": "产品数量",
"home.alertCount": "告警数量",
"home.functionCount": "操作记录",
"home.eventCount": "上报事件",
"home.infoBoard": "信息栏",
"home.notice": "公告",
"home.information": "信息",
"home.platformName": "FastBee物联网平台",
"home.licenseNotice": "开源版本采用AGPL-3.0许可协议,商用需要获得授权",
"home.openSource": "开源版本",
"home.openSourceDesc": "可用于个人学习和使用,非商业用途",
"home.commercial": "商业版本",
"home.commercialDesc": "商业用途,并提供所有源码,功能优先开源版本发布。",
"home.viewDetails": "查看详情",
"home.wechatScan": "微信扫一扫,查看小程序端",
"home.h5Demo": "右侧是移动端H5版本演示",
"home.officialWebsite": "官方网站",
"home.onlineDoc": "在线文档",
"home.contactAuthor": "联系作者",
"home.qq": "QQ",
"home.sourceCode": "系统源码",
"home.giteeSource": "Gitee源码",
"home.githubSource": "Github源码",
"home.serverName": "服务器名",
"home.javaName": "Java名称",
"home.serverIp": "服务器IP",
"home.startTime": "启动时间",
"home.os": "操作系统",
"home.javaVersion": "Java版本",
"home.osArch": "系统架构",
"home.runTime": "运行时长",
"home.cpuCore": "CPU核心",
"home.usedMemory": "占用内存",
"home.memSize": "内存大小",
"home.jvmTotalMemory": "JVM总内存",
"home.deviceDistribution": "设备分布",
"home.onlineCount": "在线数",
"home.deviceName": "设备名称",
"home.deviceSerial": "设备编号",
"home.deviceStatus": "设备状态",
"home.notActive": "未激活",
"home.disabled": "禁用",
"home.online": "在线",
"home.offline": "离线",
"home.deviceShadow": "设备影子",
"home.enabled": "启用",
"home.notEnabled": "未启用",
"home.productName": "产品名称",
"home.firmwareVersion": "固件版本",
"home.activeTime": "激活时间",
"home.locationWay": "定位方式",
"home.autoLocation": "自动定位",
"home.deviceLocation": "设备定位",
"home.customLocation": "自定义位置",
"home.unknown": "未知",
"home.address": "所在地址",
"home.cpuUsage": "CPU使用率",
"home.user": "用户",
"home.system": "系统",
"home.idle": "空闲",
"home.memUsage": "内存使用率",
"home.used": "已用",
"home.free": "剩余",
"home.diskUsage": "系统盘使用率",
"home.diskStatus": "磁盘状态",
"home.available": "可用"
}

View File

@@ -211,5 +211,10 @@
"oauthLogin.oauth.989807-3": "授权中...",
"oauthLogin.oauth.989807-4": "拒绝",
"oauthLogin.oauth.989807-5": "访问你的个人信息",
"oauthLogin.oauth.989807-6": "修改你的个人信息"
"oauthLogin.oauth.989807-6": "修改你的个人信息",
"login.989807-62": "密码须由大写,小写字母,数字,特殊符中的2种及以上类型组成",
"login.989807-63": "第三方登录正在集成中...",
"register.974236-18": "恭喜你,您的账号",
"register.974236-19": "注册成功!",
"register.974236-20": "系统提示"
}

View File

@@ -0,0 +1,117 @@
{
"monitor.cache.index.501234-0": "基本信息",
"monitor.cache.index.501234-1": "Redis版本",
"monitor.cache.index.501234-2": "运行模式",
"monitor.cache.index.501234-3": "单机",
"monitor.cache.index.501234-4": "集群",
"monitor.cache.index.501234-5": "端口",
"monitor.cache.index.501234-6": "客户端数",
"monitor.cache.index.501234-7": "运行时间(天)",
"monitor.cache.index.501234-8": "使用内存",
"monitor.cache.index.501234-9": "使用CPU",
"monitor.cache.index.501234-10": "内存配置",
"monitor.cache.index.501234-11": "AOF是否开启",
"monitor.cache.index.501234-12": "是",
"monitor.cache.index.501234-13": "否",
"monitor.cache.index.501234-14": "RDB是否成功",
"monitor.cache.index.501234-15": "Key数量",
"monitor.cache.index.501234-16": "网络入口/出口",
"monitor.cache.index.501234-17": "命令统计",
"monitor.cache.index.501234-18": "内存信息",
"monitor.cache.index.501234-19": "命令",
"monitor.cache.index.501234-20": "峰值",
"monitor.cache.index.501234-21": "内存消耗",
"monitor.cache.index.501234-22": "正在加载缓存监控数据,请稍候!",
"monitor.cache.list.501235-0": "缓存列表",
"monitor.cache.list.501235-1": "序号",
"monitor.cache.list.501235-2": "缓存名称",
"monitor.cache.list.501235-3": "备注",
"monitor.cache.list.501235-4": "操作",
"monitor.cache.list.501235-5": "键名列表",
"monitor.cache.list.501235-6": "缓存键名",
"monitor.cache.list.501235-7": "缓存内容",
"monitor.cache.list.501235-8": "缓存名称:",
"monitor.cache.list.501235-9": "缓存键名:",
"monitor.cache.list.501235-10": "缓存内容:",
"monitor.cache.list.501235-11": "清理全部",
"monitor.cache.list.501235-12": "刷新缓存列表成功",
"monitor.cache.list.501235-13": "清理缓存名称[{0}]成功",
"monitor.cache.list.501235-14": "刷新键名列表成功",
"monitor.cache.list.501235-15": "清理缓存键名[{0}]成功",
"monitor.cache.list.501235-16": "清理全部缓存成功",
"monitor.server.index.501236-0": "属性",
"monitor.server.index.501236-1": "值",
"monitor.server.index.501236-2": "核心数",
"monitor.server.index.501236-3": "用户使用率",
"monitor.server.index.501236-4": "系统使用率",
"monitor.server.index.501236-5": "当前空闲率",
"monitor.server.index.501236-6": "内存",
"monitor.server.index.501236-7": "JVM",
"monitor.server.index.501236-8": "总内存",
"monitor.server.index.501236-9": "已用内存",
"monitor.server.index.501236-10": "剩余内存",
"monitor.server.index.501236-11": "使用率",
"monitor.server.index.501236-12": "服务器信息",
"monitor.server.index.501236-13": "服务器名称",
"monitor.server.index.501236-14": "操作系统",
"monitor.server.index.501236-15": "服务器IP",
"monitor.server.index.501236-16": "系统架构",
"monitor.server.index.501236-17": "Java虚拟机信息",
"monitor.server.index.501236-18": "Java名称",
"monitor.server.index.501236-19": "Java版本",
"monitor.server.index.501236-20": "启动时间",
"monitor.server.index.501236-21": "运行时长",
"monitor.server.index.501236-22": "安装路径",
"monitor.server.index.501236-23": "项目路径",
"monitor.server.index.501236-24": "运行参数",
"monitor.server.index.501236-25": "磁盘状态",
"monitor.server.index.501236-26": "盘符路径",
"monitor.server.index.501236-27": "文件系统",
"monitor.server.index.501236-28": "盘符类型",
"monitor.server.index.501236-29": "总大小",
"monitor.server.index.501236-30": "可用大小",
"monitor.server.index.501236-31": "已用大小",
"monitor.server.index.501236-32": "已用百分比",
"monitor.server.index.501236-33": "正在加载服务监控数据,请稍候!",
"monitor.jobLog.670911-0": "任务名称",
"monitor.jobLog.670911-1": "请输入任务名称",
"monitor.jobLog.670911-2": "任务组名",
"monitor.jobLog.670911-3": "请选择任务组名",
"monitor.jobLog.670911-4": "执行状态",
"monitor.jobLog.670911-5": "请选择执行状态",
"monitor.jobLog.670911-6": "执行时间",
"monitor.jobLog.670911-7": "开始日期",
"monitor.jobLog.670911-8": "结束日期",
"monitor.jobLog.670911-9": "日志编号",
"monitor.jobLog.670911-10": "调用目标字符串",
"monitor.jobLog.670911-11": "日志信息",
"monitor.jobLog.670911-12": "调度日志详细",
"monitor.jobLog.670911-13": "日志序号",
"monitor.jobLog.670911-14": "任务分组",
"monitor.jobLog.670911-15": "执行时间",
"monitor.jobLog.670911-16": "调用方法",
"monitor.jobLog.670911-17": "正常",
"monitor.jobLog.670911-18": "失败",
"monitor.jobLog.670911-19": "异常信息",
"monitor.jobLog.670911-20": "是否确认删除调度日志编号为\"{0}\"的数据项?",
"monitor.jobLog.670911-21": "是否确认清空所有调度日志数据项?",
"monitor.logininfor.670912-0": "登录地址",
"monitor.logininfor.670912-1": "请输入登录地址",
"monitor.logininfor.670912-2": "用户名称",
"monitor.logininfor.670912-3": "请输入用户名称",
"monitor.logininfor.670912-4": "登录状态",
"monitor.logininfor.670912-5": "请选择登录状态",
"monitor.logininfor.670912-6": "登录时间",
"monitor.logininfor.670912-7": "开始日期",
"monitor.logininfor.670912-8": "结束日期",
"monitor.logininfor.670912-9": "解锁",
"monitor.logininfor.670912-10": "访问编号",
"monitor.logininfor.670912-11": "登录地点",
"monitor.logininfor.670912-12": "浏览器",
"monitor.logininfor.670912-13": "操作系统",
"monitor.logininfor.670912-14": "操作信息",
"monitor.logininfor.670912-15": "是否确认删除访问编号为\"{0}\"的数据项?",
"monitor.logininfor.670912-16": "是否确认清空所有登录日志数据项?",
"monitor.logininfor.670912-17": "是否确认解锁用户\"{0}\"数据项?",
"monitor.logininfor.670912-18": "用户{0}解锁成功"
}

View File

@@ -39,6 +39,9 @@
"product.index.091251-39": "是否确认删除产品编号为{0}的数据项?",
"product.index.091251-40": "组态设计",
"product.index.091251-41": "该产品尚未创建组态",
"product.index.091251-47": "系统",
"product.index.091251-48": "详情",
"product.index.091251-49": "修改",
"product.index.091251-42": "组态分享",
"product.index.091251-43": "下载json模板",
"product.index.091251-44": "导入产品",
@@ -122,6 +125,7 @@
"product.product-authorize.314975-66": "复制成功!",
"product.product-authorize.314975-67": "失败",
"product.product-authorize.314975-68": "复制失败!",
"product.product-authorize.314975-69": "设备授权",
"product.product-edit.473153-0": "基本信息",
"product.product-edit.473153-1": "产品名称",
"product.product-edit.473153-2": "请输入产品名称",
@@ -215,6 +219,10 @@
"product.product-edit.473153-93": "认证账号",
"product.product-edit.473153-94": "认证密码",
"product.product-edit.473153-95": "认证密钥",
"product.product-edit.473153-96": "启用授权",
"product.product-edit.473153-97": "编码协议",
"product.product-edit.473153-98": "请选择设备类型",
"product.product-edit.473153-99": "添加成功,可以开始定义物模型或配置",
"product.product-firmware.420545-0": "新增",
"product.product-firmware.420545-1": "刷新",
"product.product-firmware.420545-2": "固件名称",
@@ -399,6 +407,8 @@
"product.product-things-model.142341-140": "已经置顶",
"product.product-things-model.142341-141": "已经是第一项了",
"product.product-things-model.142341-142": "已经是最后一项了",
"product.product-things-model.142341-143": "请重新输入取值范围,最大值不能比最小值小!",
"product.product-things-model.142341-144": "取值范围必须输入小数,请重新输入!",
"product.product-modbus.562372-0": "网关/子设备配置",
"product.product-modbus.562372-1": "网关子设备配置默认的子设备地址,轮询方式",
"product.product-modbus.562372-2": "编辑设备配置",

View File

@@ -289,5 +289,50 @@
"scene.configList.326501-0": "告警配置列表",
"scene.configList.326501-1": "请输入告警名称",
"scene.configList.326501-2": "终端用户无法绑定告警",
"scene.configList.326501-3": "操作成功"
"scene.configList.326501-3": "操作成功",
"script.index.470901-0": "脚本名称",
"script.index.470901-1": "请输入脚本名称",
"script.index.470901-2": "所属产品",
"script.index.470901-3": "请选择产品",
"script.index.470901-4": "选择产品",
"script.index.470901-5": "脚本动作",
"script.index.470901-6": "请选择脚本动作",
"script.index.470901-7": "脚本语言",
"script.index.470901-8": "状态",
"script.index.470901-9": "执行顺序",
"script.index.470901-10": "请输入执行顺序",
"script.index.470901-11": "启动",
"script.index.470901-12": "暂停",
"script.index.470901-13": "加载中",
"script.index.470901-14": "编辑规则脚本",
"script.index.470901-15": "修改规则引擎脚本",
"script.index.470901-16": "脚本日志",
"script.index.470901-17": "脚本使用Groovy引擎查看教程>>>",
"script.index.470901-18": "验 证",
"script.index.470901-19": "修 改",
"script.index.470901-20": "取 消",
"script.index.470901-21": "关闭",
"script.index.470901-22": "脚本标识只能输入字母和数字,且字母开头",
"script.index.470901-23": "日志",
"script.index.470901-24": "查看",
"script.index.470901-25": "新增成功",
"script.index.470901-26": "修改成功",
"script.index.470901-27": "删除成功",
"script.index.470901-28": "是否确认删除规则引擎脚本编号为\"{0}\"的数据项?",
"script.index.470901-29": "脚本标识不能为空",
"script.index.470901-30": "所属产品不能为空",
"script.index.470901-31": "脚本名不能为空",
"productList.index.470902-0": "选择产品",
"productList.index.470902-1": "产品名称",
"productList.index.470902-2": "请输入产品名称",
"productList.index.470902-3": "分类名称",
"productList.index.470902-4": "租户名称",
"productList.index.470902-5": "授权码",
"productList.index.470902-6": "启用",
"productList.index.470902-7": "未启用",
"productList.index.470902-8": "认证方式",
"productList.index.470902-9": "联网方式",
"productList.index.470902-10": "创建时间",
"productList.index.470902-11": "确 定",
"productList.index.470902-12": "关 闭"
}

View File

@@ -129,6 +129,7 @@
"sip.mediaServerEdit.998534-26": "配置地址连接成功",
"sip.mediaServerEdit.998534-27": "配置地址无法连接",
"sip.mediaServerEdit.998534-28": "端口号应该在-65535之间",
"sip.mediaServerEdit.998534-31": "请输入secret",
"sip.mediaServer.998535-0": "新增节点",
"sip.mediaServer.998535-1": "配置名称",
"sip.mediaServer.998535-2": "服务器IP",
@@ -158,6 +159,7 @@
"sip.sipConfig.998537-8": "服务器域不能为空",
"sip.sipConfig.998537-9": "服务器sipid不能为空",
"sip.sipConfig.998537-10": "sip认证密码不能为空",
"sip.sipConfig.998537-11": "国标GB28181",
"sip.sipidGen.998538-0": "行政区划",
"sip.sipidGen.998538-1": "生成设备编号和通道",
"sip.sipidGen.998538-2": "已生成设备编号和通道",

View File

@@ -25,6 +25,9 @@
"system.user.index.resetPwdConfirm": "请输入{0}的新密码",
"system.user.index.enable": "启用",
"system.user.index.disable": "停用",
"system.user.index.userNameLength": "用户名称长度必须介于 2 和 20 之间",
"system.user.index.passwordLength": "用户密码长度必须介于 5 和 20 之间",
"system.user.index.confirmStatusChange": "确认要\"{0}\"\"{1}\"用户吗?",
"system.user.profile.nickNameRequired": "用户昵称不能为空",
"system.user.profile.emailRequired": "邮箱地址不能为空",
"system.user.profile.emailFormat": "请输入正确的邮箱地址",
@@ -57,6 +60,8 @@
"system.user.profile.phoneNumber": "手机号码",
"system.user.profile.emailAddress": "邮箱",
"system.user.profile.gender": "性别",
"system.user.profile.passwordLength": "长度在 6 到 20 个字符",
"system.user.profile.passwordStrength": "密码必须由大写字母、小写字母、数字、特殊符号中的2种及以上类型组成!",
"system.user.authRole.nickName": "用户昵称",
"system.user.authRole.loginAccount": "登录账号",
"system.user.authRole.index": "序号",
@@ -227,8 +232,8 @@
"system.dict.data.879098-29": "标签翻译",
"system.dict.data.879098-30": "请输入数据标签的英文翻译",
"system.dict.data.879098-31": "标签翻译不能为空",
"system.dict.index.880996-0": "请输入字典名称",
"system.dict.index.880996-1": "请输入字典类型",
"system.dict.index.880996-0": "字典名称",
"system.dict.index.880996-1": "字典类型",
"system.dict.index.880996-2": "字典状态",
"system.dict.index.880996-3": "开始日期",
"system.dict.index.880996-4": "结束日期",

View File

@@ -165,5 +165,13 @@
"template.paramter.038405-57": "关闭",
"template.paramter.038405-58": "打开",
"template.paramter.038405-59": "低",
"template.paramter.038405-60": "高"
"template.paramter.038405-60": "高",
"template.index.891112-125": "请重新输入取值范围,最大值不能比最小值小!",
"template.index.891112-126": "取值范围必须输入小数,请重新输入!",
"template.index.891112-127": "参数标识 {0} 重复",
"template.index.891112-128": "修改成功",
"template.index.891112-129": "新增成功",
"template.index.891112-130": "删除成功",
"template.index.891112-131": "编辑",
"template.index.891112-132": "最小值必须为小数"
}

View File

@@ -0,0 +1,276 @@
{
"tool.import.670901-0": "导入表",
"tool.import.670901-1": "数据源",
"tool.import.670901-2": "请选择数据源",
"tool.import.670901-3": "表名称",
"tool.import.670901-4": "请输入表名称",
"tool.import.670901-5": "表描述",
"tool.import.670901-6": "请输入表描述",
"tool.import.670901-7": "创建时间",
"tool.import.670901-8": "更新时间",
"tool.import.670901-9": "请选择要导入的表",
"tool.genInfo.670902-0": "生成模板",
"tool.genInfo.670902-1": "单表(增删改查)",
"tool.genInfo.670902-2": "树表(增删改查)",
"tool.genInfo.670902-3": "主子表(增删改查)",
"tool.genInfo.670902-4": "前端类型",
"tool.genInfo.670902-5": "Vue2 Element UI 模版",
"tool.genInfo.670902-6": "Vue3 Element Plus 模版",
"tool.genInfo.670902-7": "生成包路径",
"tool.genInfo.670902-8": "生成在哪个java包下例如 com.ruoyi.system",
"tool.genInfo.670902-9": "生成模块名",
"tool.genInfo.670902-10": "可理解为子系统名,例如 system",
"tool.genInfo.670902-11": "生成业务名",
"tool.genInfo.670902-12": "可理解为功能英文名,例如 user",
"tool.genInfo.670902-13": "生成功能名",
"tool.genInfo.670902-14": "用作类描述,例如 用户",
"tool.genInfo.670902-15": "生成代码方式",
"tool.genInfo.670902-16": "默认为zip压缩包下载也可以自定义生成路径",
"tool.genInfo.670902-17": "zip压缩包",
"tool.genInfo.670902-18": "自定义路径",
"tool.genInfo.670902-19": "上级菜单",
"tool.genInfo.670902-20": "分配到指定菜单下,例如 系统管理",
"tool.genInfo.670902-21": "请选择系统菜单",
"tool.genInfo.670902-22": "填写磁盘绝对路径若不填写则生成到当前Web项目下",
"tool.genInfo.670902-23": "最近路径快速选择",
"tool.genInfo.670902-24": "恢复默认的生成基础路径",
"tool.genInfo.670902-25": "其他信息",
"tool.genInfo.670902-26": "树编码字段",
"tool.genInfo.670902-27": "树显示的编码字段名dept_id",
"tool.genInfo.670902-28": "请选择",
"tool.genInfo.670902-29": "树父编码字段",
"tool.genInfo.670902-30": "树显示的父编码字段名parent_id",
"tool.genInfo.670902-31": "树名称字段",
"tool.genInfo.670902-32": "树节点的显示名称字段名dept_name",
"tool.genInfo.670902-33": "关联信息",
"tool.genInfo.670902-34": "关联子表的表名",
"tool.genInfo.670902-35": "关联子表的表名sys_user",
"tool.genInfo.670902-36": "子表关联的外键名",
"tool.genInfo.670902-37": "子表关联的外键名user_id",
"tool.genInfo.670902-38": "请选择生成模板",
"tool.genInfo.670902-39": "请输入生成包路径",
"tool.genInfo.670902-40": "请输入生成模块名",
"tool.genInfo.670902-41": "请输入生成业务名",
"tool.genInfo.670902-42": "请输入生成功能名",
"tool.editTable.670903-0": "基本信息",
"tool.editTable.670903-1": "字段信息",
"tool.editTable.670903-2": "生成信息",
"tool.editTable.670903-3": "序号",
"tool.editTable.670903-4": "字段列名",
"tool.editTable.670903-5": "字段描述",
"tool.editTable.670903-6": "物理类型",
"tool.editTable.670903-7": "Java类型",
"tool.editTable.670903-8": "java属性",
"tool.editTable.670903-9": "插入",
"tool.editTable.670903-10": "编辑",
"tool.editTable.670903-11": "列表",
"tool.editTable.670903-12": "查询",
"tool.editTable.670903-13": "查询方式",
"tool.editTable.670903-14": "必填",
"tool.editTable.670903-15": "显示类型",
"tool.editTable.670903-16": "文本框",
"tool.editTable.670903-17": "文本域",
"tool.editTable.670903-18": "下拉框",
"tool.editTable.670903-19": "单选框",
"tool.editTable.670903-20": "复选框",
"tool.editTable.670903-21": "日期控件",
"tool.editTable.670903-22": "图片上传",
"tool.editTable.670903-23": "文件上传",
"tool.editTable.670903-24": "富文本控件",
"tool.editTable.670903-25": "字典类型",
"tool.editTable.670903-26": "请选择",
"tool.editTable.670903-27": "提交",
"tool.editTable.670903-28": "返回",
"tool.editTable.670903-29": "表单校验未通过,请重新检查提交内容",
"tool.createTable.670904-0": "创建表",
"tool.createTable.670904-1": "创建表语句(支持多个建表语句)",
"tool.createTable.670904-2": "请输入文本",
"tool.createTable.670904-3": "请输入建表语句",
"tool.basicInfo.670905-0": "表名称",
"tool.basicInfo.670905-1": "请输入仓库名称",
"tool.basicInfo.670905-2": "表描述",
"tool.basicInfo.670905-3": "请输入",
"tool.basicInfo.670905-4": "实体类名称",
"tool.basicInfo.670905-5": "作者",
"tool.basicInfo.670905-6": "备注",
"tool.basicInfo.670905-7": "请输入表名称",
"tool.basicInfo.670905-8": "请输入表描述",
"tool.basicInfo.670905-9": "请输入实体类名称",
"tool.basicInfo.670905-10": "请输入作者",
"tool.build.index.670906-0": "Form Generator",
"tool.build.index.670906-1": "输入型组件",
"tool.build.index.670906-2": "选择型组件",
"tool.build.index.670906-3": "布局型组件",
"tool.build.index.670906-4": "导出vue文件",
"tool.build.index.670906-5": "复制代码",
"tool.build.index.670906-6": "清空",
"tool.build.index.670906-7": "从左侧拖入或点选组件进行表单设计",
"tool.build.index.670906-8": "成功",
"tool.build.index.670906-9": "代码已复制到剪切板,可粘贴。",
"tool.build.index.670906-10": "代码复制失败",
"tool.build.index.670906-11": "确定要清空所有组件吗?",
"tool.build.index.670906-12": "提示",
"tool.rightPanel.670907-0": "组件属性",
"tool.rightPanel.670907-1": "表单属性",
"tool.rightPanel.670907-2": "查看组件文档",
"tool.rightPanel.670907-3": "组件类型",
"tool.rightPanel.670907-4": "请选择组件类型",
"tool.rightPanel.670907-5": "字段名",
"tool.rightPanel.670907-6": "请输入字段名v-model",
"tool.rightPanel.670907-7": "组件名",
"tool.rightPanel.670907-8": "标题",
"tool.rightPanel.670907-9": "请输入标题",
"tool.rightPanel.670907-10": "占位提示",
"tool.rightPanel.670907-11": "请输入占位提示",
"tool.rightPanel.670907-12": "开始占位",
"tool.rightPanel.670907-13": "结束占位",
"tool.rightPanel.670907-14": "表单栅格",
"tool.rightPanel.670907-15": "栅格间隔",
"tool.rightPanel.670907-16": "布局模式",
"tool.rightPanel.670907-17": "水平排列",
"tool.rightPanel.670907-18": "请选择水平排列",
"tool.rightPanel.670907-19": "垂直排列",
"tool.rightPanel.670907-20": "标签宽度",
"tool.rightPanel.670907-21": "请输入标签宽度",
"tool.rightPanel.670907-22": "组件宽度",
"tool.rightPanel.670907-23": "请输入组件宽度",
"tool.rightPanel.670907-24": "默认值",
"tool.rightPanel.670907-25": "请输入默认值",
"tool.rightPanel.670907-26": "至少应选",
"tool.rightPanel.670907-27": "最多可选",
"tool.rightPanel.670907-28": "前缀",
"tool.rightPanel.670907-29": "请输入前缀",
"tool.rightPanel.670907-30": "后缀",
"tool.rightPanel.670907-31": "请输入后缀",
"tool.rightPanel.670907-32": "前图标",
"tool.rightPanel.670907-33": "请输入前图标名称",
"tool.rightPanel.670907-34": "选择",
"tool.rightPanel.670907-35": "后图标",
"tool.rightPanel.670907-36": "请输入后图标名称",
"tool.rightPanel.670907-37": "选项分隔符",
"tool.rightPanel.670907-38": "请输入选项分隔符",
"tool.rightPanel.670907-39": "最小行数",
"tool.rightPanel.670907-40": "最大行数",
"tool.rightPanel.670907-41": "最小值",
"tool.rightPanel.670907-42": "最大值",
"tool.rightPanel.670907-43": "步长",
"tool.rightPanel.670907-44": "精度",
"tool.rightPanel.670907-45": "按钮位置",
"tool.rightPanel.670907-46": "默认",
"tool.rightPanel.670907-47": "右侧",
"tool.rightPanel.670907-48": "最多输入",
"tool.rightPanel.670907-49": "个字符",
"tool.rightPanel.670907-50": "开启提示",
"tool.rightPanel.670907-51": "请输入开启提示",
"tool.rightPanel.670907-52": "关闭提示",
"tool.rightPanel.670907-53": "请输入关闭提示",
"tool.rightPanel.670907-54": "开启值",
"tool.rightPanel.670907-55": "请输入开启值",
"tool.rightPanel.670907-56": "关闭值",
"tool.rightPanel.670907-57": "请输入关闭值",
"tool.rightPanel.670907-58": "时间类型",
"tool.rightPanel.670907-59": "请选择时间类型",
"tool.rightPanel.670907-60": "文件字段名",
"tool.rightPanel.670907-61": "请输入上传文件字段名",
"tool.rightPanel.670907-62": "文件类型",
"tool.rightPanel.670907-63": "请选择文件类型",
"tool.rightPanel.670907-64": "图片",
"tool.rightPanel.670907-65": "视频",
"tool.rightPanel.670907-66": "音频",
"tool.rightPanel.670907-67": "文件大小",
"tool.rightPanel.670907-68": "请输入文件大小",
"tool.rightPanel.670907-69": "上传地址",
"tool.rightPanel.670907-70": "请输入上传地址",
"tool.rightPanel.670907-71": "列表类型",
"tool.rightPanel.670907-72": "按钮文字",
"tool.rightPanel.670907-73": "请输入按钮文字",
"tool.rightPanel.670907-74": "分隔符",
"tool.rightPanel.670907-75": "请输入分隔符",
"tool.rightPanel.670907-76": "时间段",
"tool.rightPanel.670907-77": "请输入时间段",
"tool.rightPanel.670907-78": "时间格式",
"tool.rightPanel.670907-79": "请输入时间格式",
"tool.rightPanel.670907-80": "选项",
"tool.rightPanel.670907-81": "选项名",
"tool.rightPanel.670907-82": "选项值",
"tool.rightPanel.670907-83": "添加选项",
"tool.rightPanel.670907-84": "数据类型",
"tool.rightPanel.670907-85": "动态数据",
"tool.rightPanel.670907-86": "静态数据",
"tool.rightPanel.670907-87": "标签键名",
"tool.rightPanel.670907-88": "请输入标签键名",
"tool.rightPanel.670907-89": "值键名",
"tool.rightPanel.670907-90": "请输入值键名",
"tool.rightPanel.670907-91": "子级键名",
"tool.rightPanel.670907-92": "请输入子级键名",
"tool.rightPanel.670907-93": "添加父级",
"tool.rightPanel.670907-94": "选项样式",
"tool.rightPanel.670907-95": "按钮",
"tool.rightPanel.670907-96": "开启颜色",
"tool.rightPanel.670907-97": "关闭颜色",
"tool.rightPanel.670907-98": "允许半选",
"tool.rightPanel.670907-99": "辅助文字",
"tool.rightPanel.670907-100": "显示分数",
"tool.rightPanel.670907-101": "显示间断点",
"tool.rightPanel.670907-102": "范围选择",
"tool.rightPanel.670907-103": "是否带边框",
"tool.rightPanel.670907-104": "颜色格式",
"tool.rightPanel.670907-105": "请选择颜色格式",
"tool.rightPanel.670907-106": "选项尺寸",
"tool.rightPanel.670907-107": "中等",
"tool.rightPanel.670907-108": "较小",
"tool.rightPanel.670907-109": "迷你",
"tool.rightPanel.670907-110": "输入统计",
"tool.rightPanel.670907-111": "严格步数",
"tool.rightPanel.670907-112": "是否多选",
"tool.rightPanel.670907-113": "展示全路径",
"tool.rightPanel.670907-114": "可否筛选",
"tool.rightPanel.670907-115": "能否清空",
"tool.rightPanel.670907-116": "显示提示",
"tool.rightPanel.670907-117": "多选文件",
"tool.rightPanel.670907-118": "自动上传",
"tool.rightPanel.670907-119": "是否只读",
"tool.rightPanel.670907-120": "是否禁用",
"tool.rightPanel.670907-121": "是否可搜索",
"tool.rightPanel.670907-122": "是否必填",
"tool.rightPanel.670907-123": "布局结构树",
"tool.rightPanel.670907-124": "正则校验",
"tool.rightPanel.670907-125": "表达式",
"tool.rightPanel.670907-126": "请输入正则",
"tool.rightPanel.670907-127": "错误提示",
"tool.rightPanel.670907-128": "请输入错误提示",
"tool.rightPanel.670907-129": "添加规则",
"tool.rightPanel.670907-130": "表单名",
"tool.rightPanel.670907-131": "请输入表单名ref",
"tool.rightPanel.670907-132": "表单模型",
"tool.rightPanel.670907-133": "请输入数据模型",
"tool.rightPanel.670907-134": "校验模型",
"tool.rightPanel.670907-135": "请输入校验模型",
"tool.rightPanel.670907-136": "表单尺寸",
"tool.rightPanel.670907-137": "标签对齐",
"tool.rightPanel.670907-138": "左对齐",
"tool.rightPanel.670907-139": "右对齐",
"tool.rightPanel.670907-140": "顶部对齐",
"tool.rightPanel.670907-141": "禁用表单",
"tool.rightPanel.670907-142": "表单按钮",
"tool.rightPanel.670907-143": "显示未选中组件边框",
"tool.rightPanel.670907-144": "添加选项",
"tool.treeNode.670908-0": "选项名",
"tool.treeNode.670908-1": "请输入选项名",
"tool.treeNode.670908-2": "选项值",
"tool.treeNode.670908-3": "请输入选项值",
"tool.treeNode.670908-4": "字符串",
"tool.treeNode.670908-5": "数字",
"tool.treeNode.670908-6": "确定",
"tool.treeNode.670908-7": "取消",
"tool.icons.670909-0": "选择图标",
"tool.icons.670909-1": "请输入图标名称",
"tool.build.index.670906-13": "复制",
"tool.build.index.670906-14": "删除",
"tool.codeType.670910-0": "生成类型",
"tool.codeType.670910-1": "文件名",
"tool.codeType.670910-2": "请输入文件名",
"tool.codeType.670910-3": "页面",
"tool.codeType.670910-4": "弹窗",
"tool.codeType.670910-5": "生成类型不能为空"
}

View File

@@ -10,7 +10,7 @@
<div class="guang"></div>
<div class="d-flex jc-center">
<div class="title">
<span class="title-text">FastBee物联网平台</span>
<span class="title-text">{{ $t('bigScreen.home.platformTitle') }}</span>
</div>
</div>
<div class="timers ">
@@ -48,7 +48,7 @@ export default {
dateDay: null,
dateYear: null,
dateWeek: null,
weekday: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
weekday: [this.$t('bigScreen.home.sunday'), this.$t('bigScreen.home.monday'), this.$t('bigScreen.home.tuesday'), this.$t('bigScreen.home.wednesday'), this.$t('bigScreen.home.thursday'), this.$t('bigScreen.home.friday'), this.$t('bigScreen.home.saturday')],
};
},
filters: {

View File

@@ -2,19 +2,19 @@
<div style="display:flex;margin-top:60px;">
<div style="margin-left:10px;color:#32c5e9;">
<dv-decoration-9 style="width:90px;height:90px;font-weight:600;" :dur="10" :color="['#32c5e9', '#238aa4']">{{deviceStatistic.deviceCount}}</dv-decoration-9>
<div style="text-align: center;margin-top:25px;">设备总数</div>
<div style="text-align: center;margin-top:25px;">{{ $t('bigScreen.leftTop.totalDevices') }}</div>
</div>
<div style="margin:0 30px;color:#9fe6b8">
<dv-decoration-9 style="width:90px;height:90px;font-weight:600;" :dur="10" :color="['#9fe6b8', '#70a181']">{{deviceStatistic.deviceOnlineCount}}</dv-decoration-9>
<div style="text-align: center;margin-top:25px;font-weight:400;">在线设备</div>
<div style="text-align: center;margin-top:25px;font-weight:400;">{{ $t('bigScreen.leftTop.onlineDevices') }}</div>
</div>
<div style="margin-right:30px;color:#ffdb5c">
<dv-decoration-9 style="width:90px;height:90px;font-weight:600;" :dur="10" :color="['#ffdb5c', '#b39a41']">{{deviceStatistic.deviceCount-deviceStatistic.deviceOnlineCount}}</dv-decoration-9>
<div style="text-align: center;margin-top:25px;font-weight:400;">离线设备</div>
<div style="text-align: center;margin-top:25px;font-weight:400;">{{ $t('bigScreen.leftTop.offlineDevices') }}</div>
</div>
<div style="color:#fb7293;">
<dv-decoration-9 style="width:90px;height:90px;font-weight:600;" :dur="10" :color="['#fb7293', '#ad4f65']">{{deviceStatistic.alertCount}}</dv-decoration-9>
<div style="text-align: center;margin-top:25px;font-weight:400;">告警数量</div>
<div style="text-align: center;margin-top:25px;font-weight:400;">{{ $t('bigScreen.leftTop.alertCount') }}</div>
</div>
</div>
</template>

View File

@@ -6,44 +6,44 @@
</div>
<div class="setting_inner">
<div class="setting_header">
设置
{{ $t('bigScreen.setting.settings') }}
</div>
<div class="setting_body">
<!-- <div class="left_shu"> 实时监测</div> -->
<div class="left_shu"> 全局设置</div>
<div class="left_shu"> {{ $t('bigScreen.setting.globalSettings') }}</div>
<div class="setting_item">
<span class="setting_label">
是否进行自动适配<span class="setting_label_tip">(默认分辨率1920*1080)</span>:
{{ $t('bigScreen.setting.autoAdapt') }}<span class="setting_label_tip">({{ $t('bigScreen.setting.defaultResolution') }}1920*1080)</span>:
</span>
<div class="setting_content">
<el-radio-group v-model="isScaleradio" @change="(val) => radiochange(val, 'isScale')">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
<el-radio :label="true">{{ $t('bigScreen.setting.yes') }}</el-radio>
<el-radio :label="false">{{ $t('bigScreen.setting.no') }}</el-radio>
</el-radio-group>
</div>
</div>
<div class="left_shu"> 实时监测</div>
<div class="left_shu"> {{ $t('bigScreen.setting.realTimeMonitor') }}</div>
<div class="setting_item">
<span class="setting_label">
设备提醒自动轮询: <span class="setting_label_tip"></span>
{{ $t('bigScreen.setting.deviceAlertAutoPoll') }}: <span class="setting_label_tip"></span>
</span>
<div class="setting_content">
<el-radio-group v-model="sbtxradio" @change="(val) => radiochange(val, 'sbtxSwiper')">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
<el-radio :label="true">{{ $t('bigScreen.setting.yes') }}</el-radio>
<el-radio :label="false">{{ $t('bigScreen.setting.no') }}</el-radio>
</el-radio-group>
</div>
</div>
<div class="setting_item">
<span class="setting_label">
实时预警轮播:
{{ $t('bigScreen.setting.realTimeWarning') }}:
</span>
<div class="setting_content">
<el-radio-group v-model="ssyjradio" @change="(val) => radiochange(val, 'ssyjSwiper')">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
<el-radio :label="true">{{ $t('bigScreen.setting.yes') }}</el-radio>
<el-radio :label="false">{{ $t('bigScreen.setting.no') }}</el-radio>
</el-radio-group>
</div>
</div>

View File

@@ -1,61 +1,61 @@
<template>
<div class="errPage-container">
<el-button icon="arrow-left" class="pan-back-btn" @click="back">
返回
{{ $t('error.401.774006-0') }}
</el-button>
<el-row>
<el-col :span="12">
<h1 class="text-jumbo text-ginormous">
401错误!
{{ $t('error.401.774006-1') }}
</h1>
<h2>您没有访问权限</h2>
<h6>对不起您没有访问权限请不要进行非法操作您可以返回主页面</h6>
<h2>{{ $t('error.401.774006-2') }}</h2>
<h6>{{ $t('error.401.774006-3') }}</h6>
<ul class="list-unstyled">
<li class="link-type">
<router-link to="/">
回首页
{{ $t('error.401.774006-4') }}
</router-link>
</li>
</ul>
</el-col>
<el-col :span="12">
<img :src="errGif" width="313" height="428" alt="Girl has dropped her ice cream.">
<img :src="errGif" width="313" height="428" alt="Girl has dropped her ice cream." />
</el-col>
</el-row>
</div>
</template>
<script>
import errGif from '@/assets/401_images/401.gif'
import errGif from '@/assets/401_images/401.gif';
export default {
name: 'Page401',
data() {
return {
errGif: errGif + '?' + +new Date()
}
errGif: errGif + '?' + +new Date(),
};
},
methods: {
back() {
if (this.$route.query.noGoBack) {
this.$router.push({ path: '/' })
this.$router.push({ path: '/' });
} else {
this.$router.go(-1)
this.$router.go(-1);
}
}
}
}
},
},
};
</script>
<style lang="scss" scoped>
.errPage-container {
.errPage-container {
width: 800px;
max-width: 100%;
margin: 100px auto;
.pan-back-btn {
background: #008489;
color: #fff;
border: none!important;
border: none !important;
}
.pan-gif {
margin: 0 auto;
@@ -84,5 +84,5 @@ export default {
}
}
}
}
}
</style>

View File

@@ -2,23 +2,23 @@
<div class="wscn-http404-container">
<div class="wscn-http404">
<div class="pic-404">
<img class="pic-404__parent" src="@/assets/404_images/404.png" alt="404">
<img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404">
<img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404">
<img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404">
<img class="pic-404__parent" src="@/assets/404_images/404.png" alt="404" />
<img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404" />
<img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404" />
<img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404" />
</div>
<div class="bullshit">
<div class="bullshit__oops">
404错误!
{{ $t('error.404.817532-0') }}
</div>
<div class="bullshit__headline">
{{ message }}
</div>
<div class="bullshit__info">
对不起您正在寻找的页面不存在尝试检查URL的错误然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容
{{ $t('error.404.817532-1') }}
</div>
<router-link to="/" class="bullshit__return-home">
返回首页
{{ $t('error.404.817532-2') }}
</router-link>
</div>
</div>
@@ -26,20 +26,19 @@
</template>
<script>
export default {
name: 'Page404',
computed: {
message() {
return '找不到网页!'
}
}
}
return this.$t('error.404.817532-3');
},
},
};
</script>
<style lang="scss" scoped>
.wscn-http404-container{
transform: translate(-50%,-50%);
.wscn-http404-container {
transform: translate(-50%, -50%);
position: absolute;
top: 40%;
left: 50%;

View File

@@ -20,7 +20,7 @@
<svg-icon icon-class="device" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">设备数量</div>
<div class="card-panel-text">{{ $t('home.deviceCount') }}</div>
<count-to :start-val="0" :end-val="deviceStatistic.deviceCount" :duration="3000" class="card-panel-num" />
</div>
</div>
@@ -31,7 +31,7 @@
<svg-icon icon-class="monitor-a" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">监测数据</div>
<div class="card-panel-text">{{ $t('home.monitorCount') }}</div>
<count-to :start-val="0" :end-val="deviceStatistic.monitorCount" :duration="3000" class="card-panel-num" />
</div>
</div>
@@ -42,7 +42,7 @@
<svg-icon icon-class="model" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">产品数量</div>
<div class="card-panel-text">{{ $t('home.productCount') }}</div>
<count-to :start-val="0" :end-val="deviceStatistic.productCount" :duration="1000" class="card-panel-num" />
</div>
</div>
@@ -53,7 +53,7 @@
<svg-icon icon-class="alert" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">告警数量</div>
<div class="card-panel-text">{{ $t('home.alertCount') }}</div>
<count-to :start-val="0" :end-val="deviceStatistic.alertCount" :duration="1000" class="card-panel-num" />
</div>
</div>
@@ -64,7 +64,7 @@
<svg-icon icon-class="log-a" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">操作记录</div>
<div class="card-panel-text">{{ $t('home.functionCount') }}</div>
<count-to :start-val="0" :end-val="deviceStatistic.functionCount" :duration="2000" class="card-panel-num" />
</div>
</div>
@@ -75,7 +75,7 @@
<svg-icon icon-class="event-a" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">上报事件</div>
<div class="card-panel-text">{{ $t('home.eventCount') }}</div>
<count-to :start-val="0" :end-val="deviceStatistic.eventCount" :duration="2000" class="card-panel-num" />
</div>
</div>
@@ -85,12 +85,12 @@
<el-card shadow="none" style="margin-top: 22px; height: 302px">
<h3 style="font-weight: bold; margin-bottom: 10px">
<i class="el-icon-s-order"></i>
信息栏
{{ $t('home.infoBoard') }}
</h3>
<div style="cursor: pointer; display: table; width: 100%; line-height: 36px" @click="openDetail(item.noticeId)" v-for="item in noticeList" :key="item.noticeId">
<div style="display: table-cell; padding-right: 10px">
<el-tag size="mini" effect="dark" type="warning" v-if="item.noticeType == 2">公告</el-tag>
<el-tag size="mini" effect="dark" v-else>信息</el-tag>
<el-tag size="mini" effect="dark" type="warning" v-if="item.noticeType == 2">{{ $t('home.notice') }}</el-tag>
<el-tag size="mini" effect="dark" v-else>{{ $t('home.information') }}</el-tag>
{{ item.noticeTitle }}
</div>
<div style="display: table-cell; width: 90px; font-size: 14px">
@@ -126,20 +126,20 @@
<el-row :gutter="40">
<el-col :xs="24" :sm="24" :md="10" :lg="10" :xl="10" style="padding: 40px">
<div style="padding: 30px; margin: 20px 0; font-size: 14px">
<div style="font-size: 28px; font-weight: bold; margin-bottom: 20px">FastBee物联网平台</div>
<div style="font-size: 28px; font-weight: bold; margin-bottom: 20px">{{ $t('home.platformName') }}</div>
<div style="display: table; font-size: 14px; margin-bottom: 10px">
<div style="display: table-cell; line-height: 22px"><b style="color: #67c23a; margin-right: 10px">开源版本采用AGPL-3.0许可协议商用需要获得授权</b></div>
<div style="display: table-cell; line-height: 22px"><b style="color: #67c23a; margin-right: 10px">{{ $t('home.licenseNotice') }}</b></div>
</div>
<div style="display: table; margin-bottom: 10px">
<div style="width: 70px; font-weight: bold; display: table-cell">开源版本</div>
<div style="display: table-cell; line-height: 22px">可用于个人学习和使用非商业用途</div>
<div style="width: 70px; font-weight: bold; display: table-cell">{{ $t('home.openSource') }}</div>
<div style="display: table-cell; line-height: 22px">{{ $t('home.openSourceDesc') }}</div>
</div>
<div style="display: table">
<div style="width: 70px; font-weight: bold; display: table-cell">商业版本</div>
<div style="width: 70px; font-weight: bold; display: table-cell">{{ $t('home.commercial') }}</div>
<div style="display: table-cell; line-height: 22px">
商业用途并提供所有源码功能优先开源版本发布
{{ $t('home.commercialDesc') }}
<br />
<el-link target="_blank" href="https://fastbee.cn/doc/pages/sponsor">查看详情 >></el-link>
<el-link target="_blank" href="https://fastbee.cn/doc/pages/sponsor">{{ $t('home.viewDetails') }} >></el-link>
</div>
</div>
</div>
@@ -148,31 +148,31 @@
<el-image style="width: 210px" :src="require('@/assets/images/code.jpg')"></el-image>
</div>
<div style="float: left">
<div style="font-size: 18px; font-weight: bold; margin: 16px 0">微信扫一扫查看小程序端</div>
<div style="font-size: 14px; font-weight: bold; margin: 16px 0; color: #f56c6c">右侧是移动端H5版本演示</div>
<div style="font-size: 18px; font-weight: bold; margin: 16px 0">{{ $t('home.wechatScan') }}</div>
<div style="font-size: 14px; font-weight: bold; margin: 16px 0; color: #f56c6c">{{ $t('home.h5Demo') }}</div>
<div style="display: table; margin-bottom: 10px">
<div style="width: 70px; font-weight: bold; display: table-cell">官方网站</div>
<div style="width: 70px; font-weight: bold; display: table-cell">{{ $t('home.officialWebsite') }}</div>
<div style="display: table-cell">
<el-link target="_blank" href="https://fastbee.cn/">www.fastbee.cn</el-link>
</div>
</div>
<div style="display: table; margin-bottom: 10px">
<div style="width: 70px; font-weight: bold; display: table-cell">在线文档</div>
<div style="width: 70px; font-weight: bold; display: table-cell">{{ $t('home.onlineDoc') }}</div>
<div style="display: table-cell">
<el-link target="_blank" href="https://fastbee.cn/doc">www.fastbee.cn/doc</el-link>
</div>
</div>
<div style="display: table; margin-bottom: 10px">
<div style="width: 70px; font-weight: bold; display: table-cell">联系作者</div>
<div style="width: 70px; font-weight: bold; display: table-cell">{{ $t('home.contactAuthor') }}</div>
<div style="display: table-cell">
<span>QQ 164770707</span>
<span>{{ $t('home.qq') }} 164770707</span>
</div>
</div>
<div style="display: table; margin-bottom: 15px">
<div style="width: 70px; font-weight: bold; display: table-cell">系统源码</div>
<div style="width: 70px; font-weight: bold; display: table-cell">{{ $t('home.sourceCode') }}</div>
<div style="display: table-cell">
<el-link target="_blank" href="https://gitee.com/kerwincui/wumei-smart" type="danger">Gitee源码</el-link>
<el-link target="_blank" href="https://github.com/kerwincui/fastbee" style="margin-left: 20px">Github源码</el-link>
<el-link target="_blank" href="https://gitee.com/kerwincui/wumei-smart" type="danger">{{ $t('home.giteeSource') }}</el-link>
<el-link target="_blank" href="https://github.com/kerwincui/fastbee" style="margin-left: 20px">{{ $t('home.githubSource') }}</el-link>
</div>
</div>
</div>
@@ -189,15 +189,15 @@
<!--通知公告详情 -->
<el-dialog :title="notice.noticeTitle" :visible.sync="open" width="800px" append-to-body>
<div style="margin-top: -20px; margin-bottom: 10px">
<el-tag size="mini" effect="dark" type="warning" v-if="notice.noticeType == 2">公告</el-tag>
<el-tag size="mini" effect="dark" v-else>信息</el-tag>
<el-tag size="mini" effect="dark" type="warning" v-if="notice.noticeType == 2">{{ $t('home.notice') }}</el-tag>
<el-tag size="mini" effect="dark" v-else>{{ $t('home.information') }}</el-tag>
<span style="margin-left: 20px">{{ notice.createTime }}</span>
</div>
<div v-loading="loading" class="content">
<div v-html="notice.noticeContent"></div>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="closeDetail"> </el-button>
<el-button type="primary" @click="closeDetail">{{ $t('close') }}</el-button>
</div>
</el-dialog>
@@ -351,39 +351,39 @@ export default {
this.server = response.data;
this.tableData = [
{
server: '服务器名',
server: this.$t('home.serverName'),
serverContent: this.server.sys.computerName,
java: 'Java名称',
java: this.$t('home.javaName'),
javaContent: this.server.jvm.name,
},
{
server: '服务器IP',
server: this.$t('home.serverIp'),
serverContent: this.server.sys.computerIp,
java: '启动时间',
java: this.$t('home.startTime'),
javaContent: this.server.jvm.startTime,
},
{
server: '操作系统',
server: this.$t('home.os'),
serverContent: this.server.sys.osName,
java: 'Java版本',
java: this.$t('home.javaVersion'),
javaContent: this.server.jvm.version,
},
{
server: '系统架构',
server: this.$t('home.osArch'),
serverContent: this.server.sys.osArch,
java: '运行时长',
java: this.$t('home.runTime'),
javaContent: this.server.jvm.runTime,
},
{
server: 'CPU核心',
server: this.$t('home.cpuCore'),
serverContent: this.server.cpu.cpuNum,
java: '占用内存',
java: this.$t('home.usedMemory'),
javaContent: this.server.jvm.used,
},
{
server: '内存大小',
server: this.$t('home.memSize'),
serverContent: this.server.mem.total,
java: 'JVM总内存',
java: this.$t('home.jvmTotalMemory'),
javaContent: this.server.jvm.total,
},
];
@@ -439,7 +439,7 @@ export default {
};
option = {
title: {
text: '设备分布(在线数 ' + this.deviceList.filter((x) => x.status == 3).length + '',
text: this.$t('home.deviceDistribution') + '' + this.$t('home.onlineCount') + ' ' + this.deviceList.filter((x) => x.status == 3).length + '',
subtext: 'fastbee open source iot platform',
sublink: 'https://iot.fastbee.cn',
target: '_blank',
@@ -455,40 +455,40 @@ export default {
trigger: 'item',
formatter: function (params) {
var htmlStr = '<div style="padding:5px;line-height:28px;">';
htmlStr += "设备名称: <span style='color:#409EFF'>" + params.data.name + '</span><br />';
htmlStr += '设备编号: ' + params.data.serialNumber + '<br />';
htmlStr += '设备状态: ';
htmlStr += this.$t('home.deviceName') + ': <span style="color:#409EFF">' + params.data.name + '</span><br />';
htmlStr += this.$t('home.deviceSerial') + ': ' + params.data.serialNumber + '<br />';
htmlStr += this.$t('home.deviceStatus') + ': ';
if (params.data.status == 1) {
htmlStr += "<span style='color:#E6A23C'>未激活</span>" + '<br />';
htmlStr += "<span style='color:#E6A23C'>" + this.$t('home.notActive') + "</span>" + '<br />';
} else if (params.data.status == 2) {
htmlStr += "<span style='color:#F56C6C'>禁用</span>" + '<br />';
htmlStr += "<span style='color:#F56C6C'>" + this.$t('home.disabled') + "</span>" + '<br />';
} else if (params.data.status == 3) {
htmlStr += "<span style='color:#67C23A'>在线</span>" + '<br />';
htmlStr += "<span style='color:#67C23A'>" + this.$t('home.online') + "</span>" + '<br />';
} else if (params.data.status == 4) {
htmlStr += "<span style='color:#909399'>离线</span>" + '<br />';
htmlStr += "<span style='color:#909399'>" + this.$t('home.offline') + "</span>" + '<br />';
}
if (params.data.isShadow == 1) {
htmlStr += '设备影子: ' + "<span style='color:#67C23A'>启用</span>" + '<br />';
htmlStr += this.$t('home.deviceShadow') + ': ' + "<span style='color:#67C23A'>" + this.$t('home.enabled') + "</span>" + '<br />';
} else {
htmlStr += '设备影子: ' + "<span style='color:#909399'>未启用</span>" + '<br />';
htmlStr += this.$t('home.deviceShadow') + ': ' + "<span style='color:#909399'>" + this.$t('home.notEnabled') + "</span>" + '<br />';
}
htmlStr += '产品名称: ' + params.data.productName + '<br />';
htmlStr += '固件版本: Version ' + params.data.firmwareVersion + '<br />';
htmlStr += '激活时间: ' + params.data.activeTime + '<br />';
htmlStr += '定位方式: ';
htmlStr += this.$t('home.productName') + ': ' + params.data.productName + '<br />';
htmlStr += this.$t('home.firmwareVersion') + ': Version ' + params.data.firmwareVersion + '<br />';
htmlStr += this.$t('home.activeTime') + ': ' + params.data.activeTime + '<br />';
htmlStr += this.$t('home.locationWay') + ': ';
if (params.data.locationWay == 1) {
htmlStr += '自动定位' + '<br />';
htmlStr += this.$t('home.autoLocation') + '<br />';
} else if (params.data.locationWay == 2) {
htmlStr += '设备定位' + '<br />';
htmlStr += this.$t('home.deviceLocation') + '<br />';
} else if (params.data.locationWay == 3) {
htmlStr += '自定义位置' + '<br />';
htmlStr += this.$t('home.customLocation') + '<br />';
} else {
htmlStr += '未知' + '<br />';
htmlStr += this.$t('home.unknown') + '<br />';
}
htmlStr += '所在地址: ' + params.data.networkAddress + '<br />';
htmlStr += this.$t('home.address') + ': ' + params.data.networkAddress + '<br />';
htmlStr += '</div>';
return htmlStr;
},
}.bind(this),
},
bmap: {
center: [133, 38],
@@ -673,7 +673,7 @@ export default {
var option;
option = {
title: {
text: 'CPU使用率',
text: this.$t('home.cpuUsage'),
left: 'left',
textStyle: {
fontSize: 16,
@@ -689,7 +689,7 @@ export default {
color: ['#E6A23C', '#F56C6C', '#DDD'],
series: [
{
name: 'CPU使用率 %',
name: this.$t('home.cpuUsage') + ' %',
type: 'pie',
radius: '55%',
label: {
@@ -704,15 +704,15 @@ export default {
data: [
{
value: this.server.cpu.used,
name: '用户',
name: this.$t('home.user'),
},
{
value: this.server.cpu.sys,
name: '系统',
name: this.$t('home.system'),
},
{
value: this.server.cpu.free,
name: '空闲',
name: this.$t('home.idle'),
},
],
},
@@ -726,7 +726,7 @@ export default {
var option;
option = {
title: {
text: '内存使用率',
text: this.$t('home.memUsage'),
left: 'left',
textStyle: {
fontSize: 16,
@@ -742,7 +742,7 @@ export default {
color: ['#F56C6C', '#DDD'],
series: [
{
name: '内存使用率 G',
name: this.$t('home.memUsage') + ' G',
type: 'pie',
radius: '55%',
label: {
@@ -757,11 +757,11 @@ export default {
data: [
{
value: this.server.mem.used,
name: '已用',
name: this.$t('home.used'),
},
{
value: this.server.mem.free,
name: '剩余',
name: this.$t('home.free'),
},
],
},
@@ -777,7 +777,7 @@ export default {
let two = this.server.sysFiles[0].free.replace('GB', '');
option = {
title: {
text: '系统盘使用率',
text: this.$t('home.diskUsage'),
left: 'left',
textStyle: {
fontSize: 16,
@@ -793,7 +793,7 @@ export default {
color: ['#F56C6C', '#DDD'],
series: [
{
name: '磁盘状态 G',
name: this.$t('home.diskStatus') + ' G',
type: 'pie',
radius: '55%',
label: {
@@ -808,11 +808,11 @@ export default {
data: [
{
value: one,
name: '已用',
name: this.$t('home.used'),
},
{
value: two,
name: '可用',
name: this.$t('home.available'),
},
],
},

View File

@@ -2,45 +2,45 @@
<div style="padding:6px;">
<el-card v-show="showSearch" style="margin-bottom:5px;">
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" style="margin-bottom:-20px;">
<el-form-item label="分类名称" prop="categoryName">
<el-input v-model="queryParams.categoryName" placeholder="请输入产品分类名称" clearable size="small"
<el-form-item :label="$t('product.category.142342-0')" prop="categoryName">
<el-input v-model="queryParams.categoryName" :placeholder="$t('product.index.091251-3')" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
</el-form-item>
<el-form-item style="float:right;">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['iot:category:add']">新增</el-button>
v-hasPermi="['iot:category:add']">{{ $t('add') }}</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card style="padding-bottom:100px;">
<el-table v-loading="loading" :data="categoryList" @selection-change="handleSelectionChange" border>
<el-table-column label="产品分类名称" align="center" prop="categoryName" />
<el-table-column label="备注" align="left" header-align="center" prop="remark" min-width="150" />
<el-table-column label="系统定义" align="center" prop="isSys">
<el-table-column :label="$t('product.category.142342-0')" align="center" prop="categoryName" />
<el-table-column :label="$t('remark')" align="left" header-align="center" prop="remark" min-width="150" />
<el-table-column :label="$t('template.index.891112-12')" align="center" prop="isSys">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isSys" />
</template>
</el-table-column>
<el-table-column label="显示顺序" align="center" prop="orderNum" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<el-table-column :label="$t('product.category.142342-1')" align="center" prop="orderNum" />
<el-table-column :label="$t('creatTime')" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150">
<el-table-column :label="$t('opation')" align="center" class-name="small-padding fixed-width" width="150">
<template slot-scope="scope">
<el-button size="small" type="text" style="padding:5px;" icon="el-icon-edit"
@click="handleUpdate(scope.row)" v-hasPermi="['iot:category:query']"
v-if="scope.row.isSys == '0' ? true : !isTenant">修改</el-button>
v-if="scope.row.isSys == '0' ? true : !isTenant">{{ $t('update') }}</el-button>
<el-button size="small" type="text" style="padding:5px;" icon="el-icon-delete"
@click="handleDelete(scope.row)" v-hasPermi="['iot:category:remove']"
v-if="scope.row.isSys == '0' ? true : !isTenant">删除</el-button>
<span style="font-size:10px;color:#999;" v-if="scope.row.isSys == '1' && isTenant">系统定义不能修改</span>
v-if="scope.row.isSys == '0' ? true : !isTenant">{{ $t('del') }}</el-button>
<span style="font-size:10px;color:#999;" v-if="scope.row.isSys == '1' && isTenant">{{ $t('template.index.891112-21') }}</span>
</template>
</el-table-column>
</el-table>
@@ -49,25 +49,25 @@
:limit.sync="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改产品分类对话框 -->
<el-dialog title="产品分类" :visible.sync="open" width="500px" append-to-body>
<el-dialog :title="$t('product.product-edit.473153-3')" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="分类名称" prop="categoryName">
<el-input v-model="form.categoryName" placeholder="请输入产品分类名称" />
<el-form-item :label="$t('product.category.142342-0')" prop="categoryName">
<el-input v-model="form.categoryName" :placeholder="$t('product.index.091251-3')" />
</el-form-item>
<el-form-item label="显示顺序" prop="orderNum">
<el-form-item :label="$t('product.category.142342-1')" prop="orderNum">
<el-input-number controls-position="right" v-model="form.orderNum"
placeholder="请输入显示顺序" style="width:100%" />
:placeholder="$t('product.category.142342-2')" style="width:100%" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
<el-form-item :label="$t('remark')" prop="remark">
<el-input v-model="form.remark" type="textarea" :placeholder="$t('product.category.142342-3')" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:category:edit']"
v-show="form.categoryId"> </el-button>
v-show="form.categoryId">{{ $t('update') }}</el-button>
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:category:add']"
v-show="!form.categoryId"> </el-button>
<el-button @click="cancel"> </el-button>
v-show="!form.categoryId">{{ $t('add') }}</el-button>
<el-button @click="cancel">{{ $t('cancel') }}</el-button>
</div>
</el-dialog>
@@ -122,35 +122,35 @@ export default {
rules: {
categoryName: [{
required: true,
message: "产品分类名称不能为空",
message: this.$t('product.category.142342-4'),
trigger: "blur"
}, {
min: 1,
max: 64,
message: '产品分类不能少于1个字符和超过64字符',
message: this.$t('product.category.142342-12'),
},
],
orderNum: [{
required: true,
message: '分类顺序不能为空',
message: this.$t('product.category.142342-13'),
trigger: 'blur',
}, {
type: 'number',
min: -2147483648,
max: 2147483647,
message: '顺序值不能超过int型的取值范围(-2^31——2^31-1)',
message: this.$t('product.category.142342-14'),
trigger: 'blur',
}],
remark: [{
required: false,
min: 0,
max: 500,
message: '备注不能输入超过500个字符',
message: this.$t('product.category.142342-15'),
trigger: 'blur',
}],
isSys: [{
required: true,
message: "是否系统通用不能为空",
message: this.$t('product.category.142342-5'),
trigger: "blur"
}],
}
@@ -219,7 +219,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = "添加产品分类";
this.title = this.$t('product.category.142342-6');
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -228,7 +228,7 @@ export default {
getCategory(categoryId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改产品分类";
this.title = this.$t('product.category.142342-7');
});
},
/** 提交按钮 */
@@ -237,13 +237,13 @@ export default {
if (valid) {
if (this.form.categoryId != null) {
updateCategory(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.$modal.msgSuccess(this.$t('updateSuccess'));
this.open = false;
this.getList();
});
} else {
addCategory(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.$modal.msgSuccess(this.$t('addSuccess'));
this.open = false;
this.getList();
});
@@ -255,7 +255,7 @@ export default {
handleDelete(row) {
const categoryIds = row.categoryId || this.ids;
let msg = "";
this.$modal.confirm('是否确认删除产品分类编号为"' + categoryIds + '"的数据项?').then(function () {
this.$modal.confirm(this.$t('product.category.142342-8', [categoryIds])).then(function () {
return delCategory(categoryIds).then(response => {
msg = response.msg;
});

View File

@@ -2,101 +2,101 @@
<div style="padding: 6px">
<el-card v-show="showSearch" style="margin-bottom: 6px">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px" style="margin-bottom:-20px;">
<el-form-item label="客户端ID" prop="clientId">
<el-input v-model="queryParams.clientId" placeholder="请输入客户端ID" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('speaker.clientDetails.index.893021-0')" prop="clientId">
<el-input v-model="queryParams.clientId" :placeholder="$t('speaker.clientDetails.index.893021-1')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="授权平台" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择平台" clearable size="small">
<el-form-item :label="$t('speaker.clientDetails.index.893021-2')" prop="type">
<el-select v-model="queryParams.type" :placeholder="$t('speaker.clientDetails.index.893021-3')" clearable size="small">
<el-option v-for="dict in dict.type.oauth_platform" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-tag type="danger" style="margin-left:15px;">该功能暂不可用,后面版本发布</el-tag>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
<el-tag type="danger" style="margin-left:15px;">{{ $t('system.clientDetails.293742-0') }}</el-tag>
</el-form-item>
<el-form-item style="float:right;">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['iot:clientDetails:add']">新增</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['iot:clientDetails:add']">{{ $t('add') }}</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card style="padding-bottom: 100px">
<el-table v-loading="loading" :data="clientDetailsList" @selection-change="handleSelectionChange">
<el-table-column label="客户端ID" align="center" prop="clientId" />
<el-table-column label="资源" align="center" prop="resourceIds" />
<el-table-column label="权限范围" align="center" prop="scope" />
<el-table-column label="授权平台" align="center" prop="type">
<el-table-column :label="$t('speaker.clientDetails.index.893021-0')" align="center" prop="clientId" />
<el-table-column :label="$t('system.clientDetails.293742-1')" align="center" prop="resourceIds" />
<el-table-column :label="$t('speaker.clientDetails.index.893021-12')" align="center" prop="scope" />
<el-table-column :label="$t('speaker.clientDetails.index.893021-2')" align="center" prop="type">
<template slot-scope="scope">
<dict-tag :options="dict.type.oauth_platform" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="自动授权" align="center" prop="autoapprove">
<el-table-column :label="$t('system.clientDetails.293742-2')" align="center" prop="autoapprove">
<template slot-scope="scope">
<span v-if="scope.row.autoapprove=='true'">自动授权</span>
<span v-if="scope.row.autoapprove=='false'">用户验证</span>
<span v-if="scope.row.autoapprove=='true'">{{ $t('system.clientDetails.293742-3') }}</span>
<span v-if="scope.row.autoapprove=='false'">{{ $t('system.clientDetails.293742-4') }}</span>
</template>
</el-table-column>
<el-table-column label="授权模式" align="center" prop="authorizedGrantTypes">
<el-table-column :label="$t('speaker.clientDetails.index.893021-14')" align="center" prop="authorizedGrantTypes">
<template slot-scope="scope">
<div v-html="formatGrantTypesDisplay(scope.row.authorizedGrantTypes)"></div>
</template>
</el-table-column>
<el-table-column label="回调地址" align="center" prop="webServerRedirectUri" min-width="130" />
<el-table-column label="权限" align="center" prop="authorities" />
<el-table-column label="Token有效期" align="center" prop="accessTokenValidity" />
<el-table-column label="Token刷新时间" align="center" prop="refreshTokenValidity" />
<el-table-column :label="$t('speaker.clientDetails.index.893021-15')" align="center" prop="webServerRedirectUri" min-width="130" />
<el-table-column :label="$t('system.clientDetails.293742-5')" align="center" prop="authorities" />
<el-table-column :label="$t('speaker.clientDetails.index.893021-16')" align="center" prop="accessTokenValidity" />
<el-table-column :label="$t('system.clientDetails.293742-6')" align="center" prop="refreshTokenValidity" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('opation')" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['iot:clientDetails:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:clientDetails:remove']" disabled>删除</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['iot:clientDetails:edit']">{{ $t('update') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:clientDetails:remove']" disabled>{{ $t('del') }}</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改云云对接对话框 -->
<!-- 添加或修改对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-form-item label="授权平台" prop="type">
<el-select v-model="form.type" placeholder="请选择授权平台">
<el-form-item :label="$t('speaker.clientDetails.index.893021-2')" prop="type">
<el-select v-model="form.type" :placeholder="$t('speaker.clientDetails.detail-dialog.455323-5')">
<el-option v-for="dict in dict.type.oauth_platform" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"></el-option>
</el-select>
</el-form-item>
<el-form-item label="客户端ID" prop="clientId">
<el-input v-model="form.clientId" placeholder="请输入客户端ID" />
<el-form-item :label="$t('speaker.clientDetails.index.893021-0')" prop="clientId">
<el-input v-model="form.clientId" :placeholder="$t('speaker.clientDetails.index.893021-1')" />
</el-form-item>
<el-form-item label="资源集合" prop="resourceIds">
<el-input v-model="form.resourceIds" placeholder="请输入资源" />
<el-form-item :label="$t('system.clientDetails.293742-7')" prop="resourceIds">
<el-input v-model="form.resourceIds" :placeholder="$t('system.clientDetails.293742-8')" />
</el-form-item>
<el-form-item label="授权模式" prop="authorizedGrantTypes">
<el-input v-model="form.authorizedGrantTypes" type="textarea" placeholder="请输入授权模式" />
<el-form-item :label="$t('speaker.clientDetails.index.893021-14')" prop="authorizedGrantTypes">
<el-input v-model="form.authorizedGrantTypes" type="textarea" :placeholder="$t('system.clientDetails.293742-9')" />
</el-form-item>
<el-form-item label="秘钥" prop="clientSecret">
<el-input v-model="form.clientSecret" placeholder="请输入客户端秘钥" />
<el-form-item :label="$t('speaker.clientDetails.detail-dialog.455323-15')" prop="clientSecret">
<el-input v-model="form.clientSecret" :placeholder="$t('system.clientDetails.293742-10')" />
</el-form-item>
<el-form-item label="回调地址" prop="webServerRedirectUri">
<el-input v-model="form.webServerRedirectUri" type="textarea" placeholder="请输入回调地址" />
<el-form-item :label="$t('speaker.clientDetails.index.893021-15')" prop="webServerRedirectUri">
<el-input v-model="form.webServerRedirectUri" type="textarea" :placeholder="$t('speaker.clientDetails.detail-dialog.455323-24')" />
</el-form-item>
<el-form-item label="权限" prop="authorities">
<el-input v-model="form.authorities" placeholder="请输入权限" />
<el-form-item :label="$t('system.clientDetails.293742-5')" prop="authorities">
<el-input v-model="form.authorities" :placeholder="$t('system.clientDetails.293742-11')" />
</el-form-item>
<el-form-item label="Token有效期" prop="accessTokenValidity">
<el-input v-model="form.accessTokenValidity" placeholder="请输入Token有效时间" />
<el-form-item :label="$t('speaker.clientDetails.index.893021-16')" prop="accessTokenValidity">
<el-input v-model="form.accessTokenValidity" :placeholder="$t('system.clientDetails.293742-12')" />
</el-form-item>
<el-form-item label="Token刷新时间" prop="refreshTokenValidity">
<el-input v-model="form.refreshTokenValidity" placeholder="请输入Token刷新有效时间" />
<el-form-item :label="$t('system.clientDetails.293742-6')" prop="refreshTokenValidity">
<el-input v-model="form.refreshTokenValidity" :placeholder="$t('system.clientDetails.293742-13')" />
</el-form-item>
<el-form-item label="预留信息" prop="additionalInformation">
<el-input v-model="form.additionalInformation" type="textarea" placeholder="请输入内容" />
<el-form-item :label="$t('speaker.clientDetails.detail-dialog.455323-25')" prop="additionalInformation">
<el-input v-model="form.additionalInformation" type="textarea" :placeholder="$t('product.category.142342-3')" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm" disabled> </el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm" disabled>{{ $t('confirm') }}</el-button>
<el-button @click="cancel">{{ $t('cancel') }}</el-button>
</div>
</el-dialog>
</el-card>
@@ -154,7 +154,7 @@ export default {
this.getList();
},
methods: {
/** 查询云云对接列表 */
/** 查询列表 */
getList() {
this.loading = true;
listClientDetails(this.queryParams).then((response) => {
@@ -206,7 +206,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = "添加云云对接";
this.title = this.$t('system.clientDetails.293742-14');
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -215,7 +215,7 @@ export default {
getClientDetails(clientId).then((response) => {
this.form = response.data;
this.open = true;
this.title = "修改云云对接";
this.title = this.$t('system.clientDetails.293742-15');
});
},
/** 提交按钮 */
@@ -224,13 +224,13 @@ export default {
if (valid) {
if (this.form.clientId != null) {
updateClientDetails(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.$modal.msgSuccess(this.$t('updateSuccess'));
this.open = false;
this.getList();
});
} else {
addClientDetails(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.$modal.msgSuccess(this.$t('addSuccess'));
this.open = false;
this.getList();
});
@@ -242,13 +242,13 @@ export default {
handleDelete(row) {
const clientIds = row.clientId || this.ids;
this.$modal
.confirm('是否确认删除云云对接编号为"' + clientIds + '"的数据项?')
.confirm(this.$t('speaker.clientDetails.index.893021-21', [clientIds]))
.then(function () {
return delClientDetails(clientIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
this.$modal.msgSuccess(this.$t('delSuccess'));
})
.catch(() => {});
},
@@ -273,15 +273,15 @@ export default {
/** 授权模式转换 */
convertGrantType(type) {
if (type == "client_credentials") {
return "客户端模式"
return this.$t('system.clientDetails.293742-16')
} else if (type == "password") {
return "密码模式";
return this.$t('system.clientDetails.293742-17');
} else if (type == "authorization_code") {
return "授权码模式";
return this.$t('system.clientDetails.293742-18');
} else if (type == "implicit") {
return "简化模式";
return this.$t('system.clientDetails.293742-19');
} else if (type == "refresh_token") {
return "刷新Token";
return this.$t('system.clientDetails.293742-20');
} else {
return "";
}

View File

@@ -2,53 +2,53 @@
<el-card style="margin: 6px; padding-bottom: 100px">
<el-tabs v-model="activeName" tab-position="left" @tab-click="tabChange" style="padding: 10px; min-height: 400px">
<el-tab-pane name="basic">
<span slot="label">* 基本信息</span>
<span slot="label">* {{ $t('device.device-edit.148398-0') }}</span>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row :gutter="100">
<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8">
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="form.deviceName" placeholder="请输入设备名称">
<el-button slot="append" @click="openSummaryDialog" v-if="form.deviceId != 0">摘要</el-button>
<el-form-item :label="$t('device.device-edit.148398-1')" prop="deviceName">
<el-input v-model="form.deviceName" :placeholder="$t('device.device-edit.148398-2')">
<el-button slot="append" @click="openSummaryDialog" v-if="form.deviceId != 0">{{ $t('device.device-edit.148398-3') }}</el-button>
</el-input>
</el-form-item>
<el-form-item label="" prop="productName">
<template slot="label">
<span style="color: red">*</span>
所属产品
{{ $t('device.device-edit.148398-4') }}
</template>
<el-input readonly v-model="form.productName" placeholder="请选择产品" :disabled="form.status != 1">
<el-button slot="append" @click="selectProduct()" :disabled="form.status != 1">选择</el-button>
<el-input readonly v-model="form.productName" :placeholder="$t('device.device-edit.148398-95')" :disabled="form.status != 1">
<el-button slot="append" @click="selectProduct()" :disabled="form.status != 1">{{ $t('device.device-edit.148398-6') }}</el-button>
</el-input>
</el-form-item>
<el-form-item label="" prop="serialNumber">
<template slot="label">
<span style="color: red">*</span>
设备编号
{{ $t('device.device-edit.148398-7') }}
</template>
<el-input v-model="form.serialNumber" placeholder="请输入设备编号" :disabled="form.status !== 1" maxlength="32">
<el-button v-if="form.deviceType !== 3" slot="append" @click="generateNum" :loading="genDisabled" :disabled="form.status != 1" v-hasPermi="['iot:device:add']">生成</el-button>
<el-button v-if="form.deviceType === 3" slot="append" @click="genSipID()" :disabled="form.status != 1" v-hasPermi="['iot:device:add']">生成</el-button>
<el-input v-model="form.serialNumber" :placeholder="$t('device.device-edit.148398-8')" :disabled="form.status !== 1" maxlength="32">
<el-button v-if="form.deviceType !== 3" slot="append" @click="generateNum" :loading="genDisabled" :disabled="form.status != 1" v-hasPermi="['iot:device:add']">{{ $t('device.device-edit.148398-9') }}</el-button>
<el-button v-if="form.deviceType === 3" slot="append" @click="genSipID()" :disabled="form.status != 1" v-hasPermi="['iot:device:add']">{{ $t('device.device-edit.148398-9') }}</el-button>
</el-input>
</el-form-item>
<el-form-item v-if="openServerTip">
<template>
<el-alert type="info" show-icon description="当前选择TCP协议,设备编号生成为HEX格式"></el-alert>
<el-alert type="info" show-icon :description="$t('device.device-edit.148398-10')"></el-alert>
</template>
</el-form-item>
<el-form-item v-if="openTip">
<template>
<el-alert type="success" show-icon description="当前选择的产品属于modbus协议,将在网关设备创建后根据采集点模板生成子设备"></el-alert>
<el-alert type="success" show-icon :description="$t('device.device-edit.148398-11')"></el-alert>
</template>
</el-form-item>
<el-form-item label="固件版本" prop="firmwareVersion">
<el-input v-model="form.firmwareVersion" placeholder="请输入固件版本" type="number" step="0.1" :disabled="form.status != 1 || form.deviceType === 3">
<el-form-item :label="$t('device.device-edit.148398-12')" prop="firmwareVersion">
<el-input v-model="form.firmwareVersion" :placeholder="$t('device.device-edit.148398-12')" type="number" step="0.1" :disabled="form.status != 1 || form.deviceType === 3">
<template slot="prepend">Version</template>
</el-input>
</el-form-item>
<el-form-item label="设备影子" prop="isShadow">
<el-form-item :label="$t('device.device-edit.148398-15')" prop="isShadow">
<el-switch v-model="form.isShadow" active-text="" inactive-text="" :active-value="1" :inactive-value="0" :disabled="form.deviceType === 3"></el-switch>
</el-form-item>
<el-form-item label="禁用设备" prop="deviceStatus">
<el-form-item :label="$t('device.device-edit.148398-16')" prop="deviceStatus">
<el-switch
v-model="deviceStatus"
active-text=""
@@ -59,47 +59,47 @@
active-color="#F56C6C"
></el-switch>
</el-form-item>
<el-form-item label="备注信息" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" rows="3" />
<el-form-item :label="$t('device.device-edit.148398-17')" prop="remark">
<el-input v-model="form.remark" type="textarea" :placeholder="$t('device.device-edit.148398-18')" rows="3" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8">
<el-form-item label="定位方式" prop="locationWay">
<el-select v-model="form.locationWay" placeholder="请选择设备状态" clearable size="small" style="width: 100%" :disabled="form.deviceType === 3">
<el-form-item :label="$t('device.device-edit.148398-19')" prop="locationWay">
<el-select v-model="form.locationWay" :placeholder="$t('device.device-edit.148398-20')" clearable size="small" style="width: 100%" :disabled="form.deviceType === 3">
<el-option v-for="dict in dict.type.iot_location_way" :key="dict.value" :label="dict.label" :value="Number(dict.value)" />
</el-select>
</el-form-item>
<el-form-item label="设备经度" prop="longitude">
<el-input v-model="form.longitude" placeholder="请输入设备经度" type="number" :disabled="form.locationWay != 3">
<el-link slot="append" :underline="false" href="https://api.map.baidu.com/lbsapi/getpoint/index.html" target="_blank" :disabled="form.locationWay != 3">坐标拾取</el-link>
<el-form-item :label="$t('device.device-edit.148398-21')" prop="longitude">
<el-input v-model="form.longitude" :placeholder="$t('device.device-edit.148398-22')" type="number" :disabled="form.locationWay != 3">
<el-link slot="append" :underline="false" href="https://api.map.baidu.com/lbsapi/getpoint/index.html" target="_blank" :disabled="form.locationWay != 3">{{ $t('device.device-edit.148398-23') }}</el-link>
</el-input>
</el-form-item>
<el-form-item label="设备纬度" prop="latitude">
<el-input v-model="form.latitude" placeholder="请输入设备纬度" type="number" :disabled="form.locationWay != 3">
<el-link slot="append" :underline="false" href="https://api.map.baidu.com/lbsapi/getpoint/index.html" target="_blank" :disabled="form.locationWay != 3">坐标拾取</el-link>
<el-form-item :label="$t('device.device-edit.148398-24')" prop="latitude">
<el-input v-model="form.latitude" :placeholder="$t('device.device-edit.148398-25')" type="number" :disabled="form.locationWay != 3">
<el-link slot="append" :underline="false" href="https://api.map.baidu.com/lbsapi/getpoint/index.html" target="_blank" :disabled="form.locationWay != 3">{{ $t('device.device-edit.148398-23') }}</el-link>
</el-input>
</el-form-item>
<el-form-item label="所在地址" prop="networkAddress">
<el-input v-model="form.networkAddress" placeholder="请输入设备所在地址" :disabled="form.locationWay != 3" />
<el-form-item :label="$t('device.device-edit.148398-26')" prop="networkAddress">
<el-input v-model="form.networkAddress" :placeholder="$t('device.device-edit.148398-27')" :disabled="form.locationWay != 3" />
</el-form-item>
<el-form-item label="入网地址" prop="networkIp">
<el-input v-model="form.networkIp" placeholder="设备入网IP" disabled />
<el-form-item :label="$t('device.device-edit.148398-28')" prop="networkIp">
<el-input v-model="form.networkIp" :placeholder="$t('device.device-edit.148398-29')" disabled />
</el-form-item>
<el-form-item label="激活时间" prop="activeTime">
<el-date-picker clearable v-model="form.activeTime" type="date" value-format="yyyy-MM-dd" placeholder="设备激活时间" disabled style="width: 100%"></el-date-picker>
<el-form-item :label="$t('device.device-edit.148398-30')" prop="activeTime">
<el-date-picker clearable v-model="form.activeTime" type="date" value-format="yyyy-MM-dd" :placeholder="$t('device.device-edit.148398-31')" disabled style="width: 100%"></el-date-picker>
</el-form-item>
<el-form-item label="设备信号" prop="rssi">
<el-input v-model="form.rssi" placeholder="设备信号强度" disabled />
<el-form-item :label="$t('device.device-edit.148398-32')" prop="rssi">
<el-input v-model="form.rssi" :placeholder="$t('device.device-edit.148398-33')" disabled />
</el-form-item>
<el-form-item label="其他信息" prop="remark" v-if="form.deviceId != 0">
<el-form-item :label="$t('device.device-edit.148398-34')" prop="remark" v-if="form.deviceId != 0">
<dict-tag :options="dict.type.iot_device_status" :value="form.status" style="display: inline-block; margin-right: 8px" />
<el-button size="small" @click="handleViewMqtt()">认证信息</el-button>
<el-button size="small" @click="openCodeDialog()">二维码</el-button>
<el-button size="small" @click="handleViewMqtt()">{{ $t('device.device-edit.148398-35') }}</el-button>
<el-button size="small" @click="openCodeDialog()">{{ $t('device.device-edit.148398-36') }}</el-button>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8" v-if="form.deviceId != 0">
<div style="border: 1px solid #dfe4ed; border-radius: 5px; padding: 5px; text-align: center; line-height: 400px">
<div id="map" style="height: 435px; width: 100%">地图展示区域新增后显示</div>
<div id="map" style="height: 435px; width: 100%">{{ $t('device.device-edit.148398-37') }}</div>
</div>
</el-col>
</el-row>
@@ -107,8 +107,8 @@
<el-form label-width="100px" style="margin-top: 50px">
<el-form-item style="text-align: center; margin-left: -100px; margin-top: 10px">
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:device:edit']" v-show="form.deviceId != 0"> </el-button>
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:device:add']" v-show="form.deviceId == 0"> </el-button>
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:device:edit']" v-show="form.deviceId != 0">{{ $t('device.device-timer.433369-33') }}</el-button>
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:device:add']" v-show="form.deviceId == 0">{{ $t('device.device-timer.433369-32') }}</el-button>
</el-form-item>
</el-form>
@@ -119,31 +119,31 @@
</el-tab-pane>
<el-tab-pane name="runningStatus" key="1" v-if="form.deviceType !== 3 && form.deviceId !=0 && !isSubDev">
<span slot="label">运行状态</span>
<span slot="label">{{ $t('device.device-edit.148398-42') }}</span>
<running-status ref="runningStatus" :device="form" @statusEvent="getDeviceStatusData($event)"/>
</el-tab-pane>
<el-tab-pane name="videoLive" key="2" v-if="form.deviceType === 3 && form.deviceId !=0 ">
<span slot="label">设备直播</span>
<span slot="label">{{ $t('device.device-edit.148398-45') }}</span>
<device-live-stream ref="deviceLiveStream" :device="form" />
</el-tab-pane>
<el-tab-pane name="deviceTimer" key="3" v-if="form.deviceType !== 3 && form.deviceId !=0 && hasShrarePerm('timer')">
<span slot="label">设备定时</span>
<span slot="label">{{ $t('device.device-edit.148398-47') }}</span>
<device-timer ref="deviceTimer" :device="form" />
</el-tab-pane>
<el-tab-pane name="deviceUser" key="4" v-if="form.deviceId !=0">
<span slot="label">设备用户</span>
<span slot="label">{{ $t('device.device-user.037521-12') }}</span>
<device-user ref="deviceUser" :device="form" @userEvent="getUserData($event)" />
</el-tab-pane>
<el-tab-pane name="deviceLog" key="5" v-if="form.deviceType !== 3 && form.deviceId !=0 && hasShrarePerm('log')" lazy>
<span slot="label">事件日志</span>
<span slot="label">{{ $t('device.device-edit.148398-49') }}</span>
<device-log ref="deviceLog" :device="form" />
</el-tab-pane>
<el-tab-pane name="deviceFuncLog" key="6" v-if="form.deviceType !== 3 && form.deviceId !=0 && hasShrarePerm('log')" lazy>
<span slot="label">指令日志</span>
<span slot="label">{{ $t('device.device-edit.148398-50') }}</span>
<device-func ref="deviceFuncLog" :device="form" />
</el-tab-pane>
@@ -156,63 +156,63 @@
<el-tab-pane name="deviceReturn" disabled>
<span slot="label">
<el-button type="info" size="mini" @click="goBack()">返回列表</el-button>
<el-button type="info" size="mini" @click="goBack()">{{ $t('device.device-edit.148398-53') }}</el-button>
</span>
</el-tab-pane>
</el-tabs>
<!-- 设备配置JSON -->
<el-dialog title="摘要(设备上传的只读数据)" :visible.sync="openSummary" width="700px" append-to-body>
<el-dialog :title="$t('device.device-edit.148398-54')" :visible.sync="openSummary" width="700px" append-to-body>
<el-row :gutter="20">
<el-col :span="14">
<div style="border: 1px solid #ccc; margin-top: -15px; height: 350px; width: 360px; overflow: scroll">
<json-viewer :value="summary" :expand-depth="10" copyable>
<template v-slot:copy>复制</template>
<template v-slot:copy>{{ $t('device.device-edit.148398-55') }}</template>
</json-viewer>
</div>
</el-col>
<el-col :span="10">
<div style="border: 1px solid #ccc; width: 200px; text-align: center; margin-left: 20px; margin-top: -10px">
<vue-qr :text="qrText" :size="200"></vue-qr>
<div style="padding-bottom: 10px">设备二维码</div>
<div style="padding-bottom: 10px">{{ $t('device.device-edit.148398-56') }}</div>
</div>
</el-col>
</el-row>
<div slot="footer" class="dialog-footer">
<el-button type="info" @click="closeSummaryDialog"> </el-button>
<el-button type="info" @click="closeSummaryDialog">{{ $t('device.device-edit.148398-57') }}</el-button>
</div>
</el-dialog>
<!-- 二维码 -->
<el-dialog :visible.sync="openCode" width="300px" append-to-body>
<div style="border: 1px solid #ccc; width: 220px; text-align: center; margin: 0 auto; margin-top: -15px">
<vue-qr :text="qrText" :size="200"></vue-qr>
<div style="padding-bottom: 10px">设备二维码</div>
<div style="padding-bottom: 10px">{{ $t('device.device-edit.148398-56') }}</div>
</div>
</el-dialog>
<el-dialog title="Mqtt连接参数" :visible.sync="openViewMqtt" width="600px" :show-close="true" append-to-body :close-on-click-modal="false">
<el-dialog :title="$t('device.device-edit.148398-58')" :visible.sync="openViewMqtt" width="600px" :show-close="true" append-to-body :close-on-click-modal="false">
<el-form ref="listQuery" :model="listQuery" :rules="rules" label-width="150px">
<el-form-item label="客户端ID" prop="clientId">
<el-form-item :label="$t('device.device-edit.148398-88')" prop="clientId">
<el-input v-model="listQuery.clientId" readonly style="width: 80%" />
</el-form-item>
<el-form-item label="MQ账号" prop="username">
<el-form-item :label="$t('device.device-edit.148398-92')" prop="username">
<el-input v-model="listQuery.username" readonly style="width: 80%" />
</el-form-item>
<el-form-item label="MQ密码" prop="passwd">
<el-form-item :label="$t('device.device-edit.148398-93')" prop="passwd">
<el-input clearable v-model="listQuery.passwd" readonly style="width: 80%"></el-input>
</el-form-item>
<el-form-item label="订阅主题" prop="subscribeTopic">
<el-form-item :label="$t('device.device-edit.148398-87')" prop="subscribeTopic">
<el-input clearable v-model="listQuery.subscribeTopic" readonly style="width: 80%"></el-input>
</el-form-item>
<el-form-item label="发布主题" prop="reportTopic">
<el-form-item :label="$t('device.device-edit.148398-106')" prop="reportTopic">
<el-input clearable v-model="listQuery.reportTopic" readonly style="width: 80%"></el-input>
</el-form-item>
<el-form-item label="连接端口" prop="port">
<el-form-item :label="$t('device.device-edit.148398-90')" prop="port">
<el-input clearable v-model="listQuery.port" readonly style="width: 80%"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button class="btns" type="primary" @click="doCopy(2)">一键复制</el-button>
<el-button @click="closeSummaryDialog"> </el-button>
<el-button class="btns" type="primary" @click="doCopy(2)">{{ $t('device.device-edit.148398-59') }}</el-button>
<el-button @click="closeSummaryDialog">{{ $t('device.device-edit.148398-57') }}</el-button>
</div>
</el-dialog>
</el-card>
@@ -343,20 +343,20 @@ export default {
deviceName: [
{
required: true,
message: '设备名称不能为空',
message: this.$t('device.device-edit.148398-60'),
trigger: 'blur',
},
{
min: 2,
max: 32,
message: '设备名称长度在 2 到 32 个字符',
message: this.$t('device.device-edit.148398-61'),
trigger: 'blur',
},
],
firmwareVersion: [
{
required: true,
message: '固件版本不能为空',
message: this.$t('device.device-edit.148398-62'),
trigger: 'blur',
},
],
@@ -407,8 +407,8 @@ export default {
return;
}
if (topics[3] == 'status' || topics[2] == 'status') {
console.log('接收到【设备状态-详情】主题:', topic);
console.log('接收到【设备状态-详情】内容:', message);
console.log(this.$t('device.device-edit.148398-63'), topic);
console.log(this.$t('device.device-edit.148398-64'), message);
// 更新列表中设备的状态
if (this.form.serialNumber == deviceNum) {
this.oldDeviceStatus = message.status;
@@ -782,16 +782,16 @@ export default {
/** 提交按钮 */
async submitForm() {
if (this.form.serialNumber == null || this.form.serialNumber == 0) {
this.$modal.alertError('设备编号不能为空');
this.$modal.alertError(this.$t('device.device-edit.148398-65'));
return;
}
let reg = /^[0-9a-zA-Z]+$/;
if (!reg.test(this.form.serialNumber)) {
this.$modal.alertError('设备编号只能是字母和数字');
this.$modal.alertError(this.$t('device.device-edit.148398-66'));
return;
}
if (this.form.productId == null || this.form.productId == 0) {
this.$modal.alertError('所属产品不能为空');
this.$modal.alertError(this.$t('device.device-edit.148398-67'));
return;
}
@@ -802,7 +802,7 @@ export default {
if (response.data == 0) {
this.$modal.alertError(response.msg);
} else {
this.$modal.alertSuccess('修改成功');
this.$modal.alertSuccess(this.$t('device.device-edit.148398-68'));
this.form = JSON.parse(JSON.stringify(this.form));
this.loadMap();
}
@@ -812,13 +812,13 @@ export default {
// 获取设备状态
await this.getDeviceStatusWitchThingsModel(response);
if (this.form.deviceId == null || this.form.deviceId == 0) {
this.$modal.alertError('设备编号已经存在,添加设备失败');
this.$modal.alertError(this.$t('device.device-edit.148398-69'));
} else {
if (this.form.status == 2) {
this.deviceStatus = 1;
}
this.$modal.alertSuccess('添加设备成功');
this.$modal.alertSuccess(this.$t('device.device-edit.148398-70'));
this.loadMap();
}
});
@@ -953,7 +953,7 @@ export default {
// 生成随机字母和数字
generateNum() {
if (!this.form.productId || this.form.productId == 0) {
this.$modal.alertError('请先选择产品');
this.$modal.alertError(this.$t('device.device-edit.148398-72'));
return;
}
this.genDisabled = true;

View File

@@ -1,44 +1,44 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="请选择设备从机:" label-width="120px" v-if="isSubDev">
<el-select v-model="queryParams.slaveId" placeholder="请选择设备从机" @change="selectSlave">
<el-option v-for="slave in slaveList" :key="slave.slaveId" :label="`${slave.deviceName} (从机地址:${slave.slaveId})`" :value="slave.slaveId"></el-option>
<el-form-item :label="$t('device.device-functionlog.399522-0')" label-width="120px" v-if="isSubDev">
<el-select v-model="queryParams.slaveId" :placeholder="$t('device.device-functionlog.399522-1')" @change="selectSlave">
<el-option v-for="slave in slaveList" :key="slave.slaveId" :label="`${slave.deviceName} (${ $t('device.device-functionlog.399522-2').replace('$', slave.slaveId) })`" :value="slave.slaveId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="日志类型" prop="funType">
<el-select v-model="queryParams.funType" placeholder="请选择类型" clearable size="small">
<el-form-item :label="$t('device.device-functionlog.399522-3')" prop="funType">
<el-select v-model="queryParams.funType" :placeholder="$t('device.device-functionlog.399522-4')" clearable size="small">
<el-option v-for="dict in dict.type.iot_function_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="标识符" prop="identify">
<el-input v-model="queryParams.identify" placeholder="请输入标识符" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('device.device-functionlog.399522-5')" prop="identify">
<el-input v-model="queryParams.identify" :placeholder="$t('device.device-functionlog.399522-6')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="时间范围">
<el-date-picker v-model="daterangeTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
<el-form-item :label="$t('device.device-functionlog.399522-7')">
<el-date-picker v-model="daterangeTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" :start-placeholder="$t('device.device-functionlog.399522-8')" :end-placeholder="$t('device.device-functionlog.399522-9')"></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('device.device-functionlog.399522-10') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('device.device-functionlog.399522-11') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="logList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column :label="showName" align="center" prop="identify" />
<el-table-column label="指令类型" align="center" prop="funType" width="120px">
<el-table-column :label="$t('device.device-functionlog.399522-12')" align="center" prop="funType" width="120px">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_function_type" :value="scope.row.funType" />
</template>
</el-table-column>
<el-table-column label="设置值" align="center" prop="funValue" />
<el-table-column label="设备编号" align="center" prop="serialNumber" />
<el-table-column label="下发时间" align="center" prop="createTime" />
<el-table-column label="下发结果描述" align="center" prop="resultMsg" />
<el-table-column label="操作" align="center" width="80">
<el-table-column :label="$t('device.device-functionlog.399522-13')" align="center" prop="funValue" />
<el-table-column :label="$t('device.device-edit.148398-7')" align="center" prop="serialNumber" />
<el-table-column :label="$t('device.device-functionlog.399522-15')" align="center" prop="createTime" />
<el-table-column :label="$t('device.device-functionlog.399522-16')" align="center" prop="resultMsg" />
<el-table-column :label="$t('device.index.105953-34')" align="center" width="80">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:device:remove']">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:device:remove']">{{ $t('device.device-functionlog.399522-18') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -65,7 +65,7 @@ export default {
this.deviceInfo = newVal;
if (this.deviceInfo && this.deviceInfo.deviceId != 0) {
this.isSubDev = this.deviceInfo.subDeviceList && this.deviceInfo.subDeviceList.length > 0;
this.showName = this.isSubDev ? '寄存器地址' : '标识符';
this.showName = this.isSubDev ? this.$t('device.device-functionlog.399522-19') : this.$t('device.device-functionlog.399522-5');
this.queryParams.deviceId = this.deviceInfo.deviceId;
this.queryParams.slaveId = this.deviceInfo.slaveId;
this.queryParams.serialNumber = this.deviceInfo.serialNumber;
@@ -122,10 +122,10 @@ export default {
slaveList: [],
// 表单校验
rules: {
identify: [{ required: true, message: '标识符不能为空', trigger: 'blur' }],
funType: [{ required: true, message: '功能下发类型不能为空', trigger: 'change' }],
funValue: [{ required: true, message: '日志值不能为空', trigger: 'blur' }],
serialNumber: [{ required: true, message: '设备编号不能为空', trigger: 'blur' }],
identify: [{ required: true, message: this.$t('device.device-functionlog.399522-20'), trigger: 'blur' }],
funType: [{ required: true, message: this.$t('device.device-functionlog.399522-21'), trigger: 'change' }],
funValue: [{ required: true, message: this.$t('device.device-functionlog.399522-22'), trigger: 'blur' }],
serialNumber: [{ required: true, message: this.$t('device.device-functionlog.399522-23'), trigger: 'blur' }],
},
};
},
@@ -195,13 +195,13 @@ export default {
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除设备服务下发日志编号为"' + ids + '"的数据项?')
.confirm(this.$t('device.device-functionlog.399522-24', [ids]))
.then(function () {
return delLog(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
this.$modal.msgSuccess(this.$t('device.device-functionlog.399522-26'));
})
.catch(() => {});
},

View File

@@ -1,37 +1,46 @@
<template>
<div style="padding-left:20px;">
<div style="padding-left: 20px">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="日志类型" prop="logType">
<el-select v-model="queryParams.logType" placeholder="请选择类型" clearable size="small">
<el-form-item :label="$t('device.device-log.798283-0')" prop="logType">
<el-select v-model="queryParams.logType" :placeholder="$t('device.device-log.798283-1')" clearable size="small">
<el-option v-for="dict in dict.type.iot_event_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="标识符" prop="identify">
<el-input v-model="queryParams.identify" placeholder="请输入标识符" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('device.device-log.798283-2')" prop="identify">
<el-input v-model="queryParams.identify" :placeholder="$t('device.device-log.798283-3')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="时间范围">
<el-date-picker v-model="daterangeTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
<el-form-item :label="$t('device.device-log.798283-4')">
<el-date-picker
v-model="daterangeTime"
size="small"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
:start-placeholder="$t('device.device-log.798283-5')"
:end-placeholder="$t('device.device-log.798283-6')"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('device.device-log.798283-7') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('device.device-log.798283-8') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="deviceLogList" size="mini">
<el-table-column label="类型" align="center" prop="logType" width="120">
<el-table-column :label="$t('device.device-log.798283-9')" align="center" prop="logType" width="120">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_event_type" :value="scope.row.logType" />
</template>
</el-table-column>
<el-table-column label="模式" align="center" prop="logType" width="120">
<el-table-column :label="$t('device.device-log.798283-10')" align="center" prop="logType" width="120">
<template slot-scope="scope">
<el-tag type="primary" v-if="scope.row.mode==1">影子模式</el-tag>
<el-tag type="success" v-else-if="scope.row.mode==2">在线模式</el-tag>
<el-tag type="info" v-else>其他信息</el-tag>
<el-tag type="primary" v-if="scope.row.mode == 1">{{ $t('device.device-log.798283-11') }}</el-tag>
<el-tag type="success" v-else-if="scope.row.mode == 2">{{ $t('device.device-log.798283-12') }}</el-tag>
<el-tag type="info" v-else>{{ $t('device.device-log.798283-13') }}</el-tag>
</template>
</el-table-column>
<el-table-column label="时间" align="center" prop="createTime" width="150">
<el-table-column :label="$t('device.device-log.798283-14')" align="center" prop="createTime" width="150">
<template slot-scope="scope">
<span>{{ scope.row.createTime }}</span>
</template>
@@ -43,33 +52,29 @@
</template>
</el-table-column>
<el-table-column label="备注" header-align="center" align="left" prop="remark">
<el-table-column :label="$t('device.device-log.798283-16')" header-align="center" align="left" prop="remark">
<template slot-scope="scope">
{{scope.row.remark==null ?"无":scope.row.remark}}
{{ scope.row.remark == null ? '无' : scope.row.remark }}
</template>
</el-table-column>
</el-table>
<div style="height:40px;">
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
<div style="height: 40px">
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
</div>
</div>
</div>
</template>
<script>
import {
listEventLog
} from "../../../api/iot/eventLog";
import { listEventLog } from '../../../api/iot/eventLog';
export default {
name: "DeviceLog",
dicts: ['iot_event_type', "iot_yes_no"],
name: 'DeviceLog',
dicts: ['iot_event_type', 'iot_yes_no'],
props: {
device: {
type: Object,
default: null
}
default: null,
},
},
watch: {
// 获取到父组件传递的device后刷新列表
@@ -81,7 +86,7 @@ export default {
// 解析缓存物模型
this.thingsModel = this.deviceInfo.cacheThingsModel;
}
}
},
},
data() {
return {
@@ -118,7 +123,7 @@ export default {
/** 查询设备日志列表 */
getList() {
this.loading = true;
listEventLog(this.addDateRange(this.queryParams, this.daterangeTime)).then(response => {
listEventLog(this.addDateRange(this.queryParams, this.daterangeTime)).then((response) => {
this.deviceLogList = response.rows;
this.total = response.total;
this.loading = false;
@@ -131,65 +136,83 @@ export default {
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.daterangeTime=[];
this.resetForm('queryForm');
this.daterangeTime = [];
this.handleQuery();
},
/** 导出按钮操作 */
handleExport() {
this.download('iot/event/export', {
...this.queryParams
}, `eventLog_${new Date().getTime()}.xlsx`)
this.download(
'iot/event/export',
{
...this.queryParams,
},
`eventLog_${new Date().getTime()}.xlsx`
);
},
/** 格式化显示数据定义 */
formatValueDisplay(row) {
// 类型1=属性上报2=调用功能3=事件上报4=设备升级5=设备上线6=设备离线)
if (row.logType == 1) {
let propertyItem = this.getThingsModelItem(1, row.identify);
if (propertyItem != "") {
return (propertyItem.parentName ? '[' + propertyItem.parentName + (propertyItem.arrayIndex ? propertyItem.arrayIndex : '') + '] ' : '') +
if (propertyItem != '') {
return (
(propertyItem.parentName ? '[' + propertyItem.parentName + (propertyItem.arrayIndex ? propertyItem.arrayIndex : '') + '] ' : '') +
propertyItem.name +
' <span style="color:#409EFF;">' + this.getThingsModelItemValue(propertyItem, row.logValue) + ' ' +
(propertyItem.datatype.unit != undefined ? propertyItem.datatype.unit : '') + '</span>';
' <span style="color:#409EFF;">' +
this.getThingsModelItemValue(propertyItem, row.logValue) +
' ' +
(propertyItem.datatype.unit != undefined ? propertyItem.datatype.unit : '') +
'</span>'
);
}
} else if (row.logType == 2) {
let functionItem = this.getThingsModelItem(2, row.identify);
if (functionItem != "") {
return (functionItem.parentName ? '[' + functionItem.parentName + (functionItem.arrayIndex ? functionItem.arrayIndex : '') + '] ' : '') +
if (functionItem != '') {
return (
(functionItem.parentName ? '[' + functionItem.parentName + (functionItem.arrayIndex ? functionItem.arrayIndex : '') + '] ' : '') +
functionItem.name +
' <span style="color:#409EFF">' + this.getThingsModelItemValue(functionItem, row.logValue) + ' ' +
(functionItem.datatype.unit != undefined ? functionItem.datatype.unit : '') + '</span>';
' <span style="color:#409EFF">' +
this.getThingsModelItemValue(functionItem, row.logValue) +
' ' +
(functionItem.datatype.unit != undefined ? functionItem.datatype.unit : '') +
'</span>'
);
}
} else if (row.logType == 3) {
let eventItem = this.getThingsModelItem(3, row.identify);
if (eventItem != "") {
return (eventItem.parentName ? '[' + eventItem.parentName + (eventItem.arrayIndex ? eventItem.arrayIndex : '') + '] ' : '') +
if (eventItem != '') {
return (
(eventItem.parentName ? '[' + eventItem.parentName + (eventItem.arrayIndex ? eventItem.arrayIndex : '') + '] ' : '') +
eventItem.name +
' <span style="color:#409EFF">' + this.getThingsModelItemValue(eventItem, row.logValue) + ' ' +
(eventItem.datatype.unit != undefined ? eventItem.datatype.unit : '') + '</span>';
}
else {
' <span style="color:#409EFF">' +
this.getThingsModelItemValue(eventItem, row.logValue) +
' ' +
(eventItem.datatype.unit != undefined ? eventItem.datatype.unit : '') +
'</span>'
);
} else {
return row.logValue;
}
} else if (row.logType == 4) {
return '<span style="font-weight:bold">设备升级</span>';
return '<span style="font-weight:bold">' + this.$t('device.device-log.798283-18') + '</span>';
} else if (row.logType == 5) {
return '<span style="font-weight:bold">设备上线</span>';
return '<span style="font-weight:bold">' + this.$t('device.device-log.798283-19') + '</span>';
} else if (row.logType == 6) {
return '<span style="font-weight:bold">设备离线</span>';
return '<span style="font-weight:bold">' + this.$t('device.device-log.798283-20') + '</span>';
}
return "";
return '';
},
/** 获取物模型项中的值*/
getThingsModelItemValue(item, oldValue) {
// 枚举和布尔转换为文字
if (item.datatype.type == "bool") {
if (oldValue == "0") {
if (item.datatype.type == 'bool') {
if (oldValue == '0') {
return item.datatype.falseText;
} else if (oldValue == "1") {
} else if (oldValue == '1') {
return item.datatype.trueText;
}
} else if (item.datatype.type == "enum") {
} else if (item.datatype.type == 'enum') {
for (let i = 0; i < item.datatype.enumList.length; i++) {
if (oldValue == item.datatype.enumList[i].value) {
return item.datatype.enumList[i].text;
@@ -207,7 +230,7 @@ export default {
return this.thingsModel.properties[i];
}
// 对象 object
if (this.thingsModel.properties[i].datatype.type == "object") {
if (this.thingsModel.properties[i].datatype.type == 'object') {
for (let j = 0; j < this.thingsModel.properties[i].datatype.params.length; j++) {
if (this.thingsModel.properties[i].datatype.params[j].id == identify) {
this.thingsModel.properties[i].datatype.params[j].parentName = this.thingsModel.properties[i].name;
@@ -216,12 +239,12 @@ export default {
}
}
// 数组 array
if (this.thingsModel.properties[i].datatype.type == "array" && this.thingsModel.properties[i].datatype.arrayType) {
if (this.thingsModel.properties[i].datatype.arrayType == "object") {
if (this.thingsModel.properties[i].datatype.type == 'array' && this.thingsModel.properties[i].datatype.arrayType) {
if (this.thingsModel.properties[i].datatype.arrayType == 'object') {
// 数组元素格式array_01_parentId_humidity,array_01_前缀终端上报时加上物模型中没有
let realidentify = identify;
let arrayIndex = 0;
if (identify.indexOf("array_") > -1) {
if (identify.indexOf('array_') > -1) {
arrayIndex = identify.substring(6, 8);
realidentify = identify.substring(9);
}
@@ -238,12 +261,11 @@ export default {
for (let j = 0; j < this.thingsModel.properties[i].datatype.arrayCount.length; j++) {
if (this.thingsModel.properties[i].id == realidentify) {
this.thingsModel.properties[i].arrayIndex = Number(arrayIndex) + 1;
this.thingsModel.properties[i].parentName = "元素";
this.thingsModel.properties[i].parentName = this.$t('device.device-log.798283-21');
return this.thingsModel.properties[i];
}
}
}
}
}
} else if (type == 2 && this.thingsModel.functions) {
@@ -253,7 +275,7 @@ export default {
return this.thingsModel.functions[i];
}
// 对象 object
if (this.thingsModel.functions[i].datatype.type == "object") {
if (this.thingsModel.functions[i].datatype.type == 'object') {
for (let j = 0; j < this.thingsModel.functions[i].datatype.params.length; j++) {
if (this.thingsModel.functions[i].datatype.params[j].id == identify) {
this.thingsModel.functions[i].datatype.params[j].parentName = this.thingsModel.functions[i].name;
@@ -262,15 +284,15 @@ export default {
}
}
// 数组 array
if (this.thingsModel.functions[i].datatype.type == "array" && this.thingsModel.functions[i].datatype.arrayType) {
if (this.thingsModel.functions[i].datatype.type == 'array' && this.thingsModel.functions[i].datatype.arrayType) {
// 数组元素格式array_01_parentId_humidity,array_01_前缀终端上报时加上物模型中没有
let realidentify = identify;
let arrayIndex = 0;
if (identify.indexOf("array_") > -1) {
if (identify.indexOf('array_') > -1) {
arrayIndex = identify.substring(6, 8);
realidentify = identify.substring(9);
}
if (this.thingsModel.functions[i].datatype.arrayType == "object") {
if (this.thingsModel.functions[i].datatype.arrayType == 'object') {
for (let j = 0; j < this.thingsModel.functions[i].datatype.params.length; j++) {
if (this.thingsModel.functions[i].datatype.params[j].id == realidentify) {
// 标注索引和父级名称
@@ -284,23 +306,22 @@ export default {
for (let j = 0; j < this.thingsModel.functions[i].datatype.arrayCount.length; j++) {
if (this.thingsModel.functions[i].id == realidentify) {
this.thingsModel.functions[i].arrayIndex = Number(arrayIndex) + 1;
this.thingsModel.functions[i].parentName = "元素";
this.thingsModel.functions[i].parentName = this.$t('device.device-log.798283-21');
return this.thingsModel.functions[i];
}
}
}
}
}
} else if (type == 3 && this.thingsModel.events) {
for (let i = 0; i < this.thingsModel.events.length; i++) {
if (this.thingsModel.events[i].id == identify) {
if (this.ththingsModel.events[i].id == identify) {
return this.thingsModel.events[i];
}
}
}
return "";
}
}
return '';
},
},
};
</script>

View File

@@ -1,22 +1,22 @@
<template>
<div style="padding-left: 20px">
<el-form :inline="true" label-width="100px">
<el-form-item label="监测间隔(ms)">
<el-tooltip class="item" effect="light" content="取值范围500-10000毫秒" placement="top">
<el-input v-model="monitorInterval" placeholder="请输入监测间隔" type="number" clearable size="small" style="width: 180px" />
<el-form-item :label="$t('device.device-monitor.817489-0') + '(ms)'">
<el-tooltip class="item" effect="light" :content="$t('device.device-monitor.817489-1')" placement="top">
<el-input v-model="monitorInterval" :placeholder="$t('device.device-monitor.817489-2')" type="number" clearable size="small" style="width: 180px" />
</el-tooltip>
</el-form-item>
<el-form-item label="监测次数">
<el-tooltip class="item" effect="light" content="取值方位1-300" placement="top">
<el-input v-model="monitorNumber" placeholder="请输入监测次数" type="number" clearable size="small" style="width: 180px" />
<el-form-item :label="$t('device.device-monitor.817489-3')">
<el-tooltip class="item" effect="light" :content="$t('device.device-monitor.817489-4')" placement="top">
<el-input v-model="monitorNumber" :placeholder="$t('device.device-monitor.817489-5')" type="number" clearable size="small" style="width: 180px" />
</el-tooltip>
</el-form-item>
<el-form-item>
<el-button type="success" icon="el-icon-video-play" size="mini" @click="beginMonitor()" style="margin-left: 30px">开始监测</el-button>
<el-button type="danger" icon="el-icon-video-pause" size="mini" @click="stopMonitor()">停止监测</el-button>
<el-button type="success" icon="el-icon-video-play" size="mini" @click="beginMonitor()" style="margin-left: 30px">{{ $t('device.device-monitor.817489-6') }}</el-button>
<el-button type="danger" icon="el-icon-video-pause" size="mini" @click="stopMonitor()">{{ $t('device.device-monitor.817489-7') }}</el-button>
</el-form-item>
</el-form>
<el-row :gutter="20" v-loading="chartLoading" element-loading-text="正在接收设备数据,请耐心等待......" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)">
<el-row :gutter="20" v-loading="chartLoading" :element-loading-text="$t('device.device-monitor.817489-8')" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)">
<el-col :span="12" v-for="(item, index) in monitorThings" :key="index" style="margin-bottom: 20px">
<el-card shadow="hover" :body-style="{ paddingTop: '10px', marginBottom: '-20px' }">
<div ref="monitor" style="height: 210px; padding: 0"></div>
@@ -128,8 +128,8 @@ export default {
}
}
if (topics[3] == 'monitor') {
console.log('接收到【实时监测】主题:', topic);
console.log('接收到【实时监测】内容:', message);
console.log(this.$t('device.device-monitor.817489-11'), topic);
console.log(this.$t('device.device-monitor.817489-12'), message);
// 实时监测
this.chartLoading = false;
for (let k = 0; k < message.length; k++) {
@@ -190,10 +190,10 @@ export default {
this.dataList[i].data = [];
}
if (this.monitorInterval < 500 || this.monitorInterval > 10000) {
this.$modal.alertError('实时监测的间隔范围500-10000毫秒');
this.$modal.alertError(this.$t('device.device-monitor.817489-14'));
}
if (this.monitorNumber == 0 || this.monitorNumber > 300) {
this.$modal.alertError('实时监测数量范围1-300');
this.$modal.alertError(this.$t('device.device-monitor.817489-15'));
}
// Mqtt发布实时监测消息
let model = {};
@@ -212,7 +212,7 @@ export default {
this.chartLoading = false;
// Mqtt发布实时监测
let model = {};
model.name = '关闭实时监测';
model.name = this.$t('device.device-monitor.817489-17');
model.value = 0;
model.type = 4;
this.mqttPublish(this.deviceInfo, model);
@@ -228,7 +228,7 @@ export default {
option = {
title: {
left: 'center',
text: this.monitorThings[i].name + ' (单位 ' + (this.monitorThings[i].datatype.unit != undefined ? this.monitorThings[i].datatype.unit : '无') + '',
text: this.monitorThings[i].name + ' ' + this.$t('device.device-monitor.817489-18') + ' ' + (this.monitorThings[i].datatype.unit != undefined ? this.monitorThings[i].datatype.unit : this.$t('device.device-monitor.817489-19')) + '',
textStyle: {
fontSize: 14,
},

View File

@@ -1,57 +1,57 @@
<template>
<div style="padding-left: 20px">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="70px">
<el-form-item label="定时名称" prop="jobName">
<el-input v-model="queryParams.jobName" placeholder="请输入定时名称" clearable size="small"
<el-form-item :label="$t('device.device-timer.433369-0')" prop="jobName">
<el-input v-model="queryParams.jobName" :placeholder="$t('device.device-timer.433369-1')" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="定时状态" prop="status" style="margin-left: 20px">
<el-select v-model="queryParams.status" placeholder="请选择定时状态" clearable size="small">
<el-form-item :label="$t('device.device-timer.433369-2')" prop="status" style="margin-left: 20px">
<el-select v-model="queryParams.status" :placeholder="$t('device.device-timer.433369-3')" clearable size="small">
<el-option v-for="dict in dict.type.sys_job_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('device.device-timer.433369-4') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('device.device-timer.433369-5') }}</el-button>
</el-form-item>
<el-form-item style="float: right">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['iot:device:timer']">新增</el-button>
v-hasPermi="['iot:device:timer']">{{ $t('device.device-timer.433369-6') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="jobList" @selection-change="handleSelectionChange" size="small">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="名称" align="center" prop="jobName" :show-overflow-tooltip="true" />
<el-table-column label="描述" align="center" prop="cronText">
<el-table-column :label="$t('device.device-timer.433369-7')" align="center" prop="jobName" :show-overflow-tooltip="true" />
<el-table-column :label="$t('device.device-timer.433369-8')" align="center" prop="cronText">
<template slot-scope="scope">
<div v-html="formatCronDisplay(scope.row)"></div>
</template>
</el-table-column>
<el-table-column label="CRON表达式" align="center" prop="cronExpression" :show-overflow-tooltip="true" />
<el-table-column label="动作" align="left" prop="actions" :show-overflow-tooltip="true">
<el-table-column :label="$t('device.device-timer.433369-9')" align="center" prop="cronExpression" :show-overflow-tooltip="true" />
<el-table-column :label="$t('device.device-timer.433369-10')" align="left" prop="actions" :show-overflow-tooltip="true">
<template slot-scope="scope">
<div v-html="formatActionsDisplay(scope.row.actions)" style="overflow: hidden; white-space: nowrap"></div>
</template>
</el-table-column>
<el-table-column label="状态" align="center">
<el-table-column :label="$t('device.device-timer.433369-11')" align="center">
<template slot-scope="scope">
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1" active-text="启用"
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1" :active-text="$t('device.device-timer.433369-12')"
@change="handleStatusChange(scope.row)"></el-switch>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('device.index.105953-34')" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['iot:device:timer']">修改</el-button>
v-hasPermi="['iot:device:timer']">{{ $t('device.device-timer.433369-33') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-caret-right" @click="handleView(scope.row)"
v-hasPermi="['iot:device:timer']">定时详细</el-button>
v-hasPermi="['iot:device:timer']">{{ $t('device.device-timer.433369-15') }}</el-button>
<br />
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['iot:device:timer']">删除</el-button>
v-hasPermi="['iot:device:timer']">{{ $t('device.device-timer.433369-16') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-caret-right" @click="handleRun(scope.row)"
v-hasPermi="['iot:device:timer']">执行一次</el-button>
v-hasPermi="['iot:device:timer']">{{ $t('device.device-timer.433369-17') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -62,17 +62,17 @@
<!-- 添加或修改定时定时对话框 -->
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-form-item label="定时名称" prop="jobName">
<el-input v-model="form.jobName" placeholder="请输入定时名称" style="width: 340px" />
<el-form-item :label="$t('device.device-timer.433369-0')" prop="jobName">
<el-input v-model="form.jobName" :placeholder="$t('device.device-timer.433369-1')" style="width: 340px" />
</el-form-item>
<el-form-item label="执行时间" required>
<el-time-picker v-model="timerTimeValue" value-format="HH:mm" format="HH:mm" placeholder="选择时间" :editable="false"
<el-form-item :label="$t('device.device-timer.433369-18')" required>
<el-time-picker v-model="timerTimeValue" value-format="HH:mm" format="HH:mm" :placeholder="$t('device.device-timer.433369-19')" :editable="false"
style="width: 340px" @change="timeChange" :disabled="form.isAdvance == 1"></el-time-picker>
</el-form-item>
<el-form-item label="选择星期" prop="timerWeek">
<el-form-item :label="$t('device.device-timer.433369-20')" prop="timerWeek">
<el-row>
<el-col :span="18">
<el-select v-model="timerWeekValue" placeholder="请选择" multiple style="width: 100%" @change="weekChange"
<el-select v-model="timerWeekValue" :placeholder="$t('device.device-timer.433369-21')" multiple style="width: 100%" @change="weekChange"
:disabled="form.isAdvance == 1">
<el-option v-for="item in timerWeeks" :key="item.value" :label="item.label"
:value="item.value"></el-option>
@@ -80,13 +80,13 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="cron表达式" prop="cron">
<el-form-item :label="$t('device.device-timer.433369-22')" prop="cron">
<el-row>
<el-col :span="18">
<el-input v-model="form.cronExpression" placeholder="cron执行表达式" :disabled="form.isAdvance == 0">
<el-input v-model="form.cronExpression" :placeholder="$t('device.device-timer.433369-23')" :disabled="form.isAdvance == 0">
<template slot="append">
<el-button type="primary" @click="handleShowCron" :disabled="form.isAdvance == 0">
生成表达式
{{ $t('device.device-timer.433369-24') }}
<i class="el-icon-time el-icon--right"></i>
</el-button>
</template>
@@ -94,11 +94,11 @@
</el-col>
<el-col :span="4" :offset="1">
<el-checkbox v-model="form.isAdvance" :true-label="1" :false-label="0"
@change="customerCronChange">自定义表达式</el-checkbox>
@change="customerCronChange">{{ $t('device.device-timer.433369-25') }}</el-checkbox>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="定时状态" prop="status">
<el-form-item :label="$t('device.device-timer.433369-2')" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in dict.type.sys_job_status" :key="dict.value" :label="dict.value">{{ dict.label
}}</el-radio>
@@ -108,26 +108,26 @@
<div style="padding-bottom: 15px; padding: 0 20px">
<el-divider></el-divider>
</div>
<el-form-item label="执行动作" required>
<el-form-item :label="$t('device.device-timer.433369-26')" required>
<el-row v-for="(actionItem, index) in actionList" :key="index + 'action'" style="margin-bottom: 10px">
<el-col :span="4">
<el-select v-model="actionItem.type" placeholder="请选择类别" @change="actionTypeChange($event, index)">
<el-select v-model="actionItem.type" :placeholder="$t('device.device-timer.433369-27')" @change="actionTypeChange($event, index)">
<el-option v-for="(subItem, subIndex) in modelTypes" :key="subIndex + 'type'" :label="subItem.label"
:value="subItem.value"></el-option>
</el-select>
</el-col>
<el-col :span="4" :offset="1">
<el-select v-model="actionItem.id" placeholder="请选择" v-if="actionItem.type == 1"
<el-select v-model="actionItem.id" :placeholder="$t('device.device-timer.433369-21')" v-if="actionItem.type == 1"
@change="thingsModelItemChange($event, index)">
<el-option v-for="(subItem, subIndex) in thingsModel.properties" :key="subIndex + 'property'"
:label="subItem.name" :value="subItem.id"></el-option>
</el-select>
<el-select v-model="actionItem.id" placeholder="请选择" v-else-if="actionItem.type == 2"
<el-select v-model="actionItem.id" :placeholder="$t('device.device-timer.433369-21')" v-else-if="actionItem.type == 2"
@change="thingsModelItemChange($event, index)">
<el-option v-for="(subItem, subIndex) in thingsModel.functions" :key="subIndex + 'func'"
:label="subItem.name" :value="subItem.id"></el-option>
</el-select>
<el-select v-model="form.id" placeholder="请选择" v-else-if="actionItem.type == 3"
<el-select v-model="form.id" :placeholder="$t('device.device-timer.433369-21')" v-else-if="actionItem.type == 3"
@change="thingsModelItemChange($event, index)">
<el-option v-for="(subItem, subIndex) in thingsModel.functions" :key="subIndex + 'func'"
:label="subItem.name" :value="subItem.id"></el-option>
@@ -137,7 +137,7 @@
<!--物模型项的值-->
<span
v-if="actionItem.thingsModelItem && (actionItem.thingsModelItem.datatype.type == 'integer' || actionItem.thingsModelItem.datatype.type == 'decimal')">
<el-input v-model="actionItem.value" placeholder="" :max="actionItem.thingsModelItem.datatype.max"
<el-input v-model="actionItem.value" :placeholder="$t('device.device-timer.433369-29')" :max="actionItem.thingsModelItem.datatype.max"
:min="actionItem.thingsModelItem.datatype.min" type="number" size="small">
<template slot="append">{{ actionItem.thingsModelItem.datatype.unit }}</template>
</el-input>
@@ -148,80 +148,80 @@
inactive-value="0"></el-switch>
</span>
<span v-else-if="actionItem.thingsModelItem && actionItem.thingsModelItem.datatype.type == 'enum'">
<el-select v-model="actionItem.value" placeholder="请选择" style="width: 100%">
<el-select v-model="actionItem.value" :placeholder="$t('device.device-timer.433369-21')" style="width: 100%">
<el-option v-for="(subItem, subIndex) in actionItem.thingsModelItem.datatype.enumList"
:key="subIndex + 'things'" :label="subItem.text" :value="subItem.value"></el-option>
</el-select>
</span>
<span v-else-if="actionItem.thingsModelItem && actionItem.thingsModelItem.datatype.type == 'string'">
<el-input v-model="actionItem.value" placeholder="请输入字符串"
<el-input v-model="actionItem.value" :placeholder="$t('device.device-timer.433369-30')"
:max="actionItem.thingsModelItem.datatype.maxLength" />
</span>
<span v-else-if="actionItem.thingsModelItem && actionItem.thingsModelItem.datatype.type == 'array'">
<el-input v-model="actionItem.value" placeholder="请输入英文逗号分隔的数组" />
<el-input v-model="actionItem.value" :placeholder="$t('device.device-timer.433369-97')" />
</span>
</el-col>
<el-col :span="2" :offset="1" v-if="index != 0"><a style="color: #f56c6c"
@click="removeEnumItem(index)">删除</a></el-col>
@click="removeEnumItem(index)">{{ $t('del') }}</a></el-col>
</el-row>
<div>
+
<a style="color: #409eff" @click="addEnumItem()">添加执行动作</a>
<a style="color: #409eff" @click="addEnumItem()">{{ $t('device.device-timer.433369-31') }}</a>
</div>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm" :loading="submitButtonLoading"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm" :loading="submitButtonLoading">{{ $t('confirm') }}</el-button>
<el-button @click="cancel">{{ $t('cancel') }}</el-button>
</div>
</el-dialog>
<el-dialog title="Cron表达式生成器" :visible.sync="openCron" append-to-body destroy-on-close class="scrollbar">
<el-dialog :title="$t('device.device-timer.433369-35')" :visible.sync="openCron" append-to-body destroy-on-close class="scrollbar">
<crontab @hide="openCron = false" @fill="crontabFill" :expression="expression" style="padding-bottom: 80px">
</crontab>
</el-dialog>
<!-- 定时日志详细 -->
<el-dialog title="定时详细" :visible.sync="openView" width="700px" append-to-body>
<el-dialog :title="$t('device.device-timer.433369-15')" :visible.sync="openView" width="700px" append-to-body>
<el-form ref="form" :model="form" label-width="120px" size="mini">
<el-row>
<el-col :span="12">
<el-form-item label="定时编号:">{{ form.jobId }}</el-form-item>
<el-form-item label="定时名称:">{{ form.jobName }}</el-form-item>
<el-form-item :label="$t('device.device-timer.433369-36')">{{ form.jobId }}</el-form-item>
<el-form-item :label="$t('device.device-timer.433369-37')">{{ form.jobName }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="定时分组:">{{ jobGroupFormat(form) }}</el-form-item>
<el-form-item label="创建时间:">{{ form.createTime }}</el-form-item>
<el-form-item :label="$t('device.device-timer.433369-38')">{{ jobGroupFormat(form) }}</el-form-item>
<el-form-item :label="$t('device.device-timer.433369-39')">{{ form.createTime }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否并发:">
<div v-if="form.concurrent == 0">允许</div>
<div v-else-if="form.concurrent == 1">禁止</div>
<el-form-item :label="$t('device.device-timer.433369-40')">
<div v-if="form.concurrent == 0">{{ $t('device.device-timer.433369-41') }}</div>
<div v-else-if="form.concurrent == 1">{{ $t('device.device-timer.433369-42') }}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="cron表达式">{{ form.cronExpression }}</el-form-item>
<el-form-item :label="$t('device.device-timer.433369-43')">{{ form.cronExpression }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="执行策略:">
<div v-if="form.misfirePolicy == 0">默认策略</div>
<div v-else-if="form.misfirePolicy == 1">立即执行</div>
<div v-else-if="form.misfirePolicy == 2">执行一次</div>
<div v-else-if="form.misfirePolicy == 3">放弃执行</div>
<el-form-item :label="$t('device.device-timer.433369-44')">
<div v-if="form.misfirePolicy == 0">{{ $t('device.device-timer.433369-45') }}</div>
<div v-else-if="form.misfirePolicy == 1">{{ $t('device.device-timer.433369-46') }}</div>
<div v-else-if="form.misfirePolicy == 2">{{ $t('device.device-timer.433369-17') }}</div>
<div v-else-if="form.misfirePolicy == 3">{{ $t('device.device-timer.433369-47') }}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="下次执行时间:">{{ parseTime(form.nextValidTime) }}</el-form-item>
<el-form-item :label="$t('device.device-timer.433369-48')">{{ parseTime(form.nextValidTime) }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="定时状态:">
<div v-if="form.status == 0">正常</div>
<div v-else-if="form.status == 1">暂停</div>
<el-form-item :label="$t('device.device-timer.433369-49')">
<div v-if="form.status == 0">{{ $t('device.device-timer.433369-50') }}</div>
<div v-else-if="form.status == 1">{{ $t('device.device-timer.433369-51') }}</div>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="执行动作:">
<el-form-item :label="$t('device.device-timer.433369-52')">
<div v-html="formatActionsDisplay(form.actions)"
style="border: 1px solid #ddd; padding: 10px; border-radius: 5px; width: 465px"></div>
</el-form-item>
@@ -229,7 +229,7 @@
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="openView = false"> </el-button>
<el-button @click="openView = false">{{ $t('device.device-timer.433369-53') }}</el-button>
</div>
</el-dialog>
</div>
@@ -307,31 +307,31 @@ export default {
timerWeeks: [
{
value: 1,
label: '周一',
label: this.$t('device.device-timer.433369-54'),
},
{
value: 2,
label: '周二',
label: this.$t('device.device-timer.433369-55'),
},
{
value: 3,
label: '周三',
label: this.$t('device.device-timer.433369-56'),
},
{
value: 4,
label: '周四',
label: this.$t('device.device-timer.433369-57'),
},
{
value: 5,
label: '周五',
label: this.$t('device.device-timer.433369-58'),
},
{
value: 6,
label: '周六',
label: this.$t('device.device-timer.433369-59'),
},
{
value: 7,
label: '周日',
label: this.$t('device.device-timer.433369-60'),
},
],
timerWeekValue: [1, 2, 3, 4, 5, 6, 7],
@@ -341,11 +341,11 @@ export default {
modelTypes: [
{
value: 1,
label: '属性',
label: this.$t('device.device-timer.433369-61'),
},
{
value: 2,
label: '功能',
label: this.$t('device.device-timer.433369-62'),
},
],
// 表单参数
@@ -355,7 +355,7 @@ export default {
jobName: [
{
required: true,
message: '定时名称不能为空',
message: this.$t('device.device-timer.433369-63'),
trigger: 'blur',
},
],
@@ -443,14 +443,14 @@ export default {
},
// 定时状态修改
handleStatusChange(row) {
let text = row.status === '0' ? '启用' : '停用';
let text = row.status === '0' ? this.$t('device.device-timer.433369-12') : this.$t('device.device-timer.433369-64');
this.$modal
.confirm('确认要"' + text + '""' + row.jobName + '"定时吗?')
.confirm(this.$t('device.device-timer.433369-65', [text]))
.then(function () {
return changeJobStatus(row.jobId, row.status);
})
.then(() => {
this.$modal.msgSuccess(text + '成功');
this.$modal.msgSuccess(text + this.$t('device.device-timer.433369-67'));
})
.catch(function () {
row.status = row.status === '0' ? '1' : '0';
@@ -459,12 +459,12 @@ export default {
/* 立即执行一次 */
handleRun(row) {
this.$modal
.confirm('确认要立即执行一次"' + row.jobName + '"定时吗?')
.confirm(this.$t('device.device-timer.433369-68', [row.jobName]))
.then(function () {
return runJob(row.jobId, row.jobGroup);
})
.then(() => {
this.$modal.msgSuccess('执行成功');
this.$modal.msgSuccess(this.$t('device.device-timer.433369-69'));
})
.catch(() => { });
},
@@ -488,7 +488,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = '添加定时';
this.title = this.$t('device.device-timer.433369-70');
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -521,7 +521,7 @@ export default {
this.timerTimeValue = this.form.cronExpression.substring(5, 7) + ':' + this.form.cronExpression.substring(2, 4);
}
this.open = true;
this.title = '修改定时';
this.title = this.$t('device.device-timer.433369-71');
});
},
/** 提交按钮 */
@@ -531,22 +531,22 @@ export default {
// 验证不能为空
if (this.form.isAdvance == 0) {
if (this.timerTimeValue == '' || this.timerTimeValue == null) {
this.$modal.alertError('执行时间不能空');
this.$modal.alertError(this.$t('device.device-timer.433369-87'));
return;
}
if (this.timerWeekValue == null || this.timerWeekValue == '') {
this.$modal.alertError('请选择要执行的星期');
this.$modal.alertError(this.$t('device.device-timer.433369-88'));
return;
}
} else if (this.form.isAdvance == 1) {
if (this.form.cronExpression == '') {
this.$modal.alertError('cron表达式不能为空');
this.$modal.alertError(this.$t('device.device-timer.433369-89'));
return;
}
}
for (let i = 0; i < this.actionList.length; i++) {
if (this.actionList[i].id == '' || this.actionList[i].name == '' || this.actionList[i].value == '') {
this.$modal.alertError('执行动作中的选项和值不能为空');
this.$modal.alertError(this.$t('device.device-timer.433369-90'));
return;
}
}
@@ -568,14 +568,14 @@ export default {
this.submitButtonLoading = true;
if (this.form.jobId != undefined) {
updateJob(this.form).then((response) => {
this.$modal.msgSuccess('修改成功');
this.$modal.msgSuccess(this.$t('device.device-timer.433369-91'));
this.submitButtonLoading = false;
this.open = false;
this.getList();
});
} else {
addJob(this.form).then((response) => {
this.$modal.msgSuccess('新增成功');
this.$modal.msgSuccess(this.$t('device.device-timer.433369-92'));
this.submitButtonLoading = false;
this.open = false;
this.getList();
@@ -588,15 +588,15 @@ export default {
handleDelete(row) {
const jobIds = row.jobId || this.ids;
this.$modal
.confirm('是否确认删除定时定时编号为"' + jobIds + '"的数据项?')
.confirm(this.$t('device.device-timer.433369-73', [jobIds]))
.then(function () {
return delJob(jobIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
this.$modal.msgSuccess(this.$t('device.device-timer.433369-75'));
})
.catch(() => { });
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
@@ -737,7 +737,7 @@ export default {
}
}
}
result = result + actions[i].name + '<span style="color:#F56C6C">' + value + '</span><br />';
result = result + actions[i].name + ': <span style="color:#F56C6C">' + value + '</span><br />';
}
return result;
},
@@ -745,33 +745,33 @@ export default {
formatCronDisplay(item) {
let result = '';
if (item.isAdvance == 0) {
let time = '<br /><span style="color:#F56C6C">时间 ' + item.cronExpression.substring(5, 7) + ':' + item.cronExpression.substring(2, 4) + '</span>';
let time = '<br /><span style="color:#F56C6C">' + this.$t('device.device-timer.433369-76') + ' ' + item.cronExpression.substring(5, 7) + ':' + item.cronExpression.substring(2, 4) + '</span>';
let week = item.cronExpression.substring(12);
if (week == '1,2,3,4,5,6,7') {
result = '每天 ' + time;
result = this.$t('device.device-timer.433369-77') + ' ' + time;
} else {
let weekArray = week.split(',');
for (let i = 0; i < weekArray.length; i++) {
if (weekArray[i] == '1') {
result = result + '周一、';
result = result + this.$t('device.device-timer.433369-78');
} else if (weekArray[i] == '2') {
result = result + '周二、';
result = result + this.$t('device.device-timer.433369-79');
} else if (weekArray[i] == '3') {
result = result + '周三、';
result = result + this.$t('device.device-timer.433369-80');
} else if (weekArray[i] == '4') {
result = result + '周四、';
result = result + this.$t('device.device-timer.433369-81');
} else if (weekArray[i] == '5') {
result = result + '周五、';
result = result + this.$t('device.device-timer.433369-82');
} else if (weekArray[i] == '6') {
result = result + '周六、';
result = result + this.$t('device.device-timer.433369-83');
} else if (weekArray[i] == '7') {
result = result + '周日、';
result = result + this.$t('device.device-timer.433369-84');
}
}
result = result.substring(0, result.length - 1) + ' ' + time;
}
} else {
result = '自定义Cron表达式';
result = this.$t('device.device-timer.433369-85');
}
return result;
},

View File

@@ -2,49 +2,49 @@
<div style="padding-left: 20px">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-share" size="mini" @click="shareDevice" v-hasPermi="['iot:device:share']">分享设备</el-button>
<el-button type="primary" plain icon="el-icon-share" size="mini" @click="shareDevice" v-hasPermi="['iot:device:share']">{{ $t('device.device-edit.148398-48') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-refresh" size="mini" @click="getList">刷新</el-button>
<el-button type="warning" plain icon="el-icon-refresh" size="mini" @click="getList">{{ $t('device.device-user.037521-0') }}</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="deviceUserList" @selection-change="handleSelectionChange" size="mini">
<el-table-column label="用户编号" align="center" prop="userId" width="100" />
<el-table-column label="用户名称" align="center" prop="userName" />
<el-table-column label="手机号码" align="center" prop="phonenumber" width="150" />
<el-table-column label="用户类型" align="center" prop="isOwner" width="150">
<el-table-column :label="$t('device.device-user.037521-1')" align="center" prop="userId" width="100" />
<el-table-column :label="$t('device.device-user.037521-2')" align="center" prop="userName" />
<el-table-column :label="$t('device.device-user.037521-3')" align="center" prop="phonenumber" width="150" />
<el-table-column :label="$t('device.device-user.037521-4')" align="center" prop="isOwner" width="150">
<template slot-scope="scope">
<el-tag type="primary" v-if="scope.row.isOwner">主人</el-tag>
<el-tag type="success" v-else>分享</el-tag>
<el-tag type="primary" v-if="scope.row.isOwner">{{ $t('device.device-user.037521-5') }}</el-tag>
<el-tag type="success" v-else>{{ $t('device.device-user.037521-6') }}</el-tag>
</template>
</el-table-column>
<el-table-column label="分享时间" align="center" prop="createTime" width="150">
<el-table-column :label="$t('device.device-user.037521-7')" align="center" prop="createTime" width="150">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="left" prop="remark" header-align="center" min-width="150" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180">
<el-table-column :label="$t('device.device-user.037521-8')" align="left" prop="remark" header-align="center" min-width="150" />
<el-table-column :label="$t('device.index.105953-34')" align="center" class-name="small-padding fixed-width" width="180">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['iot:device:share']" v-if="scope.row.isOwner == 0">编辑</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:device:share']" v-if="scope.row.isOwner == 0">取消分享</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['iot:device:share']" v-if="scope.row.isOwner == 0">{{ $t('edit') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:device:share']" v-if="scope.row.isOwner == 0">{{ $t('device.device-user.037521-11') }}</el-button>
</template>
</el-table-column>
</el-table>
<!--设备分享对话框-->
<el-dialog title="设备分享" :visible.sync="open" width="800px">
<el-dialog :title="$t('device.device-user.037521-12')" :visible.sync="open" width="800px">
<div style="margin-top: -50px">
<el-divider></el-divider>
</div>
<!--用户查询-->
<el-form :model="permParams" ref="queryForm" :rules="rules" :inline="true" label-width="80px" v-if="type == 1">
<el-form-item label="手机号码" prop="phonenumber">
<el-input type="text" placeholder="请输入用户手机号码" v-model="permParams.phonenumber" minlength="10" clearable size="small" show-word-limit style="width: 240px" @keyup.enter.native="handleQuery"></el-input>
<el-form-item :label="$t('device.device-user.037521-3')" prop="phonenumber">
<el-input type="text" :placeholder="$t('device.device-user.037521-13')" v-model="permParams.phonenumber" minlength="10" clearable size="small" show-word-limit style="width: 240px" @keyup.enter.native="handleQuery"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="userQuery">查询用户</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="userQuery">{{ $t('device.device-user.037521-14') }}</el-button>
</el-form-item>
</el-form>
@@ -52,32 +52,32 @@
<div v-loading="permsLoading" style="background-color: #f8f8f9; line-height: 28px">
<div v-if="message" style="padding: 20px">{{ message }}</div>
<div v-if="form.userId" style="padding: 15px">
<div style="font-weight: bold; line-height: 28px">用户信息</div>
<span style="width: 80px; display: inline-block">用户ID</span>
<div style="font-weight: bold; line-height: 28px">{{ $t('device.device-user.037521-15') }}</div>
<span style="width: 80px; display: inline-block">{{ $t('device.device-user.037521-16') }}</span>
<span>{{ form.userId }}</span>
<br />
<span style="width: 80px; display: inline-block">手机号码</span>
<span style="width: 80px; display: inline-block">{{ $t('device.device-user.037521-17') }}</span>
<span>{{ form.phonenumber }}</span>
<br />
<span style="width: 80px; display: inline-block">用户名称</span>
<span style="width: 80px; display: inline-block">{{ $t('device.device-user.037521-18') }}</span>
<span>{{ form.userName }}</span>
<br />
<!--选择权限-->
<div style="font-weight: bold; margin: 15px 0 10px">设置用户权限</div>
<div style="font-weight: bold; margin: 15px 0 10px">{{ $t('device.device-user.037521-19') }}</div>
<el-table :data="sharePermissionList" highlight-current-row size="mini" ref="multipleTable" @select="handleSelectionChange" @select-all="handleSelectionAll">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="权限名称" align="center" key="modelName" prop="modelName" />
<el-table-column label="权限标识" align="center" key="identifier" prop="identifier" />
<el-table-column label="备注信息" align="left" min-width="100" header-align="center" key="remark" prop="remark" />
<el-table-column :label="$t('device.device-user.037521-20')" align="center" key="modelName" prop="modelName" />
<el-table-column :label="$t('device.device-user.037521-21')" align="center" key="identifier" prop="identifier" />
<el-table-column :label="$t('device.device-edit.148398-17')" align="left" min-width="100" header-align="center" key="remark" prop="remark" />
</el-table>
<!--选择权限-->
<div style="font-weight: bold; margin: 15px 0 10px">备注信息</div>
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" rows="2" />
<div style="font-weight: bold; margin: 15px 0 10px">{{ $t('device.device-edit.148398-17') }}</div>
<el-input v-model="form.remark" type="textarea" :placeholder="$t('device.device-edit.148398-18')" rows="2" />
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm" :disabled="!form.userId || !deviceInfo.deviceId">确定</el-button>
<el-button @click="closeSelectUser"> </el-button>
<el-button type="primary" @click="submitForm" :disabled="!form.userId || !deviceInfo.deviceId">{{ $t('device.product-list.058448-14') }}</el-button>
<el-button @click="closeSelectUser">{{ $t('device.device-user.037521-25') }}</el-button>
</div>
</el-dialog>
</div>
@@ -131,13 +131,13 @@ export default {
phonenumber: [
{
required: true,
message: '手机号码不能为空',
message: this.$t('device.device-user.037521-26'),
trigger: 'blur',
},
{
min: 11,
max: 11,
message: '手机号码长度为11位',
message: this.$t('device.device-user.037521-27'),
trigger: 'blur',
},
],
@@ -216,13 +216,13 @@ export default {
handleDelete(row) {
const deviceUser = row;
this.$modal
.confirm('确认取消分享设备?')
.confirm(this.$t('device.device-user.037521-28'))
.then(function () {
return delDeviceUser(deviceUser);
})
.then(() => {
this.getList();
this.$modal.msgSuccess('取消分享成功');
this.$modal.msgSuccess(this.$t('device.device-user.037521-29'));
})
.catch(() => {});
},
@@ -239,7 +239,7 @@ export default {
getShareUser() {
this.permsLoading = true;
if (!this.deviceInfo.deviceId) {
this.$modal.alert('查询不到设备信息,请刷新后重试');
this.$modal.alert(this.$t('device.device-user.037521-30'));
return;
}
this.permParams.deviceId = this.deviceInfo.deviceId;
@@ -266,8 +266,8 @@ export default {
this.sharePermissionList = [
{
identifier: 'timer',
modelName: '设备定时',
remark: '定时执行任务',
modelName: this.$t('device.device-user.037521-34'),
remark: this.$t('device.device-user.037521-35'),
},
{
identifier: 'log',
@@ -276,8 +276,8 @@ export default {
},
{
identifier: 'monitor',
modelName: '实时监测',
remark: '下发实时监测指令后,图表实时显示设备上报数据',
modelName: this.$t('device.device-user.037521-38'),
remark: this.$t('device.device-user.037521-39'),
},
{
identifier: 'statistic',
@@ -326,7 +326,7 @@ export default {
if (this.type == 2) {
// 更新设备用户
updateDeviceUser(this.form).then((response) => {
this.$modal.msgSuccess('更新成功');
this.$modal.msgSuccess(this.$t('device.device-user.037521-42'));
this.resetUserQuery();
this.open = false;
this.getList();
@@ -336,13 +336,8 @@ export default {
this.form.deviceId = this.deviceInfo.deviceId;
this.form.deviceName = this.deviceInfo.deviceName;
addDeviceUser(this.form).then((response) => {
this.$modal.msgSuccess('新增成功');
this.$modal.msgSuccess(this.$t('device.device-user.037521-43'));
this.resetUserQuery();
this.open = false;
this.getList();
});
}
},
},
};
</script>

View File

@@ -2,58 +2,58 @@
<div style="padding: 6px">
<el-card style="margin-bottom: 6px">
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="75px" style="margin-bottom: -20px">
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="queryParams.deviceName" placeholder="请输入设备名称" clearable size="small" @keyup.enter.native="handleQuery" style="width: 150px" />
<el-form-item :label="$t('device.index.105953-0')" prop="deviceName">
<el-input v-model="queryParams.deviceName" :placeholder="$t('device.index.105953-1')" clearable size="small" @keyup.enter.native="handleQuery" style="width: 150px" />
</el-form-item>
<el-form-item label="设备编号" prop="serialNumber">
<el-input v-model="queryParams.serialNumber" placeholder="请输入设备编号" clearable size="small" @keyup.enter.native="handleQuery" style="width: 150px" />
<el-form-item :label="$t('device.index.105953-2')" prop="serialNumber">
<el-input v-model="queryParams.serialNumber" :placeholder="$t('device.index.105953-3')" clearable size="small" @keyup.enter.native="handleQuery" style="width: 150px" />
</el-form-item>
<el-form-item label="设备状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择设备状态" clearable size="small" style="width: 150px">
<el-form-item :label="$t('device.index.105953-4')" prop="status">
<el-select v-model="queryParams.status" :placeholder="$t('device.index.105953-5')" clearable size="small" style="width: 150px">
<el-option v-for="dict in dict.type.iot_device_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="我的分组">
<el-select v-model="queryParams.groupId" placeholder="请选择我的分组" clearable size="small" style="width: 150px">
<el-form-item :label="$t('device.index.105953-6')">
<el-select v-model="queryParams.groupId" :placeholder="$t('device.index.105953-7')" clearable size="small" style="width: 150px">
<el-option v-for="group in myGroupList" :key="group.groupId" :label="group.groupName" :value="group.groupId" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
</el-form-item>
<el-form-item style="float: right">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleEditDevice(0)" v-hasPermi="['iot:device:add']">新增</el-button>
<el-button type="primary" plain icon="el-icon-s-grid" size="mini" @click="handleChangeShowType" v-hasPermi="['iot:device:add']">切换</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleEditDevice(0)" v-hasPermi="['iot:device:add']">{{ $t('add') }}</el-button>
<el-button type="primary" plain icon="el-icon-s-grid" size="mini" @click="handleChangeShowType" v-hasPermi="['iot:device:add']">{{ $t('device.index.105953-17') }}</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card style="padding-bottom: 100px" v-if="showType == 'list'">
<el-table v-loading="loading" :data="deviceList" border>
<el-table-column label="编号" align="center" header-align="center" prop="deviceId" width="50" />
<el-table-column label="设备名称" align="center" header-align="center" prop="deviceName" min-width="120" />
<el-table-column label="设备编号" align="center" prop="serialNumber" min-width="130" />
<el-table-column label="所属产品" align="center" prop="productName" min-width="120" />
<el-table-column label="协议" align="center" prop="transport" min-width="50" />
<el-table-column label="通讯协议" align="center" prop="protocolCode" min-width="100" />
<el-table-column label="子设备数" align="center" prop="subDeviceCount" width="80">
<el-table-column :label="$t('device.index.105953-20')" align="center" header-align="center" prop="deviceId" width="50" />
<el-table-column :label="$t('device.index.105953-0')" align="center" header-align="center" prop="deviceName" min-width="120" />
<el-table-column :label="$t('device.index.105953-2')" align="center" prop="serialNumber" min-width="130" />
<el-table-column :label="$t('device.index.105953-21')" align="center" prop="productName" min-width="120" />
<el-table-column :label="$t('device.index.105953-22')" align="center" prop="transport" min-width="50" />
<el-table-column :label="$t('device.index.105953-23')" align="center" prop="protocolCode" min-width="100" />
<el-table-column :label="$t('device.index.105953-24')" align="center" prop="subDeviceCount" width="80">
<template slot-scope="scope">
{{ scope.row.subDeviceCount }}
</template>
</el-table-column>
<el-table-column label="设备影子" align="center" prop="isShadow" width="80">
<el-table-column :label="$t('device.device-edit.148398-15')" align="center" prop="isShadow" width="80">
<template slot-scope="scope">
<el-tag type="success" size="small" v-if="scope.row.isShadow == 1">启用</el-tag>
<el-tag type="info" size="small" v-else>禁用</el-tag>
<el-tag type="success" size="small" v-if="scope.row.isShadow == 1">{{ $t('device.index.105953-26') }}</el-tag>
<el-tag type="info" size="small" v-else>{{ $t('device.index.105953-27') }}</el-tag>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status" width="80">
<el-table-column :label="$t('status')" align="center" prop="status" width="80">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_device_status" :value="scope.row.status" size="small" />
</template>
</el-table-column>
<el-table-column label="信号" align="center" prop="rssi" width="60">
<el-table-column :label="$t('device.index.105953-29')" align="center" prop="rssi" width="60">
<template slot-scope="scope">
<svg-icon v-if="scope.row.status == 3 && scope.row.rssi >= '-55'" icon-class="wifi_4" />
<svg-icon v-else-if="scope.row.status == 3 && scope.row.rssi >= '-70' && scope.row.rssi < '-55'" icon-class="wifi_3" />
@@ -62,32 +62,32 @@
<svg-icon v-else icon-class="wifi_0" />
</template>
</el-table-column>
<el-table-column label="定位方式" align="center" prop="locationWay">
<el-table-column :label="$t('device.index.105953-30')" align="center" prop="locationWay">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_location_way" :value="scope.row.locationWay" size="small" />
</template>
</el-table-column>
<el-table-column label="固件版本" align="center" prop="firmwareVersion">
<el-table-column :label="$t('device.index.105953-31')" align="center" prop="firmwareVersion">
<template slot-scope="scope">
<el-tag size="mini" type="info">Ver {{ scope.row.firmwareVersion }}</el-tag>
</template>
</el-table-column>
<el-table-column label="激活时间" align="center" prop="activeTime">
<el-table-column :label="$t('device.index.105953-32')" align="center" prop="activeTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.activeTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime">
<el-table-column :label="$t('creatTime')" align="center" prop="createTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
<el-table-column :label="$t('opation')" align="center" class-name="small-padding fixed-width" width="200">
<template slot-scope="scope">
<el-button type="danger" size="small" style="padding: 5px" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:device:remove']">删除</el-button>
<el-button type="primary" size="small" style="padding: 5px" icon="el-icon-view" @click="handleEditDevice(scope.row)" v-hasPermi="['iot:device:add']">查看</el-button>
<el-button type="primary" size="small" style="padding: 5px" @click="openSummaryDialog(scope.row)" v-if="form.deviceId != 0">二维码</el-button>
<el-button type="danger" size="small" style="padding: 5px" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:device:remove']">{{ $t('del') }}</el-button>
<el-button type="primary" size="small" style="padding: 5px" icon="el-icon-view" @click="handleEditDevice(scope.row)" v-hasPermi="['iot:device:add']">{{ $t('look') }}</el-button>
<el-button type="primary" size="small" style="padding: 5px" @click="openSummaryDialog(scope.row)" v-if="form.deviceId != 0">{{ $t('device.index.105953-37') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -101,7 +101,7 @@
<el-row type="flex" :gutter="10" justify="space-between">
<el-col :span="20" style="text-align: left">
<el-link type="" :underline="false" @click="handleEditDevice(item)" style="font-weight: bold; font-size: 16px; line-height: 32px">
<el-tooltip class="item" effect="dark" content="分享的设备" placement="top-start">
<el-tooltip class="item" effect="dark" :content="$t('device.index.105953-38')" placement="top-start">
<svg-icon icon-class="share" style="font-size: 20px" v-if="item.isOwner != 1" />
</el-tooltip>
<svg-icon icon-class="device" v-if="item.isOwner == 1" />
@@ -137,13 +137,13 @@
<!-- <dict-tag :options="dict.type.iot_transport_type" :value="item.transport" size="small" style="display: inline-block" /> -->
</div>
<el-descriptions :column="1" size="mini" style="white-space: nowrap">
<el-descriptions-item label="编号">
<el-descriptions-item :label="$t('device.index.105953-20')">
{{ item.serialNumber }}
</el-descriptions-item>
<el-descriptions-item label="产品">
<el-descriptions-item :label="$t('device.index.105953-21')">
{{ item.productName }}
</el-descriptions-item>
<el-descriptions-item label="激活时间">
<el-descriptions-item :label="$t('device.index.105953-32')">
{{ parseTime(item.activeTime, '{y}-{m}-{d}') }}
</el-descriptions-item>
</el-descriptions>
@@ -183,21 +183,21 @@
</el-col>
</el-row>
<el-button-group style="margin-top: 15px">
<el-button type="danger" size="mini" style="padding: 5px 10px" icon="el-icon-delete" @click="handleDelete(item)" v-hasPermi="['iot:device:remove']">删除</el-button>
<el-button type="primary" size="mini" style="padding: 5px 15px" icon="el-icon-view" @click="handleEditDevice(item, 'basic')" v-hasPermi="['iot:device:add']">查看</el-button>
<el-button type="success" size="mini" style="padding: 5px 15px" icon="el-icon-odometer" @click="handleRunDevice(item)" v-hasPermi="['iot:device:add']">运行状态</el-button>
<el-button type="danger" size="mini" style="padding: 5px 10px" icon="el-icon-delete" @click="handleDelete(item)" v-hasPermi="['iot:device:remove']">{{ $t('del') }}</el-button>
<el-button type="primary" size="mini" style="padding: 5px 15px" icon="el-icon-view" @click="handleEditDevice(item, 'basic')" v-hasPermi="['iot:device:add']">{{ $t('look') }}</el-button>
<el-button type="success" size="mini" style="padding: 5px 15px" icon="el-icon-odometer" @click="handleRunDevice(item)" v-hasPermi="['iot:device:add']">{{ $t('device.index.105953-40') }}</el-button>
</el-button-group>
</el-card>
</el-col>
</el-row>
<el-empty description="暂无数据,请添加设备" v-if="total == 0"></el-empty>
<el-empty :description="$t('device.index.105953-41')" v-if="total == 0"></el-empty>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" :pageSizes="[12, 24, 36, 60]" @pagination="getList" />
</el-card>
<!-- 二维码 -->
<el-dialog :visible.sync="openSummary" width="300px" append-to-body>
<div style="border: 1px solid #ccc; width: 220px; text-align: center; margin: 0 auto; margin-top: -15px">
<vue-qr :text="qrText" :size="200"></vue-qr>
<div style="padding-bottom: 10px">设备二维码</div>
<div style="padding-bottom: 10px">{{ $t('device.index.105953-42') }}</div>
</div>
</el-dialog>
</div>
@@ -340,8 +340,8 @@ export default {
return;
}
if (topics[3] == 'status') {
console.log('接收到【设备状态】主题:', topic);
console.log('接收到【设备状态】内容:', message);
console.log(this.$t('device.index.105953-43'), topic);
console.log(this.$t('device.index.105953-44'), message);
// 更新列表中设备的状态
for (let i = 0; i < this.deviceList.length; i++) {
if (this.deviceList[i].serialNumber == deviceNum) {
@@ -471,7 +471,7 @@ export default {
handleDelete(row) {
const deviceIds = row.deviceId || this.ids;
this.$modal
.confirm('是否确认删除设备编号为"' + deviceIds + '"的数据项?')
.confirm(this.$t('device.index.105953-45', [deviceIds]))
.then(function () {
if (row.deviceType === 3) {
delSipDeviceBySipId(row.serialNumber);
@@ -480,7 +480,7 @@ export default {
})
.then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
this.$modal.msgSuccess(this.$t('delSuccess'));
})
.catch(() => {});
},

View File

@@ -1,43 +1,43 @@
<template>
<el-dialog title="选择产品" :visible.sync="open" width="800px">
<el-dialog :title="$t('device.product-list.058448-0')" :visible.sync="open" width="800px">
<div style="margin-top:-55px;">
<el-divider style="margin-top:-30px;"></el-divider>
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
<el-form-item label="产品名称" prop="productName">
<el-input v-model="queryParams.productName" placeholder="请输入产品名称" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('device.device-edit.148398-5')" prop="productName">
<el-input v-model="queryParams.productName" :placeholder="$t('device.product-list.058448-2')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('device.product-list.058448-3') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('device.product-list.058448-4') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" ref="singleTable" :data="productList" @row-click="rowClick" highlight-current-row size="mini">
<el-table-column label="选择" width="50" align="center">
<el-table-column :label="$t('device.device-edit.148398-6')" width="50" align="center">
<template slot-scope="scope">
<input type="radio" :checked="scope.row.isSelect" name="product" />
</template>
</el-table-column>
<el-table-column label="产品名称" align="center" prop="productName" />
<el-table-column label="分类名称" align="center" prop="categoryName" />
<el-table-column label="租户名称" align="center" prop="tenantName" />
<el-table-column label="授权码" align="center" prop="status" width="70">
<el-table-column :label="$t('device.device-edit.148398-5')" align="center" prop="productName" />
<el-table-column :label="$t('device.product-list.058448-6')" align="center" prop="categoryName" />
<el-table-column :label="$t('device.product-list.058448-7')" align="center" prop="tenantName" />
<el-table-column :label="$t('device.product-list.058448-8')" align="center" prop="status" width="70">
<template slot-scope="scope">
<el-tag type="success" v-if="scope.row.isAuthorize==1">启用</el-tag>
<el-tag type="info" v-if="scope.row.isAuthorize==0">未启用</el-tag>
<el-tag type="success" v-if="scope.row.isAuthorize==1">{{ $t('device.product-list.058448-9') }}</el-tag>
<el-tag type="info" v-if="scope.row.isAuthorize==0">{{ $t('device.product-list.058448-10') }}</el-tag>
</template>
</el-table-column>
<el-table-column label="认证方式" align="center" prop="status">
<el-table-column :label="$t('device.product-list.058448-11')" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_vertificate_method" :value="scope.row.vertificateMethod" />
</template>
</el-table-column>
<el-table-column label="联网方式" align="center" prop="networkMethod">
<el-table-column :label="$t('device.product-list.058448-12')" align="center" prop="networkMethod">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_network_method" :value="scope.row.networkMethod" />
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="100">
<el-table-column :label="$t('device.product-list.058448-13')" align="center" prop="createTime" width="100">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
@@ -47,8 +47,8 @@
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="confirmSelectProduct" type="primary">确定</el-button>
<el-button @click="closeDialog" type="info"> </el-button>
<el-button @click="confirmSelectProduct" type="primary">{{ $t('device.product-list.058448-14') }}</el-button>
<el-button @click="closeDialog" type="info">{{ $t('device.product-list.058448-15') }}</el-button>
</div>
</el-dialog>
</template>

View File

@@ -7,7 +7,7 @@
<el-descriptions-item :labelStyle="statusColor">
<template slot="label">
<i class="el-icon-menu"></i>
设备模式
{{ $t('device.running-status.866086-0') }}
</template>
<el-link :underline="false" style="line-height: 28px; font-size: 16px; padding-right: 10px">{{ title }}</el-link>
</el-descriptions-item>
@@ -43,13 +43,13 @@
{{ subItem.text }}
</el-button>
</div>
<el-select v-else v-model="item.shadow" placeholder="请选择" @change="mqttPublish(deviceInfo, item)" :disabled="shadowUnEnable || item.isReadonly == 1">
<el-select v-else v-model="item.shadow" :placeholder="$t('device.running-status.866086-3')" @change="mqttPublish(deviceInfo, item)" :disabled="shadowUnEnable || item.isReadonly == 1">
<el-option v-for="subItem in item.datatype.enumList" :key="subItem.value" :label="subItem.text" :value="subItem.value" />
</el-select>
</div>
<div v-if="item.datatype.type == 'string'">
<el-input v-model="item.shadow" :placeholder="'请输入字符串 ' + (item.datatype.unit ? ',单位:' + item.datatype.unit : '')" :disabled="shadowUnEnable || item.isReadonly == 1">
<el-button slot="append" icon="el-icon-s-promotion" @click="mqttPublish(deviceInfo, item)" style="font-size: 20px" title="指令发送" v-if="!shadowUnEnable && item.isReadonly == 0"></el-button>
<el-button slot="append" icon="el-icon-s-promotion" @click="mqttPublish(deviceInfo, item)" style="font-size: 20px" :title="$t('device.running-status.866086-6')" v-if="!shadowUnEnable && item.isReadonly == 0"></el-button>
</el-input>
</div>
<div v-if="item.datatype.type == 'decimal'">
@@ -206,17 +206,17 @@
</el-select>
</div>
<div v-if="param.datatype.type == 'string'">
<el-input v-model="param.shadow" placeholder="请输入字符串" :disabled="shadowUnEnable || param.isReadonly == 1">
<el-input v-model="param.shadow" :placeholder="$t('device.running-status.866086-4')" :disabled="shadowUnEnable || param.isReadonly == 1">
<el-button slot="append" icon="el-icon-s-promotion" @click="mqttPublish(deviceInfo, param)" style="font-size: 20px" title="指令发送" v-if="!shadowUnEnable && param.isReadonly == 0"></el-button>
</el-input>
</div>
<div v-if="param.datatype.type == 'decimal'">
<el-input v-model="param.shadow" type="number" placeholder="请输入小数 " :disabled="shadowUnEnable || param.isReadonly == 1">
<el-input v-model="param.shadow" type="number" :placeholder="$t('device.running-status.866086-7')" :disabled="shadowUnEnable || param.isReadonly == 1">
<el-button slot="append" icon="el-icon-s-promotion" @click="mqttPublish(deviceInfo, param)" style="font-size: 20px" title="指令发送" v-if="!shadowUnEnable && param.isReadonly == 0"></el-button>
</el-input>
</div>
<div v-if="param.datatype.type == 'integer'">
<el-input v-model="param.shadow" type="integer" placeholder="请输入整数 " :disabled="shadowUnEnable || param.isReadonly == 1">
<el-input v-model="param.shadow" type="integer" :placeholder="$t('device.running-status.866086-8')" :disabled="shadowUnEnable || param.isReadonly == 1">
<el-button slot="append" icon="el-icon-s-promotion" @click="mqttPublish(deviceInfo, param)" style="font-size: 20px" title="指令发送" v-if="!shadowUnEnable && param.isReadonly == 0"></el-button>
</el-input>
</div>
@@ -231,7 +231,7 @@
<!---设备状态(影子模式value值不会更新)-->
<el-descriptions :column="1" border size="mini" v-if="deviceInfo.isShadow == 1 && deviceInfo.status != 3">
<template slot="title">
<span style="font-size: 14px; color: #606266">设备离线时状态</span>
<span style="font-size: 14px; color: #606266">{{ $t('device.running-status.866086-9') }}</span>
</template>
<!-- 设备物模型-->
@@ -375,7 +375,7 @@ export default {
data() {
return {
// 控制模块标题
title: '设备控制 ',
title: this.$t('device.running-status.866086-48'),
// 未启用设备影子
shadowUnEnable: false,
// 控制项标题背景
@@ -428,8 +428,8 @@ export default {
return;
}
if (topics[3] == 'status') {
console.log('接收到【设备状态-运行】主题:', topic);
console.log('接收到【设备状态-运行】内容:', message);
console.log(this.$t('device.running-status.866086-21'), topic);
console.log(this.$t('device.running-status.866086-22'), message);
// 更新列表中设备的状态
if (this.deviceInfo.serialNumber == deviceNum) {
this.deviceInfo.status = message.status;
@@ -594,7 +594,7 @@ export default {
if (response.code === 200) {
this.$message({
type: 'success',
message: '服务调用成功!',
message: this.$t('device.running-status.866086-25'),
});
}
});
@@ -654,14 +654,14 @@ export default {
updateDeviceStatus(device) {
if (device.status == 3) {
this.statusColor.background = '#12d09f';
this.title = '在线模式';
this.title = this.$t('device.running-status.866086-26');
} else {
if (device.isShadow == 1) {
this.statusColor.background = '#409EFF';
this.title = '影子模式';
this.title = this.$t('device.running-status.866086-27');
} else {
this.statusColor.background = '#909399';
this.title = '离线模式';
this.title = this.$t('device.running-status.866086-28');
this.shadowUnEnable = true;
}
}
@@ -832,4 +832,4 @@ export default {
.el-slider__button-wrapper {
top: -9px;
}
</style>
</

View File

@@ -1,29 +1,29 @@
<template>
<el-dialog title="选择用户" :visible.sync="openSelectUser" width="800px">
<el-dialog :title="$t('device.user-list.041943-0')" :visible.sync="openSelectUser" width="800px">
<div style="margin-top:-50px;">
<el-divider></el-divider>
</div>
<!--用户数据-->
<el-form :model="queryParams" ref="queryForm" :rules="rules" :inline="true" label-width="80px">
<el-form-item label="手机号码" prop="phonenumber">
<el-input type="text" placeholder="请输入用户手机号码" v-model="queryParams.phonenumber" minlength="10" clearable size="small" show-word-limit style="width: 240px" @keyup.enter.native="handleQuery"></el-input>
<el-form-item :label="$t('device.user-list.041943-1')" prop="phonenumber">
<el-input type="text" :placeholder="$t('device.user-list.041943-2')" v-model="queryParams.phonenumber" minlength="10" clearable size="small" show-word-limit style="width: 240px" @keyup.enter.native="handleQuery"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">查询</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('device.user-list.041943-3') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="userList" highlight-current-row size="mini" @current-change="handleCurrentChange" border>
<el-table-column label="选择" width="50" align="center">
<el-table-column :label="$t('device.device-edit.148398-6')" width="50" align="center">
<template slot-scope="scope">
<input type="radio" :checked="scope.row.isSelect" name="user" />
</template>
</el-table-column>
<el-table-column label="用户编号" align="center" key="userId" prop="userId" width="120" />
<el-table-column label="用户名称" align="center" key="userName" prop="userName" />
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" />
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" width="120" />
<el-table-column label="创建时间" align="center" prop="createTime" width="160">
<el-table-column :label="$t('device.user-list.041943-5')" align="center" key="userId" prop="userId" width="120" />
<el-table-column :label="$t('device.user-list.041943-6')" align="center" key="userName" prop="userName" />
<el-table-column :label="$t('device.user-list.041943-7')" align="center" key="nickName" prop="nickName" />
<el-table-column :label="$t('device.user-list.041943-1')" align="center" key="phonenumber" prop="phonenumber" width="120" />
<el-table-column :label="$t('device.user-list.041943-8')" align="center" prop="createTime" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
@@ -31,8 +31,8 @@
</el-table>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="addDeviceUser">分享</el-button>
<el-button @click="closeSelectUser"> </el-button>
<el-button type="primary" @click="addDeviceUser">{{ $t('device.user-list.041943-9') }}</el-button>
<el-button @click="closeSelectUser">{{ $t('device.user-list.041943-10') }}</el-button>
</div>
</el-dialog>
</template>
@@ -89,12 +89,12 @@ export default {
rules: {
phonenumber: [{
required: true,
message: "手机号码不能为空",
message: this.$t('device.user-list.041943-11'),
trigger: "blur"
}, {
min: 11,
max: 11,
message: '手机号码长度为11位',
message: this.$t('device.user-list.041943-12'),
trigger: 'blur'
}],
},
@@ -160,7 +160,7 @@ export default {
form.userName = this.user.userName;
form.phonenumber=this.user.phonenumber;
addDeviceUser(form).then(response => {
this.$modal.msgSuccess("新增成功");
this.$modal.msgSuccess(this.$t('device.user-list.041943-13'));
this.resetQuery();
this.openSelectUser = false;
this.$parent.getList();
@@ -178,7 +178,7 @@ export default {
});
addDeviceUsers(form).then(response => {
this.$modal.msgSuccess("新增成功");
this.$modal.msgSuccess(this.$t('device.user-list.041943-13'));
this.resetQuery();
this.openSelectUser = false;
this.$parent.getList();

View File

@@ -1,26 +1,26 @@
<template>
<el-dialog title="选择设备" :visible.sync="openDeviceList" width="800px" append-to-body>
<el-dialog :title="$t('iot.group.device-list.849593-0')" :visible.sync="openDeviceList" width="800px" append-to-body>
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="queryParams.deviceName" placeholder="请输入设备名称" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('iot.group.device-list.849593-1')" prop="deviceName">
<el-input v-model="queryParams.deviceName" :placeholder="$t('iot.group.device-list.849593-2')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('iot.group.device-list.849593-3') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="deviceList" @select="handleSelectionChange" @select-all="handleSelectionAll" ref="multipleTable" size="mini" border>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="设备编号" align="center" prop="serialNumber" />
<el-table-column label="产品名称" align="center" prop="productName" />
<el-table-column label="设备类型" align="center">
<el-table-column :label="$t('iot.group.device-list.849593-4')" align="center" prop="deviceName" />
<el-table-column :label="$t('iot.group.device-list.849593-5')" align="center" prop="serialNumber" />
<el-table-column :label="$t('iot.group.device-list.849593-6')" align="center" prop="productName" />
<el-table-column :label="$t('iot.group.device-list.849593-7')" align="center">
<template slot-scope="scope">
<el-tag type="success" v-if="scope.row.isOwner==0">分享</el-tag>
<el-tag type="primary" v-else>拥有</el-tag>
<el-tag type="success" v-if="scope.row.isOwner==0">{{ $t('iot.group.device-list.849593-8') }}</el-tag>
<el-tag type="primary" v-else>{{ $t('iot.group.device-list.849593-9') }}</el-tag>
</template>
</el-table-column>
<el-table-column label="设备状态" align="center" prop="status">
<el-table-column :label="$t('iot.group.device-list.849593-10')" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_device_status" :value="scope.row.status" />
</template>
@@ -29,8 +29,8 @@
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleDeviceSelected"> </el-button>
<el-button @click="closeSelectDeviceList"> </el-button>
<el-button type="primary" @click="handleDeviceSelected">{{ $t('iot.group.device-list.849593-11') }}</el-button>
<el-button @click="closeSelectDeviceList">{{ $t('iot.group.device-list.849593-12') }}</el-button>
</div>
</el-dialog>
</template>
@@ -182,7 +182,7 @@ export default {
handleDeviceSelected() {
this.group.deviceIds = this.ids;
updateDeviceGroups(this.group).then(response => {
this.$modal.msgSuccess("更新分组下的设备成功");
this.$modal.msgSuccess(this.$t('iot.group.device-list.849593-13'));
this.openDeviceList = false;
})
}

View File

@@ -2,45 +2,45 @@
<div style="padding: 6px">
<el-card v-show="showSearch" style="margin-bottom: 6px">
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px" style="margin-bottom: -20px">
<el-form-item label="分组名称" prop="groupName">
<el-input v-model="queryParams.groupName" placeholder="请输入分组名称" clearable size="small"
<el-form-item :label="$t('iot.group.index.637432-0')" prop="groupName">
<el-input v-model="queryParams.groupName" :placeholder="$t('iot.group.index.637432-1')" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item v-if="isAdmin" label="我的分组" style="margin: 0 20px">
<el-form-item v-if="isAdmin" :label="$t('iot.group.index.637432-2')" style="margin: 0 20px">
<el-switch v-model="myGroup" @change="myGroupChange"></el-switch>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('iot.group.index.637432-3') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('iot.group.index.637432-4') }}</el-button>
</el-form-item>
<el-form-item style="float: right">
<el-button v-hasPermi="['iot:group:add']" type="primary" plain icon="el-icon-plus" size="mini"
@click="handleAdd">新增</el-button>
@click="handleAdd">{{ $t('iot.group.index.637432-5') }}</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card style="padding-bottom: 100px">
<el-table v-loading="loading" :data="groupList" border @selection-change="handleSelectionChange">
<el-table-column label="分组名称" align="center" prop="groupName" width="200" />
<el-table-column label="分组排序" align="center" prop="groupOrder" width="100" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<el-table-column :label="$t('iot.group.index.637432-0')" align="center" prop="groupName" width="200" />
<el-table-column :label="$t('iot.group.index.637432-6')" align="center" prop="groupOrder" width="100" />
<el-table-column :label="$t('iot.group.index.637432-7')" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column v-if="isAdmin" label="所属用户" align="center" prop="userName" width="100" />
<el-table-column label="备注" align="left" header-align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="320">
<el-table-column v-if="isAdmin" :label="$t('iot.group.index.637432-8')" align="center" prop="userName" width="100" />
<el-table-column :label="$t('iot.group.index.637432-9')" align="left" header-align="center" prop="remark" />
<el-table-column :label="$t('iot.group.index.637432-10')" align="center" class-name="small-padding fixed-width" width="320">
<template slot-scope="scope">
<el-button v-hasPermi="['iot:device:query']" size="small" type="text" style="padding: 5px"
icon="el-icon-search" @click="handleViewDevice(scope.row.groupId)">查看设备</el-button>
icon="el-icon-search" @click="handleViewDevice(scope.row.groupId)">{{ $t('iot.group.index.637432-11') }}</el-button>
<el-button v-hasPermi="['iot:group:add']" size="small" type="text" style="padding: 5px" icon="el-icon-folder-add"
@click="selectDevice(scope.row)">添加设备</el-button>
@click="selectDevice(scope.row)">{{ $t('iot.group.index.637432-12') }}</el-button>
<el-button v-hasPermi="['iot:group:edit']" size="small" type="text" style="padding: 5px"
icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
icon="el-icon-edit" @click="handleUpdate(scope.row)">{{ $t('iot.group.index.637432-17') }}</el-button>
<el-button v-hasPermi="['iot:group:remove']" size="small" type="text" style="padding: 5px"
icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
icon="el-icon-delete" @click="handleDelete(scope.row)">{{ $t('iot.group.index.637432-14') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -53,19 +53,19 @@
<!-- 添加或修改设备分组对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="分组名称" prop="groupName">
<el-input v-model="form.groupName" placeholder="请输入分组名称" />
<el-form-item :label="$t('iot.group.index.637432-0')" prop="groupName">
<el-input v-model="form.groupName" :placeholder="$t('iot.group.index.637432-1')" />
</el-form-item>
<el-form-item label="分组排序" prop="groupOrder">
<el-input v-model="form.groupOrder" type="number" placeholder="请输入分组排序" />
<el-form-item :label="$t('iot.group.index.637432-6')" prop="groupOrder">
<el-input v-model="form.groupOrder" type="number" :placeholder="$t('iot.group.index.637432-15')" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
<el-form-item :label="$t('iot.group.index.637432-9')" prop="remark">
<el-input v-model="form.remark" type="textarea" :placeholder="$t('iot.group.index.637432-16')" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm">{{ form.groupId ? $t('iot.group.index.637432-17') : $t('iot.group.index.637432-18') }}</el-button>
<el-button @click="cancel">{{ $t('iot.group.index.637432-19') }}</el-button>
</div>
</el-dialog>
</el-card>
@@ -122,24 +122,14 @@ export default {
groupName: [
{
required: true,
message: '分组名称不能为空',
message: this.$t('iot.group.index.637432-20'),
trigger: 'blur',
},
{
min: 1,
max: 64,
message: '分组名称不能少于1个字符和超过64字符',
},
],
groupOrder: [
{
required: true,
message: '分组排序不能为空,最大值为99',
trigger: 'blur',
},
{
max: 128,
message: '分组排序不能少于1个位和超过10位',
message: this.$t('iot.group.index.637432-21'),
trigger: 'blur',
},
],
@@ -222,7 +212,7 @@ export default {
handleAdd() {
this.reset()
this.open = true
this.title = '添加设备分组'
this.title = this.$t('iot.group.index.637432-22')
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -231,7 +221,7 @@ export default {
getGroup(groupId).then((response) => {
this.form = response.data
this.open = true
this.title = '修改设备分组'
this.title = this.$t('iot.group.index.637432-23')
})
},
/** 选择设备 */
@@ -246,13 +236,13 @@ export default {
if (valid) {
if (this.form.groupId != null) {
updateGroup(this.form).then((response) => {
this.$modal.msgSuccess('修改成功')
this.$modal.msgSuccess(this.$t('iot.group.index.637432-24'))
this.open = false
this.getList()
})
} else {
addGroup(this.form).then((response) => {
this.$modal.msgSuccess('新增成功')
this.$modal.msgSuccess(this.$t('iot.group.index.637432-25'))
this.open = false
this.getList()
})
@@ -264,13 +254,13 @@ export default {
handleDelete(row) {
const groupIds = row.groupId || this.ids
this.$modal
.confirm('是否确认删除设备分组编号为"' + groupIds + '"的数据项?')
.confirm(this.$t('iot.group.index.637432-26', [groupIds]))
.then(function () {
return delGroup(groupIds)
})
.then(() => {
this.getList()
this.$modal.msgSuccess('删除成功')
this.$modal.msgSuccess(this.$t('iot.group.index.637432-27'))
})
.catch(() => { })
},

View File

@@ -2,40 +2,40 @@
<div style="padding:6px;">
<el-card v-show="showSearch" style="margin-bottom:6px;">
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" style="margin-bottom:-20px;">
<el-form-item label="日志名称" prop="logName">
<el-input v-model="queryParams.logName" placeholder="请输入日志名称" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('iot.log.index.902341-0')" prop="logName">
<el-input v-model="queryParams.logName" :placeholder="$t('iot.log.index.902341-1')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="类型" prop="logType">
<el-select v-model="queryParams.logType" placeholder="请选择类型" clearable size="small">
<el-form-item :label="$t('iot.log.index.902341-2')" prop="logType">
<el-select v-model="queryParams.logType" :placeholder="$t('iot.log.index.902341-3')" clearable size="small">
<el-option v-for="dict in dict.type.iot_things_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="日志级别" prop="logLevel">
<el-input v-model="queryParams.logLevel" placeholder="请输入日志级别" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('iot.log.index.902341-4')" prop="logLevel">
<el-input v-model="queryParams.logLevel" :placeholder="$t('iot.log.index.902341-5')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="设备ID" prop="deviceId">
<el-input v-model="queryParams.deviceId" placeholder="请输入设备ID" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('iot.log.index.902341-6')" prop="deviceId">
<el-input v-model="queryParams.deviceId" :placeholder="$t('iot.log.index.902341-7')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="queryParams.deviceName" placeholder="请输入设备名称" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('iot.log.index.902341-8')" prop="deviceName">
<el-input v-model="queryParams.deviceName" :placeholder="$t('iot.log.index.902341-9')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="用户昵称" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入用户昵称" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('iot.log.index.902341-10')" prop="userName">
<el-input v-model="queryParams.userName" :placeholder="$t('iot.log.index.902341-11')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="租户名称" prop="tenantName">
<el-input v-model="queryParams.tenantName" placeholder="请输入租户名称" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('iot.log.index.902341-12')" prop="tenantName">
<el-input v-model="queryParams.tenantName" :placeholder="$t('iot.log.index.902341-13')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="生成告警" prop="isAlert">
<el-input v-model="queryParams.isAlert" placeholder="请输入是否生成告警" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('iot.log.index.902341-14')" prop="isAlert">
<el-input v-model="queryParams.isAlert" :placeholder="$t('iot.log.index.902341-15')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="告警处理" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择告警处理" clearable size="small">
<el-form-item :label="$t('iot.log.index.902341-16')" prop="status">
<el-select v-model="queryParams.status" :placeholder="$t('iot.log.index.902341-17')" clearable size="small">
<el-option v-for="dict in dict.type.iot_yes_no" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('device.index.105953-8') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('device.index.105953-9') }}</el-button>
</el-form-item>
</el-form>
</el-card>
@@ -43,65 +43,65 @@
<el-card style="padding-bottom:100px;">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['iot:log:add']">新增</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['iot:log:add']">{{ $t('iot.group.index.637432-5') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['iot:log:edit']">修改</el-button>
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['iot:log:edit']">{{ $t('iot.group.index.637432-17') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['iot:log:remove']">删除</el-button>
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['iot:log:remove']">{{ $t('iot.group.index.637432-14') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['iot:log:export']">导出</el-button>
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['iot:log:export']">{{ $t('export') }}</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="logList" @selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="日志名称" align="center" prop="logName" />
<el-table-column label="" align="center" prop="logValue" />
<el-table-column label="类型" align="center" prop="logType">
<el-table-column :label="$t('iot.log.index.902341-0')" align="center" prop="logName" />
<el-table-column :label="$t('iot.log.index.902341-18')" align="center" prop="logValue" />
<el-table-column :label="$t('iot.log.index.902341-2')" align="center" prop="logType">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_things_type" :value="scope.row.logType" />
</template>
</el-table-column>
<el-table-column label="日志级别" align="center" prop="logLevel">
<el-table-column :label="$t('iot.log.index.902341-4')" align="center" prop="logLevel">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.logLevel" />
</template>
</el-table-column>
<el-table-column label="设备ID" align="center" prop="deviceId" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="用户ID" align="center" prop="userId" />
<el-table-column label="用户昵称" align="center" prop="userName" />
<el-table-column label="租户ID" align="center" prop="tenantId" />
<el-table-column label="租户名称" align="center" prop="tenantName" />
<el-table-column label="触发源" align="center" prop="triggerSource">
<el-table-column :label="$t('iot.log.index.902341-6')" align="center" prop="deviceId" />
<el-table-column :label="$t('iot.log.index.902341-8')" align="center" prop="deviceName" />
<el-table-column :label="$t('iot.log.index.902341-19')" align="center" prop="userId" />
<el-table-column :label="$t('iot.log.index.902341-10')" align="center" prop="userName" />
<el-table-column :label="$t('iot.log.index.902341-20')" align="center" prop="tenantId" />
<el-table-column :label="$t('iot.log.index.902341-12')" align="center" prop="tenantName" />
<el-table-column :label="$t('iot.log.index.902341-21')" align="center" prop="triggerSource">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.triggerSource" />
</template>
</el-table-column>
<el-table-column label="生成告警" align="center" prop="isAlert">
<el-table-column :label="$t('iot.log.index.902341-14')" align="center" prop="isAlert">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isAlert" />
</template>
</el-table-column>
<el-table-column label="告警处理" align="center" prop="status">
<el-table-column :label="$t('iot.log.index.902341-16')" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<el-table-column :label="$t('iot.group.index.637432-7')" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150">
<el-table-column :label="$t('iot.group.index.637432-9')" align="center" prop="remark" />
<el-table-column :label="$t('iot.group.index.637432-10')" align="center" class-name="small-padding fixed-width" width="150">
<template slot-scope="scope">
<el-button size="small" type="primary" style="padding:5px;" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['iot:log:edit']">处理</el-button>
<!-- <el-button size="small" type="danger" style="padding:5px;" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:log:remove']">删除</el-button> -->
<el-button size="small" type="primary" style="padding:5px;" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['iot:log:edit']">{{ $t('iot.log.index.902341-22') }}</el-button>
<!-- <el-button size="small" type="danger" style="padding:5px;" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:log:remove']">{{ $t('iot.group.index.637432-14') }}</el-button> -->
</template>
</el-table-column>
</el-table>
@@ -111,62 +111,62 @@
<!-- 添加或修改设备日志对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="日志名称" prop="logName">
<el-input v-model="form.logName" placeholder="请输入日志名称" />
<el-form-item :label="$t('iot.log.index.902341-0')" prop="logName">
<el-input v-model="form.logName" :placeholder="$t('iot.log.index.902341-1')" />
</el-form-item>
<el-form-item label="类型" prop="logType">
<el-select v-model="form.logType" placeholder="请选择类型">
<el-form-item :label="$t('iot.log.index.902341-2')" prop="logType">
<el-select v-model="form.logType" :placeholder="$t('iot.log.index.902341-3')">
<el-option v-for="dict in dict.type.iot_things_type" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"></el-option>
</el-select>
</el-form-item>
<el-form-item label="日志级别" prop="logLevel">
<el-input v-model="form.logLevel" placeholder="请输入日志级别" />
<el-form-item :label="$t('iot.log.index.902341-4')" prop="logLevel">
<el-input v-model="form.logLevel" :placeholder="$t('iot.log.index.902341-5')" />
</el-form-item>
<el-form-item label="设备ID" prop="deviceId">
<el-input v-model="form.deviceId" placeholder="请输入设备ID" />
<el-form-item :label="$t('iot.log.index.902341-6')" prop="deviceId">
<el-input v-model="form.deviceId" :placeholder="$t('iot.log.index.902341-7')" />
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="form.deviceName" placeholder="请输入设备名称" />
<el-form-item :label="$t('iot.log.index.902341-8')" prop="deviceName">
<el-input v-model="form.deviceName" :placeholder="$t('iot.log.index.902341-9')" />
</el-form-item>
<el-form-item label="用户ID" prop="userId">
<el-input v-model="form.userId" placeholder="请输入用户ID" />
<el-form-item :label="$t('iot.log.index.902341-19')" prop="userId">
<el-input v-model="form.userId" :placeholder="$t('iot.log.index.902341-23')" />
</el-form-item>
<el-form-item label="用户昵称" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户昵称" />
<el-form-item :label="$t('iot.log.index.902341-10')" prop="userName">
<el-input v-model="form.userName" :placeholder="$t('iot.log.index.902341-11')" />
</el-form-item>
<el-form-item label="租户ID" prop="tenantId">
<el-input v-model="form.tenantId" placeholder="请输入租户ID" />
<el-form-item :label="$t('iot.log.index.902341-20')" prop="tenantId">
<el-input v-model="form.tenantId" :placeholder="$t('iot.log.index.902341-24')" />
</el-form-item>
<el-form-item label="租户名称" prop="tenantName">
<el-input v-model="form.tenantName" placeholder="请输入租户名称" />
<el-form-item :label="$t('iot.log.index.902341-12')" prop="tenantName">
<el-input v-model="form.tenantName" :placeholder="$t('iot.log.index.902341-13')" />
</el-form-item>
<el-form-item label="触发源" prop="triggerSource">
<el-input v-model="form.triggerSource" placeholder="请输入触发源" />
<el-form-item :label="$t('iot.log.index.902341-21')" prop="triggerSource">
<el-input v-model="form.triggerSource" :placeholder="$t('iot.log.index.902341-25')" />
</el-form-item>
<el-form-item label="是否生成告警" prop="isAlert">
<el-input v-model="form.isAlert" placeholder="请输入是否生成告警" />
<el-form-item :label="$t('iot.log.index.902341-26')" prop="isAlert">
<el-input v-model="form.isAlert" :placeholder="$t('iot.log.index.902341-15')" />
</el-form-item>
<el-form-item label="告警处理">
<el-form-item :label="$t('iot.log.index.902341-16')">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in dict.type.iot_yes_no" :key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
<el-form-item :label="$t('iot.group.index.637432-9')" prop="remark">
<el-input v-model="form.remark" :placeholder="$t('iot.group.index.637432-16')" />
</el-form-item>
<el-form-item label="日志收到的值" prop="logValue">
<el-input v-model="form.logValue" placeholder="请输入日志收到的值" />
<el-form-item :label="$t('iot.log.index.902341-27')" prop="logValue">
<el-input v-model="form.logValue" :placeholder="$t('iot.log.index.902341-28')" />
</el-form-item>
<el-form-item label="是否置顶" prop="istop">
<el-input v-model="form.istop" placeholder="请输入是否置顶" />
<el-form-item :label="$t('iot.log.index.902341-29')" prop="istop">
<el-input v-model="form.istop" :placeholder="$t('iot.log.index.902341-30')" />
</el-form-item>
<el-form-item label="是否监测" prop="ismonitor">
<el-input v-model="form.ismonitor" placeholder="请输入是否监测" />
<el-form-item :label="$t('iot.log.index.902341-31')" prop="ismonitor">
<el-input v-model="form.ismonitor" :placeholder="$t('iot.log.index.902341-32')" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm">{{ $t('device.index.105953-56') }}</el-button>
<el-button @click="cancel">{{ $t('iot.group.index.637432-19') }}</el-button>
</div>
</el-dialog>
@@ -229,47 +229,47 @@ export default {
rules: {
logName: [{
required: true,
message: "日志名称不能为空",
message: this.$t('iot.log.index.902341-33'),
trigger: "blur"
}],
logType: [{
required: true,
message: "类型不能为空",
message: this.$t('iot.log.index.902341-34'),
trigger: "change"
}],
logLevel: [{
required: true,
message: "日志级别不能为空",
message: this.$t('iot.log.index.902341-35'),
trigger: "blur"
}],
deviceId: [{
required: true,
message: "设备ID不能为空",
message: this.$t('iot.log.index.902341-36'),
trigger: "blur"
}],
deviceName: [{
required: true,
message: "设备名称不能为空",
message: this.$t('iot.log.index.902341-37'),
trigger: "blur"
}],
userId: [{
required: true,
message: "用户ID不能为空",
message: this.$t('iot.log.index.902341-38'),
trigger: "blur"
}],
userName: [{
required: true,
message: "用户昵称不能为空",
message: this.$t('iot.log.index.902341-39'),
trigger: "blur"
}],
tenantId: [{
required: true,
message: "租户ID不能为空",
message: this.$t('iot.log.index.902341-40'),
trigger: "blur"
}],
tenantName: [{
required: true,
message: "租户名称不能为空",
message: this.$t('iot.log.index.902341-41'),
trigger: "blur"
}],
}
@@ -338,7 +338,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = "添加设备日志";
this.title = this.$t('iot.log.index.902341-42');
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -347,7 +347,7 @@ export default {
getLog(deviceLogId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改设备日志";
this.title = this.$t('iot.log.index.902341-43');
});
},
/** 提交按钮 */
@@ -356,13 +356,13 @@ export default {
if (valid) {
if (this.form.deviceLogId != null) {
updateLog(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.$modal.msgSuccess(this.$t('iot.group.index.637432-24'));
this.open = false;
this.getList();
});
} else {
addLog(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.$modal.msgSuccess(this.$t('iot.group.index.637432-25'));
this.open = false;
this.getList();
});
@@ -373,11 +373,11 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const deviceLogIds = row.deviceLogId || this.ids;
this.$modal.confirm('是否确认删除设备日志编号为"' + deviceLogIds + '"的数据项?').then(function () {
this.$modal.confirm(this.$t('iot.log.index.902341-44', [deviceLogIds])).then(function () {
return delLog(deviceLogIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
this.$modal.msgSuccess(this.$t('iot.group.index.637432-27'));
}).catch(() => {});
},
/** 导出按钮操作 */

View File

@@ -2,49 +2,49 @@
<div style="padding: 6px">
<el-card v-show="showSearch" style="margin-bottom: 6px">
<el-form @submit.native.prevent :model="queryParams" ref="queryForm" :inline="true" label-width="68px" style="margin-bottom: -20px">
<el-form-item label="客户端" prop="clientId">
<el-input v-model="queryParams.clientId" placeholder="请输入客户端ID" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('netty.clients.654908-0')" prop="clientId">
<el-input v-model="queryParams.clientId" :placeholder="$t('netty.clients.654908-1')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item prop="isClient">
<el-checkbox v-model="queryParams.isClient" true-label="1" false-label="0">只看设备端</el-checkbox>
<el-checkbox v-model="queryParams.isClient" true-label="1" false-label="0">{{ $t('netty.clients.654908-2') }}</el-checkbox>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('device.index.105953-8') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('device.index.105953-9') }}</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card style="padding-bottom:100px;">
<el-table v-loading="loading" :data="clientList">
<el-table-column label="客户端ID" align="left" header-align="center" prop="clientId">
<el-table-column :label="$t('netty.clients.654908-4')" align="left" header-align="center" prop="clientId">
<template slot-scope="scope">
<el-link :underline="false" type="primary" @click.native="handleOpen(scope.row)">{{ scope.row.clientId }}</el-link>
</template>
</el-table-column>
<el-table-column label="类型" align="center" prop="type">
<el-table-column :label="$t('netty.clients.654908-5')" align="center" prop="type">
<template slot-scope="scope">
<el-tag type="danger" v-if="scope.row.clientId.indexOf('server') == 0">服务端</el-tag>
<el-tag type="success" v-else-if="scope.row.clientId.indexOf('web') == 0">Web端</el-tag>
<el-tag type="warning" v-else-if="scope.row.clientId.indexOf('phone') == 0">移动端</el-tag>
<el-tag type="info" v-else-if="scope.row.clientId.indexOf('test') == 0">测试端</el-tag>
<el-tag type="primary" v-else>设备端</el-tag>
<el-tag type="danger" v-if="scope.row.clientId.indexOf('server') == 0">{{ $t('netty.clients.654908-6') }}</el-tag>
<el-tag type="success" v-else-if="scope.row.clientId.indexOf('web') == 0">{{ $t('netty.clients.654908-7') }}</el-tag>
<el-tag type="warning" v-else-if="scope.row.clientId.indexOf('phone') == 0">{{ $t('netty.clients.654908-8') }}</el-tag>
<el-tag type="info" v-else-if="scope.row.clientId.indexOf('test') == 0">{{ $t('netty.clients.654908-9') }}</el-tag>
<el-tag type="primary" v-else>{{ $t('netty.clients.654908-10') }}</el-tag>
</template>
</el-table-column>
<el-table-column label="连接状态" align="center" prop="connected">
<el-table-column :label="$t('netty.clients.654908-11')" align="center" prop="connected">
<template slot-scope="scope">
<el-tag type="success" v-if="scope.row.connected">已连接</el-tag>
<el-tag type="info" v-else>已断开</el-tag>
<el-tag type="success" v-if="scope.row.connected">{{ $t('netty.clients.654908-12') }}</el-tag>
<el-tag type="info" v-else>{{ $t('netty.clients.654908-13') }}</el-tag>
</template>
</el-table-column>
<el-table-column label="心跳(秒)" align="center" prop="keepAlive" width="100" />
<el-table-column label="账号" align="center" prop="username" width="100px" />
<el-table-column label="当前订阅数量" align="center" prop="topicCount" width="100" />
<el-table-column label="连接时间" align="center" prop="connected_at" />
<el-table-column :label="$t('netty.clients.654908-14')" align="center" prop="keepAlive" width="100" />
<el-table-column :label="$t('netty.clients.654908-15')" align="center" prop="username" width="100px" />
<el-table-column :label="$t('netty.clients.654908-16')" align="center" prop="topicCount" width="100" />
<el-table-column :label="$t('netty.clients.654908-17')" align="center" prop="connected_at" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('iot.group.index.637432-10')" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button type="primary" icon="edit" @click="clickClientOut(scope.row)" size="small">踢出</el-button>
<el-button type="primary" icon="edit" @click="clickClientOut(scope.row)" size="small">{{ $t('netty.clients.654908-18') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -55,10 +55,10 @@
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
<el-tabs v-model="activeName" tab-position="top" style="padding: 10px">
<el-tab-pane name="subscribe">
<span slot="label">订阅列表</span>
<span slot="label">{{ $t('netty.clients.654908-19') }}</span>
<el-row :gutter="10" class="mb8"></el-row>
<el-table :data="subscribeList" size="mini">
<el-table-column label="主题" align="center" prop="topicName" />
<el-table-column :label="$t('netty.clients.654908-20')" align="center" prop="topicName" />
<el-table-column label="QoS" align="center" prop="qos" />
</el-table>
</el-tab-pane>
@@ -67,15 +67,15 @@
</el-card>
<!-- 添加或修改订阅对话框 -->
<el-dialog title="添加订阅" :visible.sync="subscribeOpen" width="800px" append-to-body>
<el-dialog :title="$t('netty.clients.654908-22')" :visible.sync="subscribeOpen" width="800px" append-to-body>
<el-form ref="subscribeForm" :model="subscribeForm" :rules="rules" label-width="60px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="主题" prop="topic">
<el-input v-model="subscribeForm.topic" placeholder="请输入主题" />
<el-form-item :label="$t('netty.clients.654908-20')" prop="topic">
<el-input v-model="subscribeForm.topic" :placeholder="$t('netty.clients.654908-23')" />
</el-form-item>
<el-form-item label="Qos" prop="qos">
<el-select v-model="subscribeForm.qos" placeholder="请选择消息类型">
<el-select v-model="subscribeForm.qos" :placeholder="$t('netty.clients.654908-24')">
<el-option key="0" label="0" value="0"></el-option>
<el-option key="1" label="1" value="1"></el-option>
<el-option key="2" label="2" value="2"></el-option>
@@ -85,8 +85,8 @@
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancelSubscribe"> </el-button>
<el-button type="primary" @click="submitForm">{{ $t('netty.clients.654908-25') }}</el-button>
<el-button @click="cancelSubscribe">{{ $t('iot.group.device-list.849593-12') }}</el-button>
</div>
</el-dialog>
</div>
@@ -148,7 +148,7 @@ export default {
topic: [
{
required: true,
message: '主题不能为空',
message: this.$t('netty.clients.654908-26'),
trigger: 'blur',
},
],
@@ -213,13 +213,13 @@ export default {
handleDelete(row) {
const clientId = row.clientId;
this.$modal
.confirm('是否确认删除MQTT客户端编号为"' + clientId + '"的数据项?')
.confirm(this.$t('netty.clients.654908-27', [clientId]))
.then(function () {
return eliminateClient(clientId);
})
.then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
this.$modal.msgSuccess(this.$t('iot.group.index.637432-27'));
})
.catch(() => {});
},
@@ -228,7 +228,7 @@ export default {
const clientId = row.clientId;
const topic = row.topic;
this.$modal
.confirm('是否确认取消订阅主题为"' + topic + '"的数据项?')
.confirm(this.$t('netty.clients.654908-28', [topic]))
.then(function () {
const param = {};
param.topic = topic;
@@ -237,14 +237,14 @@ export default {
})
.then(() => {
this.getSubscribeList(clientId);
this.$modal.msgSuccess('取消订阅成功');
this.$modal.msgSuccess(this.$t('netty.clients.654908-29'));
})
.catch(() => {});
},
//查看客户端详情
handleOpen(row) {
this.open = true;
this.title = '详情';
this.title = this.$t('iot.group.index.637432-13');
this.subscribeList = row.topics;
console.log(this.subscribeList);
},
@@ -260,7 +260,7 @@ export default {
this.$refs['subscribeForm'].validate((valid) => {
if (valid) {
addSubscribe(this.subscribeForm).then((response) => {
this.$modal.msgSuccess('新增订阅成功');
this.$modal.msgSuccess(this.$t('netty.clients.654908-30'));
this.subscribeOpen = false;
this.getSubscribeList(this.clientId);
});

View File

@@ -3,7 +3,7 @@
<el-card style="margin-bottom: 6px">
<el-row :gutter="120">
<el-col :xs="24" :sm="24" :md="24" :lg="8" :xl="8">
<h3 style="font-weight: bold">Mqtt 统计指标</h3>
<h3 style="font-weight: bold">{{ $t('netty.mqtt.564432-0') }}</h3>
<el-row :gutter="20" class="panel-group">
<el-col :span="24" class="card-panel-col" style="margin-bottom: 17px">
<div class="card-panel">
@@ -12,7 +12,7 @@
</div>
<div class="card-panel-description">
<div>
<div class="card-panel-text">发送消息</div>
<div class="card-panel-text">{{ $t('netty.mqtt.564432-1') }}</div>
<count-to :start-val="0" :end-val="this.static['send_total']" :duration="3000" class="card-panel-num" />
</div>
</div>
@@ -26,7 +26,7 @@
<div class="card-panel-description">
<div>
<div class="card-panel-text">接收消息</div>
<div class="card-panel-text">{{ $t('netty.mqtt.564432-2') }}</div>
<count-to :start-val="0" :end-val="this.static['receive_total']" :duration="3000" class="card-panel-num" />
</div>
</div>
@@ -38,7 +38,7 @@
<svg-icon icon-class="authenticate" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">认证次数</div>
<div class="card-panel-text">{{ $t('netty.mqtt.564432-3') }}</div>
<count-to :start-val="0" :end-val="this.static['auth_total']" :duration="1000" class="card-panel-num" />
</div>
</div>
@@ -49,7 +49,7 @@
<svg-icon icon-class="connect" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">连接次数</div>
<div class="card-panel-text">{{ $t('netty.mqtt.564432-4') }}</div>
<count-to :start-val="0" :end-val="this.static['connect_total']" :duration="1000" class="card-panel-num" />
</div>
</div>
@@ -60,7 +60,7 @@
<svg-icon icon-class="subscribe1" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">订阅次数</div>
<div class="card-panel-text">{{ $t('netty.mqtt.564432-5') }}</div>
<count-to :start-val="0" :end-val="this.static['subscribe_total']" :duration="2000" class="card-panel-num" />
</div>
</div>
@@ -73,7 +73,7 @@
</div>
<div class="card-panel-description">
<div>
<div class="card-panel-text">今日接收</div>
<div class="card-panel-text">{{ $t('netty.mqtt.564432-6') }}</div>
<count-to :start-val="0" :end-val="this.static['today_received']" :duration="3000" class="card-panel-num" />
</div>
</div>
@@ -85,7 +85,7 @@
<svg-icon icon-class="subscribe1" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">今日发送</div>
<div class="card-panel-text">{{ $t('netty.mqtt.564432-7') }}</div>
<count-to :start-val="0" :end-val="this.static['today_send']" :duration="2000" class="card-panel-num" />
</div>
</div>
@@ -147,7 +147,7 @@ export default {
var option;
option = {
title: {
text: 'Mqtt消息',
text: this.$t('netty.mqtt.564432-8'),
left: 'left',
textStyle: {
fontSize: 16,
@@ -163,7 +163,7 @@ export default {
color: ['#E6A23C', '#F56C6C', '#DDD'],
series: [
{
name: 'Mqtt消息 %',
name: this.$t('netty.mqtt.564432-9'),
type: 'pie',
radius: '55%',
label: {
@@ -178,11 +178,11 @@ export default {
data: [
{
value: this.static['send_total'],
name: '发送消息总数',
name: this.$t('netty.mqtt.564432-10'),
},
{
value: this.static['receive_total'],
name: '接收消息总数',
name: this.$t('netty.mqtt.564432-11'),
},
],
},
@@ -198,7 +198,7 @@ export default {
option = {
title: {
text: 'Mqtt 状态数据',
text: this.$t('netty.mqtt.564432-12'),
textStyle: {
fontSize: 18,
color: '#000',
@@ -227,11 +227,17 @@ export default {
axisLabel: {
fontSize: 14,
},
data: ['连接数量', '会话数量', '订阅数量', '路由数量', '保留消息'],
data: [
this.$t('netty.mqtt.564432-13'),
this.$t('netty.mqtt.564432-14'),
this.$t('netty.mqtt.564432-15'),
this.$t('netty.mqtt.564432-16'),
this.$t('netty.mqtt.564432-17'),
],
},
series: [
{
name: '当前数量',
name: this.$t('netty.mqtt.564432-18'),
type: 'bar',
data: [this.stats['connection_count'], this.stats['session_count'], this.stats['subscription_count'], this.stats['retain_count'], this.stats['retain_count']],
itemStyle: {
@@ -239,7 +245,7 @@ export default {
},
},
{
name: '累计总数',
name: this.$t('netty.mqtt.564432-19'),
type: 'bar',
data: [this.stats['connection_total'], this.stats['session_total'], this.stats['subscription_total'], this.stats['retain_total'], this.stats['retain_total']],
itemStyle: {

View File

@@ -1,105 +1,105 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="60px" v-if="isAdmin">
<el-form-item label="标题" prop="title">
<el-input v-model="queryParams.title" placeholder="请输入标题" clearable size="small"
<el-form-item :label="$t('system.news.893410-0')" prop="title">
<el-input v-model="queryParams.title" :placeholder="$t('system.news.893410-1')" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="分类" prop="categoryName">
<el-input v-model="queryParams.categoryName" placeholder="请输入分类名称" clearable size="small"
<el-form-item :label="$t('system.news.893410-2')" prop="categoryName">
<el-input v-model="queryParams.categoryName" :placeholder="$t('system.news.893410-3')" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="置顶" prop="isTop">
<el-select v-model="queryParams.isTop" placeholder="是否置顶" clearable size="small" style="width:100px;">
<el-form-item :label="$t('system.news.893410-4')" prop="isTop">
<el-select v-model="queryParams.isTop" :placeholder="$t('system.news.893410-5')" clearable size="small" style="width:100px;">
<el-option v-for="dict in dict.type.iot_yes_no" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="轮播" prop="isBanner">
<el-select v-model="queryParams.isBanner" placeholder="是否轮播" clearable size="small" style="width:100px;">
<el-form-item :label="$t('system.news.893410-6')" prop="isBanner">
<el-select v-model="queryParams.isBanner" :placeholder="$t('system.news.893410-7')" clearable size="small" style="width:100px;">
<el-option v-for="dict in dict.type.iot_yes_no" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="发布" prop="status">
<el-select v-model="queryParams.status" placeholder="选择状态" clearable size="small" style="width:100px;">
<el-form-item :label="$t('system.news.893410-8')" prop="status">
<el-select v-model="queryParams.status" :placeholder="$t('system.news.893410-9')" clearable size="small" style="width:100px;">
<el-option v-for="dict in dict.type.iot_yes_no" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('device.index.105953-8') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('device.index.105953-9') }}</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['iot:news:add']">新增</el-button>
v-hasPermi="['iot:news:add']">{{ $t('system.sysclient.652154-4') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['iot:news:edit']">修改</el-button>
v-hasPermi="['iot:news:edit']">{{ $t('system.sysclient.652154-5') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['iot:news:remove']">删除</el-button>
v-hasPermi="['iot:news:remove']">{{ $t('system.sysclient.652154-6') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['iot:news:export']">导出</el-button>
v-hasPermi="['iot:news:export']">{{ $t('system.sysclient.652154-7') }}</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="newsList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="图片" align="center" prop="imgUrl" width="140px;">
<el-table-column :label="$t('system.news.893410-10')" align="center" prop="imgUrl" width="140px;">
<template slot-scope="scope">
<el-image style="border-radius:5px;height:80px;width:120px;margin-bottom:-5px;" lazy
:preview-src-list="[baseUrl + scope.row.imgUrl]" :src="baseUrl + scope.row.imgUrl"
fit="cover"></el-image>
</template>
</el-table-column>
<el-table-column label="标题" align="center" prop="title" />
<el-table-column label="分类" align="center" prop="categoryName">
<el-table-column :label="$t('system.news.893410-0')" align="center" prop="title" />
<el-table-column :label="$t('system.news.893410-2')" align="center" prop="categoryName">
<template slot-scope="scope">
<el-tag type="info">{{ scope.row.categoryName }}</el-tag>
</template>
</el-table-column>
<el-table-column label="作者" align="center" prop="author" width="100" />
<el-table-column label="置顶" align="center" prop="isTop" width="80">
<el-table-column :label="$t('system.news.893410-11')" align="center" prop="author" width="100" />
<el-table-column :label="$t('system.news.893410-4')" align="center" prop="isTop" width="80">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isTop" />
</template>
</el-table-column>
<el-table-column label="轮播" align="center" prop="isBanner" width="80">
<el-table-column :label="$t('system.news.893410-6')" align="center" prop="isBanner" width="80">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isBanner" />
</template>
</el-table-column>
<el-table-column label="发布" align="center" prop="status" width="80">
<el-table-column :label="$t('system.news.893410-8')" align="center" prop="status" width="80">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="120">
<el-table-column :label="$t('device.index.105953-33')" align="center" prop="createTime" width="120">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('iot.group.index.637432-9')" align="center" prop="remark" />
<el-table-column :label="$t('device.index.105953-34')" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-view"
@click="openDetailDialog(scope.row.newsId)">查看</el-button>
@click="openDetailDialog(scope.row.newsId)">{{ $t('system.news.893410-25') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['iot:news:edit']">修改</el-button>
v-hasPermi="['iot:news:edit']">{{ $t('system.sysclient.652154-5') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['iot:news:remove']">删除</el-button>
v-hasPermi="['iot:news:remove']">{{ $t('system.sysclient.652154-6') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -112,30 +112,30 @@
<el-form ref="form" :model="form" :rules="rules" label-width="60px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="标题" prop="title">
<el-input v-model="form.title" placeholder="请输入标题" />
<el-form-item :label="$t('system.news.893410-0')" prop="title">
<el-input v-model="form.title" :placeholder="$t('system.news.893410-1')" />
</el-form-item>
<el-form-item label="作者" prop="author">
<el-input v-model="form.author" placeholder="请输入作者" />
<el-form-item :label="$t('system.news.893410-11')" prop="author">
<el-input v-model="form.author" :placeholder="$t('system.news.893410-12')" />
</el-form-item>
<el-form-item label="摘要" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" rows="3" />
<el-form-item :label="$t('system.news.893410-13')" prop="remark">
<el-input v-model="form.remark" type="textarea" :placeholder="$t('iot.group.index.637432-16')" rows="3" />
</el-form-item>
<el-row>
<el-col :span="8">
<el-form-item label="置顶" prop="isTop">
<el-form-item :label="$t('system.news.893410-4')" prop="isTop">
<el-switch v-model="form.isTop" active-text="" inactive-text="" :active-value="1"
:inactive-value="0"></el-switch>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="轮播" prop="isBanner">
<el-form-item :label="$t('system.news.893410-6')" prop="isBanner">
<el-switch v-model="form.isBanner" active-text="" inactive-text="" :active-value="1"
:inactive-value="0"></el-switch>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="发布" prop="status">
<el-form-item :label="$t('system.news.893410-8')" prop="status">
<el-switch v-model="form.status" active-text="" inactive-text="" :active-value="1"
:inactive-value="0"></el-switch>
</el-form-item>
@@ -144,25 +144,25 @@
</el-col>
<el-col :span="12">
<el-form-item label="分类" prop="categoryId">
<el-select v-model="form.categoryId" placeholder="请选择分类" @change="selectCategory">
<el-form-item :label="$t('system.news.893410-2')" prop="categoryId">
<el-select v-model="form.categoryId" :placeholder="$t('system.news.893410-14')" @change="selectCategory">
<el-option v-for="category in categoryList" :key="category.id" :label="category.name"
:value="category.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="图片">
<el-form-item :label="$t('system.news.893410-10')">
<imageUpload ref="image-upload" :value="form.imgUrl" :limit="1" :fileSize="1"
@input="getImagePath($event)"></imageUpload>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="内容">
<el-form-item :label="$t('system.news.893410-15')">
<editor v-model="form.content" :min-height="192" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm">{{ $t('device.index.105953-56') }}</el-button>
<el-button @click="cancel">{{ $t('iot.group.index.637432-19') }}</el-button>
</div>
</el-dialog>
@@ -176,7 +176,7 @@
<div v-html="form.content"></div>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="closeDetail"> </el-button>
<el-button type="primary" @click="closeDetail"> {{ $t('device.device-edit.148398-57') }} </el-button>
</div>
</el-dialog>
</div>
@@ -246,35 +246,24 @@ export default {
rules: {
title: [{
required: true,
message: "标题不能为空",
message: this.$t('system.news.893410-16'),
trigger: "blur"
},
{
min: 1,
max: 64,
message: '标题不能少于1个字符和超过64字符',
},
],
}],
content: [{
required: true,
message: "内容不能为空",
message: this.$t('system.news.893410-17'),
trigger: "blur"
}],
categoryId: [{
required: true,
message: "分类不能为空",
message: this.$t('system.news.893410-18'),
trigger: "blur"
}],
author: [{
required: true,
message: "作者不能为空",
message: this.$t('system.news.893410-19'),
trigger: "blur"
},
{
min: 1,
max: 50,
message: '作者名称不能少于1个字符和超过50字符',
},],
}],
}
};
},
@@ -316,7 +305,7 @@ export default {
this.form = {
newsId: null,
title: null,
content: "暂无内容",
content: this.$t('system.news.893410-20'),
imgUrl: "",
isTop: null,
isBanner: null,
@@ -353,7 +342,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = "添加新闻资讯";
this.title = this.$t('system.news.893410-21');
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -362,27 +351,27 @@ export default {
getNews(newsId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改新闻资讯";
this.title = this.$t('system.news.893410-22');
});
},
/** 提交按钮 */
submitForm() {
console.log(this.form);
if (this.form.imgUrl == null || this.form.imgUrl == "") {
this.$modal.msgError("请上传图片");
this.$modal.msgError(this.$t('system.news.893410-23'));
return;
}
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.newsId != null) {
updateNews(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.$modal.msgSuccess(this.$t('iot.group.index.637432-24'));
this.open = false;
this.getList();
});
} else {
addNews(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.$modal.msgSuccess(this.$t('iot.group.index.637432-25'));
this.open = false;
this.getList();
});
@@ -393,11 +382,11 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const newsIds = row.newsId || this.ids;
this.$modal.confirm('是否确认删除新闻资讯编号为"' + newsIds + '"的数据项?').then(function () {
this.$modal.confirm(this.$t('system.news.893410-24', [newsIds])).then(function () {
return delNews(newsIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
this.$modal.msgSuccess(this.$t('iot.group.index.637432-27'));
}).catch(() => { });
},
/** 导出按钮操作 */
@@ -427,7 +416,7 @@ export default {
},
// 取消按钮
closeDetail() {
this.titleDetail = "详情";
this.titleDetail = this.$t('system.news.893410-25');
this.openDetail = false;
this.reset();
},

View File

@@ -1,53 +1,53 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="分类名称" prop="categoryName">
<el-input v-model="queryParams.categoryName" placeholder="请输入分类名称" clearable size="small"
<el-form-item :label="$t('system.newsCategory.874509-0')" prop="categoryName">
<el-input v-model="queryParams.categoryName" :placeholder="$t('system.news.893410-3')" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('device.index.105953-8') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('device.index.105953-9') }}</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['iot:newsCategory:add']">新增</el-button>
v-hasPermi="['iot:newsCategory:add']">{{ $t('system.sysclient.652154-4') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['iot:newsCategory:edit']">修改</el-button>
v-hasPermi="['iot:newsCategory:edit']">{{ $t('system.sysclient.652154-5') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['iot:newsCategory:remove']">删除</el-button>
v-hasPermi="['iot:newsCategory:remove']">{{ $t('system.sysclient.652154-6') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['iot:newsCategory:export']">导出</el-button>
v-hasPermi="['iot:newsCategory:export']">{{ $t('system.sysclient.652154-7') }}</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="categoryList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="分类编号" align="center" prop="categoryId" />
<el-table-column label="分类名称" align="center" prop="categoryName" />
<el-table-column label="显示顺序" align="center" prop="orderNum" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<el-table-column :label="$t('system.newsCategory.874509-1')" align="center" prop="categoryId" />
<el-table-column :label="$t('system.newsCategory.874509-0')" align="center" prop="categoryName" />
<el-table-column :label="$t('system.newsCategory.874509-2')" align="center" prop="orderNum" />
<el-table-column :label="$t('device.index.105953-33')" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" min-width="200" header-align="center" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('iot.group.index.637432-9')" align="center" prop="remark" min-width="200" header-align="center" />
<el-table-column :label="$t('device.index.105953-34')" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-view" @click="handleUpdate(scope.row)"
v-hasPermi="['iot:newsCategory:add']">查看</el-button>
v-hasPermi="['iot:newsCategory:add']">{{ $t('device.index.105953-60') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['iot:newsCategory:remove']">删除</el-button>
v-hasPermi="['iot:newsCategory:remove']">{{ $t('system.sysclient.652154-6') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -58,23 +58,23 @@
<!-- 添加或修改新闻分类对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="分类名称" prop="categoryName">
<el-input v-model="form.categoryName" placeholder="请输入分类名称" />
<el-form-item :label="$t('system.newsCategory.874509-0')" prop="categoryName">
<el-input v-model="form.categoryName" :placeholder="$t('system.news.893410-3')" />
</el-form-item>
<el-form-item label="显示顺序" prop="orderNum">
<el-input-number v-model="form.orderNum" placeholder="请输入显示顺序" type="number" controls-position="right"
<el-form-item :label="$t('system.newsCategory.874509-2')" prop="orderNum">
<el-input-number v-model="form.orderNum" :placeholder="$t('system.newsCategory.874509-3')" type="number" controls-position="right"
style="width: 100%" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
<el-form-item :label="$t('iot.group.index.637432-9')" prop="remark">
<el-input v-model="form.remark" type="textarea" :placeholder="$t('iot.group.index.637432-16')" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:newsCategory:edit']"
v-show="form.categoryId"> </el-button>
v-show="form.categoryId">{{ $t('iot.group.index.637432-17') }}</el-button>
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:newsCategory:add']"
v-show="!form.categoryId"> </el-button>
<el-button @click="cancel"> </el-button>
v-show="!form.categoryId">{{ $t('iot.group.index.637432-18') }}</el-button>
<el-button @click="cancel">{{ $t('iot.group.index.637432-19') }}</el-button>
</div>
</el-dialog>
</div>
@@ -123,21 +123,14 @@ export default {
rules: {
categoryName: [{
required: true,
message: "分类名字不能为空",
message: this.$t('system.newsCategory.874509-4'),
trigger: "blur"
},
{
min: 1,
max: 64,
message: '分类名字不能少于1个字符和超过64字符',
},
],
}],
orderNum: [{
required: true,
message: "显示顺序不能为空",
message: this.$t('system.newsCategory.874509-5'),
trigger: "blur"
}
],
}],
}
};
},
@@ -194,7 +187,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = "添加新闻分类";
this.title = this.$t('system.newsCategory.874509-6');
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -203,7 +196,7 @@ export default {
getNewsCategory(categoryId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改新闻分类";
this.title = this.$t('system.newsCategory.874509-7');
});
},
/** 提交按钮 */
@@ -212,13 +205,13 @@ export default {
if (valid) {
if (this.form.categoryId != null) {
updateNewsCategory(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.$modal.msgSuccess(this.$t('iot.group.index.637432-24'));
this.open = false;
this.getList();
});
} else {
addNewsCategory(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.$modal.msgSuccess(this.$t('iot.group.index.637432-25'));
this.open = false;
this.getList();
});
@@ -230,7 +223,7 @@ export default {
handleDelete(row) {
const categoryIds = row.categoryId || this.ids;
let msg = "";
this.$modal.confirm('是否确认删除新闻分类编号为"' + categoryIds + '"的数据项?').then(function () {
this.$modal.confirm(this.$t('system.newsCategory.874509-8', [categoryIds])).then(function () {
return delNewsCategory(categoryIds).then(response => {
msg = response.msg;
});

View File

@@ -3,18 +3,18 @@
<el-card v-show="showSearch" class="search-card">
<el-form @submit.native.prevent :model="queryParams" ref="queryForm" :inline="true" label-width="85px" class="search-form">
<el-form-item prop="platform">
<el-select v-model="queryParams.platform" clearable placeholder="请选择平台">
<el-select v-model="queryParams.platform" clearable :placeholder="$t('system.platform.675309-1')">
<el-option v-for="dict in dict.type.iot_social_platform" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item prop="status">
<el-select v-model="queryParams.status" clearable placeholder="请选择状态">
<el-select v-model="queryParams.status" clearable :placeholder="$t('system.platform.675309-2')">
<el-option v-for="dict in dict.type.iot_social_platform_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<div style="float: right">
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t('device.index.105953-8') }}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{ $t('device.index.105953-9') }}</el-button>
</div>
</el-form>
</el-card>
@@ -22,38 +22,38 @@
<el-card>
<el-row :gutter="10" style="margin-bottom: 16px">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="small" @click="handleAdd" v-hasPermi="['iot:platform:add']">新增</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="small" @click="handleAdd" v-hasPermi="['iot:platform:add']">{{ $t('system.sysclient.652154-4') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button plain icon="el-icon-edit" size="small" :disabled="single" @click="handleUpdate" v-hasPermi="['iot:platform:edit']">修改</el-button>
<el-button plain icon="el-icon-edit" size="small" :disabled="single" @click="handleUpdate" v-hasPermi="['iot:platform:edit']">{{ $t('system.sysclient.652154-5') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button plain icon="el-icon-delete" size="small" :disabled="multiple" @click="handleDelete" v-hasPermi="['iot:platform:remove']">删除</el-button>
<el-button plain icon="el-icon-delete" size="small" :disabled="multiple" @click="handleDelete" v-hasPermi="['iot:platform:remove']">{{ $t('system.sysclient.652154-6') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button plain icon="el-icon-download" size="small" @click="handleExport" v-hasPermi="['iot:platform:export']">导出</el-button>
<el-button plain icon="el-icon-download" size="small" @click="handleExport" v-hasPermi="['iot:platform:export']">{{ $t('system.sysclient.652154-7') }}</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="platformList" :border="false" @selection-change="handleSelectionChange" ref="multipleTable" :row-key="getRowKeys">
<el-table-column :reserve-selection="true" type="selection" width="55" align="center" />
<el-table-column align="left" label="平台名称" prop="platform" min-width="200">
<el-table-column align="left" :label="$t('system.platform.675309-3')" prop="platform" min-width="200">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_social_platform" :value="scope.row.platform" />
</template>
</el-table-column>
<el-table-column align="center" label="状态" prop="status" width="80">
<el-table-column align="center" :label="$t('device.device-timer.433369-11')" prop="status" width="80">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_social_platform_status" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="平台申请ID" align="center" prop="clientId" min-width="180" />
<el-table-column label="跳转地址" align="left" prop="redirectUri" min-width="250" :show-overflow-tooltip="true" />
<el-table-column align="left" label="绑定登录uri" prop="bindUri" :show-tooltip-when-overflow="true" :render-header="(h, column) => renderHeaderMethods(h, column, columnTips.bindId)" min-width="250" />
<el-table-column :label="$t('system.platform.675309-4')" align="center" prop="clientId" min-width="180" />
<el-table-column :label="$t('system.platform.675309-5')" align="left" prop="redirectUri" min-width="250" :show-overflow-tooltip="true" />
<el-table-column align="left" :label="$t('system.platform.675309-6')" prop="bindUri" :show-tooltip-when-overflow="true" :render-header="(h, column) => renderHeaderMethods(h, column, columnTips.bindId)" min-width="250" />
<el-table-column
align="left"
label="跳转登录uri"
:label="$t('system.platform.675309-7')"
prop="redirectLoginUri"
:show-tooltip-when-overflow="true"
:render-header="(h, column) => renderHeaderMethods(h, column, columnTips.redirectLogin)"
@@ -61,21 +61,21 @@
/>
<el-table-column
align="left"
label="错误提示uri"
:label="$t('system.platform.675309-8')"
prop="errorMsgUri"
:show-tooltip-when-overflow="true"
:render-header="(h, column) => renderHeaderMethods(h, column, columnTips.errorId)"
min-width="250"
/>
<el-table-column align="center" label="创建时间" prop="createTime" width="100">
<el-table-column align="center" :label="$t('device.index.105953-33')" prop="createTime" width="100">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="125">
<el-table-column fixed="right" :label="$t('device.index.105953-34')" align="center" width="125">
<template slot-scope="scope">
<el-button size="small" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['iot:platform:edit']">修改</el-button>
<el-button size="small" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:platform:remove']">删除</el-button>
<el-button size="small" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['iot:platform:edit']">{{ $t('system.sysclient.652154-5') }}</el-button>
<el-button size="small" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:platform:remove']">{{ $t('system.sysclient.652154-6') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -86,41 +86,41 @@
<!-- 添加或修改第三方登录平台控制对话框 -->
<el-dialog :title="title" :visible.sync="open" width="630px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="130px">
<el-form-item label="平台名称" prop="platform">
<el-select v-model="form.platform" placeholder="请选择平台" style="width: 400px">
<el-form-item :label="$t('system.platform.675309-9')" prop="platform">
<el-select v-model="form.platform" :placeholder="$t('system.platform.675309-10')" style="width: 400px">
<el-option v-for="dict in dict.type.iot_social_platform" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="平台状态" prop="status">
<el-select v-model="form.status" placeholder="请选择状态" style="width: 400px">
<el-form-item :label="$t('system.platform.675309-11')" prop="status">
<el-select v-model="form.status" :placeholder="$t('system.platform.675309-2')" style="width: 400px">
<el-option v-for="dict in dict.type.iot_social_platform_status" :key="dict.value" :label="dict.label" :value="Number(dict.value)"></el-option>
</el-select>
</el-form-item>
<el-form-item label="平台申请ID" prop="clientId">
<el-input v-model="form.clientId" placeholder="请输入平台申请ID" style="width: 400px" />
<el-form-item :label="$t('system.platform.675309-12')" prop="clientId">
<el-input v-model="form.clientId" :placeholder="$t('system.platform.675309-13')" style="width: 400px" />
</el-form-item>
<el-form-item label="平台密钥" prop="secretKey">
<el-input v-model="form.secretKey" placeholder="请输入平台密钥" style="width: 400px" />
<el-form-item :label="$t('system.platform.675309-14')" prop="secretKey">
<el-input v-model="form.secretKey" :placeholder="$t('system.platform.675309-15')" style="width: 400px" />
</el-form-item>
<el-form-item label="认证跳转地址" prop="redirectUri">
<el-input v-model="form.redirectUri" placeholder="请输入认证跳转地址" style="width: 400px" />
<el-form-item :label="$t('system.platform.675309-16')" prop="redirectUri">
<el-input v-model="form.redirectUri" :placeholder="$t('system.platform.675309-17')" style="width: 400px" />
</el-form-item>
<el-form-item label="绑定注册urL" prop="bindUri">
<el-input v-model="form.bindUri" placeholder="请输入绑定注册 url, http://localhost/login?bindId=" style="width: 400px" />
<el-form-item :label="$t('system.platform.675309-18')" prop="bindUri">
<el-input v-model="form.bindUri" :placeholder="$t('system.platform.675309-19')" style="width: 400px" />
</el-form-item>
<el-form-item label="跳转登录URL" prop="redirectLoginUri">
<el-input v-model="form.redirectLoginUri" placeholder="请输入跳转登录 url, http://localhost/login?loginId=" style="width: 400px" />
<el-form-item :label="$t('system.platform.675309-20')" prop="redirectLoginUri">
<el-input v-model="form.redirectLoginUri" :placeholder="$t('system.platform.675309-21')" style="width: 400px" />
</el-form-item>
<el-form-item label="错误提示URL" prop="errorMsgUri">
<el-input v-model="form.errorMsgUri" placeholder="请输入错误提示 url, http://localhost/login?errorId=" style="width: 400px" />
<el-form-item :label="$t('system.platform.675309-22')" prop="errorMsgUri">
<el-input v-model="form.errorMsgUri" :placeholder="$t('system.platform.675309-23')" style="width: 400px" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入" type="textarea" :autosize="{ minRows: 3, maxRows: 5 }" style="width: 400px" />
<el-form-item :label="$t('iot.group.index.637432-9')" prop="remark">
<el-input v-model="form.remark" :placeholder="$t('iot.group.index.637432-16')" type="textarea" :autosize="{ minRows: 3, maxRows: 5 }" style="width: 400px" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确定</el-button>
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="submitForm">{{ $t('device.index.105953-56') }}</el-button>
<el-button @click="cancel">{{ $t('iot.group.index.637432-19') }}</el-button>
</div>
</el-dialog>
</div>
@@ -160,9 +160,9 @@ export default {
status: null,
},
columnTips: {
bindId: '绑定登录uri, http://localhost/login?bindId=,域名换成对应域名即可,本地开发不需要更改',
redirectLogin: '跳转登录uri,http://localhost/login?loginId=,域名换成对应域名即可,本地开发不需要更改',
errorId: '错误提示获取uri,http://localhost/login?errorId=,域名换成对应域名即可,本地开发不需要更改',
bindId: this.$t('system.platform.675309-24'),
redirectLogin: this.$t('system.platform.675309-25'),
errorId: this.$t('system.platform.675309-26'),
},
// 表单参数
form: {},
@@ -171,56 +171,56 @@ export default {
platform: [
{
required: true,
message: '第三方平台不能为空',
message: this.$t('system.platform.675309-27'),
trigger: 'change',
},
],
status: [
{
required: true,
message: ' 0:启用 ,1:禁用不能为空',
message: this.$t('system.platform.675309-28'),
trigger: 'change',
},
],
clientId: [
{
required: true,
message: '第三方平台申请Id不能为空',
message: this.$t('system.platform.675309-29'),
trigger: 'blur',
},
],
secretKey: [
{
required: true,
message: '第三方平台密钥不能为空',
message: this.$t('system.platform.675309-30'),
trigger: 'blur',
},
],
redirectUri: [
{
required: true,
message: '用户认证后跳转地址不能为空',
message: this.$t('system.platform.675309-31'),
trigger: 'blur',
},
],
bindUri: [
{
required: true,
message: '绑定注册登录uri,http://localhost/login?bindId=不能为空',
message: this.$t('system.platform.675309-32'),
trigger: 'blur',
},
],
redirectLoginUri: [
{
required: true,
message: '跳转登录uri,http://localhost/login?loginId=不能为空',
message: this.$t('system.platform.675309-33'),
trigger: 'blur',
},
],
errorMsgUri: [
{
required: true,
message: '错误提示uri,http://localhost/login?errorId=不能为空',
message: this.$t('system.platform.675309-34'),
trigger: 'blur',
},
],
@@ -306,7 +306,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = '添加平台控制';
this.title = this.$t('system.platform.675309-35');
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -315,7 +315,7 @@ export default {
getPlatform(socialPlatformId).then((response) => {
this.form = response.data;
this.open = true;
this.title = '修改平台控制';
this.title = this.$t('system.platform.675309-36');
});
},
/** 提交按钮 */
@@ -324,13 +324,13 @@ export default {
if (valid) {
if (this.form.socialPlatformId != null) {
updatePlatform(this.form).then((response) => {
this.$modal.msgSuccess('修改成功');
this.$modal.msgSuccess(this.$t('iot.group.index.637432-24'));
this.open = false;
this.getList();
});
} else {
addPlatform(this.form).then((response) => {
this.$modal.msgSuccess('新增成功');
this.$modal.msgSuccess(this.$t('iot.group.index.637432-25'));
this.open = false;
this.getList();
});
@@ -342,13 +342,13 @@ export default {
handleDelete(row) {
const socialPlatformIds = row.socialPlatformId || this.ids;
this.$modal
.confirm('是否确认删除平台控制编号为"' + socialPlatformIds + '"的数据项')
.confirm(this.$t('system.platform.675309-37', [socialPlatformIds]))
.then(function () {
return delPlatform(socialPlatformIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
this.$modal.msgSuccess(this.$t('iot.group.index.637432-27'));
this.$refs.multipleTable.clearSelection();
})
.catch(() => {});

View File

@@ -2,23 +2,23 @@
<div style="padding:6px;">
<el-card style="margin-bottom:5px;">
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" style="margin-bottom:-20px;">
<el-form-item label="产品名称" prop="productName">
<el-input v-model="queryParams.productName" placeholder="请输入产品名称" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('product.index.091251-0')" prop="productName">
<el-input v-model="queryParams.productName" :placeholder="$t('product.index.091251-1')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="分类名称" prop="categoryName">
<el-input v-model="queryParams.categoryName" placeholder="请输入产品分类名称" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('product.index.091251-2')" prop="categoryName">
<el-input v-model="queryParams.categoryName" :placeholder="$t('product.index.091251-3')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
<el-form-item :label="$t('product.index.091251-4')" prop="status">
<el-select v-model="queryParams.status" :placeholder="$t('product.index.091251-5')" clearable size="small">
<el-option v-for="dict in dict.type.iot_product_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
</el-form-item>
<el-form-item style="float:right;">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleEditProduct(0)" v-hasPermi="['iot:product:add']">新增</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleEditProduct(0)" v-hasPermi="['iot:product:add']">{{ $t('add') }}</el-button>
</el-form-item>
</el-form>
</el-card>
@@ -30,33 +30,33 @@
<el-col :span="20" style="text-align:left;">
<el-link type="" :underline="false" @click="handleEditProduct(item)" style="font-weight:bold;font-size:16px;line-height:32px;white-space:nowrap;">
<svg-icon icon-class="product" /> {{item.productName}}
<el-tag type="info" size="mini" style="margin-left:5px;font-weight:200" v-if="item.isSys==1">系统</el-tag>
<el-tag type="info" size="mini" style="margin-left:5px;font-weight:200" v-if="item.isSys==1">{{ $t('product.index.091251-47') }}</el-tag>
</el-link>
</el-col>
<el-col :span="4">
<el-tooltip class="item" effect="dark" content="取消发布" placement="top-start" v-if="item.status==2">
<el-button type="success" size="mini" style="padding:5px;" @click="changeProductStatus(item.productId,1,item.deviceType)">已发布</el-button>
<el-tooltip class="item" effect="dark" :content="$t('product.index.091251-12')" placement="top-start" v-if="item.status==2">
<el-button type="success" size="mini" style="padding:5px;" @click="changeProductStatus(item.productId,1,item.deviceType)">{{ $t('product.index.091251-13') }}</el-button>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="现在发布" placement="top-start" v-if="item.status==1">
<el-button type="info" size="mini" style="padding:5px;" @click="changeProductStatus(item.productId,2,item.deviceType)">未发布</el-button>
<el-tooltip class="item" effect="dark" :content="$t('product.index.091251-14')" placement="top-start" v-if="item.status==1">
<el-button type="info" size="mini" style="padding:5px;" @click="changeProductStatus(item.productId,2,item.deviceType)">{{ $t('product.index.091251-15') }}</el-button>
</el-tooltip>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="14">
<el-descriptions :column="1" size="small" style="margin-top:10px;white-space:nowrap;">
<el-descriptions-item label="所属分类">
<el-descriptions-item :label="$t('product.index.091251-16')">
<el-link type="primary" :underline="false">{{item.categoryName}}</el-link>
</el-descriptions-item>
<el-descriptions-item label="产品类型">
<el-descriptions-item :label="$t('product.index.091251-17')">
<dict-tag :options="dict.type.iot_device_type" :value="item.deviceType" />
</el-descriptions-item>
<el-descriptions-item label="联网方式">
<el-descriptions-item :label="$t('product.index.091251-18')">
<dict-tag :options="dict.type.iot_network_method" :value="item.networkMethod" />
</el-descriptions-item>
<el-descriptions-item label="设备授权">
<el-tag type="success" size="mini" v-if="item.isAuthorize==1">已启用</el-tag>
<el-tag type="info" size="mini" v-else>未启用</el-tag>
<el-descriptions-item :label="$t('product.index.091251-19')">
<el-tag type="success" size="mini" v-if="item.isAuthorize==1">{{ $t('product.index.091251-20') }}</el-tag>
<el-tag type="info" size="mini" v-else>{{ $t('product.index.091251-21') }}</el-tag>
</el-descriptions-item>
</el-descriptions>
</el-col>
@@ -70,31 +70,31 @@
</el-col>
</el-row>
<el-button-group style="margin-top:15px;height:28px;">
<el-button size="mini" type="primary" icon="el-icon-view" @click="handleEditProduct(item)" v-hasPermi="['iot:product:query']">详情</el-button>
<el-button size="mini" type="danger" icon="el-icon-delete" @click="handleDelete(item)" v-hasPermi="['iot:product:remove']" v-if="item.status==1">删除</el-button>
<el-button size="mini" type="success" icon="el-icon-s-check" @click="handleDeviceAuthorize(item)" v-hasPermi="['iot:product:edit']" v-if="item.status==2" :disabled="item.isAuthorize!=1">设备授权</el-button>
<el-button size="mini" type="warning" icon="el-icon-search" @click="handleViewDevice(item.productId)" v-hasPermi="['iot:device:query']">查看设备</el-button>
<el-button size="mini" type="primary" icon="el-icon-view" @click="handleEditProduct(item)" v-hasPermi="['iot:product:query']">{{ $t('product.index.091251-48') }}</el-button>
<el-button size="mini" type="danger" icon="el-icon-delete" @click="handleDelete(item)" v-hasPermi="['iot:product:remove']" v-if="item.status==1">{{ $t('product.index.091251-23') }}</el-button>
<el-button size="mini" type="success" icon="el-icon-s-check" @click="handleDeviceAuthorize(item)" v-hasPermi="['iot:product:edit']" v-if="item.status==2" :disabled="item.isAuthorize!=1">{{ $t('product.index.091251-19') }}</el-button>
<el-button size="mini" type="warning" icon="el-icon-search" @click="handleViewDevice(item.productId)" v-hasPermi="['iot:device:query']">{{ $t('product.index.091251-24') }}</el-button>
</el-button-group>
</el-card>
</el-col>
</el-row>
<el-empty description="暂无数据,请添加产品" v-if="total==0"></el-empty>
<el-empty :description="$t('product.index.091251-25')" v-if="total==0"></el-empty>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" :pageSizes="[12, 24, 36, 60]" @pagination="getList" />
<!-- 下载SDK -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-link type="danger" style="padding-left:10px;" :underline="false">该功能暂未实现参考教程和项目的SDK示例</el-link>
<el-link type="danger" style="padding-left:10px;" :underline="false">{{ $t('product.index.091251-26') }}</el-link>
<el-form label-width="80px">
<el-form-item label="设备类型">
<el-form-item :label="$t('product.index.091251-27')">
<el-radio-group v-model="form.datatype">
<el-radio v-for="dict in dict.type.iot_device_chip" :key="dict.value" :label="dict.value" style="margin-top:15px;width:160px;">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="downloadSdk" disabled> </el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="downloadSdk" disabled>{{ $t('product.index.091251-28') }}</el-button>
<el-button @click="cancel">{{ $t('product.index.091251-29') }}</el-button>
</div>
</el-dialog>
@@ -181,30 +181,30 @@ export default {
},
/** 更新产品状态 */
async changeProductStatus(productId, status, deviceType) {
let message = "确定取消发布?";
let message = this.$t('product.index.091251-30');
if (status == 2) {
// 发布
let hasPermission = checkPermi(['iot:product:add']);
if (!hasPermission) {
this.$modal.alertError("没有操作权限");
this.$modal.alertError(this.$t('product.index.091251-31'));
return;
}
message = "产品发布后,可以创建对应的设备";
message = this.$t('product.index.091251-32');
} else if (status == 1) {
// 取消发布
let hasPermission = checkPermi(['iot:product:edit']);
if (!hasPermission) {
this.$modal.alertError("没有操作权限");
this.$modal.alertError(this.$t('product.index.091251-31'));
return;
}
let result = await this.getDeviceCountByProductId(productId);
if (result.data > 0) {
message = "重要提示:产品下已有 " + result.data + " 个设备,取消发布可以修改产品信息和模型,重新发布后对应设备状态将会被重置!"
message = this.$i18n.t('product.index.091251-33', [result.data]);
}
}
this.$confirm(message, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
this.$confirm(message, this.$t('product.index.091251-34'), {
confirmButtonText: this.$t('product.index.091251-35'),
cancelButtonText: this.$t('cancel'),
type: 'warning'
}).then(() => {
let data = {};
@@ -245,7 +245,7 @@ export default {
},
/** 生成SDK */
handleGeneratorSDK(row) {
this.title = "生成SDK"
this.title = this.$t('product.index.091251-38')
this.open = true;
},
/** 下载SDK */
@@ -256,7 +256,7 @@ export default {
handleDelete(row) {
const productIds = row.productId || this.ids;
let msg = "";
this.$modal.confirm('是否确认删除产品编号为"' + productIds + '"的数据项?').then(function () {
this.$modal.confirm(this.$i18n.t('product.index.091251-39', [productIds])).then(function () {
// // 删除SIP配置
// delSipconfigByProductId(productIds).then(response => {});
return delProduct(productIds);

View File

@@ -4,34 +4,36 @@
<el-col :span="14">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-refresh" size="mini" @click="getList">刷新</el-button>
<el-button type="warning" plain icon="el-icon-refresh" size="mini" @click="getList">{{ $t('refresh') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-tag type="danger" style="margin-left:15px;">{{ $t('product.product-app.045891-1') }}</el-tag>
</el-col>
<el-tag type="danger" style="margin-left:15px;">该功能暂不可用,后面版本发布</el-tag>
</el-row>
<el-table v-loading="loading" :data="modelList" border style="margin-bottom:60px;margin-top:20px;" size="small">
<el-table-column label="名称" align="center" prop="modelName" />
<el-table-column label="标识符" align="center" prop="identifier" />
<el-table-column label="物模型类别" align="center" prop="type">
<el-table-column :label="$t('product.product-app.045891-2')" align="center" prop="modelName" />
<el-table-column :label="$t('product.product-app.045891-3')" align="center" prop="identifier" />
<el-table-column :label="$t('product.product-app.045891-4')" align="center" prop="type">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_things_type" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="数据类型" align="center" prop="datatype">
<el-table-column :label="$t('product.product-app.045891-5')" align="center" prop="datatype">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_data_type" :value="scope.row.datatype" />
</template>
</el-table-column>
<el-table-column label="部件" align="center" prop="part">
<el-table-column :label="$t('product.product-app.045891-6')" align="center" prop="part">
<template slot-scope="scope">
{{scope.row.part}} 系统定义的部件
{{scope.row.part}} {{ $t('product.product-app.045891-7') }}
</template>
</el-table-column>
</el-table>
<el-divider>高级功能</el-divider>
<el-divider>{{ $t('product.product-app.045891-8') }}</el-divider>
<el-form ref="form" :model="form" label-width="100px">
<el-form-item label="自定义页面" prop="page">
<el-input v-model="form.page" placeholder="请输入自定义页面" />
<el-form-item :label="$t('product.product-app.045891-9')" prop="page">
<el-input v-model="form.page" :placeholder="$t('product.product-app.045891-10')" />
</el-form-item>
</el-form>
@@ -40,7 +42,7 @@
<div class="phone">
<div class="phone-container"></div>
</div>
<div style="text-align:center;margin-top:15px;width:370px;">界面展示</div>
<div style="text-align:center;margin-top:15px;width:370px;">{{ $t('product.product-app.045891-11') }}</div>
</el-col>
</el-row>

View File

@@ -1,62 +1,62 @@
<template>
<div style="padding-left:20px;">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="设备编号" prop="serialNumber">
<el-input v-model="queryParams.serialNumber" placeholder="请输入设备编号" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('product.product-authorize.314975-0')" prop="serialNumber">
<el-input v-model="queryParams.serialNumber" :placeholder="$t('product.product-authorize.314975-1')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="授权码" prop="authorizeCode">
<el-input v-model="queryParams.authorizeCode" placeholder="请输入授权码" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('product.product-authorize.314975-2')" prop="authorizeCode">
<el-input v-model="queryParams.authorizeCode" :placeholder="$t('product.product-authorize.314975-3')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
<el-form-item :label="$t('product.product-authorize.314975-4')" prop="status">
<el-select v-model="queryParams.status" :placeholder="$t('product.product-authorize.314975-5')" clearable size="small">
<el-option v-for="dict in dict.type.iot_auth_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['iot:authorize:add']">生成授权码</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['iot:authorize:add']">{{ $t('product.product-authorize.314975-8') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['iot:authorize:remove']">批量删除</el-button>
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['iot:authorize:remove']">{{ $t('product.product-authorize.314975-9') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['iot:authorize:export']">导出</el-button>
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['iot:authorize:export']">{{ $t('product.product-authorize.314975-10') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-link type="info" style="padding-top:5px" :underline="false">Tips双击可以复制授权码</el-link>
<el-link type="info" style="padding-top:5px" :underline="false">{{ $t('product.product-authorize.314975-11') }}</el-link>
</el-col>
</el-row>
<el-table v-loading="loading" :data="authorizeList" @selection-change="handleSelectionChange" @cell-dblclick="celldblclick" size="small">
<el-table-column type="selection" :selectable="selectable" width="55" align="center" />
<el-table-column label="授权码" width="320" align="center" prop="authorizeCode" />
<el-table-column label="状态" align="center" prop="active" width="100">
<el-table-column :label="$t('product.product-authorize.314975-2')" width="320" align="center" prop="authorizeCode" />
<el-table-column :label="$t('product.product-authorize.314975-4')" align="center" prop="active" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_auth_status" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="设备编号" width="150" align="center" prop="serialNumber">
<el-table-column :label="$t('product.product-authorize.314975-0')" width="150" align="center" prop="serialNumber">
<template slot-scope="scope">
<el-link type="primary" @click="getDeviceBySerialNumber(scope.row.serialNumber)" :underline="false">{{scope.row.serialNumber}}</el-link>
</template>
</el-table-column>
<el-table-column label="授权时间" align="center" prop="updateTime" width="180">
<el-table-column :label="$t('product.product-authorize.314975-12')" align="center" prop="updateTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{m}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('product.product-authorize.314975-13')" align="center" prop="remark" />
<el-table-column :label="$t('opation')" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-s-check" @click="handleUpdate(scope.row,'auth')" v-hasPermi="['iot:authorize:edit']" v-if="scope.row.status==1 && !scope.row.deviceId">设备授权</el-button>
<el-button size="mini" type="text" icon="el-icon-notebook-1" @click="handleUpdate(scope.row,'remark')" v-hasPermi="['iot:authorize:edit']">备注</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:authorize:remove']" v-if="!scope.row.deviceId">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-s-check" @click="handleUpdate(scope.row,'auth')" v-hasPermi="['iot:authorize:edit']" v-if="scope.row.status==1 && !scope.row.deviceId">{{ $t('product.product-authorize.314975-69') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-notebook-1" @click="handleUpdate(scope.row,'remark')" v-hasPermi="['iot:authorize:edit']">{{ $t('product.product-authorize.314975-13') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['iot:authorize:remove']" v-if="!scope.row.deviceId">{{ $t('del') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -68,28 +68,28 @@
<div v-if="editType=='auth'">
<div class="el-divider el-divider--horizontal" style="margin-top: -25px;"></div>
<el-form :model="deviceParams" ref="queryDeviceForm" :inline="true" label-width="68px">
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="deviceParams.deviceName" placeholder="请输入设备名称" clearable size="small" @keyup.enter.native="handleQuery" style="width:150px;" />
<el-form-item :label="$t('product.product-authorize.314975-17')" prop="deviceName">
<el-input v-model="deviceParams.deviceName" :placeholder="$t('product.product-authorize.314975-18')" clearable size="small" @keyup.enter.native="handleQuery" style="width:150px;" />
</el-form-item>
<el-form-item label="设备编号" prop="serialNumber" style="margin:0 30px;">
<el-input v-model="deviceParams.serialNumber" placeholder="请输入设备编号" clearable size="small" @keyup.enter.native="handleQuery" style="width:150px;" />
<el-form-item :label="$t('product.product-authorize.314975-0')" prop="serialNumber" style="margin:0 30px;">
<el-input v-model="deviceParams.serialNumber" :placeholder="$t('product.product-authorize.314975-1')" clearable size="small" @keyup.enter.native="handleQuery" style="width:150px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleDeviceQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetDeviceQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleDeviceQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetDeviceQuery">{{ $t('reset') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="deviceLoading" :data="deviceList" ref="singleTable" size="mini" @row-click="rowClick" highlight-current-row>
<el-table-column label="选择" width="50" align="center">
<el-table-column :label="$t('product.product-authorize.314975-19')" width="50" align="center">
<template slot-scope="scope">
<input type="radio" :checked="scope.row.isSelect" name="device" />
</template>
</el-table-column>
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="设备ID" align="center" prop="deviceId" />
<el-table-column label="设备编号" align="center" prop="serialNumber" />
<el-table-column label="用户名称" align="center" prop="userName" />
<el-table-column label="设备状态" align="center" prop="status">
<el-table-column :label="$t('product.product-authorize.314975-17')" align="center" prop="deviceName" />
<el-table-column :label="$t('product.product-authorize.314975-20')" align="center" prop="deviceId" />
<el-table-column :label="$t('product.product-authorize.314975-0')" align="center" prop="serialNumber" />
<el-table-column :label="$t('product.product-authorize.314975-21')" align="center" prop="userName" />
<el-table-column :label="$t('product.product-authorize.314975-22')" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_device_status" :value="scope.row.status" />
</template>
@@ -98,53 +98,53 @@
<pagination v-show="deviceTotal>0" :total="deviceTotal" :page.sync="deviceParams.pageNum" :limit.sync="deviceParams.pageSize" @pagination="getDeviceList" />
</div>
<div v-if="editType=='remark'">
<el-input v-model="form.remark" type="textarea" rows="4" placeholder="请输入内容" />
<el-input v-model="form.remark" type="textarea" rows="4" :placeholder="$t('plzInput')" />
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm">{{ $t('confirm') }}</el-button>
<el-button @click="cancel">{{ $t('cancel') }}</el-button>
</div>
</el-dialog>
<!-- 设备详情对话框 -->
<el-dialog title="设备详情" :visible.sync="openDevice" width="600px" append-to-body>
<div v-if="device==null" style="text-align:center;"><i class="el-icon-warning" style="color:#E6A23C;"></i> 提示查找不到设备可能已经被删除</div>
<el-dialog :title="$t('product.product-authorize.314975-26')" :visible.sync="openDevice" width="600px" append-to-body>
<div v-if="device==null" style="text-align:center;"><i class="el-icon-warning" style="color:#E6A23C;"></i> {{ $t('product.product-authorize.314975-27') }}</div>
<el-descriptions border :column="2" size="medium" v-if="device!=null">
<el-descriptions-item label="设备ID">{{device.deviceId}}</el-descriptions-item>
<el-descriptions-item label="设备名称">{{device.deviceName}}</el-descriptions-item>
<el-descriptions-item label="设备编号">{{device.serialNumber}}</el-descriptions-item>
<el-descriptions-item label="设备状态">
<el-descriptions-item :label="$t('product.product-authorize.314975-20')">{{device.deviceId}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.product-authorize.314975-17')">{{device.deviceName}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.product-authorize.314975-0')">{{device.serialNumber}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.product-authorize.314975-22')">
<!-- 1-未激活2-禁用3-在线4-离线 -->
<el-tag v-if="device.status==1" type="warning">未激活</el-tag>
<el-tag v-else-if="device.status==2" type="danger">禁用</el-tag>
<el-tag v-else-if="device.status==3" type="success">在线</el-tag>
<el-tag v-else-if="device.status==4" type="info">离线</el-tag>
<el-tag v-if="device.status==1" type="warning">{{ $t('product.product-authorize.314975-28') }}</el-tag>
<el-tag v-else-if="device.status==2" type="danger">{{ $t('product.product-authorize.314975-29') }}</el-tag>
<el-tag v-else-if="device.status==3" type="success">{{ $t('product.product-authorize.314975-30') }}</el-tag>
<el-tag v-else-if="device.status==4" type="info">{{ $t('product.product-authorize.314975-31') }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="设备影子">
<el-tag v-if="device.isShadow==1" type="success">启用</el-tag>
<el-tag v-else type="info">未启用</el-tag>
<el-descriptions-item :label="$t('product.product-authorize.314975-32')">
<el-tag v-if="device.isShadow==1" type="success">{{ $t('product.product-authorize.314975-33') }}</el-tag>
<el-tag v-else type="info">{{ $t('product.index.091251-21') }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="定位方式">
<el-descriptions-item :label="$t('product.product-authorize.314975-35')">
<!-- (1=ip自动定位2=设备定位3=自定义) -->
<el-tag v-if="device.locationWay==1" type="success">自动定位</el-tag>
<el-tag v-else-if="device.locationWay==2" type="warning">设备定位</el-tag>
<el-tag v-else-if="device.locationWay==3" type="primary">自定义位置</el-tag>
<el-tag v-if="device.locationWay==1" type="success">{{ $t('product.product-authorize.314975-36') }}</el-tag>
<el-tag v-else-if="device.locationWay==2" type="warning">{{ $t('product.product-authorize.314975-37') }}</el-tag>
<el-tag v-else-if="device.locationWay==3" type="primary">{{ $t('product.product-authorize.314975-38') }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="产品名称">{{device.productName}}</el-descriptions-item>
<el-descriptions-item label="租户名称">{{device.userName}}</el-descriptions-item>
<el-descriptions-item label="固件版本">Version {{device.firmwareVersion}}</el-descriptions-item>
<el-descriptions-item label="所在地址">{{device.networkAddress}}</el-descriptions-item>
<el-descriptions-item label="设备经度">{{device.longitude}}</el-descriptions-item>
<el-descriptions-item label="设备纬度">{{device.latitude}}</el-descriptions-item>
<el-descriptions-item label="入网IP">{{device.networkIp}}</el-descriptions-item>
<el-descriptions-item label="设备信号">{{device.rssi}}</el-descriptions-item>
<el-descriptions-item label="创建时间">{{device.createTime}}</el-descriptions-item>
<el-descriptions-item label="激活时间">{{device.activeTime}}</el-descriptions-item>
<el-descriptions-item label="备注信息">{{device.remark}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.index.091251-0')">{{device.productName}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.product-authorize.314975-40')">{{device.userName}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.product-authorize.314975-41')">{{ $t('product.product-authorize.314975-41') }} {{device.firmwareVersion}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.product-authorize.314975-42')">{{device.networkAddress}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.product-authorize.314975-43')">{{device.longitude}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.product-authorize.314975-44')">{{device.latitude}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.product-authorize.314975-45')">{{device.networkIp}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.product-authorize.314975-46')">{{device.rssi}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.product-authorize.314975-47')">{{device.createTime}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.product-authorize.314975-48')">{{device.activeTime}}</el-descriptions-item>
<el-descriptions-item :label="$t('product.product-authorize.314975-49')">{{device.remark}}</el-descriptions-item>
</el-descriptions>
<div slot="footer" class="dialog-footer">
<el-button @click="goToEditDevice(device.deviceId)" type="primary">查看设备</el-button>
<el-button @click="closeDevice"> </el-button>
<el-button @click="goToEditDevice(device.deviceId)" type="primary">{{ $t('product.product-authorize.314975-50') }}</el-button>
<el-button @click="closeDevice">{{ $t('product.product-authorize.314975-51') }}</el-button>
</div>
</el-dialog>
</div>
@@ -388,12 +388,12 @@ export default {
},
/** 批量新增按钮操作 */
handleAdd() {
this.$prompt('', '输入授权码数量', {
this.$prompt('', this.$t('product.product-authorize.314975-52'), {
customClass: 'createNum',
confirmButtonText: '确定',
cancelButtonText: '取消',
confirmButtonText: this.$t('product.product-authorize.314975-53'),
cancelButtonText: this.$t('product.product-authorize.314975-54'),
inputPattern: /[0-9\-]/,
inputErrorMessage: '数量内容不正确',
inputErrorMessage: this.$t('product.product-authorize.314975-55'),
inputType: 'number',
inputValue: this.createNum
}).then(({
@@ -406,7 +406,7 @@ export default {
createNum: this.createNum
}
addProductAuthorizeByNum(_addData).then(response => {
this.$modal.msgSuccess("新增授权码成功");
this.$modal.msgSuccess(this.$t('product.product-authorize.314975-56'));
this.getList();
this.createNum = 10;
});
@@ -414,7 +414,7 @@ export default {
}).catch(() => {
this.$message({
type: 'info',
message: '取消新增'
message: this.$t('product.product-authorize.314975-57')
});
});
},
@@ -427,10 +427,10 @@ export default {
this.form = response.data;
this.open = true;
if (this.editType == 'auth') {
this.title = "选择设备";
this.title = this.$t('product.product-authorize.314975-58');
this.editWidth = "800px";
} else {
this.title = "备注信息";
this.title = this.$t('product.product-authorize.314975-13');
this.editWidth = "500px";
}
// 取消选中
@@ -449,16 +449,16 @@ export default {
if (this.editType == 'auth') {
if (this.form.deviceId != null && this.form.deviceId != 0) {
updateAuthorize(this.form).then(response => {
this.$modal.msgSuccess("设备授权成功");
this.$modal.msgSuccess(this.$t('product.product-authorize.314975-59'));
this.open = false;
this.getList();
});
} else {
this.$modal.msg("请选择要授权的设备");
this.$modal.msg(this.$t('product.product-authorize.314975-60'));
}
} else if (this.form.authorizeId != null) {
updateAuthorize(this.form).then(response => {
this.$modal.msgSuccess("备注成功");
this.$modal.msgSuccess(this.$t('product.product-authorize.314975-61'));
this.open = false;
this.getList();
});
@@ -467,11 +467,11 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const authorizeIds = row.authorizeId || this.ids;
this.$modal.confirm('是否确认删除产品授权码编号为"' + authorizeIds + '"的数据项?').then(function () {
this.$modal.confirm(this.$i18n.t('product.product-authorize.314975-62', [authorizeIds])).then(function () {
return delAuthorize(authorizeIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
this.$modal.msgSuccess(this.$t('product.product-authorize.314975-63'));
}).catch(() => {});
},
/** 导出按钮操作 */
@@ -494,8 +494,8 @@ export default {
},
onCopy() {
this.$notify({
title: '成功',
message: '复制成功!',
title: this.$t('product.product-authorize.314975-64'),
message: this.$t('product.product-authorize.314975-66'),
type: 'success',
offset: 50,
duration: 2000
@@ -503,8 +503,8 @@ export default {
},
onError() {
this.$notify({
title: '失败',
message: '复制失败!',
title: this.$t('product.product-authorize.314975-67'),
message: this.$t('product.product-authorize.314975-68'),
type: 'error',
offset: 50,
duration: 2000

View File

@@ -2,87 +2,87 @@
<el-card style="margin:6px;padding-bottom:100px;">
<el-tabs v-model="activeName" tab-position="left" style="padding:10px;min-height:400px;" @tab-click="tabChange">
<el-tab-pane name="basic">
<span slot="label"><span style="color:red;">* </span>基本信息</span>
<span slot="label"><span style="color:red;">* </span>{{ $t('product.product-edit.473153-0') }}</span>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row :gutter="100">
<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8">
<el-form-item label="产品名称" prop="productName">
<el-input v-model="form.productName" placeholder="请输入产品名称" :readonly="form.status == 2" />
<el-form-item :label="$t('product.product-edit.473153-1')" prop="productName">
<el-input v-model="form.productName" :placeholder="$t('product.product-edit.473153-2')" :readonly="form.status == 2" />
</el-form-item>
<el-form-item label="产品分类" prop="categoryId">
<el-select v-model="form.categoryId" placeholder="请选择分类" @change="selectCategory"
<el-form-item :label="$t('product.product-edit.473153-3')" prop="categoryId">
<el-select v-model="form.categoryId" :placeholder="$t('product.product-edit.473153-4')" @change="selectCategory"
style="width:100%" :disabled="form.status == 2">
<el-option v-for="category in categoryShortList" :key="category.id"
:label="category.name" :value="category.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="设备类型" prop="deviceType">
<el-select v-model="form.deviceType" placeholder="请选择设备类型" @change="deviceTypeChange" :disabled="form.status == 2"
<el-form-item :label="$t('product.product-edit.473153-78')" prop="deviceType">
<el-select v-model="form.deviceType" :placeholder="$t('product.product-edit.473153-98')" @change="deviceTypeChange" :disabled="form.status == 2"
style="width:100%">
<el-option v-for="dict in dict.type.iot_device_type" :key="dict.value"
:label="dict.label" :value="parseInt(dict.value)"></el-option>
</el-select>
</el-form-item>
<el-form-item label="传输协议" prop="transport">
<el-select v-model="form.transport" placeholder="请选择传输协议" style="width: 100%"
<el-form-item :label="$t('product.product-edit.473153-14')" prop="transport">
<el-select v-model="form.transport" :placeholder="$t('product.product-edit.473153-15')" style="width: 100%"
:disabled="true">
<el-option v-for="dict in dict.type.iot_transport_type" :key="dict.value"
:label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item v-if="form.deviceType !== 3" label="编码协议" prop="protocolCode">
<el-select v-model="form.protocolCode" placeholder="请选择编码协议" style="width: 100%"
<el-form-item :label="$t('product.product-edit.473153-97')" prop="protocolCode">
<el-select v-model="form.protocolCode" :placeholder="$t('product.product-edit.473153-4')" style="width: 100%"
:disabled="form.status == 2" @change="changeProductCode">
<el-option v-for="p in protocolList" :key="p.protocolCode" :label="p.protocolName"
:value="p.protocolCode" />
</el-select>
</el-form-item>
<el-form-item label="联网方式" prop="networkMethod">
<el-select v-model="form.networkMethod" placeholder="请选择联网方式" style="width:100%;"
<el-form-item :label="$t('product.product-edit.473153-16')" prop="networkMethod">
<el-select v-model="form.networkMethod" :placeholder="$t('product.product-edit.473153-17')" style="width:100%;"
:disabled="form.status == 2">
<el-option v-for="dict in dict.type.iot_network_method" :key="dict.value"
:label="dict.label" :value="parseInt(dict.value)"></el-option>
</el-select>
</el-form-item>
<el-form-item label="备注信息" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" rows="3"
<el-form-item :label="$t('product.product-edit.473153-32')" prop="remark">
<el-input v-model="form.remark" type="textarea" :placeholder="$t('product.product-edit.473153-33')" rows="3"
:readonly="form.status == 2" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8">
<el-form-item label="启用授权" prop="networkMethod">
<el-form-item :label="$t('product.product-edit.473153-96')" prop="networkMethod">
<el-switch v-model="form.isAuthorize" @change="changeIsAuthorize(form.isAuthorize)"
:active-value="1" :inactive-value="0"
:disabled="form.status == 2 || form.deviceType == 3" />
</el-form-item>
<el-form-item label="认证方式" prop="vertificateMethod">
<el-select v-model="form.vertificateMethod" placeholder="请选择认证方式" style="width:100%"
<el-form-item :label="$t('product.product-edit.473153-21')" prop="vertificateMethod">
<el-select v-model="form.vertificateMethod" :placeholder="$t('product.product-edit.473153-22')" style="width:100%"
:disabled="form.status == 2 || form.deviceType == 3">
<el-option v-for="dict in dict.type.iot_vertificate_method" :key="dict.value"
:label="dict.label" :value="parseInt(dict.value)"></el-option>
</el-select>
</el-form-item>
<el-form-item label="产品编号" prop="productId">
<el-input v-model="form.productId" placeholder="自动生成"
<el-form-item :label="$t('product.product-edit.473153-25')" prop="productId">
<el-input v-model="form.productId" :placeholder="$t('product.product-edit.473153-26')"
:disabled="!form.mqttAccount || form.deviceType == 3" readonly />
</el-form-item>
<el-form-item label="Mqtt账号" prop="mqttAccount">
<el-input v-model="form.mqttAccount" placeholder="不填自动生成" :disabled="form.deviceType == 3"
<el-form-item :label="$t('product.product-edit.473153-27')" prop="mqttAccount">
<el-input v-model="form.mqttAccount" :placeholder="$t('product.product-edit.473153-28')" :disabled="form.deviceType == 3"
:readonly="accountInputType == 'password'" :type="accountInputType">
<el-button slot="append" icon="el-icon-view" style="font-size:18px;"
@click="changeInputType('account')"></el-button>
</el-input>
</el-form-item>
<el-form-item label="Mqtt密码" prop="mqttPassword">
<el-input v-model="form.mqttPassword" placeholder="不填则自动生成" :disabled="form.deviceType == 3"
<el-form-item :label="$t('product.product-edit.473153-29')" prop="mqttPassword">
<el-input v-model="form.mqttPassword" :placeholder="$t('product.product-edit.473153-30')" :disabled="form.deviceType == 3"
:readonly="passwordInputType == 'password'" :type="passwordInputType">
<el-button slot="append" icon="el-icon-view" style="font-size:18px;"
@click="changeInputType('password')"></el-button>
</el-input>
</el-form-item>
<el-form-item label="产品秘钥" prop="mqttSecret">
<el-input v-model="form.mqttSecret" placeholder="自动生成"
<el-form-item :label="$t('product.product-edit.473153-31')" prop="mqttSecret">
<el-input v-model="form.mqttSecret" :placeholder="$t('product.product-edit.473153-26')"
:disabled="!form.mqttAccount || form.deviceType == 3" readonly :type="keyInputType">
<el-button slot="append" icon="el-icon-view" style="font-size:18px;"
@click="changeInputType('key')"></el-button>
@@ -90,7 +90,7 @@
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8">
<el-form-item label="产品图片">
<el-form-item :label="$t('product.product-edit.473153-34')">
<div v-if="form.status == 2 && form.imgUrl == null">
<el-image style="height:145px;height:145px;border-radius:10px;"
:preview-src-list="[require('@/assets/images/gateway.png')]"
@@ -110,7 +110,7 @@
</imageUpload>
</div>
<div class="el-upload__tip" style="color:#f56c6c"
v-if="form.productId == null || form.productId == 0">提示上传后需要提交保存</div>
v-if="form.productId == null || form.productId == 0">{{ $t('product.product-edit.473153-35') }}</div>
</el-form-item>
</el-col>
</el-row>
@@ -118,26 +118,26 @@
<el-col :span="20">
<el-form-item style="text-align: center;margin:40px 0px;">
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:product:edit']"
v-show="form.productId != 0 && form.status != 2"> </el-button>
v-show="form.productId != 0 && form.status != 2">{{ $t('product.product-edit.473153-36') }}</el-button>
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:product:add']"
v-show="form.productId == 0 && form.status != 2"> </el-button>
v-show="form.productId == 0 && form.status != 2">{{ $t('product.product-edit.473153-37') }}</el-button>
</el-form-item>
</el-col>
</el-form>
</el-tab-pane>
<el-tab-pane label="" name="things" :disabled="form.productId == 0">
<span slot="label"><span style="color:red;">* </span>产品模型</span>
<span slot="label"><span style="color:red;">* </span>{{ $t('product.product-edit.473153-38') }}</span>
<product-things-model ref="productThingsModel" :product="form" />
</el-tab-pane>
<el-tab-pane label="" name="productAuthorize" :disabled="form.productId == 0" v-if="form.deviceType !== 3">
<span slot="label">设备授权</span>
<span slot="label">{{ $t('product.product-edit.473153-40') }}</span>
<product-authorize ref="productAuthorize" :product="form" />
</el-tab-pane>
<el-tab-pane label="" name="sipConfig" :disabled="form.productId == 0" v-if="form.deviceType === 3">
<span slot="label">SIP配置</span>
<span slot="label">{{ $t('product.product-edit.473153-41') }}</span>
<config-sip ref="configSip" :product="form" />
</el-tab-pane>
@@ -156,18 +156,18 @@
<el-tab-pane v-if="form.status == 1" name="product04" disabled>
<span slot="label">
<el-button type="success" size="mini" @click="changeProductStatus(2)"
v-hasPermi="['iot:product:add']">发布产品</el-button>
v-hasPermi="['iot:product:add']">{{ $t('product.product-edit.473153-86') }}</el-button>
</span>
</el-tab-pane>
<el-tab-pane v-if="form.status == 2" name="product05" disabled>
<span slot="label">
<el-button type="danger" size="mini" @click="changeProductStatus(1)"
v-hasPermi="['iot:product:edit']">取消发布</el-button>
v-hasPermi="['iot:product:edit']">{{ $t('product.product-edit.473153-87') }}</el-button>
</span>
</el-tab-pane>
<el-tab-pane name="product06" disabled>
<span slot="label">
<el-button type="info" size="mini" @click="goBack()">返回列表</el-button>
<el-button type="info" size="mini" @click="goBack()">{{ $t('back') }}</el-button>
</span>
</el-tab-pane>
</el-tabs>
@@ -235,35 +235,35 @@ export default {
rules: {
productName: [{
required: true,
message: "产品名称不能为空",
message: this.$t('product.product-edit.473153-58'),
trigger: "blur",
},
{
min: 1,
max: 64,
message: '产品名称不能少于1个字符和超过64字符',
message: this.$i18n.t('product.product-edit.473153-59'),
trigger: 'blur',
},
],
categoryId: [{
required: true,
message: "产品分类ID不能为空",
message: this.$t('product.product-edit.473153-59'),
trigger: "blur"
}],
deviceType: [{
required: true,
message: "请选择设备类型",
message: this.$t('product.product-edit.473153-98'),
trigger: "blur"
}],
protocolCode: [{
required: true,
message: "设备协议不能为空",
message: this.$t('product.product-edit.473153-60'),
trigger: "blur"
}],
transport: [{
required: true,
message: "传输协议不能为空",
message: this.$t('product.product-edit.473153-61'),
trigger: 'blur'
}]
},
@@ -390,14 +390,14 @@ export default {
if (this.form.productId != null && this.form.productId != 0) {
updateProduct(this.form).then(response => {
this.changeProductCode(this.form.protocolCode);
this.$modal.alertSuccess("修改成功");
this.$modal.alertSuccess(this.$t('product.product-edit.473153-62'));
});
} else {
addProduct(this.form).then(response => {
if (!this.form.isModbus) {
this.$modal.alertSuccess("添加成功,可以开始定义物模型或配置");
this.$modal.alertSuccess(this.$t('product.product-edit.473153-99'));
} else {
this.$modal.alertSuccess("物模型已经从采集点模板同步至产品")
this.$modal.alertSuccess(this.$t('product.product-edit.473153-65'));
}
this.form = response.data;
this.changeProductCode(this.form.protocolCode);
@@ -418,18 +418,18 @@ export default {
},
/** 更新产品状态 */
async changeProductStatus(status) {
let message = "确定取消发布?";
let message = this.$t('product.product-edit.473153-66');
if (status == 2) {
message = "产品发布后,可以创建对应的设备";
message = this.$t('product.product-edit.473153-67');
} else if (status == 1) {
let result = await this.getDeviceCountByProductId(this.form.productId);
if (result.data > 0) {
message = "重要提示:产品下已有 " + result.data + " 个设备,取消发布可以修改产品信息和模型,重新发布后对应设备状态将会被重置!"
message = this.$i18n.t('product.product-edit.473153-68', [result.data]);
}
}
this.$confirm(message, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
this.$confirm(message, this.$t('product.product-edit.473153-69'), {
confirmButtonText: this.$t('product.product-edit.473153-70'),
cancelButtonText: this.$t('cancel'),
type: 'warning'
}).then(() => {
let data = {};
@@ -476,11 +476,11 @@ export default {
},
// 授权码状态修改
changeIsAuthorize() {
let text = this.form.isAuthorize == "1" ? "启用" : "停用";
this.$modal.confirm('确认要' + text + '授权码吗?').then(() => {
let text = this.form.isAuthorize == "1" ? this.$t('product.product-edit.473153-72') : this.$t('product.product-edit.473153-74');
this.$modal.confirm(this.$i18n.t('product.product-edit.473153-75', [text])).then(() => {
if (this.form.productId != null && this.form.productId != 0) {
updateProduct(this.form).then(response => {
this.$modal.alertSuccess("授权码已" + text);
this.$modal.alertSuccess(this.$i18n.t('product.product-edit.473153-77', [text]));
});
}
}).catch(() => {

View File

@@ -2,53 +2,53 @@
<div style="margin-top:-50px;">
<el-divider></el-divider>
<el-form :model="queryParams" ref="product-select-template" :inline="true" label-width="48px">
<el-form-item label="名称" prop="templateName">
<el-input v-model="queryParams.templateName" placeholder="请输入物模型名称" clearable size="small"
<el-form-item :label="$t('product.product-select-template.318012-0')" prop="templateName">
<el-input v-model="queryParams.templateName" :placeholder="$t('product.product-select-template.318012-1')" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="类别" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择模型类别" clearable size="small">
<el-form-item :label="$t('product.product-select-template.318012-2')" prop="type">
<el-select v-model="queryParams.type" :placeholder="$t('product.product-select-template.318012-3')" clearable size="small">
<el-option v-for="dict in dict.type.iot_things_type" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="templateList" @selection-change="handleSelectionChange"
ref="selectTemplateTable" size="small">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="名称" align="center" prop="templateName" />
<el-table-column label="标识符" align="center" prop="identifier" />
<el-table-column label="物模型类别" align="center" prop="type">
<el-table-column :label="$t('product.product-select-template.318012-0')" align="center" prop="templateName" />
<el-table-column :label="$t('product.product-select-template.318012-6')" align="center" prop="identifier" />
<el-table-column :label="$t('product.product-select-template.318012-7')" align="center" prop="type">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_things_type" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="图表展示" align="center" prop="isChart" width="75">
<el-table-column :label="$t('product.product-select-template.318012-8')" align="center" prop="isChart" width="75">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isChart" />
</template>
</el-table-column>
<el-table-column label="实时监测" align="center" prop="isMonitor" width="75">
<el-table-column :label="$t('product.product-select-template.318012-9')" align="center" prop="isMonitor" width="75">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isMonitor" />
</template>
</el-table-column>
<el-table-column label="只读" align="center" prop="isReadonly" width="75">
<el-table-column :label="$t('product.product-select-template.318012-10')" align="center" prop="isReadonly" width="75">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isReadonly" />
</template>
</el-table-column>
<el-table-column label="历史存储" align="center" prop="isHistory" width="75">
<el-table-column :label="$t('product.product-select-template.318012-11')" align="center" prop="isHistory" width="75">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isHistory" />
</template>
</el-table-column>
<el-table-column label="数据类型" align="center" prop="datatype">
<el-table-column :label="$t('product.product-select-template.318012-12')" align="center" prop="datatype">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_data_type" :value="scope.row.datatype" />
</template>

View File

@@ -3,70 +3,70 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-if="productInfo.status == 1">新增</el-button>
v-if="productInfo.status == 1">{{ $t('product.product-things-model.142341-0') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-upload2" size="mini" @click="handleSelect"
v-if="productInfo.status == 1">导入通用物模型</el-button>
v-if="productInfo.status == 1">{{ $t('product.product-things-model.142341-1') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-refresh" size="mini" @click="getList">刷新</el-button>
<el-button type="warning" plain icon="el-icon-refresh" size="mini" @click="getList">{{ $t('refresh') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-view" size="mini" @click="handleOpenThingsModel">查看物模型</el-button>
<el-button type="info" plain icon="el-icon-view" size="mini" @click="handleOpenThingsModel">{{ $t('product.product-things-model.142341-3') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-link type="danger" style="padding-top: 5px" :underline="false">注意标识符不能重复</el-link>
<el-link type="danger" style="padding-top: 5px" :underline="false">{{ $t('product.product-things-model.142341-4') }}</el-link>
</el-col>
</el-row>
<el-table v-loading="loading" :data="modelList" size="mini">
<el-table-column label="名称" align="center" prop="modelName" width="230" />
<el-table-column label="标识符" align="center" prop="identifier" />
<el-table-column label="图表展示" align="center" prop="" width="80">
<el-table-column :label="$t('product.product-things-model.142341-8')" align="center" prop="modelName" width="230" />
<el-table-column :label="$t('product.product-things-model.142341-9')" align="center" prop="identifier" />
<el-table-column :label="$t('product.product-things-model.142341-12')" align="center" prop="" width="80">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isChart" />
</template>
</el-table-column>
<el-table-column label="实时监测" align="center" prop="" width="75">
<el-table-column :label="$t('product.product-things-model.142341-13')" align="center" prop="" width="75">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isMonitor" />
</template>
</el-table-column>
<el-table-column label="只读" align="center" prop="" width="75">
<el-table-column :label="$t('product.product-things-model.142341-14')" align="center" prop="" width="75">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isReadonly" />
</template>
</el-table-column>
<el-table-column label="历史存储" align="center" prop="" width="75">
<el-table-column :label="$t('product.product-things-model.142341-15')" align="center" prop="" width="75">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isHistory" />
</template>
</el-table-column>
<el-table-column label="物模型类别" align="center" prop="type" width="100">
<el-table-column :label="$t('product.product-things-model.142341-16')" align="center" prop="type" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_things_type" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="数据类型" align="center" prop="datatype" width="80">
<el-table-column :label="$t('product.product-things-model.142341-17')" align="center" prop="datatype" width="80">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_data_type" :value="scope.row.datatype" />
</template>
</el-table-column>
<el-table-column label="数据定义" align="left" header-align="center" prop="specs" min-width="150"
<el-table-column :label="$t('product.product-things-model.142341-18')" align="left" header-align="center" prop="specs" min-width="150"
class-name="specsColor">
<template slot-scope="scope">
<div v-html="formatSpecsDisplay(scope.row.specs)"></div>
</template>
</el-table-column>
<el-table-column label="计算公式" align="center" prop="formula" />
<el-table-column label="排序" align="center" prop="modelOrder" width="80" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('product.product-things-model.142341-19')" align="center" prop="formula" />
<el-table-column :label="$t('product.product-things-model.142341-20')" align="center" prop="modelOrder" width="80" />
<el-table-column :label="$t('opation')" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-if="productInfo.status != 2">修改</el-button>
v-if="productInfo.status != 2">{{ $t('product.product-things-model.142341-84') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-if="productInfo.status != 2">删除</el-button>
v-if="productInfo.status != 2">{{ $t('del') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -74,101 +74,101 @@
<!-- 添加或修改物模型对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="模型名称" prop="modelName">
<el-input v-model="form.modelName" placeholder="请输入物模型名称,例如:温度" style="width: 385px" />
<el-form-item :label="$t('product.product-things-model.142341-24')" prop="modelName">
<el-input v-model="form.modelName" :placeholder="$t('product.product-things-model.142341-25')" style="width: 385px" />
</el-form-item>
<el-form-item label="模型标识" prop="identifier">
<el-input v-model="form.identifier" placeholder="请输入标识符例如temperature" style="width: 385px" />
<el-form-item :label="$t('product.product-things-model.142341-26')" prop="identifier">
<el-input v-model="form.identifier" :placeholder="$t('product.product-things-model.142341-27')" style="width: 385px" />
</el-form-item>
<el-form-item label="模型排序" prop="modelOrder">
<el-input-number v-model="form.modelOrder" placeholder="请输入排序" type="number" style="width: 386px"
<el-form-item :label="$t('product.product-things-model.142341-28')" prop="modelOrder">
<el-input-number v-model="form.modelOrder" :placeholder="$t('product.product-things-model.142341-29')" type="number" style="width: 386px"
controls-position="right" />
</el-form-item>
<el-form-item label="模型类别" prop="type">
<el-form-item :label="$t('product.product-things-model.142341-30')" prop="type">
<el-radio-group v-model="form.type" @change="typeChange(form.type)">
<el-radio-button label="1">属性</el-radio-button>
<el-radio-button label="2">功能</el-radio-button>
<el-radio-button label="3">事件</el-radio-button>
<el-radio-button label="1">{{ $t('product.product-things-model.142341-31') }}</el-radio-button>
<el-radio-button label="2">{{ $t('product.product-things-model.142341-32') }}</el-radio-button>
<el-radio-button label="3">{{ $t('product.product-things-model.142341-33') }}</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="模型特性" prop="property">
<el-checkbox name="isChart" label="图表展示" @change="isChartChange" v-show="form.type == 1" v-model="form.isChart"
<el-form-item :label="$t('product.product-things-model.142341-34')" prop="property">
<el-checkbox name="isChart" :label="$t('product.product-things-model.142341-12')" @change="isChartChange" v-show="form.type == 1" v-model="form.isChart"
:true-label="1" :false-label="0"></el-checkbox>
<el-checkbox name="isMonitor" label="实时监测" @change="isMonitorChange" v-show="form.type == 1"
<el-checkbox name="isMonitor" :label="$t('product.product-things-model.142341-13')" @change="isMonitorChange" v-show="form.type == 1"
v-model="form.isMonitor" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox name="isReadonly" label="只读数据" @change="isReadonlyChange" :disabled="form.type == 3"
<el-checkbox name="isReadonly" :label="$t('product.product-things-model.142341-35')" @change="isReadonlyChange" :disabled="form.type == 3"
v-model="form.isReadonly" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox name="isHistory" label="历史存储" v-model="form.isHistory" :true-label="1"
<el-checkbox name="isHistory" :label="$t('product.product-things-model.142341-15')" v-model="form.isHistory" :true-label="1"
:false-label="0"></el-checkbox>
<el-checkbox name="isSharePerm" label="分享权限" v-model="form.isSharePerm" :true-label="1"
<el-checkbox name="isSharePerm" :label="$t('product.product-things-model.142341-36')" v-model="form.isSharePerm" :true-label="1"
:false-label="0"></el-checkbox>
</el-form-item>
<el-divider></el-divider>
<el-form-item label="数据类型" prop="datatype">
<el-select v-model="form.datatype" placeholder="请选择数据类型" @change="dataTypeChange" style="width: 175px">
<el-option key="integer" label="整数" value="integer"></el-option>
<el-option key="decimal" label="小数" value="decimal"></el-option>
<el-option key="bool" label="布尔" value="bool" :disabled="form.isChart == 1"></el-option>
<el-option key="enum" label="枚举" value="enum" :disabled="form.isChart == 1"></el-option>
<el-option key="string" label="字符串" value="string" :disabled="form.isChart == 1"></el-option>
<el-option key="array" label="数组" value="array" :disabled="form.isChart == 1"></el-option>
<el-option key="object" label="对象" value="object" :disabled="form.isChart == 1"></el-option>
<el-form-item :label="$t('product.product-things-model.142341-17')" prop="datatype">
<el-select v-model="form.datatype" :placeholder="$t('product.product-things-model.142341-37')" @change="dataTypeChange" style="width: 175px">
<el-option key="integer" :label="$t('product.product-things-model.142341-38')" value="integer"></el-option>
<el-option key="decimal" :label="$t('product.product-things-model.142341-39')" value="decimal"></el-option>
<el-option key="bool" :label="$t('product.product-things-model.142341-40')" value="bool" :disabled="form.isChart == 1"></el-option>
<el-option key="enum" :label="$t('product.product-things-model.142341-41')" value="enum" :disabled="form.isChart == 1"></el-option>
<el-option key="string" :label="$t('product.product-things-model.142341-42')" value="string" :disabled="form.isChart == 1"></el-option>
<el-option key="array" :label="$t('product.product-things-model.142341-43')" value="array" :disabled="form.isChart == 1"></el-option>
<el-option key="object" :label="$t('product.product-things-model.142341-44')" value="object" :disabled="form.isChart == 1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="取值范围" v-if="form.datatype == 'integer'">
<el-form-item :label="$t('product.product-things-model.142341-45')" v-if="form.datatype == 'integer'">
<el-row>
<el-col :span="9">
<el-input v-model="form.specs.min" placeholder="最小值" controls-position="right" type="number"
<el-input v-model="form.specs.min" :placeholder="$t('product.product-things-model.142341-46')" controls-position="right" type="number"
style="width: 174px;" @input="handleEdit" />
</el-col>
<el-col :span="2" align="center"></el-col>
<el-col :span="2" align="center">{{ $t('product.product-things-model.142341-47') }}</el-col>
<el-col :span="9">
<el-input v-model="form.specs.max" placeholder="最大值" type="number" controls-position="right"
<el-input v-model="form.specs.max" :placeholder="$t('product.product-things-model.142341-48')" type="number" controls-position="right"
style="width: 174px;" @input="handleEditmax" />
</el-col>
</el-row>
</el-form-item>
<el-form-item label="取值范围" v-if="form.datatype == 'decimal'">
<el-form-item :label="$t('product.product-things-model.142341-45')" v-if="form.datatype == 'decimal'">
<el-row>
<el-col :span="9">
<el-input v-model="form.specs.min" placeholder="最小值" controls-position="right" type="number"
<el-input v-model="form.specs.min" :placeholder="$t('product.product-things-model.142341-46')" controls-position="right" type="number"
style="width: 174px;" />
</el-col>
<el-col :span="2" align="center"></el-col>
<el-col :span="2" align="center">{{ $t('product.product-things-model.142341-47') }}</el-col>
<el-col :span="9">
<el-input v-model="form.specs.max" placeholder="最大值" type="number" controls-position="right"
<el-input v-model="form.specs.max" :placeholder="$t('product.product-things-model.142341-48')" type="number" controls-position="right"
style="width: 174px;" />
</el-col>
</el-row>
</el-form-item>
<div v-if="form.datatype == 'integer' || form.datatype == 'decimal'">
<el-form-item label="单位">
<el-input v-model="form.specs.unit" placeholder="请输入单位,例如:℃" style="width: 385px" />
<el-form-item :label="$t('product.product-things-model.142341-49')">
<el-input v-model="form.specs.unit" :placeholder="$t('product.product-things-model.142341-50')" style="width: 385px" />
</el-form-item>
<el-form-item label="步长">
<el-input-number v-model="form.specs.step" placeholder="请输入步长例如1" type="number" style="width: 386px"
<el-form-item :label="$t('product.product-things-model.142341-51')">
<el-input-number v-model="form.specs.step" :placeholder="$t('product.product-things-model.142341-52')" type="number" style="width: 386px"
controls-position="right" />
</el-form-item>
<el-form-item label="计算公式" prop="formula">
<el-form-item :label="$t('product.product-things-model.142341-19')" prop="formula">
<template slot="label">
<span>计算公式</span>
<span>{{ $t('product.product-things-model.142341-19') }}</span>
<el-tooltip style="cursor: pointer" effect="light" placement="top">
<div slot="content">
设备上行数据经计算公式计算后显示
{{ $t('product.product-things-model.142341-53') }}
<br />
公式中的%s为占位符是固定字段
{{ $t('product.product-things-model.142341-54') }}
<br />
{{ $t('product.product-things-model.142341-55') }}
<br />
%s+10
{{ $t('product.product-things-model.142341-56') }}
<br />
%s-10
{{ $t('product.product-things-model.142341-57') }}
<br />
%s*10
{{ $t('product.product-things-model.142341-58') }}
<br />
%s/10
{{ $t('product.product-things-model.142341-59') }}
<br />
余数%s%10
{{ $t('product.product-things-model.142341-60') }}
<br />
</div>
<i class="el-icon-question" />
@@ -179,132 +179,132 @@
</div>
<div v-if="form.datatype == 'bool'">
<el-form-item label="布尔值" prop="">
<el-form-item :label="$t('product.product-things-model.142341-63')" prop="">
<el-row style="margin-bottom: 10px">
<el-col :span="9">
<el-input v-model="form.specs.falseText" placeholder="例如:关闭" />
<el-input v-model="form.specs.falseText" :placeholder="$t('product.product-things-model.142341-64')" />
</el-col>
<el-col :span="10" :offset="1">0 值对应文本</el-col>
<el-col :span="10" :offset="1">{{ $t('product.product-things-model.142341-65') }}</el-col>
</el-row>
<el-row>
<el-col :span="9">
<el-input v-model="form.specs.trueText" placeholder="例如:打开" />
<el-input v-model="form.specs.trueText" :placeholder="$t('product.product-things-model.142341-66')" />
</el-col>
<el-col :span="10" :offset="1">1 值对应文本</el-col>
<el-col :span="10" :offset="1">{{ $t('product.product-things-model.142341-67') }}</el-col>
</el-row>
</el-form-item>
</div>
<div v-if="form.datatype == 'enum'">
<el-form-item label="展示方式">
<el-select v-model="form.specs.showWay" placeholder="请选择展示方式" style="width: 175px">
<el-option key="select" label="下拉框" value="select"></el-option>
<el-option key="button" label="按钮" value="button"></el-option>
<el-form-item :label="$t('product.product-things-model.142341-68')">
<el-select v-model="form.specs.showWay" :placeholder="$t('product.product-things-model.142341-69')" style="width: 175px">
<el-option key="select" :label="$t('product.product-things-model.142341-70')" value="select"></el-option>
<el-option key="button" :label="$t('product.product-things-model.142341-71')" value="button"></el-option>
</el-select>
</el-form-item>
<el-form-item label="枚举项" prop="">
<el-form-item :label="$t('product.product-things-model.142341-72')" prop="">
<el-row v-for="(item, index) in form.specs.enumList" :key="'enum' + index" style="margin-bottom: 10px">
<el-col :span="9">
<el-input v-model="item.value" placeholder="参数值例如0" />
<el-input v-model="item.value" :placeholder="$t('product.product-things-model.142341-73')" />
</el-col>
<el-col :span="11" :offset="1">
<el-input v-model="item.text" placeholder="参数描述,例如:中速档位" />
<el-input v-model="item.text" :placeholder="$t('product.product-things-model.142341-74')" />
</el-col>
<el-col :span="2" :offset="1" v-if="index != 0"><a style="color: #f56c6c"
@click="removeEnumItem(index)">删除</a></el-col>
@click="removeEnumItem(index)">{{ $t('del') }}</a></el-col>
</el-row>
<div>
+
<a style="color: #409eff" @click="addEnumItem()">添加枚举项</a>
<a style="color: #409eff" @click="addEnumItem()">{{ $t('product.product-things-model.142341-75') }}</a>
</div>
</el-form-item>
</div>
<div v-if="form.datatype == 'string'">
<el-form-item label="最大长度" prop="">
<el-form-item :label="$t('product.product-things-model.142341-76')" prop="">
<el-row>
<el-col :span="9">
<el-input v-model="form.specs.maxLength" placeholder="例如1024" type="number" />
<el-input v-model="form.specs.maxLength" :placeholder="$t('product.product-things-model.142341-77')" type="number" />
</el-col>
<el-col :span="14" :offset="1">字符串的最大长度</el-col>
<el-col :span="14" :offset="1">{{ $t('product.product-things-model.142341-78') }}</el-col>
</el-row>
</el-form-item>
</div>
<div v-if="form.datatype == 'array'">
<el-form-item label="元素个数" prop="">
<el-form-item :label="$t('product.product-things-model.142341-79')" prop="">
<el-row>
<el-col :span="9">
<el-input v-model="form.specs.arrayCount" placeholder="例如5" type="number" />
<el-input v-model="form.specs.arrayCount" :placeholder="$t('product.product-things-model.142341-80')" type="number" />
</el-col>
</el-row>
</el-form-item>
<el-form-item label="数组类型" prop="">
<el-form-item :label="$t('product.product-things-model.142341-81')" prop="">
<el-radio-group v-model="form.specs.arrayType">
<el-radio label="integer">整数</el-radio>
<el-radio label="decimal">小数</el-radio>
<el-radio label="string">字符串</el-radio>
<el-radio label="object">对象</el-radio>
<el-radio label="integer">{{ $t('product.product-things-model.142341-38') }}</el-radio>
<el-radio label="decimal">{{ $t('product.product-things-model.142341-39') }}</el-radio>
<el-radio label="string">{{ $t('product.product-things-model.142341-42') }}</el-radio>
<el-radio label="object">{{ $t('product.product-things-model.142341-44') }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="对象参数" v-if="form.specs.arrayType == 'object'">
<el-form-item :label="$t('product.product-things-model.142341-82')" v-if="form.specs.arrayType == 'object'">
<div style="background-color: #f8f8f8; border-radius: 5px">
<el-row style="padding: 0 10px 5px" v-for="(item, index) in form.specs.params" :key="index">
<div style="margin-top: 5px" v-if="index == 0"></div>
<el-col :span="18">
<el-input readonly v-model="item.name" size="mini" placeholder="请选择设备" style="margin-top: 3px">
<el-input readonly v-model="item.name" size="mini" :placeholder="$t('product.product-things-model.142341-83')" style="margin-top: 3px">
<template slot="prepend">
<el-tag size="mini" effect="dark" style="margin-left: -21px; height: 26px; line-height: 26px">{{
item.order }}</el-tag>
{{ form.identifier + '_' + item.id }}
</template>
<el-button slot="append" @click="editParameter(item, index)" size="small">编辑</el-button>
<el-button slot="append" @click="editParameter(item, index)" size="small">{{ $t('product.product-things-model.142341-84') }}</el-button>
</el-input>
</el-col>
<el-col :span="2" :offset="2">
<el-button size="small" plain type="danger" style="padding: 5px" icon="el-icon-delete"
@click="removeParameter(index)">删除</el-button>
@click="removeParameter(index)">{{ $t('del') }}</el-button>
</el-col>
</el-row>
</div>
<div>
+
<a style="color: #409eff" @click="addParameter()">添加参数</a>
<a style="color: #409eff" @click="addParameter()">{{ $t('product.product-things-model.142341-85') }}</a>
</div>
</el-form-item>
</div>
<div v-if="form.datatype == 'object'">
<el-form-item label="对象参数" prop="">
<el-form-item :label="$t('product.product-things-model.142341-87')" prop="">
<div style="background-color: #f8f8f8; border-radius: 5px">
<el-row style="padding: 0 10px 5px" v-for="(item, index) in form.specs.params" :key="index">
<div style="margin-top: 5px" v-if="index == 0"></div>
<el-col :span="18">
<el-input readonly v-model="item.name" size="mini" placeholder="请选择设备" style="margin-top: 3px">
<el-input readonly v-model="item.name" size="mini" :placeholder="$t('product.product-things-model.142341-88')" style="margin-top: 3px">
<template slot="prepend">
<el-tag size="mini" effect="dark" style="margin-left: -21px; height: 26px; line-height: 26px">{{
item.order }}</el-tag>
{{ form.identifier + '_' + item.id }}
</template>
<el-button slot="append" @click="editParameter(item, index)" size="small">编辑</el-button>
<el-button slot="append" @click="editParameter(item, index)" size="small">{{ $t('product.product-things-model.142341-84') }}</el-button>
</el-input>
</el-col>
<el-col :span="2" :offset="2">
<el-button size="small" plain type="danger" style="padding: 5px" icon="el-icon-delete"
@click="removeParameter(index)">删除</el-button>
@click="removeParameter(index)">{{ $t('del') }}</el-button>
</el-col>
</el-row>
</div>
<div>
+
<a style="color: #409eff" @click="addParameter()">添加参数</a>
<a style="color: #409eff" @click="addParameter()">{{ $t('product.product-things-model.142341-85') }}</a>
</div>
</el-form-item>
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm">{{ $t('confirm') }}</el-button>
<el-button @click="cancel">{{ $t('cancel') }}</el-button>
</div>
</el-dialog>
@@ -315,8 +315,8 @@
<el-dialog :title="title" :visible.sync="openSelect" width="800px" append-to-body>
<product-select-template ref="productSelectTemplate" @idsToParentEvent="getChildData($event)" />
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="importSelect"> </el-button>
<el-button @click="cancelSelect"> </el-button>
<el-button type="primary" @click="importSelect">{{ $t('import') }}</el-button>
<el-button @click="cancelSelect">{{ $t('cancel') }}</el-button>
</div>
</el-dialog>
@@ -324,14 +324,15 @@
<el-dialog :title="title" :visible.sync="openThingsModel" width="600px" append-to-body>
<div style="border: 1px solid #ccc; margin-top: -15px; height: 600px; overflow: scroll">
<json-viewer :value="thingsModel" :expand-depth="10" copyable>
<template v-slot:copy>复制</template>
<template v-slot:copy>{{ $t('product.product-things-model.142341-92') }}</template>
</json-viewer>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="info" @click="handleCloseThingsModel"> </el-button>
<el-button type="info" @click="handleCloseThingsModel">{{ $t('close') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<style>
@@ -425,46 +426,46 @@ export default {
modelName: [
{
required: true,
message: '物模型名称不能为空',
message: this.$t('product.product-things-model.142341-94'),
trigger: 'blur',
},
{
min: 1,
max: 64,
message: '物模型名称不能少于1个字符和超过64字符',
message: this.$i18n.t('product.product-things-model.142341-94'),
trigger: 'blur',
},
],
identifier: [
{
required: true,
message: '标识符,产品下唯一不能为空',
message: this.$t('product.product-things-model.142341-95'),
trigger: 'blur',
},
{
min: 1,
max: 32,
message: '模型标识不能少于1个字符和超过32字符',
message: this.$i18n.t('product.product-things-model.142341-95'),
trigger: 'blur',
},
],
modelOrder: [
{
required: true,
message: '模型排序不能为空',
message: this.$t('product.product-things-model.142341-96'),
trigger: 'blur',
}, {
type: 'number',
min: -2147483648,
max: 2147483647,
message: '排序不能超过int型的范围值( -2^31——2^31-1)',
message: this.$t('product.product-things-model.142341-96'),
trigger: 'blur',
},
],
type: [
{
required: true,
message: '模型类别不能为空',
message: this.$t('product.product-things-model.142341-97'),
trigger: 'change',
},
@@ -472,7 +473,7 @@ export default {
datatype: [
{
required: true,
message: '数据类型不能为空',
message: this.$t('product.product-things-model.142341-98'),
trigger: 'change',
},
],
@@ -481,7 +482,7 @@ export default {
},
created() { },
methods: {
/** 查询产品物模型列表 */
/**查询产品物模型列表 */
getList() {
this.loading = true;
listModel(this.queryParams).then((response) => {
@@ -549,7 +550,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = '添加物模型';
this.title = this.$t('product.product-things-model.142341-99');
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -558,7 +559,7 @@ export default {
getModel(modelId).then((response) => {
let tempForm = response.data;
this.open = true;
this.title = '修改物模型';
this.title = this.$t('product.product-things-model.142341-100');
// Json转对象
tempForm.specs = JSON.parse(tempForm.specs);
if (!tempForm.specs.enumList) {
@@ -590,7 +591,7 @@ export default {
},
/**查看物模型 */
handleOpenThingsModel() {
this.title = '物模型';
this.title = this.$t('product.product-things-model.142341-101');
// 生成物模型
this.thingsModel = {
properties: [],
@@ -636,7 +637,7 @@ export default {
/** 选择物模型 */
handleSelect() {
this.openSelect = true;
this.title = '导入通用物模型';
this.title = this.$t('product.product-things-model.142341-1');
this.form.type = 1;
this.form.datatype = 'integer';
this.form.specs = {
@@ -675,7 +676,7 @@ export default {
// 验证对象或对象数组中的参数不能为空
if (this.form.datatype == 'object' || (this.form.datatype == 'array' && this.form.specs.arrayType == 'object')) {
if (!this.form.specs.params || this.form.specs.params == 0) {
this.$modal.msgError('对象的参数不能为空');
this.$modal.msgError(this.$t('product.product-things-model.142341-102'));
return;
}
}
@@ -684,7 +685,7 @@ export default {
let arr = this.form.specs.params.map((item) => item.id).sort();
for (let i = 0; i < arr.length; i++) {
if (arr[i] == arr[i + 1]) {
this.$modal.msgError('参数标识 ' + arr[i] + ' 重复');
this.$modal.msgError(this.$i18n.t('product.product-things-model.142341-105', [arr[i]]));
return;
}
}
@@ -692,7 +693,7 @@ export default {
//验证输入的取值范围最大值不能小于最小值
if (this.form.datatype == 'integer' || this.form.datatype == 'decimal') {
if (parseFloat(this.form.specs.min) > parseFloat(this.form.specs.max)) {
this.$modal.msgError('请重新输入取值范围,最大值不能比最小值小!');
this.$modal.msgError(this.$t('product.product-things-model.142341-143'));
return;
}
}
@@ -700,13 +701,13 @@ export default {
this.hasDecimalPoint();
this.hasDecimalPointMax();
if (this.isDecimal === false || this.isDecimalMax === false) {
this.$modal.msgError('取值范围必须输入小数,请重新输入!');
this.$modal.msgError(this.$t('product.product-things-model.142341-144'));
return;
}
}
//验证模型特性为图表展示时,数据类型是否为整数或者小数
if ((this.form.isChart == 1 && this.form.datatype != 'integer') && (this.form.isChart == 1 && this.form.datatype != 'decimal')) {
this.$modal.msgError('请重新选择数据类型!');
this.$modal.msgError(this.$t('product.product-things-model.142341-106'));
}
else if (this.form.modelId != null) {
// 格式化specs
@@ -720,7 +721,7 @@ export default {
tempForm.isChart = 0;
}
updateModel(tempForm).then((response) => {
this.$modal.msgSuccess('修改成功');
this.$modal.msgSuccess(this.$t('product.product-things-model.142341-107'));
this.open = false;
this.getList();
});
@@ -737,7 +738,7 @@ export default {
tempForm.isChart = 0;
}
addModel(tempForm).then((response) => {
this.$modal.msgSuccess('新增成功');
this.$modal.msgSuccess(this.$t('product.product-things-model.142341-108'));
this.open = false;
this.getList();
});
@@ -750,13 +751,13 @@ export default {
const modelIds = row.modelId;
// if (!this.queryParams.isModbus) {
this.$modal
.confirm('是否确认删除物模型编号为"' + modelIds + '"的数据项?')
.confirm(this.$i18n.t('product.product-things-model.142341-109', [modelIds]))
.then(function () {
return delModel(modelIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
this.$modal.msgSuccess(this.$t('product.product-things-model.142341-111'));
})
.catch(() => { });
// } else {
@@ -830,8 +831,8 @@ export default {
} else if (this.form.datatype == 'string') {
data.maxLength = Number(this.form.specs.maxLength ? this.form.specs.maxLength : 1024);
} else if (this.form.datatype == 'bool') {
data.falseText = this.form.specs.falseText ? this.form.specs.falseText : '关闭';
data.trueText = this.form.specs.trueText ? this.form.specs.trueText : '打开';
data.falseText = this.form.specs.falseText ? this.form.specs.falseText : this.$t('product.product-things-model.142341-113');
data.trueText = this.form.specs.trueText ? this.form.specs.trueText : this.$t('product.product-things-model.142341-114');
} else if (this.form.datatype == 'enum') {
data.showWay = this.form.specs.showWay;
if (this.form.specs.enumList && this.form.specs.enumList[0].text != '') {
@@ -841,11 +842,11 @@ export default {
data.enumList = [
{
value: '0',
text: '低',
text: this.$t('product.product-things-model.142341-115'),
},
{
value: '1',
text: '高',
text: this.$t('product.product-things-model.142341-116'),
},
];
}
@@ -886,19 +887,19 @@ export default {
let specs = JSON.parse(json);
if (specs.type === 'integer' || specs.type === 'decimal' || specs.type === 'INT16' || specs.type === 'INT') {
return (
'<span style=\'width:50%;display:inline-block;\'>最大值:<span style="color:#F56C6C">' +
'<span style=\'width:50%;display:inline-block;\'>' + this.$t('product.product-things-model.142341-117') + '<span style="color:#F56C6C">' +
specs.max +
'</span></span>最小值:<span style="color:#F56C6C">' +
'</span></span>' + this.$t('product.product-things-model.142341-118') + '<span style="color:#F56C6C">' +
specs.min +
'</span><br /><span style=\'width:50%;display:inline-block;\'>步长:<span style="color:#F56C6C">' +
'</span><br /><span style=\'width:50%;display:inline-block;\'>' + this.$t('product.product-things-model.142341-119') + '<span style="color:#F56C6C">' +
specs.step +
'</span></span>单位:<span style="color:#F56C6C">' +
'</span></span>' + this.$t('product.product-things-model.142341-120') + '<span style="color:#F56C6C">' +
specs.unit
);
} else if (specs.type === 'string') {
return '最大长度:<span style="color:#F56C6C">' + specs.maxLength + '</span>';
return this.$t('product.product-things-model.142341-121') + '<span style="color:#F56C6C">' + specs.maxLength + '</span>';
} else if (specs.type === 'array') {
return '<span style=\'width:50%;display:inline-block;\'>数组类型:<span style="color:#F56C6C">' + specs.arrayType + '</span></span>元素个数:<span style="color:#F56C6C">' + specs.arrayCount;
return '<span style=\'width:50%;display:inline-block;\'>' + this.$t('product.product-things-model.142341-122') + '<span style="color:#F56C6C">' + specs.arrayType + '</span></span>' + this.$t('product.product-things-model.142341-123') + '<span style="color:#F56C6C">' + specs.arrayCount;
} else if (specs.type === 'enum') {
let items = '';
for (let i = 0; i < specs.enumList.length; i++) {

View File

@@ -1,43 +1,43 @@
<template>
<el-dialog title="选择产品" :visible.sync="open" width="800px">
<el-dialog :title="$t('productList.index.470902-0')" :visible.sync="open" width="800px">
<div style="margin-top: -55px">
<el-divider style="margin-top: -30px"></el-divider>
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
<el-form-item label="产品名称" prop="productName">
<el-input v-model="queryParams.productName" placeholder="请输入产品名称" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('productList.index.470902-1')" prop="productName">
<el-input v-model="queryParams.productName" :placeholder="$t('productList.index.470902-2')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('common.search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('common.reset') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" ref="singleTable" :data="productList" @row-click="rowClick" highlight-current-row size="mini">
<el-table-column label="选择" width="50" align="center">
<el-table-column :label="$t('common.select')" width="50" align="center">
<template slot-scope="scope">
<input type="radio" :checked="scope.row.isSelect" name="product" />
</template>
</el-table-column>
<el-table-column label="产品名称" align="center" prop="productName" />
<el-table-column label="分类名称" align="center" prop="categoryName" />
<el-table-column label="租户名称" align="center" prop="tenantName" />
<el-table-column label="授权码" align="center" prop="status" width="70">
<el-table-column :label="$t('productList.index.470902-1')" align="center" prop="productName" />
<el-table-column :label="$t('productList.index.470902-3')" align="center" prop="categoryName" />
<el-table-column :label="$t('productList.index.470902-4')" align="center" prop="tenantName" />
<el-table-column :label="$t('productList.index.470902-5')" align="center" prop="status" width="70">
<template slot-scope="scope">
<el-tag type="success" v-if="scope.row.isAuthorize == 1">启用</el-tag>
<el-tag type="info" v-if="scope.row.isAuthorize == 0">未启用</el-tag>
<el-tag type="success" v-if="scope.row.isAuthorize == 1">{{ $t('productList.index.470902-6') }}</el-tag>
<el-tag type="info" v-if="scope.row.isAuthorize == 0">{{ $t('productList.index.470902-7') }}</el-tag>
</template>
</el-table-column>
<el-table-column label="认证方式" align="center" prop="status">
<el-table-column :label="$t('productList.index.470902-8')" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_vertificate_method" :value="scope.row.vertificateMethod" />
</template>
</el-table-column>
<el-table-column label="联网方式" align="center" prop="networkMethod">
<el-table-column :label="$t('productList.index.470902-9')" align="center" prop="networkMethod">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_network_method" :value="scope.row.networkMethod" />
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="100">
<el-table-column :label="$t('productList.index.470902-10')" align="center" prop="createTime" width="100">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
@@ -47,8 +47,8 @@
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="confirmSelectProduct" type="primary">确定</el-button>
<el-button @click="closeDialog" type="info"> </el-button>
<el-button @click="confirmSelectProduct" type="primary">{{ $t('productList.index.470902-11') }}</el-button>
<el-button @click="closeDialog" type="info">{{ $t('productList.index.470902-12') }}</el-button>
</div>
</el-dialog>
</template>

View File

@@ -3,56 +3,56 @@
<el-card v-show="showSearch" style="margin-bottom: 6px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
label-width="68px" style="margin-bottom: -20px">
<el-form-item label="脚本标识" prop="scriptId">
<el-input v-model="queryParams.scriptId" placeholder="请输入脚本名" clearable
<el-form-item :label="$t('script.349087-0')" prop="scriptId">
<el-input v-model="queryParams.scriptId" :placeholder="$t('script.349087-1')" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="脚本名" prop="scriptName">
<el-input v-model="queryParams.scriptName" placeholder="请输入脚本名" clearable
<el-form-item :label="$t('script.349087-2')" prop="scriptName">
<el-input v-model="queryParams.scriptName" :placeholder="$t('script.349087-3')" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('common.search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('common.reset') }}</el-button>
</el-form-item>
<el-form-item style="float: right">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['iot:script:add']">新增</el-button>
v-hasPermi="['iot:script:add']">{{ $t('common.add') }}</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card style="padding-bottom: 100px">
<el-table v-loading="loading" :data="scriptList" @selection-change="handleSelectionChange">
<el-table-column label="脚本名称" align="center" prop="scriptName" />
<el-table-column label="所属产品" align="center" prop="productName" />
<el-table-column label="脚本标识" align="center" prop="scriptId" width="180" />
<el-table-column label="脚本事件" align="center" prop="status">
<el-table-column :label="$t('script.index.470901-0')" align="center" prop="scriptName" />
<el-table-column :label="$t('script.index.470901-2')" align="center" prop="productName" />
<el-table-column :label="$t('script.349087-0')" align="center" prop="scriptId" width="180" />
<el-table-column :label="$t('script.349087-6')" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.rule_script_event" :value="scope.row.scriptEvent" size="small" />
</template>
</el-table-column>
<el-table-column label="脚本动作" align="center" prop="status">
<el-table-column :label="$t('script.index.470901-5')" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.rule_script_action" :value="scope.row.scriptAction"
size="small" />
</template>
</el-table-column>
<el-table-column label="脚本语言" align="center" prop="scriptLanguage" />
<el-table-column label="状态" align="center" prop="enable" width="120">
<el-table-column :label="$t('script.index.470901-7')" align="center" prop="scriptLanguage" />
<el-table-column :label="$t('script.index.470901-8')" align="center" prop="enable" width="120">
<template slot-scope="scope">
<el-tag v-if="scope.row.enable == 1" type="success" size="small">启动</el-tag>
<el-tag v-if="scope.row.enable == 0" type="danger" size="small">暂停</el-tag>
<el-tag v-if="scope.row.enable == 1" type="success" size="small">{{ $t('script.index.470901-11') }}</el-tag>
<el-tag v-if="scope.row.enable == 0" type="danger" size="small">{{ $t('script.index.470901-12') }}</el-tag>
</template>
</el-table-column>
<el-table-column label="执行顺序" align="center" prop="scriptOrder" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
<el-table-column :label="$t('script.index.470901-9')" align="center" prop="scriptOrder" />
<el-table-column :label="$t('common.opation')" align="center" class-name="small-padding fixed-width" width="200">
<template slot-scope="scope">
<el-button size="small" type="text" icon="el-icon-date" @click="handleLog(scope.row.scriptId)" v-hasPermi="['iot:script:query']">日志</el-button>
<el-button size="small" type="text" icon="el-icon-date" @click="handleLog(scope.row.scriptId)" v-hasPermi="['iot:script:query']">{{ $t('script.index.470901-23') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-view" @click="handleUpdate(scope.row)"
v-hasPermi="['iot:script:query']">查看</el-button>
v-hasPermi="['iot:script:query']">{{ $t('script.index.470901-24') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['iot:script:remove']">删除</el-button>
v-hasPermi="['iot:script:remove']">{{ $t('common.del') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -66,19 +66,19 @@
<el-form ref="form" :model="form" :rules="rules" label-width="90px">
<el-row :gutter="50">
<el-col :span="12">
<el-form-item label="脚本名称" prop="scriptName">
<el-input v-model="form.scriptName" placeholder="请输入脚本名" />
<el-form-item :label="$t('script.index.470901-0')" prop="scriptName">
<el-input v-model="form.scriptName" :placeholder="$t('script.349087-3')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="执行顺序" prop="scriptOrder">
<el-input-number v-model="form.scriptOrder" placeholder="请输入脚本名" type="number"
<el-form-item :label="$t('script.index.470901-9')" prop="scriptOrder">
<el-input-number v-model="form.scriptOrder" :placeholder="$t('script.index.470901-10')" type="number"
controls-position="right" style="width: 100%" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="脚本事件" prop="scriptEvent">
<el-select v-model="form.scriptEvent" placeholder="请选择脚本事件" style="width: 100%">
<el-form-item :label="$t('script.349087-6')" prop="scriptEvent">
<el-select v-model="form.scriptEvent" :placeholder="$t('script.349087-11')" style="width: 100%">
<el-option v-for="dict in dict.type.rule_script_event" :key="dict.label"
:label="dict.label" :value="Number(dict.value)"
:disabled="dict.value !== '1' && dict.value !== '2'"></el-option>
@@ -87,8 +87,8 @@
</el-col>
<el-col :span="12">
<el-form-item label="脚本动作" prop="scriptAction">
<el-select v-model="form.scriptAction" placeholder="请选择脚本动作" style="width: 100%">
<el-form-item :label="$t('script.index.470901-5')" prop="scriptAction">
<el-select v-model="form.scriptAction" :placeholder="$t('script.index.470901-6')" style="width: 100%">
<el-option v-for="dict in dict.type.rule_script_action" :key="dict.label"
:label="dict.label" :value="Number(dict.value)"
:disabled="dict.value !== '1'"></el-option>
@@ -96,16 +96,16 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="脚本状态" prop="enable">
<el-form-item :label="$t('script.349087-13')" prop="enable">
<el-switch v-model="form.enable" :active-value="1" :inactive-value="0" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属产品" prop="productName">
<el-input readonly v-model="form.productName" size="small" placeholder="请选择产品"
<el-form-item :label="$t('script.index.470901-2')" prop="productName">
<el-input readonly v-model="form.productName" size="small" :placeholder="$t('script.index.470901-3')"
style="margin-top: 3px">
<el-button slot="append" @click="handleSelectProduct()"
size="small">选择产品</el-button>
size="small">{{ $t('script.index.470901-4') }}</el-button>
</el-input>
</el-form-item>
</el-col>
@@ -127,17 +127,15 @@
<el-link style="line-height: 40px; padding-left: 20px" icon="el-icon-question"
:underline="false" type="primary" href="https://fastbee.cn/doc/pages/rule_engine/"
target="_blank">
脚本使用Groovy引擎查看教程>>>
{{ $t('script.index.470901-17') }}
</el-link>
</span>
<el-button type="success" @click="handleValidate"> </el-button>
<el-button type="success" @click="handleValidate">{{ $t('script.index.470901-18') }}</el-button>
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:script:edit']"
v-show="form.scriptId" :disabled="!isValidate">
</el-button>
v-show="form.scriptId" :disabled="!isValidate">{{ $t('script.index.470901-19') }}</el-button>
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:script:add']"
v-show="!form.scriptId" :disabled="!isValidate">
</el-button>
<el-button @click="cancel"> </el-button>
v-show="!form.scriptId" :disabled="!isValidate">{{ $t('common.add') }}</el-button>
<el-button @click="cancel">{{ $t('script.index.470901-20') }}</el-button>
</div>
</el-dialog>
</el-card>
@@ -146,7 +144,7 @@
<div
ref="logContainer"
v-loading="logLoading"
element-loading-text="加载中"
:element-loading-text="$t('script.index.470901-13')"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
style="border: 1px solid #ccc; border-radius: 4px; height: 450px; background-color: #181818; color: #fff; padding: 10px; line-height: 20px; overflow: auto"
@@ -157,7 +155,7 @@
>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelLog">关闭</el-button>
<el-button @click="cancelLog">{{ $t('script.index.470901-21') }}</el-button>
</div>
</el-dialog>
@@ -182,7 +180,7 @@ export default {
var checkScriptId = (rule, value, callback) => {
const regex = /^[a-zA-Z]+[0-9]*[a-zA-Z]*$/; // 定义只包含字母和数字,且字母开头的正则表达式
if (!regex.test(value)) {
return callback(new Error('脚本标识只能输入字母和数字,且字母开头'));
return callback(new Error(this.$i18n.t('script.index.470901-22')));
} else {
callback();
}
@@ -232,15 +230,15 @@ export default {
form: {},
// 表单校验
rules: {
scriptId: [{ required: true, message: '脚本标识不能为空', trigger: 'blur' }],
productName: [{ required: true, message: '所属产品不能为空', trigger: 'blur' }],
scriptName: [{ required: true, message: '脚本名不能为空', trigger: 'blur' }],
scriptType: [{ required: true, message: '脚本类型不能为空', trigger: 'change' }],
scriptLanguage: [{ required: true, message: '脚本语言不能为空', trigger: 'change' }],
scriptId: [{ required: true, message: this.$i18n.t('script.index.470901-29'), trigger: 'blur' }],
productName: [{ required: true, message: this.$i18n.t('script.index.470901-30'), trigger: 'blur' }],
scriptName: [{ required: true, message: this.$i18n.t('script.index.470901-31'), trigger: 'blur' }],
scriptType: [{ required: true, message: '', trigger: 'change' }],
scriptLanguage: [{ required: true, message: '', trigger: 'change' }],
scriptEvent: [{ required: true, message: '', trigger: 'change' }],
scriptAction: [{ required: true, message: '', trigger: 'change' }],
scriptOrder: [{ required: true, message: '', trigger: 'change' }],
enable: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
enable: [{ required: true, message: '', trigger: 'blur' }],
},
};
},
@@ -329,7 +327,7 @@ msgContext.setPayload(NewPayload);`,
handleAdd() {
this.reset();
this.open = true;
this.title = '编辑规则脚本';
this.title = this.$i18n.t('script.index.470901-14');
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -338,7 +336,7 @@ msgContext.setPayload(NewPayload);`,
getScript(scriptId).then((response) => {
this.form = response.data;
this.open = true;
this.title = '修改规则引擎脚本';
this.title = this.$i18n.t('script.index.470901-15');
});
},
/** 日志按钮操作 */
@@ -348,7 +346,7 @@ msgContext.setPayload(NewPayload);`,
this.logs = response.msg;
this.form.scriptId = scriptId;
this.openLog = true;
this.title = "脚本日志";
this.title = this.$i18n.t('script.index.470901-16');
this.logLoading = false;
// 滑动到底部
this.$nextTick(function () {
@@ -382,13 +380,13 @@ msgContext.setPayload(NewPayload);`,
if (valid) {
if (this.form.scriptId != null) {
updateScript(this.form).then((response) => {
this.$modal.msgSuccess('修改成功');
this.$modal.msgSuccess(this.$i18n.t('script.index.470901-26'));
this.open = false;
this.getList();
});
} else {
addScript(this.form).then((response) => {
this.$modal.msgSuccess('新增成功');
this.$modal.msgSuccess(this.$i18n.t('script.index.470901-25'));
this.open = false;
this.getList();
});
@@ -400,13 +398,13 @@ msgContext.setPayload(NewPayload);`,
handleDelete(row) {
const scriptIds = row.scriptId || this.scriptIds;
this.$modal
.confirm('是否确认删除规则引擎脚本编号为"' + scriptIds + '"的数据项?')
.confirm(this.$i18n.t('script.index.470901-28', [scriptIds]))
.then(function () {
return delScript(scriptIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
this.$modal.msgSuccess(this.$i18n.t('script.index.470901-27'));
})
.catch(() => { });
},

View File

@@ -2,13 +2,13 @@
<div style="padding-left: 20px">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-refresh" size="mini" @click="getList">刷新</el-button>
<el-button type="warning" plain icon="el-icon-refresh" size="mini" @click="getList">{{ $t('refresh') }}</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="channelList" size="mini">
<el-table-column label="设备ID" align="center" prop="deviceSipId" />
<el-table-column label="通道ID" align="center" prop="channelSipId" />
<el-table-column label="快照" min-width="120">
<el-table-column :label="$t('sip.channel.998532-0')" align="center" prop="deviceSipId" />
<el-table-column :label="$t('sip.channel.998532-1')" align="center" prop="channelSipId" />
<el-table-column :label="$t('sip.channel.998532-2')" min-width="120">
<template v-slot:default="scope">
<el-image v-if="isVideoChannel(scope.row)" :src="getSnap(scope.row)" :preview-src-list="getBigSnap(scope.row)" :fit="'contain'" style="width: 60px">
<div slot="error" class="image-slot">
@@ -17,34 +17,34 @@
</el-image>
</template>
</el-table-column>
<el-table-column label="通道名称" align="center" prop="channelName" />
<el-table-column label="产品型号" align="center" prop="model" />
<el-table-column label="推流状态" align="center" prop="streamPush" >
<el-table-column :label="$t('sip.channel.998532-3')" align="center" prop="channelName" />
<el-table-column :label="$t('sip.channel.998532-4')" align="center" prop="model" />
<el-table-column :label="$t('sip.channel.998532-9')" align="center" prop="streamPush" >
<template slot-scope="scope">
<el-tag type="warning" v-if="scope.row.streamPush === 0"></el-tag>
<el-tag type="success" v-if="scope.row.streamPush === 1">推流中</el-tag>
<el-tag type="warning" v-if="scope.row.streamPush === 0">{{ $t('sip.channel.998532-10') }}</el-tag>
<el-tag type="success" v-if="scope.row.streamPush === 1">{{ $t('sip.channel.998532-11') }}</el-tag>
</template>
</el-table-column>
<el-table-column label="直播录像状态" align="center" prop="streamRecord" >
<el-table-column :label="$t('sip.channel.998532-12')" align="center" prop="streamRecord" >
<template slot-scope="scope">
<el-tag type="warning" v-if="scope.row.streamRecord === 0"></el-tag>
<el-tag type="success" v-if="scope.row.streamRecord === 1">录像中</el-tag>
<el-tag type="warning" v-if="scope.row.streamRecord === 0">{{ $t('sip.channel.998532-10') }}</el-tag>
<el-tag type="success" v-if="scope.row.streamRecord === 1">{{ $t('sip.channel.998532-14') }}</el-tag>
</template>
</el-table-column>
<el-table-column label="录像转存状态" align="center" prop="videoRecord" >
<el-table-column :label="$t('sip.channel.998532-15')" align="center" prop="videoRecord" >
<template slot-scope="scope">
<el-tag type="warning" v-if="scope.row.videoRecord === 0"></el-tag>
<el-tag type="success" v-if="scope.row.videoRecord === 1">转存中</el-tag>
<el-tag type="warning" v-if="scope.row.videoRecord === 0">{{ $t('sip.channel.998532-10') }}</el-tag>
<el-tag type="success" v-if="scope.row.videoRecord === 1">{{ $t('sip.channel.998532-17') }}</el-tag>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status" width="80">
<el-table-column :label="$t('sip.channel.998532-5')" align="center" prop="status" width="80">
<template slot-scope="scope">
<dict-tag :options="dict.type.sip_gen_status" :value="scope.row.status" size="mini" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width">
<el-table-column :label="$t('opation')" align="center" width="120" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="small" type="success" icon="el-icon-video-play" style="padding: 5px" :disabled="scope.row.status !== 2" @click="sendDevicePush(scope.row)">查看直播</el-button>
<el-button size="small" type="success" icon="el-icon-video-play" style="padding: 5px" :disabled="scope.row.status !== 2" @click="sendDevicePush(scope.row)">{{ $t('sip.channel.998532-6') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -172,20 +172,20 @@ export default {
getChannel(channelId).then((response) => {
this.form = response.data;
this.open = true;
this.title = '修改监控设备通道信息';
this.title = this.$t('sip.channel.998532-7');
});
},
/** 删除按钮操作 */
handleDelete(row) {
const channelIds = row.channelId || this.ids;
this.$modal
.confirm('是否确认删除监控设备通道信息编号为"' + channelIds + '"的数据项?')
.confirm(this.$t('sip.channel.998532-8', [channelIds]))
.then(function () {
return delChannel(channelIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
this.$modal.msgSuccess(this.$t('sip.channel.998532-18'));
})
.catch(() => {});
},

View File

@@ -2,24 +2,24 @@
<div style="padding: 6px">
<el-card style="margin-bottom: 6px">
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="60px" style="margin-bottom: -20px">
<el-form-item label="设备ID" prop="deviceSipId">
<el-input v-model="queryParams.deviceSipId" placeholder="请输入设备编号" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('sip.index.998533-0')" prop="deviceSipId">
<el-input v-model="queryParams.deviceSipId" :placeholder="$t('sip.index.998533-1')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="通道ID" prop="channelSipId">
<el-input v-model="queryParams.channelSipId" placeholder="请输入通道ID" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('sip.index.998533-2')" prop="channelSipId">
<el-input v-model="queryParams.channelSipId" :placeholder="$t('sip.index.998533-3')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
<el-form-item :label="$t('sip.index.998533-4')" prop="status">
<el-select v-model="queryParams.status" :placeholder="$t('sip.index.998533-5')" clearable size="small">
<el-option v-for="dict in dict.type.sip_gen_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
</el-form-item>
<el-form-item style="float: right">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['iot:video:add']" :disabled="isGeneralUser">批量生成</el-button>
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple || isGeneralUser" @click="handleDelete" v-hasPermi="['iot:video:remove']">批量删除</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['iot:video:add']" :disabled="isGeneralUser">{{ $t('sip.index.998533-6') }}</el-button>
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple || isGeneralUser" @click="handleDelete" v-hasPermi="['iot:video:remove']">{{ $t('del') }}</el-button>
</el-form-item>
</el-form>
</el-card>
@@ -27,30 +27,30 @@
<el-card style="margin-bottom: 5px">
<el-table v-loading="loading" :data="sipidList" @selection-change="handleSelectionChange" @cell-dblclick="celldblclick" size="">
<el-table-column type="selection" :selectable="selectable" width="55" align="center" />
<el-table-column label="设备编号" align="center" prop="deviceSipId">
<el-table-column :label="$t('sip.index.998533-0')" align="center" prop="deviceSipId">
<template slot-scope="scope">
<el-link :underline="false" type="primary" @click="handleViewDevice(scope.row.deviceSipId)">{{ scope.row.deviceSipId }}</el-link>
</template>
</el-table-column>
<el-table-column label="通道ID" align="center" prop="channelSipId" />
<el-table-column label="状态" align="center" prop="status" width="80">
<el-table-column :label="$t('sip.index.998533-2')" align="center" prop="channelSipId" />
<el-table-column :label="$t('sip.index.998533-4')" align="center" prop="status" width="80">
<template slot-scope="scope">
<dict-tag :options="dict.type.sip_gen_status" :value="scope.row.status" size="mini" />
</template>
</el-table-column>
<el-table-column label="所属产品" align="center" prop="productName" />
<el-table-column label="设备类型" align="center" prop="deviceType">
<el-table-column :label="$t('sip.index.998533-8')" align="center" prop="productName" />
<el-table-column :label="$t('sip.index.998533-9')" align="center" prop="deviceType">
<template slot-scope="scope">
<dict-tag :options="dict.type.video_type" :value="scope.row.deviceType" />
</template>
</el-table-column>
<el-table-column label="通道类型" align="center" prop="channelType">
<el-table-column :label="$t('sip.index.998533-15')" align="center" prop="channelType">
<template slot-scope="scope">
<dict-tag :options="dict.type.channel_type" :value="scope.row.channelType" />
</template>
</el-table-column>
<el-table-column label="行政区域" align="center" prop="citycode" />
<el-table-column label="注册时间" align="center" prop="registerTime" width="180">
<el-table-column :label="$t('sip.index.998533-10')" align="center" prop="citycode" />
<el-table-column :label="$t('sip.index.998533-11')" align="center" prop="registerTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.registerTime, '{y}-{m}-{d} {h}:{m}:{s}') }}</span>
</template>
@@ -69,31 +69,31 @@
<el-dialog :title="title" :visible.sync="open" width="450px" append-to-body :close-on-click-modal="false">
<el-form :model="createForm" :rules="createFormrules" label-width="80px" ref="createForm">
<el-form-item label="行政区划" prop="city">
<el-form-item :label="$t('sip.index.998533-13')" prop="city">
<el-cascader :options="cityOptions" v-model="createForm.city" @change="changeProvince" change-on-select style="width: 330px" :props="{ checkStrictly: false }"></el-cascader>
</el-form-item>
<el-form-item label="设备类型" prop="deviceType">
<el-select v-model="createForm.deviceType" placeholder="请选择设备类型" style="width: 330px">
<el-form-item :label="$t('sip.index.998533-9')" prop="deviceType">
<el-select v-model="createForm.deviceType" :placeholder="$t('sip.index.998533-14')" style="width: 330px">
<el-option v-for="dict in dict.type.video_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="通道类型" prop="channelType">
<el-select v-model="createForm.channelType" placeholder="请选择设备类型" style="width: 330px">
<el-form-item :label="$t('sip.index.998533-15')" prop="channelType">
<el-select v-model="createForm.channelType" :placeholder="$t('sip.index.998533-16')" style="width: 330px">
<el-option v-for="dict in dict.type.channel_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="所属产品" prop="productName">
<el-input readonly v-model="createForm.productName" placeholder="请选择产品">
<el-button slot="append" @click="selectProduct()">选择</el-button>
<el-form-item :label="$t('sip.index.998533-8')" prop="productName">
<el-input readonly v-model="createForm.productName" :placeholder="$t('sip.index.998533-17')">
<el-button slot="append" @click="selectProduct()">{{ $t('sip.index.998533-18') }}</el-button>
</el-input>
</el-form-item>
<el-form-item label="通道数量" prop="createNum">
<el-input-number controls-position="right" v-model="createForm.createNum" :min="1" :max="10" placeholder="请输入生成通道数量" type="number" style="width: 330px" />
<el-form-item :label="$t('sip.index.998533-20')" prop="createNum">
<el-input-number controls-position="right" v-model="createForm.createNum" :min="1" :max="10" :placeholder="$t('sip.index.998533-19')" type="number" style="width: 330px" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm">{{ $t('sip.index.998533-21') }}</el-button>
<el-button @click="cancel">{{ $t('cancel') }}</el-button>
</div>
</el-dialog>
@@ -185,11 +185,11 @@ export default {
// 表单校验
//createForm表单校验
createFormrules: {
city: [{ required: true, message: '行政区划不能为空', trigger: 'change' }],
deviceType: [{ required: true, message: '设备类型不饿能为空', trigger: 'change' }],
channelType: [{ required: true, message: '通道类型不能为空', trigger: 'change' }],
productName: [{ required: true, message: '产品类型不能为空', trigger: 'blur' }],
createNum: [{ required: true, message: '请输入生成通道数量', trigger: 'change' }],
city: [{ required: true, message: this.$t('sip.index.998533-44'), trigger: 'change' }],
deviceType: [{ required: true, message: this.$t('sip.index.998533-44'), trigger: 'change' }],
channelType: [{ required: true, message: this.$t('sip.index.998533-44'), trigger: 'change' }],
productName: [{ required: true, message: this.$t('sip.index.998533-43'), trigger: 'blur' }],
createNum: [{ required: true, message: this.$t('sip.index.998533-19'), trigger: 'change' }],
},
rules: {
protocol: [
@@ -377,7 +377,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = '生成设备通道';
this.title = this.$t('sip.index.998533-38');
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -387,17 +387,16 @@ export default {
getChannel(id).then((response) => {
this.createForm = response.data;
this.open = true;
this.title = '修改产品分类';
this.title = this.$t('sip.index.998533-39');
});
},
/** 提交按钮 */
submitForm() {
this.$refs['createForm'].validate((valid) => {
if (valid) {
this.createForm.deviceSipId = this.createForm.city[2] + '0000' + this.createForm.deviceType + '0';
this.createForm.channelSipId = this.createForm.city[2] + '0000' + this.createForm.channelType + '0';
addChannel(this.createForm.createNum, this.createForm).then((response) => {
this.$modal.msgSuccess('新增成功');
this.$modal.msgSuccess(this.$t('addSuccess'));
this.open = false;
this.getList();
});
@@ -408,13 +407,13 @@ export default {
handleDelete(row) {
const sipIds = row.id || this.ids;
this.$modal
.confirm('是否确认删除ID为"' + sipIds + '"的数据项?')
.confirm(this.$t('sip.index.998533-45', [sipIds]))
.then(function () {
return delChannel(sipIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
this.$modal.msgSuccess(this.$t('delSuccess'));
})
.catch(() => {});
},
@@ -438,8 +437,8 @@ export default {
},
onCopy() {
this.$notify({
title: '成功',
message: '复制成功!',
title: this.$t('success'),
message: this.$t('sip.index.998533-46'),
type: 'success',
offset: 50,
duration: 2000,
@@ -447,8 +446,8 @@ export default {
},
onError() {
this.$notify({
title: '失败',
message: '复制失败!',
title: this.$t('fail'),
message: this.$t('sip.index.998533-47'),
type: 'error',
offset: 50,
duration: 2000,

View File

@@ -1,41 +1,36 @@
<template>
<div id="mediaServerEdit" v-loading="isLoging">
<el-dialog title="流媒体服务器节点" :width="dialogWidth" top="2rem" :close-on-click-modal="false" :visible.sync="showDialog" :destroy-on-close="true" @close="close()">
<el-dialog :title="$t('sip.mediaServerEdit.998534-0')" :width="dialogWidth" top="2rem" :close-on-click-modal="false" :visible.sync="showDialog" :destroy-on-close="true" @close="close()">
<div id="formStep" style="margin-top: 1rem; margin-right: 20px">
<el-form v-if="currentStep == 1" ref="mediaServerForm" :rules="rules" :model="mediaServerForm" label-width="280px" style="width: 70%">
<!-- <el-form-item label="所属租户" prop="productName">-->
<!-- <el-input readonly v-model="mediaServerForm.tenantName" placeholder="请选择所属租户">-->
<!-- <el-button slot="append" @click="selectUser()">选择</el-button>-->
<!-- </el-input>-->
<!-- </el-form-item>-->
<el-form-item label="服务器IP" prop="ip">
<el-input v-model="mediaServerForm.ip" placeholder="媒体服务IP" clearable></el-input>
<el-form-item :label="$t('sip.mediaServerEdit.998534-1')" prop="ip">
<el-input v-model="mediaServerForm.ip" :placeholder="$t('sip.mediaServerEdit.998534-2')" clearable></el-input>
</el-form-item>
<el-form-item label="Http端口" prop="portHttp">
<el-input v-model="mediaServerForm.portHttp" placeholder="媒体服务HTTP端口" clearable></el-input>
<el-form-item :label="$t('sip.mediaServerEdit.998534-3')" prop="portHttp">
<el-input v-model="mediaServerForm.portHttp" :placeholder="$t('sip.mediaServerEdit.998534-4')" clearable></el-input>
</el-form-item>
<el-form-item label="服务密钥" prop="secret">
<el-input v-model="mediaServerForm.secret" placeholder="媒体服务SECRET" clearable></el-input>
<el-form-item :label="$t('sip.mediaServerEdit.998534-5')" prop="secret">
<el-input v-model="mediaServerForm.secret" :placeholder="$t('sip.mediaServerEdit.998534-6')" clearable></el-input>
</el-form-item>
<el-form-item>
<div style="float: right; font-size: 28px">
<el-button @click="close">取消</el-button>
<el-button type="success" @click="checkServer" :loading="btnLoading">测试</el-button>
<el-button type="primary" v-if="currentStep === 1 && serverCheck === 1" @click="next">下一步</el-button>
<el-button @click="close">{{ $t('cancel') }}</el-button>
<el-button type="success" @click="checkServer" :loading="btnLoading">{{ $t('test') }}</el-button>
<el-button type="primary" v-if="currentStep === 1 && serverCheck === 1" @click="next">{{ $t('next') }}</el-button>
</div>
</el-form-item>
</el-form>
<el-row :gutter="24">
<el-col :span="12">
<el-form v-if="currentStep === 2 || currentStep === 3" ref="mediaServerForm1" :rules="rules" :model="mediaServerForm" label-width="140px" :disabled="!editFlag">
<el-form-item label="配置名称" prop="serverId">
<el-input v-model="mediaServerForm.serverId" placeholder="配置名称" clearable></el-input>
<el-form-item :label="$t('sip.mediaServerEdit.998534-7')" prop="serverId">
<el-input v-model="mediaServerForm.serverId" :placeholder="$t('sip.mediaServerEdit.998534-8')" clearable></el-input>
</el-form-item>
<el-form-item label="服务器IP" prop="ip">
<el-form-item :label="$t('sip.mediaServerEdit.998534-9')" prop="ip">
<el-input v-if="currentStep === 2" v-model="mediaServerForm.ip" disabled></el-input>
<el-input v-if="currentStep === 3" v-model="mediaServerForm.ip"></el-input>
</el-form-item>
<el-form-item label="播放协议" prop="protocol">
<el-form-item :label="$t('sip.mediaServerEdit.998534-10')" prop="protocol">
<el-select v-model="mediaServerForm.protocol" style="width: 100%">
<el-option key="http" label="http" value="http"></el-option>
<el-option key="https" label="https" value="https"></el-option>
@@ -44,44 +39,44 @@
<el-form-item label="HookUrl" prop="hookurl">
<el-input v-model="mediaServerForm.hookurl" placeholder="HookUrl" clearable></el-input>
</el-form-item>
<el-form-item label="Http端口" prop="portHttp">
<el-form-item :label="$t('sip.mediaServerEdit.998534-11')" prop="portHttp">
<el-input v-if="currentStep === 2" v-model="mediaServerForm.portHttp" disabled></el-input>
<el-input v-if="currentStep === 3" v-model="mediaServerForm.portHttp"></el-input>
</el-form-item>
<el-form-item label="Https端口" prop="portHttps">
<el-input v-model="mediaServerForm.portHttps" placeholder="Https端口" clearable></el-input>
<el-form-item :label="$t('sip.mediaServerEdit.998534-12')" prop="portHttps">
<el-input v-model="mediaServerForm.portHttps" :placeholder="$t('sip.mediaServerEdit.998534-13')" clearable></el-input>
</el-form-item>
<el-form-item label="Rtsp端口" prop="portRtsp">
<el-input v-model="mediaServerForm.portRtsp" placeholder="Rtsp端口" clearable></el-input>
<el-form-item :label="$t('sip.mediaServerEdit.998534-14')" prop="portRtsp">
<el-input v-model="mediaServerForm.portRtsp" :placeholder="$t('sip.mediaServerEdit.998534-15')" clearable></el-input>
</el-form-item>
</el-form>
</el-col>
<el-col :span="12">
<el-form v-if="currentStep === 2 || currentStep === 3" ref="mediaServerForm2" :rules="rules" :model="mediaServerForm" label-width="180px" :disabled="!editFlag">
<el-form-item label="流媒体密钥" prop="secret">
<el-form-item :label="$t('sip.mediaServerEdit.998534-16')" prop="secret">
<el-input v-if="currentStep === 2" v-model="mediaServerForm.secret" disabled></el-input>
<el-input v-if="currentStep === 3" v-model="mediaServerForm.secret"></el-input>
</el-form-item>
<el-form-item label="服务器域名" prop="domain">
<el-input v-model="mediaServerForm.domain" placeholder="服务器域名" clearable></el-input>
<el-form-item :label="$t('sip.mediaServerEdit.998534-17')" prop="domain">
<el-input v-model="mediaServerForm.domain" :placeholder="$t('sip.mediaServerEdit.998534-18')" clearable></el-input>
</el-form-item>
<el-form-item label="自动配置">
<el-form-item :label="$t('sip.mediaServerEdit.998534-19')">
<el-switch v-model="mediaServerForm.autoConfig"></el-switch>
</el-form-item>
<el-form-item label="收流模式">
<el-switch active-text="多端口" inactive-text="单端口" @change="portRangeChange" v-model="mediaServerForm.rtpEnable"></el-switch>
<el-form-item :label="$t('sip.mediaServerEdit.998534-20')">
<el-switch :active-text="$t('sip.mediaServerEdit.998534-21')" :inactive-text="$t('sip.mediaServerEdit.998534-22')" @change="portRangeChange" v-model="mediaServerForm.rtpEnable"></el-switch>
</el-form-item>
<el-form-item v-if="!mediaServerForm.rtpEnable" label="收流端口" prop="rtpProxyPort">
<el-form-item v-if="!mediaServerForm.rtpEnable" :label="$t('sip.mediaServerEdit.998534-23')" prop="rtpProxyPort">
<el-input v-model.number="mediaServerForm.rtpProxyPort" clearable></el-input>
</el-form-item>
<el-form-item v-if="mediaServerForm.rtpEnable" label="收流端口">
<el-input v-model="rtpPortRange1" placeholder="起始" @change="portRangeChange" clearable style="width: 100px" prop="rtpPortRange1"></el-input>
<el-input v-model="rtpPortRange2" placeholder="终止" @change="portRangeChange" clearable style="width: 100px" prop="rtpPortRange2" ></el-input>
<el-form-item v-if="mediaServerForm.rtpEnable" :label="$t('sip.mediaServerEdit.998534-23')">
<el-input v-model="rtpPortRange1" :placeholder="$t('sip.mediaServerEdit.998534-24')" @change="portRangeChange" clearable style="width: 100px" prop="rtpPortRange1"></el-input>
<el-input v-model="rtpPortRange2" :placeholder="$t('sip.mediaServerEdit.998534-25')" @change="portRangeChange" clearable style="width: 100px" prop="rtpPortRange2" ></el-input>
</el-form-item>
<el-form-item label="Rtmp端口" prop="portRtmp">
<el-input v-model="mediaServerForm.portRtmp" placeholder="Rtmp端口" clearable></el-input>
<el-form-item :label="$t('sip.mediaServerEdit.998534-26')" prop="portRtmp">
<el-input v-model="mediaServerForm.portRtmp" :placeholder="$t('sip.mediaServerEdit.998534-27')" clearable></el-input>
</el-form-item>
<el-form-item label="录像管理端口" prop="recordPort">
<el-form-item :label="$t('sip.mediaServerEdit.998534-28')" prop="recordPort">
<el-input v-model.number="mediaServerForm.recordPort" :disabled="!editFlag">
<el-button v-if="mediaServerForm.recordPort > 0" class="el-icon-check" slot="append" type="primary" @click="checkRecordServer"></el-button>
</el-input>
@@ -91,8 +86,8 @@
</el-form-item>
<el-form-item>
<div style="float: right">
<el-button type="primary" @click="onSubmit" v-if="editFlag">提交</el-button>
<el-button @click="close" v-if="editFlag">关闭</el-button>
<el-button type="primary" @click="onSubmit" v-if="editFlag">{{ $t('submit') }}</el-button>
<el-button @click="close" v-if="editFlag">{{ $t('close') }}</el-button>
</div>
</el-form-item>
</el-form>
@@ -177,16 +172,16 @@ export default {
rtpPortRange1: 30000,
rtpPortRange2: 30100,
rules: {
ip: [{ required: true, validator: isValidIp, message: '请输入有效的IP地址', trigger: 'blur' }],
portHttp: [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
portHttps: [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
recordPort: [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
portRtmp: [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
portRtsp: [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
rtpPortRange1: [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
rtpPortRange2: [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
rtpProxyPort: [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
secret: [{ required: true, message: '请输入secret', trigger: 'blur' }],
ip: [{ required: true, validator: isValidIp, message: this.$t('sip.mediaServerEdit.998534-24'), trigger: 'blur' }],
portHttp: [{ required: true, validator: isValidPort, message: this.$t('sip.mediaServerEdit.998534-25'), trigger: 'blur' }],
portHttps: [{ required: true, validator: isValidPort, message: this.$t('sip.mediaServerEdit.998534-25'), trigger: 'blur' }],
recordPort: [{ required: true, validator: isValidPort, message: this.$t('sip.mediaServerEdit.998534-25'), trigger: 'blur' }],
portRtmp: [{ required: true, validator: isValidPort, message: this.$t('sip.mediaServerEdit.998534-25'), trigger: 'blur' }],
portRtsp: [{ required: true, validator: isValidPort, message: this.$t('sip.mediaServerEdit.998534-25'), trigger: 'blur' }],
rtpPortRange1: [{ required: true, validator: isValidPort, message: this.$t('sip.mediaServerEdit.998534-25'), trigger: 'blur' }],
rtpPortRange2: [{ required: true, validator: isValidPort, message: this.$t('sip.mediaServerEdit.998534-25'), trigger: 'blur' }],
rtpProxyPort: [{ required: true, validator: isValidPort, message: this.$t('sip.mediaServerEdit.998534-25'), trigger: 'blur' }],
secret: [{ required: true, message: this.$t('sip.mediaServerEdit.998534-31'), trigger: 'blur' }],
},
};
},
@@ -262,10 +257,10 @@ export default {
this.rtpPortRange1 = 30000;
this.rtpPortRange2 = 30100;
this.serverCheck = 1;
this.$modal.alertSuccess('配置地址连接成功');
this.$modal.alertSuccess(this.$t('sip.mediaServerEdit.998534-26'));
} else {
this.serverCheck = -1;
this.$modal.alertError('配置地址无法连接');
this.$modal.alertError(this.$t('sip.mediaServerEdit.998534-27'));
}
})
.catch((error) => {
@@ -291,7 +286,7 @@ export default {
that.recordServerCheck = -1;
that.$message({
showClose: true,
message: '端口号应该在-65535之间',
message: this.$t('sip.mediaServerEdit.998534-28'),
type: 'error',
});
return;
@@ -303,13 +298,13 @@ export default {
this.mediaServerForm.autoConfig = this.mediaServerForm.autoConfig ? 1 : 0;
if (this.mediaServerForm.id != null) {
updatemediaServer(this.mediaServerForm).then((response) => {
this.$modal.msgSuccess('修改成功');
this.$modal.msgSuccess(this.$t('updateSuccess'));
this.showDialog = false;
});
} else {
this.portRangeChange();
addmediaServer(this.mediaServerForm).then((response) => {
this.$modal.msgSuccess('新增成功');
this.$modal.msgSuccess(this.$t('addSuccess'));
this.showDialog = false;
});
}

View File

@@ -4,10 +4,10 @@
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="75px" style="margin-bottom: -20px">
<el-form-item>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="add"
v-hasPermi="['iot:video:add']">新增节点</el-button>
v-hasPermi="['iot:video:add']">{{ $t('sip.mediaServer.998535-0') }}</el-button>
</el-form-item>
<el-form-item>
<el-button type="warning" plain icon="el-icon-refresh" size="mini" @click="getServerList">刷新</el-button>
<el-button type="warning" plain icon="el-icon-refresh" size="mini" @click="getServerList">{{ $t('refresh') }}</el-button>
</el-form-item>
</el-form>
</el-card>
@@ -20,16 +20,16 @@
<el-row :gutter="10">
<el-col :span="15">
<el-descriptions :column="1" size="mini" style="white-space: nowrap">
<el-descriptions-item label="配置名称">
<el-descriptions-item :label="$t('sip.mediaServer.998535-1')">
{{ item.serverId }}
</el-descriptions-item>
<el-descriptions-item label="服务器IP">
<el-descriptions-item :label="$t('sip.mediaServer.998535-2')">
{{ item.ip }}
</el-descriptions-item>
<el-descriptions-item label="播放协议">
<el-descriptions-item :label="$t('sip.mediaServer.998535-3')">
{{ item.protocol }}
</el-descriptions-item>
<el-descriptions-item label="创建时间">
<el-descriptions-item :label="$t('sip.mediaServer.998535-4')">
{{ parseTime(item.createTime, '{y}-{m}-{d}') }}
</el-descriptions-item>
</el-descriptions>
@@ -42,20 +42,20 @@
</el-row>
<el-button-group style="margin-top: 10px">
<el-button type="danger" size="mini" style="padding: 5px 10px" icon="el-icon-delete"
v-hasPermi="['iot:video:remove']" @click="del(item)">删除</el-button>
v-hasPermi="['iot:video:remove']" @click="del(item)">{{ $t('del') }}</el-button>
<el-button type="primary" size="mini" style="padding: 5px 15px" icon="el-icon-view" @click="view(item)"
v-hasPermi="['iot:video:query']">查看</el-button>
v-hasPermi="['iot:video:query']">{{ $t('look') }}</el-button>
<el-button v-if="!istrue" type="success" size="mini" style="padding: 5px 15px" icon="el-icon-odometer"
@click.native.prevent="edit(item)" v-hasPermi="['iot:video:edit']">编辑
@click.native.prevent="edit(item)" v-hasPermi="['iot:video:edit']">{{ $t('edit') }}
</el-button>
<el-button v-else type="success" size="mini" style="padding: 5px 15px" icon="el-icon-odometer"
:loading="true" disabled>重启中...
:loading="true" disabled>{{ $t('sip.mediaServer.998535-5') }}
</el-button>
</el-button-group>
</el-card>
</el-col>
</el-row>
<el-empty description="暂无数据,请添加流媒体服务器节点" v-if="total == 0"></el-empty>
<el-empty :description="$t('sip.mediaServer.998535-6')" v-if="total == 0"></el-empty>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
:pageSizes="[12, 24, 36, 60]" @pagination="getServerList" />
</el-card>
@@ -147,13 +147,13 @@ export default {
del: function (row) {
const ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除流媒体服务器配置编号为"' + ids + '"的数据项?')
.confirm(this.$t('sip.mediaServer.998535-7', [ids]))
.then(function () {
delmediaServer(ids);
})
.then(() => {
this.getServerList();
this.$modal.msgSuccess('删除成功');
this.$modal.msgSuccess(this.$t('delSuccess'));
})
.catch(() => { });
},

View File

@@ -1,32 +1,32 @@
<template>
<el-dialog title="选择产品" :visible.sync="open" width="600px" append-to-body>
<el-dialog :title="$t('sip.product-list.998536-0')" :visible.sync="open" width="600px" append-to-body>
<div style="margin-top: -55px">
<el-divider style="margin-top: -30px"></el-divider>
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
<el-form-item label="产品名称" prop="productName">
<el-input v-model="queryParams.productName" placeholder="请输入产品名称" clearable size="small" @keyup.enter.native="handleQuery" />
<el-form-item :label="$t('product.index.671004-0')" prop="productName">
<el-input v-model="queryParams.productName" :placeholder="$t('product.index.671004-1')" clearable size="small" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" ref="singleTable" :data="productList" @row-click="rowClick" highlight-current-row size="mini">
<el-table-column label="选择" width="50" align="center">
<el-table-column :label="$t('sip.index.998533-18')" width="50" align="center">
<template slot-scope="scope">
<input type="radio" :checked="scope.row.isSelect" name="product" />
</template>
</el-table-column>
<el-table-column label="产品名称" align="center" prop="productName" />
<el-table-column label="分类名称" align="center" prop="categoryName" />
<el-table-column label="租户名称" align="center" prop="tenantName" />
<el-table-column label="联网方式" align="center" prop="networkMethod">
<el-table-column :label="$t('product.index.671004-0')" align="center" prop="productName" />
<el-table-column :label="$t('product.index.671004-6')" align="center" prop="categoryName" />
<el-table-column :label="$t('sip.product-list.998536-1')" align="center" prop="tenantName" />
<el-table-column :label="$t('sip.product-list.998536-2')" align="center" prop="networkMethod">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_network_method" :value="scope.row.networkMethod" />
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="100">
<el-table-column :label="$t('creatTime')" align="center" prop="createTime" width="100">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
@@ -36,8 +36,8 @@
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="confirmSelectProduct" type="primary">确定</el-button>
<el-button @click="closeDialog" type="info"> </el-button>
<el-button @click="confirmSelectProduct" type="primary">{{ $t('confirm') }}</el-button>
<el-button @click="closeDialog" type="info">{{ $t('close') }}</el-button>
</div>
</el-dialog>
</template>
@@ -130,7 +130,7 @@ export default {
/**确定选择产品,产品传递给父组件 */
confirmSelectProduct() {
if (this.product == null) {
this.$message.error('请选择产品');
this.$message.error(this.$t('sip.index.998533-17'));
return;
}
this.$emit('productEvent', this.product);

View File

@@ -3,37 +3,37 @@
<el-form ref="form" :model="form" label-width="100px">
<el-row :gutter="100">
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="8">
<el-form-item label="默认配置" prop="isdefault">
<el-form-item :label="$t('sip.sipConfig.998537-0')" prop="isdefault">
<el-switch v-model="form.isdefault" :active-value="1" :inactive-value="0"/>
</el-form-item>
<el-form-item label="服务器地址" prop="ip">
<el-form-item :label="$t('sip.sipConfig.998537-1')" prop="ip">
<el-input v-model="form.ip" disabled />
</el-form-item>
<el-form-item label="服务器域" prop="domain">
<el-form-item :label="$t('sip.sipConfig.998537-2')" prop="domain">
<el-input v-model="form.domain" />
</el-form-item>
<el-form-item label="认证密码" prop="password">
<el-input v-model="form.password" placeholder="请输入认证密码" />
<el-form-item :label="$t('sip.sipConfig.998537-3')" prop="password">
<el-input v-model="form.password" :placeholder="$t('sip.sipConfig.998537-4')" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="8">
<el-form-item label="接入方式">
<el-form-item :label="$t('sip.sipConfig.998537-5')">
<el-input v-model="accessWay" disabled>
</el-input>
</el-form-item>
<el-form-item label="服务器端口" prop="port">
<el-form-item :label="$t('sip.sipConfig.998537-6')" prop="port">
<el-input v-model="form.port" type="number" disabled />
</el-form-item>
<el-form-item label="服务器ID" prop="serverSipid">
<el-form-item :label="$t('sip.sipConfig.998537-7')" prop="serverSipid">
<el-input v-model="form.serverSipid" />
</el-form-item>
</el-col>
<el-col :xs="23" :sm="23" :md="23" :lg="23" :xl="15">
<el-form-item style="text-align:center;margin-top:20px;">
<el-button v-show="form.id && productInfo.status != 2" v-hasPermi="['iot:video:edit']" type="primary"
@click="submitForm"> </el-button>
@click="submitForm">{{ $t('edit') }}</el-button>
<el-button v-show="!form.id && productInfo.status != 2" v-hasPermi="['iot:video:add']" type="primary"
@click="submitForm"> </el-button>
@click="submitForm">{{ $t('add') }}</el-button>
</el-form-item>
</el-col>
</el-row>
@@ -65,7 +65,7 @@ export default {
data() {
return {
// 接入方式
accessWay: '国标GB28181',
accessWay: this.$t('sip.sipConfig.998537-11'),
// 遮罩层
loading: true,
// 选中数组
@@ -90,17 +90,17 @@ export default {
rules: {
domain: [{
required: true,
message: '服务器域不能为空',
message: this.$t('sip.sipConfig.998537-8'),
trigger: 'blur',
}],
serverSipid: [{
required: true,
message: '服务器sipid不能为空',
message: this.$t('sip.sipConfig.998537-9'),
trigger: 'blur',
}],
password: [{
required: true,
message: 'sip认证密码不能为空',
message: this.$t('sip.sipConfig.998537-10'),
trigger: 'blur',
}],
},
@@ -144,11 +144,11 @@ export default {
}
if (this.form.id != null) {
updateSipconfig(this.form).then(response => {
this.$modal.msgSuccess('修改成功');
this.$modal.msgSuccess(this.$t('updateSuccess'));
});
} else {
addSipconfig(this.form).then(response => {
this.$modal.msgSuccess('新增成功');
this.$modal.msgSuccess(this.$t('addSuccess'));
this.getSipconfig(false);
});
}

View File

@@ -1,26 +1,26 @@
<template>
<el-dialog :title="title" :visible.sync="open" width="400px" append-to-body :close-on-click-modal="false">
<el-dialog :title="$t('sip.sipidGen.998538-1')" :visible.sync="open" width="400px" append-to-body :close-on-click-modal="false">
<el-form ref="createForm" :model="createForm" label-width="100px" :rules="rules">
<el-form-item label="行政区划" prop="city">
<el-form-item :label="$t('sip.sipidGen.998538-0')" prop="city">
<el-cascader :options="cityOptions" v-model="createForm.city" @change="changeProvince" change-on-select :props="{ checkStrictly: false }"></el-cascader>
</el-form-item>
<el-form-item label="设备类型" prop="deviceType">
<el-select v-model="createForm.deviceType" placeholder="请选择设备类型">
<el-form-item :label="$t('sip.sipidGen.998538-4')" prop="deviceType">
<el-select v-model="createForm.deviceType" :placeholder="$t('sip.sipidGen.998538-4')">
<el-option v-for="dict in dict.type.video_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="通道类型" prop="channelType">
<el-select v-model="createForm.channelType" placeholder="请选择设备类型">
<el-form-item :label="$t('sip.sipidGen.998538-5')" prop="channelType">
<el-select v-model="createForm.channelType" :placeholder="$t('sip.sipidGen.998538-4')">
<el-option v-for="dict in dict.type.channel_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="通道数量" prop="createNum">
<el-input-number controls-position="right" :min="1" :max="10" v-model="createForm.createNum" placeholder="请输入生成通道数量" type="number" style="width: 220px" />
<el-form-item :label="$t('sip.sipidGen.998538-6')" prop="createNum">
<el-input-number controls-position="right" :min="1" :max="10" v-model="createForm.createNum" :placeholder="$t('sip.index.998533-19')" type="number" style="width: 220px" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="closeDialog"> </el-button>
<el-button type="primary" @click="submitForm">{{ $t('sip.index.998533-21') }}</el-button>
<el-button @click="closeDialog">{{ $t('cancel') }}</el-button>
</div>
</el-dialog>
</template>
@@ -43,7 +43,7 @@ export default {
return {
// 遮罩层
loading: true,
title: '生成设备编号和通道',
title: this.$t('sip.sipidGen.998538-1'),
// 总条数
total: 0,
// 打开选择产品对话框
@@ -62,10 +62,10 @@ export default {
// 表单校验
rules: {
city: [{ required: true, message: '行政区划不能为空', trigger: 'change' }],
deviceType: [{ required: true, message: '设备类型不能为空', trigger: 'change' }],
channelType: [{ required: true, message: '通道类型不能为空', trigger: 'change' }],
createNum: [{ required: true, message: '请输入生成通道数量', trigger: 'change' }],
city: [{ required: true, message: this.$t('sip.sipidGen.998538-7'), trigger: 'change' }],
deviceType: [{ required: true, message: this.$t('sip.sipidGen.998538-8'), trigger: 'change' }],
channelType: [{ required: true, message: this.$t('sip.sipidGen.998538-9'), trigger: 'change' }],
createNum: [{ required: true, message: this.$t('sip.index.998533-19'), trigger: 'change' }],
},
};
},
@@ -89,7 +89,7 @@ export default {
this.createForm.deviceSipId = this.createForm.city[2] + '0000' + this.createForm.deviceType + '0';
this.createForm.channelSipId = this.createForm.city[2] + '0000' + this.createForm.channelType + '0';
addChannel(this.createForm.createNum, this.createForm).then((response) => {
this.$modal.msgSuccess('已生成设备编号和通道');
this.$modal.msgSuccess(this.$t('sip.sipidGen.998538-2'));
this.devsipid = response.data;
this.confirmSelectProduct();
});

View File

@@ -1,29 +1,29 @@
<template>
<el-dialog title="选择用户" :visible.sync="open" width="800px">
<el-dialog :title="$t('sip.user-list.558539-0')" :visible.sync="open" width="800px">
<div style="margin-top:-50px;">
<el-divider></el-divider>
</div>
<!--用户数据-->
<el-form :model="queryParams" ref="queryForm" :rules="rules" :inline="true" label-width="80px">
<el-form-item label="手机号码" prop="phonenumber">
<el-input type="text" placeholder="请输入用户手机号码" v-model="queryParams.phonenumber" minlength="10" clearable size="small" show-word-limit style="width: 240px" @keyup.enter.native="handleQuery"></el-input>
<el-form-item :label="$t('sip.user-list.558539-1')" prop="phonenumber">
<el-input type="text" :placeholder="$t('sip.user-list.558539-1')" v-model="queryParams.phonenumber" minlength="10" clearable size="small" show-word-limit style="width: 240px" @keyup.enter.native="handleQuery"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">查询</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="userList" highlight-current-row size="mini" @current-change="handleCurrentChange" border>
<el-table-column label="选择" width="50" align="center">
<el-table-column :label="$t('sip.user-list.558539-3')" width="50" align="center">
<template slot-scope="scope">
<input type="radio" :checked="scope.row.isSelect" name="user" />
</template>
</el-table-column>
<el-table-column label="用户编号" align="center" key="userId" prop="userId" width="120" />
<el-table-column label="用户名称" align="center" key="userName" prop="userName" />
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" />
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" width="120" />
<el-table-column label="创建时间" align="center" prop="createTime" width="160">
<el-table-column :label="$t('sip.user-list.558539-2')" align="center" key="userId" prop="userId" width="120" />
<el-table-column :label="$t('sip.user-list.558539-3')" align="center" key="userName" prop="userName" />
<el-table-column :label="$t('sip.user-list.558539-4')" align="center" key="nickName" prop="nickName" />
<el-table-column :label="$t('sip.user-list.558539-1')" align="center" key="phonenumber" prop="phonenumber" width="120" />
<el-table-column :label="$t('sip.user-list.558539-5')" align="center" prop="createTime" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
@@ -31,8 +31,8 @@
</el-table>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="confirmSelectUser">确定</el-button>
<el-button @click="closeSelectUser"> </el-button>
<el-button type="primary" @click="confirmSelectUser">{{ $t('confirm') }}</el-button>
<el-button @click="closeSelectUser">{{ $t('close') }}</el-button>
</div>
</el-dialog>
</template>
@@ -85,12 +85,12 @@ export default {
rules: {
phonenumber: [{
required: true,
message: "手机号码不能为空",
message: this.$t('sip.user-list.558539-6'),
trigger: "blur"
}, {
min: 11,
max: 11,
message: '手机号码长度为11位',
message: this.$t('sip.user-list.558539-7'),
trigger: 'blur'
}],
},

View File

@@ -2,81 +2,81 @@
<div style="padding: 6px">
<el-card v-show="showSearch" style="margin-bottom: 5px">
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" style="margin-bottom: -20px">
<el-form-item label="模型名称" prop="templateName">
<el-input v-model="queryParams.templateName" placeholder="请输入模型名称" clearable size="small"
<el-form-item :label="$t('template.index.891112-22')" prop="templateName">
<el-input v-model="queryParams.templateName" :placeholder="$t('template.index.891112-1')" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="模型类别" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择模型类别" clearable size="small">
<el-form-item :label="$t('template.index.891112-2')" prop="type">
<el-select v-model="queryParams.type" :placeholder="$t('template.index.891112-3')" clearable size="small">
<el-option v-for="dict in dict.type.iot_things_type" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('common.search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('common.reset') }}</el-button>
</el-form-item>
<el-form-item style="float: right">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['iot:template:add']">新增</el-button>
v-hasPermi="['iot:template:add']">{{ $t('common.add') }}</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card style="padding-bottom: 100px">
<el-table v-loading="loading" :data="templateList" @selection-change="handleSelectionChange" border>
<el-table-column label="模型名称" align="center" prop="templateName" />
<el-table-column label="标识符" align="center" prop="identifier" />
<el-table-column label="图表展示" align="center" prop="isMonitor" width="75">
<el-table-column :label="$t('template.index.891112-22')" align="center" prop="templateName" />
<el-table-column :label="$t('template.index.891112-7')" align="center" prop="identifier" />
<el-table-column :label="$t('template.index.891112-8')" align="center" prop="isMonitor" width="75">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isChart" />
</template>
</el-table-column>
<el-table-column label="只读" align="center" prop="" width="75">
<el-table-column :label="$t('template.index.891112-10')" align="center" prop="" width="75">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isReadonly" />
</template>
</el-table-column>
<el-table-column label="历史存储" align="center" prop="" width="75">
<el-table-column :label="$t('template.index.891112-11')" align="center" prop="" width="75">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isHistory" />
</template>
</el-table-column>
<el-table-column label="系统定义" align="center" prop="isSys" width="80">
<el-table-column :label="$t('template.index.891112-12')" align="center" prop="isSys" width="80">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_yes_no" :value="scope.row.isSys" />
</template>
</el-table-column>
<el-table-column label="物模型类别" align="center" prop="type" width="100">
<el-table-column :label="$t('template.index.891112-13')" align="center" prop="type" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_things_type" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="数据类型" align="center" prop="datatype" width="80">
<el-table-column :label="$t('template.index.891112-14')" align="center" prop="datatype" width="80">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_data_type" :value="scope.row.datatype" />
</template>
</el-table-column>
<el-table-column label="数据定义" align="left" header-align="center" prop="specs" min-width="150"
<el-table-column :label="$t('template.index.891112-15')" align="left" header-align="center" prop="specs" min-width="150"
class-name="specsColor">
<template slot-scope="scope">
<div v-html="formatSpecsDisplay(scope.row.specs)"></div>
</template>
</el-table-column>
<el-table-column label="排序" align="center" prop="modelOrder" width="80" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150">
<el-table-column :label="$t('template.index.891112-16')" align="center" prop="modelOrder" width="80" />
<el-table-column :label="$t('common.opation')" align="center" class-name="small-padding fixed-width" width="150">
<template slot-scope="scope">
<el-button size="small" type="text" style="padding: 5px" icon="el-icon-edit"
@click="handleUpdate(scope.row)" v-hasPermi="['iot:template:query']"
v-if="scope.row.isSys == '0' ? true : !isTenant">
修改
{{ $t('common.edit') }}
</el-button>
<el-button size="small" type="text" style="padding: 5px" icon="el-icon-delete"
@click="handleDelete(scope.row)" v-hasPermi="['iot:template:remove']"
v-if="scope.row.isSys == '0' ? true : !isTenant">
删除
{{ $t('common.del') }}
</el-button>
<span style="font-size: 10px; color: #999" v-if="scope.row.isSys == '1' && isTenant">系统定义不能修改</span>
<span style="font-size: 10px; color: #999" v-if="scope.row.isSys == '1' && isTenant">{{ $t('template.index.891112-21') }}</span>
</template>
</el-table-column>
</el-table>
@@ -87,53 +87,53 @@
<!-- 添加或修改通用物模型对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="模型名称" prop="templateName">
<el-input v-model="form.templateName" placeholder="请输入模型名称,例如:温度" style="width: 385px" />
<el-form-item :label="$t('template.index.891112-22')" prop="templateName">
<el-input v-model="form.templateName" :placeholder="$t('template.index.891112-23')" style="width: 385px" />
</el-form-item>
<el-form-item label="模型标识" prop="identifier">
<el-input v-model="form.identifier" placeholder="请输入标识符例如temperature" style="width: 385px" />
<el-form-item :label="$t('template.index.891112-24')" prop="identifier">
<el-input v-model="form.identifier" :placeholder="$t('template.index.891112-25')" style="width: 385px" />
</el-form-item>
<el-form-item label="模型排序" prop="modelOrder">
<el-input-number controls-position="right" v-model="form.modelOrder" placeholder="请输入排序"
<el-form-item :label="$t('template.index.891112-26')" prop="modelOrder">
<el-input-number controls-position="right" v-model="form.modelOrder" :placeholder="$t('template.index.891112-27')"
style="width: 386px" />
</el-form-item>
<el-form-item label="模型类别" prop="type">
<el-form-item :label="$t('template.index.891112-28')" prop="type">
<el-radio-group v-model="form.type" @change="typeChange(form.type)">
<el-radio-button label="1">属性</el-radio-button>
<el-radio-button label="2">功能</el-radio-button>
<el-radio-button label="3">事件</el-radio-button>
<el-radio-button :label="'1'">{{ $t('template.index.891112-29') }}</el-radio-button>
<el-radio-button :label="'2'">{{ $t('template.index.891112-30') }}</el-radio-button>
<el-radio-button :label="'3'">{{ $t('template.index.891112-31') }}</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="模型特性" prop="property">
<el-form-item :label="$t('template.index.891112-32')" prop="property">
<el-row>
<el-col :span="6">
<el-tooltip effect="dark" content="设备详情中以图表方式展示" placement="top">
<el-checkbox name="isChart" label="图表展示" @change="isChartChange" v-show="form.type == 1"
<el-tooltip effect="dark" :content="$t('template.index.891112-33')" placement="top">
<el-checkbox name="isChart" :label="$t('template.index.891112-8')" @change="isChartChange" v-show="form.type == 1"
v-model="form.isChart" :true-label="1" :false-label="0"></el-checkbox>
</el-tooltip>
</el-col>
<el-col :span="6">
<el-tooltip effect="dark" content="实时显示监测数据,但是不会存储到数据库" placement="top">
<el-checkbox name="isMonitor" label="实时监测" @change="isMonitorChange" v-show="form.type == 1"
<el-tooltip effect="dark" :content="$t('template.index.891112-34')" placement="top">
<el-checkbox name="isMonitor" :label="$t('template.index.891112-9')" @change="isMonitorChange" v-show="form.type == 1"
v-model="form.isMonitor" :true-label="1" :false-label="0"></el-checkbox>
</el-tooltip>
</el-col>
<el-col :span="6">
<el-tooltip effect="dark" content="设备上报数据,但是平台不能下发指令" placement="top">
<el-checkbox name="isReadonly" label="只读数据" @change="isReadonlyChange" :disabled="form.type == 3"
<el-tooltip effect="dark" :content="$t('template.index.891112-35')" placement="top">
<el-checkbox name="isReadonly" :label="$t('template.index.891112-36')" @change="isReadonlyChange" :disabled="form.type == 3"
v-model="form.isReadonly" :true-label="1" :false-label="0"></el-checkbox>
</el-tooltip>
</el-col>
<el-col :span="6">
<el-tooltip effect="dark" content="设备上报的数据会存储到数据库作为历史数据" placement="top">
<el-checkbox name="isHistory" label="历史存储" v-model="form.isHistory" :true-label="1"
<el-tooltip effect="dark" :content="$t('template.index.891112-37')" placement="top">
<el-checkbox name="isHistory" :label="$t('template.index.891112-11')" v-model="form.isHistory" :true-label="1"
:false-label="0"></el-checkbox>
</el-tooltip>
</el-col>
<el-col :span="6">
<el-tooltip effect="dark" content="设备分享时需要指定是否拥有该权限" placement="top">
<el-checkbox name="isSharePerm" label="分享权限" v-model="form.isSharePerm" :true-label="1"
<el-tooltip effect="dark" :content="$t('template.index.891112-38')" placement="top">
<el-checkbox name="isSharePerm" :label="$t('template.index.891112-39')" v-model="form.isSharePerm" :true-label="1"
:false-label="0"></el-checkbox>
</el-tooltip>
</el-col>
@@ -141,179 +141,179 @@
</el-form-item>
<el-divider></el-divider>
<el-form-item label="数据类型" prop="datatype">
<el-select v-model="form.datatype" placeholder="请选择数据类型" @change="dataTypeChange" style="width: 175px">
<el-option key="integer" label="整数" value="integer"></el-option>
<el-option key="decimal" label="小数" value="decimal"></el-option>
<el-option key="bool" label="布尔" value="bool" :disabled="form.isChart == 1"></el-option>
<el-option key="enum" label="枚举" value="enum" :disabled="form.isChart == 1"></el-option>
<el-option key="string" label="字符串" value="string" :disabled="form.isChart == 1"></el-option>
<el-option key="array" label="数组" value="array" :disabled="form.isChart == 1"></el-option>
<el-option key="object" label="对象" value="object" :disabled="form.isChart == 1"></el-option>
<el-form-item :label="$t('template.index.891112-14')" prop="datatype">
<el-select v-model="form.datatype" :placeholder="$t('template.index.891112-40')" @change="dataTypeChange" style="width: 175px">
<el-option key="integer" :label="$t('template.index.891112-41')" value="integer"></el-option>
<el-option key="decimal" :label="$t('template.index.891112-42')" value="decimal"></el-option>
<el-option key="bool" :label="$t('template.index.891112-43')" value="bool" :disabled="form.isChart == 1"></el-option>
<el-option key="enum" :label="$t('template.index.891112-44')" value="enum" :disabled="form.isChart == 1"></el-option>
<el-option key="string" :label="$t('template.index.891112-45')" value="string" :disabled="form.isChart == 1"></el-option>
<el-option key="array" :label="$t('template.index.891112-46')" value="array" :disabled="form.isChart == 1"></el-option>
<el-option key="object" :label="$t('template.index.891112-47')" value="object" :disabled="form.isChart == 1"></el-option>
</el-select>
</el-form-item>
<div>
<el-form-item label="取值范围" v-if="form.datatype == 'integer'">
<el-form-item :label="$t('template.index.891112-48')" v-if="form.datatype == 'integer'">
<el-row>
<el-col :span="9">
<el-input v-model="form.specs.min" placeholder="最小值" controls-position="right" type="number"
<el-input v-model="form.specs.min" :placeholder="$t('template.index.891112-49')" controls-position="right" type="number"
style="width: 174px;" @input="handleEdit" />
</el-col>
<el-col :span="2" align="center"></el-col>
<el-col :span="2" align="center">{{ $t('template.index.891112-50') }}</el-col>
<el-col :span="9">
<el-input v-model="form.specs.max" placeholder="最大值" type="number" controls-position="right"
<el-input v-model="form.specs.max" :placeholder="$t('template.index.891112-51')" type="number" controls-position="right"
style="width: 174px;" @input="handleEditmax" />
</el-col>
</el-row>
</el-form-item>
<el-form-item label="取值范围" v-if="form.datatype == 'decimal'">
<el-form-item :label="$t('template.index.891112-48')" v-if="form.datatype == 'decimal'">
<el-row>
<el-col :span="9">
<el-input v-model="form.specs.min" placeholder="最小值" controls-position="right" type="number"
<el-input v-model="form.specs.min" :placeholder="$t('template.index.891112-49')" controls-position="right" type="number"
style="width: 174px;" />
</el-col>
<el-col :span="2" align="center"></el-col>
<el-col :span="2" align="center">{{ $t('template.index.891112-50') }}</el-col>
<el-col :span="9">
<el-input v-model="form.specs.max" placeholder="最大值" type="number" controls-position="right"
<el-input v-model="form.specs.max" :placeholder="$t('template.index.891112-51')" type="number" controls-position="right"
style="width: 174px;" />
</el-col>
</el-row>
</el-form-item>
<el-form-item label="单位" prop="unit" v-if="form.datatype == 'integer' || form.datatype == 'decimal'">
<el-input v-model="form.specs.unit" placeholder="请输入单位,例如:℃" style="width: 385px" />
<el-form-item :label="$t('template.index.891112-52')" prop="unit" v-if="form.datatype == 'integer' || form.datatype == 'decimal'">
<el-input v-model="form.specs.unit" :placeholder="$t('template.index.891112-53')" style="width: 385px" />
</el-form-item>
<el-form-item label="步长" prop="step" v-if="form.datatype == 'integer' || form.datatype == 'decimal'">
<el-input controls-position="right" v-model="form.specs.step" placeholder="请输入步长例如1" type="number"
<el-form-item :label="$t('template.index.891112-54')" prop="step" v-if="form.datatype == 'integer' || form.datatype == 'decimal'">
<el-input controls-position="right" v-model="form.specs.step" :placeholder="$t('template.index.891112-55')" type="number"
style="width: 386px" />
</el-form-item>
</div>
<div v-if="form.datatype == 'bool'">
<el-form-item label="布尔值" prop="">
<el-form-item :label="$t('template.index.891112-56')" prop="">
<el-row style="margin-bottom: 10px">
<el-col :span="9">
<el-input v-model="form.specs.falseText" placeholder="例如:关闭" />
<el-input v-model="form.specs.falseText" :placeholder="$t('template.index.891112-57')" />
</el-col>
<el-col :span="10" :offset="1">0 值对应文本</el-col>
<el-col :span="10" :offset="1">{{ $t('template.index.891112-58') }}</el-col>
</el-row>
<el-row>
<el-col :span="9">
<el-input v-model="form.specs.trueText" placeholder="例如:打开" />
<el-input v-model="form.specs.trueText" :placeholder="$t('template.index.891112-59')" />
</el-col>
<el-col :span="10" :offset="1">1 值对应文本</el-col>
<el-col :span="10" :offset="1">{{ $t('template.index.891112-60') }}</el-col>
</el-row>
</el-form-item>
</div>
<div v-if="form.datatype == 'enum'">
<el-form-item label="展示方式">
<el-select v-model="form.specs.showWay" placeholder="请选择展示方式" style="width: 175px">
<el-option key="select" label="下拉框" value="select"></el-option>
<el-option key="button" label="按钮" value="button"></el-option>
<el-form-item :label="$t('template.index.891112-61')">
<el-select v-model="form.specs.showWay" :placeholder="$t('template.index.891112-62')" style="width: 175px">
<el-option key="select" :label="$t('template.index.891112-63')" value="select"></el-option>
<el-option key="button" :label="$t('template.index.891112-64')" value="button"></el-option>
</el-select>
</el-form-item>
<el-form-item label="枚举项" prop="">
<el-form-item :label="$t('template.index.891112-65')" prop="">
<el-row v-for="(item, index) in form.specs.enumList" :key="'enum' + index" style="margin-bottom: 10px">
<el-col :span="9">
<el-input v-model="item.value" placeholder="参数值例如0" />
<el-input v-model="item.value" :placeholder="$t('template.index.891112-66')" />
</el-col>
<el-col :span="11" :offset="1">
<el-input v-model="item.text" placeholder="参数描述,例如:中速档位" />
<el-input v-model="item.text" :placeholder="$t('template.index.891112-67')" />
</el-col>
<el-col :span="2" :offset="1" v-if="index != 0"><a style="color: #f56c6c"
@click="removeEnumItem(index)">删除</a></el-col>
@click="removeEnumItem(index)">{{ $t('common.del') }}</a></el-col>
</el-row>
<div>
+
<a style="color: #409eff" @click="addEnumItem()">添加枚举项</a>
<a style="color: #409eff" @click="addEnumItem()">{{ $t('template.index.891112-68') }}</a>
</div>
</el-form-item>
</div>
<div v-if="form.datatype == 'string'">
<el-form-item label="最大长度" prop="">
<el-form-item :label="$t('template.index.891112-69')" prop="">
<el-row>
<el-col :span="9">
<el-input v-model="form.specs.maxLength" placeholder="例如1024" type="number" />
<el-input v-model="form.specs.maxLength" :placeholder="$t('template.index.891112-70')" type="number" />
</el-col>
<el-col :span="14" :offset="1">字符串的最大长度</el-col>
<el-col :span="14" :offset="1">{{ $t('template.index.891112-71') }}</el-col>
</el-row>
</el-form-item>
</div>
<div v-if="form.datatype == 'array'">
<el-form-item label="元素个数" prop="">
<el-form-item :label="$t('template.index.891112-72')" prop="">
<el-row>
<el-col :span="9">
<el-input v-model="form.specs.arrayCount" placeholder="例如5" type="number" />
<el-input v-model="form.specs.arrayCount" :placeholder="$t('template.index.891112-73')" type="number" />
</el-col>
</el-row>
</el-form-item>
<el-form-item label="数组类型" prop="">
<el-form-item :label="$t('template.index.891112-74')" prop="">
<el-radio-group v-model="form.specs.arrayType">
<el-radio label="integer">整数</el-radio>
<el-radio label="decimal">小数</el-radio>
<el-radio label="string">字符串</el-radio>
<el-radio label="object">对象</el-radio>
<el-radio label="integer">{{ $t('template.index.891112-41') }}</el-radio>
<el-radio label="decimal">{{ $t('template.index.891112-42') }}</el-radio>
<el-radio label="string">{{ $t('template.index.891112-45') }}</el-radio>
<el-radio label="object">{{ $t('template.index.891112-47') }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="对象参数" v-if="form.specs.arrayType == 'object'">
<el-form-item :label="$t('template.index.891112-75')" v-if="form.specs.arrayType == 'object'">
<div style="background-color: #f8f8f8; border-radius: 5px">
<el-row style="padding: 0 10px 5px" v-for="(item, index) in form.specs.params" :key="index">
<div style="margin-top: 5px" v-if="index == 0"></div>
<el-col :span="18">
<el-input readonly v-model="item.name" size="mini" placeholder="请选择设备" style="margin-top: 3px">
<el-input readonly v-model="item.name" size="mini" :placeholder="$t('template.index.891112-76')" style="margin-top: 3px">
<template slot="prepend">
<el-tag size="mini" effect="dark" style="margin-left: -21px; height: 26px; line-height: 26px">{{
item.order }}</el-tag>
{{ form.identifier + '_' + item.id }}
</template>
<el-button slot="append" @click="editParameter(item, index)" size="small">编辑</el-button>
<el-button slot="append" @click="editParameter(item, index)" size="small">{{ $t('common.edit') }}</el-button>
</el-input>
</el-col>
<el-col :span="2" :offset="2">
<el-button size="small" plain type="danger" style="padding: 5px" icon="el-icon-delete"
@click="removeParameter(index)">删除</el-button>
@click="removeParameter(index)">{{ $t('common.del') }}</el-button>
</el-col>
</el-row>
</div>
<div>
+
<a style="color: #409eff" @click="addParameter()">添加参数</a>
<a style="color: #409eff" @click="addParameter()">{{ $t('template.index.891112-78') }}</a>
</div>
</el-form-item>
</div>
<div v-if="form.datatype == 'object'">
<el-form-item label="对象参数" prop="">
<el-form-item :label="$t('template.index.891112-75')" prop="">
<div style="background-color: #f8f8f8; border-radius: 5px">
<el-row style="padding: 0 10px 5px" v-for="(item, index) in form.specs.params" :key="index">
<div style="margin-top: 5px" v-if="index == 0"></div>
<el-col :span="18">
<el-input readonly v-model="item.name" size="mini" placeholder="请选择设备" style="margin-top: 3px">
<el-input readonly v-model="item.name" size="mini" :placeholder="$t('template.index.891112-76')" style="margin-top: 3px">
<template slot="prepend">
<el-tag size="mini" effect="dark" style="margin-left: -21px; height: 26px; line-height: 26px">{{
item.order }}</el-tag>
{{ form.identifier + '_' + item.id }}
</template>
<el-button slot="append" @click="editParameter(item, index)">编辑</el-button>
<el-button slot="append" @click="editParameter(item, index)">{{ $t('common.edit') }}</el-button>
</el-input>
</el-col>
<el-col :span="2" :offset="2">
<el-button size="small" plain type="danger" style="padding: 5px" icon="el-icon-delete"
@click="removeParameter(index)">删除</el-button>
@click="removeParameter(index)">{{ $t('common.del') }}</el-button>
</el-col>
</el-row>
</div>
<div>
+
<a style="color: #409eff" @click="addParameter()">添加参数</a>
<a style="color: #409eff" @click="addParameter()">{{ $t('template.index.891112-78') }}</a>
</div>
</el-form-item>
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:template:edit']" v-show="form.templateId">
</el-button>
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:template:add']" v-show="!form.templateId">
</el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:template:edit']" v-show="form.templateId">{{ $t('common.edit') }}
</el-button>
<el-button type="primary" @click="submitForm" v-hasPermi="['iot:template:add']" v-show="!form.templateId">{{ $t('common.add') }}
</el-button>
<el-button @click="cancel">{{ $t('common.cancel') }}</el-button>
</div>
</el-dialog>
@@ -382,54 +382,54 @@ export default {
templateName: [
{
required: true,
message: '模型名称不能为空',
message: this.$i18n.t('template.index.891112-84'),
trigger: 'blur',
},
{
min: 1,
max: 64,
message: '模型名称不能少于1个字符和超过64字符',
message: this.$i18n.t('template.index.891112-84'),
trigger: 'blur',
},
],
identifier: [
{
required: true,
message: '标识符,产品下唯一不能为空',
message: this.$i18n.t('template.index.891112-85'),
trigger: 'blur',
},
{
min: 1,
max: 32,
message: '标识符不能少于1个字符和超过32字符',
message: this.$i18n.t('template.index.891112-85'),
trigger: 'blur',
},
],
modelOrder: [
{
required: true,
message: '模型排序不能为空',
message: this.$i18n.t('template.index.891112-86'),
trigger: 'blur',
},
{
type: 'number',
min: -2147483648,
max: 2147483647,
message: '排序不能超过int型的范围值( -2^31——2^31-1)',
message: '',
trigger: 'blur',
},
],
type: [
{
required: true,
message: '模型类别不能为空',
message: this.$i18n.t('template.index.891112-87'),
trigger: 'change',
},
],
datatype: [
{
required: true,
message: '数据类型不能为空',
message: this.$i18n.t('template.index.891112-88'),
trigger: 'change',
},
],
@@ -521,7 +521,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = '添加通用物模型';
this.title = this.$i18n.t('template.index.891112-89');
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -530,7 +530,7 @@ export default {
getTemplate(templateId).then((response) => {
let tempForm = response.data;
this.open = true;
this.title = '修改通用物模型';
this.title = this.$i18n.t('template.index.891112-90');
// Json转对象
tempForm.specs = JSON.parse(tempForm.specs);
if (!tempForm.specs.enumList) {
@@ -567,14 +567,14 @@ export default {
// 验证对象或对象数组中的参数不能为空
if (this.form.datatype == 'object' || (this.form.datatype == 'array' && this.form.specs.arrayType == 'object')) {
if (!this.form.specs.params || this.form.specs.params == 0) {
this.$modal.msgError('对象的参数不能为空');
this.$modal.msgError(this.$i18n.t('template.index.891112-91'));
return;
}
}
//验证输入的取值范围最大值不能小于最小值
if (this.form.datatype == 'integer' || this.form.datatype == 'decimal') {
if (parseFloat(this.form.specs.min) > parseFloat(this.form.specs.max)) {
this.$modal.msgError('请重新输入取值范围,最大值不能比最小值小!');
this.$modal.msgError(this.$i18n.t('template.index.891112-125'));
return;
}
}
@@ -582,7 +582,7 @@ export default {
this.hasDecimalPoint();
this.hasDecimalPointMax();
if (this.isDecimal === false || this.isDecimalMax === false) {
this.$modal.msgError('取值范围必须输入小数,请重新输入!');
this.$modal.msgError(this.$i18n.t('template.index.891112-126'));
return;
}
}
@@ -591,14 +591,14 @@ export default {
let arr = this.form.specs.params.map((item) => item.id).sort();
for (let i = 0; i < arr.length; i++) {
if (arr[i] == arr[i + 1]) {
this.$modal.msgError('参数标识 ' + arr[i] + ' 重复');
this.$modal.msgError(this.$i18n.t('template.index.891112-127', [arr[i]]));
return;
}
}
}
//验证模型特性为图表展示时,数据类型是否为整数或者小数
if ((this.form.isChart == 1 && this.form.datatype != 'integer') && (this.form.isChart == 1 && this.form.datatype != 'decimal')) {
this.$modal.msgError('请重新选择数据类型!');
this.$modal.msgError(this.$i18n.t('template.index.891112-95'));
}
else if (this.form.templateId != null) {
// 格式化specs
@@ -614,7 +614,7 @@ export default {
// 添加通用物模型的修改者
tempForm.updateBy = this.$store.state.user.name;
updateTemplate(tempForm).then((response) => {
this.$modal.msgSuccess('修改成功');
this.$modal.msgSuccess(this.$i18n.t('template.index.891112-128'));
this.open = false;
this.getList();
});
@@ -631,7 +631,7 @@ export default {
// 添加通用物模型的创造者
tempForm.createBy = this.$store.state.user.name;
addTemplate(tempForm).then((response) => {
this.$modal.msgSuccess('新增成功');
this.$modal.msgSuccess(this.$i18n.t('template.index.891112-129'));
this.open = false;
this.getList();
});
@@ -643,13 +643,13 @@ export default {
handleDelete(row) {
const templateIds = row.templateId || this.ids;
this.$modal
.confirm('是否确认删除通用物模型编号为"' + templateIds + '"的数据项?')
.confirm(this.$i18n.t('template.index.891112-98', [templateIds]))
.then(function () {
return delTemplate(templateIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
this.$modal.msgSuccess(this.$i18n.t('template.index.891112-130'));
})
.catch(() => { });
},
@@ -781,19 +781,19 @@ export default {
let specs = JSON.parse(json);
if (specs.type === 'integer' || specs.type === 'decimal') {
return (
'<span style=\'width:50%;display:inline-block;\'>最大值:<span style="color:#F56C6C">' +
'<span style=\'width:50%;display:inline-block;\>' + this.$i18n.t('template.index.891112-105') + '<span style="color:#F56C6C">' +
specs.max +
'</span></span>最小值:<span style="color:#F56C6C">' +
'</span></span>' + this.$i18n.t('template.index.891112-106') + '<span style="color:#F56C6C">' +
specs.min +
'</span><br /><span style=\'width:50%;display:inline-block;\'>步长:<span style="color:#F56C6C">' +
'</span><br /><span style=\'width:50%;display:inline-block;\>' + this.$i18n.t('template.index.891112-107') + '<span style="color:#F56C6C">' +
specs.step +
'</span></span>单位:<span style="color:#F56C6C">' +
'</span></span>' + this.$i18n.t('template.index.891112-108') + '<span style="color:#F56C6C">' +
specs.unit
);
} else if (specs.type === 'string') {
return '最大长度:<span style="color:#F56C6C">' + specs.maxLength + '</span>';
return this.$i18n.t('template.index.891112-109') + '<span style="color:#F56C6C">' + specs.maxLength + '</span>';
} else if (specs.type === 'array') {
return '<span style=\'width:50%;display:inline-block;\'>数组类型:<span style="color:#F56C6C">' + specs.arrayType + '</span></span>元素个数:<span style="color:#F56C6C">' + specs.arrayCount;
return '<span style=\'width:50%;display:inline-block;\>' + this.$i18n.t('template.index.891112-110') + '<span style="color:#F56C6C">' + specs.arrayType + '</span></span>' + this.$i18n.t('template.index.891112-111') + '<span style="color:#F56C6C">' + specs.arrayCount;
} else if (specs.type === 'enum') {
let items = '';
for (let i = 0; i < specs.enumList.length; i++) {

View File

@@ -1,31 +1,31 @@
<template>
<div style="padding: 6px">
<!-- 添加或修改通用物模型对话框 -->
<el-dialog title="编辑参数" :visible.sync="openEdit" width="900px" append-to-body>
<el-dialog :title="$t('template.paramter.038405-0')" :visible.sync="openEdit" width="900px" append-to-body>
<div style="margin: -30px 0 30px; background-color: #ddd; height: 1px"></div>
<el-row>
<el-col :span="12" style="border: 1px solid #ddd; border-radius: 5px; padding: 10px; background-color: #eee">
<el-form :model="queryParams" :inline="true" label-width="48px" size="small">
<el-form-item label="" prop="templateName">
<el-input v-model="queryParams.templateName" placeholder="请输入物模型名称" style="width: 160px" clearable size="mini" @keyup.enter.native="handleQuery" />
<el-input v-model="queryParams.templateName" :placeholder="$t('template.paramter.038405-1')" style="width: 160px" clearable size="mini" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="info" icon="el-icon-search" size="mini" @click="handleQuery" style="padding: 5px">搜索</el-button>
<el-button type="info" icon="el-icon-search" size="mini" @click="handleQuery" style="padding: 5px">{{ $t('template.paramter.038405-2') }}</el-button>
</el-form-item>
<el-form-item>
<el-link :underline="false" icon="el-icon-info" type="primary" style="margin-left: 20px">单击应用模板</el-link>
<el-link :underline="false" icon="el-icon-info" type="primary" style="margin-left: 20px">{{ $t('template.paramter.038405-3') }}</el-link>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="templateList" size="mini" @row-click="rowClick" highlight-current-row :border="false" :show-header="false" :row-style="{ backgroundColor: '#eee' }">
<el-table-column label="选择" width="30" align="center">
<el-table-column :label="$t('template.paramter.038405-4')" width="30" align="center">
<template slot-scope="scope">
<input type="radio" :checked="scope.row.isSelect" :disabled="scope.row.datatype == 'array' || scope.row.datatype == 'object'" name="template" />
</template>
</el-table-column>
<el-table-column label="名称" align="left" prop="templateName" />
<el-table-column label="标识符" align="left" prop="identifier" />
<el-table-column label="数据类型" align="center" prop="datatype" width="60">
<el-table-column :label="$t('template.paramter.038405-5')" align="left" prop="templateName" />
<el-table-column :label="$t('template.paramter.038405-6')" align="left" prop="identifier" />
<el-table-column :label="$t('template.paramter.038405-7')" align="center" prop="datatype" width="60">
<template slot-scope="scope">
<dict-tag :options="dict.type.iot_data_type" :value="scope.row.datatype" />
</template>
@@ -46,97 +46,97 @@
<el-col :span="11" :offset="1">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="参数名称" prop="name">
<el-input v-model="form.name" placeholder="例如:温度" style="width: 270px" size="small" />
<el-form-item :label="$t('template.paramter.038405-8')" prop="name">
<el-input v-model="form.name" :placeholder="$t('template.paramter.038405-9')" style="width: 270px" size="small" />
</el-form-item>
<el-form-item label="参数标识" prop="id">
<el-input v-model="form.id" placeholder="例如temperature" style="width: 270px" size="small"></el-input>
<el-form-item :label="$t('template.paramter.038405-10')" prop="id">
<el-input v-model="form.id" :placeholder="$t('template.paramter.038405-11')" style="width: 270px" size="small"></el-input>
</el-form-item>
<el-form-item label="参数排序" prop="order">
<el-input-number controls-position="right" v-model="form.order" placeholder="请输入排序" type="number" style="width: 270px" size="small" />
<el-form-item :label="$t('template.paramter.038405-12')" prop="order">
<el-input-number controls-position="right" v-model="form.order" :placeholder="$t('template.paramter.038405-13')" type="number" style="width: 270px" size="small" />
</el-form-item>
<el-form-item label="参数特性" prop="property">
<el-checkbox name="isChart" label="图表展示" @change="isChartChange" v-model="form.isChart" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox name="isMonitor" label="实时监测" @change="isMonitorChange" v-model="form.isMonitor" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox name="isReadonly" label="只读数据" @change="isReadonlyChange" v-model="form.isReadonly" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox name="isHistory" label="历史存储" v-model="form.isHistory" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox name="isSharePerm" label="分享权限" v-model="form.isSharePerm" :true-label="1" :false-label="0"></el-checkbox>
<el-form-item :label="$t('template.paramter.038405-14')" prop="property">
<el-checkbox name="isChart" :label="$t('template.paramter.038405-15')" @change="isChartChange" v-model="form.isChart" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox name="isMonitor" :label="$t('template.paramter.038405-16')" @change="isMonitorChange" v-model="form.isMonitor" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox name="isReadonly" :label="$t('template.paramter.038405-17')" @change="isReadonlyChange" v-model="form.isReadonly" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox name="isHistory" :label="$t('template.paramter.038405-18')" v-model="form.isHistory" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox name="isSharePerm" :label="$t('template.paramter.038405-19')" v-model="form.isSharePerm" :true-label="1" :false-label="0"></el-checkbox>
</el-form-item>
<div style="margin-bottom: 20px; background-color: #ddd; height: 1px"></div>
<el-form-item label="数据类型" prop="datatype">
<el-select v-model="form.datatype" placeholder="请选择数据类型" style="width: 125px" size="small">
<el-option key="integer" label="整数" value="integer"></el-option>
<el-option key="decimal" label="小数" value="decimal"></el-option>
<el-option key="bool" label="布尔" value="bool" :disabled="form.isChart == 1"></el-option>
<el-option key="enum" label="枚举" value="enum" :disabled="form.isChart == 1"></el-option>
<el-option key="string" label="字符串" value="string" :disabled="form.isChart == 1"></el-option>
<el-form-item :label="$t('template.paramter.038405-20')" prop="datatype">
<el-select v-model="form.datatype" :placeholder="$t('template.paramter.038405-21')" style="width: 125px" size="small">
<el-option key="integer" :label="$t('template.paramter.038405-22')" value="integer"></el-option>
<el-option key="decimal" :label="$t('template.paramter.038405-23')" value="decimal"></el-option>
<el-option key="bool" :label="$t('template.paramter.038405-24')" value="bool" :disabled="form.isChart == 1"></el-option>
<el-option key="enum" :label="$t('template.paramter.038405-25')" value="enum" :disabled="form.isChart == 1"></el-option>
<el-option key="string" :label="$t('template.paramter.038405-26')" value="string" :disabled="form.isChart == 1"></el-option>
</el-select>
</el-form-item>
<div v-if="form.datatype == 'integer' || form.datatype == 'decimal'">
<el-form-item label="取值范围">
<el-form-item :label="$t('template.paramter.038405-27')">
<el-row>
<el-col :span="10">
<el-input v-model="form.specs.min" placeholder="最小值" type="number" size="small" />
<el-input v-model="form.specs.min" :placeholder="$t('template.paramter.038405-28')" type="number" size="small" />
</el-col>
<el-col :span="4" align="center"></el-col>
<el-col :span="4" align="center">{{ $t('template.paramter.038405-29') }}</el-col>
<el-col :span="10">
<el-input v-model="form.specs.max" placeholder="最大值" type="number" size="small" />
<el-input v-model="form.specs.max" :placeholder="$t('template.paramter.038405-30')" type="number" size="small" />
</el-col>
</el-row>
</el-form-item>
<el-form-item label="单位">
<el-input v-model="form.specs.unit" placeholder="例如:℃" style="width: 308px" size="small" />
<el-form-item :label="$t('template.paramter.038405-31')">
<el-input v-model="form.specs.unit" :placeholder="$t('template.paramter.038405-32')" style="width: 308px" size="small" />
</el-form-item>
<el-form-item label="步长">
<el-input-number controls-position="right" v-model="form.specs.step" placeholder="例如1" type="number" style="width: 308px" size="small" />
<el-form-item :label="$t('template.paramter.038405-33')">
<el-input-number controls-position="right" v-model="form.specs.step" :placeholder="$t('template.paramter.038405-34')" type="number" style="width: 308px" size="small" />
</el-form-item>
</div>
<div v-if="form.datatype == 'bool'">
<el-form-item label="布尔值" prop="">
<el-form-item :label="$t('template.paramter.038405-35')" prop="">
<el-row style="margin-bottom: 10px">
<el-col :span="10">
<el-input v-model="form.specs.falseText" placeholder="例如:关闭" size="small" />
<el-input v-model="form.specs.falseText" :placeholder="$t('template.paramter.038405-36')" size="small" />
</el-col>
<el-col :span="10" :offset="1">0 值对应文本</el-col>
<el-col :span="10" :offset="1">{{ $t('template.paramter.038405-37') }}</el-col>
</el-row>
<el-row>
<el-col :span="10">
<el-input v-model="form.specs.trueText" placeholder="例如:打开" size="small" />
<el-input v-model="form.specs.trueText" :placeholder="$t('template.paramter.038405-38')" size="small" />
</el-col>
<el-col :span="10" :offset="1">1 值对应文本</el-col>
<el-col :span="10" :offset="1">{{ $t('template.paramter.038405-39') }}</el-col>
</el-row>
</el-form-item>
</div>
<div v-if="form.datatype == 'enum'">
<el-form-item label="展示方式">
<el-select v-model="form.specs.showWay" placeholder="请选择展示方式" style="width: 175px">
<el-option key="select" label="下拉框" value="select"></el-option>
<el-option key="button" label="按钮" value="button"></el-option>
<el-form-item :label="$t('template.paramter.038405-40')">
<el-select v-model="form.specs.showWay" :placeholder="$t('template.paramter.038405-41')" style="width: 175px">
<el-option key="select" :label="$t('template.paramter.038405-42')" value="select"></el-option>
<el-option key="button" :label="$t('template.paramter.038405-43')" value="button"></el-option>
</el-select>
</el-form-item>
<el-form-item label="枚举项" prop="">
<el-form-item :label="$t('template.paramter.038405-44')" prop="">
<el-row v-for="(item, index) in form.specs.enumList" :key="'enum' + index" style="margin-bottom: 10px">
<el-col :span="8">
<el-input v-model="item.value" placeholder="例如0" size="small" />
<el-input v-model="item.value" :placeholder="$t('template.paramter.038405-45')" size="small" />
</el-col>
<el-col :span="11" :offset="1">
<el-input v-model="item.text" placeholder="例如:中速挡位" size="small" />
<el-input v-model="item.text" :placeholder="$t('template.paramter.038405-46')" size="small" />
</el-col>
<el-col :span="3" :offset="1" v-if="index != 0"><a style="color: #f56c6c" @click="removeEnumItem(index)">删除</a></el-col>
<el-col :span="3" :offset="1" v-if="index != 0"><a style="color: #f56c6c" @click="removeEnumItem(index)">{{ $t('template.paramter.038405-47') }}</a></el-col>
</el-row>
<div>
+
<a style="color: #409eff" @click="addEnumItem()">添加枚举项</a>
<a style="color: #409eff" @click="addEnumItem()">{{ $t('template.paramter.038405-48') }}</a>
</div>
</el-form-item>
</div>
<div v-if="form.datatype == 'string'">
<el-form-item label="最大长度" prop="">
<el-form-item :label="$t('template.paramter.038405-49')" prop="">
<el-row>
<el-col :span="10">
<el-input v-model="form.specs.maxLength" placeholder="例如1024" type="number" size="small" />
<el-input v-model="form.specs.maxLength" :placeholder="$t('template.paramter.038405-50')" type="number" size="small" />
</el-col>
</el-row>
</el-form-item>
@@ -146,8 +146,8 @@
</el-row>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm">{{ $t('template.paramter.038405-51') }}</el-button>
<el-button @click="cancel">{{ $t('template.paramter.038405-52') }}</el-button>
</div>
</el-dialog>
</div>
@@ -226,28 +226,28 @@ export default {
name: [
{
required: true,
message: '参数名称不能为空',
message: this.$t('template.paramter.038405-53'),
trigger: 'blur',
},
],
id: [
{
required: true,
message: '参数标识符不能为空',
message: this.$t('template.paramter.038405-54'),
trigger: 'blur',
},
],
order: [
{
required: true,
message: '模型排序不能为空',
message: this.$t('template.paramter.038405-55'),
trigger: 'blur',
},
],
datatype: [
{
required: true,
message: '数据类型不能为空',
message: this.$t('template.paramter.038405-56'),
trigger: 'change',
},
],
@@ -400,8 +400,8 @@ export default {
} else if (this.form.datatype == 'string') {
data.maxLength = Number(this.form.specs.maxLength ? this.form.specs.maxLength : 1024);
} else if (this.form.datatype == 'bool') {
data.falseText = this.form.specs.falseText ? this.form.specs.falseText : '关闭';
data.trueText = this.form.specs.trueText ? this.form.specs.trueText : '打开';
data.falseText = this.form.specs.falseText ? this.form.specs.falseText : this.$t('template.paramter.038405-57');
data.trueText = this.form.specs.trueText ? this.form.specs.trueText : this.$t('template.paramter.038405-58');
} else if (this.form.datatype == 'array') {
data.arrayType = this.form.specs.arrayType;
} else if (this.form.datatype == 'enum') {
@@ -413,11 +413,11 @@ export default {
data.enumList = [
{
value: '0',
text: '低',
text: this.$t('template.paramter.038405-59'),
},
{
value: '1',
text: '高',
text: this.$t('template.paramter.038405-60'),
},
];
}

View File

@@ -7,7 +7,7 @@
<img :src="logo" alt="logo" style="width: 100px; height: 100px; float: left" />
<div style="float: left; margin-top: 13px; width: 200px; text-align: left">
<div>FastBee</div>
<div style="letter-spacing: 1.5px; font-size: 20px; font-weight: 600; margin-top: -8px; margin-left: 3px">开源物联网平台</div>
<div style="letter-spacing: 1.5px; font-size: 20px; font-weight: 600; margin-top: -8px; margin-left: 3px">{{ $t('login.989807-0') }}</div>
</div>
</div>
</div>
@@ -17,36 +17,34 @@
<div class="alert-box-wrap" v-if="loginForm.bindId != null">
<div v-if="loginForm.bindId != null" class="alert-message-wrap">
<i class="el-icon-warning" />
如果你已经有账号,请直接输入账号进行绑定
{{ $t('login.989807-10') }}
</div>
<el-row>
<el-col :span="10.5">
<div v-if="loginForm.bindId != null" class="alert-message-wrap">如果还没有账号请先去</div>
<div v-if="loginForm.bindId != null" class="alert-message-wrap">{{ $t('login.989807-11') }}</div>
</el-col>
<!-- <el-col :span="4"> -->
<router-link
v-if="loginForm.bindId != null"
:to="{ path: '/register', query: this.$route.query }"
style="margin-left: 10px; font-size: 14px; font-family: '微软雅黑'; color: rgba(41, 96, 197, 0.856)"
>
注册
{{ $t('login.989807-12') }}
</router-link>
<!-- </el-col> -->
</el-row>
</div>
</el-form-item>
<el-form-item prop="username">
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
<el-input v-model="loginForm.username" type="text" auto-complete="off" :placeholder="$t('login.989807-20')">
<svg-icon slot="prefix" icon-class="user" class="input-icon" />
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码" @keyup.enter.native="handleLogin">
<el-input v-model="loginForm.password" type="password" auto-complete="off" :placeholder="$t('login.989807-21')" @keyup.enter.native="handleLogin">
<svg-icon slot="prefix" icon-class="password" class="input-icon" />
</el-input>
</el-form-item>
<el-form-item v-if="captchaOnOff" prop="code">
<el-input v-model="loginForm.code" auto-complete="off" placeholder="验证码" style="width: 63%" @keyup.enter.native="handleLogin">
<el-input v-model="loginForm.code" auto-complete="off" :placeholder="$t('login.989807-22')" style="width: 63%" @keyup.enter.native="handleLogin">
<svg-icon slot="prefix" icon-class="validCode" class="input-icon" />
</el-input>
@@ -54,8 +52,10 @@
<img :src="codeUrl" @click="getCode" />
</div>
</el-form-item>
<el-checkbox v-model="loginForm.rememberMe" style="margin: 0px 0px 25px 0px; color: #000">记住密码</el-checkbox>
<div style="display: flex; justify-content: space-between">
<el-checkbox v-model="loginForm.rememberMe" style="margin: 0px 0px 25px 0px; color: #000">{{ $t('login.989807-7') }}</el-checkbox>
<langSelect class="lang"></langSelect>
</div>
<el-form-item style="width: 100%">
<div style="margin-bottom: 10px">
<!-- <el-button v-if="!bindAccount" :loading="loading" type="primary" style="width: 100%"
@@ -65,28 +65,28 @@
</el-button> -->
<div v-if="!bindId">
<el-button class="btn" :loading="loading" type="primary" @click.native.prevent="handleLogin">
<span v-if="!loading"> </span>
<span v-else> 中...</span>
<span v-if="!loading">{{ $t('login.989807-3') }}</span>
<span v-else>{{ $t('login.989807-13') }}</span>
</el-button>
</div>
<div v-else>
<el-button class="btn" :loading="loading" type="primary" @click.native.prevent="handleBindLogin">
<span v-if="!loading">绑定并登录</span>
<span v-else>绑定中...</span>
<span v-if="!loading">{{ $t('login.989807-15') }}</span>
<span v-else>{{ $t('login.989807-16') }}</span>
</el-button>
<el-button style="margin: 16px 0 0 0" class="btn" @click.native.prevent="handleBackLogin">
<span>返回登录</span>
<span>{{ $t('login.989807-44') }}</span>
</el-button>
</div>
<el-row>
<div>
<el-link href="https://fastbee.cn/" :underline="false" target="_blank" style="float: left">返回官网</el-link>
<el-link href="https://fastbee.cn/doc" :underline="false" target="_blank" style="float: left; margin-left: 20px">查看文档</el-link>
<router-link v-if="!bindAccount" :to="{ path: '/register', query: this.$route.query }" style="float: left; margin-left: 20px">注册账号</router-link>
<el-link href="https://fastbee.cn/" :underline="false" target="_blank" style="float: left">{{ $t('login.989807-41') }}</el-link>
<el-link href="https://fastbee.cn/doc" :underline="false" target="_blank" style="float: left; margin-left: 20px">{{ $t('login.989807-40') }}</el-link>
<router-link v-if="!bindAccount" :to="{ path: '/register', query: this.$route.query }" style="float: left; margin-left: 20px">{{ $t('login.989807-18') }}</router-link>
</div>
</el-row>
<div class="other-login">
<span class="text">其他登录方式</span>
<span class="text">{{ $t('login.989807-42') }}</span>
<svg-icon class="icon" icon-class="wechat" style="color: #07c160" @click="handleGotoWeChatLogin" />
</div>
</div>
@@ -112,9 +112,11 @@ import { getCodeImg, checkBindId, getErrorMsg, socialLogin, bindLogin } from '@/
import Cookies from 'js-cookie';
import { encrypt, decrypt } from '@/utils/jsencrypt';
import { setToken } from '@/utils/auth';
import langSelect from '@/layout/components/langSelect';
export default {
name: 'Login',
components: { langSelect },
data() {
return {
logo,
@@ -133,21 +135,21 @@ export default {
{
required: true,
trigger: 'blur',
message: '请输入您的账号',
message: this.$t('login.989807-20'),
},
],
password: [
{
required: true,
trigger: 'blur',
message: '请输入您的密码',
message: this.$t('login.989807-21'),
},
],
code: [
{
required: true,
trigger: 'change',
message: '请输入验证码',
message: this.$t('login.989807-22'),
},
],
},
@@ -376,8 +378,8 @@ export default {
window.location.href = baseURL + '/auth/render/wechat_open_web';
},
authLogin() {
this.$alert('第三方登录正在集成中...', '提示消息', {
confirmButtonText: '确定',
this.$alert(this.$t('login.989807-63'), this.$t('login.989807-32'), {
confirmButtonText: this.$t('confirm'),
callback: (action) => {
this.$message({
type: 'info',

View File

@@ -3,38 +3,38 @@
<el-row>
<el-col :span="24" class="card-box">
<el-card>
<div slot="header"><span>基本信息</span></div>
<div slot="header"><span>{{ $t('monitor.cache.index.501234-0') }}</span></div>
<div class="el-table el-table--enable-row-hover el-table--medium">
<table cellspacing="0" style="width: 100%">
<tbody>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">Redis版本</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.cache.index.501234-1') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.redis_version }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">运行模式</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.redis_mode == "standalone" ? "单机" : "集群" }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">端口</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.cache.index.501234-2') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.redis_mode == "standalone" ? $t('monitor.cache.index.501234-3') : $t('monitor.cache.index.501234-4') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.cache.index.501234-5') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.tcp_port }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">客户端数</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.cache.index.501234-6') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.connected_clients }}</div></td>
</tr>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">运行时间()</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.cache.index.501234-7') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.uptime_in_days }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">使用内存</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.cache.index.501234-8') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.used_memory_human }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">使用CPU</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.cache.index.501234-9') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ parseFloat(cache.info.used_cpu_user_children).toFixed(2) }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">内存配置</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.cache.index.501234-10') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.maxmemory_human }}</div></td>
</tr>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">AOF是否开启</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.aof_enabled == "0" ? "否" : "是" }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">RDB是否成功</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.cache.index.501234-11') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.aof_enabled == "0" ? $t('monitor.cache.index.501234-13') : $t('monitor.cache.index.501234-12') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.cache.index.501234-14') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.rdb_last_bgsave_status }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">Key数量</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.cache.index.501234-15') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.dbSize">{{ cache.dbSize }} </div></td>
<td class="el-table__cell is-leaf"><div class="cell">网络入口/出口</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.cache.index.501234-16') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.instantaneous_input_kbps }}kps/{{cache.info.instantaneous_output_kbps}}kps</div></td>
</tr>
</tbody>
@@ -45,7 +45,7 @@
<el-col :span="12" class="card-box">
<el-card>
<div slot="header"><span>命令统计</span></div>
<div slot="header"><span>{{ $t('monitor.cache.index.501234-17') }}</span></div>
<div class="el-table el-table--enable-row-hover el-table--medium">
<div ref="commandstats" style="height: 420px" />
</div>
@@ -55,7 +55,7 @@
<el-col :span="12" class="card-box">
<el-card>
<div slot="header">
<span>内存信息</span>
<span>{{ $t('monitor.cache.index.501234-18') }}</span>
</div>
<div class="el-table el-table--enable-row-hover el-table--medium">
<div ref="usedmemory" style="height: 420px" />
@@ -101,7 +101,7 @@ export default {
},
series: [
{
name: "命令",
name: this.$i18n.t('monitor.cache.index.501234-19'),
type: "pie",
roseType: "radius",
radius: [15, 95],
@@ -119,7 +119,7 @@ export default {
},
series: [
{
name: "峰值",
name: this.$i18n.t('monitor.cache.index.501234-20'),
type: "gauge",
min: 0,
max: 1000,
@@ -129,7 +129,7 @@ export default {
data: [
{
value: parseFloat(this.cache.info.used_memory_human),
name: "内存消耗",
name: this.$i18n.t('monitor.cache.index.501234-21'),
}
]
}
@@ -139,7 +139,7 @@ export default {
},
// 打开加载层
openLoading() {
this.$modal.loading("正在加载缓存监控数据,请稍候!");
this.$modal.loading(this.$i18n.t('monitor.cache.index.501234-22'));
}
}
};

View File

@@ -4,7 +4,7 @@
<el-col :span="8">
<el-card style="height: calc(100vh - 125px)">
<div slot="header">
<span>缓存列表</span>
<span>{{ $t('monitor.cache.list.501235-0') }}</span>
<el-button
style="float: right; padding: 3px 0"
type="text"
@@ -21,13 +21,13 @@
style="width: 100%"
>
<el-table-column
label="序号"
:label="$t('monitor.cache.list.501235-1')"
width="60"
type="index"
></el-table-column>
<el-table-column
label="缓存名称"
:label="$t('monitor.cache.list.501235-2')"
align="center"
prop="cacheName"
:show-overflow-tooltip="true"
@@ -35,13 +35,13 @@
></el-table-column>
<el-table-column
label="备注"
:label="$t('common.remark')"
align="center"
prop="remark"
:show-overflow-tooltip="true"
/>
<el-table-column
label="操作"
:label="$t('common.opation')"
width="60"
align="center"
class-name="small-padding fixed-width"
@@ -62,7 +62,7 @@
<el-col :span="8">
<el-card style="height: calc(100vh - 125px)">
<div slot="header">
<span>键名列表</span>
<span>{{ $t('monitor.cache.list.501235-5') }}</span>
<el-button
style="float: right; padding: 3px 0"
type="text"
@@ -79,19 +79,19 @@
style="width: 100%"
>
<el-table-column
label="序号"
:label="$t('monitor.cache.list.501235-1')"
width="60"
type="index"
></el-table-column>
<el-table-column
label="缓存键名"
:label="$t('monitor.cache.list.501235-6')"
align="center"
:show-overflow-tooltip="true"
:formatter="keyFormatter"
>
</el-table-column>
<el-table-column
label="操作"
:label="$t('common.opation')"
width="60"
align="center"
class-name="small-padding fixed-width"
@@ -112,29 +112,29 @@
<el-col :span="8">
<el-card :bordered="false" style="height: calc(100vh - 125px)">
<div slot="header">
<span>缓存内容</span>
<span>{{ $t('monitor.cache.list.501235-7') }}</span>
<el-button
style="float: right; padding: 3px 0"
type="text"
icon="el-icon-refresh-right"
@click="handleClearCacheAll()"
>清理全部</el-button
>{{ $t('monitor.cache.list.501235-11') }}</el-button
>
</div>
<el-form :model="cacheForm">
<el-row :gutter="32">
<el-col :offset="1" :span="22">
<el-form-item label="缓存名称:" prop="cacheName">
<el-form-item :label="$t('monitor.cache.list.501235-8')" prop="cacheName">
<el-input v-model="cacheForm.cacheName" :readOnly="true" />
</el-form-item>
</el-col>
<el-col :offset="1" :span="22">
<el-form-item label="缓存键名:" prop="cacheKey">
<el-form-item :label="$t('monitor.cache.list.501235-9')" prop="cacheKey">
<el-input v-model="cacheForm.cacheKey" :readOnly="true" />
</el-form-item>
</el-col>
<el-col :offset="1" :span="22">
<el-form-item label="缓存内容:" prop="cacheValue">
<el-form-item :label="$t('monitor.cache.list.501235-10')" prop="cacheValue">
<el-input
v-model="cacheForm.cacheValue"
type="textarea"
@@ -182,12 +182,12 @@ export default {
/** 刷新缓存名称列表 */
refreshCacheNames() {
this.getCacheNames();
this.$modal.msgSuccess("刷新缓存列表成功");
this.$modal.msgSuccess(this.$i18n.t('monitor.cache.list.501235-12'));
},
/** 清理指定名称缓存 */
handleClearCacheName(row) {
clearCacheName(row.cacheName).then(response => {
this.$modal.msgSuccess("清理缓存名称[" + this.nowCacheName + "]成功");
this.$modal.msgSuccess(this.$i18n.t('monitor.cache.list.501235-13', [this.nowCacheName]));
this.getCacheKeys();
});
},
@@ -207,12 +207,12 @@ export default {
/** 刷新缓存键名列表 */
refreshCacheKeys() {
this.getCacheKeys();
this.$modal.msgSuccess("刷新键名列表成功");
this.$modal.msgSuccess(this.$i18n.t('monitor.cache.list.501235-14'));
},
/** 清理指定键名缓存 */
handleClearCacheKey(cacheKey) {
clearCacheKey(cacheKey).then(response => {
this.$modal.msgSuccess("清理缓存键名[" + cacheKey + "]成功");
this.$modal.msgSuccess(this.$i18n.t('monitor.cache.list.501235-15', [cacheKey]));
this.getCacheKeys();
});
},
@@ -233,7 +233,7 @@ export default {
/** 清理全部缓存 */
handleClearCacheAll() {
clearCacheAll().then(response => {
this.$modal.msgSuccess("清理全部缓存成功");
this.$modal.msgSuccess(this.$i18n.t('monitor.cache.list.501235-16'));
});
}
},

View File

@@ -1,16 +1,16 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="任务名称" prop="jobName">
<el-form-item :label="$t('system.job.356378-0')" prop="jobName">
<el-input
v-model="queryParams.jobName"
placeholder="请输入任务名称"
:placeholder="$t('system.job.356378-1')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="任务组名" prop="jobGroup">
<el-select v-model="queryParams.jobGroup" placeholder="请选择任务组名" clearable>
<el-form-item :label="$t('system.job.356378-2')" prop="jobGroup">
<el-select v-model="queryParams.jobGroup" :placeholder="$t('system.job.356378-3')" clearable>
<el-option
v-for="dict in dict.type.sys_job_group"
:key="dict.value"
@@ -19,8 +19,8 @@
/>
</el-select>
</el-form-item>
<el-form-item label="任务状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择任务状态" clearable>
<el-form-item :label="$t('system.job.356378-4')" prop="status">
<el-select v-model="queryParams.status" :placeholder="$t('system.job.356378-5')" clearable>
<el-option
v-for="dict in dict.type.sys_job_status"
:key="dict.value"
@@ -30,8 +30,8 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
</el-form-item>
</el-form>
@@ -44,7 +44,7 @@
size="mini"
@click="handleAdd"
v-hasPermi="['monitor:job:add']"
>新增</el-button>
>{{ $t('add') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -55,7 +55,7 @@
:disabled="single"
@click="handleUpdate"
v-hasPermi="['monitor:job:edit']"
>修改</el-button>
>{{ $t('update') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -66,7 +66,7 @@
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['monitor:job:remove']"
>删除</el-button>
>{{ $t('del') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -76,7 +76,7 @@
size="mini"
@click="handleExport"
v-hasPermi="['monitor:job:export']"
>导出</el-button>
>{{ $t('export') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -86,23 +86,23 @@
size="mini"
@click="handleJobLog"
v-hasPermi="['monitor:job:query']"
>日志</el-button>
>{{ $t('system.job.356378-6') }}</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="jobList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="任务编号" width="100" align="center" prop="jobId" />
<el-table-column label="任务名称" align="center" prop="jobName" :show-overflow-tooltip="true" />
<el-table-column label="任务组名" align="center" prop="jobGroup">
<el-table-column :label="$t('system.job.356378-7')" width="100" align="center" prop="jobId" />
<el-table-column :label="$t('system.job.356378-0')" align="center" prop="jobName" :show-overflow-tooltip="true" />
<el-table-column :label="$t('system.job.356378-2')" align="center" prop="jobGroup">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_job_group" :value="scope.row.jobGroup"/>
</template>
</el-table-column>
<el-table-column label="调用目标字符串" align="center" prop="invokeTarget" :show-overflow-tooltip="true" />
<el-table-column label="cron执行表达式" align="center" prop="cronExpression" :show-overflow-tooltip="true" />
<el-table-column label="状态" align="center">
<el-table-column :label="$t('system.job.356378-8')" align="center" prop="invokeTarget" :show-overflow-tooltip="true" />
<el-table-column :label="$t('system.job.356378-9')" align="center" prop="cronExpression" :show-overflow-tooltip="true" />
<el-table-column :label="$t('status')" align="center">
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
@@ -112,7 +112,7 @@
></el-switch>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('opation')" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
@@ -120,23 +120,23 @@
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['monitor:job:edit']"
>修改</el-button>
>{{ $t('update') }}</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['monitor:job:remove']"
>删除</el-button>
>{{ $t('del') }}</el-button>
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['monitor:job:changeStatus', 'monitor:job:query']">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">{{ $t('more') }}</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="handleRun" icon="el-icon-caret-right"
v-hasPermi="['monitor:job:changeStatus']">执行一次</el-dropdown-item>
v-hasPermi="['monitor:job:changeStatus']">{{ $t('system.job.356378-10') }}</el-dropdown-item>
<el-dropdown-item command="handleView" icon="el-icon-view"
v-hasPermi="['monitor:job:query']">任务详细</el-dropdown-item>
v-hasPermi="['monitor:job:query']">{{ $t('system.job.356378-11') }}</el-dropdown-item>
<el-dropdown-item command="handleJobLog" icon="el-icon-s-operation"
v-hasPermi="['monitor:job:query']">调度日志</el-dropdown-item>
v-hasPermi="['monitor:job:query']">{{ $t('system.job.356378-12') }}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
@@ -156,13 +156,13 @@
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="12">
<el-form-item label="任务名称" prop="jobName">
<el-input v-model="form.jobName" placeholder="请输入任务名称" />
<el-form-item :label="$t('system.job.356378-0')" prop="jobName">
<el-input v-model="form.jobName" :placeholder="$t('system.job.356378-1')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="任务分组" prop="jobGroup">
<el-select v-model="form.jobGroup" placeholder="请选择任务分组">
<el-form-item :label="$t('system.job.356378-13')" prop="jobGroup">
<el-select v-model="form.jobGroup" :placeholder="$t('system.job.356378-14')">
<el-option
v-for="dict in dict.type.sys_job_group"
:key="dict.value"
@@ -175,25 +175,25 @@
<el-col :span="24">
<el-form-item prop="invokeTarget">
<span slot="label">
调用方法
{{ $t('system.job.356378-15') }}
<el-tooltip placement="top">
<div slot="content">
Bean调用示例ryTask.ryParams('ry')
<br />Class类调用示例com.ruoyi.quartz.task.RyTask.ryParams('ry')
<br />参数说明支持字符串布尔类型长整型浮点型整型
{{ $t('system.job.356378-16') }}
<br />{{ $t('system.job.356378-17') }}
<br />{{ $t('system.job.356378-18') }}
</div>
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-input v-model="form.invokeTarget" placeholder="请输入调用目标字符串" />
<el-input v-model="form.invokeTarget" :placeholder="$t('system.job.356378-8')" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="cron表达式" prop="cronExpression">
<el-input v-model="form.cronExpression" placeholder="请输入cron执行表达式">
<el-form-item :label="$t('system.job.356378-19')" prop="cronExpression">
<el-input v-model="form.cronExpression" :placeholder="$t('system.job.356378-20')">
<template slot="append">
<el-button type="primary" @click="handleShowCron">
生成表达式
{{ $t('system.job.356378-21') }}
<i class="el-icon-time el-icon--right"></i>
</el-button>
</template>
@@ -201,24 +201,24 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="执行策略" prop="misfirePolicy">
<el-form-item :label="$t('system.job.356378-22')" prop="misfirePolicy">
<el-radio-group v-model="form.misfirePolicy" size="small">
<el-radio-button label="1">立即执行</el-radio-button>
<el-radio-button label="2">执行一次</el-radio-button>
<el-radio-button label="3">放弃执行</el-radio-button>
<el-radio-button label="1">{{ $t('system.job.356378-23') }}</el-radio-button>
<el-radio-button label="2">{{ $t('system.job.356378-10') }}</el-radio-button>
<el-radio-button label="3">{{ $t('system.job.356378-24') }}</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否并发" prop="concurrent">
<el-form-item :label="$t('system.job.356378-25')" prop="concurrent">
<el-radio-group v-model="form.concurrent" size="small">
<el-radio-button label="0">允许</el-radio-button>
<el-radio-button label="1">禁止</el-radio-button>
<el-radio-button label="0">{{ $t('system.job.356378-26') }}</el-radio-button>
<el-radio-button label="1">{{ $t('system.job.356378-27') }}</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态">
<el-form-item :label="$t('status')">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in dict.type.sys_job_status"
@@ -231,60 +231,60 @@
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm">{{ $t('confirm') }}</el-button>
<el-button @click="cancel">{{ $t('cancel') }}</el-button>
</div>
</el-dialog>
<el-dialog title="Cron表达式生成器" :visible.sync="openCron" append-to-body destroy-on-close class="scrollbar">
<el-dialog :title="$t('system.job.356378-28')" :visible.sync="openCron" append-to-body destroy-on-close class="scrollbar">
<crontab @hide="openCron=false" @fill="crontabFill" :expression="expression"></crontab>
</el-dialog>
<!-- 任务日志详细 -->
<el-dialog title="任务详细" :visible.sync="openView" width="700px" append-to-body>
<el-dialog :title="$t('system.job.356378-11')" :visible.sync="openView" width="700px" append-to-body>
<el-form ref="form" :model="form" label-width="120px" size="mini">
<el-row>
<el-col :span="12">
<el-form-item label="任务编号:">{{ form.jobId }}</el-form-item>
<el-form-item label="任务名称:">{{ form.jobName }}</el-form-item>
<el-form-item :label="$t('system.job.356378-29')">{{ form.jobId }}</el-form-item>
<el-form-item :label="$t('system.job.356378-30')">{{ form.jobName }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="任务分组:">{{ jobGroupFormat(form) }}</el-form-item>
<el-form-item label="创建时间:">{{ form.createTime }}</el-form-item>
<el-form-item :label="$t('system.job.356378-31')">{{ jobGroupFormat(form) }}</el-form-item>
<el-form-item :label="$t('system.job.356378-32')">{{ form.createTime }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="cron表达式">{{ form.cronExpression }}</el-form-item>
<el-form-item :label="$t('system.job.356378-33')">{{ form.cronExpression }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="下次执行时间:">{{ parseTime(form.nextValidTime) }}</el-form-item>
<el-form-item :label="$t('system.job.356378-34')">{{ parseTime(form.nextValidTime) }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="调用目标方法:">{{ form.invokeTarget }}</el-form-item>
<el-form-item :label="$t('system.job.356378-35')">{{ form.invokeTarget }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="任务状态:">
<div v-if="form.status == 0">正常</div>
<div v-else-if="form.status == 1">失败</div>
<el-form-item :label="$t('system.job.356378-36')">
<div v-if="form.status == 0">{{ $t('system.job.356378-37') }}</div>
<div v-else-if="form.status == 1">{{ $t('system.job.356378-38') }}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否并发:">
<div v-if="form.concurrent == 0">允许</div>
<div v-else-if="form.concurrent == 1">禁止</div>
<el-form-item :label="$t('system.job.356378-25') + ''">
<div v-if="form.concurrent == 0">{{ $t('system.job.356378-26') }}</div>
<div v-else-if="form.concurrent == 1">{{ $t('system.job.356378-27') }}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="执行策略:">
<div v-if="form.misfirePolicy == 0">默认策略</div>
<div v-else-if="form.misfirePolicy == 1">立即执行</div>
<div v-else-if="form.misfirePolicy == 2">执行一次</div>
<div v-else-if="form.misfirePolicy == 3">放弃执行</div>
<el-form-item :label="$t('system.job.356378-39')">
<div v-if="form.misfirePolicy == 0">{{ $t('system.job.356378-40') }}</div>
<div v-else-if="form.misfirePolicy == 1">{{ $t('system.job.356378-23') }}</div>
<div v-else-if="form.misfirePolicy == 2">{{ $t('system.job.356378-10') }}</div>
<div v-else-if="form.misfirePolicy == 3">{{ $t('system.job.356378-24') }}</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="openView = false"> </el-button>
<el-button @click="openView = false">{{ $t('close') }}</el-button>
</div>
</el-dialog>
</div>
@@ -337,13 +337,13 @@ export default {
// 表单校验
rules: {
jobName: [
{ required: true, message: "任务名称不能为空", trigger: "blur" }
{ required: true, message: this.$t('system.job.356378-41'), trigger: "blur" }
],
invokeTarget: [
{ required: true, message: "调用目标字符串不能为空", trigger: "blur" }
{ required: true, message: this.$t('system.job.356378-42'), trigger: "blur" }
],
cronExpression: [
{ required: true, message: "cron执行表达式不能为空", trigger: "blur" }
{ required: true, message: this.$t('system.job.356378-43'), trigger: "blur" }
]
}
};
@@ -418,21 +418,21 @@ export default {
},
// 任务状态修改
handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用";
this.$modal.confirm('确认要"' + text + '""' + row.jobName + '"任务吗?').then(function() {
let text = row.status === "0" ? this.$t('system.job.356378-26') : this.$t('system.job.356378-27');
this.$modal.confirm(this.$t('system.job.356378-44') + '"' + text + '""' + row.jobName + '"' + this.$t('system.job.356378-45')).then(function() {
return changeJobStatus(row.jobId, row.status);
}).then(() => {
this.$modal.msgSuccess(text + "成功");
this.$modal.msgSuccess(text + this.$t('success'));
}).catch(function() {
row.status = row.status === "0" ? "1" : "0";
});
},
/* 立即执行一次 */
handleRun(row) {
this.$modal.confirm('确认要立即执行一次"' + row.jobName + '"任务吗?').then(function() {
this.$modal.confirm(this.$t('system.job.356378-46') + '"' + row.jobName + '"' + this.$t('system.job.356378-45')).then(function() {
return runJob(row.jobId, row.jobGroup);
}).then(() => {
this.$modal.msgSuccess("执行成功");
this.$modal.msgSuccess(this.$t('system.job.356378-47'));
}).catch(() => {});
},
/** 任务详细信息 */
@@ -460,7 +460,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = "添加任务";
this.title = this.$t('system.job.356378-48');
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -469,7 +469,7 @@ export default {
getJob(jobId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改任务";
this.title = this.$t('system.job.356378-49');
});
},
/** 提交按钮 */
@@ -478,13 +478,13 @@ export default {
if (valid) {
if (this.form.jobId != undefined) {
updateJob(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.$modal.msgSuccess(this.$t('updateSuccess'));
this.open = false;
this.getList();
});
} else {
addJob(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.$modal.msgSuccess(this.$t('addSuccess'));
this.open = false;
this.getList();
});
@@ -495,11 +495,11 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const jobIds = row.jobId || this.ids;
this.$modal.confirm('是否确认删除定时任务编号为"' + jobIds + '"的数据项?').then(function() {
this.$modal.confirm(this.$t('system.job.356378-50', [jobIds])).then(function() {
return delJob(jobIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
this.$modal.msgSuccess(this.$t('delSuccess'));
}).catch(() => {});
},
/** 导出按钮操作 */
@@ -510,4 +510,3 @@ export default {
}
}
};
</script>

View File

@@ -1,19 +1,19 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="任务名称" prop="jobName">
<el-form-item :label="$t('monitor.jobLog.670911-0')" prop="jobName">
<el-input
v-model="queryParams.jobName"
placeholder="请输入任务名称"
:placeholder="$t('monitor.jobLog.670911-1')"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="任务组名" prop="jobGroup">
<el-form-item :label="$t('monitor.jobLog.670911-2')" prop="jobGroup">
<el-select
v-model="queryParams.jobGroup"
placeholder="请选择任务组名"
:placeholder="$t('monitor.jobLog.670911-3')"
clearable
style="width: 240px"
>
@@ -25,10 +25,10 @@
/>
</el-select>
</el-form-item>
<el-form-item label="执行状态" prop="status">
<el-form-item :label="$t('monitor.jobLog.670911-4')" prop="status">
<el-select
v-model="queryParams.status"
placeholder="请选择执行状态"
:placeholder="$t('monitor.jobLog.670911-5')"
clearable
style="width: 240px"
>
@@ -40,20 +40,20 @@
/>
</el-select>
</el-form-item>
<el-form-item label="执行时间">
<el-form-item :label="$t('monitor.jobLog.670911-6')">
<el-date-picker
v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:start-placeholder="$t('monitor.jobLog.670911-7')"
:end-placeholder="$t('monitor.jobLog.670911-8')"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
</el-form-item>
</el-form>
@@ -67,7 +67,7 @@
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['monitor:job:remove']"
>删除</el-button>
>{{ $t('del') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -77,7 +77,7 @@
size="mini"
@click="handleClean"
v-hasPermi="['monitor:job:remove']"
>清空</el-button>
>{{ $t('clean') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -87,7 +87,7 @@
size="mini"
@click="handleExport"
v-hasPermi="['monitor:job:export']"
>导出</el-button>
>{{ $t('export') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -96,33 +96,33 @@
icon="el-icon-close"
size="mini"
@click="handleClose"
>关闭</el-button>
>{{ $t('close') }}</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="jobLogList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="日志编号" width="80" align="center" prop="jobLogId" />
<el-table-column label="任务名称" align="center" prop="jobName" :show-overflow-tooltip="true" />
<el-table-column label="任务组名" align="center" prop="jobGroup" :show-overflow-tooltip="true">
<el-table-column :label="$t('monitor.jobLog.670911-9')" width="80" align="center" prop="jobLogId" />
<el-table-column :label="$t('monitor.jobLog.670911-0')" align="center" prop="jobName" :show-overflow-tooltip="true" />
<el-table-column :label="$t('monitor.jobLog.670911-2')" align="center" prop="jobGroup" :show-overflow-tooltip="true">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_job_group" :value="scope.row.jobGroup"/>
</template>
</el-table-column>
<el-table-column label="调用目标字符串" align="center" prop="invokeTarget" :show-overflow-tooltip="true" />
<el-table-column label="日志信息" align="center" prop="jobMessage" :show-overflow-tooltip="true" />
<el-table-column label="执行状态" align="center" prop="status">
<el-table-column :label="$t('monitor.jobLog.670911-10')" align="center" prop="invokeTarget" :show-overflow-tooltip="true" />
<el-table-column :label="$t('monitor.jobLog.670911-11')" align="center" prop="jobMessage" :show-overflow-tooltip="true" />
<el-table-column :label="$t('monitor.jobLog.670911-4')" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="执行时间" align="center" prop="createTime" width="180">
<el-table-column :label="$t('monitor.jobLog.670911-6')" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('opation')" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
@@ -130,7 +130,7 @@
icon="el-icon-view"
@click="handleView(scope.row)"
v-hasPermi="['monitor:job:query']"
>详细</el-button>
>{{ $t('detail') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -144,36 +144,36 @@
/>
<!-- 调度日志详细 -->
<el-dialog title="调度日志详细" :visible.sync="open" width="700px" append-to-body>
<el-dialog :title="$t('monitor.jobLog.670911-12')" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" label-width="100px" size="mini">
<el-row>
<el-col :span="12">
<el-form-item label="日志序号:">{{ form.jobLogId }}</el-form-item>
<el-form-item label="任务名称:">{{ form.jobName }}</el-form-item>
<el-form-item :label="$t('monitor.jobLog.670911-13')">{{ form.jobLogId }}</el-form-item>
<el-form-item :label="$t('monitor.jobLog.670911-0')">{{ form.jobName }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="任务分组:">{{ form.jobGroup }}</el-form-item>
<el-form-item label="执行时间:">{{ form.createTime }}</el-form-item>
<el-form-item :label="$t('monitor.jobLog.670911-14')">{{ form.jobGroup }}</el-form-item>
<el-form-item :label="$t('monitor.jobLog.670911-15')">{{ form.createTime }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="调用方法:">{{ form.invokeTarget }}</el-form-item>
<el-form-item :label="$t('monitor.jobLog.670911-16')">{{ form.invokeTarget }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="日志信息:">{{ form.jobMessage }}</el-form-item>
<el-form-item :label="$t('monitor.jobLog.670911-11')">{{ form.jobMessage }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="执行状态:">
<div v-if="form.status == 0">正常</div>
<div v-else-if="form.status == 1">失败</div>
<el-form-item :label="$t('monitor.jobLog.670911-4')">
<div v-if="form.status == 0">{{ $t('monitor.jobLog.670911-17') }}</div>
<div v-else-if="form.status == 1">{{ $t('monitor.jobLog.670911-18') }}</div>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="异常信息:" v-if="form.status == 1">{{ form.exceptionInfo }}</el-form-item>
<el-form-item :label="$t('monitor.jobLog.670911-19')" v-if="form.status == 1">{{ form.exceptionInfo }}</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="open = false"> </el-button>
<el-button @click="open = false">{{ $t('close') }}</el-button>
</div>
</el-dialog>
</div>
@@ -268,20 +268,20 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const jobLogIds = this.ids;
this.$modal.confirm('是否确认删除调度日志编号为"' + jobLogIds + '"的数据项?').then(function() {
this.$modal.confirm(this.$t('monitor.jobLog.670911-20', [jobLogIds])).then(function() {
return delJobLog(jobLogIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
this.$modal.msgSuccess(this.$t('delSuccess'));
}).catch(() => {});
},
/** 清空按钮操作 */
handleClean() {
this.$modal.confirm('是否确认清空所有调度日志数据项?').then(function() {
this.$modal.confirm(this.$t('monitor.jobLog.670911-21')).then(function() {
return cleanJobLog();
}).then(() => {
this.getList();
this.$modal.msgSuccess("清空成功");
this.$modal.msgSuccess(this.$t('cleanSuccess'));
}).catch(() => {});
},
/** 导出按钮操作 */

View File

@@ -1,28 +1,28 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="登录地址" prop="ipaddr">
<el-form-item :label="$t('monitor.logininfor.670912-0')" prop="ipaddr">
<el-input
v-model="queryParams.ipaddr"
placeholder="请输入登录地址"
:placeholder="$t('monitor.logininfor.670912-1')"
clearable
style="width: 240px;"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户名称" prop="userName">
<el-form-item :label="$t('monitor.logininfor.670912-2')" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入用户名称"
:placeholder="$t('monitor.logininfor.670912-3')"
clearable
style="width: 240px;"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-form-item :label="$t('monitor.logininfor.670912-4')" prop="status">
<el-select
v-model="queryParams.status"
placeholder="登录状态"
:placeholder="$t('monitor.logininfor.670912-5')"
clearable
style="width: 240px"
>
@@ -34,20 +34,20 @@
/>
</el-select>
</el-form-item>
<el-form-item label="登录时间">
<el-form-item :label="$t('monitor.logininfor.670912-6')">
<el-date-picker
v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:start-placeholder="$t('monitor.logininfor.670912-7')"
:end-placeholder="$t('monitor.logininfor.670912-8')"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
</el-form-item>
</el-form>
@@ -61,7 +61,7 @@
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['monitor:logininfor:remove']"
>删除</el-button>
>{{ $t('del') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -71,7 +71,7 @@
size="mini"
@click="handleClean"
v-hasPermi="['monitor:logininfor:remove']"
>清空</el-button>
>{{ $t('clean') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -82,7 +82,7 @@
:disabled="single"
@click="handleUnlock"
v-hasPermi="['monitor:logininfor:unlock']"
>解锁</el-button>
>{{ $t('monitor.logininfor.670912-9') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -92,26 +92,26 @@
size="mini"
@click="handleExport"
v-hasPermi="['monitor:logininfor:export']"
>导出</el-button>
>{{ $t('export') }}</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="访问编号" align="center" prop="infoId" />
<el-table-column label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
<el-table-column label="登录地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" />
<el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
<el-table-column label="浏览器" align="center" prop="browser" :show-overflow-tooltip="true" />
<el-table-column label="操作系统" align="center" prop="os" />
<el-table-column label="登录状态" align="center" prop="status">
<el-table-column :label="$t('monitor.logininfor.670912-10')" align="center" prop="infoId" />
<el-table-column :label="$t('monitor.logininfor.670912-2')" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
<el-table-column :label="$t('monitor.logininfor.670912-0')" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" />
<el-table-column :label="$t('monitor.logininfor.670912-11')" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
<el-table-column :label="$t('monitor.logininfor.670912-12')" align="center" prop="browser" :show-overflow-tooltip="true" />
<el-table-column :label="$t('monitor.logininfor.670912-13')" align="center" prop="os" />
<el-table-column :label="$t('monitor.logininfor.670912-4')" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="操作信息" align="center" prop="msg" />
<el-table-column label="登录日期" align="center" prop="loginTime" sortable="custom" :sort-orders="['descending', 'ascending']" width="180">
<el-table-column :label="$t('monitor.logininfor.670912-14')" align="center" prop="msg" />
<el-table-column :label="$t('monitor.logininfor.670912-6')" align="center" prop="loginTime" sortable="custom" :sort-orders="['descending', 'ascending']" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.loginTime) }}</span>
</template>
@@ -208,29 +208,29 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const infoIds = row.infoId || this.ids;
this.$modal.confirm('是否确认删除访问编号为"' + infoIds + '"的数据项?').then(function() {
this.$modal.confirm(this.$t('monitor.logininfor.670912-15', [infoIds])).then(function() {
return delLogininfor(infoIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
this.$modal.msgSuccess(this.$t('delSuccess'));
}).catch(() => {});
},
/** 清空按钮操作 */
handleClean() {
this.$modal.confirm('是否确认清空所有登录日志数据项?').then(function() {
this.$modal.confirm(this.$t('monitor.logininfor.670912-16')).then(function() {
return cleanLogininfor();
}).then(() => {
this.getList();
this.$modal.msgSuccess("清空成功");
this.$modal.msgSuccess(this.$t('cleanSuccess'));
}).catch(() => {});
},
/** 解锁按钮操作 */
handleUnlock() {
const username = this.selectName;
this.$modal.confirm('是否确认解锁用户"' + username + '"数据项?').then(function() {
this.$modal.confirm(this.$t('monitor.logininfor.670912-17', [username])).then(function() {
return unlockLogininfor(username);
}).then(() => {
this.$modal.msgSuccess("用户" + username + "解锁成功");
this.$modal.msgSuccess(this.$t('monitor.logininfor.670912-18', [username]));
}).catch(() => {});
},
/** 导出按钮操作 */

View File

@@ -1,72 +1,51 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="登录地址" prop="ipaddr">
<el-input
v-model="queryParams.ipaddr"
placeholder="请输入登录地址"
clearable
@keyup.enter.native="handleQuery"
/>
<el-form-item :label="$t('online.093480-0')" prop="ipaddr">
<el-input v-model="queryParams.ipaddr" :placeholder="$t('online.093480-1')" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="用户名称" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入用户名称"
clearable
@keyup.enter.native="handleQuery"
/>
<el-form-item :label="$t('online.093480-5')" prop="userName">
<el-input v-model="queryParams.userName" :placeholder="$t('online.093480-2')" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
</el-form-item>
</el-form>
<el-table
v-loading="loading"
:data="list.slice((pageNum-1)*pageSize,pageNum*pageSize)"
style="width: 100%;"
>
<el-table-column label="序号" type="index" align="center">
<el-table v-loading="loading" :data="list.slice((pageNum - 1) * pageSize, pageNum * pageSize)" style="width: 100%">
<el-table-column :label="$t('online.093480-3')" type="index" align="center">
<template slot-scope="scope">
<span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span>
<span>{{ (pageNum - 1) * pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="会话编号" align="center" prop="tokenId" :show-overflow-tooltip="true" />
<el-table-column label="登录名称" align="center" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="部门名称" align="center" prop="deptName" />
<el-table-column label="主机" align="center" prop="ipaddr" :show-overflow-tooltip="true" />
<el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
<el-table-column label="浏览器" align="center" prop="browser" />
<el-table-column label="操作系统" align="center" prop="os" />
<el-table-column label="登录时间" align="center" prop="loginTime" width="180">
<el-table-column :label="$t('online.093480-4')" align="center" prop="tokenId" :show-overflow-tooltip="true" />
<el-table-column :label="$t('online.093480-5')" align="center" prop="userName" :show-overflow-tooltip="true" />
<el-table-column :label="$t('online.093480-6')" align="center" prop="deptName" />
<el-table-column :label="$t('online.093480-7')" align="center" prop="ipaddr" :show-overflow-tooltip="true" />
<el-table-column :label="$t('online.093480-8')" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
<el-table-column :label="$t('online.093480-9')" align="center" prop="browser" />
<el-table-column :label="$t('online.093480-10')" align="center" prop="os" />
<el-table-column :label="$t('online.093480-11')" align="center" prop="loginTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.loginTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('opation')" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleForceLogout(scope.row)"
v-hasPermi="['monitor:online:forceLogout']"
>强退</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleForceLogout(scope.row)" v-hasPermi="['monitor:online:forceLogout']">{{ $t('online.093480-12') }}</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="pageNum" :limit.sync="pageSize" />
<pagination v-show="total > 0" :total="total" :page.sync="pageNum" :limit.sync="pageSize" />
</div>
</template>
<script>
import { list, forceLogout } from "@/api/monitor/online";
import { list, forceLogout } from '@/api/monitor/online';
export default {
name: "Online",
name: 'Online',
data() {
return {
// 遮罩层
@@ -80,8 +59,8 @@ export default {
// 查询参数
queryParams: {
ipaddr: undefined,
userName: undefined
}
userName: undefined,
},
};
},
created() {
@@ -91,7 +70,7 @@ export default {
/** 查询登录日志列表 */
getList() {
this.loading = true;
list(this.queryParams).then(response => {
list(this.queryParams).then((response) => {
this.list = response.rows;
this.total = response.total;
this.loading = false;
@@ -104,19 +83,22 @@ export default {
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.resetForm('queryForm');
this.handleQuery();
},
/** 强退按钮操作 */
handleForceLogout(row) {
this.$modal.confirm('是否确认强退名称为"' + row.userName + '"的用户?').then(function() {
this.$modal
.confirm(this.$t('online.093480-13', [row.userName]))
.then(function () {
return forceLogout(row.tokenId);
}).then(() => {
})
.then(() => {
this.getList();
this.$modal.msgSuccess("强退成功");
}).catch(() => {});
}
}
this.$modal.msgSuccess(this.$t('online.093480-14'));
})
.catch(() => {});
},
},
};
</script>

View File

@@ -1,40 +1,41 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="操作地址" prop="operIp">
<el-form-item :label="$t('operlog.874509-10')" prop="operIp">
<el-input
v-model="queryParams.operIp"
placeholder="请输入操作地址"
:placeholder="$t('operlog.874509-10')"
clearable
style="width: 240px;"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="系统模块" prop="title">
<el-form-item :label="$t('operlog.874509-0')" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入系统模块"
:placeholder="$t('operlog.874509-1')"
clearable
style="width: 240px;"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="操作人员" prop="operName">
<el-form-item :label="$t('operlog.874509-2')" prop="operName">
<el-input
v-model="queryParams.operName"
placeholder="请输入操作人员"
:placeholder="$t('operlog.874509-3')"
clearable
style="width: 240px;"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="类型" prop="businessType">
<el-form-item :label="$t('system.notice.670989-4')" prop="businessType">
<el-select
v-model="queryParams.businessType"
placeholder="操作类型"
:placeholder="$t('operlog.874509-4')"
clearable
style="width: 240px"
>
<el-option
v-for="dict in dict.type.sys_oper_type"
:key="dict.value"
@@ -43,10 +44,10 @@
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-form-item :label="$t('status')" prop="status">
<el-select
v-model="queryParams.status"
placeholder="操作状态"
:placeholder="$t('operlog.874509-5')"
clearable
style="width: 240px"
>
@@ -58,21 +59,21 @@
/>
</el-select>
</el-form-item>
<el-form-item label="操作时间">
<el-form-item :label="$t('operlog.874509-6')">
<el-date-picker
v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:start-placeholder="$t('system.dict.index.880996-3')"
:end-placeholder="$t('system.dict.index.880996-4')"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
</el-form-item>
</el-form>
@@ -86,7 +87,7 @@
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['monitor:operlog:remove']"
>删除</el-button>
>{{ $t('del') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -96,7 +97,7 @@
size="mini"
@click="handleClean"
v-hasPermi="['monitor:operlog:remove']"
>清空</el-button>
>{{ $t('operlog.874509-7') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -106,39 +107,39 @@
size="mini"
@click="handleExport"
v-hasPermi="['monitor:operlog:export']"
>导出</el-button>
>{{ $t('export') }}</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="日志编号" align="center" prop="operId" />
<el-table-column label="系统模块" align="center" prop="title" :show-overflow-tooltip="true" />
<el-table-column label="操作类型" align="center" prop="businessType">
<el-table-column :label="$t('operlog.874509-8')" align="center" prop="operId" />
<el-table-column :label="$t('operlog.874509-0')" align="center" prop="title" :show-overflow-tooltip="true" />
<el-table-column :label="$t('operlog.874509-4')" align="center" prop="businessType">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_oper_type" :value="scope.row.businessType"/>
</template>
</el-table-column>
<el-table-column label="操作人员" align="center" prop="operName" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
<el-table-column label="操作地址" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
<el-table-column label="操作地点" align="center" prop="operLocation" :show-overflow-tooltip="true" />
<el-table-column label="操作状态" align="center" prop="status">
<el-table-column :label="$t('operlog.874509-2')" align="center" prop="operName" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
<el-table-column :label="$t('operlog.874509-10')" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
<el-table-column :label="$t('operlog.874509-11')" align="center" prop="operLocation" :show-overflow-tooltip="true" />
<el-table-column :label="$t('operlog.874509-30')" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="操作日期" align="center" prop="operTime" width="160" sortable="custom" :sort-orders="['descending', 'ascending']">
<el-table-column :label="$t('operlog.874509-12')" align="center" prop="operTime" width="160" sortable="custom" :sort-orders="['descending', 'ascending']">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.operTime) }}</span>
</template>
</el-table-column>
<el-table-column label="消耗时间" align="center" prop="costTime" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']">
<el-table-column :label="$t('operlog.874509-31') align="center" prop="costTime" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']">
<template slot-scope="scope">
<span>{{ scope.row.costTime }}毫秒</span>
<span>{{ scope.row.costTime }}ms</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('opation')" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
@@ -146,7 +147,7 @@
icon="el-icon-view"
@click="handleView(scope.row,scope.index)"
v-hasPermi="['monitor:operlog:query']"
>详细</el-button>
>{{ $t('operlog.874509-13') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -160,47 +161,47 @@
/>
<!-- 操作日志详细 -->
<el-dialog title="操作日志详细" :visible.sync="open" width="800px" append-to-body>
<el-dialog :title="$t('operlog.874509-14')" :visible.sync="open" width="800px" append-to-body>
<el-form ref="form" :model="form" label-width="100px" size="mini">
<el-row>
<el-col :span="12">
<el-form-item label="操作模块:">{{ form.title }} / {{ typeFormat(form) }}</el-form-item>
<el-form-item :label="$t('operlog.874509-15')">{{ form.title }} / {{ typeFormat(form) }}</el-form-item>
<el-form-item
label="登录信息:"
:label="$t('operlog.874509-16')"
>{{ form.operName }} / {{ form.operIp }} / {{ form.operLocation }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="请求地址:">{{ form.operUrl }}</el-form-item>
<el-form-item label="请求方式:">{{ form.requestMethod }}</el-form-item>
<el-form-item :label="$t('operlog.874509-17')">{{ form.operUrl }}</el-form-item>
<el-form-item :label="$t('operlog.874509-18')">{{ form.requestMethod }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="操作方法:">{{ form.method }}</el-form-item>
<el-form-item :label="$t('operlog.874509-19')">{{ form.method }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="请求参数:">{{ form.operParam }}</el-form-item>
<el-form-item :label="$t('operlog.874509-20')">{{ form.operParam }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="返回参数:">{{ form.jsonResult }}</el-form-item>
<el-form-item :label="$t('operlog.874509-21')">{{ form.jsonResult }}</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="操作状态:">
<div v-if="form.status === 0">正常</div>
<div v-else-if="form.status === 1">失败</div>
<el-form-item :label="$t('operlog.874509-22')">
<div v-if="form.status === 0">{{ $t('operlog.874509-23') }}</div>
<div v-else-if="form.status === 1">{{ $t('operlog.874509-24') }}</div>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="消耗时间:">{{ form.costTime }}毫秒</el-form-item>
<el-form-item :label="$t('operlog.874509-31')">{{ form.costTime }}ms</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="操作时间:">{{ parseTime(form.operTime) }}</el-form-item>
<el-form-item :label="$t('operlog.874509-25')">{{ parseTime(form.operTime) }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="异常信息:" v-if="form.status === 1">{{ form.errorMsg }}</el-form-item>
<el-form-item :label="$t('operlog.874509-26')" v-if="form.status === 1">{{ form.errorMsg }}</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="open = false"> </el-button>
<el-button @click="open = false">{{ $t('close') }}</el-button>
</div>
</el-dialog>
</div>
@@ -295,20 +296,20 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const operIds = row.operId || this.ids;
this.$modal.confirm('是否确认删除日志编号为"' + operIds + '"的数据项?').then(function() {
this.$modal.confirm(this.$t('operlog.874509-27', [operIds])).then(function() {
return delOperlog(operIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
this.$modal.msgSuccess(this.$t('delSuccess'));
}).catch(() => {});
},
/** 清空按钮操作 */
handleClean() {
this.$modal.confirm('是否确认清空所有操作日志数据项?').then(function() {
this.$modal.confirm(this.$t('operlog.874509-28')).then(function() {
return cleanOperlog();
}).then(() => {
this.getList();
this.$modal.msgSuccess("清空成功");
this.$modal.msgSuccess(this.$t('operlog.874509-29'));
}).catch(() => {});
},
/** 导出按钮操作 */

View File

@@ -8,25 +8,25 @@
<table cellspacing="0" style="width: 100%;">
<thead>
<tr>
<th class="el-table__cell is-leaf"><div class="cell">属性</div></th>
<th class="el-table__cell is-leaf"><div class="cell"></div></th>
<th class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-0') }}</div></th>
<th class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-1') }}</div></th>
</tr>
</thead>
<tbody>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">核心数</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-2') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.cpu">{{ server.cpu.cpuNum }}</div></td>
</tr>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">用户使用率</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-3') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.cpu">{{ server.cpu.used }}%</div></td>
</tr>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">系统使用率</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-4') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.cpu">{{ server.cpu.sys }}%</div></td>
</tr>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">当前空闲率</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-5') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.cpu">{{ server.cpu.free }}%</div></td>
</tr>
</tbody>
@@ -37,34 +37,34 @@
<el-col :span="12" class="card-box">
<el-card>
<div slot="header"><span><i class="el-icon-tickets"></i> 内存</span></div>
<div slot="header"><span><i class="el-icon-tickets"></i> {{ $t('monitor.server.index.501236-6') }}</span></div>
<div class="el-table el-table--enable-row-hover el-table--medium">
<table cellspacing="0" style="width: 100%;">
<thead>
<tr>
<th class="el-table__cell is-leaf"><div class="cell">属性</div></th>
<th class="el-table__cell is-leaf"><div class="cell">内存</div></th>
<th class="el-table__cell is-leaf"><div class="cell">JVM</div></th>
<th class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-0') }}</div></th>
<th class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-6') }}</div></th>
<th class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-7') }}</div></th>
</tr>
</thead>
<tbody>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">总内存</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-8') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.mem">{{ server.mem.total }}G</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.total }}M</div></td>
</tr>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">已用内存</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-9') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.mem">{{ server.mem.used}}G</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.used}}M</div></td>
</tr>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">剩余内存</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-10') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.mem">{{ server.mem.free }}G</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.free }}M</div></td>
</tr>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">使用率</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-11') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.mem" :class="{'text-danger': server.mem.usage > 80}">{{ server.mem.usage }}%</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm" :class="{'text-danger': server.jvm.usage > 80}">{{ server.jvm.usage }}%</div></td>
</tr>
@@ -77,21 +77,21 @@
<el-col :span="24" class="card-box">
<el-card>
<div slot="header">
<span><i class="el-icon-monitor"></i> 服务器信息</span>
<span><i class="el-icon-monitor"></i> {{ $t('monitor.server.index.501236-12') }}</span>
</div>
<div class="el-table el-table--enable-row-hover el-table--medium">
<table cellspacing="0" style="width: 100%;">
<tbody>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">服务器名称</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-13') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.sys">{{ server.sys.computerName }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">操作系统</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-14') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.sys">{{ server.sys.osName }}</div></td>
</tr>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">服务器IP</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-15') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.sys">{{ server.sys.computerIp }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">系统架构</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-16') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.sys">{{ server.sys.osArch }}</div></td>
</tr>
</tbody>
@@ -103,33 +103,33 @@
<el-col :span="24" class="card-box">
<el-card>
<div slot="header">
<span><i class="el-icon-coffee-cup"></i> Java虚拟机信息</span>
<span><i class="el-icon-coffee-cup"></i> {{ $t('monitor.server.index.501236-17') }}</span>
</div>
<div class="el-table el-table--enable-row-hover el-table--medium">
<table cellspacing="0" style="width: 100%;table-layout:fixed;">
<tbody>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">Java名称</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-18') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.name }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">Java版本</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-19') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.version }}</div></td>
</tr>
<tr>
<td class="el-table__cell is-leaf"><div class="cell">启动时间</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-20') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.startTime }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell">运行时长</div></td>
<td class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-21') }}</div></td>
<td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.runTime }}</div></td>
</tr>
<tr>
<td colspan="1" class="el-table__cell is-leaf"><div class="cell">安装路径</div></td>
<td colspan="1" class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-22') }}</div></td>
<td colspan="3" class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.home }}</div></td>
</tr>
<tr>
<td colspan="1" class="el-table__cell is-leaf"><div class="cell">项目路径</div></td>
<td colspan="1" class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-23') }}</div></td>
<td colspan="3" class="el-table__cell is-leaf"><div class="cell" v-if="server.sys">{{ server.sys.userDir }}</div></td>
</tr>
<tr>
<td colspan="1" class="el-table__cell is-leaf"><div class="cell">运行参数</div></td>
<td colspan="1" class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-24') }}</div></td>
<td colspan="3" class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.inputArgs }}</div></td>
</tr>
</tbody>
@@ -141,19 +141,19 @@
<el-col :span="24" class="card-box">
<el-card>
<div slot="header">
<span><i class="el-icon-receiving"></i> 磁盘状态</span>
<span><i class="el-icon-receiving"></i> {{ $t('monitor.server.index.501236-25') }}</span>
</div>
<div class="el-table el-table--enable-row-hover el-table--medium">
<table cellspacing="0" style="width: 100%;">
<thead>
<tr>
<th class="el-table__cell el-table__cell is-leaf"><div class="cell">盘符路径</div></th>
<th class="el-table__cell is-leaf"><div class="cell">文件系统</div></th>
<th class="el-table__cell is-leaf"><div class="cell">盘符类型</div></th>
<th class="el-table__cell is-leaf"><div class="cell">总大小</div></th>
<th class="el-table__cell is-leaf"><div class="cell">可用大小</div></th>
<th class="el-table__cell is-leaf"><div class="cell">已用大小</div></th>
<th class="el-table__cell is-leaf"><div class="cell">已用百分比</div></th>
<th class="el-table__cell el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-26') }}</div></th>
<th class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-27') }}</div></th>
<th class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-28') }}</div></th>
<th class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-29') }}</div></th>
<th class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-30') }}</div></th>
<th class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-31') }}</div></th>
<th class="el-table__cell is-leaf"><div class="cell">{{ $t('monitor.server.index.501236-32') }}</div></th>
</tr>
</thead>
<tbody v-if="server.sysFiles">
@@ -200,7 +200,7 @@ export default {
},
// 打开加载层
openLoading() {
this.$modal.loading("正在加载服务监控数据,请稍候!");
this.$modal.loading(this.$i18n.t('monitor.server.index.501236-33'));
}
}
};

View File

@@ -9,36 +9,36 @@
<div style="float: left; margin-top: 13px; width: 200px; text-align: left">
<div>FastBee</div>
<div style="letter-spacing: 1.5px; font-size: 20px; font-weight: 600; margin-top: -8px; margin-left: 3px">
开源物联网平台</div>
{{ $t('login.989807-0') }}</div>
</div>
</div>
</div>
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form"
style="z-index: 1000;">
<el-form-item prop="username">
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
<el-input v-model="registerForm.username" type="text" auto-complete="off" :placeholder="$t('login.989807-20')">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
<el-form-item prop="phonenumber">
<el-input v-model="registerForm.phonenumber" type="text" auto-complete="off" placeholder="手机号码">
<el-input v-model="registerForm.phonenumber" type="text" auto-complete="off" :placeholder="$t('register.974236-14')">
<svg-icon slot="prefix" icon-class="phone" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input v-model="registerForm.password" type="password" auto-complete="off" placeholder="密码"
<el-input v-model="registerForm.password" type="password" auto-complete="off" :placeholder="$t('login.989807-21')"
@keyup.enter.native="handleRegister">
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
<el-form-item prop="confirmPassword">
<el-input v-model="registerForm.confirmPassword" type="password" auto-complete="off" placeholder="确认密码"
<el-input v-model="registerForm.confirmPassword" type="password" auto-complete="off" :placeholder="$t('login.989807-48')"
@keyup.enter.native="handleRegister">
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
<el-form-item v-if="captchaOnOff" prop="code">
<el-input v-model="registerForm.code" auto-complete="off" placeholder="验证码" style="width: 63%"
<el-input v-model="registerForm.code" auto-complete="off" :placeholder="$t('login.989807-22')" style="width: 63%"
@keyup.enter.native="handleRegister">
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
</el-input>
@@ -49,16 +49,16 @@
<el-form-item style="width: 100%">
<el-button v-if="!bindAccount" :loading="loading" type="primary" style="width: 100%"
@click.native.prevent="handleRegister">
<span v-if="!loading"> </span>
<span v-else> 中...</span>
<span v-if="!loading">{{ $t('register.974236-4') }}</span>
<span v-else>{{ $t('register.974236-5') }}</span>
</el-button>
</el-form-item>
<el-form-item>
<el-link href="https://fastbee.cn/" :underline="false" target="_blank" style="float: left">返回官网</el-link>
<el-link href="https://fastbee.cn/" :underline="false" target="_blank" style="float: left">{{ $t('login.989807-41') }}</el-link>
<el-link href="https://fastbee.cn/doc" :underline="false" target="_blank"
style="float: left; margin-left: 20px">查看文档</el-link>
style="float: left; margin-left: 20px">{{ $t('login.989807-40') }}</el-link>
<router-link :to="{ path: '/login', query: this.$route.query }"
style="float: left; margin-left: 20px">账号登录</router-link>
style="float: left; margin-left: 20px">{{ $t('register.974236-9') }}</router-link>
</el-form-item>
</el-form>
</el-col>
@@ -85,7 +85,7 @@ export default {
data() {
const equalToPassword = (rule, value, callback) => {
if (this.registerForm.password !== value) {
callback(new Error('两次输入的密码不一致'));
callback(new Error(this.$t('pwdNotMatch')));
} else {
callback();
}
@@ -107,12 +107,12 @@ export default {
{
required: true,
trigger: 'blur',
message: '请输入您的账号',
message: this.$t('login.989807-20'),
},
{
min: 2,
max: 20,
message: '用户账号长度必须介于 2 和 20 之间',
message: this.$t('register.974236-13'),
trigger: 'blur',
},
],
@@ -120,12 +120,12 @@ export default {
{
required: true,
trigger: 'blur',
message: '请输入您的手机号码',
message: this.$t('register.974236-14'),
},
{
min: 11,
max: 11,
message: '手机号码长度为11',
message: this.$t('register.974236-15'),
trigger: 'blur',
},
],
@@ -133,12 +133,12 @@ export default {
{
required: true,
trigger: 'blur',
message: '请输入您的密码',
message: this.$t('login.989807-21'),
},
{
min: 5,
max: 20,
message: '用户密码长度必须介于 5 和 20 之间',
message: this.$t('register.974236-16'),
trigger: 'blur',
},
{
@@ -146,7 +146,7 @@ export default {
validator: (rule, value, callback) => {
var passwordreg = /(?![A-Z]*$)(?![a-z]*$)(?![0-9]*$)(?![^a-zA-Z0-9]*$)/
if (!passwordreg.test(value)) {
callback(new Error('密码须由大写,小写字母,数字,特殊符中的2种及以上类型组成'))
callback(new Error(this.$t('login.989807-62')))
}
else {
callback()
@@ -158,7 +158,7 @@ export default {
{
required: true,
trigger: 'blur',
message: '请再次输入您的密码',
message: this.$t('register.974236-17'),
},
{
required: true,
@@ -170,7 +170,7 @@ export default {
{
required: true,
trigger: 'change',
message: '请输入验证码',
message: this.$t('login.989807-22'),
},
],
},
@@ -218,8 +218,8 @@ export default {
window.location.href = 'http://localhost:8080/auth/render/qq';
},
authLogin() {
this.$alert('第三方登录正在集成中...', '提示消息', {
confirmButtonText: '确定',
this.$alert(this.$t('login.989807-63'), this.$t('login.989807-32'), {
confirmButtonText: this.$t('confirm'),
callback: (action) => {
this.$message({
type: 'info',
@@ -260,7 +260,7 @@ export default {
},
innerRegister(res) {
const username = this.registerForm.username;
this.$alert("<font color='red'>恭喜你,您的账号 " + username + ' 注册成功!</font>', '系统提示', {
this.$alert("<font color='red'>" + this.$t('register.974236-18') + username + this.$t('register.974236-19') + "</font>", this.$t('register.974236-20'), {
dangerouslyUseHTMLString: true,
type: 'success',
})

View File

@@ -313,12 +313,12 @@ export default {
rules: {
userName: [
{ required: true, message: this.$t('system.user.index.userNameRequired'), trigger: 'blur' },
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' },
{ min: 2, max: 20, message: this.$t('system.user.index.userNameLength'), trigger: 'blur' },
],
nickName: [{ required: true, message: this.$t('system.user.index.nickNameRequired'), trigger: 'blur' }],
password: [
{ required: true, message: this.$t('system.user.index.userPasswordRequired'), trigger: 'blur' },
{ min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' },
{ min: 5, max: 20, message: this.$t('system.user.index.passwordLength'), trigger: 'blur' },
],
email: [
{
@@ -380,7 +380,7 @@ export default {
handleStatusChange(row) {
let text = row.status === '0' ? this.$t('system.user.index.disable') : this.$t('system.user.index.enable');
this.$modal
.confirm('确认要"' + text + '""' + row.userName + '"用户吗?')
.confirm(this.$t('system.user.index.confirmStatusChange', [text, row.userName]))
.then(function () {
return changeUserStatus(row.userId, row.status);
})
@@ -479,7 +479,7 @@ export default {
cancelButtonText: this.$t('cancel'),
closeOnClickModal: false,
inputPattern: /^.{5,20}$/,
inputErrorMessage: '用户密码长度必须介于 5 和 20 之间',
inputErrorMessage: this.$t('user.index.098976-35'),
})
.then(({ value }) => {
resetUserPwd(row.userId, value).then((response) => {

View File

@@ -39,13 +39,13 @@ export default {
oldPassword: [{ required: true, message: this.$t('system.user.profile.oldPasswordRequired'), trigger: 'blur' }],
newPassword: [
{ required: true, message: this.$t('system.user.profile.newPasswordRequired'), trigger: 'blur' },
{ min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' },
{ min: 6, max: 20, message: this.$t('system.user.profile.passwordLength'), trigger: 'blur' },
{
trigger: 'blur',
validator: (rule, value, callback) => {
var passwordreg = /(?![A-Z]*$)(?![a-z]*$)(?![0-9]*$)(?![^a-zA-Z0-9]*$)/;
if (!passwordreg.test(value)) {
callback(new Error('密码必须由大写字母、小写字母、数字、特殊符号中的2种及以上类型组成!'));
callback(new Error(this.$t('system.user.profile.passwordStrength')));
} else {
callback();
}

View File

@@ -18,7 +18,7 @@
label-width="100px"
>
<el-col :span="24">
<el-form-item label="生成类型" prop="type">
<el-form-item :label="$t('tool.codeType.670910-0')" prop="type">
<el-radio-group v-model="formData.type">
<el-radio-button
v-for="(item, index) in typeOptions"
@@ -30,8 +30,8 @@
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="showFileName" label="文件名" prop="fileName">
<el-input v-model="formData.fileName" placeholder="请输入文件名" clearable />
<el-form-item v-if="showFileName" :label="$t('tool.codeType.670910-1')" prop="fileName">
<el-input v-model="formData.fileName" :placeholder="$t('tool.codeType.670910-2')" clearable />
</el-form-item>
</el-col>
</el-form>
@@ -39,10 +39,10 @@
<div slot="footer">
<el-button @click="close">
取消
{{ $t('cancel') }}
</el-button>
<el-button type="primary" @click="handleConfirm">
确定
{{ $t('confirm') }}
</el-button>
</div>
</el-dialog>
@@ -61,20 +61,20 @@ export default {
rules: {
fileName: [{
required: true,
message: '请输入文件名',
message: this.$t('tool.codeType.670910-2'),
trigger: 'blur'
}],
type: [{
required: true,
message: '生成类型不能为空',
message: this.$t('tool.codeType.670910-5'),
trigger: 'change'
}]
},
typeOptions: [{
label: '页面',
label: this.$t('tool.codeType.670910-3'),
value: 'file'
}, {
label: '弹窗',
label: this.$t('tool.codeType.670910-4'),
value: 'dialog'
}]
}

View File

@@ -6,12 +6,12 @@ const components = {
itemBtns(h, element, index, parent) {
const { copyItem, deleteItem } = this.$listeners
return [
<span class="drawing-item-copy" title="复制" onClick={event => {
<span class="drawing-item-copy" title={this.$i18n.t('tool.build.index.670906-13')} onClick={event => {
copyItem(element, parent); event.stopPropagation()
}}>
<i class="el-icon-copy-document" />
</span>,
<span class="drawing-item-delete" title="删除" onClick={event => {
<span class="drawing-item-delete" title={this.$i18n.t('tool.build.index.670906-14')} onClick={event => {
deleteItem(index, parent); event.stopPropagation()
}}>
<i class="el-icon-delete" />

View File

@@ -9,12 +9,12 @@
@close="onClose"
>
<div slot="title">
选择图标
{{ $t('tool.icons.670909-0') }}
<el-input
v-model="key"
size="mini"
:style="{width: '260px'}"
placeholder="请输入图标名称"
:placeholder="$t('tool.icons.670909-1')"
prefix-icon="el-icon-search"
clearable
/>

View File

@@ -1,20 +1,20 @@
<template>
<div class="right-board">
<el-tabs v-model="currentTab" class="center-tabs">
<el-tab-pane label="组件属性" name="field" />
<el-tab-pane label="表单属性" name="form" />
<el-tab-pane :label="$t('tool.rightPanel.670907-0')" name="field" />
<el-tab-pane :label="$t('tool.rightPanel.670907-1')" name="form" />
</el-tabs>
<div class="field-box">
<a class="document-link" target="_blank" :href="documentLink" title="查看组件文档">
<a class="document-link" target="_blank" :href="documentLink" :title="$t('tool.rightPanel.670907-2')">
<i class="el-icon-link" />
</a>
<el-scrollbar class="right-scrollbar">
<!-- 组件属性 -->
<el-form v-show="currentTab==='field' && showField" size="small" label-width="90px">
<el-form-item v-if="activeData.changeTag" label="组件类型">
<el-form-item v-if="activeData.changeTag" :label="$t('tool.rightPanel.670907-3')">
<el-select
v-model="activeData.tagIcon"
placeholder="请选择组件类型"
:placeholder="$t('tool.rightPanel.670907-4')"
:style="{width: '100%'}"
@change="tagChange"
>
@@ -31,38 +31,38 @@
</el-option-group>
</el-select>
</el-form-item>
<el-form-item v-if="activeData.vModel!==undefined" label="字段名">
<el-input v-model="activeData.vModel" placeholder="请输入字段名v-model" />
<el-form-item v-if="activeData.vModel!==undefined" :label="$t('tool.rightPanel.670907-5')">
<el-input v-model="activeData.vModel" :placeholder="$t('tool.rightPanel.670907-6')" />
</el-form-item>
<el-form-item v-if="activeData.componentName!==undefined" label="组件名">
<el-form-item v-if="activeData.componentName!==undefined" :label="$t('tool.rightPanel.670907-7')">
{{ activeData.componentName }}
</el-form-item>
<el-form-item v-if="activeData.label!==undefined" label="标题">
<el-input v-model="activeData.label" placeholder="请输入标题" />
<el-form-item v-if="activeData.label!==undefined" :label="$t('tool.rightPanel.670907-8')">
<el-input v-model="activeData.label" :placeholder="$t('tool.rightPanel.670907-9')" />
</el-form-item>
<el-form-item v-if="activeData.placeholder!==undefined" label="占位提示">
<el-input v-model="activeData.placeholder" placeholder="请输入占位提示" />
<el-form-item v-if="activeData.placeholder!==undefined" :label="$t('tool.rightPanel.670907-10')">
<el-input v-model="activeData.placeholder" :placeholder="$t('tool.rightPanel.670907-11')" />
</el-form-item>
<el-form-item v-if="activeData['start-placeholder']!==undefined" label="开始占位">
<el-input v-model="activeData['start-placeholder']" placeholder="请输入占位提示" />
<el-form-item v-if="activeData['start-placeholder']!==undefined" :label="$t('tool.rightPanel.670907-12')">
<el-input v-model="activeData['start-placeholder']" :placeholder="$t('tool.rightPanel.670907-11')" />
</el-form-item>
<el-form-item v-if="activeData['end-placeholder']!==undefined" label="结束占位">
<el-input v-model="activeData['end-placeholder']" placeholder="请输入占位提示" />
<el-form-item v-if="activeData['end-placeholder']!==undefined" :label="$t('tool.rightPanel.670907-13')">
<el-input v-model="activeData['end-placeholder']" :placeholder="$t('tool.rightPanel.670907-11')" />
</el-form-item>
<el-form-item v-if="activeData.span!==undefined" label="表单栅格">
<el-form-item v-if="activeData.span!==undefined" :label="$t('tool.rightPanel.670907-14')">
<el-slider v-model="activeData.span" :max="24" :min="1" :marks="{12:''}" @change="spanChange" />
</el-form-item>
<el-form-item v-if="activeData.layout==='rowFormItem'" label="栅格间隔">
<el-input-number v-model="activeData.gutter" :min="0" placeholder="栅格间隔" />
<el-form-item v-if="activeData.layout==='rowFormItem'" :label="$t('tool.rightPanel.670907-15')">
<el-input-number v-model="activeData.gutter" :min="0" :placeholder="$t('tool.rightPanel.670907-15')" />
</el-form-item>
<el-form-item v-if="activeData.layout==='rowFormItem'" label="布局模式">
<el-form-item v-if="activeData.layout==='rowFormItem'" :label="$t('tool.rightPanel.670907-16')">
<el-radio-group v-model="activeData.type">
<el-radio-button label="default" />
<el-radio-button label="flex" />
</el-radio-group>
</el-form-item>
<el-form-item v-if="activeData.justify!==undefined&&activeData.type==='flex'" label="水平排列">
<el-select v-model="activeData.justify" placeholder="请选择水平排列" :style="{width: '100%'}">
<el-form-item v-if="activeData.justify!==undefined&&activeData.type==='flex'" :label="$t('tool.rightPanel.670907-17')">
<el-select v-model="activeData.justify" :placeholder="$t('tool.rightPanel.670907-18')" :style="{width: '100%'}">
<el-option
v-for="(item, index) in justifyOptions"
:key="index"
@@ -71,127 +71,127 @@
/>
</el-select>
</el-form-item>
<el-form-item v-if="activeData.align!==undefined&&activeData.type==='flex'" label="垂直排列">
<el-form-item v-if="activeData.align!==undefined&&activeData.type==='flex'" :label="$t('tool.rightPanel.670907-19')">
<el-radio-group v-model="activeData.align">
<el-radio-button label="top" />
<el-radio-button label="middle" />
<el-radio-button label="bottom" />
</el-radio-group>
</el-form-item>
<el-form-item v-if="activeData.labelWidth!==undefined" label="标签宽度">
<el-input v-model.number="activeData.labelWidth" type="number" placeholder="请输入标签宽度" />
<el-form-item v-if="activeData.labelWidth!==undefined" :label="$t('tool.rightPanel.670907-20')">
<el-input v-model.number="activeData.labelWidth" type="number" :placeholder="$t('tool.rightPanel.670907-21')" />
</el-form-item>
<el-form-item v-if="activeData.style&&activeData.style.width!==undefined" label="组件宽度">
<el-input v-model="activeData.style.width" placeholder="请输入组件宽度" clearable />
<el-form-item v-if="activeData.style&&activeData.style.width!==undefined" :label="$t('tool.rightPanel.670907-22')">
<el-input v-model="activeData.style.width" :placeholder="$t('tool.rightPanel.670907-23')" clearable />
</el-form-item>
<el-form-item v-if="activeData.vModel!==undefined" label="默认值">
<el-form-item v-if="activeData.vModel!==undefined" :label="$t('tool.rightPanel.670907-24')">
<el-input
:value="setDefaultValue(activeData.defaultValue)"
placeholder="请输入默认值"
:placeholder="$t('tool.rightPanel.670907-25')"
@input="onDefaultValueInput"
/>
</el-form-item>
<el-form-item v-if="activeData.tag==='el-checkbox-group'" label="至少应选">
<el-form-item v-if="activeData.tag==='el-checkbox-group'" :label="$t('tool.rightPanel.670907-26')">
<el-input-number
:value="activeData.min"
:min="0"
placeholder="至少应选"
:placeholder="$t('tool.rightPanel.670907-26')"
@input="$set(activeData, 'min', $event?$event:undefined)"
/>
</el-form-item>
<el-form-item v-if="activeData.tag==='el-checkbox-group'" label="最多可选">
<el-form-item v-if="activeData.tag==='el-checkbox-group'" :label="$t('tool.rightPanel.670907-27')">
<el-input-number
:value="activeData.max"
:min="0"
placeholder="最多可选"
:placeholder="$t('tool.rightPanel.670907-27')"
@input="$set(activeData, 'max', $event?$event:undefined)"
/>
</el-form-item>
<el-form-item v-if="activeData.prepend!==undefined" label="前缀">
<el-input v-model="activeData.prepend" placeholder="请输入前缀" />
<el-form-item v-if="activeData.prepend!==undefined" :label="$t('tool.rightPanel.670907-28')">
<el-input v-model="activeData.prepend" :placeholder="$t('tool.rightPanel.670907-29')" />
</el-form-item>
<el-form-item v-if="activeData.append!==undefined" label="后缀">
<el-input v-model="activeData.append" placeholder="请输入后缀" />
<el-form-item v-if="activeData.append!==undefined" :label="$t('tool.rightPanel.670907-30')">
<el-input v-model="activeData.append" :placeholder="$t('tool.rightPanel.670907-31')" />
</el-form-item>
<el-form-item v-if="activeData['prefix-icon']!==undefined" label="前图标">
<el-input v-model="activeData['prefix-icon']" placeholder="请输入前图标名称">
<el-form-item v-if="activeData['prefix-icon']!==undefined" :label="$t('tool.rightPanel.670907-32')">
<el-input v-model="activeData['prefix-icon']" :placeholder="$t('tool.rightPanel.670907-33')">
<el-button slot="append" icon="el-icon-thumb" @click="openIconsDialog('prefix-icon')">
选择
{{ $t('tool.rightPanel.670907-34') }}
</el-button>
</el-input>
</el-form-item>
<el-form-item v-if="activeData['suffix-icon'] !== undefined" label="后图标">
<el-input v-model="activeData['suffix-icon']" placeholder="请输入后图标名称">
<el-form-item v-if="activeData['suffix-icon'] !== undefined" :label="$t('tool.rightPanel.670907-35')">
<el-input v-model="activeData['suffix-icon']" :placeholder="$t('tool.rightPanel.670907-36')">
<el-button slot="append" icon="el-icon-thumb" @click="openIconsDialog('suffix-icon')">
选择
{{ $t('tool.rightPanel.670907-34') }}
</el-button>
</el-input>
</el-form-item>
<el-form-item v-if="activeData.tag === 'el-cascader'" label="选项分隔符">
<el-input v-model="activeData.separator" placeholder="请输入选项分隔符" />
<el-form-item v-if="activeData.tag === 'el-cascader'" :label="$t('tool.rightPanel.670907-37')">
<el-input v-model="activeData.separator" :placeholder="$t('tool.rightPanel.670907-38')" />
</el-form-item>
<el-form-item v-if="activeData.autosize !== undefined" label="最小行数">
<el-input-number v-model="activeData.autosize.minRows" :min="1" placeholder="最小行数" />
<el-form-item v-if="activeData.autosize !== undefined" :label="$t('tool.rightPanel.670907-39')">
<el-input-number v-model="activeData.autosize.minRows" :min="1" :placeholder="$t('tool.rightPanel.670907-39')" />
</el-form-item>
<el-form-item v-if="activeData.autosize !== undefined" label="最大行数">
<el-input-number v-model="activeData.autosize.maxRows" :min="1" placeholder="最大行数" />
<el-form-item v-if="activeData.autosize !== undefined" :label="$t('tool.rightPanel.670907-40')">
<el-input-number v-model="activeData.autosize.maxRows" :min="1" :placeholder="$t('tool.rightPanel.670907-40')" />
</el-form-item>
<el-form-item v-if="activeData.min !== undefined" label="最小值">
<el-input-number v-model="activeData.min" placeholder="最小值" />
<el-form-item v-if="activeData.min !== undefined" :label="$t('tool.rightPanel.670907-41')">
<el-input-number v-model="activeData.min" :placeholder="$t('tool.rightPanel.670907-41')" />
</el-form-item>
<el-form-item v-if="activeData.max !== undefined" label="最大值">
<el-input-number v-model="activeData.max" placeholder="最大值" />
<el-form-item v-if="activeData.max !== undefined" :label="$t('tool.rightPanel.670907-42')">
<el-input-number v-model="activeData.max" :placeholder="$t('tool.rightPanel.670907-42')" />
</el-form-item>
<el-form-item v-if="activeData.step !== undefined" label="步长">
<el-input-number v-model="activeData.step" placeholder="步数" />
<el-form-item v-if="activeData.step !== undefined" :label="$t('tool.rightPanel.670907-43')">
<el-input-number v-model="activeData.step" :placeholder="$t('tool.rightPanel.670907-44')" />
</el-form-item>
<el-form-item v-if="activeData.tag === 'el-input-number'" label="精度">
<el-input-number v-model="activeData.precision" :min="0" placeholder="精度" />
<el-form-item v-if="activeData.tag === 'el-input-number'" :label="$t('tool.rightPanel.670907-44')">
<el-input-number v-model="activeData.precision" :min="0" :placeholder="$t('tool.rightPanel.670907-44')" />
</el-form-item>
<el-form-item v-if="activeData.tag === 'el-input-number'" label="按钮位置">
<el-form-item v-if="activeData.tag === 'el-input-number'" :label="$t('tool.rightPanel.670907-45')">
<el-radio-group v-model="activeData['controls-position']">
<el-radio-button label="">
默认
{{ $t('tool.rightPanel.670907-46') }}
</el-radio-button>
<el-radio-button label="right">
右侧
{{ $t('tool.rightPanel.670907-47') }}
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="activeData.maxlength !== undefined" label="最多输入">
<el-input v-model="activeData.maxlength" placeholder="请输入字符长度">
<el-form-item v-if="activeData.maxlength !== undefined" :label="$t('tool.rightPanel.670907-48')">
<el-input v-model="activeData.maxlength" :placeholder="$t('tool.rightPanel.670907-48')">
<template slot="append">
个字符
{{ $t('tool.rightPanel.670907-49') }}
</template>
</el-input>
</el-form-item>
<el-form-item v-if="activeData['active-text'] !== undefined" label="开启提示">
<el-input v-model="activeData['active-text']" placeholder="请输入开启提示" />
<el-form-item v-if="activeData['active-text'] !== undefined" :label="$t('tool.rightPanel.670907-50')">
<el-input v-model="activeData['active-text']" :placeholder="$t('tool.rightPanel.670907-51')" />
</el-form-item>
<el-form-item v-if="activeData['inactive-text'] !== undefined" label="关闭提示">
<el-input v-model="activeData['inactive-text']" placeholder="请输入关闭提示" />
<el-form-item v-if="activeData['inactive-text'] !== undefined" :label="$t('tool.rightPanel.670907-52')">
<el-input v-model="activeData['inactive-text']" :placeholder="$t('tool.rightPanel.670907-53')" />
</el-form-item>
<el-form-item v-if="activeData['active-value'] !== undefined" label="开启值">
<el-form-item v-if="activeData['active-value'] !== undefined" :label="$t('tool.rightPanel.670907-54')">
<el-input
:value="setDefaultValue(activeData['active-value'])"
placeholder="请输入开启值"
:placeholder="$t('tool.rightPanel.670907-55')"
@input="onSwitchValueInput($event, 'active-value')"
/>
</el-form-item>
<el-form-item v-if="activeData['inactive-value'] !== undefined" label="关闭值">
<el-form-item v-if="activeData['inactive-value'] !== undefined" :label="$t('tool.rightPanel.670907-56')">
<el-input
:value="setDefaultValue(activeData['inactive-value'])"
placeholder="请输入关闭值"
:placeholder="$t('tool.rightPanel.670907-57')"
@input="onSwitchValueInput($event, 'inactive-value')"
/>
</el-form-item>
<el-form-item
v-if="activeData.type !== undefined && 'el-date-picker' === activeData.tag"
label="时间类型"
:label="$t('tool.rightPanel.670907-58')"
>
<el-select
v-model="activeData.type"
placeholder="请选择时间类型"
:placeholder="$t('tool.rightPanel.670907-59')"
:style="{ width: '100%' }"
@change="dateTypeChange"
>
@@ -203,27 +203,27 @@
/>
</el-select>
</el-form-item>
<el-form-item v-if="activeData.name !== undefined" label="文件字段名">
<el-input v-model="activeData.name" placeholder="请输入上传文件字段名" />
<el-form-item v-if="activeData.name !== undefined" :label="$t('tool.rightPanel.670907-60')">
<el-input v-model="activeData.name" :placeholder="$t('tool.rightPanel.670907-61')" />
</el-form-item>
<el-form-item v-if="activeData.accept !== undefined" label="文件类型">
<el-form-item v-if="activeData.accept !== undefined" :label="$t('tool.rightPanel.670907-62')">
<el-select
v-model="activeData.accept"
placeholder="请选择文件类型"
:placeholder="$t('tool.rightPanel.670907-63')"
:style="{ width: '100%' }"
clearable
>
<el-option label="图片" value="image/*" />
<el-option label="视频" value="video/*" />
<el-option label="音频" value="audio/*" />
<el-option :label="$t('tool.rightPanel.670907-64')" value="image/*" />
<el-option :label="$t('tool.rightPanel.670907-65')" value="video/*" />
<el-option :label="$t('tool.rightPanel.670907-66')" value="audio/*" />
<el-option label="excel" value=".xls,.xlsx" />
<el-option label="word" value=".doc,.docx" />
<el-option label="pdf" value=".pdf" />
<el-option label="txt" value=".txt" />
</el-select>
</el-form-item>
<el-form-item v-if="activeData.fileSize !== undefined" label="文件大小">
<el-input v-model.number="activeData.fileSize" placeholder="请输入文件大小">
<el-form-item v-if="activeData.fileSize !== undefined" :label="$t('tool.rightPanel.670907-67')">
<el-input v-model.number="activeData.fileSize" :placeholder="$t('tool.rightPanel.670907-68')">
<el-select slot="append" v-model="activeData.sizeUnit" :style="{ width: '66px' }">
<el-option label="KB" value="KB" />
<el-option label="MB" value="MB" />
@@ -231,10 +231,10 @@
</el-select>
</el-input>
</el-form-item>
<el-form-item v-if="activeData.action !== undefined" label="上传地址">
<el-input v-model="activeData.action" placeholder="请输入上传地址" clearable />
<el-form-item v-if="activeData.action !== undefined" :label="$t('tool.rightPanel.670907-69')">
<el-input v-model="activeData.action" :placeholder="$t('tool.rightPanel.670907-70')" clearable />
</el-form-item>
<el-form-item v-if="activeData['list-type'] !== undefined" label="列表类型">
<el-form-item v-if="activeData['list-type'] !== undefined" :label="$t('tool.rightPanel.670907-71')">
<el-radio-group v-model="activeData['list-type']" size="small">
<el-radio-button label="text">
text
@@ -250,28 +250,28 @@
<el-form-item
v-if="activeData.buttonText !== undefined"
v-show="'picture-card' !== activeData['list-type']"
label="按钮文字"
:label="$t('tool.rightPanel.670907-72')"
>
<el-input v-model="activeData.buttonText" placeholder="请输入按钮文字" />
<el-input v-model="activeData.buttonText" :placeholder="$t('tool.rightPanel.670907-73')" />
</el-form-item>
<el-form-item v-if="activeData['range-separator'] !== undefined" label="分隔符">
<el-input v-model="activeData['range-separator']" placeholder="请输入分隔符" />
<el-form-item v-if="activeData['range-separator'] !== undefined" :label="$t('tool.rightPanel.670907-74')">
<el-input v-model="activeData['range-separator']" :placeholder="$t('tool.rightPanel.670907-75')" />
</el-form-item>
<el-form-item v-if="activeData['picker-options'] !== undefined" label="时间段">
<el-form-item v-if="activeData['picker-options'] !== undefined" :label="$t('tool.rightPanel.670907-76')">
<el-input
v-model="activeData['picker-options'].selectableRange"
placeholder="请输入时间段"
:placeholder="$t('tool.rightPanel.670907-77')"
/>
</el-form-item>
<el-form-item v-if="activeData.format !== undefined" label="时间格式">
<el-form-item v-if="activeData.format !== undefined" :label="$t('tool.rightPanel.670907-78')">
<el-input
:value="activeData.format"
placeholder="请输入时间格式"
:placeholder="$t('tool.rightPanel.670907-79')"
@input="setTimeValue($event)"
/>
</el-form-item>
<template v-if="['el-checkbox-group', 'el-radio-group', 'el-select'].indexOf(activeData.tag) > -1">
<el-divider>选项</el-divider>
<el-divider>{{ $t('tool.rightPanel.670907-80') }}</el-divider>
<draggable
:list="activeData.options"
:animation="340"
@@ -282,9 +282,9 @@
<div class="select-line-icon option-drag">
<i class="el-icon-s-operation" />
</div>
<el-input v-model="item.label" placeholder="选项名" size="small" />
<el-input v-model="item.label" :placeholder="$t('tool.rightPanel.670907-81')" size="small" />
<el-input
placeholder="选项值"
:placeholder="$t('tool.rightPanel.670907-82')"
size="small"
:value="item.value"
@input="setOptionValue(item, $event)"
@@ -301,34 +301,34 @@
type="text"
@click="addSelectItem"
>
添加选项
{{ $t('tool.rightPanel.670907-83') }}
</el-button>
</div>
<el-divider />
</template>
<template v-if="['el-cascader'].indexOf(activeData.tag) > -1">
<el-divider>选项</el-divider>
<el-form-item label="数据类型">
<el-divider>{{ $t('tool.rightPanel.670907-80') }}</el-divider>
<el-form-item :label="$t('tool.rightPanel.670907-84')">
<el-radio-group v-model="activeData.dataType" size="small">
<el-radio-button label="dynamic">
动态数据
{{ $t('tool.rightPanel.670907-85') }}
</el-radio-button>
<el-radio-button label="static">
静态数据
{{ $t('tool.rightPanel.670907-86') }}
</el-radio-button>
</el-radio-group>
</el-form-item>
<template v-if="activeData.dataType === 'dynamic'">
<el-form-item label="标签键名">
<el-input v-model="activeData.labelKey" placeholder="请输入标签键名" />
<el-form-item :label="$t('tool.rightPanel.670907-87')">
<el-input v-model="activeData.labelKey" :placeholder="$t('tool.rightPanel.670907-88')" />
</el-form-item>
<el-form-item label="值键名">
<el-input v-model="activeData.valueKey" placeholder="请输入值键名" />
<el-form-item :label="$t('tool.rightPanel.670907-89')">
<el-input v-model="activeData.valueKey" :placeholder="$t('tool.rightPanel.670907-90')" />
</el-form-item>
<el-form-item label="子级键名">
<el-input v-model="activeData.childrenKey" placeholder="请输入子级键名" />
<el-form-item :label="$t('tool.rightPanel.670907-91')">
<el-input v-model="activeData.childrenKey" :placeholder="$t('tool.rightPanel.670907-92')" />
</el-form-item>
</template>
@@ -347,54 +347,54 @@
type="text"
@click="addTreeItem"
>
添加父级
{{ $t('tool.rightPanel.670907-93') }}
</el-button>
</div>
<el-divider />
</template>
<el-form-item v-if="activeData.optionType !== undefined" label="选项样式">
<el-form-item v-if="activeData.optionType !== undefined" :label="$t('tool.rightPanel.670907-94')">
<el-radio-group v-model="activeData.optionType">
<el-radio-button label="default">
默认
{{ $t('tool.rightPanel.670907-96') }}
</el-radio-button>
<el-radio-button label="button">
按钮
{{ $t('tool.rightPanel.670907-95') }}
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="activeData['active-color'] !== undefined" label="开启颜色">
<el-form-item v-if="activeData['active-color'] !== undefined" :label="$t('tool.rightPanel.670907-96')">
<el-color-picker v-model="activeData['active-color']" />
</el-form-item>
<el-form-item v-if="activeData['inactive-color'] !== undefined" label="关闭颜色">
<el-form-item v-if="activeData['inactive-color'] !== undefined" :label="$t('tool.rightPanel.670907-97')">
<el-color-picker v-model="activeData['inactive-color']" />
</el-form-item>
<el-form-item v-if="activeData['allow-half'] !== undefined" label="允许半选">
<el-form-item v-if="activeData['allow-half'] !== undefined" :label="$t('tool.rightPanel.670907-98')">
<el-switch v-model="activeData['allow-half']" />
</el-form-item>
<el-form-item v-if="activeData['show-text'] !== undefined" label="辅助文字">
<el-form-item v-if="activeData['show-text'] !== undefined" :label="$t('tool.rightPanel.670907-99')">
<el-switch v-model="activeData['show-text']" @change="rateTextChange" />
</el-form-item>
<el-form-item v-if="activeData['show-score'] !== undefined" label="显示分数">
<el-form-item v-if="activeData['show-score'] !== undefined" :label="$t('tool.rightPanel.670907-100')">
<el-switch v-model="activeData['show-score']" @change="rateScoreChange" />
</el-form-item>
<el-form-item v-if="activeData['show-stops'] !== undefined" label="显示间断点">
<el-form-item v-if="activeData['show-stops'] !== undefined" :label="$t('tool.rightPanel.670907-101')">
<el-switch v-model="activeData['show-stops']" />
</el-form-item>
<el-form-item v-if="activeData.range !== undefined" label="范围选择">
<el-form-item v-if="activeData.range !== undefined" :label="$t('tool.rightPanel.670907-102')">
<el-switch v-model="activeData.range" @change="rangeChange" />
</el-form-item>
<el-form-item
v-if="activeData.border !== undefined && activeData.optionType === 'default'"
label="是否带边框"
:label="$t('tool.rightPanel.670907-103')"
>
<el-switch v-model="activeData.border" />
</el-form-item>
<el-form-item v-if="activeData.tag === 'el-color-picker'" label="颜色格式">
<el-form-item v-if="activeData.tag === 'el-color-picker'" :label="$t('tool.rightPanel.670907-104')">
<el-select
v-model="activeData['color-format']"
placeholder="请选择颜色格式"
:placeholder="$t('tool.rightPanel.670907-105')"
:style="{ width: '100%' }"
@change="colorFormatChange"
>
@@ -411,60 +411,60 @@
(activeData.optionType === 'button' ||
activeData.border ||
activeData.tag === 'el-color-picker')"
label="选项尺寸"
:label="$t('tool.rightPanel.670907-106')"
>
<el-radio-group v-model="activeData.size">
<el-radio-button label="medium">
中等
{{ $t('tool.rightPanel.670907-107') }}
</el-radio-button>
<el-radio-button label="small">
较小
{{ $t('tool.rightPanel.670907-108') }}
</el-radio-button>
<el-radio-button label="mini">
迷你
{{ $t('tool.rightPanel.670907-109') }}
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="activeData['show-word-limit'] !== undefined" label="输入统计">
<el-form-item v-if="activeData['show-word-limit'] !== undefined" :label="$t('tool.rightPanel.670907-110')">
<el-switch v-model="activeData['show-word-limit']" />
</el-form-item>
<el-form-item v-if="activeData.tag === 'el-input-number'" label="严格步数">
<el-form-item v-if="activeData.tag === 'el-input-number'" :label="$t('tool.rightPanel.670907-111')">
<el-switch v-model="activeData['step-strictly']" />
</el-form-item>
<el-form-item v-if="activeData.tag === 'el-cascader'" label="是否多选">
<el-form-item v-if="activeData.tag === 'el-cascader'" :label="$t('tool.rightPanel.670907-112')">
<el-switch v-model="activeData.props.props.multiple" />
</el-form-item>
<el-form-item v-if="activeData.tag === 'el-cascader'" label="展示全路径">
<el-form-item v-if="activeData.tag === 'el-cascader'" :label="$t('tool.rightPanel.670907-113')">
<el-switch v-model="activeData['show-all-levels']" />
</el-form-item>
<el-form-item v-if="activeData.tag === 'el-cascader'" label="可否筛选">
<el-form-item v-if="activeData.tag === 'el-cascader'" :label="$t('tool.rightPanel.670907-114')">
<el-switch v-model="activeData.filterable" />
</el-form-item>
<el-form-item v-if="activeData.clearable !== undefined" label="能否清空">
<el-form-item v-if="activeData.clearable !== undefined" :label="$t('tool.rightPanel.670907-115')">
<el-switch v-model="activeData.clearable" />
</el-form-item>
<el-form-item v-if="activeData.showTip !== undefined" label="显示提示">
<el-form-item v-if="activeData.showTip !== undefined" :label="$t('tool.rightPanel.670907-116')">
<el-switch v-model="activeData.showTip" />
</el-form-item>
<el-form-item v-if="activeData.multiple !== undefined" label="多选文件">
<el-form-item v-if="activeData.multiple !== undefined" :label="$t('tool.rightPanel.670907-117')">
<el-switch v-model="activeData.multiple" />
</el-form-item>
<el-form-item v-if="activeData['auto-upload'] !== undefined" label="自动上传">
<el-form-item v-if="activeData['auto-upload'] !== undefined" :label="$t('tool.rightPanel.670907-118')">
<el-switch v-model="activeData['auto-upload']" />
</el-form-item>
<el-form-item v-if="activeData.readonly !== undefined" label="是否只读">
<el-form-item v-if="activeData.readonly !== undefined" :label="$t('tool.rightPanel.670907-119')">
<el-switch v-model="activeData.readonly" />
</el-form-item>
<el-form-item v-if="activeData.disabled !== undefined" label="是否禁用">
<el-form-item v-if="activeData.disabled !== undefined" :label="$t('tool.rightPanel.670907-120')">
<el-switch v-model="activeData.disabled" />
</el-form-item>
<el-form-item v-if="activeData.tag === 'el-select'" label="是否可搜索">
<el-form-item v-if="activeData.tag === 'el-select'" :label="$t('tool.rightPanel.670907-121')">
<el-switch v-model="activeData.filterable" />
</el-form-item>
<el-form-item v-if="activeData.tag === 'el-select'" label="是否多选">
<el-form-item v-if="activeData.tag === 'el-select'" :label="$t('tool.rightPanel.670907-112')">
<el-switch v-model="activeData.multiple" @change="multipleChange" />
</el-form-item>
<el-form-item v-if="activeData.required !== undefined" label="是否必填">
<el-form-item v-if="activeData.required !== undefined" :label="$t('tool.rightPanel.670907-122')">
<el-switch v-model="activeData.required" />
</el-form-item>

View File

@@ -18,24 +18,24 @@
>
<el-col :span="24">
<el-form-item
label="选项名"
:label="$t('tool.treeNode.670908-0')"
prop="label"
>
<el-input
v-model="formData.label"
placeholder="请输入选项名"
:placeholder="$t('tool.treeNode.670908-1')"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item
label="选项值"
:label="$t('tool.treeNode.670908-2')"
prop="value"
>
<el-input
v-model="formData.value"
placeholder="请输入选项值"
:placeholder="$t('tool.treeNode.670908-3')"
clearable
>
<el-select
@@ -61,10 +61,10 @@
type="primary"
@click="handleConfirm"
>
确定
{{ $t('tool.treeNode.670908-6') }}
</el-button>
<el-button @click="close">
取消
{{ $t('tool.treeNode.670908-7') }}
</el-button>
</div>
</el-dialog>
@@ -88,14 +88,14 @@ export default {
label: [
{
required: true,
message: '请输入选项名',
message: this.$t('tool.treeNode.670908-1'),
trigger: 'blur'
}
],
value: [
{
required: true,
message: '请输入选项值',
message: this.$t('tool.treeNode.670908-3'),
trigger: 'blur'
}
]
@@ -103,11 +103,11 @@ export default {
dataType: 'string',
dataTypeOptions: [
{
label: '字符串',
label: this.$t('tool.treeNode.670908-4'),
value: 'string'
},
{
label: '数字',
label: this.$t('tool.treeNode.670908-5'),
value: 'number'
}
]

View File

@@ -3,13 +3,13 @@
<div class="left-board">
<div class="logo-wrapper">
<div class="logo">
<img :src="logo" alt="logo"> Form Generator
<img :src="logo" alt="logo"> {{ $t('tool.build.index.670906-0') }}
</div>
</div>
<el-scrollbar class="left-scrollbar">
<div class="components-list">
<div class="components-title">
<svg-icon icon-class="component" />输入型组件
<svg-icon icon-class="component" />{{ $t('tool.build.index.670906-1') }}
</div>
<draggable
class="components-draggable"
@@ -31,7 +31,7 @@
</div>
</draggable>
<div class="components-title">
<svg-icon icon-class="component" />选择型组件
<svg-icon icon-class="component" />{{ $t('tool.build.index.670906-2') }}
</div>
<draggable
class="components-draggable"
@@ -55,7 +55,7 @@
</div>
</draggable>
<div class="components-title">
<svg-icon icon-class="component" /> 布局型组件
<svg-icon icon-class="component" /> {{ $t('tool.build.index.670906-3') }}
</div>
<draggable
class="components-draggable" :list="layoutComponents"
@@ -79,13 +79,13 @@
<div class="center-board">
<div class="action-bar">
<el-button icon="el-icon-download" type="text" @click="download">
导出vue文件
{{ $t('tool.build.index.670906-4') }}
</el-button>
<el-button class="copy-btn-main" icon="el-icon-document-copy" type="text" @click="copy">
复制代码
{{ $t('tool.build.index.670906-5') }}
</el-button>
<el-button class="delete-btn" icon="el-icon-delete" type="text" @click="empty">
清空
{{ $t('tool.build.index.670906-6') }}
</el-button>
</div>
<el-scrollbar class="center-scrollbar">
@@ -111,7 +111,7 @@
/>
</draggable>
<div v-show="!drawingList.length" class="empty-info">
从左侧拖入或点选组件进行表单设计
{{ $t('tool.build.index.670906-7') }}
</div>
</el-form>
</el-row>
@@ -127,7 +127,7 @@
<code-type-dialog
:visible.sync="dialogVisible"
title="选择生成类型"
:title="$t('tool.codeType.670910-0')"
:show-file-name="showFileName"
@confirm="generate"
/>
@@ -213,15 +213,15 @@ export default {
text: trigger => {
const codeStr = this.generateCode()
this.$notify({
title: '成功',
message: '代码已复制到剪切板,可粘贴。',
title: this.$i18n.t('tool.build.index.670906-8'),
message: this.$i18n.t('tool.build.index.670906-9'),
type: 'success'
})
return codeStr
}
})
clipboard.on('error', e => {
this.$message.error('代码复制失败')
this.$message.error(this.$i18n.t('tool.build.index.670906-10'))
})
},
methods: {
@@ -282,7 +282,7 @@ export default {
document.getElementById('copyNode').click()
},
empty() {
this.$confirm('确定要清空所有组件吗?', '提示', { type: 'warning' }).then(
this.$confirm(this.$i18n.t('tool.build.index.670906-11'), this.$i18n.t('tool.build.index.670906-12'), { type: 'warning' }).then(
() => {
this.drawingList = []
}

View File

@@ -2,27 +2,27 @@
<el-form ref="basicInfoForm" :model="info" :rules="rules" label-width="150px">
<el-row>
<el-col :span="12">
<el-form-item label="表名称" prop="tableName">
<el-input placeholder="请输入仓库名称" v-model="info.tableName" />
<el-form-item :label="$t('tool.basicInfo.670905-0')" prop="tableName">
<el-input :placeholder="$t('tool.basicInfo.670905-1')" v-model="info.tableName" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="表描述" prop="tableComment">
<el-input placeholder="请输入" v-model="info.tableComment" />
<el-form-item :label="$t('tool.basicInfo.670905-2')" prop="tableComment">
<el-input :placeholder="$t('tool.basicInfo.670905-3')" v-model="info.tableComment" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="实体类名称" prop="className">
<el-input placeholder="请输入" v-model="info.className" />
<el-form-item :label="$t('tool.basicInfo.670905-4')" prop="className">
<el-input :placeholder="$t('tool.basicInfo.670905-3')" v-model="info.className" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="作者" prop="functionAuthor">
<el-input placeholder="请输入" v-model="info.functionAuthor" />
<el-form-item :label="$t('tool.basicInfo.670905-5')" prop="functionAuthor">
<el-input :placeholder="$t('tool.basicInfo.670905-3')" v-model="info.functionAuthor" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-form-item :label="$t('tool.basicInfo.670905-6')" prop="remark">
<el-input type="textarea" :rows="3" v-model="info.remark"></el-input>
</el-form-item>
</el-col>
@@ -42,16 +42,16 @@ export default {
return {
rules: {
tableName: [
{ required: true, message: "请输入表名称", trigger: "blur" }
{ required: true, message: this.$i18n.t('tool.basicInfo.670905-7'), trigger: "blur" }
],
tableComment: [
{ required: true, message: "请输入表描述", trigger: "blur" }
{ required: true, message: this.$i18n.t('tool.basicInfo.670905-8'), trigger: "blur" }
],
className: [
{ required: true, message: "请输入实体类名称", trigger: "blur" }
{ required: true, message: this.$i18n.t('tool.basicInfo.670905-9'), trigger: "blur" }
],
functionAuthor: [
{ required: true, message: "请输入作者", trigger: "blur" }
{ required: true, message: this.$i18n.t('tool.basicInfo.670905-10'), trigger: "blur" }
]
}
};

View File

@@ -1,11 +1,11 @@
<template>
<!-- 创建表 -->
<el-dialog title="创建表" :visible.sync="visible" width="800px" top="5vh" append-to-body>
<span>创建表语句(支持多个建表语句)</span>
<el-input type="textarea" :rows="10" placeholder="请输入文本" v-model="content"></el-input>
<el-dialog :title="$t('tool.createTable.670904-0')" :visible.sync="visible" width="800px" top="5vh" append-to-body>
<span>{{ $t('tool.createTable.670904-1') }}</span>
<el-input type="textarea" :rows="10" :placeholder="$t('tool.createTable.670904-2')" v-model="content"></el-input>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleCreateTable"> </el-button>
<el-button @click="visible = false"> </el-button>
<el-button type="primary" @click="handleCreateTable">{{ $t('common.confirm') }}</el-button>
<el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
</div>
</el-dialog>
</template>
@@ -29,7 +29,7 @@ export default {
/** 创建按钮操作 */
handleCreateTable() {
if (this.content === "") {
this.$modal.msgError("请输入建表语句");
this.$modal.msgError(this.$i18n.t('tool.createTable.670904-3'));
return;
}
createTable({ sql: this.content }).then(res => {

View File

@@ -1,30 +1,30 @@
<template>
<el-card>
<el-tabs v-model="activeName">
<el-tab-pane label="基本信息" name="basic">
<el-tab-pane :label="$t('tool.editTable.670903-0')" name="basic">
<basic-info-form ref="basicInfo" :info="info" />
</el-tab-pane>
<el-tab-pane label="字段信息" name="columnInfo">
<el-tab-pane :label="$t('tool.editTable.670903-1')" name="columnInfo">
<el-table ref="dragTable" :data="columns" row-key="columnId" :max-height="tableHeight">
<el-table-column label="序号" type="index" min-width="5%" class-name="allowDrag" />
<el-table-column :label="$t('tool.editTable.670903-3')" type="index" min-width="5%" class-name="allowDrag" />
<el-table-column
label="字段列名"
:label="$t('tool.editTable.670903-4')"
prop="columnName"
min-width="10%"
:show-overflow-tooltip="true"
/>
<el-table-column label="字段描述" min-width="10%">
<el-table-column :label="$t('tool.editTable.670903-5')" min-width="10%">
<template slot-scope="scope">
<el-input v-model="scope.row.columnComment"></el-input>
</template>
</el-table-column>
<el-table-column
label="物理类型"
:label="$t('tool.editTable.670903-6')"
prop="columnType"
min-width="10%"
:show-overflow-tooltip="true"
/>
<el-table-column label="Java类型" min-width="11%">
<el-table-column :label="$t('tool.editTable.670903-7')" min-width="11%">
<template slot-scope="scope">
<el-select v-model="scope.row.javaType">
<el-option label="Long" value="Long" />
@@ -37,33 +37,33 @@
</el-select>
</template>
</el-table-column>
<el-table-column label="java属性" min-width="10%">
<el-table-column :label="$t('tool.editTable.670903-8')" min-width="10%">
<template slot-scope="scope">
<el-input v-model="scope.row.javaField"></el-input>
</template>
</el-table-column>
<el-table-column label="插入" min-width="5%">
<el-table-column :label="$t('tool.editTable.670903-9')" min-width="5%">
<template slot-scope="scope">
<el-checkbox true-label="1" false-label="0" v-model="scope.row.isInsert"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="编辑" min-width="5%">
<el-table-column :label="$t('tool.editTable.670903-10')" min-width="5%">
<template slot-scope="scope">
<el-checkbox true-label="1" false-label="0" v-model="scope.row.isEdit"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="列表" min-width="5%">
<el-table-column :label="$t('tool.editTable.670903-11')" min-width="5%">
<template slot-scope="scope">
<el-checkbox true-label="1" false-label="0" v-model="scope.row.isList"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="查询" min-width="5%">
<el-table-column :label="$t('tool.editTable.670903-12')" min-width="5%">
<template slot-scope="scope">
<el-checkbox true-label="1" false-label="0" v-model="scope.row.isQuery"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="查询方式" min-width="10%">
<el-table-column :label="$t('tool.editTable.670903-13')" min-width="10%">
<template slot-scope="scope">
<el-select v-model="scope.row.queryType">
<el-option label="=" value="EQ" />
@@ -77,29 +77,29 @@
</el-select>
</template>
</el-table-column>
<el-table-column label="必填" min-width="5%">
<el-table-column :label="$t('tool.editTable.670903-14')" min-width="5%">
<template slot-scope="scope">
<el-checkbox true-label="1" false-label="0" v-model="scope.row.isRequired"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="显示类型" min-width="12%">
<el-table-column :label="$t('tool.editTable.670903-15')" min-width="12%">
<template slot-scope="scope">
<el-select v-model="scope.row.htmlType">
<el-option label="文本框" value="input" />
<el-option label="文本域" value="textarea" />
<el-option label="下拉框" value="select" />
<el-option label="单选框" value="radio" />
<el-option label="复选框" value="checkbox" />
<el-option label="日期控件" value="datetime" />
<el-option label="图片上传" value="imageUpload" />
<el-option label="文件上传" value="fileUpload" />
<el-option label="富文本控件" value="editor" />
<el-option :label="$t('tool.editTable.670903-16')" value="input" />
<el-option :label="$t('tool.editTable.670903-17')" value="textarea" />
<el-option :label="$t('tool.editTable.670903-18')" value="select" />
<el-option :label="$t('tool.editTable.670903-19')" value="radio" />
<el-option :label="$t('tool.editTable.670903-20')" value="checkbox" />
<el-option :label="$t('tool.editTable.670903-21')" value="datetime" />
<el-option :label="$t('tool.editTable.670903-22')" value="imageUpload" />
<el-option :label="$t('tool.editTable.670903-23')" value="fileUpload" />
<el-option :label="$t('tool.editTable.670903-24')" value="editor" />
</el-select>
</template>
</el-table-column>
<el-table-column label="字典类型" min-width="12%">
<el-table-column :label="$t('tool.editTable.670903-25')" min-width="12%">
<template slot-scope="scope">
<el-select v-model="scope.row.dictType" clearable filterable placeholder="请选择">
<el-select v-model="scope.row.dictType" clearable filterable :placeholder="$t('tool.editTable.670903-26')">
<el-option
v-for="dict in dictOptions"
:key="dict.dictType"
@@ -113,14 +113,14 @@
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="生成信息" name="genInfo">
<el-tab-pane :label="$t('tool.editTable.670903-2')" name="genInfo">
<gen-info-form ref="genInfo" :info="info" :tables="tables" :menus="menus"/>
</el-tab-pane>
</el-tabs>
<el-form label-width="100px">
<el-form-item style="text-align: center;margin-left:-100px;margin-top:10px;">
<el-button type="primary" @click="submitForm()">提交</el-button>
<el-button @click="close()">返回</el-button>
<el-button type="primary" @click="submitForm()">{{ $t('tool.editTable.670903-27') }}</el-button>
<el-button @click="close()">{{ $t('tool.editTable.670903-28') }}</el-button>
</el-form-item>
</el-form>
</el-card>
@@ -200,7 +200,7 @@ export default {
}
});
} else {
this.$modal.msgError("表单校验未通过,请重新检查提交内容");
this.$modal.msgError(this.$i18n.t('tool.editTable.670903-29'));
}
});
},

View File

@@ -3,28 +3,28 @@
<el-row>
<el-col :span="12">
<el-form-item prop="tplCategory">
<span slot="label">生成模板</span>
<span slot="label">{{ $t('tool.genInfo.670902-0') }}</span>
<el-select v-model="info.tplCategory" @change="tplSelectChange">
<el-option label="单表(增删改查)" value="crud" />
<el-option label="树表(增删改查)" value="tree" />
<el-option label="主子表(增删改查)" value="sub" />
<el-option :label="$t('tool.genInfo.670902-1')" value="crud" />
<el-option :label="$t('tool.genInfo.670902-2')" value="tree" />
<el-option :label="$t('tool.genInfo.670902-3')" value="sub" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="tplWebType">
<span slot="label">前端类型</span>
<span slot="label">{{ $t('tool.genInfo.670902-4') }}</span>
<el-select v-model="info.tplWebType">
<el-option label="Vue2 Element UI 模版" value="element-ui" />
<el-option label="Vue3 Element Plus 模版" value="element-plus" />
<el-option :label="$t('tool.genInfo.670902-5')" value="element-ui" />
<el-option :label="$t('tool.genInfo.670902-6')" value="element-plus" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="packageName">
<span slot="label">
生成包路径
<el-tooltip content="生成在哪个java包下例如 com.ruoyi.system" placement="top">
{{ $t('tool.genInfo.670902-7') }}
<el-tooltip :content="$t('tool.genInfo.670902-8')" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
@@ -35,8 +35,8 @@
<el-col :span="12">
<el-form-item prop="moduleName">
<span slot="label">
生成模块名
<el-tooltip content="可理解为子系统名,例如 system" placement="top">
{{ $t('tool.genInfo.670902-9') }}
<el-tooltip :content="$t('tool.genInfo.670902-10')" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
@@ -47,8 +47,8 @@
<el-col :span="12">
<el-form-item prop="businessName">
<span slot="label">
生成业务名
<el-tooltip content="可理解为功能英文名,例如 user" placement="top">
{{ $t('tool.genInfo.670902-11') }}
<el-tooltip :content="$t('tool.genInfo.670902-12')" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
@@ -59,8 +59,8 @@
<el-col :span="12">
<el-form-item prop="functionName">
<span slot="label">
生成功能名
<el-tooltip content="用作类描述,例如 用户" placement="top">
{{ $t('tool.genInfo.670902-13') }}
<el-tooltip :content="$t('tool.genInfo.670902-14')" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
@@ -71,21 +71,21 @@
<el-col :span="12">
<el-form-item prop="genType">
<span slot="label">
生成代码方式
<el-tooltip content="默认为zip压缩包下载也可以自定义生成路径" placement="top">
{{ $t('tool.genInfo.670902-15') }}
<el-tooltip :content="$t('tool.genInfo.670902-16')" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-radio v-model="info.genType" label="0">zip压缩包</el-radio>
<el-radio v-model="info.genType" label="1">自定义路径</el-radio>
<el-radio v-model="info.genType" label="0">{{ $t('tool.genInfo.670902-17') }}</el-radio>
<el-radio v-model="info.genType" label="1">{{ $t('tool.genInfo.670902-18') }}</el-radio>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<span slot="label">
上级菜单
<el-tooltip content="分配到指定菜单下,例如 系统管理" placement="top">
{{ $t('tool.genInfo.670902-19') }}
<el-tooltip :content="$t('tool.genInfo.670902-20')" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
@@ -95,7 +95,7 @@
:options="menus"
:normalizer="normalizer"
:show-count="true"
placeholder="请选择系统菜单"
:placeholder="$t('tool.genInfo.670902-21')"
/>
</el-form-item>
</el-col>
@@ -103,19 +103,19 @@
<el-col :span="24" v-if="info.genType == '1'">
<el-form-item prop="genPath">
<span slot="label">
自定义路径
<el-tooltip content="填写磁盘绝对路径若不填写则生成到当前Web项目下" placement="top">
{{ $t('tool.genInfo.670902-18') }}
<el-tooltip :content="$t('tool.genInfo.670902-22')" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-input v-model="info.genPath">
<el-dropdown slot="append">
<el-button type="primary">
最近路径快速选择
{{ $t('tool.genInfo.670902-23') }}
<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="info.genPath = '/'">恢复默认的生成基础路径</el-dropdown-item>
<el-dropdown-item @click.native="info.genPath = '/'">{{ $t('tool.genInfo.670902-24') }}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-input>
@@ -124,16 +124,16 @@
</el-row>
<el-row v-show="info.tplCategory == 'tree'">
<h4 class="form-header">其他信息</h4>
<h4 class="form-header">{{ $t('tool.genInfo.670902-25') }}</h4>
<el-col :span="12">
<el-form-item>
<span slot="label">
树编码字段
<el-tooltip content="树显示的编码字段名, 如dept_id" placement="top">
{{ $t('tool.genInfo.670902-26') }}
<el-tooltip :content="$t('tool.genInfo.670902-27')" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-select v-model="info.treeCode" placeholder="请选择">
<el-select v-model="info.treeCode" :placeholder="$t('tool.genInfo.670902-28')">
<el-option
v-for="(column, index) in info.columns"
:key="index"
@@ -146,12 +146,12 @@
<el-col :span="12">
<el-form-item>
<span slot="label">
树父编码字段
<el-tooltip content="树显示的父编码字段名, 如parent_Id" placement="top">
{{ $t('tool.genInfo.670902-29') }}
<el-tooltip :content="$t('tool.genInfo.670902-30')" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-select v-model="info.treeParentCode" placeholder="请选择">
<el-select v-model="info.treeParentCode" :placeholder="$t('tool.genInfo.670902-28')">
<el-option
v-for="(column, index) in info.columns"
:key="index"
@@ -164,12 +164,12 @@
<el-col :span="12">
<el-form-item>
<span slot="label">
树名称字段
<el-tooltip content="树节点的显示名称字段名, 如dept_name" placement="top">
{{ $t('tool.genInfo.670902-31') }}
<el-tooltip :content="$t('tool.genInfo.670902-32')" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-select v-model="info.treeName" placeholder="请选择">
<el-select v-model="info.treeName" :placeholder="$t('tool.genInfo.670902-28')">
<el-option
v-for="(column, index) in info.columns"
:key="index"
@@ -181,16 +181,16 @@
</el-col>
</el-row>
<el-row v-show="info.tplCategory == 'sub'">
<h4 class="form-header">关联信息</h4>
<h4 class="form-header">{{ $t('tool.genInfo.670902-33') }}</h4>
<el-col :span="12">
<el-form-item>
<span slot="label">
关联子表的表名
<el-tooltip content="关联子表的表名, 如sys_user" placement="top">
{{ $t('tool.genInfo.670902-34') }}
<el-tooltip :content="$t('tool.genInfo.670902-35')" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-select v-model="info.subTableName" placeholder="请选择" @change="subSelectChange">
<el-select v-model="info.subTableName" :placeholder="$t('tool.genInfo.670902-28')" @change="subSelectChange">
<el-option
v-for="(table, index) in tables"
:key="index"
@@ -203,12 +203,12 @@
<el-col :span="12">
<el-form-item>
<span slot="label">
子表关联的外键名
<el-tooltip content="子表关联的外键名, 如user_id" placement="top">
{{ $t('tool.genInfo.670902-36') }}
<el-tooltip :content="$t('tool.genInfo.670902-37')" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-select v-model="info.subTableFkName" placeholder="请选择">
<el-select v-model="info.subTableFkName" :placeholder="$t('tool.genInfo.670902-28')">
<el-option
v-for="(column, index) in subColumns"
:key="index"
@@ -247,19 +247,19 @@ export default {
subColumns: [],
rules: {
tplCategory: [
{ required: true, message: "请选择生成模板", trigger: "blur" }
{ required: true, message: this.$i18n.t('tool.genInfo.670902-38'), trigger: "blur" }
],
packageName: [
{ required: true, message: "请输入生成包路径", trigger: "blur" }
{ required: true, message: this.$i18n.t('tool.genInfo.670902-39'), trigger: "blur" }
],
moduleName: [
{ required: true, message: "请输入生成模块名", trigger: "blur" }
{ required: true, message: this.$i18n.t('tool.genInfo.670902-40'), trigger: "blur" }
],
businessName: [
{ required: true, message: "请输入生成业务名", trigger: "blur" }
{ required: true, message: this.$i18n.t('tool.genInfo.670902-41'), trigger: "blur" }
],
functionName: [
{ required: true, message: "请输入生成功能名", trigger: "blur" }
{ required: true, message: this.$i18n.t('tool.genInfo.670902-42'), trigger: "blur" }
],
}
};

View File

@@ -1,40 +1,40 @@
<template>
<!-- 导入表 -->
<el-dialog title="导入表" :visible.sync="visible" width="800px" top="5vh" append-to-body>
<el-dialog :title="$t('tool.import.670901-0')" :visible.sync="visible" width="800px" top="5vh" append-to-body>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
<el-form-item label="数据源" prop="dataName">
<el-select v-model="queryParams.dataName" size="small" placeholder="请选择数据源" style="width: 100%" :clearable="true">
<el-form-item :label="$t('tool.import.670901-1')" prop="dataName">
<el-select v-model="queryParams.dataName" size="small" :placeholder="$t('tool.import.670901-2')" style="width: 100%" :clearable="true">
<el-option v-for="(item, index) in dataSources" :key="index" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="表名称" prop="tableName">
<el-form-item :label="$t('tool.import.670901-3')" prop="tableName">
<el-input
v-model="queryParams.tableName"
placeholder="请输入表名称"
:placeholder="$t('tool.import.670901-4')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="表描述" prop="tableComment">
<el-form-item :label="$t('tool.import.670901-5')" prop="tableComment">
<el-input
v-model="queryParams.tableComment"
placeholder="请输入表描述"
:placeholder="$t('tool.import.670901-6')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('common.search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('common.reset') }}</el-button>
</el-form-item>
</el-form>
<el-row>
<el-table @row-click="clickRow" ref="table" :data="dbTableList" @selection-change="handleSelectionChange" height="260px">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="tableName" label="表名称" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="tableComment" label="表描述" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="createTime" label="创建时间"></el-table-column>
<el-table-column prop="updateTime" label="更新时间"></el-table-column>
<el-table-column prop="tableName" :label="$t('tool.import.670901-3')" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="tableComment" :label="$t('tool.import.670901-5')" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="createTime" :label="$t('tool.import.670901-7')"></el-table-column>
<el-table-column prop="updateTime" :label="$t('tool.import.670901-8')"></el-table-column>
</el-table>
<pagination
v-show="total>0"
@@ -45,8 +45,8 @@
/>
</el-row>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleImportTable"> </el-button>
<el-button @click="visible = false"> </el-button>
<el-button type="primary" @click="handleImportTable">{{ $t('common.confirm') }}</el-button>
<el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
</div>
</el-dialog>
</template>
@@ -123,7 +123,7 @@ export default {
dataName: this.queryParams.dataName,
};
if (tableNames == '') {
this.$modal.msgError('请选择要导入的表');
this.$modal.msgError(this.$i18n.t('tool.import.670901-9'));
return;
}
importTable(params).then((res) => {

View File

@@ -1,36 +1,36 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="表名称" prop="tableName">
<el-form-item :label="$t('gen.import.832346-1')" prop="tableName">
<el-input
v-model="queryParams.tableName"
placeholder="请输入表名称"
:placeholder="$t('gen.import.832346-2')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="表描述" prop="tableComment">
<el-form-item :label="$t('gen.import.832346-3')" prop="tableComment">
<el-input
v-model="queryParams.tableComment"
placeholder="请输入表描述"
:placeholder="$t('gen.import.832346-4')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="创建时间">
<el-form-item :label="$t('creatTime')">
<el-date-picker
v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:start-placeholder="$t('system.job.log.085689-5')"
:end-placeholder="$t('system.job.log.085689-5')"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('search') }}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('reset') }}</el-button>
</el-form-item>
</el-form>
@@ -44,7 +44,7 @@
:disabled="multiple"
@click="handleGenTable"
v-hasPermi="['tool:gen:code']"
>生成</el-button>
>{{ $t('build.index.2090840-3') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -54,7 +54,7 @@
size="mini"
@click="openCreateTable"
v-hasRole="['admin']"
>创建</el-button>
>{{ $t('add') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -64,7 +64,7 @@
size="mini"
@click="openImportTable"
v-hasPermi="['tool:gen:import']"
>导入</el-button>
>{{ $t('import') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -75,7 +75,7 @@
:disabled="single"
@click="handleEditTable"
v-hasPermi="['tool:gen:edit']"
>修改</el-button>
>{{ $t('update') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -86,42 +86,42 @@
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['tool:gen:remove']"
>删除</el-button>
>{{ $t('del') }}</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange">
<el-table-column type="selection" align="center" width="55"></el-table-column>
<el-table-column label="序号" type="index" width="50" align="center">
<el-table-column :label="$t('system.cache.list.093478-1')" type="index" width="50" align="center">
<template slot-scope="scope">
<span>{{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column
label="表名称"
:label="$t('gen.import.832346-1')"
align="center"
prop="tableName"
:show-overflow-tooltip="true"
width="120"
/>
<el-table-column
label="表描述"
:label="$t('gen.import.832346-3')"
align="center"
prop="tableComment"
:show-overflow-tooltip="true"
width="120"
/>
<el-table-column
label="实体"
:label="$t('gen.index.467583-1')"
align="center"
prop="className"
:show-overflow-tooltip="true"
width="120"
/>
<el-table-column label="创建时间" align="center" prop="createTime" width="160" />
<el-table-column label="更新时间" align="center" prop="updateTime" width="160" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('creatTime')" align="center" prop="createTime" width="160" />
<el-table-column :label="$t('updateTime')" align="center" prop="updateTime" width="160" />
<el-table-column :label="$t('opation')" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
type="text"
@@ -129,35 +129,35 @@
icon="el-icon-view"
@click="handlePreview(scope.row)"
v-hasPermi="['tool:gen:preview']"
>预览</el-button>
>{{ $t('preview') }}</el-button>
<el-button
type="text"
size="small"
icon="el-icon-edit"
@click="handleEditTable(scope.row)"
v-hasPermi="['tool:gen:edit']"
>编辑</el-button>
>{{ $t('edit') }}</el-button>
<el-button
type="text"
size="small"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['tool:gen:remove']"
>删除</el-button>
>{{ $t('del') }}</el-button>
<el-button
type="text"
size="small"
icon="el-icon-refresh"
@click="handleSynchDb(scope.row)"
v-hasPermi="['tool:gen:edit']"
>同步</el-button>
>{{ $t('gen.index.467583-3') }}</el-button>
<el-button
type="text"
size="small"
icon="el-icon-download"
@click="handleGenTable(scope.row)"
v-hasPermi="['tool:gen:code']"
>生成代码</el-button>
>{{ $t('gen.index.467583-4') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -168,7 +168,7 @@
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 预览界面 -->
<!-- Preview -->
<el-dialog :title="preview.title" :visible.sync="preview.open" width="80%" top="5vh" append-to-body class="scrollbar">
<el-tabs v-model="preview.activeName">
<el-tab-pane
@@ -177,7 +177,7 @@
:name="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))"
:key="key"
>
<el-link :underline="false" icon="el-icon-document-copy" v-clipboard:copy="value" v-clipboard:success="clipboardSuccess" style="float:right">复制</el-link>
<el-link :underline="false" icon="el-icon-document-copy" v-clipboard:copy="value" v-clipboard:success="clipboardSuccess" style="float:right">{{ $t('device.device-edit.148398-55') }}</el-link>
<pre><code class="hljs" v-html="highlightedCode(value, key)"></code></pre>
</el-tab-pane>
</el-tabs>
@@ -235,7 +235,7 @@ export default {
// 预览参数
preview: {
open: false,
title: "代码预览",
title: this.$t('gen.index.467583-5'),
data: {},
activeName: "domain.java"
}
@@ -272,12 +272,12 @@ export default {
handleGenTable(row) {
const tableNames = row.tableName || this.tableNames;
if (tableNames == "") {
this.$modal.msgError("请选择要生成的数据");
this.$modal.msgError(this.$t('gen.index.467583-6'));
return;
}
if(row.genType === "1") {
genCode(row.tableName).then(response => {
this.$modal.msgSuccess("成功生成到自定义路径:" + row.genPath);
this.$modal.msgSuccess(this.$t('gen.index.467583-7') + row.genPath);
});
} else {
this.$download.zip("/tool/gen/batchGenCode?tables=" + tableNames, "ruoyi.zip");
@@ -286,10 +286,10 @@ export default {
/** 同步数据库操作 */
handleSynchDb(row) {
const tableName = row.tableName;
this.$modal.confirm('确认要强制同步"' + tableName + '"表结构吗?').then(function() {
this.$modal.confirm(this.$t('gen.index.467583-8') + tableName + this.$t('gen.index.467583-9')).then(function() {
return synchDb(tableName);
}).then(() => {
this.$modal.msgSuccess("同步成功");
this.$modal.msgSuccess(this.$t('gen.index.467583-10'));
}).catch(() => {});
},
/** 打开导入表弹窗 */
@@ -323,7 +323,7 @@ export default {
},
/** 复制代码成功 */
clipboardSuccess() {
this.$modal.msgSuccess("复制成功");
this.$modal.msgSuccess(this.$t('gen.index.467583-11'));
},
// 多选框选中数据
handleSelectionChange(selection) {
@@ -337,18 +337,13 @@ export default {
const tableId = row.tableId || this.ids[0];
const tableName = row.tableName || this.tableNames[0];
const params = { pageNum: this.queryParams.pageNum };
this.$tab.openPage("修改[" + tableName + "]生成配置", '/tool/gen-edit/index/' + tableId, params);
this.$tab.openPage(this.$t('update') + "[" + tableName + "]" + this.$t('gen.index.467583-4'), '/tool/gen-edit/index/' + tableId, params);
},
/** 删除按钮操作 */
handleDelete(row) {
const tableIds = row.tableId || this.ids;
this.$modal.confirm('是否确认删除表编号为"' + tableIds + '"的数据项?').then(function() {
this.$modal.confirm(this.$t('gen.index.467583-12', [tableIds])).then(function() {
return delTable(tableIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
}
}
};
</script>
this.$modal.msgSucc