stjdydayou 4 jaren geleden
bovenliggende
commit
3ed432d50e

+ 8 - 0
src/api/statistics/popular_feelings.js

@@ -41,6 +41,14 @@ export function startSpider(ids) {
   })
 }
 
+export function stopSpider(ids) {
+  return request({
+    url: '/popular/feelings/stopSpider',
+    method: 'post',
+    data: ids
+  })
+}
+
 export function findDetailPage(data) {
   return request({
     url: '/popular/feelings/findDetailPage',

+ 10 - 15
src/views/statistics/popularFeelings/DialogForm.vue

@@ -4,23 +4,28 @@
     :title="form.id?'编辑舆情监控':'新建舆情监控'"
     :visible.sync="visible"
     width="800px"
+    :close-on-click-modal="false"
   >
     <el-form v-loading="isLoading" :model="form" label-width="100px" label-position="top">
       <el-row :gutter="24">
         <el-col :span="12">
-          <el-form-item label="标题">
-            <el-input v-model="form.siteName" />
+          <el-form-item label="网站名称">
+            <el-input v-model="form.siteName" placeholder="请输入网站名称"/>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="监控舆论词">
-            <el-input v-model="form.keywords" />
+            <el-input v-model="form.keywords" placeholder="请输入监控舆论词,多个词请用英文逗号“,”分开"/>
           </el-form-item>
         </el-col>
       </el-row>
 
       <el-form-item label="监控域名">
-        <el-input v-model="form.domain" />
+        <el-input v-model="form.domain" placeholder="请输入监控域名,不能带上http://或者https://,例如:www.baidu.com"/>
+      </el-form-item>
+
+      <el-form-item label="匹配URL">
+        <el-input v-model="form.urlPatterns" type="textarea" rows="5" placeholder="请输入匹配URL,可以使用正则表达式,每行一个"/>
       </el-form-item>
 
       <el-form-item label="启动地址">
@@ -37,8 +42,8 @@
           v-if="inputTagVisible"
           ref="saveTagInput"
           v-model="inputStartUrl"
-          class="input-new-tag"
           size="small"
+          placeholder="请输入启动地址,必需以http://或https://开始,例如:https://www.baidu.com/"
           @keyup.enter.native="handleInputConfirmTag"
           @blur="handleInputConfirmTag"
         />
@@ -59,16 +64,6 @@
 
 .button-new-tag {
   margin-left: 10px;
-  height: 32px;
-  line-height: 30px;
-  padding-top: 0;
-  padding-bottom: 0;
-}
-
-.input-new-tag {
-  width: 200px;
-  margin-left: 10px;
-  vertical-align: bottom;
 }
 </style>
 <script>

+ 72 - 16
src/views/statistics/popularFeelings/index.vue

@@ -3,13 +3,13 @@
 
     <el-form :model="queryForm" inline size="small">
       <el-form-item label="标题">
-        <el-input v-model="queryForm.title" placeholder="标题" />
+        <el-input v-model="queryForm.title" placeholder="标题"/>
       </el-form-item>
       <el-form-item label="监控词">
-        <el-input v-model="queryForm.keywords" placeholder="监控词" />
+        <el-input v-model="queryForm.keywords" placeholder="监控词"/>
       </el-form-item>
       <el-form-item label="监控网站">
-        <el-input v-model="queryForm.siteUrl" placeholder="监控网站" />
+        <el-input v-model="queryForm.siteUrl" placeholder="监控网站"/>
       </el-form-item>
     </el-form>
     <el-row class="action-bar-container" type="flex" justify="end">
@@ -18,7 +18,11 @@
         <el-button v-permission="['popular.feelings.add']" size="small" @click.native="$refs.dialogForm.open({})">
           添加
         </el-button>
-        <el-button v-permission="['popular.feelings.delete']" size="small" @click.native="deleteByIds(multipleSelection)">
+        <el-button
+          v-permission="['popular.feelings.delete']"
+          size="small"
+          @click.native="deleteByIds(multipleSelection)"
+        >
           删除
         </el-button>
       </el-button-group>
@@ -31,15 +35,23 @@
       highlight-current-row
       @selection-change="selectionChange"
     >
-      <el-table-column type="selection" width="55" />
-      <el-table-column label="ID" prop="id" width="150" />
+      <el-table-column type="selection" width="55"/>
+      <el-table-column label="ID" prop="id" width="150"/>
       <el-table-column label="网站名称" prop="siteName">
         <template slot-scope="scope">
           <el-button type="text" @click.native="$refs.detailPage.open(scope.row)">{{ scope.row.siteName }}</el-button>
         </template>
       </el-table-column>
-      <el-table-column label="监控舆论词" prop="keywords" />
-      <el-table-column label="监控域名" prop="domain" />
+      <el-table-column label="监控舆论词" prop="keywords"/>
+      <el-table-column label="监控域名" prop="domain"/>
+      <el-table-column label="爬取数量" prop="spiderCount"/>
+      <el-table-column label="状态" prop="status">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.status===0" type="info"> 未启动</el-tag>
+          <el-tag v-if="scope.row.status===1" type="success"> 运行中</el-tag>
+          <el-tag v-if="scope.row.status===2" type="danger"> 已停止</el-tag>
+        </template>
+      </el-table-column>
       <el-table-column label="启动地址" prop="startUrls">
         <template slot-scope="scope">
           <el-tag v-for="tag in scope.row.startUrls" :key="tag"> {{ tag }}</el-tag>
@@ -49,12 +61,35 @@
         <template slot-scope="scope">
           <el-dropdown>
             <el-button type="text">
-              操作<i class="el-icon-arrow-down el-icon--right" />
+              操作<i class="el-icon-arrow-down el-icon--right"/>
             </el-button>
             <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item v-permission="['popular.feelings.edit']" type="text" @click.native="$refs.dialogForm.open(scope.row)">编辑</el-dropdown-item>
-              <el-dropdown-item v-permission="['popular.feelings.delete']" @click.native="deleteByIds([scope.row.id])"> 删除</el-dropdown-item>
-              <el-dropdown-item v-permission="['popular.feelings.delete']" @click.native="startSpider([scope.row.id])"> 启动</el-dropdown-item>
+              <el-dropdown-item
+                v-permission="['popular.feelings.edit']"
+                type="text"
+                @click.native="$refs.dialogForm.open(scope.row)"
+              >编辑
+              </el-dropdown-item>
+              <el-dropdown-item
+                v-permission="['popular.feelings.delete']"
+                @click.native="deleteByIds([scope.row.id])"
+              >
+                删除
+              </el-dropdown-item>
+              <el-dropdown-item
+                v-if="scope.row.status!==1"
+                v-permission="['popular.feelings.start']"
+                @click.native="startSpider([scope.row.id])"
+              >
+                启动
+              </el-dropdown-item>
+              <el-dropdown-item
+                v-if="scope.row.status===1"
+                v-permission="['popular.feelings.stop']"
+                @click.native="stopSpider([scope.row.id])"
+              >
+                停止
+              </el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown>
         </template>
@@ -68,13 +103,13 @@
       :page-size="pageData.pageSize"
       @current-change="paginationChange"
     />
-    <dialog-form ref="dialogForm" @ok="fetchData" />
-    <detail-page ref="detailPage" />
+    <dialog-form ref="dialogForm" @ok="fetchData"/>
+    <detail-page ref="detailPage"/>
   </div>
 </template>
 
 <script>
-import { deleteByIds, findPage, startSpider } from '@/api/statistics/popular_feelings'
+import { deleteByIds, findPage, startSpider, stopSpider } from '@/api/statistics/popular_feelings'
 import { dateTimeFormatter } from '@/utils/formater'
 import DialogForm from './DialogForm'
 import DetailPage from './DetailPage'
@@ -98,7 +133,28 @@ export default {
   },
   methods: {
     dateTimeFormatter,
-    startSpider,
+    startSpider(ids) {
+      this.$confirm('确认要启动吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        startSpider(ids).then(() => {
+          this.fetchData()
+        })
+      })
+    },
+    stopSpider(ids) {
+      this.$confirm('确认要停止吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        stopSpider(ids).then(() => {
+          this.fetchData()
+        })
+      })
+    },
     deleteByIds(ids) {
       this.$confirm('确认要删除吗?', '提示', {
         confirmButtonText: '确定',