From bc04553e17adb00ab8205dfa9bfed58d0e0a2963 Mon Sep 17 00:00:00 2001
From: zhangzeli <123456>
Date: 星期三, 24 十一月 2021 09:04:33 +0800
Subject: [PATCH] 车辆

---
 src/views/your/area-manage/areaManage.vue              |   48 
 src/views/your/car-manage/carManage.vue                |    1 
 src/views/your/addOilInfo-manage/exportColumn.js       |   56 +
 src/views/your/accident-manage/accidentManage.vue      |    1 
 src/views/your/addOilInfo-manage/addOilInfoManage.vue  |  899 ++++++++++++++++++++++++
 src/views/your/carInfo-manage/exportColumn.js          |   53 +
 src/views/your/addOil-manage/addOilManage.vue          |   70 +
 src/views/your/addOilInfo-manage/addOilInfoManage.less |   13 
 src/views/your/suggest-manage/suggestManage.vue        |   18 
 src/views/your/carInfo-manage/carInfoManage.less       |   13 
 src/api/open.js                                        |   24 
 src/views/your/carInfo-manage/carInfoManage.vue        |  964 ++++++++++++++++++++++++++
 12 files changed, 2,106 insertions(+), 54 deletions(-)

diff --git a/src/api/open.js b/src/api/open.js
index 617e84f..0526a65 100644
--- a/src/api/open.js
+++ b/src/api/open.js
@@ -64,7 +64,7 @@
 
 // 鑾峰彇鎵�鏈夎溅杈嗕俊鎭�
 export const getAll = (params) => {
-    return getRequest('/car/getAll', params)
+    return getRequest('/car/getAllCar', params)
 }
 
 // 鍒嗛〉鑾峰彇鍔犳补淇℃伅
@@ -180,4 +180,24 @@
 // 鏌ヨ鐗囧尯淇℃伅
 export const getSuggest = (params) => {
     return getRequest('/suggest/getByPage', params)
-}
\ No newline at end of file
+}
+
+// 鍒犻櫎鎺ヨ揣浜轰俊鎭�
+export const deleteSuggest = (params) => {
+    return postRequest('/suggest/delByIds', params)
+}
+
+// 鏌ヨ鎺ヨ揣浜轰俊鎭�
+export const getCar = (params) => {
+    return getRequest('/car/getAll', params)
+}
+
+// 瀵煎嚭excel
+export const getOilExcel = (params) => {
+    return getRequest('/addOil/getExcel', params)
+}
+
+// 鏍规嵁杞﹁締ID鏌ヨ鍔犳补璁板綍
+export const getByDate = (params) => {
+    return getRequest('/addOil/getByDate', params)
+}
diff --git a/src/views/your/accident-manage/accidentManage.vue b/src/views/your/accident-manage/accidentManage.vue
index e20fadd..edede87 100644
--- a/src/views/your/accident-manage/accidentManage.vue
+++ b/src/views/your/accident-manage/accidentManage.vue
@@ -8,7 +8,6 @@
     <Card>
       <Row class="operation">
         <Button @click="addOil" type="primary" icon="md-add">娣诲姞浜嬫晠璁板綍</Button>
-        <Button @click="delAll" icon="md-trash">鎵归噺鍒犻櫎</Button>
         <Button @click="init" icon="md-refresh">鍒锋柊</Button>
         <Button type="dashed" @click="openTip = !openTip">{{
           openTip ? "鍏抽棴鎻愮ず" : "寮�鍚彁绀�"
diff --git a/src/views/your/addOil-manage/addOilManage.vue b/src/views/your/addOil-manage/addOilManage.vue
index e96119f..1cd128a 100644
--- a/src/views/your/addOil-manage/addOilManage.vue
+++ b/src/views/your/addOil-manage/addOilManage.vue
@@ -8,7 +8,6 @@
     <Card>
       <Row class="operation">
         <Button @click="addOil" type="primary" icon="md-add">娣诲姞鍔犳补璁板綍</Button>
-        <Button @click="delAll" icon="md-trash">鎵归噺鍒犻櫎</Button>
         <Button @click="init" icon="md-refresh">鍒锋柊</Button>
         <Button type="dashed" @click="openTip = !openTip">{{
           openTip ? "鍏抽棴鎻愮ず" : "寮�鍚彁绀�"
@@ -66,29 +65,46 @@
               :label-width="80"
               :rules="addOilFormValidate"
       >
-        <FormItem label="杞﹁締" prop="carId">
-            <Select v-model="addOilForm.carId" filterable>
-              <Option v-for="item in carList" :value="item.id">{{ item.carNo }}</Option>
-            </Select>
-        </FormItem>
-        <Form-item label="鍔犳补鏃ユ湡" prop="addDate">
-          <Row>
-            <Col span="11">
+        <Row :gutter="0">
+          <Col span="12">
+            <FormItem label="杞﹁締" prop="carId">
+              <Select v-model="addOilForm.carId" filterable>
+                <Option v-for="item in carList" :value="item.id">{{ item.carNo }}</Option>
+              </Select>
+            </FormItem>
+          </Col>
+          <Col span="12">
+            <Form-item label="鍔犳补鏃ユ湡" prop="addDate">
               <Date-picker @on-change="change1" type="date" value="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" v-model="addOilForm.addDate"></Date-picker>
-            </Col>
-          </Row>
-        </Form-item>
-        <FormItem label="鍔犳补閲�" prop="amount">
-          <Input v-model="addOilForm.amount" type="number"/>
-        </FormItem>
-        <FormItem label="鍗曚环" prop="unitPrice">
-          <Input v-model="addOilForm.unitPrice" type="number"/>
-        </FormItem>
-        <FormItem label="鍔犳补閲戦" prop="money">
-          <Input v-model="addOilForm.money" type="number"/>
-        </FormItem>
-        <FormItem label="鍔犳补鏃堕噷绋�" prop="mileage">
-          <Input v-model="addOilForm.mileage" type="number"/>
+            </Form-item>
+          </Col>
+        </Row>
+        <Row :gutter="0">
+          <Col span="12">
+            <FormItem label="鍔犳补閲�" prop="amount">
+              <Input v-model="addOilForm.amount" type="number"/>
+            </FormItem>
+          </Col>
+          <Col span="12">
+            <FormItem label="鍗曚环" prop="unitPrice">
+              <Input v-model="addOilForm.unitPrice" type="number"/>
+            </FormItem>
+          </Col>
+        </Row>
+        <Row :gutter="0">
+          <Col span="12">
+            <FormItem label="鍔犳补閲戦" prop="money">
+              <Input v-model="addOilForm.money" type="number"/>
+            </FormItem>
+          </Col>
+          <Col span="12">
+            <FormItem label="閲岀▼" prop="mileage">
+              <Input v-model="addOilForm.mileage" type="number"/>
+            </FormItem>
+          </Col>
+        </Row>
+        <FormItem label="鍔犳补鍗″彿" prop="addOilCode">
+          <Input v-model="addOilForm.addOilCode" />
         </FormItem>
         <FormItem label="澶囨敞" prop="remarks">
           <Input v-model="addOilForm.remarks" />
@@ -262,6 +278,12 @@
             sortable: true,
           },
           {
+            title: "鍔犳补鍗″彿",
+            key: "addOilCode",
+            width: 100,
+            sortable: true,
+          },
+          {
             title: "鍔犳补鏃ユ湡",
             key: "addDate",
             width: 150,
@@ -424,7 +446,7 @@
           this.loading = false;
           if (res.success) {
             this.data = res.result.records;
-            this.total = res.result.total;
+            this.total = res.result.length;
           }
         });
       },
diff --git a/src/views/your/addOilInfo-manage/addOilInfoManage.less b/src/views/your/addOilInfo-manage/addOilInfoManage.less
new file mode 100644
index 0000000..789f8db
--- /dev/null
+++ b/src/views/your/addOilInfo-manage/addOilInfoManage.less
@@ -0,0 +1,13 @@
+.permModal {
+    .ivu-modal-body {
+        max-height: 560px;
+        overflow: auto;
+    }
+}
+
+.depModal {
+    .ivu-modal-body {
+        max-height: 500px;
+        overflow: auto;
+    }
+}
\ No newline at end of file
diff --git a/src/views/your/addOilInfo-manage/addOilInfoManage.vue b/src/views/your/addOilInfo-manage/addOilInfoManage.vue
new file mode 100644
index 0000000..7f39e8b
--- /dev/null
+++ b/src/views/your/addOilInfo-manage/addOilInfoManage.vue
@@ -0,0 +1,899 @@
+<style lang="less">
+  @import "@/styles/table-common.less";
+  @import "@/styles/drawer-common.less";
+  @import "./addOilInfoManage.less";
+</style>
+<template>
+  <div class="search">
+    <Card>
+      <Row class="operation">
+        <Button @click="init" icon="md-refresh">鍒锋柊</Button>
+        <Button type="dashed" @click="openTip = !openTip">{{
+          openTip ? "鍏抽棴鎻愮ず" : "寮�鍚彁绀�"
+          }}</Button>
+        <Date-picker v-model="value" @on-change="getDataList"
+                     value-format="yyyy-MM-dd" type="daterange" placement="bottom-end" placeholder="璇烽�夋嫨鏃ユ湡" style="width: 240px;padding-left: 20px">
+        </Date-picker>
+        <Dropdown @on-click="handleDropdown" style="padding-left: 20px">
+          <Button>
+            瀵煎嚭鏁版嵁
+            <Icon type="md-arrow-dropdown" />
+          </Button>
+          <DropdownMenu slot="list">
+            <DropdownItem name="exportAll">瀵煎嚭鎵�閫夋棩鏈熸暟鎹�</DropdownItem>
+          </DropdownMenu>
+        </Dropdown>
+      </Row>
+      <Alert show-icon v-show="openTip">
+        宸查�夋嫨
+        <span class="select-count">{{ selectList.length }}</span> 椤�
+        <a class="select-clear" @click="clearSelectAll">娓呯┖</a>
+      </Alert>
+      <Table
+              :loading="loading"
+              border
+              :columns="columns"
+              :data="data"
+              ref="table"
+              sortable="custom"
+              @on-sort-change="changeSort"
+              @on-selection-change="changeSelect"
+      ></Table>
+      <Row type="flex" justify="end" class="page">
+        <Page
+                :current="searchForm.pageNumber"
+                :total="total"
+                :page-size="searchForm.pageSize"
+                @on-change="changePage"
+                @on-page-size-change="changePageSize"
+                :page-size-opts="[10, 20, 50]"
+                size="small"
+                show-total
+                show-elevator
+                show-sizer
+                v-show="this.page"
+        ></Page>
+      </Row>
+    </Card>
+
+    <!-- 缂栬緫 -->
+    <Modal
+            :title="modalTitle"
+            v-model="roleModalVisible"
+            :mask-closable="false"
+            :width="500"
+    >
+    </Modal>
+    <!-- 鑿滃崟鏉冮檺 -->
+    <Drawer
+            :title="modalTitle"
+            v-model="permModalVisible"
+            :mask-closable="false"
+            :width="500"
+            draggable
+    >
+      <div :style="{ maxHeight: maxHeight }" class="drawer-content">
+        <div style="position: relative">
+          <Tree
+                  ref="tree"
+                  :data="permData"
+                  show-checkbox
+                  :render="renderContent"
+                  :check-strictly="true"
+          ></Tree>
+          <Spin size="large" fix v-if="treeLoading"></Spin>
+        </div>
+      </div>
+      <div class="drawer-footer br">
+        <Button
+                type="primary"
+                :loading="submitPermLoading"
+                @click="submitPermEdit"
+        >鎻愪氦</Button
+        >
+        <Button @click="selectTreeAll">鍏ㄩ��/鍙嶉��</Button>
+        <Select
+                v-model="openLevel"
+                @on-change="changeOpen"
+                style="width: 110px"
+                transfer
+        >
+          <Option value="0">灞曞紑鎵�鏈�</Option>
+          <Option value="1">鏀跺悎鎵�鏈�</Option>
+          <Option value="2">浠呭睍寮�涓�绾�</Option>
+          <Option value="3">浠呭睍寮�涓ょ骇</Option>
+        </Select>
+        <Button type="text" @click="cancelPermEdit">鍙栨秷</Button>
+      </div>
+    </Drawer>
+    <!-- 鏁版嵁鏉冮檺 -->
+    <Modal
+            :title="modalTitle"
+            v-model="carModalVisible"
+            :mask-closable="false"
+            :width="500"
+            class="depModal"
+    >
+      <Form :label-width="85" ref="removeForm" :model="removeForm">
+        <FormItem label="绉婚櫎鍘熷洜" prop="removeReason">
+          <Input v-model="removeForm.removeReason"/>
+        </FormItem>
+      </Form>
+      <div v-show="dataType == 1" style="margin-top: 15px">
+        <div style="position: relative">
+          <Tree
+                  ref="depTree"
+                  :data="depData"
+                  :load-data="loadData"
+                  @on-toggle-expand="expandCheckDep"
+                  multiple
+                  style="margin-top: 15px"
+          ></Tree>
+          <Spin size="large" fix v-if="depTreeLoading"></Spin>
+        </div>
+      </div>
+      <div slot="footer">
+        <Button type="text" @click="depModalVisible = false">鍙栨秷</Button>
+        <Button
+                type="primary"
+                :loading="submitDepLoading"
+                @click="submitRemove"
+        >鎻愪氦</Button
+        >
+      </div>
+    </Modal>
+    <Modal
+            v-model="exportModalVisible"
+            :title="exportTitle"
+            :loading="loadingExport"
+            @on-ok="exportCustomData"
+    >
+      <Form ref="exportForm" :label-width="100">
+        <FormItem label="瀵煎嚭鏂囦欢鍚�">
+          <Input v-model="filename" />
+        </FormItem>
+      </Form>
+    </Modal>
+  </div>
+</template>
+
+<script>
+  import {
+    getAllPermissionList,
+    setDefaultRole,
+    editRolePerm,
+    initDepartment,
+    loadDepartment,
+    editRoleDep,
+  } from "@/api/index";
+
+  import {
+    getAll,
+    getAddOilList,
+    addOil,
+    deleteAddOil,
+    getCarList,
+    editCar,
+    deleteCar,
+    getByDate,
+    getOilExcel
+  } from "@/api/open";
+  import util from "@/libs/util.js";
+  import excel from "@/libs/excel.js";
+  import XLSX from 'xlsx';
+  import {exportColumn} from "./exportColumn";
+  export default {
+    name: "car-manage",
+    data() {
+      return {
+        maxHeight: 510,
+        openTip: true,
+        openLevel: "0",
+        loading: true,
+        treeLoading: true,
+        depTreeLoading: true,
+        submitPermLoading: false,
+        submitDepLoading: false,
+        searchKey: "",
+        sortColumn: "createTime",
+        sortType: "desc",
+        modalType: 0,
+        roleModalVisible: false,
+        page: true,
+        carModalVisible: false,
+        exportModalVisible: false,
+        loadingExport: true,
+        permModalVisible: false,
+        depModalVisible: false,
+        modalTitle: "",
+        searchForm: {
+          // 鎼滅储妗嗗垵濮嬪寲瀵硅薄
+          pageNumber: 1, // 褰撳墠椤垫暟
+          pageSize: 10, // 椤甸潰澶у皬
+          sort: "createTime", // 榛樿鎺掑簭瀛楁
+          order: "desc", // 榛樿鎺掑簭鏂瑰紡
+          key: "",
+        },
+        addOilForm: {
+          status : 0
+        },
+        removeForm: {
+          status : 1
+        },
+        addOilFormValidate: {
+          name: [
+            { required: true, message: "瑙掕壊鍚嶇О涓嶈兘涓虹┖", trigger: "change" },
+          ],
+        },
+        submitLoading: false,
+        selectList: [],
+        columns: [
+          {
+            type: "selection",
+            width: 60,
+            align: "center",
+          },
+          {
+            type: "index",
+            width: 60,
+            align: "center",
+          },
+          {
+            title: "杞︾墝鍙�",
+            key: "carNo",
+            width: 100,
+          },
+          {
+            title: "鍔犳补鍗″彿",
+            key: "addOilCode",
+            width: 130,
+            sortable: true,
+            align: "center",
+          },
+          {
+            title: "鍔犳补鏃ユ湡",
+            key: "addDate",
+            width: 120,
+            sortable: true,
+            align: "center",
+          },
+          {
+            title: "鍔犳补閲戦(鍏�)",
+            key: "money",
+            minWidth: 130,
+            sortable: true,
+            align: "center",
+            render: (h, params) => {
+              return h("div",params.row.money==0 ? '':params.row.money);
+            }
+          },
+          {
+            title: "鍔犳补閲�(鍗�)",
+            key: "amount",
+            width: 130,
+            sortable: true,
+            align: "center",
+            render: (h, params) => {
+              return h("div",params.row.amount==0 ? '':params.row.amount);
+            }
+          },
+          {
+            title: "琛屼娇閲岀▼(KM)",
+            key: "mileage",
+            minWidth: 130,
+            sortable: true,
+            align: "center",
+            render: (h, params) => {
+              return h("div",params.row.mileage==0 ? '':params.row.mileage);
+            }
+          },
+          {
+            title: "鐧惧叕閲屾补鑰�(鍗�)",
+            key: "oilWear",
+            minWidth: 150,
+            align: "center",
+            sortable: true,
+          },
+          {
+            title: "澶囨敞",
+            key: "remarks",
+            align: "center",
+            minWidth: 150,
+          },
+        ],
+        data: [],
+        chooseColumns: [],
+        total: 0,
+        permData: [],
+        exportColumns: exportColumn,
+        filename: "鍔犳补鏁版嵁",
+        exportTitle: "纭瀵煎嚭",
+        editRolePermId: "",
+        selectAllFlag: false,
+        depData: [],
+        dataType: 0,
+        editDepartments: [],
+        buyYear:'',
+        carList:[],
+        value:[]
+      };
+    },
+    methods: {
+      change1(e){
+        this.addDate = e;
+      },
+      init() {
+        this.getDataList();
+        // 鑾峰彇鎵�鏈夎彍鍗曟潈闄愭爲
+        this.getPermList();
+        this.getAllCar();
+      },
+      renderContent(h, { root, node, data }) {
+        let icon = "";
+        if (data.level == 0) {
+          icon = "ios-navigate";
+        } else if (data.level == 1) {
+          icon = "md-list-box";
+        } else if (data.level == 2) {
+          icon = "md-list";
+        } else if (data.level == 3) {
+          icon = "md-radio-button-on";
+        } else {
+          icon = "md-radio-button-off";
+        }
+        return h(
+                "span",
+                {
+                  style: {
+                    display: "inline-block",
+                    cursor: "pointer",
+                  },
+                  on: {
+                    click: () => {
+                      if (data.status == -1) {
+                        return;
+                      }
+                      data.checked = !data.checked;
+                    },
+                  },
+                },
+                [
+                  h("span", [
+                    h("Icon", {
+                      props: {
+                        type: icon,
+                        size: "16",
+                      },
+                      style: {
+                        "margin-right": "8px",
+                        "margin-bottom": "3px",
+                      },
+                    }),
+                    h("span", data.title),
+                  ]),
+                ]
+        );
+      },
+      handleDropdown(name) {
+        if (name == "refresh") {
+          this.getDataList();
+        } else if (name == "exportData") {
+          if (this.selectList.length <= 0) {
+            this.$Message.warning("鎮ㄨ繕鏈�夋嫨瑕佸鍑虹殑鏁版嵁");
+            return;
+          }
+          this.exportType = "part";
+          this.exportModalVisible = true;
+          this.exportTitle =
+                  "纭瀵煎嚭鏁版嵁";
+        } else if (name == "exportAll") {
+          this.exportType = "all";
+          this.exportModalVisible = true;
+          this.exportTitle = "纭瀵煎嚭鍏ㄩ儴鏁版嵁";
+          getOilExcel(this.searchForm).then((res) => {
+            if (res.success) {
+              this.exportData = res.result;
+            }
+          });
+        } else if (name == "importData") {
+          this.importModalVisible = true;
+        }
+      },
+      //瀵煎嚭鏁版嵁
+      exportCustomData() {
+        if (this.filename == "") {
+          this.filename = "鍔犳补鏁版嵁";
+        }
+        // 鍒ゆ柇鍕鹃�夊鍑哄垪
+        let exportColumns = [];
+        this.exportColumns.forEach((e) => {
+          exportColumns.push(e);
+        });
+        this.exportModalVisible = false;
+        let title = [];
+        let key = [];
+        exportColumns.forEach((e) => {
+          title.push(e.title);
+          key.push(e.key);
+        });
+        console.log(this.exportData)
+        const params = {
+          title: title,
+          key: key,
+          data: this.exportData,
+          autoWidth: true,
+          filename: this.filename,
+        };
+        this.exportData.forEach((i) => {
+          console.log(i);
+
+          i.amount = i.amount == 0 ? '': i.amount ;
+          i.unitPrice = i.unitPrice == 0 ? '' : i.unitPrice;
+          i.money = i.money == 0 ? '' : i.money;
+          i.mileage = i.mileage == 0 ? '' : i.mileage;
+        });
+        excel.export_array_to_excel(params);
+      },
+      changePage(v) {
+        this.searchForm.pageNumber = v;
+        this.getDataList();
+        this.clearSelectAll();
+      },
+      changePageSize(v) {
+        this.searchForm.pageSize = v;
+        this.getDataList();
+      },
+      changeSort(e) {
+        this.searchForm.sort = e.key;
+        this.searchForm.order = e.order;
+        if (e.order == "normal") {
+          this.searchForm.order = "";
+        }
+        this.getDataList();
+      },
+      selectDate(dateData) {
+        let date = new Date (dateData)
+        let y = date . getFullYear()
+        let m = date . getMonth() + 1
+        m=m<10?('0'+m):m
+        let d = date.getDate()
+        d = d< 10?('0'+ d):d
+        const time = y + '-' + m + '-' + d;
+        return time
+      },
+      getDataList() {
+        this.loading = true;
+        if (this.value[0]!="" && this.value[1]!=""){
+          this.searchForm.beginTime = this.selectDate(this.value[0]);
+          this.searchForm.endTime = this.selectDate(this.value[1]);
+          this.page=false;
+        }else{
+          this.searchForm.beginTime = "";
+          this.searchForm.endTime = "";
+        }
+        getOilExcel(this.searchForm).then((res) => {
+          this.loading = false;
+          if (res.success) {
+            this.data = res.result;
+            this.total = res.result.length;
+          }
+        });
+      },
+      getPermList() {
+        this.treeLoading = true;
+        getAllPermissionList().then((res) => {
+          if (res.success) {
+            this.deleteDisableNode(res.result);
+            this.permData = res.result;
+            this.treeLoading = false;
+          }
+          this.treeLoading = false;
+        });
+      },
+      // 閫掑綊鏍囪绂佺敤鑺傜偣
+      deleteDisableNode(permData) {
+        let that = this;
+        permData.forEach(function (e) {
+          if (e.status == -1) {
+            e.title = "[宸茬鐢╙ " + e.title;
+            e.disabled = true;
+          }
+          if (e.children && e.children.length > 0) {
+            that.deleteDisableNode(e.children);
+          }
+        });
+      },
+      carRole() {
+        this.roleModalVisible = false;
+      },
+      submitAddOil() {
+        this.addOilForm.addDate = this.addDate;
+        this.$refs.addOilForm.validate((valid) => {
+          if (valid) {
+            if (this.modalType == 0) {
+              // 娣诲姞
+              this.submitLoading = true;
+              addOil(this.addOilForm).then((res) => {
+                this.submitLoading = false;
+                if (res.success) {
+                  this.$Message.success("鎿嶄綔鎴愬姛");
+                  this.getDataList();
+                  this.roleModalVisible = false;
+                }
+              });
+            } else {
+              this.submitLoading = true;
+              addOil(this.addOilForm).then((res) => {
+                this.submitLoading = false;
+                if (res.success) {
+                  this.$Message.success("鎿嶄綔鎴愬姛");
+                  this.getDataList();
+                  this.roleModalVisible = false;
+                }
+              });
+            }
+          }
+        });
+      },
+      submitRemove(){
+        this.$refs.removeForm.validate((valid) => {
+          if (valid) {
+            this.submitLoading = true;
+            editCar(this.removeForm).then((res) => {
+              this.submitLoading = false;
+              if (res.success) {
+                this.$Message.success("鎿嶄綔鎴愬姛");
+                this.getDataList();
+                this.carModalVisible = false;
+              }
+            });
+          }
+        });
+      },
+      addOil() {
+        this.modalType = 0;
+        this.modalTitle = "娣诲姞鍔犳补璁板綍";
+        this.$refs.addOilForm.resetFields();
+        delete this.addOilForm.id;
+        this.roleModalVisible = true;
+      },
+      edit(v) {
+        this.getAllCar();
+        this.addDate = v.addDate;
+        this.modalType = 1;
+        this.modalTitle = "缂栬緫鍔犳补淇℃伅";
+        this.$refs.addOilForm.resetFields();
+        // 杞崲null涓�""
+        for (let attr in v) {
+          if (v[attr] == null) {
+            v[attr] = "";
+          }
+        }
+        let str = JSON.stringify(v);
+        let roleInfo = JSON.parse(str);
+
+        this.addOilForm = roleInfo;
+        this.roleModalVisible = true;
+      },
+      removeCar(v) {
+        this.dataType = 0;
+        this.modalTitle = "绉婚櫎杞﹁締";
+        this.$refs.addOilForm.resetFields();
+        // 杞崲null涓�""
+        for (let attr in v) {
+          if (v[attr] == null) {
+            v[attr] = "";
+          }
+        }
+        let str = JSON.stringify(v);
+        let roleInfo = JSON.parse(str);
+        roleInfo.status=1
+        console.log(roleInfo);
+        this.removeForm = roleInfo;
+        this.carModalVisible = true;
+
+      },
+      getAllCar(){
+        getAll().then((res) => {
+          if(res.success){
+            this.carList = res.result;
+            console.log(this.carList);
+          }
+        });
+      },
+      remove(v) {
+        this.$Modal.confirm({
+          title: "纭鍒犻櫎",
+          content: "鎮ㄧ‘璁よ鍒犻櫎鍚� ",
+          loading: true,
+          onOk: () => {
+            deleteAddOil({ ids: v.id }).then((res) => {
+              this.$Modal.remove();
+              if (res.success) {
+                this.clearSelectAll();
+                this.$Message.success("鍒犻櫎鎴愬姛");
+                this.getDataList();
+              }
+            });
+          },
+        });
+      },
+      setDefault(v) {
+        this.loading = true;
+        let params = {
+          id: v.id,
+          isDefault: true,
+        };
+        setDefaultRole(params).then((res) => {
+          this.loading = false;
+          if (res.success) {
+            this.$Message.success("鎿嶄綔鎴愬姛");
+            this.getDataList();
+          }
+        });
+      },
+      cancelDefault(v) {
+        this.loading = true;
+        let params = {
+          id: v.id,
+          isDefault: false,
+        };
+        setDefaultRole(params).then((res) => {
+          this.loading = false;
+          if (res.success) {
+            this.$Message.success("鎿嶄綔鎴愬姛");
+            this.getDataList();
+          }
+        });
+      },
+      clearSelectAll() {
+        this.$refs.table.selectAll(false);
+      },
+      changeSelect(e) {
+        this.selectList = e;
+      },
+      delAll() {
+        if (this.selectList.length <= 0) {
+          this.$Message.warning("鎮ㄨ繕鏈�夋嫨瑕佸垹闄ょ殑鏁版嵁");
+          return;
+        }
+        this.$Modal.confirm({
+          title: "纭鍒犻櫎",
+          content: "鎮ㄧ‘璁よ鍒犻櫎鎵�閫夌殑 " + this.selectList.length + " 鏉℃暟鎹�?",
+          loading: true,
+          onOk: () => {
+            let ids = "";
+            this.selectList.forEach(function (e) {
+              ids += e.id + ",";
+            });
+            ids = ids.substring(0, ids.length - 1);
+            deleteCar({ ids: ids }).then((res) => {
+              this.$Modal.remove();
+              if (res.success) {
+                this.$Message.success("鍒犻櫎鎴愬姛");
+                this.clearSelectAll();
+                this.getDataList();
+              }
+            });
+          },
+        });
+      },
+      editPerm(v) {
+        this.editRolePermId = v.id;
+        this.modalTitle = "鍒嗛厤 " + v.name + " 鐨勮彍鍗曟潈闄�";
+        // 鍖归厤鍕鹃��
+        let rolePerms = v.permissions;
+        if (this.treeLoading) {
+          this.$Message.warning("鑿滃崟鏉冮檺鏁版嵁鍔犺浇涓紝璇风◢鍚庣偣鍑绘煡鐪�");
+          return;
+        }
+        // 閫掑綊鍒ゆ柇瀛愯妭鐐�
+        this.checkPermTree(this.permData, rolePerms);
+        this.permModalVisible = true;
+      },
+      // 閫掑綊鍒ゆ柇瀛愯妭鐐�
+      checkPermTree(permData, rolePerms) {
+        let that = this;
+        permData.forEach(function (p) {
+          if (that.hasPerm(p, rolePerms) && p.status != -1) {
+            p.checked = true;
+          } else {
+            p.checked = false;
+          }
+          if (p.children && p.children.length > 0) {
+            that.checkPermTree(p.children, rolePerms);
+          }
+        });
+      },
+      // 鍒ゆ柇瑙掕壊鎷ユ湁鐨勬潈闄愯妭鐐瑰嬀閫�
+      hasPerm(p, rolePerms) {
+        let flag = false;
+        for (let i = 0; i < rolePerms.length; i++) {
+          if (p.id == rolePerms[i].permissionId) {
+            flag = true;
+            break;
+          }
+        }
+        if (flag) {
+          return true;
+        }
+        return false;
+      },
+      // 鍏ㄩ�夊弽閫�
+      selectTreeAll() {
+        this.selectAllFlag = !this.selectAllFlag;
+        let select = this.selectAllFlag;
+        this.selectedTreeAll(this.permData, select);
+      },
+      // 閫掑綊鍏ㄩ�夎妭鐐�
+      selectedTreeAll(permData, select) {
+        let that = this;
+        permData.forEach(function (e) {
+          e.checked = select;
+          if (e.children && e.children.length > 0) {
+            that.selectedTreeAll(e.children, select);
+          }
+        });
+      },
+      submitPermEdit() {
+        this.submitPermLoading = true;
+        let permIds = "";
+        let selectedNodes = this.$refs.tree.getCheckedNodes();
+        selectedNodes.forEach(function (e) {
+          permIds += e.id + ",";
+        });
+        permIds = permIds.substring(0, permIds.length - 1);
+        editRolePerm({
+          roleId: this.editRolePermId,
+          permIds: permIds,
+        }).then((res) => {
+          this.submitPermLoading = false;
+          if (res.success) {
+            this.$Message.success("鎿嶄綔鎴愬姛");
+            // 鏍囪閲嶆柊鑾峰彇鑿滃崟鏁版嵁
+            this.$store.commit("setAdded", false);
+            util.initRouter(this);
+            this.getDataList();
+            this.permModalVisible = false;
+          }
+        });
+      },
+      cancelPermEdit() {
+        this.permModalVisible = false;
+      },
+      loadData(item, callback) {
+        loadDepartment(item.id, { openDataFilter: false }).then((res) => {
+          if (res.success) {
+            res.result.forEach(function (e) {
+              e.selected = false;
+              if (e.isParent) {
+                e.loading = false;
+                e.children = [];
+              }
+              if (e.status == -1) {
+                e.title = "[宸茬鐢╙ " + e.title;
+                e.disabled = true;
+              }
+            });
+            callback(res.result);
+          }
+        });
+      },
+      expandCheckDep(v) {
+        // 鍒ゆ柇灞曞紑瀛愯妭鐐�
+        this.checkDepTree(v.children, this.editDepartments);
+      },
+      // 鍒ゆ柇瀛愯妭鐐�
+      checkDepTree(depData, roleDepIds) {
+        let that = this;
+        depData.forEach(function (p) {
+          if (that.hasDepPerm(p, roleDepIds)) {
+            p.selected = true;
+          } else {
+            p.selected = false;
+          }
+        });
+      },
+      // 鍒ゆ柇瑙掕壊鎷ユ湁鐨勬潈闄愯妭鐐瑰嬀閫�
+      hasDepPerm(p, roleDepIds) {
+        let flag = false;
+        for (let i = 0; i < roleDepIds.length; i++) {
+          if (p.id == roleDepIds[i].departmentId) {
+            flag = true;
+            break;
+          }
+        }
+        if (flag) {
+          return true;
+        }
+        return false;
+      },
+      submitDepEdit() {
+        let depIds = "";
+        if (this.dataType == 1) {
+          let selectedNodes = this.$refs.depTree.getSelectedNodes();
+          selectedNodes.forEach(function (e) {
+            depIds += e.id + ",";
+          });
+          depIds = depIds.substring(0, depIds.length - 1);
+        }
+        this.submitDepLoading = true;
+        editRoleDep({
+          roleId: this.editRolePermId,
+          dataType: this.dataType,
+          depIds: depIds,
+        }).then((res) => {
+          this.submitDepLoading = false;
+          if (res.success) {
+            this.$Message.success("鎿嶄綔鎴愬姛");
+            this.getDataList();
+            this.depModalVisible = false;
+          }
+        });
+      },
+      changeOpen(v) {
+        if (v == "0") {
+          this.permData.forEach((e) => {
+            e.expand = true;
+            if (e.children && e.children.length > 0) {
+              e.children.forEach((c) => {
+                c.expand = true;
+                if (c.children && c.children.length > 0) {
+                  c.children.forEach(function (b) {
+                    b.expand = true;
+                  });
+                }
+              });
+            }
+          });
+        } else if (v == "1") {
+          this.permData.forEach((e) => {
+            e.expand = false;
+            if (e.children && e.children.length > 0) {
+              e.children.forEach((c) => {
+                c.expand = false;
+                if (c.children && c.children.length > 0) {
+                  c.children.forEach(function (b) {
+                    b.expand = false;
+                  });
+                }
+              });
+            }
+          });
+        } else if (v == "2") {
+          this.permData.forEach((e) => {
+            e.expand = true;
+            if (e.children && e.children.length > 0) {
+              e.children.forEach((c) => {
+                c.expand = false;
+                if (c.children && c.children.length > 0) {
+                  c.children.forEach(function (b) {
+                    b.expand = false;
+                  });
+                }
+              });
+            }
+          });
+        } else if (v == "3") {
+          this.permData.forEach((e) => {
+            e.expand = true;
+            if (e.children && e.children.length > 0) {
+              e.children.forEach((c) => {
+                c.expand = true;
+                if (c.children && c.children.length > 0) {
+                  c.children.forEach(function (b) {
+                    b.expand = false;
+                  });
+                }
+              });
+            }
+          });
+        }
+      },
+    },
+    mounted() {
+      this.maxHeight = Number(document.documentElement.clientHeight - 121) + "px";
+      this.init();
+    },
+  };
+</script>
\ No newline at end of file
diff --git a/src/views/your/addOilInfo-manage/exportColumn.js b/src/views/your/addOilInfo-manage/exportColumn.js
new file mode 100644
index 0000000..c64f701
--- /dev/null
+++ b/src/views/your/addOilInfo-manage/exportColumn.js
@@ -0,0 +1,56 @@
+export const exportColumn = [
+  {
+    title: "杞︾墝鍙�",
+    key: "carNo",
+    width: 100,
+    align: "center",
+  },
+  {
+    title: "鍔犳补鍗″彿",
+    key: "addOilCode",
+    width: 140,
+    sortable: true,
+    align: "center",
+  },
+  {
+    title: "鍔犳补鏃ユ湡",
+    key: "addDate",
+    width: 150,
+    sortable: true,
+    align: "center",
+  },
+  {
+    title: "鍔犳补閲戦(鍏�)",
+    key: "money",
+    minWidth: 100,
+    sortable: true,
+    align: "center",
+  },
+  {
+    title: "鍔犳补閲�(鍗�)",
+    key: "amount",
+    width: 130,
+    sortable: true,
+    align: "center",
+  },
+  {
+    title: "琛屼娇閲岀▼(KM)",
+    key: "mileage",
+    minWidth: 100,
+    sortable: true,
+    align: "center",
+  },
+  {
+    title: "鐧惧叕閲屾补鑰�(鍗�)",
+    key: "oilWear",
+    minWidth: 100,
+    sortable: true,
+    align: "center",
+  },
+  {
+    title: "澶囨敞",
+    key: "remarks",
+    minWidth: 150,
+    align: "center",
+  },
+]
\ No newline at end of file
diff --git a/src/views/your/area-manage/areaManage.vue b/src/views/your/area-manage/areaManage.vue
index d9c42b1..8b49c36 100644
--- a/src/views/your/area-manage/areaManage.vue
+++ b/src/views/your/area-manage/areaManage.vue
@@ -89,7 +89,7 @@
 
 
       </Table>
-    </Modal>05
+    </Modal>
     <Modal :title="modalTitle3" v-model="customerVisible" :mask-closable="false" :width="1050">
       <Row class="operation" style="padding-bottom: 20px">
         <Button @click="addCustomer" type="primary" icon="md-add">娣诲姞</Button>
@@ -135,22 +135,36 @@
         <FormItem label="鍟嗘埛缂栧彿" prop="code">
           <Input v-model="customerForm.code" />
         </FormItem>
-        <FormItem label="鑱旂郴鏂瑰紡" prop="phone">
-          <Input v-model="customerForm.phone" />
-        </FormItem>
-        <FormItem label="缁忓害" prop="lng">
-          <Input v-model="customerForm.lng" />
-        </FormItem>
-        <FormItem label="绾害" prop="lat">
-          <Input v-model="customerForm.lat" />
-        </FormItem>
-        <Form-item label="涓婃閰嶉�佹棩鏈�" prop="lastTime">
-          <Row>
-            <Col>
-              <Date-picker @on-change="change1" type="date" value="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" v-model="customerForm.lastTime"></Date-picker>
-            </Col>
-          </Row>
-        </Form-item>
+
+        <Row :gutter="0">
+          <Col span="12">
+            <FormItem label="缁忓害" prop="lng">
+              <Input v-model="customerForm.lng" />
+            </FormItem>
+          </Col>
+          <Col span="12">
+            <FormItem label="绾害" prop="lat">
+              <Input v-model="customerForm.lat" />
+            </FormItem>
+          </Col>
+        </Row>
+        <Row :gutter="0">
+          <Col span="12">
+            <Form-item label="涓婃閰嶉�佹棩鏈�" prop="lastTime">
+              <Row>
+                <Col>
+                  <Date-picker @on-change="change1" type="date" value="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" v-model="customerForm.lastTime"></Date-picker>
+                </Col>
+              </Row>
+            </Form-item>
+          </Col>
+          <Col span="12">
+            <FormItem label="鑱旂郴鏂瑰紡" prop="phone">
+              <Input v-model="customerForm.phone" type="number"/>
+            </FormItem>
+          </Col>
+        </Row>
+
         <FormItem label="鍟嗘埛娉ㄥ唽鍦板潃" prop="registeredAddress">
           <Input v-model="customerForm.registeredAddress" />
         </FormItem>
diff --git a/src/views/your/car-manage/carManage.vue b/src/views/your/car-manage/carManage.vue
index 6df3551..6c89acb 100644
--- a/src/views/your/car-manage/carManage.vue
+++ b/src/views/your/car-manage/carManage.vue
@@ -8,7 +8,6 @@
     <Card>
       <Row class="operation">
         <Button @click="addCar" type="primary" icon="md-add">娣诲姞杞﹁締</Button>
-        <Button @click="delAll" icon="md-trash">鎵归噺鍒犻櫎</Button>
         <Button @click="init" icon="md-refresh">鍒锋柊</Button>
         <Button type="dashed" @click="openTip = !openTip">{{
           openTip ? "鍏抽棴鎻愮ず" : "寮�鍚彁绀�"
diff --git a/src/views/your/carInfo-manage/carInfoManage.less b/src/views/your/carInfo-manage/carInfoManage.less
new file mode 100644
index 0000000..789f8db
--- /dev/null
+++ b/src/views/your/carInfo-manage/carInfoManage.less
@@ -0,0 +1,13 @@
+.permModal {
+    .ivu-modal-body {
+        max-height: 560px;
+        overflow: auto;
+    }
+}
+
+.depModal {
+    .ivu-modal-body {
+        max-height: 500px;
+        overflow: auto;
+    }
+}
\ No newline at end of file
diff --git a/src/views/your/carInfo-manage/carInfoManage.vue b/src/views/your/carInfo-manage/carInfoManage.vue
new file mode 100644
index 0000000..217e4b9
--- /dev/null
+++ b/src/views/your/carInfo-manage/carInfoManage.vue
@@ -0,0 +1,964 @@
+<style lang="less">
+  @import "@/styles/table-common.less";
+  @import "@/styles/drawer-common.less";
+  @import "src/views/your/carInfo-manage/carInfoManage.less";
+</style>
+<template>
+  <div class="search">
+    <Card>
+      <Row class="operation">
+        <Button @click="init" icon="md-refresh">鍒锋柊</Button>
+        <Button type="dashed" @click="openTip = !openTip">{{
+          openTip ? "鍏抽棴鎻愮ず" : "寮�鍚彁绀�"
+          }}</Button>
+
+          <Date-picker v-model="value" @on-change="getDataList"
+                       value-format="yyyy-MM-dd" type="daterange" placement="bottom-end" placeholder="璇烽�夋嫨鏃ユ湡" style="width: 240px;padding-left: 20px">
+          </Date-picker>
+        <Dropdown @on-click="handleDropdown" style="padding-left: 20px">
+          <Button>
+            瀵煎嚭鏁版嵁
+            <Icon type="md-arrow-dropdown" />
+          </Button>
+          <DropdownMenu slot="list">
+            <DropdownItem name="exportData">瀵煎嚭鎵�閫夋暟鎹�</DropdownItem>
+            <DropdownItem name="exportAll">瀵煎嚭鍏ㄩ儴鏁版嵁</DropdownItem>
+          </DropdownMenu>
+        </Dropdown>
+      </Row>
+
+      <Alert show-icon v-show="openTip">
+        宸查�夋嫨
+        <span class="select-count">{{ selectList.length }}</span> 椤�
+        <a class="select-clear" @click="clearSelectAll">娓呯┖</a>
+      </Alert>
+      <Table
+              :loading="loading"
+              border
+              :columns="columns"
+              :data="data"
+              ref="table"
+              sortable="custom"
+              @on-sort-change="changeSort"
+              @on-selection-change="changeSelect"
+      ></Table>
+      <Row type="flex" justify="end" class="page">
+        <Page
+                :current="searchForm.pageNumber"
+                :total="total"
+                :page-size="searchForm.pageSize"
+                @on-change="changePage"
+                @on-page-size-change="changePageSize"
+                :page-size-opts="[10, 20, 50]"
+                size="small"
+                show-total
+                show-elevator
+                show-sizer
+        ></Page>
+      </Row>
+    </Card>
+
+    <!-- 缂栬緫 -->
+    <Modal
+            :title="modalTitle"
+            v-model="roleModalVisible"
+            :mask-closable="false"
+            :width="500"
+    >
+      <div slot="footer">
+        <Button type="text" @click="carRole">鍙栨秷</Button>
+        <Button type="primary" :loading="submitLoading" @click="submitAddOil"
+        >鎻愪氦</Button
+        >
+      </div>
+    </Modal>
+    <!-- 鑷畾涔夊鍑烘暟鎹� -->
+    <Modal
+            v-model="exportModalVisible"
+            :title="exportTitle"
+            :loading="loadingExport"
+            @on-ok="exportCustomData"
+    >
+      <Form ref="exportForm" :label-width="100">
+        <FormItem label="瀵煎嚭鏂囦欢鍚�">
+          <Input v-model="filename" />
+        </FormItem>
+      </Form>
+    </Modal>
+    <!-- 鑿滃崟鏉冮檺 -->
+    <Drawer
+            :title="modalTitle"
+            v-model="permModalVisible"
+            :mask-closable="false"
+            :width="500"
+            draggable
+    >
+      <div :style="{ maxHeight: maxHeight }" class="drawer-content">
+        <div style="position: relative">
+          <Tree
+                  ref="tree"
+                  :data="permData"
+                  show-checkbox
+                  :render="renderContent"
+                  :check-strictly="true"
+          ></Tree>
+          <Spin size="large" fix v-if="treeLoading"></Spin>
+        </div>
+      </div>
+      <div class="drawer-footer br">
+        <Button
+                type="primary"
+                :loading="submitPermLoading"
+                @click="submitPermEdit"
+        >鎻愪氦</Button
+        >
+        <Button @click="selectTreeAll">鍏ㄩ��/鍙嶉��</Button>
+        <Select
+                v-model="openLevel"
+                @on-change="changeOpen"
+                style="width: 110px"
+                transfer
+        >
+          <Option value="0">灞曞紑鎵�鏈�</Option>
+          <Option value="1">鏀跺悎鎵�鏈�</Option>
+          <Option value="2">浠呭睍寮�涓�绾�</Option>
+          <Option value="3">浠呭睍寮�涓ょ骇</Option>
+        </Select>
+        <Button type="text" @click="cancelPermEdit">鍙栨秷</Button>
+      </div>
+    </Drawer>
+    <!-- 鏁版嵁鏉冮檺 -->
+    <Modal
+            :title="modalTitle"
+            v-model="carModalVisible"
+            :mask-closable="false"
+            :width="500"
+            class="depModal"
+    >
+      <Form :label-width="85" ref="removeForm" :model="removeForm">
+        <FormItem label="绉婚櫎鍘熷洜" prop="removeReason">
+          <Input v-model="removeForm.removeReason"/>
+        </FormItem>
+      </Form>
+      <div v-show="dataType == 1" style="margin-top: 15px">
+        <div style="position: relative">
+          <Tree
+                  ref="depTree"
+                  :data="depData"
+                  :load-data="loadData"
+                  @on-toggle-expand="expandCheckDep"
+                  multiple
+                  style="margin-top: 15px"
+          ></Tree>
+          <Spin size="large" fix v-if="depTreeLoading"></Spin>
+        </div>
+      </div>
+      <div slot="footer">
+        <Button type="text" @click="depModalVisible = false">鍙栨秷</Button>
+        <Button
+                type="primary"
+                :loading="submitDepLoading"
+                @click="submitRemove"
+        >鎻愪氦</Button
+        >
+      </div>
+    </Modal>
+  </div>
+</template>
+
+<script>
+  import {
+    getAllPermissionList,
+    setDefaultRole,
+    editRolePerm,
+    initDepartment,
+    loadDepartment,
+    editRoleDep,
+  } from "@/api/index";
+
+  import {
+    getAll,
+    getAddOilList,
+    addOil,
+    deleteAddOil,
+    getCarList,
+    editCar,
+    deleteCar,
+    getCar,
+    getSuggest,
+    deleteSuggest,
+  } from "@/api/open";
+  import util from "@/libs/util.js";
+  import excel from "@/libs/excel.js";
+  import {exportColumn} from "./exportColumn";
+  export default {
+    name: "car-manage",
+    data() {
+      return {
+        maxHeight: 510,
+        openTip: true,
+        openLevel: "0",
+        loading: true,
+        treeLoading: true,
+        depTreeLoading: true,
+        submitPermLoading: false,
+        submitDepLoading: false,
+        searchKey: "",
+        sortColumn: "createTime",
+        sortType: "desc",
+        modalType: 0,
+        loadingExport: true,
+        roleModalVisible: false,
+        exportModalVisible: false,
+        carModalVisible: false,
+        permModalVisible: false,
+        depModalVisible: false,
+        modalTitle: "",
+        searchForm: {
+          // 鎼滅储妗嗗垵濮嬪寲瀵硅薄
+          pageNumber: 1, // 褰撳墠椤垫暟
+          pageSize: 10, // 椤甸潰澶у皬
+          sort: "createTime", // 榛樿鎺掑簭瀛楁
+          order: "desc", // 榛樿鎺掑簭鏂瑰紡
+          key: "",
+        },
+        addOilForm: {
+          status : 0
+        },
+        removeForm: {
+          status : 1
+        },
+        addOilFormValidate: {
+          name: [
+            { required: true, message: "瑙掕壊鍚嶇О涓嶈兘涓虹┖", trigger: "change" },
+          ],
+        },
+        submitLoading: false,
+        selectList: [],
+        columns: [
+          {
+            type: "selection",
+            width: 60,
+            align: "center",
+          },
+          {
+            type: "index",
+            width: 60,
+            align: "center",
+          },
+          {
+            title: "閫佽揣绾胯矾",
+            key: "areaName",
+            width: 130,
+            render: (h, params) => {
+              return h("div",params.row.car.areaName);
+            }
+          },
+          {
+            title: "杞︾墝鍙�",
+            key: "carNo",
+            width: 120,
+            render: (h, params) => {
+              return h("div",params.row.car.carNo);
+            }
+          },
+          {
+            title: "鍔犳补鍗″彿",
+            key: "addOilCode",
+            width: 140,
+            sortable: true,
+            render: (h, params) => {
+              return h("div",params.row.car.addOilCode);
+            }
+          },
+          {
+            title: "璧峰閲岀▼(鍏噷)",
+            key: "beginMileage",
+            width: 140,
+          },
+          {
+            title: "鏈熸湯閲岀▼(鍏噷)",
+            key: "endMileage",
+            width: 140,
+          },
+          {
+            title: "鏈堣椹堕噷绋�(鍏噷)",
+            key: "mileage",
+            width: 150,
+            render: (h, params) => {
+              return h("div",params.row.endMileage-params.row.beginMileage);
+            }
+          },
+          {
+            title: "鏈堟补鑰�(鍗�)",
+            key: "oilWear",
+            width: 130,
+          },
+          {
+            title: "鐧惧叕閲屾补鑰�",
+            key: "oil",
+            width: 130,
+            render: (h, params) => {
+              var mileage = params.row.endMileage-params.row.beginMileage;
+              if (mileage==0 || params.row.oilWear==0){
+                return h("div","0");
+              }else {
+                return h("div",(parseFloat(params.row.oilWear/mileage*100).toFixed(2)));
+              }
+            }
+          },
+          {
+            title: "椹鹃┒鍛�",
+            key: "nickname",
+            width: 120,
+            render: (h, params) => {
+              return h("div",params.row.car.nickName);
+            }
+          },
+          {
+            title: "鏈堝姞娌归噾棰�(鍏�)",
+            key: "money",
+            width: 140,
+          },
+          {
+            title: "鎿嶄綔",
+            key: "action",
+            align: "center",
+            width: 120,
+            render: (h, params) => {
+              return h("div", [
+                h(
+                  "a",
+                  {
+                    on: {
+                      click: () => {
+                        this.remove(params.row);
+                      },
+                    },
+                  },
+                  "鍒犻櫎"
+                ),
+              ]);
+            },
+          },
+        ],
+        data: [],
+        chooseColumns: [],
+        total: 0,
+        permData: [],
+        exportColumns: exportColumn,
+        filename: "杞﹁締鏁版嵁",
+        exportTitle: "纭瀵煎嚭",
+        editRolePermId: "",
+        selectAllFlag: false,
+        depData: [],
+        dataType: 0,
+        editDepartments: [],
+        buyYear:'',
+        carList:[],
+        value:[],
+        exportData: [],
+      };
+    },
+    methods: {
+      change1(e){
+        this.addDate = e;
+      },
+      init() {
+        this.getDataList();
+        // 鑾峰彇鎵�鏈夎彍鍗曟潈闄愭爲
+        this.getPermList();
+        // 鍒濆鍖栧鍑哄垪鏁版嵁
+        let array = [];
+        this.exportColumns.forEach((e) => {
+          // 鎸囧畾鍒楅檺鍒舵潈闄�
+          if (
+                  !this.getStore("roles").includes("ROLE_ADMIN") &&
+                  e.key == "mobile"
+          ) {
+            e.title = "[鏃犳潈瀵煎嚭] " + e.title;
+            e.disabled = true;
+          } else {
+            e.disabled = false;
+          }
+          array.push(e.title);
+        });
+        this.chooseColumns = array;
+      },
+      renderContent(h, { root, node, data }) {
+        let icon = "";
+        if (data.level == 0) {
+          icon = "ios-navigate";
+        } else if (data.level == 1) {
+          icon = "md-list-box";
+        } else if (data.level == 2) {
+          icon = "md-list";
+        } else if (data.level == 3) {
+          icon = "md-radio-button-on";
+        } else {
+          icon = "md-radio-button-off";
+        }
+        return h(
+                "span",
+                {
+                  style: {
+                    display: "inline-block",
+                    cursor: "pointer",
+                  },
+                  on: {
+                    click: () => {
+                      if (data.status == -1) {
+                        return;
+                      }
+                      data.checked = !data.checked;
+                    },
+                  },
+                },
+                [
+                  h("span", [
+                    h("Icon", {
+                      props: {
+                        type: icon,
+                        size: "16",
+                      },
+                      style: {
+                        "margin-right": "8px",
+                        "margin-bottom": "3px",
+                      },
+                    }),
+                    h("span", data.title),
+                  ]),
+                ]
+        );
+      },
+      changePage(v) {
+        this.searchForm.pageNumber = v;
+        this.getDataList();
+        this.clearSelectAll();
+      },
+      changePageSize(v) {
+        this.searchForm.pageSize = v;
+        this.getDataList();
+      },
+      changeSort(e) {
+        this.searchForm.sort = e.key;
+        this.searchForm.order = e.order;
+        if (e.order == "normal") {
+          this.searchForm.order = "";
+        }
+        this.getDataList();
+      },
+      getDataList() {
+        this.loading = true;
+        if (this.value[0]!="" && this.value[1]!=""){
+          this.searchForm.beginTime = this.selectDate(this.value[0]);
+          this.searchForm.endTime = this.selectDate(this.value[1]);
+        }else{
+          this.searchForm.beginTime = "";
+          this.searchForm.endTime = "";
+        }
+        getCar(this.searchForm).then((res) => {
+          this.loading = false;
+          if (res.success) {
+            this.data = res.result;
+            this.total = res.result.length;
+          }
+        });
+      },
+      selectDate(dateData) {
+        let date = new Date (dateData)
+        let y = date . getFullYear()
+        let m = date . getMonth() + 1
+        m=m<10?('0'+m):m
+        let d = date.getDate()
+        d = d< 10?('0'+ d):d
+        const time = y + '-' + m + '-' + d;
+        return time
+      },
+        getPermList() {
+        this.treeLoading = true;
+        getAllPermissionList().then((res) => {
+          if (res.success) {
+            this.deleteDisableNode(res.result);
+            this.permData = res.result;
+            this.treeLoading = false;
+          }
+          this.treeLoading = false;
+        });
+      },
+      // 閫掑綊鏍囪绂佺敤鑺傜偣
+      deleteDisableNode(permData) {
+        let that = this;
+        permData.forEach(function (e) {
+          if (e.status == -1) {
+            e.title = "[宸茬鐢╙ " + e.title;
+            e.disabled = true;
+          }
+          if (e.children && e.children.length > 0) {
+            that.deleteDisableNode(e.children);
+          }
+        });
+      },
+      carRole() {
+        this.roleModalVisible = false;
+      },
+      submitAddOil() {
+        this.addOilForm.addDate = this.addDate;
+        this.$refs.addOilForm.validate((valid) => {
+          if (valid) {
+            if (this.modalType == 0) {
+              // 娣诲姞
+              this.submitLoading = true;
+              addOil(this.addOilForm).then((res) => {
+                this.submitLoading = false;
+                if (res.success) {
+                  this.$Message.success("鎿嶄綔鎴愬姛");
+                  this.getDataList();
+                  this.roleModalVisible = false;
+                }
+              });
+            } else {
+              this.submitLoading = true;
+              addOil(this.addOilForm).then((res) => {
+                this.submitLoading = false;
+                if (res.success) {
+                  this.$Message.success("鎿嶄綔鎴愬姛");
+                  this.getDataList();
+                  this.roleModalVisible = false;
+                }
+              });
+            }
+          }
+        });
+      },
+      handleDropdown(name) {
+        if (name == "refresh") {
+          this.getDataList();
+        } else if (name == "exportData") {
+          if (this.selectList.length <= 0) {
+            this.$Message.warning("鎮ㄨ繕鏈�夋嫨瑕佸鍑虹殑鏁版嵁");
+            return;
+          }
+          this.exportType = "part";
+          this.exportModalVisible = true;
+          this.exportTitle =
+                  "纭瀵煎嚭 " + this.selectList.length + " 鏉℃暟鎹�";
+        } else if (name == "exportAll") {
+          this.exportType = "all";
+          this.exportModalVisible = true;
+          this.exportTitle = "纭瀵煎嚭鍏ㄩ儴 " + this.total + " 鏉℃暟鎹�";
+          getCar().then((res) => {
+            if (res.success) {
+              this.exportData = this.data;
+            }
+          });
+        } else if (name == "importData") {
+          this.importModalVisible = true;
+        }
+      },
+      //瀵煎嚭鏁版嵁
+      exportCustomData() {
+        if (this.filename == "") {
+          this.filename = "杞﹁締鏁版嵁";
+        }
+        // 鍒ゆ柇鍕鹃�夊鍑哄垪
+        let exportColumns = [];
+        this.exportColumns.forEach((e) => {
+              exportColumns.push(e);
+        });
+        this.exportModalVisible = false;
+        let title = [];
+        let key = [];
+        exportColumns.forEach((e) => {
+          title.push(e.title);
+          key.push(e.key);
+        });
+
+
+        console.log(this.exportData)
+        const params = {
+          title: title,
+          key: key,
+          data: this.exportData,
+          autoWidth: true,
+          filename: this.filename,
+        };
+        this.exportData.forEach((i) => {
+          i.areaName = i.car.areaName;
+          i.carNo = i.car.carNo;
+          i.addOilCode = i.car.addOilCode;
+          i.oil = i.car.oil;
+          i.nickName = i.car.nickName;
+          i.mileage=i.endMileage-i.beginMileage;
+          if (i.oilWear!=0 && i.mileage!=0){
+            i.oil=parseFloat((i.oilWear/i.mileage*100).toFixed(2));
+          }else {
+            i.oil=0
+          }
+        });
+        excel.export_array_to_excel(params);
+      },
+      submitRemove(){
+        this.$refs.removeForm.validate((valid) => {
+          if (valid) {
+            this.submitLoading = true;
+            editCar(this.removeForm).then((res) => {
+              this.submitLoading = false;
+              if (res.success) {
+                this.$Message.success("鎿嶄綔鎴愬姛");
+                this.getDataList();
+                this.carModalVisible = false;
+              }
+            });
+          }
+        });
+      },
+      addOil() {
+        this.getAllCar();
+        this.modalType = 0;
+        this.modalTitle = "娣诲姞鍔犳补璁板綍";
+        this.$refs.addOilForm.resetFields();
+        delete this.addOilForm.id;
+        this.roleModalVisible = true;
+      },
+      edit(v) {
+        this.getAllCar();
+        this.addDate = v.addDate;
+        this.modalType = 1;
+        this.modalTitle = "缂栬緫鍔犳补淇℃伅";
+        this.$refs.addOilForm.resetFields();
+        // 杞崲null涓�""
+        for (let attr in v) {
+          if (v[attr] == null) {
+            v[attr] = "";
+          }
+        }
+        let str = JSON.stringify(v);
+        let roleInfo = JSON.parse(str);
+
+        this.addOilForm = roleInfo;
+        this.roleModalVisible = true;
+      },
+      removeCar(v) {
+        this.dataType = 0;
+        this.modalTitle = "绉婚櫎杞﹁締";
+        this.$refs.addOilForm.resetFields();
+        // 杞崲null涓�""
+        for (let attr in v) {
+          if (v[attr] == null) {
+            v[attr] = "";
+          }
+        }
+        let str = JSON.stringify(v);
+        let roleInfo = JSON.parse(str);
+        roleInfo.status=1
+        this.removeForm = roleInfo;
+        this.carModalVisible = true;
+
+      },
+      getAllCar(){
+        getAll().then((res) => {
+          if(res.success){
+            this.carList = res.result;
+            console.log(this.carList);
+          }
+        });
+      },
+      remove(v) {
+        this.$Modal.confirm({
+          title: "纭鍒犻櫎",
+          content: "鎮ㄧ‘璁よ鍒犻櫎鍚� ",
+          loading: true,
+          onOk: () => {
+            deleteSuggest({ ids: v.id }).then((res) => {
+              this.$Modal.remove();
+              if (res.success) {
+                this.clearSelectAll();
+                this.$Message.success("鍒犻櫎鎴愬姛");
+                this.getDataList();
+              }
+            });
+          },
+        });
+      },
+      setDefault(v) {
+        this.loading = true;
+        let params = {
+          id: v.id,
+          isDefault: true,
+        };
+        setDefaultRole(params).then((res) => {
+          this.loading = false;
+          if (res.success) {
+            this.$Message.success("鎿嶄綔鎴愬姛");
+            this.getDataList();
+          }
+        });
+      },
+      cancelDefault(v) {
+        this.loading = true;
+        let params = {
+          id: v.id,
+          isDefault: false,
+        };
+        setDefaultRole(params).then((res) => {
+          this.loading = false;
+          if (res.success) {
+            this.$Message.success("鎿嶄綔鎴愬姛");
+            this.getDataList();
+          }
+        });
+      },
+      clearSelectAll() {
+        this.$refs.table.selectAll(false);
+      },
+
+      changeSelect(e) {
+        this.exportData = e;
+        this.selectList = e;
+      },
+      delAll() {
+        if (this.selectList.length <= 0) {
+          this.$Message.warning("鎮ㄨ繕鏈�夋嫨瑕佸垹闄ょ殑鏁版嵁");
+          return;
+        }
+        this.$Modal.confirm({
+          title: "纭鍒犻櫎",
+          content: "鎮ㄧ‘璁よ鍒犻櫎鎵�閫夌殑 " + this.selectList.length + " 鏉℃暟鎹�?",
+          loading: true,
+          onOk: () => {
+            let ids = "";
+            this.selectList.forEach(function (e) {
+              ids += e.id + ",";
+            });
+            ids = ids.substring(0, ids.length - 1);
+            deleteCar({ ids: ids }).then((res) => {
+              this.$Modal.remove();
+              if (res.success) {
+                this.$Message.success("鍒犻櫎鎴愬姛");
+                this.clearSelectAll();
+                this.getDataList();
+              }
+            });
+          },
+        });
+      },
+      editPerm(v) {
+        this.editRolePermId = v.id;
+        this.modalTitle = "鍒嗛厤 " + v.name + " 鐨勮彍鍗曟潈闄�";
+        // 鍖归厤鍕鹃��
+        let rolePerms = v.permissions;
+        if (this.treeLoading) {
+          this.$Message.warning("鑿滃崟鏉冮檺鏁版嵁鍔犺浇涓紝璇风◢鍚庣偣鍑绘煡鐪�");
+          return;
+        }
+        // 閫掑綊鍒ゆ柇瀛愯妭鐐�
+        this.checkPermTree(this.permData, rolePerms);
+        this.permModalVisible = true;
+      },
+      // 閫掑綊鍒ゆ柇瀛愯妭鐐�
+      checkPermTree(permData, rolePerms) {
+        let that = this;
+        permData.forEach(function (p) {
+          if (that.hasPerm(p, rolePerms) && p.status != -1) {
+            p.checked = true;
+          } else {
+            p.checked = false;
+          }
+          if (p.children && p.children.length > 0) {
+            that.checkPermTree(p.children, rolePerms);
+          }
+        });
+      },
+      // 鍒ゆ柇瑙掕壊鎷ユ湁鐨勬潈闄愯妭鐐瑰嬀閫�
+      hasPerm(p, rolePerms) {
+        let flag = false;
+        for (let i = 0; i < rolePerms.length; i++) {
+          if (p.id == rolePerms[i].permissionId) {
+            flag = true;
+            break;
+          }
+        }
+        if (flag) {
+          return true;
+        }
+        return false;
+      },
+      // 鍏ㄩ�夊弽閫�
+      selectTreeAll() {
+        this.selectAllFlag = !this.selectAllFlag;
+        let select = this.selectAllFlag;
+        this.selectedTreeAll(this.permData, select);
+      },
+      // 閫掑綊鍏ㄩ�夎妭鐐�
+      selectedTreeAll(permData, select) {
+        let that = this;
+        permData.forEach(function (e) {
+          e.checked = select;
+          if (e.children && e.children.length > 0) {
+            that.selectedTreeAll(e.children, select);
+          }
+        });
+      },
+      submitPermEdit() {
+        this.submitPermLoading = true;
+        let permIds = "";
+        let selectedNodes = this.$refs.tree.getCheckedNodes();
+        selectedNodes.forEach(function (e) {
+          permIds += e.id + ",";
+        });
+        permIds = permIds.substring(0, permIds.length - 1);
+        editRolePerm({
+          roleId: this.editRolePermId,
+          permIds: permIds,
+        }).then((res) => {
+          this.submitPermLoading = false;
+          if (res.success) {
+            this.$Message.success("鎿嶄綔鎴愬姛");
+            // 鏍囪閲嶆柊鑾峰彇鑿滃崟鏁版嵁
+            this.$store.commit("setAdded", false);
+            util.initRouter(this);
+            this.getDataList();
+            this.permModalVisible = false;
+          }
+        });
+      },
+      cancelPermEdit() {
+        this.permModalVisible = false;
+      },
+      loadData(item, callback) {
+        loadDepartment(item.id, { openDataFilter: false }).then((res) => {
+          if (res.success) {
+            res.result.forEach(function (e) {
+              e.selected = false;
+              if (e.isParent) {
+                e.loading = false;
+                e.children = [];
+              }
+              if (e.status == -1) {
+                e.title = "[宸茬鐢╙ " + e.title;
+                e.disabled = true;
+              }
+            });
+            callback(res.result);
+          }
+        });
+      },
+      expandCheckDep(v) {
+        // 鍒ゆ柇灞曞紑瀛愯妭鐐�
+        this.checkDepTree(v.children, this.editDepartments);
+      },
+      // 鍒ゆ柇瀛愯妭鐐�
+      checkDepTree(depData, roleDepIds) {
+        let that = this;
+        depData.forEach(function (p) {
+          if (that.hasDepPerm(p, roleDepIds)) {
+            p.selected = true;
+          } else {
+            p.selected = false;
+          }
+        });
+      },
+      // 鍒ゆ柇瑙掕壊鎷ユ湁鐨勬潈闄愯妭鐐瑰嬀閫�
+      hasDepPerm(p, roleDepIds) {
+        let flag = false;
+        for (let i = 0; i < roleDepIds.length; i++) {
+          if (p.id == roleDepIds[i].departmentId) {
+            flag = true;
+            break;
+          }
+        }
+        if (flag) {
+          return true;
+        }
+        return false;
+      },
+      submitDepEdit() {
+        let depIds = "";
+        if (this.dataType == 1) {
+          let selectedNodes = this.$refs.depTree.getSelectedNodes();
+          selectedNodes.forEach(function (e) {
+            depIds += e.id + ",";
+          });
+          depIds = depIds.substring(0, depIds.length - 1);
+        }
+        this.submitDepLoading = true;
+        editRoleDep({
+          roleId: this.editRolePermId,
+          dataType: this.dataType,
+          depIds: depIds,
+        }).then((res) => {
+          this.submitDepLoading = false;
+          if (res.success) {
+            this.$Message.success("鎿嶄綔鎴愬姛");
+            this.getDataList();
+            this.depModalVisible = false;
+          }
+        });
+      },
+      changeOpen(v) {
+        if (v == "0") {
+          this.permData.forEach((e) => {
+            e.expand = true;
+            if (e.children && e.children.length > 0) {
+              e.children.forEach((c) => {
+                c.expand = true;
+                if (c.children && c.children.length > 0) {
+                  c.children.forEach(function (b) {
+                    b.expand = true;
+                  });
+                }
+              });
+            }
+          });
+        } else if (v == "1") {
+          this.permData.forEach((e) => {
+            e.expand = false;
+            if (e.children && e.children.length > 0) {
+              e.children.forEach((c) => {
+                c.expand = false;
+                if (c.children && c.children.length > 0) {
+                  c.children.forEach(function (b) {
+                    b.expand = false;
+                  });
+                }
+              });
+            }
+          });
+        } else if (v == "2") {
+          this.permData.forEach((e) => {
+            e.expand = true;
+            if (e.children && e.children.length > 0) {
+              e.children.forEach((c) => {
+                c.expand = false;
+                if (c.children && c.children.length > 0) {
+                  c.children.forEach(function (b) {
+                    b.expand = false;
+                  });
+                }
+              });
+            }
+          });
+        } else if (v == "3") {
+          this.permData.forEach((e) => {
+            e.expand = true;
+            if (e.children && e.children.length > 0) {
+              e.children.forEach((c) => {
+                c.expand = true;
+                if (c.children && c.children.length > 0) {
+                  c.children.forEach(function (b) {
+                    b.expand = false;
+                  });
+                }
+              });
+            }
+          });
+        }
+      },
+    },
+    mounted() {
+      this.maxHeight = Number(document.documentElement.clientHeight - 121) + "px";
+      this.init();
+    },
+  };
+</script>
\ No newline at end of file
diff --git a/src/views/your/carInfo-manage/exportColumn.js b/src/views/your/carInfo-manage/exportColumn.js
new file mode 100644
index 0000000..b5af350
--- /dev/null
+++ b/src/views/your/carInfo-manage/exportColumn.js
@@ -0,0 +1,53 @@
+export const exportColumn = [
+  {
+    title: "閫佽揣绾胯矾",
+    key: "areaName",
+    width: 130,
+  },
+  {
+    title: "杞︾墝鍙�",
+    key: "carNo",
+    width: 120,
+  },
+  {
+    title: "鍔犳补鍗″彿",
+    key: "addOilCode",
+    width: 140,
+    sortable: true,
+  },
+  {
+    title: "璧峰閲岀▼",
+    key: "beginMileage",
+    width: 130,
+  },
+  {
+    title: "鏈熸湯閲岀▼",
+    key: "endMileage",
+    width: 130,
+  },
+  {
+    title: "鏈堣椹堕噷绋�",
+    key: "mileage",
+    width: 130,
+  },
+  {
+    title: "鏈堟补鑰�",
+    key: "oilWear",
+    width: 130,
+  },
+  {
+    title: "鐧惧叕閲屾补鑰�",
+    key: "oil",
+    width: 130,
+  },
+  {
+    title: "椹鹃┒鍛�",
+    key: "nickName",
+    width: 120,
+  },
+  {
+    title: "鏈堝姞娌归噾棰�",
+    key: "money",
+    width: 120,
+  }
+]
\ No newline at end of file
diff --git a/src/views/your/suggest-manage/suggestManage.vue b/src/views/your/suggest-manage/suggestManage.vue
index bc975a7..8994f67 100644
--- a/src/views/your/suggest-manage/suggestManage.vue
+++ b/src/views/your/suggest-manage/suggestManage.vue
@@ -7,16 +7,15 @@
   <div class="search">
     <Card>
       <Row class="operation">
-        <Button @click="addOil" type="primary" icon="md-add">娣诲姞鍔犳补璁板綍</Button>
         <Button @click="init" icon="md-refresh">鍒锋柊</Button>
         <Button type="dashed" @click="openTip = !openTip">{{
           openTip ? "鍏抽棴鎻愮ず" : "寮�鍚彁绀�"
           }}</Button>
         <Input
-                v-model="searchForm.carNo"
+                v-model="searchForm.content"
                 suffix="ios-search"
                 @on-change="getDataList"
-                placeholder="杈撳叆杞︾墝鍙锋悳绱�"
+                placeholder="杈撳叆鍙嶉鍐呭鎼滅储"
                 clearable
                 style="width: 250px"
         />
@@ -199,6 +198,8 @@
     getCarList,
     editCar,
     deleteCar,
+    getSuggest,
+    deleteSuggest,
   } from "@/api/open";
   import util from "@/libs/util.js";
   export default {
@@ -256,7 +257,7 @@
           },
           {
             title: "鎰忚鍒嗙被",
-            key: "dictDataId",
+            key: "title",
             width: 150,
           },
           {
@@ -267,19 +268,18 @@
           {
             title: "鍙嶉鏃堕棿",
             key: "createTime",
-            width: 180,
+            width: 240,
             sortable: true,
           },
           {
             title: "鍙嶉鍟嗘埛",
-            key: "customerId",
+            key: "name",
             width: 150,
           },
           {
             title: "鎿嶄綔",
             key: "action",
             align: "center",
-            width: 195,
             render: (h, params) => {
               return h("div", [
                 h(
@@ -383,7 +383,7 @@
       },
       getDataList() {
         this.loading = true;
-        getAddOilList(this.searchForm).then((res) => {
+        getSuggest(this.searchForm).then((res) => {
           this.loading = false;
           if (res.success) {
             this.data = res.result.records;
@@ -520,7 +520,7 @@
           content: "鎮ㄧ‘璁よ鍒犻櫎鍚� ",
           loading: true,
           onOk: () => {
-            deleteAddOil({ ids: v.id }).then((res) => {
+            deleteSuggest({ ids: v.id }).then((res) => {
               this.$Modal.remove();
               if (res.success) {
                 this.clearSelectAll();

--
Gitblit v1.9.1