|
@@ -0,0 +1,342 @@
|
|
|
+<template>
|
|
|
+ <div v-show="!sendDetailState.show">
|
|
|
+ <div class="common-dialog">
|
|
|
+ <div class="common-dialog-content">
|
|
|
+ <el-row :gutter="24">
|
|
|
+ <el-col :span="24">
|
|
|
+ <div class="information-approval1">
|
|
|
+ <el-row :gutter="24">
|
|
|
+ <el-col :span="17">
|
|
|
+ <div class="common-dialog-title-box">
|
|
|
+ <h4 class="common-dialog-title">发送统计</h4>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6" style="text-align: right">
|
|
|
+ <el-text class="common-btn-text-primary" @click="showSendDetails">发送明细</el-text>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <!-- 添加分割线 -->
|
|
|
+ <div style="border-top: 1px solid #dcdfe6; margin-top: -25px"></div>
|
|
|
+ <div class="common-dialog-box">
|
|
|
+ <div class="send-statistics">
|
|
|
+ <el-row :gutter="24">
|
|
|
+ <el-col :span="8">
|
|
|
+ <p>选择人数 {{ totalPeople }}</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <p>成功 {{ successCount }} | 失败 {{ failureCount }} | 发送中 {{ sendingCount }}</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <p>反馈 {{ feedbackCount }} | 未反馈 {{ unresponsiveCount }}</p>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="information-approval">
|
|
|
+ <div class="common-dialog-title-box">
|
|
|
+ <h3 class="common-dialog-title">信息详情</h3>
|
|
|
+ </div>
|
|
|
+ <div class="common-dialog-box">
|
|
|
+ <el-form ref="form" :model="formData" :rules="rules" label-width="120px">
|
|
|
+ <h4>信息内容</h4>
|
|
|
+ <div class="box1">
|
|
|
+ <el-form-item label="标题:" prop="title">
|
|
|
+ <el-input v-model="formData.title" placeholder="请输入标题" style="width: 468px !important" />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="发布单位:" prop="publishUnit">
|
|
|
+ <el-input v-model="formData.publishUnit" placeholder="请输入发布单位" style="width: 468px !important" />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="信息模板:" prop="templateType">
|
|
|
+ <el-radio-group v-model="formData.templateType">
|
|
|
+ <el-radio label="预设模板">预设模板</el-radio>
|
|
|
+ <el-radio label="自定义模板">自定义模板</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="formData.templateType === '预设模板'" label="预设模板:" prop="presetTemplate">
|
|
|
+ <el-select v-model="selectedPresetTemplate" placeholder="请选择预设模板" style="width: 300px !important">
|
|
|
+ <el-option v-for="option in presetTemplates" :key="option.value" :label="option.label" :value="option.value"></el-option>
|
|
|
+ </el-select>
|
|
|
+ <el-text class="common-btn-text-primary" @click="showExample">样例</el-text>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="formData.templateType === '自定义模板'" prop="customPageUrl">
|
|
|
+ <el-input v-model="formData.customPageUrl" placeholder="请输入自定义详情页面链接地址" style="width: 468px !important" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="信息内容:" prop="messageContent">
|
|
|
+ <el-input
|
|
|
+ v-model="formData.messageContent"
|
|
|
+ type="textarea"
|
|
|
+ placeholder="请输入信息内容"
|
|
|
+ style="width: 468px !important"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="查看附件:">
|
|
|
+ <ul>
|
|
|
+ <li v-for="(file, index) in files" :key="index" @click="viewFile(file)">
|
|
|
+ {{ file.name }}
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
+ <h4>推送配置</h4>
|
|
|
+ <div class="box1">
|
|
|
+ <el-form-item label="发布名单:" prop="releaseList" style="width: 468px !important"
|
|
|
+ ><span class="highlight-text">已选择{{ formData.releaseList }}人</span>
|
|
|
+ <el-text class="common-btn-text-primary" @click="showReleaseList">查看详情</el-text>
|
|
|
+ </el-form-item>
|
|
|
+ <el-row :gutter="18">
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="发布时间:" prop="releaseTime">
|
|
|
+ <el-button type="text" @click="publishNow">立即发布</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="定时发布:" prop="timing">
|
|
|
+ <el-date-picker v-model="formData.timing" type="datetime" placeholder="选择发布时间"></el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-form-item label="消息反馈方式:" prop="feedbackWay" style="width: 468px !important">
|
|
|
+ <el-select v-model="formData.feedbackWay" placeholder="请选择消息反馈方式">
|
|
|
+ <el-option v-for="option in feedbackOptions" :key="option.value" :label="option.label" :value="option.value"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
+ <h4 class="common-dialog-title">审核配置</h4>
|
|
|
+ <div class="box1">
|
|
|
+ <el-form-item label="审核材料:" prop="materials">
|
|
|
+ <ul>
|
|
|
+ <li v-for="(material, index) in auditMaterials" :key="index">
|
|
|
+ {{ material }}
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="审核人:" prop="auditor">
|
|
|
+ <el-input v-model="formData.auditor" placeholder="请输入审核人姓名" style="width: 368px !important" />
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="information-approval">
|
|
|
+ <div class="common-dialog-title-box">
|
|
|
+ <h3 class="common-dialog-title">信息审批</h3>
|
|
|
+ </div>
|
|
|
+ <div class="common-dialog-box">
|
|
|
+ <div class="approval-process">
|
|
|
+ <div class="box1">
|
|
|
+ <h4>审批流程</h4>
|
|
|
+ <div>
|
|
|
+ <p v-if="processingTime">已用时:{{ processingTime }}</p>
|
|
|
+ </div>
|
|
|
+ <el-timeline style="width: 700px">
|
|
|
+ <template v-for="(item, index) in approvalSteps" :key="index">
|
|
|
+ <el-timeline-item placement="top">
|
|
|
+ <el-card>
|
|
|
+ <h4>{{ item.status }}</h4>
|
|
|
+ <p v-if="item.handler">
|
|
|
+ 处理人:<span>{{ item.handler }}</span
|
|
|
+ > 时间:{{ item.time }}
|
|
|
+ </p>
|
|
|
+ <p v-if="item.result">处理结果:{{ item.result }}</p>
|
|
|
+ <p v-if="item.comment">具体意见:{{ item.comment }}</p>
|
|
|
+ </el-card>
|
|
|
+ </el-timeline-item>
|
|
|
+ </template>
|
|
|
+ </el-timeline>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <div class="common-dialog-footer">
|
|
|
+ <el-button @click="$emit('close')">返回</el-button>
|
|
|
+ <el-button :disabled="true">编辑</el-button>
|
|
|
+ <el-button :disabled="true">提交</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <SendDetail v-if="sendDetailState.show" :event-id="sendDetailState.eventId" @close="handleCancel" />
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+import { reactive, ref } from 'vue';
|
|
|
+import { ElMessage } from 'element-plus';
|
|
|
+import SendDetail from './sendDetail.vue';
|
|
|
+const totalPeople = 46600;
|
|
|
+const successCount = 29998;
|
|
|
+const failureCount = 13;
|
|
|
+const sendingCount = 9989;
|
|
|
+const feedbackCount = 3000;
|
|
|
+const unresponsiveCount = 2;
|
|
|
+const processingTime = '1小时 6分22秒';
|
|
|
+const formData = ref({
|
|
|
+ title: '',
|
|
|
+ publishUnit: '',
|
|
|
+ templateType: '',
|
|
|
+ messageContent: '',
|
|
|
+ releaseList: 0,
|
|
|
+ releaseTime: '',
|
|
|
+ feedbackWay: '',
|
|
|
+ auditor: '',
|
|
|
+ timing: '',
|
|
|
+ materials: '',
|
|
|
+ processingTime: ''
|
|
|
+});
|
|
|
+
|
|
|
+const auditMaterials = ['2023年4月29日广东省发布突发事件预警信息.pdf', '审核材料2'];
|
|
|
+const rules = {
|
|
|
+ title: [{ required: true, message: '请填写标题', trigger: 'blur' }],
|
|
|
+ publishUnit: [{ required: true, message: '请填写发布单位', trigger: 'blur' }],
|
|
|
+ releaseList: [{ required: true, message: '请选择发布名单', trigger: 'change' }],
|
|
|
+ timing: [{ required: true, message: '请选择发布时间', trigger: 'change' }],
|
|
|
+ feedbackWay: [{ required: true, message: '请选择消息反馈方式', trigger: 'change' }],
|
|
|
+ auditor: [{ required: true, message: '请填写审核人', trigger: 'blur' }]
|
|
|
+};
|
|
|
+const files = ref([
|
|
|
+ { name: '2023年4月29日广东省发布突发事件预警信息.pdf', url: '/path/to/file1.pdf' },
|
|
|
+ { name: '2023年5月15日上海市发布突发事件预警信息.docx', url: '/path/to/file2.docx' }
|
|
|
+]);
|
|
|
+const feedbackOptions = [
|
|
|
+ { value: '仅需阅读', label: '仅需阅读' },
|
|
|
+ { value: '点击确认', label: '点击确认' },
|
|
|
+ { value: '签字确认', label: '签字确认' }
|
|
|
+];
|
|
|
+const presetTemplates = [
|
|
|
+ { value: 'template1', label: '模板一' },
|
|
|
+ { value: 'template2', label: '模板二' }
|
|
|
+];
|
|
|
+const selectedPresetTemplate = ref('');
|
|
|
+const approvalSteps = ref([
|
|
|
+ {
|
|
|
+ status: '提交',
|
|
|
+ handler: '李四',
|
|
|
+ result: '提交',
|
|
|
+ time: '2023-05-17 10:00',
|
|
|
+ comment: '无'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ status: '领导审批',
|
|
|
+ handler: '王五',
|
|
|
+ result: '审批通过',
|
|
|
+ time: '2023-05-17 13:00',
|
|
|
+ comment: '无'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ status: '重新提交',
|
|
|
+ handler: '李四',
|
|
|
+ result: '重新提交',
|
|
|
+ time: '2023-05-17 12:00',
|
|
|
+ comment: '无'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ status: '领导审批',
|
|
|
+ handler: '王五',
|
|
|
+ result: '审批通过',
|
|
|
+ time: '2023-05-17 13:00',
|
|
|
+ comment: '无'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ status: '结束',
|
|
|
+ handler: '',
|
|
|
+ result: '',
|
|
|
+ time: '2023-05-17 14:00',
|
|
|
+ comment: ''
|
|
|
+ }
|
|
|
+]);
|
|
|
+let sendDetailState = reactive({
|
|
|
+ show: false,
|
|
|
+ eventId: ''
|
|
|
+});
|
|
|
+const handleCancel = () => {
|
|
|
+ sendDetailState.show = false;
|
|
|
+};
|
|
|
+const viewFile = (file) => {
|
|
|
+ window.open(file.url, '_blank'); // 打开新标签页
|
|
|
+};
|
|
|
+const showSendDetails = (row) => {
|
|
|
+ if (row) {
|
|
|
+ sendDetailState.eventId = row.id; // 假设eventId是id字段
|
|
|
+ sendDetailState.show = true;
|
|
|
+ }
|
|
|
+};
|
|
|
+const showReleaseList = () => {
|
|
|
+ ElMessage.info('点击了查看发布名单');
|
|
|
+};
|
|
|
+const publishNow = () => {
|
|
|
+ ElMessage.info('点击了立即发布');
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.common-dialog {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ background-color: #ffffff;
|
|
|
+ padding: 20px;
|
|
|
+ border-radius: 8px;
|
|
|
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
|
+}
|
|
|
+
|
|
|
+.common-dialog-title-box {
|
|
|
+ margin-bottom: 20px;
|
|
|
+}
|
|
|
+
|
|
|
+.common-dialog-title {
|
|
|
+ font-size: 1.2rem;
|
|
|
+ color: #333;
|
|
|
+}
|
|
|
+
|
|
|
+.box1 {
|
|
|
+ border: 1px solid #dcdfe6; /* 浅灰色边框 */
|
|
|
+ padding: 10px; /* 可选:为了美观,可以添加一些内边距 */
|
|
|
+ margin-bottom: 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.highlight-text {
|
|
|
+ font-weight: bold; /* 加粗 */
|
|
|
+ font-size: 1.2em; /* 放大字体大小 */
|
|
|
+}
|
|
|
+
|
|
|
+.information-approval {
|
|
|
+ width: 100%;
|
|
|
+ max-width: 800px;
|
|
|
+ padding: 1rem;
|
|
|
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
|
+ border-radius: 8px;
|
|
|
+}
|
|
|
+.information-approval1 {
|
|
|
+ width: 100%;
|
|
|
+ max-width: 100%;
|
|
|
+ padding: 1rem;
|
|
|
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
|
+ border-radius: 8px;
|
|
|
+}
|
|
|
+.approval-process {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 1rem;
|
|
|
+}
|
|
|
+.common-dialog-footer {
|
|
|
+ margin-top: 0.5rem;
|
|
|
+}
|
|
|
+.send-statistics {
|
|
|
+ width: 100%;
|
|
|
+}
|
|
|
+.common-dialog-footer {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center; /* 水平居中 */
|
|
|
+ gap: 10px; /* 按钮之间的间距 */
|
|
|
+ margin-top: 50px;
|
|
|
+}
|
|
|
+</style>
|