| 
					
				 | 
			
			
				@@ -0,0 +1,248 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <el-dialog 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        title="发送邮件" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :visible.sync="dialogVisible" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        append-to-body 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        width="50%" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :close-on-click-modal="false" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        custom-class="email-dialog" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    > 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-form 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ref="emailForm" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :model="formData" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :rules="formRules" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            label-width="80px" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            label-position="right" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        > 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-form-item label="收件人" prop="to"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-input 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-model="formData.to" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    placeholder="多个收件人用分号(;)分隔" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    clearable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ></el-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-form-item label="抄送" prop="cc"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-input 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-model="formData.cc" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    placeholder="多个抄送人用分号(;)分隔" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    clearable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ></el-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-form-item label="密送" prop="bcc"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-input 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-model="formData.bcc" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    placeholder="多个密送人用分号(;)分隔" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    clearable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ></el-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-form-item label="主题" prop="subject"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-input 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-model="formData.subject" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    placeholder="请输入邮件主题" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    clearable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ></el-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-form-item label="正文" prop="content"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <avue-ueditor v-model="formData.content" v-bind="options"></avue-ueditor> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-form-item label="附件"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-input 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-model="formData.attachments" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    placeholder="请输入文件名" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    clearable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ></el-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </el-form> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <span slot="footer" class="dialog-footer"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <el-button @click="dialogVisible = false" size="medium">取 消</el-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <el-button 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          type="primary" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          @click="submitForm" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          size="medium" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          :loading="sending" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      >发 送</el-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </el-dialog> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import {getToken} from "@/util/auth"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { generateMailFile } from "@/api/iosBasicData/reports"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    name: 'EmailDialog', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    props: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        visible: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            type: Boolean, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            default: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    data() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dialogVisible: this.visible, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sending: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            options: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //普通上传地址 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                action: "/api/blade-resource/oss/endpoint/put-file", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                customConfig: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                oss: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                headers: {"Blade-Auth": "Bearer " + getToken()}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                data: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                propsHttp: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    home: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    url: 'url', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    res: 'data' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            formData: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                to: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                cc: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                bcc: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                subject: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                content: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                attachments: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                fileType: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                fileContent: '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            formRules: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                to: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    {required: true, message: '请输入收件人邮箱', trigger: 'blur'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        validator: this.validateEmails, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        message: '邮箱格式不正确', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        trigger: 'blur' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                subject: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    {required: true, message: '请输入邮件主题', trigger: 'blur'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    {max: 100, message: '主题长度不能超过100个字符', trigger: 'blur'} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                content: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    {required: true, message: '请输入邮件正文', trigger: 'blur'} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                attachments: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    {required: true, message: '请输入附件名', trigger: 'blur'} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    watch: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        visible(newVal) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.dialogVisible = newVal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dialogVisible(newVal) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.$emit('update:visible', newVal) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!newVal) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.resetForm() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        validateEmails(rule, value, callback) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!value) return callback() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const emails = value.split(';').filter(e => e.trim()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (const email of emails) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!emailRegex.test(email.trim())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return callback(new Error(rule.message)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            callback() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        submitForm() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.$refs.emailForm.validate(valid => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (valid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    this.sendEmail() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sendEmail() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.sending = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                fileName: this.formData.attachments, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                fileType: this.formData.fileType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sendTo: this.formData.to, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mailTitle: this.formData.subject, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mailContent: this.formData.message, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                fileContent: this.formData.fileContent, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            generateMailFile(param).then(res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                console.info(res) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 模拟发送请求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setTimeout(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.$message.success('邮件发送成功') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.sending = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.dialogVisible = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 1500) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        resetForm() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.$refs.emailForm.resetFields() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.formData.attachments = '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<style lang="scss"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.email-dialog { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    border-radius: 8px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    .el-dialog__header { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        border-bottom: 1px solid #f0f0f0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        padding: 15px 20px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        .el-dialog__title { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            font-size: 18px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            font-weight: 600; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            color: #333; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    .el-dialog__body { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        padding: 20px 30px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        .el-form-item { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            margin-bottom: 22px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .el-form-item__label { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                color: #666; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                font-weight: normal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .el-input__inner, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .el-textarea__inner { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                border-radius: 4px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                transition: border-color 0.3s; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                &:focus { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    border-color: #409eff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    .el-dialog__footer { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        border-top: 1px solid #f0f0f0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        padding: 15px 20px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        text-align: right; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        .el-button { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            min-width: 80px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            border-radius: 4px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</style> 
			 |