Browse Source

车辆运转率

Shan9312 8 months ago
parent
commit
c0f4beb682

BIN
dist-现代牧业-测试-20240614.zip


File diff suppressed because it is too large
+ 0 - 0
dist/index.html


+ 8 - 0
src/api/common.js

@@ -348,3 +348,11 @@ export function getNumList(data) {
   })
 }
 
+// 车辆运转率
+export function getVehicRate(data) {
+  return request({
+    url: '/authdata/running/rate/detail',
+    method: 'get',
+    params: data
+  })
+}

BIN
src/assets/images/2.png


+ 97 - 71
src/router/index.js

@@ -52,86 +52,112 @@ export const constantRoutes = [
       component: () => import('@/views/dashboard/index'),
       meta: { title: '首页', icon: '首页', affix: true }
     }]
+  },
+
+  {
+    path: '/changpwd',
+    component: Layout,
+    redirect: '/changpwd',
+    hidden: true,
+    children: [{
+      path: 'changpwd',
+      name: 'Changpwd',
+      component: () => import('@/views/changpwd/changpwd.vue'),
+      meta: { title: '修改密码', icon: '', affix: false }
+    }]
+  },
+
+  {
+    path: '/vehiclUtilizaRate',
+    component: Layout,
+    redirect: '/vehiclUtilizaRate',
+    children: [{
+      path: 'vehiclUtilizaRate',
+      name: 'VehiclUtilizaRate',
+      component: () => import('@/views/vehiclUtilizaRate/index.vue'),
+      meta: { title: '车辆运转率', icon: '', affix: true }
+    }]
   }
+
 ]
 
 /**
  * asyncRoutes
  * the routes that need to be dynamically loaded based on user roles
  */
-export const asyncRoutes = [
-  {
-    path: '/nested',
-    component: Layout,
-    redirect: '/nested/menu1',
-    name: 'Nested',
-    meta: {
-      title: 'Nested',
-      icon: 'nested'
-    },
-    children: [
-      {
-        path: 'menu1',
-        component: () => import('@/views/nested/menu1/index'), // Parent router-view
-        name: 'Menu1',
-        meta: { title: 'Menu1' },
-        children: [
-          {
-            path: 'menu1-1',
-            component: () => import('@/views/nested/menu1/menu1-1'),
-            name: 'Menu1-1',
-            meta: { title: 'Menu1-1' }
-          },
-          {
-            path: 'menu1-2',
-            component: () => import('@/views/nested/menu1/menu1-2'),
-            name: 'Menu1-2',
-            meta: { title: 'Menu1-2' },
-            children: [
-              {
-                path: 'menu1-2-1',
-                component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'),
-                name: 'Menu1-2-1',
-                meta: { title: 'Menu1-2-1' }
-              },
-              {
-                path: 'menu1-2-2',
-                component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'),
-                name: 'Menu1-2-2',
-                meta: { title: 'Menu1-2-2' }
-              }
-            ]
-          },
-          {
-            path: 'menu1-3',
-            component: () => import('@/views/nested/menu1/menu1-3'),
-            name: 'Menu1-3',
-            meta: { title: 'Menu1-3' }
-          }
-        ]
-      },
-      {
-        path: 'menu2',
-        component: () => import('@/views/nested/menu2/index'),
-        meta: { title: 'menu2' }
-      }
+// export const asyncRoutes = [
+//   {
+//     path: '/nested',
+//     component: Layout,
+//     redirect: '/nested/menu1',
+//     name: 'Nested',
+//     meta: {
+//       title: 'Nested',
+//       icon: 'nested'
+//     },
+//     children: [
+//       {
+//         path: 'menu1',
+//         component: () => import('@/views/nested/menu1/index'), // Parent router-view
+//         name: 'Menu1',
+//         meta: { title: 'Menu1' },
+//         children: [
+//           {
+//             path: 'menu1-1',
+//             component: () => import('@/views/nested/menu1/menu1-1'),
+//             name: 'Menu1-1',
+//             meta: { title: 'Menu1-1' }
+//           },
+//           {
+//             path: 'menu1-2',
+//             component: () => import('@/views/nested/menu1/menu1-2'),
+//             name: 'Menu1-2',
+//             meta: { title: 'Menu1-2' },
+//             children: [
+//               {
+//                 path: 'menu1-2-1',
+//                 component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'),
+//                 name: 'Menu1-2-1',
+//                 meta: { title: 'Menu1-2-1' }
+//               },
+//               {
+//                 path: 'menu1-2-2',
+//                 component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'),
+//                 name: 'Menu1-2-2',
+//                 meta: { title: 'Menu1-2-2' }
+//               }
+//             ]
+//           },
+//           {
+//             path: 'menu1-3',
+//             component: () => import('@/views/nested/menu1/menu1-3'),
+//             name: 'Menu1-3',
+//             meta: { title: 'Menu1-3' }
+//           }
+//         ]
+//       },
+//       {
+//         path: 'menu2',
+//         component: () => import('@/views/nested/menu2/index'),
+//         meta: { title: 'menu2' }
+//       }
 
-    ]
-  },
+//     ]
+//   },
 
-  {
-    path: 'external-link',
-    component: Layout,
-    children: [
-      {
-        path: 'https://panjiachen.github.io/vue-element-admin-site/#/',
-        meta: { title: 'External Link', icon: 'link' }
-      }
-    ]
-  },
-  // 404 page must be placed at the end !!!
-  { path: '*', redirect: '/404', hidden: true }
-]
+//   {
+//     path: 'external-link',
+//     component: Layout,
+//     children: [
+//       {
+//         path: 'https://panjiachen.github.io/vue-element-admin-site/#/',
+//         meta: { title: 'External Link', icon: 'link' }
+//       }
+//     ]
+//   },
+//   // 404 page must be placed at the end !!!
+//   { path: '*', redirect: '/404', hidden: true }
+// ]
 
 const createRouter = () => new Router({
   // mode: 'history', // require service support

+ 52 - 0
src/views/custom/outStock/index.vue

@@ -102,6 +102,7 @@
             </template>
           </el-table-column>
           <el-table-column label="出库日期" sortable prop="creatTime" min-width="100px" align="center" />
+          <el-table-column label="出库时间" sortable prop="creatDate" min-width="120px" align="center" />
           <!-- <el-table-column label="EAS同步状态" min-width="130px" align="center">
             <template slot-scope="scope">
               <span>{{ scope.row.easStatus }}</span><br>
@@ -288,6 +289,8 @@
             </template>
           </el-table-column>
           <el-table-column label="出库日期" sortable prop="creatTime" min-width="120px" align="center" />
+          <el-table-column label="出库时间" sortable prop="creatDate" min-width="120px" align="center" />
+
           <el-table-column label="备注" min-width="130px" align="center">
             <template slot-scope="scope">
               <span>{{ scope.row.note }}</span><br>
@@ -420,6 +423,19 @@
                 />
               </el-form-item>
             </el-col>
+            <!-- <el-col v-if="isReceiveTime2" :span="8">
+              <el-form-item label="出库时间:" prop="creatDate">
+                <el-time-picker
+                  v-model="createTemp.creatDate"
+                  arrow-control
+                  format="HH:mm:ss"
+                  value-format="HH:mm:ss"
+                  placeholder="出库时间"
+                />
+              </el-form-item>
+            </el-col> -->
+          </el-row>
+          <el-row>
             <el-col v-if="isReceiveTime2" :span="8">
               <el-form-item label="备注:" prop="note">
                 <el-input ref="note" v-model="createTemp.note" />
@@ -464,6 +480,17 @@
                 />
               </el-form-item>
             </el-col>
+            <!-- <el-col v-if="isReceiveTime" :span="8">
+              <el-form-item label="出库时间:" prop="creatDate">
+                <el-time-picker
+                  v-model="createTemp.creatDate"
+                  arrow-control
+                  format="HH:mm:ss"
+                  value-format="HH:mm:ss"
+                  placeholder="出库时间"
+                />
+              </el-form-item>
+            </el-col> -->
             <el-col v-if="isReceiveTime" :span="8">
               <el-form-item label="备注:" prop="note">
                 <el-input ref="note" v-model="createTemp.note" />
@@ -823,6 +850,19 @@
                 <el-input ref="creatTime" v-model="seeTemp.creatTime" disabled />
               </el-form-item>
             </el-col>
+
+            <el-col v-if="isCreatTimeAllo" :span="8">
+              <el-form-item label="出库时间:" prop="creatDate">
+                <el-time-picker
+                  v-model="createTemp.creatDate"
+                  arrow-control
+                  format="HH:mm:ss"
+                  value-format="HH:mm:ss"
+                  placeholder="出库时间"
+                />
+              </el-form-item>
+            </el-col>
+
             <el-col v-if="isCreatTimeAllo" :span="8">
               <el-form-item label="备注:" prop="note">
                 <el-input ref="note" v-model="seeTemp.note" disabled />
@@ -840,6 +880,11 @@
                 <el-input ref="creatTime" v-model="seeTemp.creatTime" disabled />
               </el-form-item>
             </el-col>
+            <el-col :span="8">
+              <el-form-item label="出库时间:" prop="creatDate">
+                <el-input ref="creatTime" v-model="seeTemp.creatDate" disabled />
+              </el-form-item>
+            </el-col>
             <el-col :span="8">
               <el-form-item label="备注:" prop="note">
                 <el-input ref="note" v-model="seeTemp.note" disabled />
@@ -1266,6 +1311,7 @@ export default {
         empId: Cookies.get('employeid'),
         pastureId: Cookies.get('pastureid'),
         receiveTime: parseTime(new Date(), '{y}-{m}-{d}'),
+        // creatDate: parseTime(new Date(), '{h}:{m}:{s}'),
         applicatId: Cookies.get('employeid'),
         departmentId: Cookies.get('departmentid'),
         greenFodderNumber: '',
@@ -1837,6 +1883,7 @@ export default {
       this.createTemp.empId = parseInt(Cookies.get('employeid'))
       this.createTemp.pastureId = parseInt(Cookies.get('pastureid'))
       this.createTemp.receiveTime = parseTime(new Date(), '{y}-{m}-{d}')
+      this.createTemp.createDate = parseTime(new Date(), '{h}:{m}:{s}'), // TODO:
       this.createTemp.departmentId = parseInt(Cookies.get('departmentid'))
       this.createTemp.applicatId = parseInt(Cookies.get('employeid'))
       this.listAdd = []
@@ -2297,6 +2344,7 @@ export default {
             receiveTime: this.createTemp.receiveTime,
             empId: this.createTemp.empId,
             note: this.createTemp.note
+            // creatDate: this.createTemp.creatDate
           }}
 
           if (this.createTemp.oddCode == '') {
@@ -2411,6 +2459,7 @@ export default {
             useType: this.createTemp.useType,
             applicatId: this.createTemp.applicatId,
             receiveTime: this.createTemp.receiveTime,
+            // creatDate: this.createTemp.creatDate,
             empId: this.createTemp.empId,
             note: this.createTemp.note
           }}
@@ -2492,6 +2541,7 @@ export default {
             useType: 4,
             applicatId: this.createTemp.applicatId,
             receiveTime: this.createTemp.receiveTime,
+            // creatDate: this.createTemp.creatDate,
             empId: this.createTemp.empId,
             oddCode: this.createTemp.oddCode,
             note: this.createTemp.note
@@ -2604,6 +2654,7 @@ export default {
             useType: this.createTemp.useType,
             applicatId: this.createTemp.applicatId,
             receiveTime: this.createTemp.receiveTime,
+            // creatDate: this.createTemp.creatDate,
             empId: this.createTemp.empId,
             note: this.createTemp.note
           }}
@@ -2714,6 +2765,7 @@ export default {
             useType: this.createTemp.useType,
             applicatId: this.createTemp.applicatId,
             receiveTime: this.createTemp.receiveTime,
+            // creatDate: this.createTemp.creatDate,
             empId: this.createTemp.empId,
             note: this.createTemp.note,
             greenFodderNumber: this.createTemp.greenFodderNumber

+ 291 - 0
src/views/vehiclUtilizaRate/index.vue

@@ -0,0 +1,291 @@
+<template>
+  <div class="container">
+    <div class="serch">
+      <el-date-picker
+        v-model="getdataListParm.date"
+        type="month"
+        placeholder="选择月"
+        :clearable="false"
+        format="yyyy-MM"
+        value-format="yyyy-MM"
+      >
+      </el-date-picker>
+      <el-select
+        v-model="getdataListParm.pastureName"
+        placeholder="牧场"
+        class="filter-item"
+        style="width: 120px"
+      >
+        <el-option
+          v-for="item in findAllPasture"
+          :key="item.id"
+          :label="item.name"
+          :value="item.name"
+        />
+      </el-select>
+      <el-input
+        v-model="getdataListParm.eqCode"
+        placeholder="车辆编号"
+        clearable
+        style="width: 140px"
+        class="filter-item"
+      ></el-input>
+
+      <el-button
+        type="primary"
+        style="margin-left: 20px"
+        icon="el-icon-search"
+        @click="handlerSerch"
+        >搜 索</el-button
+      >
+
+      <el-button type="success" icon="el-icon-download" @click="handleDownload"
+        >导 出</el-button
+      >
+    </div>
+
+    <!-- 列表table -->
+    <el-table
+      :data="tableData"
+      border
+      header-align="center"
+      style="width: 99%; margin-top: 30px"
+      max-height="590px"
+      v-loading="loading"
+      element-loading-text="数据中在加载中"
+      ref="table"
+    >
+      <template v-for="(item, index) in tableHeader">
+        <el-table-column
+          v-if="item.prop !== 'runningRate'"
+          :key="index"
+          show-overflow-tooltip
+          :prop="item.prop"
+          :label="item.label"
+          :width="item.width"
+          align="center"
+        >
+        </el-table-column>
+
+        <el-table-column
+          v-else="item.prop == 'runningRate'"
+          :key="index"
+          show-overflow-tooltip
+          :prop="item.prop"
+          :label="item.label"
+          :width="item.width"
+          align="center"
+          :render-header="renderColumnHeader"
+        >
+        </el-table-column>
+        <!-- <template sloat-scope="scope">
+            <span v-if="item.prop !== 'runningRate'">{{
+              scope.row[item.prop]
+            }}</span>
+            <span v-else>{{ scope.row[item.prop] }}</span>
+          </template> -->
+      </template>
+    </el-table>
+    <!--  -->
+    <Pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="getdataListParm.offset"
+      :limit.sync="getdataListParm.pagecount"
+      @pagination="getTableList"
+    />
+  </div>
+</template>
+
+<script>
+import Cookies from 'js-cookie'
+import { GetDataByNames, getVehicRate } from '@/api/common'
+import { parseTime, json2excel } from '@/utils/index.js'
+import Pagination from '@/components/Pagination'
+
+export default {
+  components: { Pagination },
+  data() {
+    return {
+      total: 0,
+      loading: false,
+      getdataListParm: {
+        pagecount: 10,
+        offset: 1,
+        pastureId: Cookies.get('pastureid'),
+        pastureName: Cookies.get('pasturename'),
+        date: parseTime(new Date(), '{y}-{m}'), // 日期
+        eqCode: ''
+      },
+      requestParams: [
+        {
+          name: 'findAllPasture',
+          offset: 0,
+          pagecount: 0,
+          returntype: 'Map',
+          parammaps: { id: Cookies.get('pastureid') } // id:18 默认查询所有
+        }
+      ],
+      findAllPasture: [], // 牧场数据
+      tableData: [
+        {
+          pastureName: '圣牧'
+        }
+      ],
+      tableHeader: [],
+      headerArr: [
+        {
+          label: '序号',
+          prop: 'sort',
+          width: '50'
+        },
+        {
+          label: '牧场',
+          prop: 'pastureName',
+          width: '100'
+        },
+        {
+          label: '物料网号',
+          prop: 'license',
+          width: '120'
+        },
+        {
+          label: '车辆编号',
+          prop: 'eqCode',
+          width: '100'
+        },
+        {
+          label: '车辆名称',
+          prop: 'eqName',
+          width: '100'
+        },
+        {
+          label: '车辆类别',
+          prop: 'eqClassName',
+          width: '100'
+        },
+        {
+          label: '标准时长',
+          prop: 'duration',
+          width: '80'
+        },
+        {
+          label: `运转率\n(截止导出日期)`,
+          prop: 'runningRate',
+          width: '100'
+        }
+      ]
+    }
+  },
+  created() {
+    this.getPasture()
+    this.getTableList()
+  },
+  methods: {
+    // 点击搜索
+    handlerSerch() {
+      this.getdataListParm.pagecount = 10
+      this.getdataListParm.offset = 1
+      this.getTableList()
+    },
+    // 获取当前用户牧场信息
+    async getPasture() {
+      const { data } = await GetDataByNames(this.requestParams)
+      this.findAllPasture = data.findAllPasture.list
+    },
+
+    // 获取列表数据
+    async getTableList() {
+      this.loading = true
+      const { data } = await getVehicRate(this.getdataListParm)
+      data.list.length &&
+        data.list.forEach((item, index) => {
+          item.sort = index + 1
+        })
+      this.tableData = data.list
+      this.tableHeader = [...this.headerArr, ...this.getMounth()]
+      this.total = data.total
+      this.loading = false
+      console.log(this.tableHeader, 'tableHeader')
+    },
+
+    //  获取当前月份的天数
+    getMounth() {
+      const arr = []
+      const temp = this.getdataListParm.date.split('-')
+      const year = temp[0]
+      const month = temp[1]
+      const day = new Date(year, month, 0)
+      for (let index = 1; index <= day.getDate(); index++) {
+        index = JSON.stringify(index)
+        const value = { label: index, prop: index, width: '60' }
+        arr.push(value)
+      }
+      return arr
+    },
+
+    // 导出功能
+    handleDownload() {
+      this.getdataListParm.pagecount = 9999
+      getVehicRate(this.getdataListParm).then((res) => {
+        const { data } = res
+        data.list.length &&
+          data.list.forEach((item, index) => {
+            item.sort = index + 1
+          })
+        const table = this.$refs.table
+        const labels = table.columns.map((column) => column.label)
+        const filterVal = this.tableHeader.map((item) => {
+          return item.prop
+        })
+        console.log(labels, filterVal, 'label')
+        const elecExcelDatas = [
+          {
+            tHeader: labels,
+            filterVal: filterVal,
+            tableDatas: data.list,
+            sheetName: 'SheetJS'
+          }
+        ]
+        json2excel(elecExcelDatas, '车辆运转率', true, 'xlsx')
+      })
+    },
+
+    // 运转率展示的内容
+    renderColumnHeader(h, { column }) {
+      return h(
+        'el-tooltip',
+        {
+          effect: 'dark',
+          placement: 'top-start'
+        },
+        [
+          h(
+            'div',
+            {
+              slot: 'content'
+            },
+            [h('span', {}, '实际时长累计和/标准时长累计和')]
+          ),
+          h('div', [
+            h('span', column.label),
+            h('i', {
+              class: 'el-icon-question',
+              style: 'color:#606266;margin-left:5px;vertical-align:middle'
+            })
+          ])
+        ]
+      )
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+  padding: 20px;
+}
+.cell {
+  white-space: pre-wrap !important;
+}
+</style>

Some files were not shown because too many files changed in this diff