فهرست منبع

Merge remote-tracking branch 'origin/dev' into dev

Hwf 7 ماه پیش
والد
کامیت
61114416b9

+ 105 - 30
src/views/informationissue/informationDetail.vue

@@ -9,13 +9,13 @@
           <h4 class="common-dialog-title">信息内容</h4>
           <div class="box1">
             <el-form-item label="标题:" prop="title">
-              <el-input v-model="formData.title" placeholder="请输入标题" style="width: 468px !important" />
+              <el-input v-model="formData.title" :disabled="!isEditable" placeholder="请输入标题" style="width: 468px !important" />
             </el-form-item>
             <el-form-item label="发布单位:" prop="publish_group">
-              <el-input v-model="formData.publish_group" placeholder="请输入发布单位" style="width: 468px !important" />
+              <el-input v-model="formData.publish_group" :disabled="!isEditable" placeholder="请输入发布单位" style="width: 468px !important" />
             </el-form-item>
             <el-form-item label="信息模板:" prop="template_id">
-              <el-radio-group v-model="formData.template_id">
+              <el-radio-group v-model="formData.template_id" :disabled="!isEditable">
                 <el-radio label="预设模板">预设模板</el-radio>
                 <el-radio label="自定义模板">自定义模板</el-radio>
               </el-radio-group>
@@ -26,11 +26,17 @@
               </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-form-item v-if="formData.template_id === '自定义模板'" prop="customPageUrl">
               <el-input v-model="formData.customPageUrl" placeholder="请输入自定义详情页面链接地址" style="width: 468px !important" />
             </el-form-item>
             <el-form-item label="信息内容:" prop="content">
-              <el-input v-model="formData.content" type="textarea" placeholder="请输入信息内容" style="width: 468px !important"></el-input>
+              <el-input
+                v-model="formData.content"
+                type="textarea"
+                :disabled="!isEditable"
+                placeholder="请输入信息内容"
+                style="width: 468px !important"
+              ></el-input>
             </el-form-item>
             <el-form-item label="查看附件:">
               <ul>
@@ -44,22 +50,27 @@
           <div class="box1">
             <el-form-item label="发布名单:" prop="user_count" style="width: 468px !important">
               <span class="highlight-text">已选择{{ formData.user_count }}人</span>
-              <el-text class="common-btn-text-primary" @click="showReleaseList">查看详情</el-text>
+              <template v-if="isEditable">
+                <el-text class="common-btn-text-primary" @click="toggleReleaseList">查看详情</el-text>
+              </template>
+              <template v-else>
+                <span class="common-btn-text-primary disabled">查看详情</span>
+              </template>
             </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-button type="text" :disabled="!isEditable" @click="publishNow">立即发布</el-button>
                 </el-form-item>
               </el-col>
               <el-col :span="13">
                 <el-form-item label="定时发布:" prop="publish_time">
-                  <el-date-picker v-model="formData.publish_time" type="datetime" placeholder="选择发布时间"></el-date-picker>
+                  <el-date-picker v-model="formData.publish_time" type="datetime" :disabled="!isEditable" placeholder="选择发布时间"></el-date-picker>
                 </el-form-item>
               </el-col>
             </el-row>
             <el-form-item label="消息反馈方式:" prop="response_type" style="width: 468px !important">
-              <el-select v-model="displayFeedbackText" placeholder="请选择消息反馈方式">
+              <el-select v-model="displayFeedbackText" :disabled="!isEditable" placeholder="请选择消息反馈方式">
                 <el-option v-for="option in feedbackOptions" :key="option.value" :label="option.label" :value="option.value"></el-option>
               </el-select>
             </el-form-item>
@@ -74,7 +85,7 @@
               </ul>
             </el-form-item>
             <el-form-item label="审核人:" prop="examine_by">
-              <el-input v-model="formData.examine_by" placeholder="请输入审核人姓名" style="width: 368px !important" />
+              <el-input v-model="formData.examine_by" :disabled="!isEditable" placeholder="请输入审核人姓名" style="width: 368px !important" />
             </el-form-item>
           </div>
         </el-form>
@@ -86,20 +97,21 @@
       </div>
     </div>
   </div>
+  <ContactSelect v-model="contactSelectState.show" :tree-data="treeData" :default-check-data="selectData" @confirm="handleData" />
 </template>
 
 <script setup lang="ts">
-import { ref, watch } from 'vue';
+import { reactive, ref, watch } from 'vue';
 import { getInformationView, getInformationUpdate } from '@/api/informationissue/informationissue';
 import { ElMessage } from 'element-plus';
-
+import ContactSelect from '@/components/ContactSelect/index.vue';
 const props = defineProps<{
   eventId: string | number;
 }>();
 const emit = defineEmits<{
   (e: 'close'): void;
 }>();
-
+const isEditable = ref(false);
 const formData = ref({
   title: '',
   publish_group: '',
@@ -112,7 +124,69 @@ const formData = ref({
   publish_time: '',
   materials: ''
 });
-
+const treeData = reactive([
+  {
+    id: 1,
+    label: '茂南区',
+    deptType: true,
+    children: [
+      {
+        id: 2,
+        userId: 1,
+        label: '李里丽'
+      },
+      {
+        id: 3,
+        userId: 2,
+        label: '何里'
+      },
+      {
+        id: 4,
+        userId: 3,
+        label: '张力'
+      }
+    ]
+  },
+  {
+    id: 5,
+    label: '电白区',
+    deptType: true,
+    children: [
+      {
+        id: 6,
+        userId: 4,
+        label: '王五'
+      },
+      {
+        id: 7,
+        userId: 5,
+        label: '冯可'
+      },
+      {
+        id: 8,
+        userId: 6,
+        label: '刘森'
+      },
+      {
+        id: 9,
+        userId: 3,
+        label: '张力'
+      }
+    ]
+  }
+]);
+let contactSelectState = reactive({
+  show: false,
+  eventId: ''
+});
+const selectData = ref([]);
+const handleData = (data) => {
+  selectData.value = data;
+  formData.value.user_count = data.length;
+};
+const toggleReleaseList = () => {
+  contactSelectState.show = !contactSelectState.show;
+};
 const presetTemplates = [
   { value: 'template1', label: '模板一' },
   { value: 'template2', label: '模板二' }
@@ -125,11 +199,10 @@ const feedbackOptions = [
 ];
 
 const selectedPresetTemplate = ref('');
-const selectedPresetTemplateExample = ref('');
 
 const files = ref([
   { name: '2023年4月29日广东省发布突发事件预警信息.pdf', url: '/path/to/file1.pdf' },
-  { name: '2023年5月15日上海市发布突发事件预警信息.docx', url: '/path/to/file2.docx' }
+  { name: '2023年5月15日广东省发布突发事件预警信息.docx', url: '/path/to/file2.docx' }
 ]);
 // 在原有的反馈选项数组的基础上,创建一个映射对象(map object)
 const feedbackTextMap = {
@@ -177,27 +250,29 @@ const viewFile = (file) => {
   window.open(file.url, '_blank'); // 打开新标签页
 };
 
-const showReleaseList = () => {
-  ElMessage.info('点击了查看发布名单');
-};
-
 const publishNow = () => {
   ElMessage.info('点击了立即发布');
 };
 
 const submitForm = async () => {
   if (validateFormData()) {
-    try {
-      // 将 formData 与 eventId 一同发送到后端
-      const requestData = { ...formData.value, info_id: props.eventId };
-      const response = await getInformationUpdate(requestData);
-      if (response.code === 200) {
-        ElMessage.success('信息更新成功');
-      } else {
-        ElMessage.error(response.msg);
+    // 如果是编辑状态,则执行保存操作
+    if (isEditable.value) {
+      try {
+        const requestData = { ...formData.value, info_id: props.eventId };
+        const response = await getInformationUpdate(requestData);
+        if (response.code === 200) {
+          ElMessage.success('信息更新成功');
+          isEditable.value = false; // 保存后重新禁用编辑
+        } else {
+          ElMessage.error(response.msg);
+        }
+      } catch (error) {
+        ElMessage.error('更新信息失败,请稍后再试');
       }
-    } catch (error) {
-      ElMessage.error('更新信息失败,请稍后再试');
+    } else {
+      // 如果不是编辑状态,则切换到编辑模式
+      isEditable.value = true;
     }
   }
 };

+ 68 - 55
src/views/informationissue/informationView.vue

@@ -21,10 +21,10 @@
                 <div class="send-statistics">
                   <el-row :gutter="24">
                     <el-col :span="8">
-                      <p>选择人数 {{ totalPeople }}</p>
+                      <p>选择人数 {{ formData.user_count }}</p>
                     </el-col>
                     <el-col :span="8">
-                      <p>成功 {{ successCount }} | 失败 {{ failureCount }} | 发送中 {{ sendingCount }}</p>
+                      <p>成功 {{ formData.user_ok_count }} | 失败 {{ formData.user_err_count }} | 发送中 {{ formData.user_sending_count }}</p>
                     </el-col>
                     <el-col :span="8">
                       <p>反馈 {{ feedbackCount }} | 未反馈 {{ unresponsiveCount }}</p>
@@ -46,35 +46,30 @@
                   <h4>信息内容</h4>
                   <div class="box1">
                     <el-form-item label="标题:" prop="title">
-                      <el-input v-model="formData.title" placeholder="请输入标题" style="width: 468px !important" />
+                      <el-input v-model="formData.title" disabled 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 label="发布单位:" prop="publish_group">
+                      <el-input v-model="formData.publish_group" disabled placeholder="请输入发布单位" style="width: 468px !important" />
                     </el-form-item>
 
-                    <el-form-item label="信息模板:" prop="templateType">
-                      <el-radio-group v-model="formData.templateType">
+                    <el-form-item label="信息模板:" prop="template_id">
+                      <el-radio-group v-model="formData.template_id" disabled>
                         <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-form-item v-if="formData.template_id === '预设模板'" 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-form-item v-if="formData.template_id === '自定义模板'" 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 label="信息内容:" prop="content">
+                      <el-input v-model="formData.content" type="textarea" disabled placeholder="请输入信息内容" style="width: 468px !important"></el-input>
                     </el-form-item>
                     <el-form-item label="查看附件:">
                       <ul>
@@ -87,23 +82,22 @@
                   <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>
+                      ><span class="highlight-text">已选择{{ formData.user_count }}人</span>
                     </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 label="发布时间:" prop="publish_time">
+                          <el-button type="text" disabled @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 label="定时发布:" prop="publish_time">
+                          <el-date-picker v-model="formData.publish_time" type="datetime" disabled 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-form-item label="消息反馈方式:" prop="response_type" style="width: 468px !important">
+                      <el-select v-model="displayFeedbackText" disabled placeholder="请选择消息反馈方式">
                         <el-option v-for="option in feedbackOptions" :key="option.value" :label="option.label" :value="option.value"></el-option>
                       </el-select>
                     </el-form-item>
@@ -117,8 +111,8 @@
                         </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 label="审核人:" prop="examine_by">
+                      <el-input v-model="formData.examine_by" disabled placeholder="请输入审核人姓名" style="width: 368px !important" />
                     </el-form-item>
                   </div>
                 </el-form>
@@ -171,47 +165,41 @@
 
 <script setup lang="ts">
 import { reactive, ref } from 'vue';
+import { getInformationView } from '@/api/informationissue/informationissue';
 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 props = defineProps({
+  eventId: {
+    type: String,
+    required: true
+  }
+});
 const formData = ref({
   title: '',
-  publishUnit: '',
-  templateType: '',
-  messageContent: '',
-  releaseList: 0,
+  publish_group: '',
+  template_id: '',
+  content: '',
+  user_count: '',
+  user_ok_count: '',
+  user_err_count: '',
+  user_sending_count: '',
   releaseTime: '',
-  feedbackWay: '',
-  auditor: '',
-  timing: '',
+  response_type: '',
+  examine_by: '',
+  publish_time: '',
   materials: '',
-  processingTime: ''
+  processingTime: '',
+  examines: []
 });
 
 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' }
+  { 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: '模板二' }
@@ -254,6 +242,20 @@ const approvalSteps = ref([
     comment: ''
   }
 ]);
+const feedbackTextMap = {
+  0: '仅需阅读',
+  1: '点击确认',
+  2: '签字确认'
+};
+// 创建一个计算属性,根据 formData 中的 response_type 返回对应的文本
+const displayFeedbackText = computed({
+  get() {
+    return feedbackTextMap[formData.value.response_type];
+  },
+  set(value) {
+    formData.value.response_type = Object.keys(feedbackTextMap).find((key) => feedbackTextMap[key] === value);
+  }
+});
 let sendDetailState = reactive({
   show: false,
   eventId: ''
@@ -270,12 +272,23 @@ const showSendDetails = (row) => {
     sendDetailState.show = true;
   }
 };
-const showReleaseList = () => {
-  ElMessage.info('点击了查看发布名单');
-};
 const publishNow = () => {
   ElMessage.info('点击了立即发布');
 };
+const fetchInformation = async () => {
+  try {
+    const response = await getInformationView({ info_id: props.eventId });
+    if (response && response.data) {
+      formData.value = response.data;
+    }
+  } catch (error) {
+    console.error('Failed to fetch information:', error);
+  }
+};
+// 在组件挂载时调用 fetchInformation
+onMounted(() => {
+  fetchInformation();
+});
 </script>
 
 <style scoped>

+ 0 - 135
src/views/informationissue/phoneList.vue

@@ -1,135 +0,0 @@
-<template>
-  <el-dialog v-model="showSearch" title="发送明细" width="80%" @close="$emit('close')">
-    <div class="app-container home">
-      <h2 @click="show = true">智慧应急工作台</h2>
-      <ContactSelect v-model="show" :tree-data="treeData" :default-check-data="selectData" @confirm="handleData" />
-    </div>
-  </el-dialog>
-</template>
-
-<script setup name="Index" lang="ts">
-import ContactSelect from '@/components/ContactSelect/index.vue';
-const goTarget = (url: string) => {
-  window.open(url, '__blank');
-};
-let show = ref(true);
-const treeData = reactive([
-  {
-    id: 1,
-    label: '茂南区',
-    deptType: true,
-    children: [
-      {
-        id: 2,
-        userId: 1,
-        label: '李里丽'
-      },
-      {
-        id: 3,
-        userId: 2,
-        label: '何里'
-      },
-      {
-        id: 4,
-        userId: 3,
-        label: '张力'
-      }
-    ]
-  },
-  {
-    id: 5,
-    label: '电白区',
-    deptType: true,
-    children: [
-      {
-        id: 6,
-        userId: 4,
-        label: '王五'
-      },
-      {
-        id: 7,
-        userId: 5,
-        label: '冯可'
-      },
-      {
-        id: 8,
-        userId: 6,
-        label: '刘森'
-      },
-      {
-        id: 9,
-        userId: 3,
-        label: '张力'
-      }
-    ]
-  }
-]);
-const selectData = ref([]);
-const handleData = (data) => {
-  selectData.value = data;
-};
-</script>
-
-<style scoped lang="scss">
-.home {
-  blockquote {
-    padding: 10px 20px;
-    margin: 0 0 20px;
-    font-size: 17.5px;
-    border-left: 5px solid #eee;
-  }
-  hr {
-    margin-top: 20px;
-    margin-bottom: 20px;
-    border: 0;
-    border-top: 1px solid #eee;
-  }
-  .col-item {
-    margin-bottom: 20px;
-  }
-
-  ul {
-    padding: 0;
-    margin: 0;
-  }
-
-  font-family: 'open sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  color: #676a6c;
-  overflow-x: hidden;
-
-  ul {
-    list-style-type: none;
-  }
-
-  h4 {
-    margin-top: 0px;
-  }
-
-  h2 {
-    margin-top: 10px;
-    font-size: 26px;
-    font-weight: 100;
-  }
-
-  p {
-    margin-top: 10px;
-
-    b {
-      font-weight: 700;
-    }
-  }
-
-  .update-log {
-    ol {
-      display: block;
-      list-style-type: decimal;
-      margin-block-start: 1em;
-      margin-block-end: 1em;
-      margin-inline-start: 0;
-      margin-inline-end: 0;
-      padding-inline-start: 40px;
-    }
-  }
-}
-</style>

+ 1 - 1
src/views/informationissue/sendDetail.vue

@@ -88,7 +88,7 @@
 
 <script setup lang="ts">
 import { reactive, ref, toRefs } from 'vue';
-import { ElMessage } from 'element-plus'; // 引入提示信息模块
+import { ElMessage } from 'element-plus';
 
 // 初始化查询条件
 const initFormData = reactive({