Przeglądaj źródła

批量重量&剩料

Shan9312 9 miesięcy temu
rodzic
commit
3b04d4f31a

+ 2 - 2
.env.development

@@ -3,10 +3,10 @@ ENV = 'development'
 
 # base api
 # 测试线
-VUE_APP_BASE_API = 'http://kpttest.kptyun.com/'
+# VUE_APP_BASE_API = 'http://kpttest.kptyun.com/'
 
 # 白少后台本地
-# VUE_APP_BASE_API = 'http://192.168.1.76:8082/'
+VUE_APP_BASE_API = 'http://192.168.1.79:8081/'
 
 
 # vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,

+ 38 - 17
public/index.html

@@ -1,24 +1,45 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+    <meta
+      name="viewport"
+      content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
+    />
     <!-- <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" /> -->
-    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
-    <title><%= webpackConfig.name %></title>
-  </head>
-  <body>
-    <noscript>
-      <strong>We're sorry but <%= webpackConfig.name %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
-    </noscript>
-    <div id="app"></div>
-    <!-- built files will be auto injected -->
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
+    <title><%= webpackConfig.name %></title>
+    <script>
+      var _hmt = _hmt || [];
+      (function () {
+        var hm = document.createElement("script");
+        hm.src = "https://hm.baidu.com/hm.js?897acab98cbea7f5c2754de8f2cd0f48";
+        var s = document.getElementsByTagName("script")[0];
+        s.parentNode.insertBefore(hm, s);
+        // 自动跟踪所有子域名
+        _hmt.push(["_setAutoPageview", true]);
+        _hmt.push(["_setDomain", ".kptyun.com"]); // 设置主域名
+      })();
+    </script>
+  </head>
+  <body>
+    <noscript>
+      <strong
+        >We're sorry but <%= webpackConfig.name %> doesn't work properly without
+        JavaScript enabled. Please enable it to continue.</strong
+      >
+    </noscript>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
   </body>
-  <script src="//api.tianditu.gov.cn/api?v=4.0&tk=dbb376d009d74e90490af79879f33ef5" type="text/javascript"></script>
+  <script
+    src="//api.tianditu.gov.cn/api?v=4.0&tk=dbb376d009d74e90490af79879f33ef5"
+    type="text/javascript"
+  ></script>
   <script src="//lbs.tianditu.gov.cn/js/lib/jquery/jquery-1.7.2.min.js"></script>
   <script src="//cdn.bootcss.com/d3/3.5.17/d3.js " charset="utf-8"></script>
   <script src="//lbs.tianditu.gov.cn/api/js4.0/opensource/openlibrary/D3SvgOverlay.js"></script>
   <script src="//lbs.tianditu.gov.cn/api/js4.0/opensource/openlibrary/CarTrack.js"></script>
   <!-- <script language="javascript" src="//api.tianditu.gov.cn/js/maps.js"></script> -->
-</html>
+</html>

+ 140 - 88
src/router/index.js

@@ -1,11 +1,18 @@
-import Vue from 'vue'
-import Router from 'vue-router'
+import Vue from "vue";
+import Router from "vue-router";
 
-
-Vue.use(Router)
+Vue.use(Router);
 
 /* Layout */
-import Layout from '@/layout'
+import Layout from "@/layout";
+// import router from "./router";
+
+// router.afterEach((to) => {
+//   // 百度统计:单页面应用手动上报页面访问
+//   if (window._hmt) {
+//     window._hmt.push(["_trackPageview", to.fullPath]);
+//   }
+// });
 
 /**
  * Note: sub-menu only appear when route children.length >= 1
@@ -33,40 +40,71 @@ import Layout from '@/layout'
  */
 export const constantRoutes = [
   {
-    path: '/login',
-    component: () => import('@/views/login/index'),
-    hidden: true
+    path: "/login",
+    component: () => import("@/views/login/index"),
+    hidden: true,
   },
   {
-    path: '/404',
-    component: () => import('@/views/404'),
-    hidden: true
+    path: "/404",
+    component: () => import("@/views/404"),
+    hidden: true,
   },
 
   {
-    path: '/',
+    path: "/",
     component: Layout,
-    redirect: '/dashboard',
-    children: [{
-      path: 'dashboard',
-      name: 'Dashboard',
-      // component: () => import('@/views/dashboard/editor/index'),
-      component: () => import('@/views/dashboard/index'),
-      meta: { title: '首页', icon: '首页', affix: true }
-    }]
+    redirect: "/dashboard",
+    children: [
+      {
+        path: "dashboard",
+        name: "Dashboard",
+        // component: () => import('@/views/dashboard/editor/index'),
+        component: () => import("@/views/dashboard/index"),
+        meta: { title: "首页", icon: "首页", affix: true },
+      },
+    ],
   },
   {
-    path: '/changpwd',
+    path: "/changpwd",
     component: Layout,
-    redirect: '/changpwd',
-    children: [{
-      path: 'changpwd',
-      name: 'Changpwd',
-      component: () => import('@/views/changpwd/changpwd/index'),
-      meta: { title: '修改密码', icon: '修改密码', affix: false }
-    }]
+    redirect: "/changpwd",
+    children: [
+      {
+        path: "changpwd",
+        name: "Changpwd",
+        component: () => import("@/views/changpwd/changpwd/index"),
+        meta: { title: "修改密码", icon: "修改密码", affix: false },
+      },
+    ],
   },
   // {
+  //   path: "/leftoverUse",
+  //   component: Layout,
+  //   redirect: "/leftoverUse",
+  //   children: [
+  //     {
+  //       path: "leftoverUse",
+  //       name: "leftoverUse",
+  //       component: () => import("@/views/basicData/leftoverUse/index.vue"),
+  //       meta: { title: "剩料使用", icon: "撒料计划" },
+  //     },
+  //   ],
+  // },
+  // {
+  //   path: "/leftoverManagement",
+  //   component: Layout,
+  //   redirect: "/leftoverManagement",
+  //   children: [
+  //     {
+  //       path: "leftoverManagement",
+  //       name: "leftoverManagement",
+  //       component: () =>
+  //         import("@/views/basicData/leftoverManagement/index.vue"),
+  //       meta: { title: "剩料配置", icon: "撒料计划" },
+  //     },
+  //   ],
+  // },
+  // {
   //   path: '/drawDot',
   //   component: Layout,
   //   redirect: '/drawDot',
@@ -77,7 +115,7 @@ export const constantRoutes = [
   //     meta: { title: '画点图',icon: '撒料计划'}
   //   }]
   // },
-]
+];
 
 /**
  * asyncRoutes
@@ -85,95 +123,109 @@ export const constantRoutes = [
  */
 export const asyncRoutes = [
   {
-    path: '/nested',
+    path: "/nested",
     component: Layout,
-    redirect: '/nested/menu1',
-    name: 'Nested',
+    redirect: "/nested/menu1",
+    name: "Nested",
     meta: {
-      title: 'Nested',
-      icon: 'nested'
+      title: "Nested",
+      icon: "nested",
     },
     children: [
       {
-        path: 'menu1',
-        component: () => import('@/views/nested/menu1/index'), // Parent router-view
-        name: 'Menu1',
-        meta: { title: 'Menu1' },
+        path: "menu1",
+        component: () => import("@/views/nested/menu1/index"), // Parent router-view
+        name: "Menu1",
+        meta: { title: "Menu1" },
         children: [
           {
-            path: 'menu1-1',
-            component: () => import('@/views/nested/menu1/menu1-1'),
-            name: 'Menu1-1',
-            meta: { title: 'Menu1-1' }
+            path: "menu1-1",
+            component: () => import("@/views/nested/menu1/menu1-1"),
+            name: "Menu1-1",
+            meta: { title: "Menu1-1" },
           },
           {
-            path: 'menu1-2',
-            component: () => import('@/views/nested/menu1/menu1-2'),
-            name: 'Menu1-2',
-            meta: { title: 'Menu1-2' },
+            path: "menu1-2",
+            component: () => import("@/views/nested/menu1/menu1-2"),
+            name: "Menu1-2",
+            meta: { title: "Menu1-2" },
             children: [
               {
-                path: 'menu1-2-1',
-                component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'),
-                name: 'Menu1-2-1',
-                meta: { title: 'Menu1-2-1' }
+                path: "menu1-2-1",
+                component: () =>
+                  import("@/views/nested/menu1/menu1-2/menu1-2-1"),
+                name: "Menu1-2-1",
+                meta: { title: "Menu1-2-1" },
               },
               {
-                path: 'menu1-2-2',
-                component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'),
-                name: 'Menu1-2-2',
-                meta: { title: 'Menu1-2-2' }
-              }
-            ]
+                path: "menu1-2-2",
+                component: () =>
+                  import("@/views/nested/menu1/menu1-2/menu1-2-2"),
+                name: "Menu1-2-2",
+                meta: { title: "Menu1-2-2" },
+              },
+            ],
           },
           {
-            path: 'menu1-3',
-            component: () => import('@/views/nested/menu1/menu1-3'),
-            name: 'Menu1-3',
-            meta: { title: 'Menu1-3' }
-          }
-        ]
+            path: "menu1-3",
+            component: () => import("@/views/nested/menu1/menu1-3"),
+            name: "Menu1-3",
+            meta: { title: "Menu1-3" },
+          },
+        ],
       },
       {
-        path: 'menu2',
-        component: () => import('@/views/nested/menu2/index'),
-        meta: { title: 'menu2' }
-      }
-
-    ]
+        path: "menu2",
+        component: () => import("@/views/nested/menu2/index"),
+        meta: { title: "menu2" },
+      },
+    ],
   },
 
   {
-    path: 'external-link',
+    path: "external-link",
     component: Layout,
     children: [
       {
-        path: 'https://panjiachen.github.io/vue-element-admin-site/#/',
-        meta: { title: 'External Link', icon: 'link' }
-      }
-    ]
+        path: "https://panjiachen.github.io/vue-element-admin-site/#/",
+        meta: { title: "External Link", icon: "link" },
+      },
+    ],
   },
   // 404 page must be placed at the end !!!
-  { path: '*', redirect: '/404', hidden: true }
-]
+  { path: "*", redirect: "/404", hidden: true },
+];
 
-const createRouter = () => new Router({
-  // mode: 'history', // require service support
-  scrollBehavior: () => ({ y: 0 }),
-  routes: constantRoutes
-})
+const createRouter = () =>
+  new Router({
+    // mode: 'history', // require service support
+    scrollBehavior: () => ({ y: 0 }),
+    routes: constantRoutes,
+  });
 
-const router = createRouter()
+const router = createRouter();
+
+router.afterEach((to, from) => {
+  // 百度统计:单页面应用手动上报页面访问
+  console.log(window._hmt, "0");
+  if (window._hmt) {
+    console.log(window._hmt, "0->1");
+    const referrer = from.fullPath || "direct";
+    window._hmt.push(["_trackPageview", to.fullPath]);
+    window._hmt.push(["_trackEvent", "Navigation", "Referrer", referrer]);
+  }
+});
 
 // Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
 export function resetRouter() {
-  const newRouter = createRouter()
-  router.matcher = newRouter.matcher // reset router
+  const newRouter = createRouter();
+  router.matcher = newRouter.matcher; // reset router
 }
-const originalPush = Router.prototype.push
+const originalPush = Router.prototype.push;
 Router.prototype.push = function push(location, onResolve, onReject) {
-  if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
-  return originalPush.call(this, location).catch(err => err)
-}
+  if (onResolve || onReject)
+    return originalPush.call(this, location, onResolve, onReject);
+  return originalPush.call(this, location).catch((err) => err);
+};
 
-export default router
+export default router;

+ 3 - 3
src/utils/request.js

@@ -17,9 +17,9 @@ var browserUrl = window.location.hostname;
 // console.log("========url===",reg.test(browserUrl))
 //  内网跳转公司需要加这块代码
 // 注意: 端口号后面加’/‘ 防止导出报错 如:‘:8081/’
-if (reg.test(browserUrl)) {
-  URL = window.location.protocol + "//" + browserUrl + ":8081/";
-}
+// if (reg.test(browserUrl)) {
+//   URL = window.location.protocol + "//" + browserUrl + ":8081/";
+// }
 
 Cookies.set("url", URL);
 console.log(process.env.VUE_APP_BASE_API, "===========URL1111");

+ 1478 - 0
src/views/basicData/leftoverUse/index.vue

@@ -0,0 +1,1478 @@
+<template>
+  <div class="app-container">
+    <div class="search">
+      <el-date-picker
+        v-model="table.getdataListParm.parammaps.inputDatetime"
+        class="inputDatetime filter-item"
+        type="daterange"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期"
+        style="width: 250px"
+      />
+      <!-- <el-button class="el-icon-arrow-left elIconArrowLeft" @click="handleBefore" />
+      <el-button class="el-icon-arrow-right elIconArrowRight" @click="handleNext" />
+      <el-select v-model="table.getdataListParm.parammaps.ftid" filterable placeholder="栏舍名称" class="filter-item" style="width: 120px;" clearable>
+        <el-option v-for="item in houseNameList" :key="item.id" :label="item.bname" :value="item.id" />
+      </el-select>
+      <el-select v-model="record" filterable placeholder="记录" class="filter-item" style="width: 150px;" @change="changeRecord">
+        <el-option v-for="item in recordList" :key="item.id" :label="item.name" :value="item.id" />
+      </el-select>
+      <el-select v-if="record== '1'" v-model="table.getdataListParm.parammaps.eqcode" filterable placeholder="TMR编号" class="filter-item" style="width: 120px;" clearable>
+        <el-option v-for="item in TMRNumberList" :key="item.id" :label="item.tname" :value="item.eqcode" />
+      </el-select> -->
+      <el-button class="successBorder" @click="form_search">查询</el-button>
+      <!-- <el-button class="successBorder" @click="handleRefresh">重置</el-button> -->
+    </div>
+    <div class="operation" v-if="record == '0'">
+      <el-button
+        v-if="isRoleEdit"
+        icon="el-icon-plus"
+        class="success"
+        @click="handleCreate"
+        >新增</el-button
+      >
+      <el-button
+        v-if="isRoleEdit"
+        icon="el-icon-delete"
+        class="danger"
+        @click="form_delete"
+        >删除</el-button
+      >
+      <el-button
+        v-if="isRoleEdit"
+        class="success"
+        icon="el-icon-upload2"
+        @click="handleSAPUpload"
+        >SAP上传</el-button
+      >
+      <!-- <el-button v-if="dataSynchronization.isDataSynchronization && isRoleEdit" class="success" @click="handleDataUpload">数据上传</el-button>
+      <el-upload v-if="isRoleEdit" style="float: right;" :headers="headers" :data="uploadData" :action="uploadExcelUrl" :show-file-list="false" :before-upload="beforeImport" :on-success="handleImportSuccess">
+        <el-button class="import" icon="el-icon-download" style="float: right;">导入</el-button>
+      </el-upload>
+      <el-dropdown style="float: right;margin-right: 10px;">
+        <el-button class="export" icon="el-icon-upload2">导出</el-button>
+        <el-dropdown-menu slot="dropdown">
+          <el-dropdown-item  @click.native="handleExport(1)">导出模板</el-dropdown-item>
+          <el-dropdown-item @click.native="handleExport(2)">导出数据</el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown> -->
+    </div>
+    <div class="operation" v-else>
+      <el-button
+        v-if="dataSynchronization.isDataSynchronization && isRoleEdit"
+        class="success"
+        @click="handleDataUpload"
+        >数据上传</el-button
+      >
+      <el-button
+        style="float: right; margin-right: 10px"
+        class="export"
+        icon="el-icon-upload2"
+        @click="handleExport(3)"
+        >导出</el-button
+      >
+    </div>
+    <!-- 剩料使用 table -->
+    <div class="table">
+      <el-table
+        :key="table.tableKey"
+        v-loading="table.listLoading"
+        element-loading-text="给我一点时间"
+        :data="table.list"
+        border
+        fit
+        highlight-current-row
+        style="width: 100%"
+        :row-style="rowStyle"
+        :cell-style="cellStyle"
+        class="elTable table-fixed"
+        :header-cell-style="{ 'text-align': 'center' }"
+        @selection-change="handleSelectionChange"
+        :max-height="myHeight"
+      >
+        <el-table-column type="selection" align="left" width="50" />
+        <el-table-column label="序号" align="left" type="index" width="50px">
+          <template slot-scope="scope">
+            <span>{{
+              scope.$index + (table.pageNum - 1) * table.pageSize + 1
+            }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="栏舍名称"
+          min-width="120px"
+          align="left"
+          prop="barname"
+        />
+        <el-table-column
+          label="配方名称"
+          min-width="120px"
+          align="left"
+          prop="ftname"
+        />
+        <el-table-column
+          label="剩料使用时间"
+          min-width="150px"
+          align="left"
+          prop="date"
+        />
+        <el-table-column
+          label="班次"
+          min-width="90px"
+          align="left"
+          prop="timesstr"
+        />
+        <el-table-column
+          label="替代方案"
+          min-width="100px"
+          align="left"
+          prop="surplus"
+        />
+        <el-table-column
+          label="替代重量(Kg)"
+          min-width="100px"
+          align="left"
+          prop="weight"
+        />
+        <el-table-column
+          label="操作"
+          align="left"
+          width="100"
+          class-name="small-padding fixed-width"
+          fixed="right"
+        >
+          <template slot-scope="{ row }">
+            <!-- <el-button v-if="isRoleEdit" :disabled="row.emp == '设备采集'" class="miniSuccess" icon="el-icon-edit-outline" @click="handleUpdate(row)" />
+            <span v-if="isRoleEdit" class="centerSpan">|</span> -->
+            <el-button
+              v-if="isRoleEdit"
+              :disabled="row.emp == '设备采集'"
+              class="miniDanger"
+              icon="el-icon-delete"
+              @click="handleRowDelete(row)"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        v-show="table.total >= 0"
+        :total="table.total"
+        :page.sync="table.getdataListParm.offset"
+        :limit.sync="table.getdataListParm.pagecount"
+        @pagination="getList"
+      />
+    </div>
+
+    <!-- 新增/编辑 -->
+    <el-dialog
+      :fullscreen="dialogFull"
+      :visible.sync="create.dialogFormVisible"
+      :close-on-click-modal="false"
+      v-if="create.dialogFormVisible"
+      width="40%"
+    >
+      <template slot="title">
+        <div class="avue-crud__dialog__header">
+          <span class="el-dialog__title">
+            <span
+              style="
+                display: inline-block;
+                width: 3px;
+                height: 20px;
+                margin-right: 5px;
+                float: left;
+                margin-top: 2px;
+              "
+            />
+            {{ textMap[create.dialogStatus] }}
+          </span>
+          <div
+            class="avue-crud__dialog__menu"
+            @click="dialogFull ? (dialogFull = false) : (dialogFull = true)"
+          >
+            <svg-icon v-if="dialogFull" icon-class="exit-fullscreen" />
+            <svg-icon v-else icon-class="fullscreen" />
+          </div>
+        </div>
+      </template>
+      <div class="app-add">
+        <el-form
+          ref="temp"
+          :rules="create.rules"
+          :model="create.temp"
+          label-position="right"
+          label-width="135px"
+          style="width: 90%; margin: 0 auto 50px"
+        >
+          <el-row v-if="create.dialogStatus == 'create'">
+            <el-col :span="20">
+              <el-form-item label="栏舍名称:" prop="barid">
+                <el-select
+                  ref="ftid"
+                  v-model="create.temp.barid"
+                  :disabled="create.dialogStatus == 'update'"
+                  filterable
+                  placeholder="栏舍名称"
+                  class="filter-item"
+                  style="width: 100%"
+                  @change="changeBar"
+                >
+                  <el-option
+                    v-for="item in houseNameList"
+                    :key="item.id"
+                    :label="item.bname"
+                    :value="item.id"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row v-else>
+            <el-col :span="20">
+              <el-form-item label="栏舍名称:" prop="barname">
+                <el-input
+                  ref="barname"
+                  v-model="create.temp.barname"
+                  disabled
+                  class="filter-item"
+                  placeholder=""
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <!-- TODO: -->
+          <el-row>
+            <el-col :span="20">
+              <el-form-item label="配方名称:">
+                <el-input
+                  v-model="create.temp.ftname"
+                  class="filter-item"
+                  placeholder="配方名称"
+                  disabled
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="20">
+              <el-form-item label="剩料使用时间:" prop="date">
+                <el-date-picker
+                  v-model="create.temp.date"
+                  type="date"
+                  value-format="yyyy-MM-dd"
+                  style="width: 100%"
+                  :picker-options="pickerOptions"
+                  placeholder="剩料使用时间"
+                >
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="20">
+              <el-form-item label="班次:">
+                <el-select
+                  ref="times"
+                  v-model="create.temp.times"
+                  filterable
+                  placeholder="班次"
+                  :disabled="create.dialogStatus == 'update'"
+                  class="filter-item"
+                  style="width: 100%"
+                >
+                  <el-option
+                    v-for="item in frequencyList"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <!--  -->
+          <el-row>
+            <el-col :span="20">
+              <el-form-item label="替代方案:" prop="surplus">
+                <el-select
+                  style="width: 100%"
+                  v-model="create.temp.surplus"
+                  filterable
+                  clearable
+                  placeholder="替代方案"
+                  class="filter-item"
+                  @change="handlegetSurplus"
+                >
+                  <el-option
+                    v-for="item in tableData"
+                    :key="item.id"
+                    :label="item.surplus"
+                    :value="item.surplus"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="20">
+              <el-form-item label="替代重量(Kg):" prop="weight">
+                <el-input
+                  ref="weight"
+                  v-model="create.temp.weight"
+                  class="filter-item"
+                  placeholder="替代重量"
+                  type="number"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button
+            class="cancelClose"
+            @click="
+              create.dialogFormVisible = false;
+              getList();
+            "
+            >关闭</el-button
+          >
+          <el-button
+            v-if="
+              create.dialogStatus === 'create' ||
+              create.dialogStatus === 'update'
+            "
+            class="save"
+            :disabled="isokDisable"
+            @click="
+              create.dialogStatus === 'create' ? createData() : updateData()
+            "
+            >确认</el-button
+          >
+        </div>
+      </div>
+    </el-dialog>
+
+    <!-- sap上传 -->
+    <el-dialog
+      title="SAP上传"
+      :destroy-on-close="true"
+      :visible.sync="sapUpload.dialogFormVisible"
+      :close-on-click-modal="false"
+      width="40%"
+    >
+      <div class="sapUpload">
+        <el-form
+          ref="sapUpload"
+          :rules="sapUpload.rules"
+          :model="sapUpload.temp"
+          label-position="right"
+          label-width="100px"
+          style="width: 100%; margin: 0 auto 50px"
+        >
+          <el-row>
+            <el-col :span="24">
+              <el-form-item label="时间:" prop="date">
+                <el-date-picker
+                  v-model="sapUpload.temp.date"
+                  :clearable="false"
+                  class="filter-item"
+                  type="date"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <div slot="footer" class="dialog-footer" style="bottom: 20px">
+          <el-button
+            class="cancelClose"
+            @click="
+              sapUpload.dialogFormVisible = false;
+              getList();
+            "
+            >取消</el-button
+          >
+          <el-button
+            class="save"
+            :disabled="isokDisable"
+            @click="sapUploadData()"
+            >确认</el-button
+          >
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  GetDataByName,
+  PostDataByName,
+  getSurplus,
+  GetDataByNames,
+  checkButtons,
+  postJson2,
+  postJson,
+} from "@/api/common";
+import Cookies from "js-cookie";
+import { parseTime, json2excel } from "@/utils/index.js";
+import Pagination from "@/components/Pagination";
+import { MessageBox } from "element-ui";
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+export default {
+  name: "MaterialRemainingRecord",
+  components: { Pagination },
+  data() {
+    return {
+      pickerOptions: {
+        disabledDate(time) {
+          return time.getTime() > Date.now() - 8.64e6; //如果没有后面的-8.64e6就是不可以选择今天的
+        },
+      },
+      enterTime: "",
+      tableData: [],
+      sapUpload: {
+        dialogFormVisible: false,
+        dialogStatus: "",
+        temp: {
+          date: parseTime(new Date(), "{y}-{m}-{d}"),
+        },
+        rules: {
+          date: [
+            { required: true, message: "原剩料所属时间必填", trigger: "blur" },
+          ],
+        },
+        getdataListParm: {
+          name: "getSysoptEnable",
+          page: 1,
+          offset: 1,
+          pagecount: 1,
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            inforname: "sapupload",
+          },
+        },
+        isSap: false,
+      },
+      dialogFull: false,
+      isRoleEdit: [],
+      getParmas: {
+        name: "getFPList",
+        page: 1,
+        offset: 1,
+        pagecount: 0,
+        returntype: "Map",
+        parammaps: {
+          pastureid: Cookies.get("pastureid"),
+          ftname: "",
+        },
+      },
+      requestParams: [
+        {
+          name: "getBarListEnable",
+          offset: 0,
+          pagecount: 0,
+          parammaps: { pastureid: Cookies.get("pastureid") },
+        },
+        {
+          name: "getSysoptEnable",
+          offset: 0,
+          pagecount: 0,
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            inforname: "times",
+          },
+        },
+        {
+          name: "getTMRListEnableType",
+          offset: 0,
+          pagecount: 0,
+          parammaps: { pastureid: Cookies.get("pastureid"), eqtype: "1" },
+        },
+      ],
+      houseNameList: [], // 栏舍名称
+      frequencyList: [], // 收集
+      recordList: [
+        { id: "0", name: "手动记录" },
+        { id: "1", name: "TMR设备自动记录" },
+      ],
+      record: "0",
+      table: {
+        getdataListParm: {
+          name: "getWasteuse",
+          page: 1,
+          offset: 1,
+          pagecount: parseInt(Cookies.get("pageCount")),
+          returntype: "Map",
+          parammaps: {
+            pastureId: Cookies.get("pastureid"),
+            ftid: "",
+            startdate: "",
+            enddate: "",
+            inputDatetime: "",
+          },
+        },
+        tableKey: 0,
+        list: [],
+        total: 0,
+        listLoading: true,
+        temp: {},
+        tableKey2: 0,
+        listLoading2: false,
+        list2: [],
+      },
+
+      // 新增/编辑
+      create: {
+        dialogFormVisible: false,
+        dialogStatus: "",
+        temp: {
+          pastureId: Cookies.get("pastureid"),
+          operatetime: parseTime(new Date(), "{y}-{m}-{d} {h}:{i}"),
+          emp: Cookies.get("employename"),
+          ftid: "",
+          ftname: "",
+          weight: "",
+          times: "1",
+          surplusId: "",
+          surplus: "",
+        },
+        rules: {
+          ftid: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+          weight: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+          times: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+          ftname: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+          surplus: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+          date: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+          barid: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+        },
+        getdataListParm: {
+          name: "getBarfeedremainEmpHis",
+          page: 1,
+          offset: 1,
+          pagecount: 10,
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+          },
+        },
+        noteTakerList: [], // 记录人
+      },
+      textMap: {
+        create: "新增",
+        update: "编辑",
+      },
+
+      requestParam: {},
+      download: {
+        getdataListParm: {
+          name: "getBarfeedremainList",
+          page: 1,
+          offset: 1,
+          pagecount: 0,
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            ftid: "",
+            startdate: "",
+            enddate: "",
+            inputDatetime: "",
+          },
+        },
+        list: [],
+      },
+      dataSynchronization: {
+        dialogFormVisible: false,
+        dialogStatus: "",
+        getdataListParm: {
+          name: "getSysoptEnable",
+          page: 1,
+          offset: 1,
+          pagecount: 1,
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            inforname: "wgSap",
+          },
+        },
+        isDataSynchronization: false,
+      },
+      isokDisable: false,
+      selectList: [],
+      rowStyle: { maxHeight: 30 + "px", height: 30 + "px" },
+      cellStyle: { padding: 0 + "px" },
+      myHeight: document.documentElement.clientHeight - 85 - 150 - 45,
+      url: "authdata/ImportExcel",
+    };
+  },
+  computed: {
+    // 设置请求头
+    headers() {
+      return {
+        token: getToken(),
+      };
+    },
+    uploadData() {
+      return {
+        name: "checkbarname,checktimes,insertBarfeedremainUpload",
+        importParams:
+          "栏舍名称,配方名称,原剩料所属时间,剩料量(kg),干物质,班次收集(一天/第一班/第二班/第三班),收集时间,操作人",
+        sheetname: "Sheet1",
+        // 登录牧场
+        pastureid: Cookies.get("pastureid"),
+        // 日期参数
+        dateParams: "原剩料所属时间",
+        // 必填参数
+        requiredParams:
+          "栏舍名称,剩料量(kg),班次收集(一天/第一班/第二班/第三班)",
+        // 为数值的参数
+        numParams: "剩料量(kg)",
+      };
+    },
+    // 设置上传地址
+    uploadExcelUrl() {
+      // return Cookies.get('url') + 'authdata/ImportExcel'
+      return Cookies.get("url") + "authdata/ImportExcel";
+    },
+    // let url = 'authdata/ImportExcel';
+  },
+  created() {
+    console.log(document.querySelector("html").getAttribute("domain"), "7777");
+    this.getDataSynchronization();
+    this.getList();
+    this.getDownList();
+    this.getButtons();
+    this.getLeftTable();
+  },
+  mounted() {
+    this.$nextTick(() => {
+      this.enterTime = Date.now();
+    });
+  },
+  beforeUnmount() {
+    const stayTime = Math.round((Date.now() - this.enterTime) / 1000);
+    window._hmt?.push([
+      "_trackEvent",
+      "PageStay",
+      "Duration",
+      this.$route.path,
+      stayTime,
+    ]);
+  },
+  methods: {
+    // 获取剩料列表
+    async getLeftTable() {
+      const { data } = await getSurplus(Cookies.get("pastureid"));
+      console.log(data, "table");
+      this.tableData = data;
+    },
+    // 获取替代方案的名字
+    handlegetSurplus(val) {
+      const id = this.tableData.find((item) => {
+        return item.surplus == val;
+      }).id;
+      this.create.temp.surplusId = id;
+      console.log(id, "surplus");
+    },
+    // 点击sap上传
+    handleSAPUpload() {
+      this.sapUpload.dialogStatus = "sapUpload";
+      this.sapUpload.dialogFormVisible = true;
+    },
+    sapUploadData() {
+      this.$refs["sapUpload"].validate((valid) => {
+        if (valid) {
+          const url = "authdata/xdmy/sap/wasteuse";
+          const data = {
+            pastureId: Cookies.get("pastureid"),
+            date: parseTime(this.sapUpload.temp.date, "{y}-{m}-{d}"),
+          };
+          const loading = this.$loading({
+            lock: true,
+            text: "Loading",
+            spinner: "el-icon-loading",
+            background: "rgba(0, 0, 0, 0.7)",
+          });
+
+          postJson(url, data).then((response) => {
+            setTimeout(() => {
+              loading.close();
+            }, 1000);
+            if (response.msg == "ok") {
+              this.$notify({
+                title: "",
+                message: "成功",
+                type: "success",
+                duration: 2000,
+              });
+              this.sapUpload.dialogFormVisible = false;
+              this.getList();
+            } else {
+              this.$notify({
+                title: "失败",
+                message: response.data,
+                type: "warning",
+                duration: 2000,
+              });
+            }
+          });
+        }
+      });
+    },
+
+    getDataSynchronization() {
+      GetDataByName(this.dataSynchronization.getdataListParm).then(
+        (response) => {
+          // console.log(response.data.list[0])
+          if (response.data.list && response.data.list[0].inforvalue == 0) {
+            this.dataSynchronization.isDataSynchronization = false;
+          } else {
+            this.dataSynchronization.isDataSynchronization = true;
+          }
+        }
+      );
+    },
+    getButtons() {
+      const Edit = "MaterialRemainingRecord";
+      const isRoleEdit = checkButtons(
+        JSON.parse(sessionStorage.getItem("buttons")),
+        Edit
+      );
+      this.isRoleEdit = isRoleEdit;
+    },
+    getDownList() {
+      GetDataByNames(this.requestParams).then((response) => {
+        this.houseNameList = response.data.getBarListEnable.list;
+        this.TMRNumberList = response.data.getTMRListEnableType.list;
+        if (response.data.getSysoptEnable.list !== null) {
+          for (
+            let i = 1;
+            i <= response.data.getSysoptEnable.list[0].inforvalue;
+            i++
+          ) {
+            const obj = {};
+            obj.id = String(i);
+            if (i == 1) {
+              obj.name = "第一班";
+            } else if (i == 2) {
+              obj.name = "第二班";
+            } else if (i == 3) {
+              obj.name = "第三班";
+            } else if (i == 4) {
+              obj.name = "第四班";
+            } else if (i == 5) {
+              obj.name = "第五班";
+            } else if (i == 6) {
+              obj.name = "第六班";
+            }
+            this.frequencyList.push(obj);
+          }
+          // this.frequencyList.unshift({id:'0',name:"一天"})
+        } else {
+          this.frequencyList = [];
+        }
+      });
+    },
+    handleBefore() {
+      if (
+        this.table.getdataListParm.parammaps.inputDatetime !== "" &&
+        this.table.getdataListParm.parammaps.inputDatetime !== null
+      ) {
+        var start = new Date(
+          this.table.getdataListParm.parammaps.inputDatetime[0].setDate(
+            this.table.getdataListParm.parammaps.inputDatetime[0].getDate() - 1
+          )
+        );
+        var stop = new Date(
+          this.table.getdataListParm.parammaps.inputDatetime[1].setDate(
+            this.table.getdataListParm.parammaps.inputDatetime[1].getDate() - 1
+          )
+        );
+        this.table.getdataListParm.parammaps.inputDatetime.length = 0;
+        this.table.getdataListParm.parammaps.inputDatetime.push(start, stop);
+        this.$forceUpdate();
+      }
+    },
+    handleNext() {
+      if (
+        this.table.getdataListParm.parammaps.inputDatetime !== "" &&
+        this.table.getdataListParm.parammaps.inputDatetime !== null
+      ) {
+        var start = new Date(
+          this.table.getdataListParm.parammaps.inputDatetime[0].setDate(
+            this.table.getdataListParm.parammaps.inputDatetime[0].getDate() + 1
+          )
+        );
+        var stop = new Date(
+          this.table.getdataListParm.parammaps.inputDatetime[1].setDate(
+            this.table.getdataListParm.parammaps.inputDatetime[1].getDate() + 1
+          )
+        );
+        this.table.getdataListParm.parammaps.inputDatetime.length = 0;
+        this.table.getdataListParm.parammaps.inputDatetime.push(start, stop);
+        this.$forceUpdate();
+      }
+    },
+
+    getList() {
+      this.table.listLoading = true;
+      if (
+        this.table.getdataListParm.parammaps.inputDatetime !== "" &&
+        this.table.getdataListParm.parammaps.inputDatetime !== null
+      ) {
+        this.table.getdataListParm.parammaps.startdate = parseTime(
+          this.table.getdataListParm.parammaps.inputDatetime[0],
+          "{y}-{m}-{d}"
+        );
+        this.table.getdataListParm.parammaps.enddate = parseTime(
+          this.table.getdataListParm.parammaps.inputDatetime[1],
+          "{y}-{m}-{d}"
+        );
+      } else {
+        this.table.getdataListParm.parammaps.inputDatetime = "";
+        this.table.getdataListParm.parammaps.startdate = "";
+        this.table.getdataListParm.parammaps.enddate = "";
+      }
+      GetDataByName(this.table.getdataListParm).then((response) => {
+        console.log("table数据", response.data.list);
+        if (response.data.list !== null) {
+          this.table.list = response.data.list;
+          this.table.pageNum = response.data.pageNum;
+          this.table.pageSize = response.data.pageSize;
+          this.table.total = response.data.total;
+        } else {
+          this.table.list = [];
+        }
+        setTimeout(() => {
+          this.table.listLoading = false;
+        }, 100);
+      });
+    },
+    changeRecord(item) {
+      if (item == "0") {
+        this.table.getdataListParm.name = "getBarfeedremainList";
+      } else {
+        this.table.getdataListParm.name = "getRemainplanrecord";
+      }
+      this.table.getdataListParm.offset = 1;
+      this.getList();
+    },
+    form_search() {
+      console.log("点击了查询");
+      this.table.getdataListParm.offset = 1;
+      this.getList();
+    },
+    handleRefresh() {
+      console.log("点击了重置");
+      this.table.getdataListParm.parammaps.ftid = "";
+      this.table.getdataListParm.parammaps.startdate = "";
+      this.table.getdataListParm.parammaps.enddate = "";
+      this.table.getdataListParm.parammaps.inputDatetime = "";
+      this.table.getdataListParm.offset = 1;
+      this.getList();
+    },
+
+    // 新增
+    resetTemp() {
+      this.create.temp = {
+        pastureId: Cookies.get("pastureid"),
+        operatetime: parseTime(new Date(), "{y}-{m}-{d} {h}:{i}"),
+        emp: Cookies.get("employename"),
+        ftid: "",
+        ftname: "",
+        weight: "",
+        times: "1",
+        date: "",
+      };
+    },
+    blurEmp(item) {
+      this.create.temp.emp = item.target.value;
+    },
+    // 栏舍名称
+    changeBar(item) {
+      this.create.temp.ftname = this.houseNameList.find(
+        (obj) => obj.id === item
+      ).bname;
+      this.create.temp.ftid = item;
+      this.getParmas.parammaps.barid = item;
+      this.chooseftname();
+    },
+    // 根据栏舍选择配方名称
+    chooseftname() {
+      GetDataByName(this.getParmas).then((res) => {
+        const { data } = res;
+        const ftname = data.list.length && data.list[0].ftname;
+        this.$set(this.create.temp, "ftname", ftname);
+        // this.create.temp.ftname = ftname;
+        console.log(this.create.temp.ftname, ftname, "配方名字");
+      });
+    },
+
+    getNoteTakerList() {
+      GetDataByName(this.create.getdataListParm).then((response) => {
+        if (response.data.list !== null) {
+          for (let i = 0; i < response.data.list.length; i++) {
+            response.data.list[i].myId = i;
+          }
+          this.create.noteTakerList = response.data.list;
+          console.log("记录人数据", response.data.list);
+          console.log(this.create.noteTakerList);
+        } else {
+          this.create.noteTakerList = [];
+        }
+      });
+    },
+    handleCreate() {
+      console.log("点击了新增", this.create);
+
+      this.dialogFull = false;
+      this.resetTemp();
+      this.getNoteTakerList();
+      this.create.dialogStatus = "create";
+      this.create.dialogFormVisible = true;
+    },
+    createData() {
+      console.log("点击了新增保存");
+      console.log(this.create.temp, "发送数据");
+      this.isokDisable = true;
+      setTimeout(() => {
+        this.isokDisable = false;
+      }, 1000);
+      this.$refs["temp"].validate((valid) => {
+        if (valid) {
+          this.isokDisable = true;
+          setTimeout(() => {
+            this.isokDisable = false;
+          }, 1000);
+          const weight = /^\d+(\.\d{1,2})?$/;
+          // 剩料量
+          if (!weight.test(parseFloat(this.create.temp.weight))) {
+            this.$message({
+              type: "error",
+              message: "剩料量请输入自然数并保留两位小数",
+              duration: 2000,
+            });
+            return false;
+          }
+          this.requestParam.name = "insertWasteuse";
+          this.requestParam.parammaps = this.create.temp;
+
+          if (this.create.temp.emp == "") {
+            this.create.temp.emp = Cookies.get("employename");
+          }
+          console.log("新增保存发送参数", this.requestParam);
+          PostDataByName(this.requestParam).then((response) => {
+            if (response.msg !== "fail") {
+              this.$notify({
+                title: "成功",
+                message: "保存成功",
+                type: "success",
+                duration: 2000,
+              });
+              this.create.dialogFormVisible = false;
+              this.getList();
+            } else {
+              const ftid = new RegExp("key 'ftid'");
+              if (ftid.test(response.data)) {
+                this.$message({
+                  type: "error",
+                  message: "该栏舍该班次收集今日剩料量已存在,不可重复生成",
+                  duration: 2000,
+                });
+              } else {
+                this.$notify({
+                  title: "保存失败",
+                  message: response.data,
+                  type: "warning",
+                  duration: 2000,
+                });
+              }
+            }
+          });
+        }
+      });
+    },
+
+    // 编辑
+    handleUpdate(row) {
+      console.log("点击了编辑", row);
+      console.log(this.frequencyList, "frequencyList");
+      this.dialogFull = false;
+      row.ftid = String(row.ftid);
+      this.create.temp = Object.assign({}, row);
+      this.create.temp.id = row.id;
+
+      this.getNoteTakerList();
+      this.create.dialogStatus = "update";
+      this.create.dialogFormVisible = true;
+    },
+    updateData() {
+      this.isokDisable = true;
+      setTimeout(() => {
+        this.isokDisable = false;
+      }, 1000);
+      this.$refs["temp"].validate((valid) => {
+        if (valid) {
+          this.isokDisable = true;
+          setTimeout(() => {
+            this.isokDisable = false;
+          }, 1000);
+          const weight = /^\d+(\.\d{1,2})?$/;
+          // 剩料量
+          if (!weight.test(parseFloat(this.create.temp.weight))) {
+            this.$message({
+              type: "error",
+              message: "剩料量请输入自然数并保留两位小数",
+              duration: 2000,
+            });
+            return false;
+          }
+          this.requestParam.name = "editWasteuse";
+          this.requestParam.parammaps = this.create.temp;
+          if (this.create.temp.emp == "") {
+            this.create.temp.emp = Cookies.get("employename");
+          }
+          PostDataByName(this.requestParam).then((response) => {
+            console.log("新增保存发送参数", this.requestParam);
+            if (response.msg !== "fail") {
+              this.$notify({
+                title: "成功",
+                message: "保存成功",
+                type: "success",
+                duration: 2000,
+              });
+              this.create.dialogFormVisible = false;
+              this.getList();
+            } else {
+              this.$notify({
+                title: "保存失败",
+                message: response.data,
+                type: "warning",
+                duration: 2000,
+              });
+            }
+          });
+        }
+      });
+    },
+
+    // 删除
+    handleRowDelete(row, type) {
+      console.log("点击了行内删除");
+      MessageBox.confirm("是否确认删除此信息?", {
+        confirmButtonText: "确认",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.selectList = [];
+          this.requestParam.name = "delWasteuse";
+          this.requestParam.parammaps = {};
+          this.requestParam.parammaps.pastureId = row.pastureid;
+          if (type == 1) {
+            this.requestParam.parammaps.id = row;
+          } else {
+            this.requestParam.parammaps.id = row.id;
+          }
+
+          PostDataByName(this.requestParam).then((response) => {
+            if (response.msg === "fail") {
+              this.$notify({
+                title: "删除失败",
+                message: response.data,
+                type: "warning",
+                duration: 2000,
+              });
+            } else {
+              this.$notify({
+                title: "成功",
+                message: "删除成功",
+                type: "success",
+                duration: 2000,
+              });
+              this.getList();
+            }
+          });
+        })
+        .catch(() => {
+          this.$message({ type: "info", message: "已取消删除" });
+        });
+    },
+    handleSelectionChange(val) {
+      console.log("勾选数据", val);
+      this.selectList = val;
+    },
+    form_delete(type) {
+      console.log("点击了删除++++++++");
+      if (this.selectList.length == 0) {
+        this.$message({
+          type: "error",
+          message: "请选择栏舍剩料记录",
+          duration: 2000,
+        });
+      } else {
+        const ids = this.selectList.map((item) => {
+          return item.id;
+        });
+        this.handleRowDelete(ids.toString(), 1);
+      }
+    },
+    // 复制
+    handleCopy() {
+      console.log("点击了复制");
+      if (this.selectList.length == 0) {
+        this.$message({
+          type: "error",
+          message: "请选择栏舍剩料记录",
+          duration: 2000,
+        });
+      } else if (this.selectList.length == 1) {
+        MessageBox.confirm("是否确认复制此信息?", {
+          confirmButtonText: "确认",
+          cancelButtonText: "取消",
+          type: "warning",
+        })
+          .then(() => {
+            this.requestParam.name = "copybarfeedremain";
+            this.requestParam.parammaps = {};
+            this.requestParam.parammaps.pastureid =
+              this.selectList[0].pastureid;
+            this.requestParam.parammaps.id = this.selectList[0].id;
+            PostDataByName(this.requestParam).then((response) => {
+              if (response.msg === "fail") {
+                const ftid = new RegExp("key 'ftid'");
+                if (ftid.test(response.data)) {
+                  this.$notify({
+                    type: "warning",
+                    message: "该栏舍该班次收集今日剩料量已存在,不可重复生成",
+                    duration: 2000,
+                  });
+                  return;
+                }
+                this.$notify({
+                  title: "保存失败",
+                  message: response.data,
+                  type: "warning",
+                  duration: 2000,
+                });
+              } else {
+                this.$notify({
+                  title: "成功",
+                  message: "保存成功",
+                  type: "success",
+                  duration: 2000,
+                });
+                this.getList();
+              }
+            });
+          })
+          .catch(() => {
+            this.$message({ type: "info", message: "已取消复制" });
+          });
+      } else {
+        this.$message({
+          type: "error",
+          message: "请选择一条栏舍剩料记录",
+          duration: 2000,
+        });
+      }
+    },
+    // 导出
+    handleExport(item) {
+      if (item == 1) {
+        console.log("点击了导出模板");
+        console.log("点击了导出模板");
+        const requestParam = this.requestParam;
+        const url = Cookies.get("url") + "authdata/barfeedremain/excel"; // 请求下载文件的地址
+        console.log(url);
+        axios({
+          method: "POST",
+          url: url,
+          data: requestParam,
+          headers: { token: getToken(), optname: "insertcustomdoc" },
+          responseType: "blob",
+        }).then((res) => {
+          if (!res) return;
+          this.percentage = 99;
+          setTimeout(() => {
+            this.isPercentage = false;
+          }, 2000);
+          const blob = new Blob([res.data], {
+            type: "application/octet-stream;charset=utf-8",
+          });
+          const url = window.URL.createObjectURL(blob);
+          const aLink = document.createElement("a");
+          aLink.style.display = "none";
+          aLink.href = url;
+          const docname = "栏舍剩料记录导入模板.xlsx";
+          aLink.setAttribute("download", docname); // 下载的文件
+          document.body.appendChild(aLink);
+          aLink.click();
+          document.body.removeChild(aLink);
+          window.URL.revokeObjectURL(url);
+        });
+      } else {
+        console.log("点击了导出数据", item, this.record);
+        if (this.record == "0") {
+          this.download.getdataListParm.name = "getBarfeedremainList";
+        } else {
+          this.download.getdataListParm.name = "getRemainplanrecord";
+        }
+        this.download.getdataListParm.parammaps =
+          this.table.getdataListParm.parammaps;
+        if (
+          this.download.getdataListParm.parammaps.inputDatetime !== "" &&
+          this.download.getdataListParm.parammaps.inputDatetime !== null
+        ) {
+          this.download.getdataListParm.parammaps.startdate = parseTime(
+            this.download.getdataListParm.parammaps.inputDatetime[0],
+            "{y}-{m}-{d}"
+          );
+          this.download.getdataListParm.parammaps.enddate = parseTime(
+            this.download.getdataListParm.parammaps.inputDatetime[1],
+            "{y}-{m}-{d}"
+          );
+        } else {
+          this.download.getdataListParm.parammaps.inputDatetime = "";
+          this.download.getdataListParm.parammaps.startdate = "";
+          this.download.getdataListParm.parammaps.enddate = "";
+        }
+        GetDataByName(this.download.getdataListParm).then((response) => {
+          if (response.data.list !== null) {
+            this.download.list = response.data.list;
+          } else {
+            this.download.list = [];
+          }
+          if (item == 2) {
+            var excelDatas1 = [
+              {
+                tHeader: [
+                  "栏舍名称",
+                  "配方名称",
+                  "原剩料所属时间",
+                  "剩料量(kg)",
+                  "班次(收集)",
+                  "收集时间",
+                  "操作人",
+                ],
+                filterVal: [
+                  "ftname",
+                  "ftname",
+                  "date",
+                  "weight",
+                  "timesstr",
+                  "operatetime",
+                  "emp",
+                ],
+                tableDatas: this.download.list,
+                sheetName: "Sheet1",
+              },
+            ];
+            json2excel(excelDatas1, "栏舍剩料记录-手动记录", true, "xlsx");
+          } else {
+            var excelDatas2 = [
+              {
+                tHeader: [
+                  "TMR设备编号",
+                  "TMR设备名称",
+                  "TMR设备类型",
+                  "栏舍名称",
+                  "收集时间",
+                  "剩料重量(kg)",
+                  "开始重量(kg)",
+                  "结束重量(kg)",
+                  "驾驶员",
+                ],
+                filterVal: [
+                  "eqcode",
+                  "eqname",
+                  "tclassname",
+                  "ftname",
+                  "createtime",
+                  "weight",
+                  "beginweight",
+                  "endweight",
+                  "driver",
+                ],
+                tableDatas: this.download.list,
+                sheetName: "Sheet1",
+              },
+            ];
+            json2excel(
+              excelDatas2,
+              "栏舍剩料记录-TMR设备自动记录",
+              true,
+              "xlsx"
+            );
+          }
+        });
+      }
+    },
+
+    beforeImport(file) {
+      const isLt2M = file.size / 1024 / 1024 < 2;
+      if (!isLt2M) {
+        this.$message.error("上传文件大小不能超过 2MB!");
+      }
+      return isLt2M;
+    },
+    handleImportSuccess(res, file) {
+      this.getList();
+      if (res.msg === "ok") {
+        this.$message({
+          title: "成功",
+          message: "导入成功:" + res.data.success + "条!",
+          type: "success",
+          duration: 2000,
+        });
+        if (res.data.err_count > 0) {
+          this.$notify({
+            title: "失败",
+            message: "导入失败:" + res.data.err_count + "条!",
+            type: "danger",
+            duration: 2000,
+          });
+          import("@/vendor/Export2Excel").then((excel) => {
+            const list1 = res.data.result;
+            const tHeader = [
+              "栏舍名称",
+              "配方名称",
+              "原剩料所属时间",
+              "剩料量(kg)",
+              "干物质",
+              "班次(收集)",
+              "收集时间",
+              "操作人",
+              "错误信息",
+            ];
+            const filterVal = [
+              "栏舍名称",
+              "配方名称",
+              "原剩料所属时间",
+              "剩料量(kg)",
+              "干物质",
+              "班次(收集)",
+              "收集时间",
+              "操作人",
+              "error_msg",
+            ];
+            const data1 = this.formatJson(filterVal, list1);
+            excel.export_json_to_excel({
+              header: tHeader,
+              data: data1,
+              filename: "栏舍剩料记录导入报错信息",
+              autoWidth: true,
+              bookType: "xlsx",
+            });
+          });
+        }
+      } else {
+        this.$notify({
+          title: "失败",
+          message: "上传失败",
+          type: "danger",
+          duration: 2000,
+        });
+      }
+    },
+    formatJson(filterVal, jsonData) {
+      return jsonData.map((v) =>
+        filterVal.map((j) => {
+          if (j === "timestamp") {
+            return parseTime(v[j]);
+          } else {
+            return v[j];
+          }
+        })
+      );
+    },
+    handleDataUpload() {
+      let a = Cookies.get("url");
+      let b = a.search(8081);
+      let c = a.substring(0, a.search(8081)) + "8082";
+      let d = a.substring(0, a.lastIndexOf("/"));
+      console.log(d);
+      let url = "";
+      if (b == -1) {
+        url = d + ":8082";
+      } else {
+        url = c;
+      }
+      console.log(url, "url");
+      let _url = url + "/authdata/surplus/push";
+      let data = {
+        date: parseTime(new Date(), "{y}-{m}-{d}"),
+        pastureId: Cookies.get("pastureid"),
+      };
+      console.log(_url, "_url");
+      postJson2(_url, data).then((response) => {
+        if (response.msg == "ok") {
+          this.$notify({
+            title: "",
+            message: response.data,
+            type: "success",
+            duration: 2000,
+          });
+        } else {
+          this.$notify({
+            title: "上传失败",
+            message: response.data,
+            type: "warning",
+            duration: 2000,
+          });
+        }
+      });
+    },
+  },
+};
+</script>

Plik diff jest za duży
+ 1011 - 149
src/views/formulationPlan/dhedFormula/index.vue


+ 33 - 0
src/views/shedProduction/materialRemainingRecord/index.vue

@@ -180,6 +180,7 @@
           align="center"
           prop="ftname"
         />
+
         <!-- <el-table-column label="收集" min-width="150px" align="center" prop="timesstr" /> -->
         <el-table-column
           label="原剩料所属时间"
@@ -211,6 +212,12 @@
           align="center"
           prop="operatetime"
         />
+        <el-table-column
+          label="转投栏舍"
+          min-width="150px"
+          align="center"
+          prop="useinbar"
+        />
         <el-table-column
           label="操作人"
           min-width="90px"
@@ -292,6 +299,7 @@
           align="center"
           prop="barname"
         />
+
         <el-table-column
           label="收集时间"
           min-width="150px"
@@ -409,6 +417,7 @@
               </el-form-item>
             </el-col>
           </el-row>
+
           <!-- TODO: -->
           <el-row>
             <el-col :span="20">
@@ -422,6 +431,8 @@
               </el-form-item>
             </el-col>
           </el-row>
+          <!--  -->
+
           <el-row>
             <el-col :span="20">
               <el-form-item label="班次(收集):">
@@ -504,6 +515,27 @@
               </el-form-item>
             </el-col>
           </el-row>
+          <el-row>
+            <el-col :span="20">
+              <el-form-item label="转投栏舍:">
+                <el-select
+                  ref="useinbarid"
+                  v-model="create.temp.useinbarid"
+                  filterable
+                  placeholder="转投栏舍:"
+                  class="filter-item"
+                  style="width: 100%"
+                >
+                  <el-option
+                    v-for="item in houseNameList"
+                    :key="item.id"
+                    :label="item.bname"
+                    :value="item.id"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
           <el-row>
             <el-col :span="20">
               <el-form-item label="操作人:" prop="emp">
@@ -770,6 +802,7 @@ export default {
           dry: 0,
           times: "0",
           remaindate: "",
+          useinbarid: "",
         },
         rules: {
           barid: [

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików