Sfoglia il codice sorgente

feat(locales): update English and Chinese translations with new terms

- Added new translation keys for user and role management features, including "ID", "Save", "Remark", "Name", "Mobile Phone", and others.
- Enhanced existing translations for better clarity and consistency across the application.
- Updated input prompts and labels to support new functionalities in the user and role management sections.
yb 3 giorni fa
parent
commit
2e3b0a0460
4 ha cambiato i file con 119 aggiunte e 49 eliminazioni
  1. 29 0
      src/locales/en.json
  2. 29 0
      src/locales/zh-cn.json
  3. 25 19
      src/views/system/role/index.vue
  4. 36 30
      src/views/system/user/index.vue

+ 29 - 0
src/locales/en.json

@@ -2,6 +2,7 @@
   "Cloudflare Stream": "Cloudflare Stream",
   "Cloudflare Stream 配置": "Cloudflare Stream Configuration",
   "FFmpeg 版本": "FFmpeg Version",
+  "ID": "ID",
   "IP": "IP",
   "IP地址": "IP Address",
   "LSS": "LSS",
@@ -62,6 +63,7 @@
   "任务数": "Task Number",
   "位置": "Location",
   "例如: 测试推流-001": "For example: Test Stream-001",
+  "保存": "Save",
   "保存配置": "Save Configuration",
   "修改失败": "Update failed",
   "修改密码": "Change Password",
@@ -109,11 +111,14 @@
   "在线": "Online",
   "地址": "Address",
   "型号": "Model",
+  "备注": "Remark",
   "复制": "Copy",
   "复制失败": "Copy failed",
   "多视频监控": "Multi-video Monitoring",
   "如何获取 Customer Subdomain": "How to get Customer Subdomain",
+  "姓名": "Name",
   "密码": "Password",
+  "密码已重置为默认密码": "Password has been reset to the default password",
   "密码长度不能少于6位": "Password length must be at least 6 characters",
   "尚未建立 Live Stream": "Live Stream Not Created",
   "已启用": "Enabled",
@@ -136,6 +141,7 @@
   "截图": "Screenshot",
   "所属机器": "Machine",
   "手动": "Manual",
+  "手机号": "Mobile Phone",
   "批量删除": "Batch Delete",
   "批量删除失败": "Batch delete failed",
   "技术支持": "Support",
@@ -177,6 +183,8 @@
   "新增成功": "Added successfully",
   "新增摄像头": "Add Camera",
   "新增机器": "Add Machine",
+  "新增用户": "Add User",
+  "新增角色": "Add Role",
   "新密码": "New Password",
   "新建标签": "New Tab",
   "是": "Yes",
@@ -197,6 +205,8 @@
   "机器ID": "Machine ID",
   "机器总数": "Total Machines",
   "机器管理": "Machine Management",
+  "权限配置": "Permission Configuration",
+  "权限配置保存成功": "Permission configuration saved successfully",
   "查看": "View",
   "查看Cloudflare Stream": "View Cloudflare Stream",
   "查询": "Search",
@@ -212,6 +222,7 @@
   "测试视频": "Test Video",
   "测试连接": "Test Connection",
   "添加": "Add",
+  "添加成功": "Added successfully",
   "添加摄像头": "Add Camera",
   "添加时间": "Add Time",
   "清空": "Clear",
@@ -222,6 +233,7 @@
   "生成的地址": "Generated URL",
   "用户": "Users",
   "用户名": "Username",
+  "用户数": "User Count",
   "登录": "Sign In",
   "登录失败": "Login failed",
   "登录失败,请检查网络": "Login failed, please check your network",
@@ -239,9 +251,11 @@
   "确定要删除该 Live Stream 吗?": "Are you sure you want to delete the Live Stream?",
   "确定要删除选中的": "Are you sure you want to delete the selected",
   "确认密码": "Confirm Password",
+  "禁用": "Disable",
   "离线": "Offline",
   "稳定性": "Uptime",
   "端口": "Port",
+  "管理员角色不能删除": "Admin role cannot be deleted",
   "系统信息": "System Info",
   "系统状态": "System Status",
   "系统运行正常": "System running normally",
@@ -251,6 +265,8 @@
   "编辑厂家": "Edit Factory",
   "编辑摄像头": "Edit Camera",
   "编辑机器": "Edit Machine",
+  "编辑用户": "Edit User",
+  "编辑角色": "Edit Role",
   "缩小": "Zoom Out",
   "能力": "Capabilities",
   "自动播放": "Autoplay",
@@ -262,6 +278,9 @@
   "观看统计": "Watching Statistics",
   "视频地址": "Video URL",
   "视频播放测试": "Video Playback Test",
+  "角色": "Role",
+  "角色名称": "Role Name",
+  "角色编码": "Role Code",
   "记住我": "Remember me",
   "设备ID": "Device ID",
   "设备ID / 名称": "Device ID / Name",
@@ -283,20 +302,29 @@
   "请输入名称": "Please enter name",
   "请输入地址": "Please enter address",
   "请输入型号": "Please enter model",
+  "请输入备注": "Please enter remark",
+  "请输入姓名": "Please enter name",
   "请输入密码": "Please enter password",
+  "请输入手机号": "Please enter mobile phone",
+  "请输入描述": "Please enter description",
   "请输入摄像头ID": "Please enter Camera ID",
   "请输入新密码": "Please enter the new password",
   "请输入机器ID": "Please enter Machine ID",
   "请输入正确的IP地址": "Please enter a valid IP address",
+  "请输入正确的邮箱": "Please enter a valid email",
   "请输入用户名": "Please enter username",
   "请输入视频地址并点击播放": "Please enter video URL and click play",
+  "请输入角色名称": "Please enter role name",
+  "请输入角色编码": "Please enter role code",
   "请输入设备ID": "Please enter Device ID",
   "请输入设备名称": "Please enter device name",
   "请输入运行参数(JSON 格式)": "Please enter the runtime parameters (JSON format)",
+  "请输入邮箱": "Please enter email",
   "请选择": "Please select",
   "请选择 LSS 节点": "Please select LSS node",
   "请选择摄像头": "Please select camera",
   "请选择视频源并点击播放": "Please select video source and click play",
+  "请选择角色": "Please select role",
   "跳转失败": "Jump failed",
   "转换服务地址": "Proxy Service URL",
   "运行参数": "Runtime",
@@ -307,6 +335,7 @@
   "通道列表": "Channel List",
   "通道总数": "Total Channels",
   "速度": "Speed",
+  "邮箱": "Email",
   "配置说明": "Configuration Description",
   "重置": "Reset",
   "静音": "Muted",

+ 29 - 0
src/locales/zh-cn.json

@@ -2,6 +2,7 @@
   "Cloudflare Stream": "Cloudflare Stream",
   "Cloudflare Stream 配置": "Cloudflare Stream 配置",
   "FFmpeg 版本": "FFmpeg 版本",
+  "ID": "ID",
   "IP": "IP",
   "IP地址": "IP地址",
   "LSS": "LSS",
@@ -62,6 +63,7 @@
   "任务数": "任务数",
   "位置": "位置",
   "例如: 测试推流-001": "例如: 测试推流-001",
+  "保存": "保存",
   "保存配置": "保存配置",
   "修改失败": "修改失败",
   "修改密码": "修改密码",
@@ -109,11 +111,14 @@
   "在线": "在线",
   "地址": "地址",
   "型号": "型号",
+  "备注": "备注",
   "复制": "复制",
   "复制失败": "复制失败",
   "多视频监控": "多视频监控",
   "如何获取 Customer Subdomain": "如何获取 Customer Subdomain",
+  "姓名": "姓名",
   "密码": "密码",
+  "密码已重置为默认密码": "密码已重置为默认密码",
   "密码长度不能少于6位": "密码长度不能少于6位",
   "尚未建立 Live Stream": "尚未建立 Live Stream",
   "已启用": "已启用",
@@ -136,6 +141,7 @@
   "截图": "截图",
   "所属机器": "所属机器",
   "手动": "手动",
+  "手机号": "手机号",
   "批量删除": "批量删除",
   "批量删除失败": "批量删除失败",
   "技术支持": "技术支持",
@@ -177,6 +183,8 @@
   "新增成功": "新增成功",
   "新增摄像头": "新增摄像头",
   "新增机器": "新增机器",
+  "新增用户": "新增用户",
+  "新增角色": "新增角色",
   "新密码": "新密码",
   "新建标签": "新建标签",
   "是": "是",
@@ -197,6 +205,8 @@
   "机器ID": "机器ID",
   "机器总数": "机器总数",
   "机器管理": "机器管理",
+  "权限配置": "权限配置",
+  "权限配置保存成功": "权限配置保存成功",
   "查看": "查看",
   "查看Cloudflare Stream": "查看Cloudflare Stream",
   "查询": "查询",
@@ -212,6 +222,7 @@
   "测试视频": "测试视频",
   "测试连接": "测试连接",
   "添加": "添加",
+  "添加成功": "添加成功",
   "添加摄像头": "添加摄像头",
   "添加时间": "添加时间",
   "清空": "清空",
@@ -222,6 +233,7 @@
   "生成的地址": "生成的地址",
   "用户": "用户",
   "用户名": "用户名",
+  "用户数": "用户数",
   "登录": "登录",
   "登录失败": "登录失败",
   "登录失败,请检查网络": "登录失败,请检查网络",
@@ -239,9 +251,11 @@
   "确定要删除该 Live Stream 吗?": "确定要删除该 Live Stream 吗?",
   "确定要删除选中的": "确定要删除选中的",
   "确认密码": "确认密码",
+  "禁用": "禁用",
   "离线": "离线",
   "稳定性": "稳定性",
   "端口": "端口",
+  "管理员角色不能删除": "管理员角色不能删除",
   "系统信息": "系统信息",
   "系统状态": "系统状态",
   "系统运行正常": "系统运行正常",
@@ -251,6 +265,8 @@
   "编辑厂家": "编辑厂家",
   "编辑摄像头": "编辑摄像头",
   "编辑机器": "编辑机器",
+  "编辑用户": "编辑用户",
+  "编辑角色": "编辑角色",
   "缩小": "缩小",
   "能力": "能力",
   "自动播放": "自动播放",
@@ -262,6 +278,9 @@
   "观看统计": "观看统计",
   "视频地址": "视频地址",
   "视频播放测试": "视频播放测试",
+  "角色": "角色",
+  "角色名称": "角色名称",
+  "角色编码": "角色编码",
   "记住我": "记住我",
   "设备ID": "设备ID",
   "设备ID / 名称": "设备ID / 名称",
@@ -283,20 +302,29 @@
   "请输入名称": "请输入名称",
   "请输入地址": "请输入地址",
   "请输入型号": "请输入型号",
+  "请输入备注": "请输入备注",
+  "请输入姓名": "请输入姓名",
   "请输入密码": "请输入密码",
+  "请输入手机号": "请输入手机号",
+  "请输入描述": "请输入描述",
   "请输入摄像头ID": "请输入摄像头ID",
   "请输入新密码": "请输入新密码",
   "请输入机器ID": "请输入机器ID",
   "请输入正确的IP地址": "请输入正确的IP地址",
+  "请输入正确的邮箱": "请输入正确的邮箱",
   "请输入用户名": "请输入用户名",
   "请输入视频地址并点击播放": "请输入视频地址并点击播放",
+  "请输入角色名称": "请输入角色名称",
+  "请输入角色编码": "请输入角色编码",
   "请输入设备ID": "请输入设备ID",
   "请输入设备名称": "请输入设备名称",
   "请输入运行参数(JSON 格式)": "请输入运行参数(JSON 格式)",
+  "请输入邮箱": "请输入邮箱",
   "请选择": "请选择",
   "请选择 LSS 节点": "请选择 LSS 节点",
   "请选择摄像头": "请选择摄像头",
   "请选择视频源并点击播放": "请选择视频源并点击播放",
+  "请选择角色": "请选择角色",
   "跳转失败": "跳转失败",
   "转换服务地址": "转换服务地址",
   "运行参数": "运行参数",
@@ -307,6 +335,7 @@
   "通道列表": "通道列表",
   "通道总数": "通道总数",
   "速度": "速度",
+  "邮箱": "邮箱",
   "配置说明": "配置说明",
   "重置": "重置",
   "静音": "静音",

+ 25 - 19
src/views/system/role/index.vue

@@ -120,25 +120,27 @@
       :close-on-click-modal="false"
       destroy-on-close
     >
-      <el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
-        <el-form-item :label="t('角色名称')" prop="roleName">
-          <el-input v-model="form.roleName" :placeholder="t('请输入角色名称')" />
-        </el-form-item>
-        <el-form-item :label="t('角色编码')" prop="roleCode">
-          <el-input v-model="form.roleCode" :disabled="isEdit" :placeholder="t('请输入角色编码')" />
-        </el-form-item>
-        <el-form-item :label="t('排序')" prop="sort">
-          <el-input-number v-model="form.sort" :min="0" :max="999" />
-        </el-form-item>
-        <el-form-item :label="t('状态')" prop="status">
-          <el-radio-group v-model="form.status">
-            <el-radio value="enabled">{{ t('启用') }}</el-radio>
-            <el-radio value="disabled">{{ t('禁用') }}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item :label="t('描述')" prop="description">
-          <el-input v-model="form.description" type="textarea" :rows="3" :placeholder="t('请输入描述')" />
-        </el-form-item>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="auto">
+        <div class="role-form-container">
+          <el-form-item :label="t('角色名称')" prop="roleName">
+            <el-input v-model="form.roleName" :placeholder="t('请输入角色名称')" />
+          </el-form-item>
+          <el-form-item :label="t('角色编码')" prop="roleCode">
+            <el-input v-model="form.roleCode" :disabled="isEdit" :placeholder="t('请输入角色编码')" />
+          </el-form-item>
+          <el-form-item :label="t('排序')" prop="sort">
+            <el-input-number v-model="form.sort" :min="0" :max="999" />
+          </el-form-item>
+          <el-form-item :label="t('状态')" prop="status">
+            <el-radio-group v-model="form.status">
+              <el-radio value="enabled">{{ t('启用') }}</el-radio>
+              <el-radio value="disabled">{{ t('禁用') }}</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item :label="t('描述')" prop="description">
+            <el-input v-model="form.description" type="textarea" :rows="3" :placeholder="t('请输入描述')" />
+          </el-form-item>
+        </div>
       </el-form>
       <template #footer>
         <div class="drawer-footer">
@@ -508,6 +510,10 @@ onMounted(() => {
   box-sizing: border-box;
 }
 
+.role-form-container {
+  padding: 0 20px;
+}
+
 .search-form {
   flex-shrink: 0;
   margin-bottom: 16px;

+ 36 - 30
src/views/system/user/index.vue

@@ -112,36 +112,38 @@
       :close-on-click-modal="false"
       destroy-on-close
     >
-      <el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
-        <el-form-item :label="t('用户名')" prop="username">
-          <el-input v-model="form.username" :disabled="isEdit" :placeholder="t('请输入用户名')" />
-        </el-form-item>
-        <el-form-item :label="t('姓名')" prop="realName">
-          <el-input v-model="form.realName" :placeholder="t('请输入姓名')" />
-        </el-form-item>
-        <el-form-item :label="t('邮箱')" prop="email">
-          <el-input v-model="form.email" :placeholder="t('请输入邮箱')" />
-        </el-form-item>
-        <el-form-item :label="t('手机号')" prop="phone">
-          <el-input v-model="form.phone" :placeholder="t('请输入手机号')" />
-        </el-form-item>
-        <el-form-item :label="t('角色')" prop="roles">
-          <el-select v-model="form.roles" multiple :placeholder="t('请选择角色')" style="width: 100%">
-            <el-option v-for="role in roleOptions" :key="role.value" :label="role.label" :value="role.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item v-if="!isEdit" :label="t('密码')" prop="password">
-          <el-input v-model="form.password" type="password" show-password :placeholder="t('请输入密码')" />
-        </el-form-item>
-        <el-form-item :label="t('状态')" prop="status">
-          <el-radio-group v-model="form.status">
-            <el-radio value="enabled">{{ t('启用') }}</el-radio>
-            <el-radio value="disabled">{{ t('禁用') }}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item :label="t('备注')" prop="remark">
-          <el-input v-model="form.remark" type="textarea" :rows="3" :placeholder="t('请输入备注')" />
-        </el-form-item>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="auto">
+        <div class="role-form-container">
+          <el-form-item :label="t('用户名')" prop="username">
+            <el-input v-model="form.username" :disabled="isEdit" :placeholder="t('请输入用户名')" />
+          </el-form-item>
+          <el-form-item :label="t('姓名')" prop="realName">
+            <el-input v-model="form.realName" :placeholder="t('请输入姓名')" />
+          </el-form-item>
+          <el-form-item :label="t('邮箱')" prop="email">
+            <el-input v-model="form.email" :placeholder="t('请输入邮箱')" />
+          </el-form-item>
+          <el-form-item :label="t('手机号')" prop="phone">
+            <el-input v-model="form.phone" :placeholder="t('请输入手机号')" />
+          </el-form-item>
+          <el-form-item :label="t('角色')" prop="roles">
+            <el-select v-model="form.roles" multiple :placeholder="t('请选择角色')" style="width: 100%">
+              <el-option v-for="role in roleOptions" :key="role.value" :label="role.label" :value="role.value" />
+            </el-select>
+          </el-form-item>
+          <el-form-item v-if="!isEdit" :label="t('密码')" prop="password">
+            <el-input v-model="form.password" type="password" show-password :placeholder="t('请输入密码')" />
+          </el-form-item>
+          <el-form-item :label="t('状态')" prop="status">
+            <el-radio-group v-model="form.status">
+              <el-radio value="enabled">{{ t('启用') }}</el-radio>
+              <el-radio value="disabled">{{ t('禁用') }}</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item :label="t('备注')" prop="remark">
+            <el-input v-model="form.remark" type="textarea" :rows="3" :placeholder="t('请输入备注')" />
+          </el-form-item>
+        </div>
       </el-form>
       <template #footer>
         <div class="drawer-footer">
@@ -447,6 +449,10 @@ onMounted(() => {
   box-sizing: border-box;
 }
 
+.role-form-container {
+  padding: 0 20px;
+}
+
 .search-form {
   flex-shrink: 0;
   margin-bottom: 16px;