liyongli hace 2 años
padre
commit
c91d7a6edd

+ 104 - 0
src/api/index.js

@@ -109,6 +109,11 @@ export function getEconomize(ori) {
   });
 }
 
+/**
+ * 报料
+ * @param {object} ori
+ * @returns
+ */
 export function getreporting(ori) {
   return ajax({
     api: '/clue/list',
@@ -120,6 +125,62 @@ export function getreporting(ori) {
     },
   });
 }
+/**
+ * 报料删除
+ */
+export function delreporting(ori) {
+  return ajax({
+    api: '/clue/delete',
+    data: ori.data,
+    type: 'ajax',
+    method: 'GET',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
+  });
+}
+/**
+ * 查看报料
+ */
+export function getreportingDetail(ori) {
+  return ajax({
+    api: '/clue/info',
+    data: ori.data,
+    type: 'ajax',
+    method: 'GET',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
+  });
+}
+/**
+ * 审核报料
+ */
+export function reportingShenhe(ori) {
+  return ajax({
+    api: '/clue/verify',
+    data: ori.data,
+    type: 'ajax',
+    method: 'GET',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
+  });
+}
+/**
+ * 回复报料
+ */
+export function reportingReply(ori) {
+  return ajax({
+    api: '/clue/store',
+    data: ori.data,
+    type: 'ajax',
+    method: 'GET',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
+  });
+}
 
 /**
  * 获取模板列表
@@ -135,3 +196,46 @@ export function getTemplateList(ori) {
     },
   });
 }
+/**
+ * 生成页面
+ */
+export function createTemplateList(ori) {
+  return ajax({
+    api: '/h5operate/store',
+    data: ori.data,
+    type: 'ajax',
+    method: 'POST',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
+  });
+}
+/**
+ * 更新页面
+ */
+export function updateTemplateList(ori) {
+  return ajax({
+    api: '/h5operate/update',
+    data: ori.data,
+    type: 'ajax',
+    method: 'POST',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
+  });
+}
+
+/**
+ * 个人页面列表
+ */
+export function getPersonalList(ori) {
+  return ajax({
+    api: '/h5operate/list',
+    data: ori.data,
+    type: 'ajax',
+    method: 'POST',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
+  });
+}

+ 65 - 0
src/view/allMedia/H5Editor.vue

@@ -82,6 +82,25 @@
           </div>
         </div>
       </div>
+      <el-button-group class="saveGroup">
+        <el-button type="primary" @click="savePageFunc">保存修改</el-button>
+      </el-button-group>
+
+      <el-dialog v-model="showpage" title="保存页面">
+        <el-form :model="pageconfig">
+          <el-form-item label="页面名称(英文)">
+            <el-input v-model="pageconfig.name" />
+          </el-form-item>
+          <el-form-item label="页面描述">
+            <el-input v-model="pageconfig.desc" />
+          </el-form-item>
+        </el-form>
+        <template #footer>
+          <span class="dialog-footer">
+            <el-button type="primary" @click="savePage"> 保存 </el-button>
+          </span>
+        </template>
+      </el-dialog>
     </div>
     <div class="H5Editor_right">
       <div v-for="(item, index) in hoversList" :key="item.url">
@@ -100,6 +119,8 @@
 <script setup>
 import { ref, provide } from 'vue';
 import { useRoute } from 'vue-router';
+import { createTemplateList, updateTemplateList } from '../../api/index';
+import { ElMessage } from 'element-plus';
 
 // 中间显示模块组件
 import H5Image from './components/H5Editor/img.vue';
@@ -174,6 +195,44 @@ const createKey = i => {
   return i + Date.now();
 };
 
+const showpage = ref(false);
+const pageconfig = ref({
+  name: '',
+  desc: '',
+});
+const savePageFunc = () => {
+  showpage.value = true;
+  pageconfig.value.name = '';
+  pageconfig.value.desc = '';
+};
+
+const savePage = () => {
+  if (item.id) {
+    updateTemplateList({
+      data: {
+        h5Name: pageconfig.value.name,
+        h5Desc: pageconfig.value.desc,
+        h5Conf: JSON.stringify(hoversList.value),
+        id: item.id,
+      },
+    });
+  } else
+    createTemplateList({
+      data: {
+        h5Name: pageconfig.value.name,
+        h5Desc: pageconfig.value.desc,
+        h5Conf: JSON.stringify(hoversList.value),
+        templateId: item.templateId,
+      },
+    }).then(r => {
+      console.log(r);
+      showpage.value = false;
+      pageconfig.value.name = '';
+      pageconfig.value.desc = '';
+      ElMessage.success('保存成功');
+    });
+};
+
 // provide 传递方法
 provide('starEditorFormwork', (value, i) => {
   selectComponent(value, i);
@@ -280,4 +339,10 @@ provide('deleteItemComponents', value => {
   border: 1px solid rgba(0, 0, 0, 0);
   position: relative;
 }
+
+.saveGroup {
+  position: absolute;
+  right: 2em;
+  top: 1em;
+}
 </style>

+ 60 - 40
src/view/allMedia/H5Mall.vue

@@ -1,14 +1,5 @@
 <template>
   <el-scrollbar class="H5Mall">
-    <div class="search line">
-      <el-icon :size="25" class="searchIcon"><Search /></el-icon>
-      <input
-        class="searchinput"
-        type="text"
-        placeholder="请输入搜索内容"
-        v-model="searchText"
-      />
-    </div>
     <div class="main">
       <div
         class="item"
@@ -27,6 +18,36 @@
         </div>
       </div>
     </div>
+    <el-button @click="showData" class="createPageList"> 已生成页面 </el-button>
+    <el-dialog v-model="show" title="已创建页面">
+      <el-table :data="localList">
+        <el-table-column property="title" label="页面名称" />
+        <el-table-column label="状态">
+          <template #default="scope"> 
+            {{ h5Status[scope.row.h5Status] }}
+        </template>
+        </el-table-column>
+        <el-table-column property="url" label="操作">
+          <template #default="scope">
+            <el-link
+              type="primary"
+              v-if="scope.row.url"
+              :href="scope.row.url"
+              target="_blank"
+              >打开</el-link
+            >
+            <el-button
+              link
+              type="primary"
+              size="small"
+              @click="() => editBL(scope)"
+            >
+              修改
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
   </el-scrollbar>
 </template>
 
@@ -38,7 +59,7 @@ import eyeIcon from '../../assets/img/eye.png';
 import H5 from './components/H5.vue';
 import LONGPAGE from './components/LONGPAGE.vue';
 import POSTER from './components/POSTER.vue';
-import { getTemplateList } from '../../api/index.js';
+import { getTemplateList, getPersonalList } from '../../api/index.js';
 
 const components = {
   H5,
@@ -48,11 +69,16 @@ const components = {
 const router = useRouter();
 // const route = useRoute();
 
-const searchText = ref('');
+const show = ref(false);
+const localList = ref([]);
 const list = ref([]);
 
+const h5Status = [
+    '生成中',
+    "已生成"
+]
+
 getTemplateList({}).then(r => {
-  console.log(r);
   list.value = r || [];
 });
 
@@ -64,6 +90,23 @@ const toH5Editor = item => {
     },
   });
 };
+
+const showData = () => {
+  getPersonalList({ data: {} }).then(r => {
+    console.log(r);
+    localList.value = r;
+    show.value = true;
+  });
+};
+
+const editBL = item => {
+  router.push({
+    path: '/h5editor',
+    query: {
+      item: JSON.stringify(item.row),
+    },
+  });
+};
 </script>
 
 <style scoped>
@@ -71,34 +114,6 @@ const toH5Editor = item => {
   padding: 1em;
   height: 100%;
 }
-.searchinput {
-  outline: none;
-  border: none;
-  height: 40px;
-  line-height: 40px;
-  font-size: 16px;
-  display: block;
-  width: 100%;
-}
-.search {
-  width: 60%;
-  margin: 0 auto;
-  font-size: 0;
-  height: 40px;
-  line-height: 40px;
-  border-radius: 20px;
-  padding: 0 50px 0 20px;
-  position: relative;
-  overflow: hidden;
-  border: 1px solid var(--el-border-color);
-}
-
-.searchIcon {
-  position: absolute;
-  right: 15px;
-  top: 5px;
-  color: var(--el-border-color);
-}
 
 .main {
   font-weight: 500;
@@ -146,4 +161,9 @@ const toH5Editor = item => {
 .main img {
   vertical-align: middle;
 }
+.createPageList {
+  position: absolute;
+  top: 1em;
+  right: 1em;
+}
 </style>

+ 167 - 21
src/view/allMedia/components/reporting_list.vue

@@ -1,7 +1,5 @@
 <template>
-  <div class="mainTitle">
-    文章列表
-  </div>
+  <div class="mainTitle">文章列表</div>
   <br />
   <div class="lists">
     <!-- @click="() => toDetail(item)" -->
@@ -9,46 +7,140 @@
       <el-table-column prop="title" label="标题" width="450px" />
       <el-table-column prop="phone" label="用户名" />
       <el-table-column prop="source" label="来源">
-        <template #default="scope"> 
-            {{source[scope.row.source - 1]}}
+        <template #default="scope">
+          {{ source[scope.row.source - 1] }}
         </template>
       </el-table-column>
-      <el-table-column prop="" label="回复状态" >
-        <template #default="scope"> 
-            {{replyFlag[scope.row.replyFlag]}}
+      <el-table-column prop="" label="回复状态">
+        <template #default="scope">
+          {{ replyFlag[scope.row.replyFlag] }}
         </template>
       </el-table-column>
-      <el-table-column prop="createTime" label="更新时间" >
-        <template #default="scope"> 
-            {{format(scope.row.createTime)}}
+      <el-table-column prop="createTime" label="更新时间">
+        <template #default="scope">
+          {{ format(scope.row.createTime) }}
         </template>
       </el-table-column>
-      <el-table-column prop="modifyTime" label="推送时间" >
-        <template #default="scope"> 
-            {{format(scope.row.modifyTime)}}
+      <el-table-column prop="modifyTime" label="推送时间">
+        <template #default="scope">
+          {{ format(scope.row.modifyTime) }}
         </template>
       </el-table-column>
-      <el-table-column prop="" label="报料类型" />
       <el-table-column prop="clueInfoCount" label="数量" />
-      <el-table-column prop="" label="操作" />
+      <el-table-column prop="" label="操作">
+        <template #default="scope">
+          <el-popconfirm
+            v-if="scope.row.status === 0"
+            confirm-button-text="通过"
+            cancel-button-text="不通过"
+            @confirm="() => confirm(scope)"
+            @cancel="() => cancel(scope)"
+            title="是否通过该报料?"
+          >
+            <template #reference>
+              <el-button link type="primary" size="small">审核</el-button>
+            </template>
+          </el-popconfirm>
+          <el-button
+            link
+            type="primary"
+            size="small"
+            @click="() => lookBL(scope)"
+          >
+            查看
+          </el-button>
+          <el-button
+            link
+            type="primary"
+            size="small"
+            @click="() => replyBL(scope)"
+          >
+            回复
+          </el-button>
+          <el-button
+            link
+            type="danger"
+            size="small"
+            @click="() => deleteBL(scope)"
+          >
+            删除
+          </el-button>
+        </template>
+      </el-table-column>
     </el-table>
+
+    <el-dialog v-model="reportingDetail" title="报料详情" width="30%">
+      <el-row>
+        <el-col :span="5">联系方式:</el-col>
+        <el-col :span="19">
+          <div v-text="reportingDetailData.phone"></div>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="5">上报地址:</el-col>
+        <el-col :span="19">
+          <div v-text="reportingDetailData.address"></div>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="5">报料详情:</el-col>
+        <el-col :span="19">
+          <div v-text="reportingDetailData.content"></div>
+        </el-col>
+      </el-row>
+    </el-dialog>
+    <el-dialog v-model="reportingReplyStatus" title="回复" width="30%">
+      <el-row>
+        <el-col :span="5">报料内容:</el-col>
+        <el-col :span="19">
+          <div v-text="reportingDetailData.content"></div>
+        </el-col>
+      </el-row>
+      <br />
+      <el-row>
+        <el-col :span="5">回复内容:</el-col>
+        <el-col :span="19">
+          <el-input
+            v-model="reportingDetailData.reply"
+            :rows="2"
+            type="textarea"
+            placeholder="请输入回复内容"
+          />
+        </el-col>
+      </el-row>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button type="primary" @click="replySave"> 确定 </el-button>
+        </span>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
 <script setup>
 import { ref, defineExpose } from 'vue';
 // import { useRouter } from 'vue-router';
-import dayjs from "dayjs";
-import { getreporting } from '../../../api/index';
+import dayjs from 'dayjs';
+import { ElMessage } from 'element-plus';
+import {
+  getreporting,
+  delreporting,
+  getreportingDetail,
+  reportingShenhe,
+  reportingReply,
+} from '../../../api/index';
 let T = undefined;
 let total = -1;
 // const router = useRouter();
 const listTable = ref([]);
-const source = ['热线电话','微信公众号','app', '小程序'];
+const reportingDetail = ref(false);
+const reportingReplyStatus = ref(false);
+const reportingDetailData = ref({});
+const source = ['热线电话', '微信公众号', 'app', '小程序'];
 const replyFlag = ['未回复', '已回复'];
 const format = value => {
-    return dayjs(value).format('YYYY-MM-DD HH:mm:ss')
-}
+  return dayjs(value).format('YYYY-MM-DD HH:mm:ss');
+};
 // const toDetail = item => {
 //   router.push({
 //     path: '/analysis_detail',
@@ -80,6 +172,56 @@ const getlist = search => {
   }, 200);
 };
 
+const deleteBL = item => {
+  delreporting({ data: { id: item.row.id } }).then(() => {
+    ElMessage({
+      type: 'success',
+      message: '删除成功',
+    });
+  });
+};
+
+const lookBL = item => {
+  getreportingDetail({ data: { id: item.row.id } }).then(res => {
+    reportingDetail.value = true;
+    reportingDetailData.value = res;
+  });
+};
+
+const replyBL = item => {
+  reportingReplyStatus.value = true;
+  reportingDetailData.value = item.row;
+};
+
+const replySave = () => {
+  reportingReplyStatus.value = false;
+  reportingReply({
+    data: {
+      clueId: reportingDetailData.value.id,
+      content: reportingDetailData.value.reply || '',
+      userName: reportingReplyStatus.value.author || '',
+    },
+  });
+};
+
+const confirm = item => {
+  reportingShenhe({ data: { id: item.row.id, status: 1 } }).then(() => {
+    ElMessage({
+      type: 'success',
+      message: '审核通过',
+    });
+  });
+};
+
+const cancel = item => {
+  reportingShenhe({ data: { id: item.row.id, status: 2 } }).then(() => {
+    ElMessage({
+      type: 'success',
+      message: '拒绝通过',
+    });
+  });
+};
+
 defineExpose({
   getlist,
 });
@@ -110,4 +252,8 @@ defineExpose({
 .list:not(:last-child) {
   border-bottom: 1px dashed #b9c0d3;
 }
+
+.el-row {
+  line-height: 1.5em;
+}
 </style>