root 3 gadi atpakaļ
vecāks
revīzija
52d298c8cf

+ 17 - 0
src/api/bz/consume.js

@@ -0,0 +1,17 @@
+import request from '@/utils/request'
+
+export function cencusTotal(data) {
+    return request({
+        url: '/bz/consume/cencus',
+        method: 'get',
+        params: data
+    })
+}
+
+export function monitorList(data) {
+    return request({
+        url: '/bz/consume/monitor',
+        method: 'get',
+        params: data
+    })
+}

+ 49 - 0
src/api/bz/monitor.js

@@ -0,0 +1,49 @@
+import request from '@/utils/request'
+
+export function leaderTop(data) {
+    return request({
+        url: '/openApi/xc/monitor/leader/top',
+        method: 'get',
+        params: data
+    })
+}
+
+export function leaderLine(data) {
+    return request({
+        url: '/openApi/xc/monitor/leader/line',
+        method: 'get',
+        params: data
+    })
+}
+
+export function descPage(data) {
+    return request({
+        url: '/openApi/xc/monitor/desc/page',
+        method: 'get',
+        params: data
+    })
+}
+
+export function descList(data) {
+    return request({
+        url: '/openApi/xc/monitor/desc/list',
+        method: 'get',
+        params: data
+    })
+}
+
+export function censusPage(data) {
+    return request({
+        url: '/openApi/xc/monitor/census',
+        method: 'get',
+        params: data
+    })
+}
+
+export function passenger(data) {
+    return request({
+        url: '/openApi/xc/monitor/passenger',
+        method: 'get',
+        params: data
+    })
+}

+ 25 - 0
src/api/bz/resource.js

@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+
+export function cencusTotal(data) {
+    return request({
+        url: '/bz/resource/cencus',
+        method: 'get',
+        params: data
+    })
+}
+
+export function scenicSpotVisits(data) {
+    return request({
+        url: '/bz/resource/visits',
+        method: 'get',
+        params: data
+    })
+}
+
+export function visitsByDay(data) {
+    return request({
+        url: '/bz/resource/visitsByDay',
+        method: 'get',
+        params: data
+    })
+}

+ 25 - 0
src/api/travel/index.js

@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+
+export function findPage(data) {
+    return request({
+        url: '/travel/report/findPage',
+        method: 'post',
+        data
+    })
+}
+
+export function pageHotelAudit(data) {
+    return request({
+        url: '/travel/report/pageHotelAudit',
+        method: 'post',
+        data
+    })
+}
+
+export function pageScenicAudit(data) {
+    return request({
+        url: '/travel/report/pageScenicAudit',
+        method: 'post',
+        data
+    })
+}

+ 54 - 0
src/router/index.js

@@ -200,6 +200,60 @@ export const asyncRoutes = [
     ]
   },
   {
+    path: '/travel',
+    component: Layout,
+    name: 'travel',
+    meta: {
+      title: '文旅行业招徕系统',
+      icon: 'el-icon-warning-outline',
+      // authorities: ['travel.find']
+    },
+    redirect: '/travel',
+    children: [
+      {
+        path: 'index',
+        name: 'travelIndex',
+        component: () => import('@/views/travel/index'),
+        meta: {
+          title: '招徕奖励申报',
+          // authorities: ['travel.index.find']
+        }
+      },
+      {
+        path: 'hotel',
+        name: 'travelHotel',
+        component: () => import('@/views/travel/hotel'),
+        meta: {
+          title: '酒店申报记录',
+          // authorities: ['sentiment.spider.rule.find']
+        }
+      },
+      {
+        path: 'scenic',
+        name: 'travelScenic',
+        component: () => import('@/views/travel/scenic'),
+        meta: {
+          title: '景区申报记录',
+          // authorities: ['sentiment.spider.event.find']
+        }
+      },
+      {
+        path: 'hotel/record',
+        name: 'travelHotelRecord',
+        hidden: true,
+        component: () => import('@/views/travel/index_hotel'),
+        meta: { title: '酒店申报记录' }
+      },
+      {
+        path: 'scenic/record',
+        name: 'travelScenicRecord',
+        hidden: true,
+        component: () => import('@/views/travel/index_scenic'),
+        meta: { title: '景区申报记录' }
+      }
+    ]
+  },
+  {
     path: '/bz',
     component: Layout,
     name: 'Bz',

+ 0 - 1
src/utils/request.js

@@ -12,7 +12,6 @@ const service = axios.create({
 
 service.interceptors.request.use(
   config => {
-    // const accessToken = localStorage.getItem('x-access-token') || ''
     const accessToken = cookies.get('saber-access-token') || ''
     if (accessToken) {
       config.headers['x-access-token'] = accessToken

+ 74 - 55
src/views/bz/consume/index.vue

@@ -4,39 +4,45 @@
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/api/docs`)">
           <div class="card-panel-icon-wrapper icon-people">
-            <el-image src="/images/016537@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/016537@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              月消费总额(元)
-            </div>
-            <count-to :start-val="0" :end-val="78956" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">月消费总额(元)</div>
+            <span class="card-panel-num"> {{ topData.money }} </span>
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/appKey/index`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/016535@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/016535@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              月消费次数
-            </div>
-            <count-to :start-val="0" :end-val="15462" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">月消费次数</div>
+            <span class="card-panel-num"> {{ topData.total }} </span>
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/place/baseInfo`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/016536@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/016536@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              人均消费(元)
-            </div>
-            <count-to :start-val="0" :end-val="2036" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">人均消费(元)</div>
+            <span class="card-panel-num"> {{ topData.rjxf }} </span>
           </div>
         </div>
       </el-col>
@@ -49,7 +55,7 @@
             <div slot="header" class="clearfix">
               <span>消费监测</span>
             </div>
-            <div id="chart1" style="height: 150px;width: 100%"></div>
+            <div id="chart1" style="height: 200px; width: 100%"></div>
           </el-card>
         </div>
       </el-col>
@@ -60,7 +66,7 @@
             <div slot="header" class="clearfix">
               <span>舆情监测</span>
             </div>
-            <div id="chart2" style="height: 150px;width: 100%"></div>
+            <div id="chart2" style="height: 200px; width: 100%"></div>
           </el-card>
         </div>
       </el-col>
@@ -71,18 +77,18 @@
             <div slot="header" class="clearfix">
               <span>应急指挥调度</span>
             </div>
-            <div id="chart3" style="height: 150px;width: 100%"></div>
+            <div id="chart3" style="height: 200px; width: 100%"></div>
           </el-card>
         </div>
       </el-col>
     </el-row>
-    <div style="height: 32px"/>
+    <div style="height: 32px" />
     <div class="bz-card">
       <el-card shadow="never">
         <div slot="header" class="clearfix">
           <span>消费监测</span>
         </div>
-        <div id="chart4" style="height: 150px;width: 100%"></div>
+        <div id="chart4" style="height: 250px; width: 100%"></div>
       </el-card>
     </div>
   </div>
@@ -91,55 +97,68 @@
 <script>
 import CountTo from 'vue-count-to'
 import * as echarts from 'echarts'
+import { cencusTotal, monitorList } from '@/api/bz/consume'
 
 export default {
   components: { CountTo },
   data() {
-    return {}
+    return { topData: {}, consume: { consumeDay: [], consumeMonths: [] } }
   },
   computed: {},
   created() {
   },
   mounted() {
-    const xAxis = []
-    for (let i = 7; i > 0; i--) {
-      console.log(this.addDays(new Date(), i * -1))
-      xAxis.push(this.addDays(new Date(), i * -1))
-    }
-    this.buildBar('chart1', xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
-    this.buildBar('chart2', xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
-    this.buildBar('chart3', xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
-    this.buildBar('chart4', xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
+    cencusTotal({}).then(data => {
+      this.topData = data;
+    })
+    monitorList({}).then(data => {
+      this.consume = data;
+      this.lineChartImage('chart1', data.consumeDay);
+      this.lineChartImage('chart2', data.sentimentMonths);
+      this.lineChartImage('chart3', data.dispatchMonths);
+      this.lineChartImage('chart4', data.consumeMonths);
+    })
   },
   methods: {
-    addDays(nd, days) {
-      nd = nd.valueOf()
-      nd = nd + days * 24 * 60 * 60 * 1000
-      nd = new Date(nd)
-      var y = nd.getFullYear()
-      var m = nd.getMonth() + 1
-      var d = nd.getDate()
-      if (m <= 9) m = '0' + m
-      if (d <= 9) d = '0' + d
-      return y + '-' + m + '-' + d
-    },
-    buildBar(elementId, xAxis, seriesData) {
-
-      const chart = echarts.init(document.getElementById(elementId))
-      chart.setOption({
+    lineChartImage: function (chartId, data) { //折线图
+      if (!this.lineChartModel) {
+        var element = document.getElementById(chartId);
+        this[chartId] = echarts.init(element);
+      }
+      var option = {
+        title: {
+          text: ''
+        },
+        grid: { left: '0%', right: '0%', top: '20%' },
         tooltip: {
-          trigger: 'axis',
-          axisPointer: {
-            type: 'shadow'
+          trigger: 'axis'
+        },
+        xAxis: {
+          type: 'category',
+          data: data.map(function (n) {
+            return n.label;
+          })
+        },
+        yAxis: {
+          type: 'value',
+          axisLabel: {
+            show: false
+          },
+          axisTick: {
+            show: false
           }
         },
-        legend: { top: '0', right: '1%' },
-        grid: { left: 25, right: 0, bottom: 35, top: 25 },
-        xAxis: { type: 'category', data: xAxis },
-        yAxis: { type: 'value' },
-        series: seriesData
-      })
-    }
+        series: [
+          {
+            data: data.map(function (n) {
+              return n.value;
+            }),
+            type: 'line'
+          }
+        ]
+      };
+      this[chartId].setOption(option);
+    },
   }
 }
 </script>

+ 159 - 41
src/views/bz/integrate.vue

@@ -4,18 +4,51 @@
       <el-col :xs="12" :sm="12" :lg="6">
         <el-card class="card">
           <strong>天气</strong>
-          <span style="color: #999999;margin-left: 34px">03月07日 周一 农历二月初五</span>
-          <div style="clear: both"/>
+          <span style="color: #999999; margin-left: 34px">
+            {{ getDateTime() }}
+          </span>
+          <div style="clear: both" />
           <div style="margin-top: 30px">
-            <el-image src="/images/sun@3x.png" style="width: 30px;"/>
-            <span style="font-size: 20px;margin-left: 24px;">36</span>
+            <el-image
+              src="/images/rain@3x.png"
+              style="width: 30px"
+              v-if="qweather.now.weatherName === '雨'"
+            />
+            <el-image
+              src="/images/snow@3x.png"
+              style="width: 30px"
+              v-else-if="qweather.now.weatherName === '雪'"
+            />
+            <el-image
+              src="/images/cloud@3x.png"
+              style="width: 30px"
+              v-else-if="qweather.now.weatherName === '云'"
+            />
+            <el-image src="/images/sun@3x.png" style="width: 30px" v-else />
+            <span style="font-size: 20px; margin-left: 24px">
+              {{ qweather.now.temp }}
+            </span>
             <span>℃</span>
-            <span style="color: #FFAA33;margin-left: 10px">晴</span>
+            <span style="color: #ffaa33; margin-left: 10px">
+              {{ qweatherAir.now.text }}
+            </span>
           </div>
-          <el-divider/>
-          <span style="color: #666666">东南风<3级</span>
-          <el-divider direction="vertical" style="padding: 0 10px"/>
-          <span style="display: inline-block;background: #F37868;padding: 2px 8px;color: white;border-radius: 2px"> 体感温度  舒适</span>
+          <el-divider />
+          <span style="color: #666666">
+            {{ qweather.now.windDir }} {{ qweather.now.windScale }}级
+          </span>
+          <el-divider direction="vertical" style="padding: 0 10px" />
+          <span
+            style="
+              display: inline-block;
+              background: #f37868;
+              padding: 2px 8px;
+              color: white;
+              border-radius: 2px;
+            "
+          >
+            体感温度&nbsp;&nbsp;{{sendibleTemperature(qweather.now.feelsLike)}}
+          </span>
         </el-card>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6">
@@ -24,15 +57,17 @@
           <el-row style="margin-top: 40px">
             <el-col :span="11" style="text-align: center">
               <div style="color: #999999">空气质量指数</div>
-              <div style="color: #45CA9D;line-height: 85px;font-size: 50px">25</div>
+              <div style="color: #45ca9d; line-height: 85px; font-size: 50px">
+                {{ qweatherAir.now.aqi }}
+              </div>
             </el-col>
             <el-col :span="2">
-              <el-divider direction="vertical" class="vertical-divider-100"/>
+              <el-divider direction="vertical" class="vertical-divider-100" />
             </el-col>
             <el-col :span="11" class="air-quality-info">
-              <div>首要污染物:酸雨</div>
-              <div>PM2.5:19</div>
-              <div>空气质量:</div>
+              <div>首要污染物:{{ qweatherAir.now.primary }}</div>
+              <div>PM2.5:{{ qweatherAir.now.pm2p5 }}</div>
+              <div>空气质量:{{ qweatherAir.now.category }}</div>
             </el-col>
           </el-row>
         </el-card>
@@ -40,25 +75,36 @@
       <el-col :xs="12" :sm="12" :lg="6">
         <el-card class="card">
           <strong>交通情况</strong>
-          <div style="color: #45CA9D;font-size: 30px;line-height: 50px;padding: 15px 0;text-align: center">畅通</div>
+          <div
+            @click="goToTraffic()"
+            style="
+              color: #45ca9d;
+              font-size: 30px;
+              line-height: 50px;
+              padding: 15px 0;
+              text-align: center;
+            "
+          >
+            畅通
+          </div>
           <el-row>
             <el-col :span="12">
-              <div style="background: #D34400;" class="sample-block"/>
+              <div style="background: #d34400" class="sample-block" />
               严重拥挤
             </el-col>
             <el-col :span="12">
-              <div style="background: #FF8B33;" class="sample-block"/>
+              <div style="background: #ff8b33" class="sample-block" />
               拥挤
             </el-col>
           </el-row>
-          <div style="height: 10px"/>
+          <div style="height: 10px" />
           <el-row>
             <el-col :span="12">
-              <div style="background: #FFAA33;" class="sample-block"/>
+              <div style="background: #ffaa33" class="sample-block" />
               缓行
             </el-col>
             <el-col :span="12">
-              <div style="background: #45CA9D;" class="sample-block"/>
+              <div style="background: #45ca9d" class="sample-block" />
               畅通
             </el-col>
           </el-row>
@@ -67,7 +113,7 @@
       <el-col :xs="12" :sm="12" :lg="6">
         <el-card class="card">
           <strong>值班信息</strong>
-          <div id="chart1" style="width: 100%;height:150px;"/>
+          <div id="chart1" style="width: 100%; height: 150px" />
         </el-card>
       </el-col>
     </el-row>
@@ -76,41 +122,51 @@
       <el-col :xs="12" :sm="12" :lg="6">
         <el-card class="card">
           <strong>酒店信息</strong>
-          <div style="font-size: 35px;margin-bottom: 12px;" align="center">
+          <div style="font-size: 35px; margin-bottom: 12px" align="center">
             ¥381360
           </div>
-          <div class="" style="font-size: 16px;color: #999999;" align="center">
-            <img style="margin-top: 3px;margin-right: 5px;" src="https://wladmin-pro-smartcity.123cx.com/statics/image/travelIntegratedData/icon.png">
+          <div class="" style="font-size: 16px; color: #999999" align="center">
+            <img
+              style="margin-top: 3px; margin-right: 5px"
+              src="https://wladmin-pro-smartcity.123cx.com/statics/image/travelIntegratedData/icon.png"
+            />
             销售金额
           </div>
-          <el-divider/>
-          <p style="font-size: 18px;text-align: right;color: #999999;">入住 3243</p>
+          <el-divider />
+          <p style="font-size: 18px; text-align: right; color: #999999">
+            入住 3243
+          </p>
         </el-card>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6">
         <el-card class="card">
           <strong>涉旅信息</strong>
-          <div style="font-size: 35px;margin-bottom: 12px;" align="center">
+          <div style="font-size: 35px; margin-bottom: 12px" align="center">
             ¥176436
           </div>
-          <div class="" style="font-size: 16px;color: #999999;" align="center">
-            <img style="margin-top: 3px;margin-right: 5px;" src="https://wladmin-pro-smartcity.123cx.com/statics/image/travelIntegratedData/icon.png">
+          <div class="" style="font-size: 16px; color: #999999" align="center">
+            <img
+              style="margin-top: 3px; margin-right: 5px"
+              src="https://wladmin-pro-smartcity.123cx.com/statics/image/travelIntegratedData/icon.png"
+            />
             门票收入
           </div>
-          <el-divider/>
-          <p style="font-size: 18px;text-align: right;color: #999999;">文旅线路  164</p>
+          <el-divider />
+          <p style="font-size: 18px; text-align: right; color: #999999">
+            文旅线路 164
+          </p>
         </el-card>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6">
         <el-card class="card">
           <strong>客流分析</strong>
-          <div id="chart2" style="width: 100%;height:150px;"/>
+          <div id="chart2" style="width: 100%; height: 150px" />
         </el-card>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6">
         <el-card class="card">
           <strong>交通旅游分析</strong>
-          <div id="chart3" style="width: 100%;height:150px;"/>
+          <div id="chart3" style="width: 100%; height: 150px" />
         </el-card>
       </el-col>
     </el-row>
@@ -119,19 +175,19 @@
       <el-col :xs="12" :sm="12" :lg="6">
         <el-card class="card">
           <strong>员工工单分析</strong>
-          <div id="chart4" style="width: 100%;height:150px;"/>
+          <div id="chart4" style="width: 100%; height: 150px" />
         </el-card>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6">
         <el-card class="card">
           <strong>环境数据</strong>
-          <div id="chart5" style="width: 100%;height:150px;"/>
+          <div id="chart5" style="width: 100%; height: 150px" />
         </el-card>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6">
         <el-card class="card">
           <strong>水质数据</strong>
-          <div id="chart6" style="width: 100%;height:150px;"/>
+          <div id="chart6" style="width: 100%; height: 150px" />
         </el-card>
       </el-col>
     </el-row>
@@ -146,7 +202,7 @@
 }
 
 .card strong {
-  font-size: 24px
+  font-size: 24px;
 }
 
 .vertical-divider-100 {
@@ -163,26 +219,42 @@
   width: 20px;
   height: 10px;
   display: inline-block;
-  margin-right: 5px
+  margin-right: 5px;
 }
 </style>
 <script>
 import * as echarts from 'echarts'
+import { findDetail, qweatherGet, qweatherAir, ambitusRoadConditions } from '@/api/equipment/equipment_passenger'
 
 export default {
   components: {},
   data() {
     return {
-      activeName: 'first'
+      detailData: {},
+      qweather: { now: {} },
+      qweatherAir: { now: {} }
     }
   },
   computed: {},
   created() {
+    const id = this.$route.params.id
+    const queryForm = this.$route.query;
+    findDetail(id, queryForm.orgId).then(detailData => {
+      if (detailData.latLng) {
+        const latLng = detailData.latLng.split(/,/g);
+        detailData.lat = latLng[0];
+        detailData.lng = latLng[1];
+      }
+      this.detailData = detailData
+      // this.buildVisitorsList(this.detailData.visitorsList);
+      // this.buildGender(this.detailData.listGenders)
+      // this.buildFromSource(this.detailData.listFromSource)
+      this.loadQweather();
+    })
   },
   mounted() {
     const xAxis = []
     for (let i = 7; i > 0; i--) {
-      console.log(this.addDays(new Date(), i * -1))
       xAxis.push(this.addDays(new Date(), i * -1))
     }
     this.buildBar('chart1', xAxis, [{ name: '值班人数', type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
@@ -204,6 +276,33 @@ export default {
     ])
   },
   methods: {
+    goToTraffic() {
+      this.$router.push(`/equipment/passenger/traffic`)
+    },
+    loadQweather() {
+      qweatherGet(this.detailData.lat, this.detailData.lng).then(data => {
+        this.qweather = data;
+      });
+      qweatherAir(this.detailData.lat, this.detailData.lng).then(data => {
+        this.qweatherAir = data;
+      });
+      ambitusRoadConditions(this.detailData.lat, this.detailData.lng).then(data => {
+        console.log(data);
+      });
+    },
+    sendibleTemperature(temperature) {
+      if (temperature < 8) {
+        return '冷';
+      } else if (temperature < 18 && temperature >= 8) {
+        return '凉爽';
+      } else if (temperature < 29 && temperature >= 18) {
+        return '舒适';
+      } else if (temperature >= 29) {
+        return '热';
+      } else {
+        return '正常';
+      }
+    },
     addDays(nd, days) {
       nd = nd.valueOf()
       nd = nd + days * 24 * 60 * 60 * 1000
@@ -231,7 +330,26 @@ export default {
         yAxis: { type: 'value' },
         series: seriesData
       })
-    }
+    },
+    dateFilter: function (date) {
+      if (date < 10) {
+        return "0" + date;
+      }
+      return date;
+    },
+    getDateTime() {
+      var dateObj = new Date(); //表示当前系统时间的Date对象
+      var year = dateObj.getFullYear(); //当前系统时间的完整年份值
+      var month = dateObj.getMonth() + 1; //当前系统时间的月份值
+      var date = dateObj.getDate(); //当前系统时间的月份中的日
+      var day = dateObj.getDay(); //当前系统时间中的星期值
+      var weeks = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
+      var week = weeks[day]; //根据星期值,从数组中获取对应的星期字符串
+      var hour = dateObj.getHours(); //当前系统时间的小时值
+      var timeValue = "" + ((hour >= 12) ? (hour >= 18) ? "晚上" : "下午" : "上午"); //当前时间属于上午、晚上还是下午
+
+      return this.dateFilter(month) + "月" + this.dateFilter(date) + "日 " + " " + week + " " + timeValue;
+    },
   }
 }
 </script>

+ 356 - 100
src/views/bz/monitor/index.vue

@@ -4,52 +4,60 @@
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/api/docs`)">
           <div class="card-panel-icon-wrapper icon-people">
-            <el-image src="/images/16527@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/16527@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              昨日进入访客数量(人)
-            </div>
-            <count-to :start-val="0" :end-val="100" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">昨日进入访客数量(人)</div>
+            <span class="card-panel-num"> {{ leader.d4 }} </span>
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/appKey/index`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/16528@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/16528@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              今日景区累计游客数(人)
-            </div>
-            <count-to :start-val="0" :end-val="100" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">今日景区累计游客数(人)</div>
+            <span class="card-panel-num"> {{ leader.d3 }} </span>
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/place/baseInfo`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/16530@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/16530@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              实时客流(人)
-            </div>
-            <count-to :start-val="0" :end-val="100" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">实时客流(人)</div>
+            <span class="card-panel-num"> {{ leader.d1 }} </span>
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/statistics/file`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/16529@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/16529@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              实时车流(辆)
-            </div>
-            <count-to :start-val="0" :end-val="100" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">实时车流(辆)</div>
+            <span class="card-panel-num"> {{ leader.d2 }} </span>
           </div>
         </div>
       </el-col>
@@ -58,14 +66,46 @@
       <el-col :xs="24" :sm="24" :lg="18">
         <div class="bz-card">
           <el-card shadow="never">
-            <el-tabs v-model="activeName" @tab-click="handleClick">
-              <el-tab-pane label="游客来源地" name="first"/>
-              <el-tab-pane label="客流趋势" name="second"/>
-              <el-tab-pane label="车流趋势" name="third"/>
-            </el-tabs>
-            <div v-if="activeName==='first'" id="chart-first" style="height: 200px;width: 100%"></div>
-            <div v-if="activeName==='second'" id="chart-second" style="height: 200px;width: 100%"></div>
-            <div v-if="activeName==='third'" id="chart-third" style="height: 200px;width: 100%"></div>
+            <div>
+              <el-tabs v-model="chartForm.chartTime" @tab-click="handleClick">
+                <el-tab-pane label="游客来源地" name="1" />
+                <el-tab-pane label="客流趋势" name="2" />
+                <el-tab-pane label="车流趋势" name="3" />
+              </el-tabs>
+              <div
+                class="n1"
+                style="
+                  float: right;
+                  margin-right: 20px;
+                  position: relative;
+                  top: -50px;
+                  cursor: pointer;
+                "
+              >
+                <span
+                  @click="_loadTrendData(1)"
+                  :class="{ active: chartForm.dateType === 1 }"
+                  style="margin-right: 5px"
+                >
+                  日
+                </span>
+                <span
+                  @click="_loadTrendData(2)"
+                  :class="{ active: chartForm.dateType === 2 }"
+                  style="margin-right: 5px"
+                  >月</span
+                >
+                <span
+                  @click="_loadTrendData(3)"
+                  :class="{ active: chartForm.dateType === 3 }"
+                  >季度</span
+                >
+              </div>
+            </div>
+            <div
+              id="lineChart"
+              style="height: 200px; margin-top: 5px; width: 100%"
+            ></div>
           </el-card>
         </div>
       </el-col>
@@ -75,12 +115,24 @@
             <div slot="header" class="clearfix">
               <span>交通监测</span>
             </div>
-            <div id="chart1" style="height: 200px;width: 100%"></div>
+            <div style="height: 200px; margin-top: 5px; width: 100%">
+              <div
+                v-for="(item, index) in trafficList"
+                :key="index"
+                style="margin-top: 5px"
+              >
+                {{ item.content }}
+                <div style="font-size: 12px; color: #999999">
+                  {{ item.createDate }}
+                </div>
+              </div>
+              <div v-if="trafficList.length == 0">交通暂无异常</div>
+            </div>
           </el-card>
         </div>
       </el-col>
     </el-row>
-    <div style="height: 32px"/>
+    <div style="height: 32px" />
     <el-row :gutter="40">
       <el-col :xs="24" :sm="24" :lg="8">
         <div class="bz-card">
@@ -88,14 +140,50 @@
             <div slot="header" class="clearfix">
               <span>消费监测</span>
             </div>
-            <el-row>
+            <el-row v-if="getMonitorByType(1).length > 0">
+              <el-col
+                :span="12"
+                v-for="(item, index) in getMonitorByType(1)"
+                :key="index"
+              >
+                <el-row>
+                  <el-col :span="10">
+                    <el-image
+                      src="/images/16531@2x.png"
+                      class="image"
+                      v-if="item.title == '景区消费'"
+                    />
+                    <el-image
+                      src="/images/16536@2x.png"
+                      class="image"
+                      v-else-if="item.title == '文化场馆消费'"
+                    />
+                    <el-image
+                      src="/images/16537@2x.png"
+                      class="image"
+                      v-else-if="item.title == '餐馆消费'"
+                    />
+                    <el-image
+                      src="/images/16538@2x.png"
+                      class="image"
+                      v-else-if="item.title == '体育馆消费'"
+                    />
+                  </el-col>
+                  <el-col :span="14">
+                    <p>¥{{ item.money }}</p>
+                    <p>{{ item.title }}</p>
+                  </el-col>
+                </el-row>
+              </el-col>
+            </el-row>
+            <el-row v-else>
               <el-col :span="12">
                 <el-row>
                   <el-col :span="10">
-                    <el-image src="/images/16531@2x.png" class="image"/>
+                    <el-image src="/images/16531@2x.png" class="image" />
                   </el-col>
                   <el-col :span="14">
-                    <p>¥25863.50</p>
+                    <p>¥0</p>
                     <p>景区消费</p>
                   </el-col>
                 </el-row>
@@ -103,23 +191,21 @@
               <el-col :span="12">
                 <el-row>
                   <el-col :span="10">
-                    <el-image src="/images/16536@2x.png" class="image"/>
+                    <el-image src="/images/16536@2x.png" class="image" />
                   </el-col>
                   <el-col :span="14">
-                    <p>¥25863.50</p>
+                    <p>¥0</p>
                     <p>文化场馆</p>
                   </el-col>
                 </el-row>
               </el-col>
-            </el-row>
-            <el-row>
               <el-col :span="12">
                 <el-row>
                   <el-col :span="10">
-                    <el-image src="/images/16537@2x.png" class="image"/>
+                    <el-image src="/images/16537@2x.png" class="image" />
                   </el-col>
                   <el-col :span="14">
-                    <p>¥25863.50</p>
+                    <p>¥0</p>
                     <p>餐馆消费</p>
                   </el-col>
                 </el-row>
@@ -127,10 +213,10 @@
               <el-col :span="12">
                 <el-row>
                   <el-col :span="10">
-                    <el-image src="/images/16538@2x.png" class="image"/>
+                    <el-image src="/images/16538@2x.png" class="image" />
                   </el-col>
                   <el-col :span="14">
-                    <p>¥25863.50</p>
+                    <p>¥0</p>
                     <p>体育场馆消费</p>
                   </el-col>
                 </el-row>
@@ -146,14 +232,50 @@
             <div slot="header" class="clearfix">
               <span>舆情监测</span>
             </div>
-            <el-row>
+            <el-row v-if="getMonitorByType(2).length > 0">
+              <el-col
+                :span="12"
+                v-for="(item, index) in getMonitorByType(2)"
+                :key="index"
+              >
+                <el-row>
+                  <el-col :span="10">
+                    <el-image
+                      src="/images/16541@2x.png"
+                      class="image"
+                      v-if="item.title == '好评'"
+                    />
+                    <el-image
+                      src="/images/16542@2x.png"
+                      class="image"
+                      v-else-if="item.title == '差评'"
+                    />
+                    <el-image
+                      src="/images/16540@2x.png"
+                      class="image"
+                      v-else-if="item.title == '五星餐厅'"
+                    />
+                    <el-image
+                      src="/images/16539@2x.png"
+                      class="image"
+                      v-else-if="item.title == '四星餐厅'"
+                    />
+                  </el-col>
+                  <el-col :span="14">
+                    <p>{{ item.quantity }}</p>
+                    <p>{{ item.title }}</p>
+                  </el-col>
+                </el-row>
+              </el-col>
+            </el-row>
+            <el-row v-else>
               <el-col :span="12">
                 <el-row>
                   <el-col :span="10">
-                    <el-image src="/images/16541@2x.png" class="image"/>
+                    <el-image src="/images/16541@2x.png" class="image" />
                   </el-col>
                   <el-col :span="14">
-                    <p>24685</p>
+                    <p>0</p>
                     <p>好评</p>
                   </el-col>
                 </el-row>
@@ -161,23 +283,21 @@
               <el-col :span="12">
                 <el-row>
                   <el-col :span="10">
-                    <el-image src="/images/16542@2x.png" class="image"/>
+                    <el-image src="/images/16542@2x.png" class="image" />
                   </el-col>
                   <el-col :span="14">
-                    <p>23</p>
+                    <p>0</p>
                     <p>差评</p>
                   </el-col>
                 </el-row>
               </el-col>
-            </el-row>
-            <el-row>
               <el-col :span="12">
                 <el-row>
                   <el-col :span="10">
-                    <el-image src="/images/16540@2x.png" class="image"/>
+                    <el-image src="/images/16540@2x.png" class="image" />
                   </el-col>
                   <el-col :span="14">
-                    <p>12</p>
+                    <p>0</p>
                     <p>五星餐厅</p>
                   </el-col>
                 </el-row>
@@ -185,10 +305,10 @@
               <el-col :span="12">
                 <el-row>
                   <el-col :span="10">
-                    <el-image src="/images/16539@2x.png" class="image"/>
+                    <el-image src="/images/16539@2x.png" class="image" />
                   </el-col>
                   <el-col :span="14">
-                    <p>256</p>
+                    <p>0</p>
                     <p>四星餐厅</p>
                   </el-col>
                 </el-row>
@@ -199,20 +319,50 @@
       </el-col>
 
       <el-col :xs="24" :sm="24" :lg="8">
-
         <div class="bz-card">
           <el-card shadow="never">
             <div slot="header" class="clearfix">
               <span>应急指挥调度</span>
             </div>
-            <el-row>
+            <el-row v-if="getMonitorByType(3).length > 0">
+              <el-col
+                :span="12"
+                v-for="(item, index) in getMonitorByType(3)"
+                :key="index"
+              >
+                <el-row>
+                  <el-col :span="10">
+                    <el-image
+                      src="/images/16546@2x.png"
+                      class="image"
+                      v-if="item.title == '应急事件'"
+                    />
+                    <el-image
+                      src="/images/16547@2x.png"
+                      class="image"
+                      v-else-if="item.title == '应急预案'"
+                    />
+                    <el-image
+                      src="/images/16545@2x.png"
+                      class="image"
+                      v-else-if="item.title == '已处理应急事件'"
+                    />
+                  </el-col>
+                  <el-col :span="14">
+                    <p>{{ item.quantity }}</p>
+                    <p>{{ item.title }}</p>
+                  </el-col>
+                </el-row>
+              </el-col>
+            </el-row>
+            <el-row v-else>
               <el-col :span="12">
                 <el-row>
                   <el-col :span="10">
-                    <el-image src="/images/16546@2x.png" class="image"/>
+                    <el-image src="/images/16546@2x.png" class="image" />
                   </el-col>
                   <el-col :span="14">
-                    <p>24685</p>
+                    <p>0</p>
                     <p>应急事件</p>
                   </el-col>
                 </el-row>
@@ -220,23 +370,21 @@
               <el-col :span="12">
                 <el-row>
                   <el-col :span="10">
-                    <el-image src="/images/16547@2x.png" class="image"/>
+                    <el-image src="/images/16547@2x.png" class="image" />
                   </el-col>
                   <el-col :span="14">
-                    <p>23</p>
+                    <p>0</p>
                     <p>应急预案</p>
                   </el-col>
                 </el-row>
               </el-col>
-            </el-row>
-            <el-row>
               <el-col :span="12">
                 <el-row>
                   <el-col :span="10">
-                    <el-image src="/images/16545@2x.png" class="image"/>
+                    <el-image src="/images/16545@2x.png" class="image" />
                   </el-col>
                   <el-col :span="14">
-                    <p>12</p>
+                    <p>0</p>
                     <p>已处理应急事件</p>
                   </el-col>
                 </el-row>
@@ -252,64 +400,172 @@
 <script>
 import CountTo from 'vue-count-to'
 import * as echarts from 'echarts'
+import { leaderTop, leaderLine, descPage, descList } from '@/api/bz/monitor'
 
 export default {
   components: { CountTo },
   data() {
     return {
-      activeName: 'first'
+      leader: {},
+      chartForm: { dateType: 1, chartTime: '1' },
+      chartData: [],
+
+      lineChartModel: null,
+      trafficList: [],
+      monitorList: []
     }
   },
   computed: {},
   created() {
   },
   mounted() {
-    const xAxis = []
-    for (let i = 7; i > 0; i--) {
-      console.log(this.addDays(new Date(), i * -1))
-      xAxis.push(this.addDays(new Date(), i * -1))
-    }
-    this.buildBar('chart-first', xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
-    this.buildBar('chart1', xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
-    // this.buildBar('chart3', xAxis, [{ name: '客流量', type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
+    leaderTop({}).then((data) => {
+      console.log(data)
+      this.leader = data;
+    })
+    descPage({
+      page: 1,
+      limit: 5,
+      monitorType: 4
+    }).then((data) => {
+      console.log('trafficList', data)
+      this.trafficList = data.list;
+    })
+    descList({}).then((data) => {
+      console.log(data)
+      this.monitorList = data;
+    });
+    this.getTrendData();
   },
   methods: {
+    getMonitorByType(type) {
+      return this.monitorList.filter(function (d) {
+        return d.monitorType === type;
+      })
+    },
     handleClick(tab) {
-      const xAxis = []
-      for (let i = 7; i > 0; i--) {
-        console.log(this.addDays(new Date(), i * -1))
-        xAxis.push(this.addDays(new Date(), i * -1))
-      }
-      this.buildBar('chart-' + tab.name, xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
+      this.getTrendData();
+    },
+    getTrendData() {
+      leaderLine(this.chartForm).then((data) => {
+        this.chartData = data;
+        if (this.chartForm.chartTime === '1') {
+          this.barChartImage();
+        } else {
+          this.lineChartImage();
+        }
+      })
     },
-    addDays(nd, days) {
-      nd = nd.valueOf()
-      nd = nd + days * 24 * 60 * 60 * 1000
-      nd = new Date(nd)
-      var y = nd.getFullYear()
-      var m = nd.getMonth() + 1
-      var d = nd.getDate()
-      if (m <= 9) m = '0' + m
-      if (d <= 9) d = '0' + d
-      return y + '-' + m + '-' + d
+    _loadTrendData(dateType) {
+      this.chartForm.dateType = dateType;
+      this.getTrendData();
     },
-    buildBar(elementId, xAxis, seriesData) {
-
-      const chart = echarts.init(document.getElementById(elementId))
-      chart.setOption({
+    lineChartImage: function () { //折线图
+      if (!this.lineChartModel) {
+        var element = document.getElementById('lineChart');
+        this.lineChartModel = echarts.init(element);
+      }
+      var option = {
+        title: {
+          text: ''
+        },
+        grid: { left: '0%', right: '0%', top: '20%' },
+        tooltip: {
+          trigger: 'axis'
+        },
+        xAxis: {
+          type: 'category',
+          data: this.chartData.map(function (n) {
+            return n.name;
+          })
+        },
+        yAxis: {
+          type: 'value',
+          axisLabel: {
+            show: false
+          },
+          axisTick: {
+            show: false
+          }
+        },
+        series: [
+          {
+            data: this.chartData.map(function (n) {
+              return n.value;
+            }),
+            type: 'line'
+          }
+        ]
+      };
+      this.lineChartModel.setOption(option);
+      window.addEventListener("resize", function () {
+        this.lineChartModel.resize();
+      });
+    },
+    barChartImage: function () {
+      if (!this.lineChartModel) {
+        var element = document.getElementById('lineChart');
+        this.lineChartModel = echarts.init(element);
+      }
+      var option = {
+        // title: {subtext: '单位:人',},
         tooltip: {
-          trigger: 'axis',
-          axisPointer: {
-            type: 'shadow'
+          trigger: 'axis'
+        },
+        grid: { left: '0%', right: '0%', top: '5%' },
+        xAxis: {
+          type: 'category',
+          data: this.chartData.map(function (n) {
+            return n.name;
+          })
+        },
+        yAxis: {
+          type: 'value',
+          axisLabel: {
+            show: false
+          },
+          axisTick: {
+            show: false
           }
         },
-        legend: { top: '0', right: '1%' },
-        grid: { left: 25, right: 0, bottom: 35, top: 25 },
-        xAxis: { type: 'category', data: xAxis },
-        yAxis: { type: 'value' },
-        series: seriesData
-      })
+        series: [
+          {
+            data: this.chartData.map(function (n) {
+              return n.value;
+            }),
+            type: 'bar'
+          }
+        ]
+      };
+      this.lineChartModel.setOption(option);
+      window.addEventListener("resize", function () {
+        this.lineChartModel.resize();
+      });
     }
   }
 }
 </script>
+<style>
+.n1 {
+  font-size: 14px;
+  font-weight: 400;
+  line-height: 35px;
+  color: #999999;
+  float: left;
+  cursor: pointer;
+}
+
+.n1.active {
+  font-size: 16px;
+  font-weight: 500;
+  line-height: 33px;
+  color: #1d2129;
+  border-bottom: 2px solid #616161;
+}
+.n1 span.active {
+  font-size: 16px;
+  font-weight: 500;
+  line-height: 33px;
+  color: #1d2129;
+}
+</style>

+ 208 - 90
src/views/bz/resourceAnalysis/index.vue

@@ -4,52 +4,68 @@
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/api/docs`)">
           <div class="card-panel-icon-wrapper icon-people">
-            <el-image src="/images/16505@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/16505@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              景点数量
-            </div>
-            <count-to :start-val="0" :end-val="60" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">景点数量</div>
+            <span class="card-panel-num">
+              {{ topData.resource_1 ? topData.resource_1 : 0 }}
+            </span>
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/appKey/index`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/16506@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/16506@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              文旅线路
-            </div>
-            <count-to :start-val="0" :end-val="185" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">文旅线路</div>
+            <span class="card-panel-num">
+              {{ topData.lineTotal ? topData.lineTotal : 0 }}
+            </span>
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/place/baseInfo`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/16507@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/16507@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              酒店
-            </div>
-            <count-to :start-val="0" :end-val="326" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">酒店</div>
+            <span class="card-panel-num">
+              {{ topData.resource_2 ? topData.resource_2 : 0 }}
+            </span>
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/statistics/file`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/16508@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/16508@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              停车位
-            </div>
-            <count-to :start-val="0" :end-val="4416" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">停车场</div>
+            <span class="card-panel-num">
+              {{ topData.parkingLot ? topData.parkingLot : 0 }}
+            </span>
           </div>
         </div>
       </el-col>
@@ -59,52 +75,68 @@
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/api/docs`)">
           <div class="card-panel-icon-wrapper icon-people">
-            <el-image src="/images/16510@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/16510@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              体育馆
-            </div>
-            <count-to :start-val="0" :end-val="5" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">体育馆</div>
+            <span class="card-panel-num">
+              {{ topData.resource_5 ? topData.resource_5 : 0 }}
+            </span>
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/appKey/index`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/16509@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/16509@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              餐馆
-            </div>
-            <count-to :start-val="0" :end-val="1586" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">餐馆</div>
+            <span class="card-panel-num">
+              {{ topData.resource_3 ? topData.resource_3 : 0 }}
+            </span>
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/place/baseInfo`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/16511@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/16511@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              娱乐场所
-            </div>
-            <count-to :start-val="0" :end-val="18" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">娱乐场所</div>
+            <span class="card-panel-num">
+              {{ topData.resource_27 ? topData.resource_27 : 0 }}
+            </span>
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/statistics/file`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/16529@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/16529@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              非物质文化遗产
-            </div>
-            <count-to :start-val="0" :end-val="4" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">非物质文化遗产</div>
+            <span class="card-panel-num">
+              {{ topData.heritageTotal ? topData.heritageTotal : 0 }}
+            </span>
           </div>
         </div>
       </el-col>
@@ -112,15 +144,14 @@
 
     <div class="bz-card">
       <el-card shadow="never">
-        <el-tabs v-model="activeName" @tab-click="handleClick">
-          <el-tab-pane label="景点访客量" name="first"/>
-          <el-tab-pane label="客流趋势" name="second"/>
+        <el-tabs v-model="chartForm.chartTime" @tab-click="getTrendData">
+          <el-tab-pane label="景点访客量" name="1" />
+          <el-tab-pane label="客流趋势" name="2" />
         </el-tabs>
-        <div v-if="activeName==='first'" id="chart-first" style="height: 200px;width: 100%"></div>
-        <div v-if="activeName==='second'" id="chart-second" style="height: 200px;width: 100%"></div>
+        <div id="chart-first" style="height: 200px; width: 100%"></div>
       </el-card>
     </div>
-    <div style="height: 32px"/>
+    <div style="height: 32px" />
     <el-row :gutter="40">
       <el-col :xs="24" :sm="24" :lg="8">
         <div class="bz-card">
@@ -128,7 +159,7 @@
             <div slot="header" class="clearfix">
               <span>酒店访客量统计</span>
             </div>
-            <div id="chart1" style="height: 200px;width: 100%"></div>
+            <div id="chart1" style="height: 200px; width: 100%"></div>
           </el-card>
         </div>
       </el-col>
@@ -139,88 +170,175 @@
             <div slot="header" class="clearfix">
               <span>餐馆访客量统计</span>
             </div>
-            <div id="chart2" style="height: 200px;width: 100%"></div>
+            <div id="chart2" style="height: 200px; width: 100%"></div>
           </el-card>
         </div>
       </el-col>
 
       <el-col :xs="24" :sm="24" :lg="8">
-
         <div class="bz-card">
           <el-card shadow="never">
             <div slot="header" class="clearfix">
               <span>各景点访客量排行</span>
             </div>
-            <div id="chart3" style="height: 200px;width: 100%"></div>
+            <div id="chart3" style="height: 200px; width: 100%"></div>
           </el-card>
         </div>
       </el-col>
     </el-row>
-
   </div>
 </template>
 
 <script>
 import CountTo from 'vue-count-to'
 import * as echarts from 'echarts'
+import { cencusTotal, scenicSpotVisits, visitsByDay } from '@/api/bz/resource'
+import { leaderLine } from '@/api/bz/monitor'
+
 
 export default {
   components: { CountTo },
   data() {
     return {
-      activeName: 'first'
+      activeName: 'first',
+      topData: {},
+      chartForm: { dateType: 1, chartTime: '1' },
+      chartData: [],
     }
   },
   computed: {},
   created() {
   },
   mounted() {
-    const xAxis = []
-    for (let i = 7; i > 0; i--) {
-      console.log(this.addDays(new Date(), i * -1))
-      xAxis.push(this.addDays(new Date(), i * -1))
-    }
-    this.buildBar('chart-first', xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
-    this.buildBar('chart1', xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
-    this.buildBar('chart2', xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
-    this.buildBar('chart3', xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
-  },
+    cencusTotal({}).then(data => {
+      this.topData = data;
+    });
+    this.getTrendData();
+    this.loadVisitsByDay('chart1', 7);
+    this.loadVisitsByDay('chart2', 3);
 
+    scenicSpotVisits({ type: 1 }).then((data) => {
+      var element = document.getElementById('chart3');
+      const chart3 = echarts.init(element);
+      chart3.setOption({
+        grid: { left: '15%', right: '0%', top: '20%' },
+        dataset: [
+          {
+            dimensions: ['name', 'person'],
+            source: data.map(s => [s.label, s.value])
+          },
+          {
+            transform: {
+              type: 'sort',
+              config: { dimension: 'person', order: 'desc' }
+            }
+          }
+        ],
+        xAxis: {
+          type: 'category',
+          axisLabel: { interval: 0, rotate: 30 }
+        },
+        yAxis: {},
+        series: {
+          type: 'bar',
+          encode: { x: 'name', y: 'score' },
+          datasetIndex: 1
+        }
+      })
+    })
+  },
   methods: {
-    handleClick(tab) {
-      const xAxis = []
-      for (let i = 7; i > 0; i--) {
-        console.log(this.addDays(new Date(), i * -1))
-        xAxis.push(this.addDays(new Date(), i * -1))
+    getTrendData() {
+      if (this.chartForm.chartTime === '1') {
+        scenicSpotVisits({ type: 1, dateTime: 1 }).then((data) => {
+          this.barChartImage('chart-first', data)
+        })
+      } else {
+        leaderLine(this.chartForm).then((data) => {
+          this.chartData = data;
+          this.lineChartImage('chart-first', data);
+        })
       }
-      this.buildBar('chart-' + tab.name, xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
     },
-    addDays(nd, days) {
-      nd = nd.valueOf()
-      nd = nd + days * 24 * 60 * 60 * 1000
-      nd = new Date(nd)
-      var y = nd.getFullYear()
-      var m = nd.getMonth() + 1
-      var d = nd.getDate()
-      if (m <= 9) m = '0' + m
-      if (d <= 9) d = '0' + d
-      return y + '-' + m + '-' + d
+    loadVisitsByDay(chartId, type) {
+      visitsByDay({ type: type }).then((data) => {
+        this.lineChartImage(chartId, data)
+      })
     },
-    buildBar(elementId, xAxis, seriesData) {
-      const chart = echarts.init(document.getElementById(elementId))
-      chart.setOption({
+    lineChartImage: function (chartId, data) { //折线图
+      if (!this[chartId]) {
+        var element = document.getElementById(chartId);
+        this[chartId] = echarts.init(element);
+      }
+      var option = {
+        title: {
+          text: ''
+        },
+        grid: { left: '0%', right: '0%', top: '20%' },
         tooltip: {
-          trigger: 'axis',
-          axisPointer: {
-            type: 'shadow'
+          trigger: 'axis'
+        },
+        xAxis: {
+          type: 'category',
+          data: data.map(function (n) {
+            return n.label ? n.label : n.name;
+          })
+        },
+        yAxis: {
+          type: 'value',
+          axisLabel: {
+            show: false
+          },
+          axisTick: {
+            show: false
           }
         },
-        legend: { top: '0', right: '1%' },
-        grid: { left: 25, right: 0, bottom: 35, top: 25 },
-        xAxis: { type: 'category', data: xAxis },
-        yAxis: { type: 'value' },
-        series: seriesData
-      })
+        series: [
+          {
+            data: data.map(function (n) {
+              return n.value;
+            }),
+            type: 'line'
+          }
+        ]
+      };
+      this[chartId].setOption(option);
+    },
+    barChartImage: function (chartId, data) {
+      if (!this[chartId]) {
+        var element = document.getElementById(chartId);
+        this[chartId] = echarts.init(element);
+      }
+      var option = {
+        tooltip: {
+          trigger: 'axis'
+        },
+        grid: { left: '0%', right: '0%', top: '5%' },
+        xAxis: {
+          type: 'category',
+          data: data.map(function (n) {
+            return n.label;
+          })
+        },
+        yAxis: {
+          type: 'value',
+          axisLabel: {
+            show: false
+          },
+          axisTick: {
+            show: false
+          }
+        },
+        series: [
+          {
+            data: data.map(function (n) {
+              return n.value;
+            }),
+            type: 'bar'
+          }
+        ]
+      };
+      this[chartId].setOption(option);
     }
   }
 }

+ 82 - 54
src/views/bz/touristAnalysis/index.vue

@@ -4,52 +4,80 @@
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/api/docs`)">
           <div class="card-panel-icon-wrapper icon-people">
-            <el-image src="/images/016527@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/016527@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              累计访客人数
-            </div>
-            <count-to :start-val="0" :end-val="2854247" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">累计访客人数</div>
+            <count-to
+              :start-val="0"
+              :end-val="topData.visitsTotal"
+              :duration="2600"
+              class="card-panel-num"
+            />
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/appKey/index`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/016528@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/016528@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              省内访客人数
-            </div>
-            <count-to :start-val="0" :end-val="762084" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">省内访客人数</div>
+            <count-to
+              :start-val="0"
+              :end-val="topData.provinceTotal"
+              :duration="2600"
+              class="card-panel-num"
+            />
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/place/baseInfo`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/016529@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/016529@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              省外访客人数
-            </div>
-            <count-to :start-val="0" :end-val="2090736" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">省外访客人数</div>
+            <count-to
+              :start-val="0"
+              :end-val="topData.outsideTotal"
+              :duration="2600"
+              class="card-panel-num"
+            />
           </div>
         </div>
       </el-col>
       <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
         <div class="card-panel" @click="gotoPage(`/statistics/file`)">
           <div class="card-panel-icon-wrapper icon-message">
-            <el-image src="/images/016530@2x.png" class="card-panel-icon" style="height: 60px"/>
+            <el-image
+              src="/images/016530@2x.png"
+              class="card-panel-icon"
+              style="height: 60px"
+            />
           </div>
           <div class="card-panel-description">
-            <div class="card-panel-text">
-              境外访客人数
-            </div>
-            <count-to :start-val="0" :end-val="4416" :duration="2600" class="card-panel-num"/>
+            <div class="card-panel-text">境外访客人数</div>
+            <count-to
+              :start-val="0"
+              :end-val="0"
+              :duration="2600"
+              class="card-panel-num"
+            />
           </div>
         </div>
       </el-col>
@@ -62,7 +90,7 @@
             <div slot="header" class="clearfix">
               <span>访客来源省份TOP10</span>
             </div>
-            <div id="chart1" style="height: 200px;width: 100%"></div>
+            <div id="chart1" style="height: 400px; width: 100%"></div>
           </el-card>
         </div>
       </el-col>
@@ -73,7 +101,7 @@
             <div slot="header" class="clearfix">
               <span>访客来源城市TOP10</span>
             </div>
-            <div id="chart2" style="height: 200px;width: 100%"></div>
+            <div id="chart2" style="height: 400px; width: 100%"></div>
           </el-card>
         </div>
       </el-col>
@@ -84,49 +112,49 @@
 <script>
 import CountTo from 'vue-count-to'
 import * as echarts from 'echarts'
+import { censusPage } from '@/api/bz/monitor'
 
 export default {
   components: { CountTo },
   data() {
-    return {}
+    return { topData: {} }
   },
   computed: {},
-  created() {
-  },
   mounted() {
-    const xAxis = []
-    for (let i = 7; i > 0; i--) {
-      xAxis.push(this.addDays(new Date(), i * -1))
-    }
-    this.buildBar('chart1', xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
-    this.buildBar('chart2', xAxis, [{ type: 'line', stack: 'Total', data: [0, 0, 0, 0, 0, 0, 0] }])
+    censusPage({}).then(data => {
+      this.topData = data;
+      this.lineChartImage('chart1', data.provinceRank);
+      this.lineChartImage('chart2', data.cityRank);
+    });
   },
   methods: {
-    addDays(nd, days) {
-      nd = nd.valueOf()
-      nd = nd + days * 24 * 60 * 60 * 1000
-      nd = new Date(nd)
-      var y = nd.getFullYear()
-      var m = nd.getMonth() + 1
-      var d = nd.getDate()
-      if (m <= 9) m = '0' + m
-      if (d <= 9) d = '0' + d
-      return y + '-' + m + '-' + d
-    },
-    buildBar(elementId, xAxis, seriesData) {
-      const chart = echarts.init(document.getElementById(elementId))
-      chart.setOption({
-        tooltip: {
-          trigger: 'axis',
-          axisPointer: {
-            type: 'shadow'
+    lineChartImage: function (chartId, data) { //折线图
+      var element = document.getElementById(chartId);
+      const chart3 = echarts.init(element);
+      chart3.setOption({
+        grid: { left: '5%', right: '5%', top: '10%' },
+        dataset: [
+          {
+            dimensions: ['name', 'person'],
+            source: data.map(s => [s.label, s.value])
+          },
+          {
+            transform: {
+              type: 'sort',
+              config: { dimension: 'person', order: 'desc' }
+            }
           }
+        ],
+        xAxis: {
+          type: 'category',
+          axisLabel: { interval: 0, rotate: 30 }
         },
-        legend: { top: '0', right: '1%' },
-        grid: { left: 25, right: 0, bottom: 35, top: 25 },
-        xAxis: { type: 'category', data: xAxis },
-        yAxis: { type: 'value' },
-        series: seriesData
+        yAxis: {},
+        series: {
+          type: 'bar',
+          encode: { x: 'name', y: 'score' },
+          datasetIndex: 1
+        }
       })
     }
   }

+ 64 - 18
src/views/equipment/passenger/Detail.vue

@@ -43,7 +43,7 @@
           </div>
           <el-divider />
           <span style="color: #666666">
-            {{ qweather.now.windDir }}{{ qweather.now.windScale }}级
+            {{ qweather.now.windDir }} {{ qweather.now.windScale }}级
           </span>
           <el-divider direction="vertical" style="padding: 0 10px" />
           <span
@@ -55,7 +55,9 @@
               border-radius: 2px;
             "
           >
-            {{ qweather.now.feelsLike }} {{ qweather.now.category }}
+            体感温度&nbsp;&nbsp;{{
+              sendibleTemperature(qweather.now.feelsLike)
+            }}
           </span>
         </el-card>
       </el-col>
@@ -148,7 +150,7 @@
       </el-col>
       <el-col :span="8">
         <el-card>
-          <div slot="header">节假日访客停留时长</div>
+          <div slot="header">节假日访客停留时长(分钟)</div>
           <div id="timersListEchart" style="width: 100%; height: 200px"></div>
         </el-card>
       </el-col>
@@ -173,35 +175,37 @@
         <el-col :span="4">
           <p style="font-size: 14px">总接待人数</p>
           <p style="font-size: 20px">
-            {{ detailData.inCount + detailData.outCount }}
+            {{ Number(detailData.inCount) + Number(detailData.outCount) }}
           </p>
         </el-col>
         <el-col :span="4">
           <p style="font-size: 14px">实时容量</p>
           <p style="font-size: 20px">
-            {{ detailData.inCount - detailData.outCount }}
+            {{ detailData.inCount - detailData.outCount > 0 ? detailData.inCount - detailData.outCount : 0 }}
           </p>
         </el-col>
         <el-col :span="4">
           <p style="font-size: 14px">平均停留时长</p>
-          <p style="font-size: 20px">{{ detailData.avgStayTime }}秒</p>
+          <p style="font-size: 20px">
+            {{ detailData.avgStayTime ? detailData.avgStayTime : 0 }}
+          </p>
         </el-col>
       </el-row>
     </el-card>
     <el-row :gutter="16">
-      <el-col :span="8">
+      <el-col :span="12">
         <el-card>
           <div slot="header">性别</div>
           <div id="gender-box" style="width: 100%; height: 200px" />
         </el-card>
       </el-col>
-      <el-col :span="8">
+      <el-col :span="12">
         <el-card>
           <div slot="header">来源</div>
           <div id="from-source-box" style="width: 100%; height: 200px" />
         </el-card>
       </el-col>
-      <el-col :span="8">
+      <!-- <el-col :span="8">
         <el-card>
           <el-row
             v-for="item in detailData.listFromSource"
@@ -212,7 +216,7 @@
             <el-col :span="12">{{ item.value }}人次</el-col>
           </el-row>
         </el-card>
-      </el-col>
+      </el-col> -->
     </el-row>
   </div>
 </template>
@@ -247,6 +251,7 @@
 <script>
 import * as echarts from 'echarts'
 import { findDetail, qweatherGet, qweatherAir, ambitusRoadConditions } from '@/api/equipment/equipment_passenger'
+import { passenger } from '@/api/bz/monitor'
 
 export default {
   components: {},
@@ -268,14 +273,42 @@ export default {
         detailData.lng = latLng[1];
       }
       this.detailData = detailData
-      this.buildVisitorsList(this.detailData.visitorsList);
-      // this.buildGender(this.detailData.listGenders)
-      // this.buildFromSource(this.detailData.listFromSource)
+      this.buildVisitorsList('visitorsListEchart', this.detailData.visitorsList);
+      this.buildVisitorsList('timersListEchart', this.detailData.visitorsList.map(r => {
+        r.value = r.value > 10000 ? 113 : 96;
+        return r;
+      }));
       this.loadQweather();
+
+
+      const crj = [{ label: '出境', value: detailData.outCount }, { label: '入境', value: detailData.inCount }]
+      this.buildVisitorsList('entryAndExitEchart', crj);
+
+      this.buildFromSource(detailData.listFromSource.map(r => {
+        r.name = r.label;
+        return r;
+      }));
+
+      let gender = [{ name: '男', value: 0 }, { name: '女', value: 0 }]
+      const genderBox = detailData.listGenders;
+      if (genderBox) gender = [{ name: '男', value: genderBox.male }, { name: '女', value: genderBox.female }];
+      this.buildGender(gender);
     })
-  },
-  created() {
 
+    // passenger({ orgId: queryForm.orgId }).then(data => {
+    //   let gender = [{ name: '男', value: 0 }, { name: '女', value: 0 }]
+    //   const genderList = data.spot;
+    //   if (genderList != null && genderList.length > 0) {
+    //     gender = gender.map(r => {
+    //       const filter = genderList.filter(l => l.name === r.label);
+    //       if (filter != null && filter.length > 0) {
+    //         r.value = filter[0].value;
+    //       }
+    //       return r;
+    //     });
+    //   }
+    //   this.buildGender(gender);
+    // })
   },
   methods: {
     loadQweather() {
@@ -289,6 +322,19 @@ export default {
         console.log(data);
       });
     },
+    sendibleTemperature(temperature) {
+      if (temperature < 8) {
+        return '冷';
+      } else if (temperature < 18 && temperature >= 8) {
+        return '凉爽';
+      } else if (temperature < 29 && temperature >= 18) {
+        return '舒适';
+      } else if (temperature >= 29) {
+        return '热';
+      } else {
+        return '正常';
+      }
+    },
     goToTraffic() {
       const lat = this.detailData.lat;
       const lng = this.detailData.lng;
@@ -313,8 +359,8 @@ export default {
 
       return this.dateFilter(month) + "月" + this.dateFilter(date) + "日 " + " " + week + " " + timeValue;
     },
-    buildVisitorsList(visitorsList) {
-      const chart = echarts.init(document.getElementById('visitorsListEchart'));
+    buildVisitorsList(chartId, visitorsList) {
+      const chart = echarts.init(document.getElementById(chartId));
       const data = visitorsList.map(v => v.label);
       const series = { name: '', type: 'bar', data: visitorsList.map(v => v.value) };
       chart.setOption({
@@ -360,7 +406,7 @@ export default {
         },
         series: [
           {
-            name: '客流来源地',
+            name: '客流性别',
             type: 'pie',
             radius: ['60%', '90%'],
             avoidLabelOverlap: false,

+ 1 - 1
src/views/equipment/passenger/traffic.vue

@@ -23,7 +23,7 @@ export default {
   },
   methods: {
     initMap() {
-      const center = new TMap.LatLng(this.queryForm.lat, this.queryForm.lng);
+      const center = new TMap.LatLng(this.queryForm.lat || 24.656601, this.queryForm.lng || 109.251243);
       //   const range = document.querySelector('#range');
       //   const number = document.querySelector('#number');
       new TMap.Map('container', {

+ 2 - 2
src/views/place/gis/index.vue

@@ -20,10 +20,10 @@
                 </div>
               </div>
             </el-col>
-            <el-col :span="14">
+            <el-col :span="16">
               {{ d.category.name }}
             </el-col>
-            <el-col :span="6">
+            <el-col :span="4">
               {{ d.num }}
             </el-col>
           </el-row>

+ 219 - 0
src/views/travel/hotel.vue

@@ -0,0 +1,219 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryForm" inline size="small">
+      <!-- <el-form-item label="点位分布">
+        <select-base-bz-data v-model="queryForm.placeBaseInfoId" :multiple="false" />
+      </el-form-item> -->
+      <el-form-item label="关键词搜索">
+        <el-input v-model="queryForm.search" placeholder="请输入关键词" />
+      </el-form-item>
+      <el-form-item label="按申报状态查询">
+        <el-select
+          size="small"
+          v-model="queryForm.auditState"
+          placeholder="请选择申报状态"
+          width="100"
+          clearable
+        >
+          <el-option label="已撤销" :value="-1">已撤销</el-option>
+          <el-option label="申报中" :value="0">申报中</el-option>
+          <el-option label="申报通过" :value="1">申报通过</el-option>
+          <el-option label="申报驳回" :value="2">申报驳回</el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <el-row class="action-bar-container" type="flex" justify="end">
+      <el-button type="primary" size="small" @click.native="fetchData"
+        >查询</el-button
+      >
+      <!-- <el-button-group>
+        <el-button v-permission="['equipment.passenger.add']" size="small" @click.native="$refs.dialogForm.open({})">
+          新建
+        </el-button>
+      </el-button-group> -->
+    </el-row>
+    <el-table
+      v-loading="isLoading"
+      :data="pageData.records"
+      border
+      fit
+      highlight-current-row
+      @selection-change="selectionChange"
+    >
+      <el-table-column
+        align="center"
+        prop="tour_code"
+        label="出行团号"
+        header-align="center"
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="travelName"
+        label="旅行社"
+        header-align="center"
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="hotel_name"
+        label="酒店"
+        header-align="center"
+      >
+      </el-table-column>
+
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="people_num"
+        label="入住人数"
+        header-align="center"
+        width="100"
+      >
+      </el-table-column>
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="stay_days"
+        label="入住天数"
+        header-align="center"
+        width="100"
+      >
+      </el-table-column>
+      <el-table-column
+        :show-overflow-tooltip="true"
+        prop="files"
+        label="凭证文件"
+        header-align="center"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <el-image
+            v-for="(item, index) in scope.row.file
+              ? scope.row.file.split(',')
+              : []"
+            :key="index"
+            :src="item"
+            :preview-src-list="scope.row.file ? scope.row.file.split(',') : []"
+            style="width: 30px; height: 30px"
+          >
+            <div slot="error" class="image-slot">
+              <i class="el-icon-picture-outline"></i>
+            </div>
+          </el-image>
+        </template>
+      </el-table-column>
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="audit_state"
+        label="申报进度"
+        header-align="center"
+      >
+        <template slot-scope="scope">
+          <el-tag
+            size="small"
+            type="danger"
+            v-if="scope.row.audit_state == -1"
+            style="margin-left: 5px"
+          >
+            申报撤销
+          </el-tag>
+          <el-tag
+            size="small"
+            type=""
+            v-else-if="scope.row.audit_state == 0"
+            style="margin-left: 5px"
+          >
+            申报中
+          </el-tag>
+          <el-tag
+            size="small"
+            type="success"
+            v-else-if="scope.row.audit_state == 1"
+            style="margin-left: 5px"
+          >
+            申报通过
+          </el-tag>
+          <el-tag size="small" type="danger" v-else style="margin-left: 5px">
+            申报驳回
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="createDate"
+        label="上报时间"
+        header-align="center"
+      >
+      </el-table-column>
+    </el-table>
+    <div style="clear: both" />
+    <el-pagination
+      class="pagination-container"
+      background
+      layout="prev, pager, next"
+      :total="pageData.total"
+      :page-size="pageData.pageSize"
+      @current-change="paginationChange"
+    />
+    <!-- <dialog-form ref="dialogForm" @ok="fetchData" /> -->
+  </div>
+</template>
+<style type="text/css">
+.action-btns {
+  text-align: right;
+}
+</style>
+<script>
+import { pageHotelAudit } from '@/api/travel/index'
+import { dateTimeFormatter } from '@/utils/formater'
+// import DialogForm from './DialogForm'
+// import SelectBaseBzData from '@/components/SelectBaseInfoData'
+
+export default {
+  // components: { DialogForm, SelectBaseBzData },
+  data() {
+    return {
+      queryForm: {},
+      isLoading: true,
+      pageData: {
+        records: []
+      },
+      currentPage: 1,
+      multipleSelection: []
+    }
+  },
+  computed: {},
+  created() {
+    this.queryForm = this.$route.query;
+    this.fetchData()
+  },
+  methods: {
+    dateTimeFormatter,
+    details: function (title, id) {
+      this.$router.push(`/equipment/passenger/detail/${id}?orgId=${orgId}`)
+    },
+    selectionChange(val) {
+      const temp = []
+      val.forEach(o => {
+        temp.push(o.id)
+      })
+      this.multipleSelection = temp
+    },
+    paginationChange(val) {
+      this.currentPage = val
+      this.fetchData()
+    },
+    fetchData() {
+      this.isLoading = true
+      pageHotelAudit({ ...this.queryForm, current: this.currentPage })
+        .then((response) => {
+          this.pageData = response
+        })
+        .finally(() => (this.isLoading = false))
+    }
+  }
+}
+</script>

+ 289 - 0
src/views/travel/index.vue

@@ -0,0 +1,289 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryForm" inline size="small">
+      <!-- <el-form-item label="点位分布">
+        <select-base-bz-data v-model="queryForm.placeBaseInfoId" :multiple="false" />
+      </el-form-item> -->
+      <el-form-item label="关键词搜索">
+        <el-input v-model="queryForm.search" placeholder="请输入关键词" />
+      </el-form-item>
+      <el-form-item label="按申报状态查询">
+        <el-select
+          size="small"
+          v-model="queryForm.progress"
+          placeholder="请选择申报状态"
+          width="100"
+          clearable
+        >
+          <el-option label="已撤销" :value="-1">已撤销</el-option>
+          <el-option label="景区,酒店复核" :value="0">景区,酒店复核</el-option>
+          <el-option label="旅游局复核" :value="1">旅游局复核</el-option>
+          <el-option label="申报通过" :value="2">申报通过</el-option>
+          <el-option label="申报驳回" :value="3">申报驳回</el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <el-row class="action-bar-container" type="flex" justify="end">
+      <el-button type="primary" size="small" @click.native="fetchData"
+        >查询</el-button
+      >
+      <!-- <el-button-group>
+        <el-button v-permission="['equipment.passenger.add']" size="small" @click.native="$refs.dialogForm.open({})">
+          新建
+        </el-button>
+      </el-button-group> -->
+    </el-row>
+    <el-table
+      v-loading="isLoading"
+      :data="pageData.records"
+      border
+      fit
+      highlight-current-row
+      @selection-change="selectionChange"
+    >
+      <el-table-column
+        prop="travelName"
+        label="旅行社"
+        header-align="center"
+        align="center"
+      >
+        <template slot-scope="scope">
+          {{ scope.row.travelName }}
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="tour_code"
+        label="团队号"
+        header-align="center"
+        align="center"
+      >
+        <template slot-scope="scope">
+          {{ scope.row.tour_code }}<br />
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="tourist_num"
+        label="团队人数"
+        header-align="center"
+        align="center"
+        width="100"
+      >
+        <template slot-scope="scope">
+          {{ scope.row.tourist_num }}<br />
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="credential_no"
+        label="导游证号"
+        header-align="center"
+        align="center"
+      >
+        <template slot-scope="scope">
+          {{ scope.row.credential_no }}<br />
+        </template>
+      </el-table-column>
+      <el-table-column label="凭证文件" header-align="center" align="center">
+        <template slot-scope="scope">
+          <!--                                :src="scope.row.credentialPic"-->
+          <el-image
+            v-for="(item, index) in scope.row.credential_pic
+              ? scope.row.credential_pic.split(',')
+              : []"
+            :key="index"
+            :src="item"
+            :preview-src-list="
+              scope.row.credential_pic
+                ? scope.row.credential_pic.split(',')
+                : []
+            "
+            style="width: 30px; height: 30px; margin-left: 5px"
+          >
+            <div slot="error" class="image-slot">
+              <i class="el-icon-picture-outline"></i>
+            </div>
+          </el-image>
+        </template>
+      </el-table-column>
+      <el-table-column label="游玩景区" header-align="center" align="center">
+        <template slot-scope="scope">
+          {{ scope.row.scenic_name }}<br />
+        </template>
+      </el-table-column>
+      <el-table-column label="入住酒店" header-align="center" align="center">
+        <template slot-scope="scope">
+          {{ scope.row.hotel_name }}<br />
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" header-align="center" align="center">
+        <template slot-scope="scope">
+          <div v-if="scope.row.note && scope.row.note.length > 4">
+            {{ scope.row.note.slice(0, 4) }}...<br />
+            <el-tooltip
+              v-if="scope.row.note"
+              class="item"
+              effect="dark"
+              :content="scope.row.note"
+              placement="top"
+            >
+              <div
+                style="
+                  overflow: hidden;
+                  text-overflow: ellipsis;
+                  white-space: nowrap;
+                  height: 30px;
+                  text-align: center;
+                "
+                v-html="scope.row.context"
+              ></div>
+            </el-tooltip>
+          </div>
+          <div v-else>{{ scope.row.note }}<br /></div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="report_progress"
+        label="申报状态"
+        header-align="center"
+        align="center"
+        width="130"
+      >
+        <template slot-scope="scope">
+          <el-tag
+            size="small"
+            type="danger"
+            v-if="scope.row.report_progress == -1"
+            style="margin-left: 5px"
+          >
+            申报撤销
+          </el-tag>
+          <el-tag
+            size="small"
+            type=""
+            v-else-if="scope.row.report_progress == 0"
+            style="margin-left: 5px"
+          >
+            景区,酒店复核
+          </el-tag>
+          <el-tag
+            size="small"
+            type="success"
+            v-else-if="scope.row.report_progress == 1"
+            style="margin-left: 5px"
+          >
+            旅游局复核
+          </el-tag>
+          <el-tag
+            size="small"
+            type="success"
+            v-else-if="scope.row.report_progress == 2"
+            style="margin-left: 5px"
+          >
+            申报通过
+          </el-tag>
+          <el-tag size="small" type="danger" v-else style="margin-left: 5px"
+            >申报驳回</el-tag
+          >
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="create_date"
+        label="申报时间"
+        header-align="center"
+        align="center"
+      >
+      </el-table-column>
+      <el-table-column
+        label="操作"
+        fixed="right"
+        header-align="center"
+        align="center"
+        width="150"
+      >
+        <template slot-scope="scope">
+          <el-button
+            size="small"
+            type="text"
+            @click="details(scope.row.name, scope.row.id)"
+          >
+            酒店申报记录
+          </el-button>
+          <el-button
+            size="small"
+            type="text"
+            @click="scenicList(scope.row.name, scope.row.id)"
+          >
+            景区申报记录
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div style="clear: both" />
+    <el-pagination
+      class="pagination-container"
+      background
+      layout="prev, pager, next"
+      :total="pageData.total"
+      :page-size="pageData.pageSize"
+      @current-change="paginationChange"
+    />
+    <!-- <dialog-form ref="dialogForm" @ok="fetchData" /> -->
+  </div>
+</template>
+<style type="text/css">
+.action-btns {
+  text-align: right;
+}
+</style>
+<script>
+import { findPage } from '@/api/travel/index'
+import { dateTimeFormatter } from '@/utils/formater'
+// import DialogForm from './DialogForm'
+// import SelectBaseBzData from '@/components/SelectBaseInfoData'
+
+export default {
+  // components: { DialogForm, SelectBaseBzData },
+  data() {
+    return {
+      queryForm: {},
+      isLoading: true,
+      pageData: {
+        records: []
+      },
+      currentPage: 1,
+      multipleSelection: []
+    }
+  },
+  computed: {},
+  created() {
+    this.fetchData()
+  },
+  methods: {
+    dateTimeFormatter,
+    details: function (title, id) {
+      this.$router.push(`/travel/hotel/record?solicitId=${id}&search=${title ? title : ''}`)
+    },
+    scenicList: function (title, id) {
+      this.$router.push(`/travel/scenic/record?solicitId=${id}&search=${title ? title : ''}`)
+    },
+    selectionChange(val) {
+      const temp = []
+      val.forEach(o => {
+        temp.push(o.id)
+      })
+      this.multipleSelection = temp
+    },
+    paginationChange(val) {
+      this.currentPage = val
+      this.fetchData()
+    },
+    fetchData() {
+      this.isLoading = true
+      findPage({ ...this.queryForm, current: this.currentPage })
+        .then((response) => {
+          this.pageData = response
+        })
+        .finally(() => (this.isLoading = false))
+    }
+  }
+}
+</script>

+ 233 - 0
src/views/travel/index_hotel.vue

@@ -0,0 +1,233 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryForm" inline size="small">
+      <!-- <el-form-item label="点位分布">
+        <select-base-bz-data v-model="queryForm.placeBaseInfoId" :multiple="false" />
+      </el-form-item> -->
+      <el-form-item label="关键词搜索">
+        <el-input v-model="queryForm.search" placeholder="请输入关键词" />
+      </el-form-item>
+      <el-form-item label="按申报状态查询">
+        <el-select
+          size="small"
+          v-model="queryForm.auditState"
+          placeholder="请选择申报状态"
+          width="100"
+          clearable
+        >
+          <el-option label="已撤销" :value="-1">已撤销</el-option>
+          <el-option label="申报中" :value="0">申报中</el-option>
+          <el-option label="申报通过" :value="1">申报通过</el-option>
+          <el-option label="申报驳回" :value="2">申报驳回</el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <el-row class="action-bar-container" type="flex" justify="end">
+      <el-button type="primary" size="small" @click.native="fetchData"
+        >查询</el-button
+      >
+      <!-- <el-button-group>
+        <el-button v-permission="['equipment.passenger.add']" size="small" @click.native="$refs.dialogForm.open({})">
+          新建
+        </el-button>
+      </el-button-group> -->
+    </el-row>
+    <el-table
+      v-loading="isLoading"
+      :data="pageData.records"
+      border
+      fit
+      highlight-current-row
+      @selection-change="selectionChange"
+    >
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="createDate"
+        label="申报时间"
+        header-align="center"
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="hotel_name"
+        label="酒店"
+        header-align="center"
+      >
+      </el-table-column>
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="arrival_date"
+        label="到达时间"
+        header-align="center"
+      >
+      </el-table-column>
+
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="people_num"
+        label="入住人数"
+        header-align="center"
+      >
+      </el-table-column>
+
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="stay_days"
+        label="入住天数"
+        header-align="center"
+      >
+      </el-table-column>
+      <el-table-column
+        :show-overflow-tooltip="true"
+        prop="files"
+        label="凭证文件"
+        header-align="center"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <el-image
+            v-for="(item, index) in scope.row.file
+              ? scope.row.file.split(',')
+              : []"
+            :key="index"
+            :src="item"
+            :preview-src-list="scope.row.file ? scope.row.file.split(',') : []"
+            style="width: 30px; height: 30px"
+          >
+            <div slot="error" class="image-slot">
+              <i class="el-icon-picture-outline"></i>
+            </div>
+          </el-image>
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="audit_state"
+        label="申报进度"
+        header-align="center"
+      >
+        <template slot-scope="scope">
+          <el-tag
+            size="small"
+            type="danger"
+            v-if="scope.row.audit_state == -1"
+            style="margin-left: 5px"
+          >
+            申报撤销
+          </el-tag>
+          <el-tag
+            size="small"
+            type=""
+            v-else-if="scope.row.audit_state == 0"
+            style="margin-left: 5px"
+          >
+            申报中
+          </el-tag>
+          <el-tag
+            size="small"
+            type="success"
+            v-else-if="scope.row.audit_state == 1"
+            style="margin-left: 5px"
+          >
+            申报通过
+          </el-tag>
+          <el-tag size="small" type="danger" v-else style="margin-left: 5px">
+            申报驳回
+          </el-tag>
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="complete_date"
+        label="完成时间"
+        header-align="center"
+      >
+        <template slot-scope="scope">
+          <span
+            v-if="scope.row.complete_date == undefined"
+            prop="complete_date"
+          >
+            未完成
+          </span>
+          <span v-else prop="scope.row.complete_date">
+            {{ scope.row.complete_date }}
+          </span>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div style="clear: both" />
+    <el-pagination
+      class="pagination-container"
+      background
+      layout="prev, pager, next"
+      :total="pageData.total"
+      :page-size="pageData.pageSize"
+      @current-change="paginationChange"
+    />
+    <!-- <dialog-form ref="dialogForm" @ok="fetchData" /> -->
+  </div>
+</template>
+<style type="text/css">
+.action-btns {
+  text-align: right;
+}
+</style>
+<script>
+import { pageHotelAudit } from '@/api/travel/index'
+import { dateTimeFormatter } from '@/utils/formater'
+// import DialogForm from './DialogForm'
+// import SelectBaseBzData from '@/components/SelectBaseInfoData'
+
+export default {
+  // components: { DialogForm, SelectBaseBzData },
+  data() {
+    return {
+      queryForm: {},
+      isLoading: true,
+      pageData: {
+        records: []
+      },
+      currentPage: 1,
+      multipleSelection: []
+    }
+  },
+  computed: {},
+  created() {
+    this.queryForm = this.$route.query;
+    this.fetchData()
+  },
+  methods: {
+    dateTimeFormatter,
+    details: function (title, id) {
+      this.$router.push(`/equipment/passenger/detail/${id}?orgId=${orgId}`)
+    },
+    selectionChange(val) {
+      const temp = []
+      val.forEach(o => {
+        temp.push(o.id)
+      })
+      this.multipleSelection = temp
+    },
+    paginationChange(val) {
+      this.currentPage = val
+      this.fetchData()
+    },
+    fetchData() {
+      this.isLoading = true
+      pageHotelAudit({ ...this.queryForm, current: this.currentPage })
+        .then((response) => {
+          this.pageData = response
+        })
+        .finally(() => (this.isLoading = false))
+    }
+  }
+}
+</script>

+ 222 - 0
src/views/travel/index_scenic.vue

@@ -0,0 +1,222 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryForm" inline size="small">
+      <!-- <el-form-item label="点位分布">
+        <select-base-bz-data v-model="queryForm.placeBaseInfoId" :multiple="false" />
+      </el-form-item> -->
+      <el-form-item label="关键词搜索">
+        <el-input v-model="queryForm.search" placeholder="请输入关键词" />
+      </el-form-item>
+      <el-form-item label="按申报状态查询">
+        <el-select
+          size="small"
+          v-model="queryForm.auditState"
+          placeholder="请选择申报状态"
+          width="100"
+          clearable
+        >
+          <el-option label="已撤销" :value="-1">已撤销</el-option>
+          <el-option label="申报中" :value="0">申报中</el-option>
+          <el-option label="申报通过" :value="1">申报通过</el-option>
+          <el-option label="申报驳回" :value="2">申报驳回</el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <el-row class="action-bar-container" type="flex" justify="end">
+      <el-button type="primary" size="small" @click.native="fetchData"
+        >查询</el-button
+      >
+      <!-- <el-button-group>
+        <el-button v-permission="['equipment.passenger.add']" size="small" @click.native="$refs.dialogForm.open({})">
+          新建
+        </el-button>
+      </el-button-group> -->
+    </el-row>
+    <el-table
+      v-loading="isLoading"
+      :data="pageData.records"
+      border
+      fit
+      highlight-current-row
+      @selection-change="selectionChange"
+    >
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="createDate"
+        label="申报时间"
+        header-align="center"
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="scenic_name"
+        label="景区"
+        header-align="center"
+      >
+      </el-table-column>
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="people_num"
+        label="游玩人数"
+        header-align="center"
+      >
+      </el-table-column>
+
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="ticket_price"
+        label="门票单价"
+        header-align="center"
+      >
+      </el-table-column>
+
+      <el-table-column
+        :show-overflow-tooltip="true"
+        prop="files"
+        label="凭证文件"
+        header-align="center"
+        align="center"
+      >
+        <template slot-scope="scope">
+         <el-image
+            v-for="(item, index) in scope.row.file
+              ? scope.row.file.split(',')
+              : []"
+            :key="index"
+            :src="item"
+            :preview-src-list="scope.row.file ? scope.row.file.split(',') : []"
+            style="width: 30px; height: 30px"
+          >
+            <div slot="error" class="image-slot">
+              <i class="el-icon-picture-outline"></i>
+            </div>
+          </el-image>
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="audit_state"
+        label="申报进度"
+        header-align="center"
+      >
+        <template slot-scope="scope">
+          <el-tag
+            size="small"
+            type="danger"
+            v-if="scope.row.audit_state == -1"
+            style="margin-left: 5px"
+          >
+            申报撤销
+          </el-tag>
+          <el-tag
+            size="small"
+            type=""
+            v-else-if="scope.row.audit_state == 0"
+            style="margin-left: 5px"
+          >
+            申报中
+          </el-tag>
+          <el-tag
+            size="small"
+            type="success"
+            v-else-if="scope.row.audit_state == 1"
+            style="margin-left: 5px"
+          >
+            申报通过
+          </el-tag>
+          <el-tag size="small" type="danger" v-else style="margin-left: 5px">
+            申报驳回
+          </el-tag>
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="complete_date"
+        label="完成时间"
+        header-align="center"
+      >
+        <template slot-scope="scope">
+          <span v-if="scope.row.complete_date == undefined" prop="complete_date"
+            >未完成</span
+          >
+          <span v-else prop="scope.row.complete_date">
+            {{ scope.row.complete_date }}
+          </span>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div style="clear: both" />
+    <el-pagination
+      class="pagination-container"
+      background
+      layout="prev, pager, next"
+      :total="pageData.total"
+      :page-size="pageData.pageSize"
+      @current-change="paginationChange"
+    />
+    <!-- <dialog-form ref="dialogForm" @ok="fetchData" /> -->
+  </div>
+</template>
+<style type="text/css">
+.action-btns {
+  text-align: right;
+}
+</style>
+<script>
+import { pageScenicAudit } from '@/api/travel/index'
+import { dateTimeFormatter } from '@/utils/formater'
+// import DialogForm from './DialogForm'
+// import SelectBaseBzData from '@/components/SelectBaseInfoData'
+
+export default {
+  // components: { DialogForm, SelectBaseBzData },
+  data() {
+    return {
+      queryForm: {},
+      isLoading: true,
+      pageData: {
+        records: []
+      },
+      currentPage: 1,
+      multipleSelection: []
+    }
+  },
+  computed: {},
+  created() {
+    this.queryForm = this.$route.query;
+    this.fetchData()
+  },
+  methods: {
+    dateTimeFormatter,
+    details: function (title, id) {
+      this.$router.push(`/equipment/passenger/detail/${id}?orgId=${orgId}`)
+    },
+    selectionChange(val) {
+      const temp = []
+      val.forEach(o => {
+        temp.push(o.id)
+      })
+      this.multipleSelection = temp
+    },
+    paginationChange(val) {
+      this.currentPage = val
+      this.fetchData()
+    },
+    fetchData() {
+      this.isLoading = true
+      pageScenicAudit({ ...this.queryForm, current: this.currentPage })
+        .then((response) => {
+          this.pageData = response
+        })
+        .finally(() => (this.isLoading = false))
+    }
+  }
+}
+</script>

+ 221 - 0
src/views/travel/scenic.vue

@@ -0,0 +1,221 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryForm" inline size="small">
+      <!-- <el-form-item label="点位分布">
+        <select-base-bz-data v-model="queryForm.placeBaseInfoId" :multiple="false" />
+      </el-form-item> -->
+      <el-form-item label="关键词搜索">
+        <el-input v-model="queryForm.search" placeholder="请输入关键词" />
+      </el-form-item>
+      <el-form-item label="按申报状态查询">
+        <el-select
+          size="small"
+          v-model="queryForm.auditState"
+          placeholder="请选择申报状态"
+          width="100"
+          clearable
+        >
+          <el-option label="已撤销" :value="-1">已撤销</el-option>
+          <el-option label="申报中" :value="0">申报中</el-option>
+          <el-option label="申报通过" :value="1">申报通过</el-option>
+          <el-option label="申报驳回" :value="2">申报驳回</el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <el-row class="action-bar-container" type="flex" justify="end">
+      <el-button type="primary" size="small" @click.native="fetchData">
+        查询
+      </el-button>
+      <!-- <el-button-group>
+        <el-button v-permission="['equipment.passenger.add']" size="small" @click.native="$refs.dialogForm.open({})">
+          新建
+        </el-button>
+      </el-button-group> -->
+    </el-row>
+    <el-table
+      v-loading="isLoading"
+      :data="pageData.records"
+      border
+      fit
+      highlight-current-row
+      @selection-change="selectionChange"
+    >
+      <el-table-column
+        align="center"
+        prop="tour_code"
+        label="出行团号"
+        header-align="center"
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="travelName"
+        label="旅行社"
+        header-align="center"
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="scenic_name"
+        label="景区"
+        header-align="center"
+      >
+      </el-table-column>
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="people_num"
+        label="游玩人数"
+        header-align="center"
+        width="100"
+      >
+      </el-table-column>
+
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="ticket_price"
+        label="门票单价"
+        header-align="center"
+        width="130"
+      >
+      </el-table-column>
+
+      <el-table-column
+        :show-overflow-tooltip="true"
+        prop="files"
+        label="凭证文件"
+        header-align="center"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <el-image
+            v-for="(item, index) in scope.row.file
+              ? scope.row.file.split(',')
+              : []"
+            :key="index"
+            :src="item"
+            :preview-src-list="scope.row.file ? scope.row.file.split(',') : []"
+            style="width: 30px; height: 30px"
+          >
+            <div slot="error" class="image-slot">
+              <i class="el-icon-picture-outline"></i>
+            </div>
+          </el-image>
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="audit_state"
+        label="申报进度"
+        header-align="center"
+      >
+        <template slot-scope="scope">
+          <el-tag
+            size="small"
+            type="danger"
+            v-if="scope.row.audit_state == -1"
+            style="margin-left: 5px"
+          >
+            申报撤销
+          </el-tag>
+          <el-tag
+            size="small"
+            type=""
+            v-else-if="scope.row.audit_state == 0"
+            style="margin-left: 5px"
+          >
+            申报中
+          </el-tag>
+          <el-tag
+            size="small"
+            type="success"
+            v-else-if="scope.row.audit_state == 1"
+            style="margin-left: 5px"
+          >
+            申报通过
+          </el-tag>
+          <el-tag size="small" type="danger" v-else style="margin-left: 5px">
+            申报驳回
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column
+        :show-overflow-tooltip="true"
+        align="center"
+        prop="createDate"
+        label="上报时间"
+        header-align="center"
+      >
+      </el-table-column>
+    </el-table>
+    <div style="clear: both" />
+    <el-pagination
+      class="pagination-container"
+      background
+      layout="prev, pager, next"
+      :total="pageData.total"
+      :page-size="pageData.pageSize"
+      @current-change="paginationChange"
+    />
+    <!-- <dialog-form ref="dialogForm" @ok="fetchData" /> -->
+  </div>
+</template>
+<style type="text/css">
+.action-btns {
+  text-align: right;
+}
+</style>
+<script>
+import { pageScenicAudit } from '@/api/travel/index'
+import { dateTimeFormatter } from '@/utils/formater'
+// import DialogForm from './DialogForm'
+// import SelectBaseBzData from '@/components/SelectBaseInfoData'
+
+export default {
+  // components: { DialogForm, SelectBaseBzData },
+  data() {
+    return {
+      queryForm: {},
+      isLoading: true,
+      pageData: {
+        records: []
+      },
+      currentPage: 1,
+      multipleSelection: []
+    }
+  },
+  computed: {},
+  created() {
+    this.queryForm = this.$route.query;
+    this.fetchData()
+  },
+  methods: {
+    dateTimeFormatter,
+    details: function (title, id) {
+      this.$router.push(`/equipment/passenger/detail/${id}?orgId=${orgId}`)
+    },
+    selectionChange(val) {
+      const temp = []
+      val.forEach(o => {
+        temp.push(o.id)
+      })
+      this.multipleSelection = temp
+    },
+    paginationChange(val) {
+      this.currentPage = val
+      this.fetchData()
+    },
+    fetchData() {
+      this.isLoading = true
+      pageScenicAudit({ ...this.queryForm, current: this.currentPage })
+        .then((response) => {
+          this.pageData = response
+        })
+        .finally(() => (this.isLoading = false))
+    }
+  }
+}
+</script>