diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtUserGroupMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtUserGroupMapper.xml index 42d52e0183..ef23fddcfa 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtUserGroupMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtUserGroupMapper.xml @@ -74,7 +74,8 @@ \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/notice/sender/NoticeModel.java b/backend/src/main/java/io/metersphere/notice/sender/NoticeModel.java index 557e004c31..b9bc183e46 100644 --- a/backend/src/main/java/io/metersphere/notice/sender/NoticeModel.java +++ b/backend/src/main/java/io/metersphere/notice/sender/NoticeModel.java @@ -58,6 +58,10 @@ public class NoticeModel implements Serializable { * 接收人 */ private List receivers; + /** + * 抄送人 + */ + private List recipients; /** * */ diff --git a/backend/src/main/java/io/metersphere/notice/sender/impl/MailNoticeSender.java b/backend/src/main/java/io/metersphere/notice/sender/impl/MailNoticeSender.java index 82fa231127..51249df4e9 100644 --- a/backend/src/main/java/io/metersphere/notice/sender/impl/MailNoticeSender.java +++ b/backend/src/main/java/io/metersphere/notice/sender/impl/MailNoticeSender.java @@ -15,6 +15,7 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -81,6 +82,14 @@ public class MailNoticeSender extends AbstractNoticeSender { return; } + List recipients = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(noticeModel.getRecipients())){ + recipients = noticeModel.getRecipients().stream() + .map(Receiver::getUserId) + .distinct() + .collect(Collectors.toList()); + } + String[] users = userIds.stream() .distinct() .toArray(String[]::new); @@ -88,6 +97,14 @@ public class MailNoticeSender extends AbstractNoticeSender { LogUtil.info("收件人地址: {}", userIds); helper.setText(context, true); helper.setTo(users); + + if(CollectionUtils.isNotEmpty(recipients)){ + String[] ccArr = recipients.stream() + .distinct() + .toArray(String[]::new); + helper.setCc(ccArr); + } + javaMailSender.send(mimeMessage); } diff --git a/backend/src/main/java/io/metersphere/xpack b/backend/src/main/java/io/metersphere/xpack index 8e54dfc4cd..25fa8fc0d7 160000 --- a/backend/src/main/java/io/metersphere/xpack +++ b/backend/src/main/java/io/metersphere/xpack @@ -1 +1 @@ -Subproject commit 8e54dfc4cd510f2d676787dad1599067ac02f2d9 +Subproject commit 25fa8fc0d7972b56f86fb466417ec55588a4812d diff --git a/frontend/src/assets/enterpriseReportExample.png b/frontend/src/assets/enterpriseReportExample.png new file mode 100644 index 0000000000..08f2611476 Binary files /dev/null and b/frontend/src/assets/enterpriseReportExample.png differ diff --git a/frontend/src/business/components/xpack b/frontend/src/business/components/xpack index a598375541..4ab83e897b 160000 --- a/frontend/src/business/components/xpack +++ b/frontend/src/business/components/xpack @@ -1 +1 @@ -Subproject commit a598375541a45898616db5085fd38c192bd6df4b +Subproject commit 4ab83e897bdbc55729fd7418b6a77e73e39b1df9 diff --git a/frontend/src/i18n/en-US.js b/frontend/src/i18n/en-US.js index 527dcf59ed..5bd950a3ba 100644 --- a/frontend/src/i18n/en-US.js +++ b/frontend/src/i18n/en-US.js @@ -6,6 +6,7 @@ export default { trash: "Trash", yes: "yes", no: "no", + example: "Demo", excelFile: "Excel", xmindFile: "Xmind", default: "default", @@ -50,6 +51,7 @@ export default { save_as: 'Save as', update: 'Update', save_success: 'Saved successfully', + send_success: 'Send successfully', delete_success: 'Deleted successfully', modify_success: 'Modify Success', copy_success: 'Copy Success', diff --git a/frontend/src/i18n/zh-CN.js b/frontend/src/i18n/zh-CN.js index 080f17dbd0..351a0e6162 100644 --- a/frontend/src/i18n/zh-CN.js +++ b/frontend/src/i18n/zh-CN.js @@ -6,6 +6,7 @@ export default { trash: "回收站", yes: "是", no: "否", + example: "示例", excelFile: "表格文件.xls", xmindFile: "思维导图.xmind", default: "默认值", @@ -49,6 +50,7 @@ export default { save_as: '另存为', update: '更新', save_success: '保存成功', + send_success: '发送成功', delete_success: '删除成功', copy_success: '复制成功', modify_success: '修改成功', @@ -67,7 +69,7 @@ export default { input_limit: '长度在 {0} 到 {1} 个字符', login: '登录', welcome: '一站式开源持续测试平台', - theme_color:'主题色', + theme_color: '主题色', username: '姓名', password: '密码', input_username: '请输入用户姓名', @@ -403,8 +405,8 @@ export default { custom_num: '自定义编号', version: '版本', is_new: "是否新建", - form_config:"表单配置", - form_content:"表单内容" + form_config: "表单配置", + form_content: "表单内容" }, login: { normal_Login: "普通登录", @@ -635,8 +637,8 @@ export default { zentao_account: '禅道账户', zentao_password: '禅道密码', zentao_prompt_information: '该信息为通过禅道提交缺陷的的用户名、密码,若未填写,则使用工作空间中配置的默认信息', - zentao_config_tip:"参考禅道配置文件中 $config->requestType 的值 ", - zentao_config_path:"配置文件参考路径:/opt/zbox/app/zentao/config/my.php", + zentao_config_tip: "参考禅道配置文件中 $config->requestType 的值 ", + zentao_config_path: "配置文件参考路径:/opt/zbox/app/zentao/config/my.php", use_tip: '使用指引:', use_tip_tapd: 'Tapd Basic Auth 账号信息在"公司管理-安全与集成-开放平台"中查询', use_tip_jira: 'Jira software server 认证信息为 账号密码,Jira software cloud 认证信息为 账号+令牌(账户设置-安全-创建API令牌)', @@ -798,7 +800,7 @@ export default { add_project_batch: '批量添加到项目', add_workspace_batch: "批量添加到工作空间", add_project_batch_tip: '默认为成员添加只读用户组(系统)', - import_user_tip:'用户组只支持系统默认用户组', + import_user_tip: '用户组只支持系统默认用户组', }, group: { add: '添加用户组', @@ -893,7 +895,7 @@ export default { file_id: '文件ID', avg_response_time: '平均响应时间', tps: '每秒传输的事物处理个数', - plan_share_url:'链接跳转是否登陆' + plan_share_url: '链接跳转是否登陆' }, load_test: { id: '测试ID', @@ -1059,13 +1061,13 @@ export default { jar_config: { title: "上传jar包", jar_file: "jar包", - jar_manage:"JAR包管理", + jar_manage: "JAR包管理", delete_tip: "删除需重启服务后生效", file_exist: "该项目下已存在该jar包", upload_limit_size: "上传文件大小不能超过 30MB!", upload_limit_size_warn: "上传文件大小不能超过 {0} MB!", upload_limit: "上传文件大小不能超过", - upload_tip:"只能上传JAR包" + upload_tip: "只能上传JAR包" }, batch_menus: { select_all_data: "选择所有数据(共{0}条)", @@ -2219,8 +2221,8 @@ export default { status_delete: '删除', status_in_progress: '接受/处理', status_rejected: '拒绝', - status_upcoming:'待办', - status_reopened:'重新打开', + status_upcoming: '待办', + status_reopened: '重新打开', please_choose_current_owner: "请选择处理人", tapd_current_owner: "Tapd 处理人", zentao_bug_build: "禅道 影响版本", @@ -2532,7 +2534,7 @@ export default { script_entry: "脚本执行入口", plugin_id: "插件ID", script_view: "查看脚本", - warning_tip:'未找到脚本内容' + warning_tip: '未找到脚本内容' }, mail: { input_mail_subject: "请输入邮件主题", diff --git a/frontend/src/i18n/zh-TW.js b/frontend/src/i18n/zh-TW.js index 5c2b574a30..6b5dc78703 100644 --- a/frontend/src/i18n/zh-TW.js +++ b/frontend/src/i18n/zh-TW.js @@ -6,6 +6,7 @@ export default { trash: "回收站", yes: "是", no: "否", + example: "示例", excelFile: "表格文件.xls", xmindFile: "思維導圖.xmind", default: "默認值", @@ -49,6 +50,7 @@ export default { save_as: '另存為', update: '更新', save_success: '保存成功', + send_success: '發送成功', delete_success: '刪除成功', copy_success: '復製成功', modify_success: '修改成功', @@ -67,7 +69,7 @@ export default { input_limit: '長度在 {0} 到 {1} 個字符', login: '登錄', welcome: '一站式開源持續測試平臺', - theme_color:'主題色', + theme_color: '主題色', username: '姓名', password: '密碼', input_username: '請輸入用戶姓名', @@ -403,8 +405,8 @@ export default { custom_num: '自定義編號', version: '版本', is_new: "是否新建", - form_config:"表單配置", - form_content:"表單內容" + form_config: "表單配置", + form_content: "表單內容" }, login: { normal_Login: "普通登錄", @@ -635,8 +637,8 @@ export default { zentao_account: '禪道賬戶', zentao_password: '禪道密碼', zentao_prompt_information: '該信息為通過禪道提交缺陷的的用戶名、密碼,若未填寫,則使用工作空間中配置的默認信息', - zentao_config_tip:"參考禪道配置文件中 $config->requestType 的值 ", - zentao_config_path:"配置文件參考路徑:/opt/zbox/app/zentao/config/my.php", + zentao_config_tip: "參考禪道配置文件中 $config->requestType 的值 ", + zentao_config_path: "配置文件參考路徑:/opt/zbox/app/zentao/config/my.php", use_tip: '使用指引:', use_tip_tapd: 'Tapd Basic Auth 賬號信息在"公司管理-安全與集成-開放平臺"中查詢', use_tip_jira: 'Jira software server 認證信息為 賬號密碼,Jira software cloud 認證信息為 賬號+令牌(賬戶設置-安全-創建API令牌)', @@ -798,7 +800,7 @@ export default { add_project_batch: '批量添加到項目', add_workspace_batch: "批量添加到工作空間", add_project_batch_tip: '默認為成員添加只讀用戶組(系統)', - import_user_tip:'用戶組只支持系統默認用戶組' + import_user_tip: '用戶組只支持系統默認用戶組' }, group: { add: '添加用戶組', @@ -893,7 +895,7 @@ export default { file_id: '文件ID', avg_response_time: '平均響應時間', tps: '每秒傳輸的事物處理個數', - plan_share_url:'鏈接跳轉是否登陸' + plan_share_url: '鏈接跳轉是否登陸' }, load_test: { id: '測試ID', @@ -1059,13 +1061,13 @@ export default { jar_config: { title: "上傳jar包", jar_file: "jar包", - jar_manage:"JAR包管理", + jar_manage: "JAR包管理", delete_tip: "刪除需重啟服務後生效", file_exist: "該項目下已存在該jar包", upload_limit_size: "上傳文件大小不能超過 30MB!", upload_limit_size_warn: "上傳文件大小不能超過 {0} MB!", upload_limit: "上傳文件大小不能超過", - upload_tip:"只能上傳JAR包" + upload_tip: "只能上傳JAR包" }, batch_menus: { select_all_data: "選擇所有數據(共{0}條)", @@ -2219,8 +2221,8 @@ export default { status_delete: '刪除', status_in_progress: '接受/處理', status_rejected: '拒絕', - status_upcoming:'待辦', - status_reopened:'重新打開', + status_upcoming: '待辦', + status_reopened: '重新打開', please_choose_current_owner: "請選擇處理人", tapd_current_owner: "Tapd 處理人", zentao_bug_build: "禪道 影響版本", @@ -2532,7 +2534,7 @@ export default { script_entry: "腳本執行入口", plugin_id: "插件ID", script_view: "查看腳本", - warning_tip:'未找到腳本內容' + warning_tip: '未找到腳本內容' }, mail: { input_mail_subject: "請輸入郵件主題",