From b1827484648a4c08fcef04918b1f17ca94288046 Mon Sep 17 00:00:00 2001
From: tangzy <tangzy123456>
Date: Sat, 11 Jun 2022 09:06:34 +0800
Subject: [PATCH] 农资统计

---
 src/views/wel/index.vue                |   49 +
 src/api/task/task.js                   |   50 +
 src/views/land/cs.vue                  |    3 
 public/index.html                      |  197 ++--
 src/router/views/index.js              |  642 ++++++++--------
 src/config/iconList.js                 |    5 
 src/views/sale/sale.vue                |  254 ++++++
 src/api/machining/machining.js         |   50 +
 src/views/statistics/stock.vue         |    4 
 src/views/task/task.vue                |  573 ++++++++++++++
 src/config/env.js                      |    2 
 src/views/stock/stockmanage.vue        |    4 
 src/views/wel/land.vue                 |    1 
 src/views/statistics/farmplantarea.vue |    8 
 src/views/land/landAdd.vue             |   36 
 src/views/land/LandDetail.vue          |    8 
 src/api/sale/sale.js                   |   50 +
 src/views/stockrecord/stockrecord.vue  |    3 
 src/views/machining/machining.vue      |  331 ++++++++
 src/api/stock/stock.js                 |   13 
 20 files changed, 1,849 insertions(+), 434 deletions(-)

diff --git a/public/index.html b/public/index.html
index 4f7659a..8007c45 100644
--- a/public/index.html
+++ b/public/index.html
@@ -2,124 +2,125 @@
 <html>
 
 <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta http-equiv="X-UA-Compatible" content="chrome=1" />
-    <meta name="renderer" content="webkit">
-    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <meta name="apple-mobile-web-app-status-bar-style" content="black">
-    <meta name="format-detection" content="telephone=no">
-    <link rel="stylesheet" href="<%= BASE_URL %>cdn/element-ui/2.15.6/theme-chalk/index.css">
-    <link rel="stylesheet" href="<%= BASE_URL %>cdn/animate/3.5.2/animate.css">
-    <link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/index.css">
-    <link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/avue/iconfont.css">
-    <link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/saber/iconfont.css">
-    <link rel="stylesheet" href="<%= BASE_URL %>cdn/avue/2.9.5/index.css">
-    <script src="<%= BASE_URL %>cdn/xlsx/FileSaver.min.js"></script>
-    <script src="<%= BASE_URL %>cdn/xlsx/xlsx.full.min.js"></script>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta http-equiv="X-UA-Compatible" content="chrome=1"/>
+  <meta name="renderer" content="webkit">
+  <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
+  <meta name="apple-mobile-web-app-capable" content="yes">
+  <meta name="apple-mobile-web-app-status-bar-style" content="black">
+  <meta name="format-detection" content="telephone=no">
+  <link rel="stylesheet" href="<%= BASE_URL %>cdn/element-ui/2.15.6/theme-chalk/index.css">
+  <link rel="stylesheet" href="<%= BASE_URL %>cdn/animate/3.5.2/animate.css">
+  <link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/index.css">
+  <link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/avue/iconfont.css">
+  <link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/saber/iconfont.css">
+  <link rel="stylesheet" href="<%= BASE_URL %>cdn/avue/2.9.5/index.css">
+  <script src="<%= BASE_URL %>cdn/xlsx/FileSaver.min.js"></script>
+  <script src="<%= BASE_URL %>cdn/xlsx/xlsx.full.min.js"></script>
 
-    <!-- 地图 -->
-    <script type="text/javascript" src="js/jquery.min.js"></script>
-    <script src="libs/Cesium/Cesium.js"></script>
-    <script type="text/javascript" src="js/drawTree.js"></script>
+  <!-- 地图 -->
+  <script type="text/javascript" src="js/jquery.min.js"></script>
+  <script src="libs/Cesium/Cesium.js"></script>
+  <script type="text/javascript" src="js/drawTree.js"></script>
   <!-- Avue地图选点 -->
   <script type="text/javascript"
           src='https://webapi.amap.com/maps?v=1.4.11&key=7ab53b28352e55dc5754699add0ad862&plugin=AMap.PlaceSearch'></script>
   <script src="https://webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script>
+  <script src="https://cdn.staticfile.org/FileSaver.js/2014-11-29/FileSaver.min.js"></script>
+  <script src="https://cdn.staticfile.org/xlsx/0.18.2/xlsx.full.min.js"></script>
+  <link rel="icon" href="<%= BASE_URL %>favicon.png">
+  <title>智慧农业综合管理平台</title>
+  <style>
+    html,
+    body,
+    #app {
+      height: 100%;
+      margin: 0;
+      padding: 0;
+    }
 
-    <link rel="icon" href="<%= BASE_URL %>favicon.png">
-    <title>智慧农业综合管理平台</title>
-    <style>
-        html,
-        body,
-        #app {
-            height: 100%;
-            margin: 0;
-            padding: 0;
-        }
+    .avue-home {
+      background-color: #303133;
+      height: 100%;
+      display: flex;
+      flex-direction: column;
+    }
 
-        .avue-home {
-            background-color: #303133;
-            height: 100%;
-            display: flex;
-            flex-direction: column;
-        }
+    .avue-home__main {
+      user-select: none;
+      width: 100%;
+      flex-grow: 1;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      flex-direction: column;
+    }
 
-        .avue-home__main {
-            user-select: none;
-            width: 100%;
-            flex-grow: 1;
-            display: flex;
-            justify-content: center;
-            align-items: center;
-            flex-direction: column;
-        }
+    .avue-home__footer {
+      width: 100%;
+      flex-grow: 0;
+      text-align: center;
+      padding: 1em 0;
+    }
 
-        .avue-home__footer {
-            width: 100%;
-            flex-grow: 0;
-            text-align: center;
-            padding: 1em 0;
-        }
+    .avue-home__footer > a {
+      font-size: 12px;
+      color: #ABABAB;
+      text-decoration: none;
+    }
 
-        .avue-home__footer>a {
-            font-size: 12px;
-            color: #ABABAB;
-            text-decoration: none;
-        }
+    .avue-home__loading {
+      height: 32px;
+      width: 32px;
+      margin-bottom: 20px;
+    }
 
-        .avue-home__loading {
-            height: 32px;
-            width: 32px;
-            margin-bottom: 20px;
-        }
+    .avue-home__title {
+      color: #FFF;
+      font-size: 14px;
+      margin-bottom: 10px;
+    }
 
-        .avue-home__title {
-            color: #FFF;
-            font-size: 14px;
-            margin-bottom: 10px;
-        }
-
-        .avue-home__sub-title {
-            color: #ABABAB;
-            font-size: 12px;
-        }
-    </style>
+    .avue-home__sub-title {
+      color: #ABABAB;
+      font-size: 12px;
+    }
+  </style>
 </head>
 
 <body>
-    <noscript>
+<noscript>
   <strong>
     很抱歉,如果没有 JavaScript 支持,Saber 将不能正常工作。请启用浏览器的 JavaScript 然后继续。
   </strong>
 </noscript>
-    <div id="app">
-        <div class="avue-home">
-            <div class="avue-home__main">
-                <img class="avue-home__loading" src="<%= BASE_URL %>svg/loading-spin.svg" alt="loading">
-                <div class="avue-home__title">
-                    正在加载资源
-                </div>
-                <div class="avue-home__sub-title d">
-                    初次加载资源可能需要较多时间 请耐心等待
-                </div>
-            </div>
-            <div class="avue-home__footer">
-                <a href="https://bladex.vip" target="_blank">
-        https://bladex.vip </a>
-            </div>
-        </div>
+<div id="app">
+  <div class="avue-home">
+    <div class="avue-home__main">
+      <img class="avue-home__loading" src="<%= BASE_URL %>svg/loading-spin.svg" alt="loading">
+      <div class="avue-home__title">
+        正在加载资源
+      </div>
+      <div class="avue-home__sub-title d">
+        初次加载资源可能需要较多时间 请耐心等待
+      </div>
     </div>
-    <!-- built files will be auto injected -->
-    <script src="<%= BASE_URL %>util/aes.js" charset="utf-8"></script>
-    <script src="<%= BASE_URL %>cdn/vue/2.6.10/vue.min.js" charset="utf-8"></script>
-    <script src="<%= BASE_URL %>cdn/vuex/3.1.1/vuex.min.js" charset="utf-8"></script>
-    <script src="<%= BASE_URL %>cdn/vue-router/3.0.1/vue-router.min.js" charset="utf-8"></script>
-    <script src="<%= BASE_URL %>cdn/axios/1.0.0/axios.min.js" charset="utf-8"></script>
-    <script src="<%= BASE_URL %>cdn/element-ui/2.15.6/index.js" charset="utf-8"></script>
-    <script src="<%= BASE_URL %>cdn/avue/2.9.5/avue.min.js" charset="utf-8"></script>
-    <script src="<%= BASE_URL %>cdn/nutflow/wf-design-base/index.umd.min.js" charset="utf-8"></script>
+    <div class="avue-home__footer">
+      <a href="https://bladex.vip" target="_blank">
+        https://bladex.vip </a>
+    </div>
+  </div>
+</div>
+<!-- built files will be auto injected -->
+<script src="<%= BASE_URL %>util/aes.js" charset="utf-8"></script>
+<script src="<%= BASE_URL %>cdn/vue/2.6.10/vue.min.js" charset="utf-8"></script>
+<script src="<%= BASE_URL %>cdn/vuex/3.1.1/vuex.min.js" charset="utf-8"></script>
+<script src="<%= BASE_URL %>cdn/vue-router/3.0.1/vue-router.min.js" charset="utf-8"></script>
+<script src="<%= BASE_URL %>cdn/axios/1.0.0/axios.min.js" charset="utf-8"></script>
+<script src="<%= BASE_URL %>cdn/element-ui/2.15.6/index.js" charset="utf-8"></script>
+<script src="<%= BASE_URL %>cdn/avue/2.9.5/avue.min.js" charset="utf-8"></script>
+<script src="<%= BASE_URL %>cdn/nutflow/wf-design-base/index.umd.min.js" charset="utf-8"></script>
 </body>
 
 </html>
diff --git a/src/api/machining/machining.js b/src/api/machining/machining.js
new file mode 100644
index 0000000..0dc432d
--- /dev/null
+++ b/src/api/machining/machining.js
@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/machining/machining/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/machining/machining/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/machining/machining/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/machining/machining/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/machining/machining/submit',
+    method: 'post',
+    data: row
+  })
+}
+
diff --git a/src/api/sale/sale.js b/src/api/sale/sale.js
new file mode 100644
index 0000000..568f71f
--- /dev/null
+++ b/src/api/sale/sale.js
@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/sale/sale/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/sale/sale/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/sale/sale/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/sale/sale/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/sale/sale/submit',
+    method: 'post',
+    data: row
+  })
+}
+
diff --git a/src/api/stock/stock.js b/src/api/stock/stock.js
index bee63c7..89b5891 100644
--- a/src/api/stock/stock.js
+++ b/src/api/stock/stock.js
@@ -47,10 +47,21 @@
         data: row
     })
 }
-export const pagenum = (row) => {
+export const pagenum = (current, size, params) => {
   return request({
     url: '/api/stock/stock/pagenum',
     method: 'post',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+export const StockCount = (row) => {
+  return request({
+    url: '/api/stock/stock/StockCount',
+    method: 'post',
     data: row
   })
 }
diff --git a/src/api/task/task.js b/src/api/task/task.js
new file mode 100644
index 0000000..34d12ec
--- /dev/null
+++ b/src/api/task/task.js
@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/task/task/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/task/task/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/task/task/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/task/task/save',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/task/task/submit',
+    method: 'post',
+    data: row
+  })
+}
+
diff --git a/src/config/env.js b/src/config/env.js
index 0544cfc..327df30 100644
--- a/src/config/env.js
+++ b/src/config/env.js
@@ -1,5 +1,5 @@
 // 阿里矢量图标库配置
-let iconfontVersion = ['567566_pwc3oottzol','1653398_nw8h5egzn2'];
+let iconfontVersion = ['567566_pwc3oottzol','1653398_nw8h5egzn2','1653398_2si2rf9nb8w','1653398_a5j8xupowom','1653398_x47clmaqqfs'];
 let iconfontUrl = `//at.alicdn.com/t/font_$key.css`;
 
 let baseUrl = '';
diff --git a/src/config/iconList.js b/src/config/iconList.js
index ed7f983..e5b84c7 100644
--- a/src/config/iconList.js
+++ b/src/config/iconList.js
@@ -66,7 +66,10 @@
       "iconfont iconicon_add",
       "iconfont icongithub",
       "iconfont icongitee2",
-      "iconfont icona-baohuguotukongjianzonghezhengzhi"
+      "iconfont icona-baohuguotukongjianzonghezhengzhi",
+      "iconfont iconkucun",
+      "iconfont iconnongziguanli",
+      "iconfont icontongji"
     ]
   },
   {
diff --git a/src/router/views/index.js b/src/router/views/index.js
index 6deb16e..7f8e3c5 100644
--- a/src/router/views/index.js
+++ b/src/router/views/index.js
@@ -1,319 +1,333 @@
 import Layout from '@/page/index/'
 
 export default [{
-        path: '/wel',
-        component: Layout,
-        redirect: '/wel/index',
-        children: [{
-            path: 'index',
-            name: '首页',
-            meta: {
-                i18n: 'dashboard'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/wel/index')
-        }, {
-            path: 'dashboard',
-            name: '控制台',
-            meta: {
-                i18n: 'dashboard',
-                menu: false,
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/wel/dashboard')
-        }]
+  path: '/wel',
+  component: Layout,
+  redirect: '/wel/index',
+  children: [{
+    path: 'index',
+    name: '首页',
+    meta: {
+      i18n: 'dashboard'
+    },
+    component: () =>
+      import ( /* webpackChunkName: "views" */ '@/views/wel/index')
+  }, {
+    path: 'dashboard',
+    name: '控制台',
+    meta: {
+      i18n: 'dashboard',
+      menu: false,
+    },
+    component: () =>
+      import ( /* webpackChunkName: "views" */ '@/views/wel/dashboard')
+  }]
+}, {
+  path: '/test',
+  component: Layout,
+  redirect: '/test/index',
+  children: [{
+    path: 'index',
+    name: '测试页',
+    meta: {
+      i18n: 'test'
+    },
+    component: () =>
+      import ( /* webpackChunkName: "views" */ '@/views/util/test')
+  }]
+},
+  {
+    path: '/framing',
+    redirect: '/farmplant/farmplant',
+    component: Layout,
+    children: [{
+      path: 'index',
+      name: '农事操作',
+      meta: {
+        i18n: 'index',
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/farm/farmPaper')
+    }]
+  },
+  {
+    path: '/stockrecord',
+    redirect: '/stockrecord/stockrecord',
+    component: Layout,
+    children: [{
+      path: 'stockrecord',
+      name: '农资记录',
+      meta: {
+        i18n: 'index',
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/stockrecord/stockrecord')
+    }]
+  },
+  {
+    path: '/farmingrecord',
+    redirect: '/farm/farmingrecord',
+    component: Layout,
+    children: [{
+      path: 'farmingrecord',
+      name: '农事记录',
+      meta: {
+        i18n: 'index',
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/farm/farmingrecord')
+    }]
+  },
+  {
+    path: '/soldrecord',
+    redirect: '/soldrecord/soldrecord',
+    component: Layout,
+    children: [{
+      path: 'soldrecord',
+      name: '已出库待使用农资',
+      meta: {
+        i18n: 'index',
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/soldrecord/soldrecord')
+    }]
+  },
+  {
+    path: '/farmDetail',
+    redirect: '/wel/farmDetail',
+    component: Layout,
+    children: [{
+      path: '/farmDetail',
+      name: '操作记录',
+      meta: {
+        i18n: 'index',
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/wel/farmDetail')
+    }]
+  },
+  {
+    path: '/LandDetail',
+    redirect: '/land/LandDetail',
+    component: Layout,
+    children: [{
+      path: '/LandDetail',
+      name: '地块详情',
+      meta: {
+        i18n: 'index',
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/land/LandDetail')
+    }]
+  },
+  {
+    path: '/stockout',
+    redirect: '/stock/stockout',
+    component: Layout,
+    children: [{
+      path: '/stockout',
+      name: '已出资待使用农资',
+      meta: {
+        i18n: 'index',
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/stock/stockout')
+    }]
+  },
+  {
+    path: '/landMap',
+    redirect: '/land/landMap',
+    component: Layout,
+    children: [{
+      path: '/landMap',
+      name: '地块位置',
+      meta: {
+        i18n: 'index',
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/land/landMap')
+    }]
+  },
+  {
+    path: '/recovery',
+    redirect: '/recovery/recovery',
+    component: Layout,
+    children: [{
+      path: 'recovery',
+      name: '采收记录',
+      meta: {
+        i18n: 'index',
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/recovery/recovery')
+    }]
+  },
+  {
+    path: '/dict-horizontal',
+    component: Layout,
+    redirect: '/dict-horizontal/index',
+    children: [{
+      path: 'index',
+      name: '字典管理',
+      meta: {
+        i18n: 'dict'
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/util/demo/dict-horizontal')
+    }]
+  }, {
+    path: '/dict-vertical',
+    component: Layout,
+    redirect: '/dict-vertical/index',
+    children: [{
+      path: 'index',
+      name: '字典管理',
+      meta: {
+        i18n: 'dict'
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/util/demo/dict-vertical')
+    }]
+  },
+  {
+    path: '/land',
+    component: Layout,
+    redirect: '/land/index',
+    children: [{
+      path: 'index',
+      name: '地块管理',
+      meta: {
+        i18n: 'land'
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/land/cs')
+    }]
+  },
+  {
+    path: '/task',
+    component: Layout,
+    redirect: '/task/index',
+    children: [{
+      path: 'index',
+      name: '任务管理',
+      meta: {
+        i18n: 'task'
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/task/task')
+    }]
+  },
+  {
+    path: '/farmproductstock',
+    component: Layout,
+    redirect: '/farmproductstock/index',
+    children: [{
+      path: 'index',
+      name: '农产品库存管理',
+      meta: {
+        i18n: 'farmproductstock'
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/farmplant/farmproductstock')
+    }]
+  },
+  {
+    path: '/stockmanage',
+    component: Layout,
+    redirect: '/stockmanage/index',
+    children: [{
+      path: 'index',
+      name: '农资库存管理',
+      meta: {
+        i18n: 'stockmanage'
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/stock/stockmanage')
+    }]
+  },
+  {
+    path: '/statistics',
+    component: Layout,
+    redirect: '/statistics/index',
+    children: [{
+      path: 'index',
+      name: '数据统计',
+      meta: {
+        i18n: 'statistics'
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/statistics/statistics')
+    }]
+  },
+  {
+    path: '/traceability',
+    component: Layout,
+    redirect: '/traceability/index',
+    children: [{
+      path: 'index',
+      name: '溯源码管理',
+      meta: {
+        i18n: 'traceability'
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/traceability/traceability')
+    }]
+  },
+  {
+    path: '/info',
+    component: Layout,
+    redirect: '/info/index',
+    children: [{
+      path: 'index',
+      name: '个人信息',
+      meta: {
+        i18n: 'info'
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/system/userinfo')
+    }]
+  }, {
+    path: '/work/process/leave',
+    component: Layout,
+    redirect: '/work/process/leave/form',
+    children: [{
+      path: 'form/:processDefinitionId',
+      name: '请假流程',
+      meta: {
+        i18n: 'work'
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/work/process/leave/form')
     }, {
-        path: '/test',
-        component: Layout,
-        redirect: '/test/index',
-        children: [{
-            path: 'index',
-            name: '测试页',
-            meta: {
-                i18n: 'test'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/util/test')
-        }]
-    },
-    {
-        path: '/framing',
-        redirect: '/farmplant/farmplant',
-        component: Layout,
-        children: [{
-            path: 'index',
-            name: '农事操作',
-            meta: {
-                i18n: 'index',
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/farm/farmPaper')
-        }]
-    },
-    {
-        path: '/stockrecord',
-        redirect: '/stockrecord/stockrecord',
-        component: Layout,
-        children: [{
-            path: 'stockrecord',
-            name: '农资记录',
-            meta: {
-                i18n: 'index',
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/stockrecord/stockrecord')
-        }]
-    },
-    {
-        path: '/farmingrecord',
-        redirect: '/farm/farmingrecord',
-        component: Layout,
-        children: [{
-            path: 'farmingrecord',
-            name: '农事记录',
-            meta: {
-                i18n: 'index',
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/farm/farmingrecord')
-        }]
-    },
-    {
-        path: '/soldrecord',
-        redirect: '/soldrecord/soldrecord',
-        component: Layout,
-        children: [{
-            path: 'soldrecord',
-            name: '已出库待使用农资',
-            meta: {
-                i18n: 'index',
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/soldrecord/soldrecord')
-        }]
-    },
-    {
-        path: '/farmDetail',
-        redirect: '/wel/farmDetail',
-        component: Layout,
-        children: [{
-            path: '/farmDetail',
-            name: '操作记录',
-            meta: {
-                i18n: 'index',
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/wel/farmDetail')
-        }]
-    },
-    {
-        path: '/LandDetail',
-        redirect: '/land/LandDetail',
-        component: Layout,
-        children: [{
-            path: '/LandDetail',
-            name: '地块详情',
-            meta: {
-                i18n: 'index',
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/land/LandDetail')
-        }]
-    },
-    {
-        path: '/stockout',
-        redirect: '/stock/stockout',
-        component: Layout,
-        children: [{
-            path: '/stockout',
-            name: '已出资待使用农资',
-            meta: {
-                i18n: 'index',
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/stock/stockout')
-        }]
-    },
-    {
-        path: '/landMap',
-        redirect: '/land/landMap',
-        component: Layout,
-        children: [{
-            path: '/landMap',
-            name: '地块位置',
-            meta: {
-                i18n: 'index',
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/land/landMap')
-        }]
-    },
-    {
-        path: '/recovery',
-        redirect: '/recovery/recovery',
-        component: Layout,
-        children: [{
-            path: 'recovery',
-            name: '采收记录',
-            meta: {
-                i18n: 'index',
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/recovery/recovery')
-        }]
-    },
-    {
-        path: '/dict-horizontal',
-        component: Layout,
-        redirect: '/dict-horizontal/index',
-        children: [{
-            path: 'index',
-            name: '字典管理',
-            meta: {
-                i18n: 'dict'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/util/demo/dict-horizontal')
-        }]
+      path: 'handle/:taskId/:processInstanceId/:businessId',
+      name: '处理请假流程',
+      meta: {
+        i18n: 'work'
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/work/process/leave/handle')
     }, {
-        path: '/dict-vertical',
-        component: Layout,
-        redirect: '/dict-vertical/index',
-        children: [{
-            path: 'index',
-            name: '字典管理',
-            meta: {
-                i18n: 'dict'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/util/demo/dict-vertical')
-        }]
-    },
-    {
-        path: '/land',
-        component: Layout,
-        redirect: '/land/index',
-        children: [{
-            path: 'index',
-            name: '地块管理',
-            meta: {
-                i18n: 'land'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/land/cs')
-        }]
-    },
-    {
-        path: '/farmproductstock',
-        component: Layout,
-        redirect: '/farmproductstock/index',
-        children: [{
-            path: 'index',
-            name: '农产品库存管理',
-            meta: {
-                i18n: 'farmproductstock'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/farmplant/farmproductstock')
-        }]
-    },
-    {
-        path: '/stockmanage',
-        component: Layout,
-        redirect: '/stockmanage/index',
-        children: [{
-            path: 'index',
-            name: '农资库存管理',
-            meta: {
-                i18n: 'stockmanage'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/stock/stockmanage')
-        }]
-    },
-    {
-        path: '/statistics',
-        component: Layout,
-        redirect: '/statistics/index',
-        children: [{
-            path: 'index',
-            name: '数据统计',
-            meta: {
-                i18n: 'statistics'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/statistics/statistics')
-        }]
-    },
-    {
-        path: '/traceability',
-        component: Layout,
-        redirect: '/traceability/index',
-        children: [{
-            path: 'index',
-            name: '溯源码管理',
-            meta: {
-                i18n: 'traceability'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/traceability/traceability')
-        }]
-    },
-    {
-        path: '/info',
-        component: Layout,
-        redirect: '/info/index',
-        children: [{
-            path: 'index',
-            name: '个人信息',
-            meta: {
-                i18n: 'info'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/system/userinfo')
-        }]
-    }, {
-        path: '/work/process/leave',
-        component: Layout,
-        redirect: '/work/process/leave/form',
-        children: [{
-            path: 'form/:processDefinitionId',
-            name: '请假流程',
-            meta: {
-                i18n: 'work'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/work/process/leave/form')
-        }, {
-            path: 'handle/:taskId/:processInstanceId/:businessId',
-            name: '处理请假流程',
-            meta: {
-                i18n: 'work'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/work/process/leave/handle')
-        }, {
-            path: 'detail/:processInstanceId/:businessId',
-            name: '请假流程详情',
-            meta: {
-                i18n: 'work'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/work/process/leave/detail')
-        }]
-    },
-    {
-        path: '/farm',
-        component: Layout,
-        redirect: '/farm/index',
-        children: [{
-            path: 'index',
-            name: '农场信息管理',
-            meta: {
-                i18n: 'farm'
-            },
-            component: () =>
-                import ( /* webpackChunkName: "views" */ '@/views/farm/farm')
-        }]
-    },
-]
\ No newline at end of file
+      path: 'detail/:processInstanceId/:businessId',
+      name: '请假流程详情',
+      meta: {
+        i18n: 'work'
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/work/process/leave/detail')
+    }]
+  },
+  {
+    path: '/farm',
+    component: Layout,
+    redirect: '/farm/index',
+    children: [{
+      path: 'index',
+      name: '农场信息管理',
+      meta: {
+        i18n: 'farm'
+      },
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/farm/farm')
+    }]
+  },
+]
diff --git a/src/views/land/LandDetail.vue b/src/views/land/LandDetail.vue
index d411074..b81e574 100644
--- a/src/views/land/LandDetail.vue
+++ b/src/views/land/LandDetail.vue
@@ -10,6 +10,7 @@
             <div class="ln">{{ dic }}</div>
           </div>
           <div class="dc">占地面积:{{ landArea }}{{ dica }}</div>
+          <div class="dck">所属农场:{{ deptname }}</div>
         </div>
         <div class="dv">
           <el-tabs v-model="activeName" @tab-click="handleClick">
@@ -76,6 +77,7 @@
       activeName: "tab1",
       url: "",
       dica: "",
+      deptname: "",
       landArea: "",
       dic: "",
       formC: {},
@@ -114,6 +116,7 @@
     this.dic = this.$route.query.dic;
     this.landArea = this.$route.query.landArea;
     this.dica = this.$route.query.dica;
+    this.deptname = this.$route.query.deptname;
     this.form = res.data.data;
     let usePolygons = this.$route.query.landRange
       .split("POLYGON((")[1]
@@ -201,6 +204,11 @@
   margin-left: 340px;
   width: 175px;
 }
+.dck {
+  width: 151px;
+  margin-left: 340px;
+  width: 175px;
+}
 
 .landimg {
   width: 200px;
diff --git a/src/views/land/cs.vue b/src/views/land/cs.vue
index d653524..dacc01e 100644
--- a/src/views/land/cs.vue
+++ b/src/views/land/cs.vue
@@ -95,6 +95,7 @@
         keyword: "",
       },
       query: {},
+      value:false,
       farmingCount:0,
       landVisible: false,
       farmPlanList: [],
@@ -273,7 +274,7 @@
     margin-top: -25px;
   }
   .el-page {
-    background-color: black;
+    padding-top: 30px;
     text-align: center;
   }
 }
diff --git a/src/views/land/landAdd.vue b/src/views/land/landAdd.vue
index 8edaa6c..f031a95 100644
--- a/src/views/land/landAdd.vue
+++ b/src/views/land/landAdd.vue
@@ -23,17 +23,18 @@
 <script>
 
 import {mapGetters} from "vuex";
-import { getLandList } from "@/api/land/land";
-import { getStrainList } from "@/api/farmplant/strain";
+import {getDeptTree} from "@/api/system/dept";
 import {add} from "@/api/land/land";
+import website from '@/config/website';
 import getMapDataInThere from "./getMapDataInThere.vue";
+
 export default {
   components: {
     getMapDataInThere
   },
   data() {
     return {
-      title:"新增地块",
+      title: "新增地块",
       form: {},
       option: {
         emptyBtn: false,
@@ -47,6 +48,21 @@
               required: true,
               message: "请输入地块名称",
               trigger: "blur"
+            }]
+          },
+          {
+            label: "所属农场",
+            prop: "deptId",
+            type: "tree",
+            dicData: [],
+            props: {
+              label: "title"
+            },
+            slot: true,
+            rules: [{
+              required: true,
+              message: "请选择所属农场",
+              trigger: "click"
             }]
           },
           {
@@ -68,6 +84,7 @@
           {
             label: "面积单位",
             prop: "landUnit",
+            value: "0",
             type: "select",
             dicUrl: "/api/blade-system/dict-biz/dictionary?code=landunit",
             props: {
@@ -93,14 +110,24 @@
   computed: {
     ...mapGetters(["userInfo", "permission", "polygons"]),
   },
+  mounted() {
+    this.initData(this.userInfo.tenant_id);
+  },
   methods: {
+    initData(tenantId) {
+      getDeptTree(tenantId).then(res => {        console.log(res)
+
+        const column = this.findObject(this.option.column, "deptId");
+        column.dicData = res.data.data;
+      });
+    },
     //初始化
     init() {
       //计算当前时间
       this.visible = true;
     },
     // 表单提交
-    submit(row,loading) {
+    submit(row, loading) {
       var that = this;
       if (this.polygons.length == 0) {
         //没有面的数据
@@ -128,6 +155,7 @@
           type: "success",
           message: "操作成功!"
         });
+        done();
       }, error => {
         loading();
         window.console.log(error);
diff --git a/src/views/machining/machining.vue b/src/views/machining/machining.vue
new file mode 100644
index 0000000..60646a5
--- /dev/null
+++ b/src/views/machining/machining.vue
@@ -0,0 +1,331 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.machining_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+        <el-button type="success"
+                   size="small"
+                   plain
+                   icon="el-icon-upload2"
+                   @click="handleImport">导入
+        </el-button>
+      </template>
+    </avue-crud>
+    <el-dialog title="用户数据导入"
+               append-to-body
+               :visible.sync="excelBox"
+               width="555px">
+      <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
+        <template slot="excelTemplate">
+          <el-button type="primary" @click="handleTemplate">
+            点击下载<i class="el-icon-download el-icon--right"></i>
+          </el-button>
+        </template>
+      </avue-form>
+    </el-dialog>
+  </basic-container>
+</template>
+
+<script>
+import {getList, getDetail, add, update, remove} from "@/api/machining/machining";
+import {mapGetters} from "vuex";
+
+export default {
+  data() {
+    return {
+      form: {},
+      query: {},
+      excelBox: false,
+      loading: true,
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0
+      },
+      selectionList: [],
+      excelOption: {
+        submitBtn: false,
+        emptyBtn: false,
+        column: [
+          {
+            label: '模板上传',
+            prop: 'excelFile',
+            type: 'upload',
+            drag: true,
+            loadText: '模板上传中,请稍等',
+            span: 24,
+            propsHttp: {
+              res: 'data'
+            },
+            tip: '请上传 .xls,.xlsx 标准格式文件',
+            action: "/api/blade-user/import-user"
+          },
+          {
+            label: "数据覆盖",
+            prop: "isCovered",
+            type: "switch",
+            align: "center",
+            width: 80,
+            dicData: [
+              {
+                label: "否",
+                value: 0
+              },
+              {
+                label: "是",
+                value: 1
+              }
+            ],
+            value: 0,
+            slot: true,
+            rules: [
+              {
+                required: true,
+                message: "请选择是否覆盖",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: '模板下载',
+            prop: 'excelTemplate',
+            formslot: true,
+            span: 24,
+          }
+        ]
+      },
+      option: {
+        excelBtn: true,
+        height: 'auto',
+        calcHeight: 30,
+        tip: false,
+        searchShow: true,
+        searchMenuSpan: 6,
+        border: true,
+        index: true,
+        viewBtn: true,
+        menuAlign: "center",
+        align: "center",
+        selection: true,
+        dialogClickModal: false,
+        column: [
+          {
+            label: "加工类型",
+            prop: "machiningType",
+            rules: [{
+              required: true,
+              message: "请输入加工类型",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "加工原料",
+            prop: "machiningYl",
+            rules: [{
+              required: true,
+              message: "请输入加工原料",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "图片",
+            type: "upload",
+            prop: "machiningTp",
+            listType: "picture-img",
+            propsHttp: {
+              res: "data",
+              url: "url",
+            },
+            canvasOption: {
+              text: " ",
+              ratio: 1.0,
+            },
+            action: "/api/blade-resource/oss/endpoint/put-files",
+            tip: "",
+            span: 24,
+            labelWidth: 110,
+          },
+          {
+            label: "更新时间",
+            prop: "updateTime",
+            addDisplay: false,
+            viewDisplay: false,
+            editDisplay: false,
+          },
+          {
+            label: "备注",
+            prop: "remarks",
+            span: 24,
+            type: "textarea",
+          },
+        ]
+      },
+      data: []
+    };
+  },
+  computed: {
+    ...mapGetters(["permission"]),
+    permissionList() {
+      return {
+        addBtn: this.vaildData(this.permission.machining_add, false),
+        viewBtn: this.vaildData(this.permission.machining_view, false),
+        delBtn: this.vaildData(this.permission.machining_delete, false),
+        editBtn: this.vaildData(this.permission.machining_edit, false)
+      };
+    },
+    ids() {
+      let ids = [];
+      this.selectionList.forEach(ele => {
+        ids.push(ele.id);
+      });
+      return ids.join(",");
+    }
+  },
+  methods: {
+    rowSave(row, done, loading) {
+      add(row).then(() => {
+        this.onLoad(this.page);
+        this.$message({
+          type: "success",
+          message: "操作成功!"
+        });
+        done();
+      }, error => {
+        loading();
+        window.console.log(error);
+      });
+    },
+    rowUpdate(row, index, done, loading) {
+      update(row).then(() => {
+        this.onLoad(this.page);
+        this.$message({
+          type: "success",
+          message: "操作成功!"
+        });
+        done();
+      }, error => {
+        loading();
+        console.log(error);
+      });
+    },
+    rowDel(row) {
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          return remove(row.id);
+        })
+        .then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+        });
+    },
+    handleDelete() {
+      if (this.selectionList.length === 0) {
+        this.$message.warning("请选择至少一条数据");
+        return;
+      }
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          return remove(this.ids);
+        })
+        .then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          this.$refs.crud.toggleSelection();
+        });
+    },
+    beforeOpen(done, type) {
+      if (["edit", "view"].includes(type)) {
+        getDetail(this.form.id).then(res => {
+          this.form = res.data.data;
+        });
+      }
+      done();
+    },
+    searchReset() {
+      this.query = {};
+      this.onLoad(this.page);
+    },
+    searchChange(params, done) {
+      this.query = params;
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+    },
+    selectionClear() {
+      this.selectionList = [];
+      this.$refs.crud.toggleSelection();
+    },
+    currentChange(currentPage) {
+      this.page.currentPage = currentPage;
+    },
+    sizeChange(pageSize) {
+      this.page.pageSize = pageSize;
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.query);
+    },
+    onLoad(page, params = {}) {
+      this.loading = true;
+      getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+        const data = res.data.data;
+        this.page.total = data.total;
+        this.data = data.records;
+        this.loading = false;
+        this.selectionClear();
+      });
+    },
+    handleImport() {
+      this.excelBox = true;
+    },
+    uploadAfter(res, done, loading, column) {
+      window.console.log(column);
+      this.excelBox = false;
+      this.refreshChange();
+      done();
+    },
+  }
+};
+</script>
+
+<style>
+</style>
diff --git a/src/views/sale/sale.vue b/src/views/sale/sale.vue
new file mode 100644
index 0000000..c85db64
--- /dev/null
+++ b/src/views/sale/sale.vue
@@ -0,0 +1,254 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.sale_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/sale/sale";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "品种id",
+              prop: "strainId",
+              rules: [{
+                required: true,
+                message: "请输入品种id",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "销售时间",
+              prop: "saleTime",
+              rules: [{
+                required: true,
+                message: "请输入销售时间",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "销售数量",
+              prop: "saleNum",
+              rules: [{
+                required: true,
+                message: "请输入销售数量",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "销售去向",
+              prop: "saleDestination",
+              rules: [{
+                required: true,
+                message: "请输入销售去向",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "具体销售去向",
+              prop: "saleDestination1",
+              rules: [{
+                required: true,
+                message: "请输入具体销售去向",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "销售价格",
+              prop: "salePrice",
+              rules: [{
+                required: true,
+                message: "请输入销售价格",
+                trigger: "blur"
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.sale_add, false),
+          viewBtn: this.vaildData(this.permission.sale_view, false),
+          delBtn: this.vaildData(this.permission.sale_delete, false),
+          editBtn: this.vaildData(this.permission.sale_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>
diff --git a/src/views/statistics/farmplantarea.vue b/src/views/statistics/farmplantarea.vue
index fcabdd3..2886ad5 100644
--- a/src/views/statistics/farmplantarea.vue
+++ b/src/views/statistics/farmplantarea.vue
@@ -184,9 +184,9 @@
       var myDate = new Date();
       var year = myDate.getFullYear();
       //获取当前月份(0-11,0代表1月,所以要加1);
-      var month = myDate.getMonth() + 1; 
+      var month = myDate.getMonth() + 1;
       //获取当前日(1-31)
-      var day = myDate.getDate(); 
+      var day = myDate.getDate();
       if (month < 10) {
         month = "0" + month;
       }
@@ -201,9 +201,9 @@
       var myDate = new Date();
       var year = myDate.getFullYear();
       //获取当前月份(0-11,0代表1月,所以要加1);
-      var month = myDate.getMonth() + 1; 
+      var month = myDate.getMonth() + 1;
       //获取当前日(1-31)
-      var day = myDate.getDate(); 
+      var day = myDate.getDate();
       if (month < 10) {
         month = "0" + month;
       }
diff --git a/src/views/statistics/stock.vue b/src/views/statistics/stock.vue
index 7b1d0d7..4b36906 100644
--- a/src/views/statistics/stock.vue
+++ b/src/views/statistics/stock.vue
@@ -5,7 +5,6 @@
       :table-loading="loading"
       :data="data"
       :page.sync="page"
-      :permission="permissionList"
       :before-open="beforeOpen"
       :summary-method="getSummaries"
       v-model="form"
@@ -374,8 +373,7 @@
     ,
     refreshChange() {
       this.onLoad(this.page, this.query);
-    }
-    ,
+    },
     onLoad(page, params = {}) {
       this.loading = true;
       const {releaseTimeRange} = this.query;
diff --git a/src/views/stock/stockmanage.vue b/src/views/stock/stockmanage.vue
index 2ec4356..e366254 100644
--- a/src/views/stock/stockmanage.vue
+++ b/src/views/stock/stockmanage.vue
@@ -950,6 +950,10 @@
     ,
     onLoad(page, params = {}) {
       this.loading = true;
+      var datas = this.$route.query.sid;
+      var type = this.$route.query.type;
+      params.sid=datas;
+      params.stype=type;
       getList(
         page.currentPage,
         page.pageSize,
diff --git a/src/views/stockrecord/stockrecord.vue b/src/views/stockrecord/stockrecord.vue
index f18f775..aa8ee29 100644
--- a/src/views/stockrecord/stockrecord.vue
+++ b/src/views/stockrecord/stockrecord.vue
@@ -241,9 +241,6 @@
       },
       onLoad(page, params = {}) {
         this.loading = true;
-        var datas = this.$route.query.sid;
-        console.log(datas)
-        params.sid=datas;
         getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
           const data = res.data.data;
           this.page.total = data.total;
diff --git a/src/views/task/task.vue b/src/views/task/task.vue
new file mode 100644
index 0000000..ab46058
--- /dev/null
+++ b/src/views/task/task.vue
@@ -0,0 +1,573 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.task_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+      <template slot-scope="{ type, size, row }" slot="menu">
+        <el-button
+          icon="el-icon-circle-plus-outline"
+          @click="chuli(row)"
+          :size="size"
+          :type="type"
+        >处理
+        </el-button
+        >
+      </template>
+    </avue-crud>
+    <el-dialog
+      title="任务处理"
+      :visible.sync="gradeBoxVisiblechuli"
+      width="width"
+      :modal="true"
+      :modal-append-to-body="true"
+      :append-to-body="true"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      :before-close="dialogBeforeClose"
+    >
+      <div>
+        <avue-form
+          ref="formchuli"
+          :option="optionchuli"
+          v-model="formchuli"
+          @reset-change="emptytChange"
+          @submit="submitR"
+        >
+        </avue-form>
+      </div>
+    </el-dialog>
+  </basic-container>
+</template>
+
+<script>
+import {getList, getDetail, add, update, remove} from "@/api/task/task";
+import {mapGetters} from "vuex";
+import {getLandList} from "@/api/land/land";
+
+export default {
+  data() {
+    return {
+      form: {},
+      query: {},
+      formchuli: {},
+      loading: true,
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0
+      },
+      selectionList: [],
+      landList: [],
+      option: {
+        height: 'auto',
+        calcHeight: 30,
+        align: "center",
+        tip: false,
+        searchShow: true,
+        searchMenuSpan: 6,
+        border: true,
+        index: true,
+        viewBtn: true,
+        selection: true,
+        dialogClickModal: false,
+        gradeBoxVisible: false,
+        column: [
+          {
+            label: "任务名称",
+            prop: "taskName",
+            rules: [{
+              required: true,
+              message: "请输入任务名称",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "地块",
+            prop: "landId",
+            type: "tree",
+            hide: true,
+            dicData: [],
+            props: {
+              label: "landName",
+              value: "id"
+            },
+            rules: [{
+              required: true,
+              message: "请输入地块",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "截止时间",
+            prop: "time",
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd",
+            rules: [{
+              required: true,
+              message: "请输入截止时间",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "负责人",
+            prop: "taskUser",
+            type: "tree",
+            dicUrl: `/api/blade-user/user-list`,
+            props: {
+              label: "account",
+              value: "id"
+            },
+            rules: [{
+              required: true,
+              message: "请输入负责人",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "拍照照片",
+            prop: "type",
+            span: 6,
+            type: "switch",
+            dicData: [{
+              label: '开启',
+              value: 0
+            }, {
+              label: '关闭',
+              value: 1
+            }],
+            mock: {
+              type: 'dic'
+            },
+            hide: true,
+            row: true,
+          },
+          {
+            label: "任务说明",
+            prop: "taskExplain",
+            type: "textarea",
+            span: 23,
+            rules: [{
+              required: true,
+              message: "请输入任务说明",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "任务状态",
+            addDisplay: false,
+            editDisplay: false,
+            prop: "status",
+            dicData: [
+              {
+                label: "已完成",
+                value: 0
+              },
+              {
+                label: "处理中",
+                value: 1
+              },
+              {
+                label: "待处理",
+                value: 2
+              }
+            ],
+            span: 23,
+          },
+          {
+            label: "备注",
+            hide:true,
+            addDisplay: false,
+            editDisplay: false,
+            prop: "remark",
+            type: "textarea",
+            span: 23,
+          },
+          {
+            label: "图片",
+            hide:true,
+            prop: "tp",
+            addDisplay: false,
+            editDisplay: false,
+            rules: [{
+              required: true,
+              message: "请输入图片",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "农事操作",
+            hide:true,
+            addDisplay: false,
+            editDisplay: false,
+            prop: "farm",
+            rules: [{
+              required: true,
+              message: "请输入农事操作",
+              trigger: "blur"
+            }]
+          },
+        ]
+      },
+      optionchuli: {
+        height: 'auto',
+        calcHeight: 30,
+        tip: false,
+        searchShow: true,
+        searchMenuSpan: 6,
+        border: true,
+        index: true,
+        viewBtn: true,
+        selection: true,
+        dialogClickModal: false,
+        column: [
+          {
+            label: "农资",
+            prop: "stockId1",
+            span: 23,
+            type: "select",
+            disabled: true,
+            dicUrl: "/api/stockfactory/stockfactory/selectStockFa",
+            props: {
+              label: "dictValue",
+              value: "dictKey"
+            },
+            rules: [{
+              required: true,
+              message: "请输入农资",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "规格",
+            disabled: true,
+            span: 6,
+            prop: "spn",
+            addDisplay: false,
+          },
+          {
+            label: "规格",
+            display: false,
+            hide: true,
+            prop: "specs1",
+            span: 5,
+            viewDisplay: false,
+            rules: [{
+              required: true,
+              message: "请输入规格",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "规格值1",
+            display: false,
+            hide: true,
+            prop: "specsVal1",
+            searchSpan: 4,
+            span: 6,
+            type: "select",
+            dicUrl: "/api/blade-system/dict-biz/dictionary?code=stockSpecs1",
+            props: {
+              label: "dictValue",
+              value: "dictKey"
+            },
+            dataType: "number",
+            search: true,
+          },
+          {
+            label: "类型",
+            display: false,
+            hide: true,
+            prop: "stockType1",
+          },
+          {
+            label: "规格值2",
+            display: false,
+            hide: true,
+            prop: "specsVal2",
+            searchSpan: 4,
+            span: 6,
+            type: "select",
+            dicUrl: "/api/blade-system/dict-biz/dictionary?code=stockSpecs2",
+            props: {
+              label: "dictValue",
+              value: "dictKey"
+            },
+            dataType: "number",
+            search: true,
+          },
+          {
+            label: "当前库存",
+            disabled: true,
+            span: 6,
+            prop: "num",
+          },
+          {
+            label: "入库数量",
+            type: "number",
+            span: 11,
+            prop: "amount1",
+          },
+          {
+            label: "入库类型",
+            prop: "type1",
+            type: "select",
+            span: 12,
+            searchSpan: 4,
+            dicUrl: "/api/blade-system/dict-biz/dictionary?code=stockPurchase",
+            props: {
+              label: "dictValue",
+              value: "dictKey"
+            },
+            dataType: "number",
+            search: true,
+            rules: [{
+              required: true,
+              message: "请输入入库类型",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "入库时间",
+            prop: "time1",
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd",
+            span: 11,
+            rules: [{
+              required: true,
+              message: "请输入入库时间",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: "单据、凭证照片",
+            prop: "picture1",
+            type: "upload",
+            labelWidth: 145,
+            dataType: "string",
+            span: 24,
+            limit: 5,
+            listType: "picture-card",
+            tip: "建议上传手机横屏拍摄的照片,宽高比16:9,最多上传5张",
+            canvasOption: {
+              text: "",
+              ratio: 1.0,
+            },
+            propsHttp: {
+              res: "data",
+              url: "url"
+            },
+            action: "/api/blade-resource/oss/endpoint/put-files"
+          },
+          {
+            label: "备注",
+            type: "textarea",
+            prop: "remarks1",
+            span: 23,
+          },
+        ]
+      },
+      gradeBoxVisiblechuli:false,
+      data: []
+    };
+  },
+  created() {
+    this.initData();
+  },
+  computed: {
+    ...mapGetters(["permission", "userInfo"]),
+    permissionList() {
+      return {
+        addBtn: this.vaildData(this.permission.task_add, false),
+        viewBtn: this.vaildData(this.permission.task_view, false),
+        delBtn: this.vaildData(this.permission.task_delete, false),
+        editBtn: this.vaildData(this.permission.task_edit, false)
+      };
+    },
+    ids() {
+      let ids = [];
+      this.selectionList.forEach(ele => {
+        ids.push(ele.id);
+      });
+      return ids.join(",");
+    }
+  },
+  methods: {
+    //入库
+    submitR(row, done, loading) {
+      that.gradeBoxVisible = false;
+      // var that = this;
+      // add1(row).then(
+      //   () => {
+      //     that.onLoad(this.page);
+      //     that.$refs.formR.resetFields();
+      //     that.$message({
+      //       type: "success",
+      //       message: "操作成功!"
+      //     });
+      //     that.gradeBoxVisible = false;
+      //
+      //     done();
+      //   },
+      //   error => {
+      //     window.console.log(error);
+      //     done();
+      //   }
+      // );
+    },
+    // 处理
+    chuli(row) {
+      this.formchuli = {};
+      this.gradeBoxVisiblechuli = true;
+    },
+    initData() {
+      var that = this;
+      //获取农地数据
+      getLandList(this.userInfo.dept_id).then((res) => {
+        if (res.data.code == 200) {
+          var landIdcolumn = that.findObject(that.option.column, "landId");
+          that.landList = res.data.data;
+          landIdcolumn.dicData = res.data.data;
+        }
+      })
+    },
+    rowSave(row, done, loading) {
+      add(row).then(() => {
+        this.onLoad(this.page);
+        this.$message({
+          type: "success",
+          message: "操作成功!"
+        });
+        done();
+      }, error => {
+        loading();
+        window.console.log(error);
+      });
+    },
+    rowUpdate(row, index, done, loading) {
+      update(row).then(() => {
+        this.onLoad(this.page);
+        this.$message({
+          type: "success",
+          message: "操作成功!"
+        });
+        done();
+      }, error => {
+        loading();
+        console.log(error);
+      });
+    },
+    rowDel(row) {
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          return remove(row.id);
+        })
+        .then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+        });
+    },
+    handleDelete() {
+      if (this.selectionList.length === 0) {
+        this.$message.warning("请选择至少一条数据");
+        return;
+      }
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          return remove(this.ids);
+        })
+        .then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          this.$refs.crud.toggleSelection();
+        });
+    },
+    beforeOpen(done, type) {
+      if (["edit", "view"].includes(type)) {
+        getDetail(this.form.id).then(res => {
+          this.form = res.data.data;
+        });
+      }
+      done();
+    },
+    searchReset() {
+      this.query = {};
+      this.onLoad(this.page);
+    },
+    searchChange(params, done) {
+      this.query = params;
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+    },
+    selectionClear() {
+      this.selectionList = [];
+      this.$refs.crud.toggleSelection();
+    },
+    currentChange(currentPage) {
+      this.page.currentPage = currentPage;
+    },
+    sizeChange(pageSize) {
+      this.page.pageSize = pageSize;
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.query);
+    },
+    onLoad(page, params = {}) {
+      this.loading = true;
+      getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+        const data = res.data.data;
+        this.page.total = data.total;
+        this.data = data.records;
+        this.loading = false;
+        this.selectionClear();
+      });
+    }
+  }
+};
+</script>
+
+<style>
+</style>
diff --git a/src/views/wel/index.vue b/src/views/wel/index.vue
index 3a2e4df..59a2976 100644
--- a/src/views/wel/index.vue
+++ b/src/views/wel/index.vue
@@ -141,13 +141,13 @@
         <div class="title">
           <div class="repertory-title">农资库存</div>
           <div class="detail">
-            <el-link type="success" :underline="false">明细>></el-link>
+            <el-link type="success" :underline="false "@click="stockDetail" >明细>></el-link>
           </div>
         </div>
         <div class="repertory-centont">
-          <div class="detail">
-            <div class="detail-title">肥料</div>
-            <div class="detail-number">剩余库存&nbsp;<span>1</span>公斤</div>
+          <div class="detail" v-for="(item, index) in stockList" :key="index" @click="stockDetails(item)">
+            <div class="detail-title">{{ item.name}}</div>
+            <div class="detail-number">剩余库存&nbsp;<span>{{ item.val}}</span>公斤</div>
           </div>
         </div>
       </div>
@@ -170,6 +170,7 @@
 import { getList, update } from "@/api/farmplant/farmplant";
 import { getFarmingCount, getFarmingStatis } from "@/api/farm/farmingrecord";
 import { selectCount } from "@/api/land/land";
+import {StockCount} from "@/api/stock/stock"
 import recovery from "./recovery.vue";
 import land from "./land.vue";
 import plant from "./plant.vue";
@@ -187,6 +188,7 @@
   data() {
     return {
       farmingList: [],
+      stockList: [],
       isFarmingDetail: false,
       landInfo: {},
       customColor: "#5ABF78",
@@ -216,6 +218,7 @@
     this.getFarmingCount();
     //本年农事操作记录,分组
     this.getFarmingStatis();
+    this.StockCount();
   },
   methods: {
     //本年农事操作记录
@@ -234,6 +237,13 @@
       var that = this;
       getFarmingStatis().then((res) => {
         that.farmingList = res.data.data;
+      });
+    },
+    StockCount() {
+      var that = this;
+      StockCount().then((res) => {
+        that.stockList= res.data.data;
+        console.log(that.stockList)
       });
     },
     //地块使用率统计
@@ -325,6 +335,11 @@
         query: data,
       });
     },
+    stockDetail() {
+      this.$router.push({
+        path: `/stockmanage`,
+      });
+    },
     //本年农事操作明细--有参
     farmPlantDetails(item) {
       console.log(item,11111);
@@ -337,6 +352,32 @@
         query: data,
       });
     },
+    //农资库存点击事件
+    stockDetails(item) {
+      var type;
+      if (item.name=="化肥"){
+        type=0
+      }
+      if (item.name=="有机肥"){
+        type=1
+      }
+      if (item.name=="杀虫剂"){
+        type=2
+      }
+      if (item.name=="杀菌剂"){
+        type=3
+      }
+      if (item.name=="饲料"){
+        type=4
+      }
+      const data = {
+        type:type,
+      };
+      this.$router.push({
+        path: `/stockmanage`,
+        query: data,
+      });
+    },
     //采收记录
     recoveryDetail() {
       const data = {
diff --git a/src/views/wel/land.vue b/src/views/wel/land.vue
index 848753e..80fd86f 100644
--- a/src/views/wel/land.vue
+++ b/src/views/wel/land.vue
@@ -69,6 +69,7 @@
             label: "面积单位",
             prop: "landUnit",
             type: "select",
+            value:"0",
             dicUrl: "/api/blade-system/dict-biz/dictionary?code=landunit",
             props: {
               label: "dictValue",

--
Gitblit v1.9.3