Browse Source

配方批量暂改

Shan9312 9 tháng trước cách đây
mục cha
commit
e2951772ad
1 tập tin đã thay đổi với 6284 bổ sung0 xóa
  1. 6284 0
      src/views/formulationPlan/recipeTemplate/index-copy.vue

+ 6284 - 0
src/views/formulationPlan/recipeTemplate/index-copy.vue

@@ -0,0 +1,6284 @@
+<template>
+  <div ref="appContainer" class="app-container">
+    <div ref="myContainer" class="myContainer">
+      <!-- 配方模板表 -->
+      <div ref="template" class="template">
+        <div class="recipeTemplate">
+          <p>配方模板表</p>
+        </div>
+        <div class="search">
+          <el-select
+            v-model="table.getdataListParm.parammaps.ccname"
+            filterable
+            placeholder="牲畜类别"
+            class="filter-item"
+            clearable
+          >
+            <el-option
+              v-for="item in livestockTypeList"
+              :key="item.value"
+              :label="item.label"
+              :value="item.label"
+            />
+          </el-select>
+          <el-select
+            v-model="table.getdataListParm.parammaps.fttype"
+            filterable
+            placeholder="配方类型"
+            class="filter-item"
+            style="width: 120px"
+            clearable
+          >
+            <el-option
+              v-for="item in formulaTypeList"
+              :key="item.value"
+              :label="item.label"
+              :value="item.label"
+            />
+          </el-select>
+          <el-select
+            v-model="table.getdataListParm.parammaps.source"
+            filterable
+            placeholder="来源"
+            class="filter-item"
+            style="width: 120px"
+            clearable
+          >
+            <el-option
+              v-for="item in sourceList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            />
+          </el-select>
+          <el-select
+            v-model="table.getdataListParm.parammaps.enable"
+            filterable
+            placeholder="是否启用"
+            class="filter-item"
+            style="width: 120px"
+            clearable
+          >
+            <el-option
+              v-for="item in enableList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            />
+          </el-select>
+          <div ref="selectInput" class="filter-item selectInput">
+            <el-input
+              v-model="table.getdataListParm.parammaps.all"
+              type="text"
+              placeholder="请点击选择搜索条件"
+              class="Input"
+            />
+            <i
+              v-if="arrowDown"
+              icon="el-icon-arrow-down"
+              class="el-icon-arrow-down"
+            />
+            <i
+              v-if="arrowUp"
+              icon="el-icon-arrow-up"
+              class="el-icon-arrow-up"
+            />
+            <ul v-if="arrowUp" class="selectUl">
+              <li>
+                <a>配方名称</a
+                ><el-input
+                  v-model="table.getdataListParm.parammaps.tname"
+                  clearable
+                  style="width: 245px"
+                />
+              </li>
+              <li>
+                <a>备注</a
+                ><el-input
+                  v-model="table.getdataListParm.parammaps.remark"
+                  clearable
+                  style="width: 245px"
+                />
+              </li>
+              <li />
+              <!-- <li><a>来源</a><el-input v-model="table.getdataListParm.parammaps.source" clearable style="width: 245px;" /></li> -->
+              <li>
+                <div style="float: right">
+                  <el-button
+                    class="downminCancel"
+                    @click="
+                      arrowUp = false;
+                      arrowDown = true;
+                    "
+                    >取消</el-button
+                  >
+                  <el-button class="miniPrimary" @click="form_search"
+                    >搜索</el-button
+                  >
+                </div>
+              </li>
+            </ul>
+          </div>
+          <el-button class="successBorder" @click="form_search">查询</el-button>
+          <el-button class="successBorder" @click="handleRefresh"
+            >重置</el-button
+          >
+        </div>
+        <div class="operation">
+          <el-button
+            v-if="isRoleEdit"
+            class="success"
+            icon="el-icon-plus"
+            @click="handleCreate"
+            >新增</el-button
+          >
+          <el-button
+            v-if="isRoleEdit && ispalyUd"
+            class="success"
+            icon="el-icon-plus"
+            @click="handleGetUd"
+            >配方上传</el-button
+          >
+          <el-upload
+            style="float: right; margin-right: 15px"
+            :headers="headers"
+            :data="uploadData"
+            :action="uploadExcelUrl"
+            :show-file-list="false"
+            :before-upload="beforeImport"
+            :on-success="handleImportSuccess"
+          >
+            <el-button
+              v-if="isRoleEdit"
+              class="export"
+              icon="el-icon-download"
+              style="float: right"
+              >导入</el-button
+            >
+          </el-upload>
+          <el-dropdown style="float: right">
+            <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>
+          <el-button
+            class="export"
+            style="float: right"
+            @click="handleRecipeRecord"
+            >配方记录</el-button
+          >
+        </div>
+        <div ref="table" class="table">
+          <el-table
+            :key="table.tableKey"
+            v-loading="table.listLoading"
+            element-loading-text="给我一点时间"
+            :data="table.list"
+            border
+            fit
+            highlight-current-row
+            style="width: 98%"
+            :row-style="rowStyle"
+            :cell-style="cellStyle"
+            class="elTable table-fixed"
+            :height="myheight"
+            @row-click="tableRowClick"
+            @selection-change="handleSelectionChange"
+          >
+            <el-table-column type="selection" align="center" width="50" />
+            <el-table-column
+              label="序号"
+              align="center"
+              type="index"
+              width="50px"
+            />
+            <el-table-column label="配方名称" min-width="90px" align="center">
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit">{{ scope.row.tname }}</span>
+                <el-input
+                  v-if="scope.row.Edit"
+                  v-model.trim="scope.row.tname"
+                  type="textarea"
+                  :autosize="{ minRows: 1.3, maxRows: 4 }"
+                  maxlength="32"
+                  style="width: 98%; padding: 10px 0"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="配方编码" min-width="110px" align="center">
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit">{{ scope.row.tcode }}</span>
+                <!-- <el-input v-if="scope.row.Edit" v-model.trim="scope.row.tcode" type="textarea" :autosize="{ minRows: 1.3, maxRows: 4}" maxlength="32" style="width:98%;padding:10px 0;" /> -->
+                <el-input
+                  v-if="scope.row.Edit"
+                  v-model.trim="scope.row.tcode"
+                  type="textarea"
+                  :autosize="{ minRows: 1.3, maxRows: 4 }"
+                  disabled
+                  maxlength="32"
+                  style="width: 98%; padding: 10px 0"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="容重(kg/m³)"
+              min-width="110px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit">{{ scope.row.volume }}</span>
+                <el-input
+                  v-if="scope.row.Edit"
+                  v-model.trim="scope.row.volume"
+                  type="number"
+                  style="width: 98%; padding: 10px 0"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="配方颜色" min-width="70px" align="center">
+              <template slot-scope="scope">
+                <el-color-picker
+                  v-model="scope.row.tcolor"
+                  size="mini"
+                  :predefine="predefineColors"
+                  style="vertical-align: middle"
+                  :disabled="scope.row.NoEdit && !isproportion"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="牲畜类别" min-width="130px" align="center">
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit">{{ scope.row.ccname }}</span>
+                <el-select
+                  v-if="scope.row.Edit"
+                  v-model="scope.row.ccid"
+                  filterable
+                  placeholder="牲畜类别"
+                  class="filter-item"
+                  style="width: 95%; padding: 10px 0"
+                  @change="changeLivestockType"
+                >
+                  <el-option
+                    v-for="item in livestockTypeList"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  />
+                </el-select>
+              </template>
+            </el-table-column>
+            <el-table-column label="配方类型" min-width="130px" align="center">
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit">{{ scope.row.fttype }}</span>
+                <el-select
+                  v-if="scope.row.Edit && scope.row.isCreate == true"
+                  v-model="scope.row.fttypeid"
+                  filterable
+                  placeholder="配方类型"
+                  class="filter-item"
+                  style="width: 95%; padding: 10px 0"
+                  @change="changeFormulaType"
+                >
+                  <el-option
+                    v-for="item in formulaTypeList"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  />
+                </el-select>
+                <el-select
+                  v-if="scope.row.Edit && scope.row.isUpdateSave == true"
+                  v-model="scope.row.fttypeid"
+                  disabled
+                  filterable
+                  placeholder="配方类型"
+                  class="filter-item"
+                  style="width: 95%; padding: 10px 0"
+                  @change="changeFormulaType"
+                >
+                  <el-option
+                    v-for="item in formulaTypeList"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  />
+                </el-select>
+              </template>
+            </el-table-column>
+            <el-table-column label="来源" min-width="90px" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.source }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="备注" min-width="90px" align="center">
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit">{{ scope.row.remark }}</span>
+                <el-input
+                  v-if="scope.row.Edit"
+                  v-model="scope.row.remark"
+                  type="textarea"
+                  :autosize="{ minRows: 1.3, maxRows: 4 }"
+                  maxlength="255"
+                  style="width: 95%; padding: 10px 0"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="版本号" min-width="90px" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.version }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="牛群类别" min-width="130px" align="center">
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit">{{ scope.row.cattleName }}</span>
+                <el-select
+                  v-if="scope.row.Edit"
+                  v-model="scope.row.cattle"
+                  filterable
+                  placeholder="牛群类别"
+                  class="filter-item"
+                  style="width: 95%; padding: 10px 0"
+                >
+                  <el-option
+                    v-for="item in distCattle"
+                    :key="item.value"
+                    :label="item.distName"
+                    :value="item.distCode"
+                  />
+                </el-select>
+              </template>
+            </el-table-column>
+            <el-table-column label="是否启用" min-width="90px" align="center">
+              <template slot-scope="scope">
+                <el-switch
+                  v-model="scope.row.enable"
+                  :disabled="scope.row.NoEdit"
+                  active-color="#13ce66"
+                  inactive-color="#ff4949"
+                  :active-value="1"
+                  :inactive-value="0"
+                  @change="handleEnableChange(scope.$index, scope.row)"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="跳转重量域(kg)"
+              min-width="85px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit">{{ scope.row.autozone }}</span>
+                <el-input
+                  v-if="scope.row.Edit"
+                  v-model="scope.row.autozone"
+                  type="textarea"
+                  :disabled="scope.row.fttype !== '预混配方'"
+                  :autosize="{ minRows: 1.3, maxRows: 4 }"
+                  style="width: 95%; padding: 10px 0"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="替代方案" min-width="130px" align="center">
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit">{{ scope.row.surplus }}</span>
+                <el-select
+                  v-if="scope.row.id && scope.row.Edit"
+                  v-model="scope.row.surplusId"
+                  filterable
+                  clearable
+                  placeholder="替代方案"
+                  class="filter-item"
+                  style="width: 95%; padding: 10px 0"
+                  @change="(val) => handlegetSurplus(val, scope.row)"
+                >
+                  <el-option
+                    v-for="item in tableData"
+                    :key="item.id"
+                    :label="item.surplus"
+                    :value="item.id"
+                  />
+                </el-select>
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="操作"
+              align="center"
+              width="150"
+              class-name="small-padding fixed-width"
+              fixed="right"
+            >
+              <template slot-scope="{ row }">
+                <el-button
+                  v-if="row.NoEdit && isRoleEdit && ispastureuse == 0"
+                  icon="el-icon-tickets"
+                  class="miniSuccess"
+                  @click="handleRowRecipeRecord(row)"
+                />
+                <span
+                  v-if="row.NoEdit && isRoleEdit && ispastureuse == 0"
+                  icon="el-icon-data-line"
+                  class="centerSpan"
+                  >|</span
+                >
+                <el-button
+                  v-if="row.isCreate && isRoleEdit"
+                  :disabled="isokDisable"
+                  icon="el-icon-folder-checked"
+                  class="miniSuccess"
+                  @click="createData(row)"
+                />
+                <span v-if="row.isCreate && isRoleEdit" class="centerSpan"
+                  >|</span
+                >
+                <el-button
+                  v-if="row.isCreate && isRoleEdit"
+                  class="minCancel"
+                  icon="el-icon-close"
+                  @click="createCancel(row)"
+                />
+                <el-button
+                  v-if="row.isUpdate && isRoleEdit"
+                  :disabled="row.is_modify !== 1"
+                  class="miniSuccess"
+                  icon="el-icon-edit-outline"
+                  @click="handleUpdate(row)"
+                />
+                <span v-if="row.isUpdate && isRoleEdit" class="centerSpan"
+                  >|</span
+                >
+                <el-button
+                  v-if="row.isUpdate && isRoleEdit"
+                  class="miniDanger"
+                  icon="el-icon-delete"
+                  @click="handleRowDelete(row)"
+                />
+                <el-button
+                  v-if="row.isUpdateSave && isRoleEdit"
+                  :disabled="isokDisable"
+                  icon="el-icon-folder-checked"
+                  class="miniSuccess"
+                  @click="updateData(row)"
+                />
+                <span v-if="row.isUpdateSave && isRoleEdit" class="centerSpan"
+                  >|</span
+                >
+                <el-button
+                  v-if="row.isUpdateSave && isRoleEdit"
+                  class="minCancel"
+                  icon="el-icon-close"
+                  @click="updateCancel(row)"
+                />
+                <span
+                  v-if="row.NoEdit && isRoleEdit && ispastureuse == 0"
+                  icon="el-icon-data-line"
+                  class="centerSpan"
+                  >|</span
+                >
+                <el-button
+                  v-if="row.NoEdit && isRoleEdit && ispastureuse == 0"
+                  icon="el-icon-data-line"
+                  class="miniSuccess"
+                  @click="handleFormulationEvaluation(row)"
+                />
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <span
+          v-if="table.listLoading == false"
+          style="
+            margin-right: 30px;
+            margin-top: 10px;
+            margin-bottom: 10px;
+            font-size: 14px;
+          "
+          >共{{ table.total }}条</span
+        >
+      </div>
+      <!-- 配方详情表 -->
+      <div v-if="isDetail" ref="detail" class="detail">
+        <div class="recipeTemplate">
+          <p>配方详情表</p>
+        </div>
+        <div
+          style="
+            line-height: 25px;
+            border-bottom: 1px solid #000;
+            margin-bottom: 10px;
+            font-size: 16px;
+            font-weight: 600;
+          "
+        >
+          <span :style="{ color: table2.getdataListParm.parammaps.tcolor }"
+            >配方名称:{{ table2.getdataListParm.parammaps.tname }}</span
+          ><span style="margin: 0 60px"
+            >牲畜类别:{{ table2.getdataListParm.parammaps.ccname }}</span
+          ><span>配方类型:{{ table2.getdataListParm.parammaps.fttype }}</span>
+        </div>
+        <div class="operation">
+          <el-button
+            v-if="isRoleEdit"
+            style="float: left"
+            icon="el-icon-plus"
+            class="success"
+            @click="handleCreate2"
+            >新增</el-button
+          >
+          <el-button
+            v-if="isRoleEdit"
+            style="float: left"
+            icon="el-icon-delete"
+            class="danger"
+            @click="form_delete2"
+            >删除</el-button
+          >
+          <el-button
+            v-if="isRoleEdit"
+            style="float: left"
+            class="success"
+            icon="el-icon-takeaway-box"
+            @click="handleSyntheticPremix"
+            >合成预混料</el-button
+          >
+          <el-button
+            v-if="isOrder && isRoleEdit"
+            icon="el-icon-sort"
+            style="float: left"
+            class="success"
+            @click="handleChangeOrder"
+            >更改顺序</el-button
+          >
+          <div v-else style="float: left; margin-left: 10px">
+            <el-button
+              v-if="isRoleEdit"
+              icon="el-icon-folder-checked"
+              class="success"
+              @click="saveChangeOrder"
+              >保存</el-button
+            >
+            <el-button
+              v-if="isRoleEdit"
+              icon="el-icon-close"
+              class="sortCancel"
+              @click="cancelChangeOrder"
+              >取消</el-button
+            >
+          </div>
+          <div
+            ref="selectInput2"
+            class="filter-item selectInput"
+            style="margin: 0 10px"
+          >
+            <el-input
+              v-model="table2.getdataListParm.parammaps.all"
+              type="text"
+              name=""
+              value=""
+              placeholder="请点击选择搜索条件"
+              class="Input"
+            />
+            <i
+              v-if="arrowDown2"
+              icon="el-icon-arrow-down"
+              class="el-icon-arrow-down"
+            />
+            <i
+              v-if="arrowUp2"
+              icon="el-icon-arrow-up"
+              class="el-icon-arrow-up"
+            />
+            <ul v-if="arrowUp2" class="selectUl">
+              <li>
+                <a style="width: 130px">饲料名称</a>
+                <el-select
+                  v-model="table2.getdataListParm.parammaps.fname"
+                  filterable
+                  placeholder=""
+                  style="width: 190px"
+                >
+                  <el-option
+                    v-for="item in feedNameList"
+                    :key="item.id"
+                    :label="item.fname"
+                    :value="item.fname"
+                  />
+                </el-select>
+              </li>
+              <li>
+                <a style="width: 130px">饲料组名称</a
+                ><el-input
+                  v-model="table2.getdataListParm.parammaps.feedgroup"
+                  style="width: 190px"
+                />
+              </li>
+              <li>
+                <a style="width: 130px">重量</a
+                ><el-input
+                  v-model="table2.getdataListParm.parammaps.fweight"
+                  style="width: 190px"
+                />
+              </li>
+              <li>
+                <a style="width: 130px">搅拌延时</a>
+                <el-select
+                  v-model="table2.getdataListParm.parammaps.autosecondname"
+                  filterable
+                  placeholder=""
+                  style="width: 190px"
+                  clearable
+                >
+                  <el-option
+                    v-for="item in mixingDelayList"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.name"
+                  />
+                </el-select>
+              </li>
+              <li>
+                <a style="width: 130px">是否锁定牛头数比例</a>
+                <el-select
+                  v-model="table2.getdataListParm.parammaps.islockcount"
+                  placeholder=""
+                  style="width: 190px"
+                  clearable
+                >
+                  <el-option
+                    v-for="item in lockBullsList"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id"
+                  />
+                </el-select>
+              </li>
+              <li>
+                <a style="width: 130px">顺序</a
+                ><el-input
+                  v-model="table2.getdataListParm.parammaps.sort"
+                  style="width: 190px"
+                />
+              </li>
+              <li>
+                <div style="float: right">
+                  <el-button
+                    class="downminCancel"
+                    @click="
+                      arrowUp2 = false;
+                      arrowDown2 = true;
+                    "
+                    >取消</el-button
+                  >
+                  <el-button class="miniPrimary" @click="form_search2"
+                    >搜索</el-button
+                  >
+                </div>
+              </li>
+            </ul>
+          </div>
+          <el-button class="successBorder" @click="form_search2"
+            >查询</el-button
+          >
+          <el-button class="successBorder" @click="handleRefresh2"
+            >重置</el-button
+          >
+          <el-button class="hide" @click="handleCloseTable2">隐藏</el-button>
+          <el-button v-if="isEnlarge" class="hide2" @click="handleEnlarge"
+            >放大</el-button
+          >
+          <el-button v-else class="hide2" @click="handleNarrow">缩小</el-button>
+          <!--  -->
+        </div>
+        <div class="operation">
+          <el-button
+            v-if="isRoleEdit && !isproportion"
+            class="successBorder"
+            @click="handle_batchEdit"
+            >批量编辑</el-button
+          >
+          <el-button
+            v-if="isRoleEdit && isproportion"
+            icon="el-icon-folder-checked"
+            class="success"
+            @click="handle_batchEdit_save"
+            >保存</el-button
+          >
+          <el-button
+            v-if="isRoleEdit && isproportion"
+            icon="el-icon-close"
+            class="sortCancel"
+            @click="cancelChangeEdit"
+            >取消</el-button
+          >
+        </div>
+        <div v-if="isEnlarge" class="table2">
+          <el-table
+            id="table2"
+            ref="table2"
+            :key="table2.tableKey"
+            v-loading="table2.listLoading"
+            element-loading-text="给我一点时间"
+            :data="table2.list"
+            border
+            fit
+            highlight-current-row
+            style="width: 98%"
+            :row-style="rowStyle"
+            :cell-style="cellStyle"
+            class="elTable"
+            row-key="id"
+            show-summary
+            :max-height="220"
+            :summary-method="getSummaries"
+            @selection-change="handleSelectionChange2"
+            @cell-dblclick="celldblclick"
+          >
+            <el-table-column type="selection" width="50" />
+            <el-table-column
+              label="序号"
+              align="center"
+              type="index"
+              width="50px"
+            />
+            <el-table-column label="饲料组" min-width="120px" align="center">
+              <template slot-scope="scope">
+                <span v-if="scope.row.groupNoEdit">{{
+                  scope.row.feedgroup
+                }}</span>
+                <el-input
+                  v-if="scope.row.groupEdit"
+                  v-model="scope.row.feedgroup"
+                  :disabled="scope.row.isGroupDisabled"
+                  type="textarea"
+                  :autosize="{ minRows: 1.3, maxRows: 4 }"
+                  maxlength="32"
+                  style="width: 95%; padding: 10px 0"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="饲料名称" min-width="120px" align="center">
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit && !isproportion">{{
+                  scope.row.fname
+                }}</span>
+                <el-select
+                  v-if="scope.row.Edit || isproportion"
+                  v-model="scope.row.fid"
+                  filterable
+                  placeholder=""
+                  class="filter-item"
+                  style="width: 95%; padding: 10px 0"
+                  @change="
+                    (value) => {
+                      changeFname(value, scope.row);
+                    }
+                  "
+                >
+                  <el-option
+                    v-for="item in feedNameList"
+                    :key="item.id"
+                    :label="item.fname"
+                    :value="item.id"
+                  />
+                </el-select>
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="重量(KG)"
+              prop="fweight"
+              width="120px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit && !isproportion">{{
+                  scope.row.fweight
+                }}</span>
+                <el-input
+                  v-if="scope.row.Edit || isproportion"
+                  v-model="scope.row.fweight"
+                  placeholder="重量"
+                  step="0.0001"
+                  type="number"
+                  style="width: 95%; padding: 10px 0"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="搅拌延时(min)"
+              min-width="80px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit && !isproportion">{{
+                  scope.row.autosecond
+                }}</span>
+                <!-- <el-select v-if="scope.row.Edit" v-model="scope.row.autosecond" filterable placeholder="搅拌延时" class="filter-item" style="width:95%;padding:10px 0;">
+                  <el-option v-for="item in mixingDelayList" :key="item.id" :label="item.name" :value="item.id" />
+                </el-select> -->
+                <el-input
+                  v-if="scope.row.Edit || isproportion"
+                  v-model="scope.row.autosecond"
+                  step="0.01"
+                  type="number"
+                  style="width: 95%; padding: 10px 0"
+                  min-number="0"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="允许延时偏差(min)"
+              min-width="80px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit && !isproportion">{{
+                  scope.row.deviation
+                }}</span>
+                <el-input
+                  v-if="scope.row.Edit || isproportion"
+                  v-model="scope.row.deviation"
+                  step="0.01"
+                  type="number"
+                  style="width: 95%; padding: 10px 0"
+                  min-number="0"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column
+              v-if="lockCount.isLockCount"
+              label="是否锁定牛头数比例"
+              min-width="80px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span
+                  v-if="
+                    scope.row.NoEdit &&
+                    !isproportion &&
+                    !isproportion &&
+                    scope.row.islockcount == '0'
+                  "
+                  >否</span
+                >
+                <span
+                  v-if="
+                    scope.row.NoEdit &&
+                    !isproportion &&
+                    !isproportion &&
+                    scope.row.islockcount == '1'
+                  "
+                  >是</span
+                >
+                <el-select
+                  v-if="scope.row.Edit || isproportion"
+                  v-model="scope.row.islockcount"
+                  placeholder=""
+                  class="filter-item"
+                  style="width: 95%; padding: 10px 0"
+                >
+                  <el-option
+                    v-for="item in lockBullsList"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id"
+                  />
+                </el-select>
+              </template>
+            </el-table-column>
+            <el-table-column label="加料前停机" min-width="70px" align="center">
+              <template slot-scope="scope">
+                <el-switch
+                  v-model="scope.row.shutdown"
+                  :disabled="
+                    scope.row.NoEdit && !isproportion && !isproportion == true
+                  "
+                  active-color="#13ce66"
+                  inactive-color="#ff4949"
+                  :active-value="1"
+                  :inactive-value="0"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="顺序" min-width="70px" align="center">
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit && !isproportion">{{
+                  scope.row.sort
+                }}</span>
+                <el-input
+                  v-if="scope.row.Edit || isproportion"
+                  v-model="scope.row.sort"
+                  step="0.01"
+                  type="number"
+                  style="width: 95%; padding: 10px 0"
+                  min-number="0"
+                  @blur="blurSort(scope.row)"
+                />
+              </template>
+            </el-table-column>
+
+            <el-table-column
+              label="操作"
+              align="center"
+              width="120"
+              class-name="small-padding fixed-width"
+              fixed="right"
+            >
+              <template slot-scope="{ row }">
+                <el-button
+                  v-if="row.isCreate && isRoleEdit"
+                  :disabled="isokDisable"
+                  icon="el-icon-folder-checked"
+                  class="miniSuccess"
+                  @click="createData2(row)"
+                />
+                <span v-if="row.isCreate && isRoleEdit" class="centerSpan"
+                  >|</span
+                >
+                <el-button
+                  v-if="row.isCreate && isRoleEdit"
+                  class="minCancel"
+                  icon="el-icon-close"
+                  @click="createCancel2(row)"
+                />
+                <el-button
+                  v-if="row.isUpdate && isRoleEdit"
+                  :disabled="isproportion"
+                  class="miniSuccess"
+                  icon="el-icon-edit-outline"
+                  @click="handleUpdate2(row)"
+                />
+                <span v-if="row.isUpdate && isRoleEdit" class="centerSpan"
+                  >|</span
+                >
+                <el-button
+                  v-if="row.isUpdate && isRoleEdit"
+                  class="miniDanger"
+                  icon="el-icon-delete"
+                  @click="handleRowDelete2(row)"
+                />
+                <el-button
+                  v-if="row.isUpdateSave && isRoleEdit"
+                  :disabled="isokDisable"
+                  icon="el-icon-folder-checked"
+                  class="miniSuccess"
+                  @click="updateData2(row)"
+                />
+                <span v-if="row.isUpdateSave && isRoleEdit" class="centerSpan"
+                  >|</span
+                >
+                <el-button
+                  v-if="row.isUpdateSave && isRoleEdit"
+                  class="minCancel"
+                  icon="el-icon-close"
+                  @click="updateCancel2(row)"
+                />
+                <span
+                  v-if="
+                    parseInt(row.preftid) > 0 &&
+                    row.isUpdateSave == false &&
+                    isRoleEdit
+                  "
+                  class="centerSpan"
+                  >|</span
+                >
+                <el-button
+                  v-if="
+                    parseInt(row.preftid) > 0 &&
+                    row.isUpdateSave == false &&
+                    isRoleEdit
+                  "
+                  icon="el-icon-connection"
+                  class="miniSuccess"
+                  @click="handleSplitPremix(row)"
+                />
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <div v-else class="table2">
+          <el-table
+            id="table2"
+            ref="mytable2"
+            :key="table2.tableKey"
+            v-loading="table2.listLoading"
+            element-loading-text="给我一点时间"
+            :data="table2.list"
+            border
+            fit
+            highlight-current-row
+            style="width: 98%"
+            :row-style="rowStyle"
+            :cell-style="cellStyle"
+            class="elTable"
+            row-key="id"
+            show-summary
+            :max-height="enlargeHeight"
+            :summary-method="getSummaries"
+            @selection-change="handleSelectionChange2"
+            @cell-dblclick="celldblclick"
+          >
+            <el-table-column type="selection" width="50" />
+            <el-table-column
+              label="序号11"
+              align="center"
+              type="index"
+              width="50px"
+            />
+            <el-table-column label="饲料组" min-width="120px" align="center">
+              <template slot-scope="scope">
+                <span v-if="scope.row.groupNoEdit">{{
+                  scope.row.feedgroup
+                }}</span>
+                <el-input
+                  v-if="scope.row.groupEdit"
+                  v-model="scope.row.feedgroup"
+                  :disabled="scope.row.isGroupDisabled"
+                  type="textarea"
+                  :autosize="{ minRows: 1.3, maxRows: 4 }"
+                  maxlength="32"
+                  style="width: 95%; padding: 10px 0"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="饲料名称" min-width="120px" align="center">
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit && !isproportion">{{
+                  scope.row.fname
+                }}</span>
+                <el-select
+                  v-if="scope.row.Edit || isproportion"
+                  v-model="scope.row.fid"
+                  filterable
+                  placeholder=""
+                  class="filter-item"
+                  style="width: 95%; padding: 10px 0"
+                  @change="
+                    (value) => {
+                      changeFname(value, scope.row);
+                    }
+                  "
+                >
+                  <el-option
+                    v-for="item in feedNameList"
+                    :key="item.id"
+                    :label="item.fname"
+                    :value="item.id"
+                  />
+                </el-select>
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="重量123(KG)"
+              prop="fweight"
+              width="120px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit && !isproportion">{{
+                  scope.row.fweight
+                }}</span>
+                <el-input
+                  v-if="scope.row.Edit || isproportion"
+                  v-model="scope.row.fweight"
+                  placeholder="重量"
+                  step="0.0001"
+                  type="number"
+                  style="width: 95%; padding: 10px 0"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="搅拌延时(min)"
+              min-width="80px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit && !isproportion">{{
+                  scope.row.autosecond
+                }}</span>
+                <el-select
+                  v-if="scope.row.Edit || isproportion"
+                  v-model="scope.row.autosecond"
+                  filterable
+                  placeholder="搅拌延时"
+                  class="filter-item"
+                  style="width: 95%; padding: 10px 0"
+                >
+                  <el-option
+                    v-for="item in mixingDelayList"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id"
+                  />
+                </el-select>
+              </template>
+            </el-table-column>
+
+            <el-table-column
+              label="允许延时偏差(min)"
+              min-width="80px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit && !isproportion">{{
+                  scope.row.deviation
+                }}</span>
+                <el-input
+                  v-if="scope.row.Edit || isproportion"
+                  v-model="scope.row.deviation"
+                  step="0.01"
+                  type="number"
+                  style="width: 95%; padding: 10px 0"
+                  min-number="0"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="加料前停机" min-width="70px" align="center">
+              <template slot-scope="scope">
+                <el-switch
+                  v-model="scope.row.shutdown"
+                  :disabled="scope.row.NoEdit && !isproportion == true"
+                  active-color="#13ce66"
+                  inactive-color="#ff4949"
+                  :active-value="1"
+                  :inactive-value="0"
+                />
+              </template>
+            </el-table-column>
+            <!--  -->
+            <el-table-column
+              v-if="lockCount.isLockCount"
+              label="是否锁定牛头数比例"
+              min-width="80px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span
+                  v-if="
+                    scope.row.NoEdit &&
+                    !isproportion &&
+                    scope.row.islockcount == '0'
+                  "
+                  >否</span
+                >
+                <span
+                  v-if="
+                    scope.row.NoEdit &&
+                    !isproportion &&
+                    scope.row.islockcount == '1'
+                  "
+                  >是</span
+                >
+                <el-select
+                  v-if="scope.row.Edit || isproportion"
+                  v-model="scope.row.islockcount"
+                  placeholder=""
+                  class="filter-item"
+                  style="width: 95%; padding: 10px 0"
+                >
+                  <el-option
+                    v-for="item in lockBullsList"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id"
+                  />
+                </el-select>
+              </template>
+            </el-table-column>
+            <el-table-column label="顺序" min-width="70px" align="center">
+              <template slot-scope="scope">
+                <span v-if="scope.row.NoEdit && !isproportion">{{
+                  scope.row.sort
+                }}</span>
+                <el-input
+                  v-if="scope.row.Edit || isproportion"
+                  v-model="scope.row.sort"
+                  step="0.01"
+                  type="number"
+                  style="width: 95%; padding: 10px 0"
+                  min-number="0"
+                  @blur="blurSort(scope.row)"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="操作"
+              align="center"
+              width="120"
+              class-name="small-padding fixed-width"
+              fixed="right"
+            >
+              <template slot-scope="{ row }">
+                <el-button
+                  v-if="row.isCreate && isRoleEdit"
+                  :disabled="isokDisable"
+                  icon="el-icon-folder-checked"
+                  class="miniSuccess"
+                  @click="createData2(row)"
+                />
+                <span v-if="row.isCreate && isRoleEdit" class="centerSpan"
+                  >|</span
+                >
+                <el-button
+                  v-if="row.isCreate && isRoleEdit"
+                  class="minCancel"
+                  icon="el-icon-close"
+                  @click="createCancel2(row)"
+                />
+                <el-button
+                  v-if="row.isUpdate && isRoleEdit"
+                  class="miniSuccess"
+                  :disabled="isproportion"
+                  icon="el-icon-edit-outline"
+                  @click="handleUpdate2(row)"
+                />
+                <span v-if="row.isUpdate && isRoleEdit" class="centerSpan"
+                  >|</span
+                >
+                <el-button
+                  v-if="row.isUpdate && isRoleEdit"
+                  class="miniDanger"
+                  icon="el-icon-delete"
+                  @click="handleRowDelete2(row)"
+                />
+                <el-button
+                  v-if="row.isUpdateSave && isRoleEdit"
+                  :disabled="isokDisable"
+                  icon="el-icon-folder-checked"
+                  class="miniSuccess"
+                  @click="updateData2(row)"
+                />
+                <span v-if="row.isUpdateSave && isRoleEdit" class="centerSpan"
+                  >|</span
+                >
+                <el-button
+                  v-if="row.isUpdateSave && isRoleEdit"
+                  class="minCancel"
+                  icon="el-icon-close"
+                  @click="updateCancel2(row)"
+                />
+                <span
+                  v-if="
+                    parseInt(row.preftid) > 0 &&
+                    row.isUpdateSave == false &&
+                    isRoleEdit
+                  "
+                  class="centerSpan"
+                  >|</span
+                >
+                <el-button
+                  v-if="
+                    parseInt(row.preftid) > 0 &&
+                    row.isUpdateSave == false &&
+                    isRoleEdit
+                  "
+                  icon="el-icon-connection"
+                  class="miniSuccess"
+                  @click="handleSplitPremix(row)"
+                />
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+    </div>
+    <!-- 配方模板表 -->
+    <el-dialog
+      :fullscreen="dialogFull"
+      :destroy-on-close="true"
+      :visible.sync="template.dialogFormVisible"
+      :close-on-click-modal="false"
+      width="90%"
+    >
+      <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[template.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="dialogMinHeight"
+        style="overflow-y: auto; margin-bottom: 0px; overflow-x: hidden"
+      >
+        <div ref="templateDialog" class="templateDialog">
+          <div class="recipeTemplate">
+            <p>配方模板表</p>
+          </div>
+          <div class="operation1">
+            <el-date-picker
+              v-model="template.table.getdataListParm.parammaps.date"
+              type="date"
+              placeholder="请选择历史记录时间"
+              :clearable="false"
+              style="width: 180px"
+              format="yyyy-MM-dd"
+              value-format="yyyy-MM-dd"
+              @change="changeDate"
+            />
+            <!-- <el-button class="successBorder" @click="handleApplication">应用</el-button> -->
+          </div>
+
+          <div class="search">
+            <el-select
+              v-model="template.table.getdataListParm.parammaps.ccname"
+              placeholder="牲畜类别"
+              class="filter-item"
+              clearable
+            >
+              <el-option
+                v-for="item in livestockTypeList"
+                :key="item.value"
+                :label="item.label"
+                :value="item.label"
+              />
+            </el-select>
+            <el-select
+              v-model="template.table.getdataListParm.parammaps.fttype"
+              placeholder="配方类型"
+              class="filter-item"
+              style="width: 120px"
+              clearable
+            >
+              <el-option
+                v-for="item in formulaTypeList"
+                :key="item.value"
+                :label="item.label"
+                :value="item.label"
+              />
+            </el-select>
+            <el-select
+              v-model="template.table.getdataListParm.parammaps.enable"
+              placeholder="是否启用"
+              class="filter-item"
+              style="margin-left: 10px; width: 120px"
+              clearable
+            >
+              <el-option
+                v-for="item in enableList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              />
+            </el-select>
+            <div ref="selectInput" class="filter-item selectInput">
+              <el-input
+                type="text"
+                name=""
+                value=""
+                placeholder="请点击选择搜索条件"
+                class="Input"
+              />
+              <i
+                v-if="arrowDown"
+                icon="el-icon-arrow-down"
+                class="el-icon-arrow-down"
+              />
+              <i
+                v-if="arrowUp"
+                icon="el-icon-arrow-up"
+                class="el-icon-arrow-up"
+              />
+              <ul v-if="arrowUp" class="selectUl">
+                <li>
+                  <a>配方名称</a
+                  ><el-input
+                    v-model="template.table.getdataListParm.parammaps.tname"
+                    style="width: 245px"
+                  />
+                </li>
+                <li>
+                  <a>备注</a
+                  ><el-input
+                    v-model="template.table.getdataListParm.parammaps.remark"
+                    style="width: 245px"
+                  />
+                </li>
+                <li>
+                  <a>来源</a
+                  ><el-input
+                    v-model="template.table.getdataListParm.parammaps.source"
+                    style="width: 245px"
+                  />
+                </li>
+                <li>
+                  <div style="float: right">
+                    <el-button
+                      class="downminCancel"
+                      @click="
+                        arrowUp = false;
+                        arrowDown = true;
+                      "
+                      >取消</el-button
+                    >
+                    <el-button class="miniPrimary" @click="handleDialogSearch"
+                      >搜索</el-button
+                    >
+                  </div>
+                </li>
+              </ul>
+            </div>
+            <el-button
+              class="successBorder"
+              @click="handleDialogSearch"
+              style="margin-left: 10px"
+              >查询</el-button
+            >
+            <el-button
+              class="successBorder"
+              @click="handleDialogRefresh"
+              style="margin-left: 10px"
+              >重置</el-button
+            >
+          </div>
+
+          <div class="table">
+            <el-table
+              :key="template.table.tableKey"
+              v-loading="template.table.listLoading"
+              element-loading-text="给我一点时间"
+              :data="template.table.list"
+              border
+              fit
+              highlight-current-row
+              style="width: 98%"
+              :row-style="rowStyle"
+              :height="myheight2"
+              :cell-style="cellStyle"
+              class="elTable table-fixed"
+              @row-click="tableRowClickDialog"
+            >
+              <el-table-column
+                v-if="template.dialogStatus == 'RecipeRecord'"
+                label="序号"
+                align="center"
+                type="index"
+                width="50px"
+              />
+              <el-table-column
+                v-else
+                label="序号"
+                align="center"
+                type="index"
+                width="50px"
+              >
+                <template slot-scope="scope">
+                  <span>{{
+                    scope.$index +
+                    (template.table.pageNum - 1) * template.table.pageSize +
+                    1
+                  }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column
+                label="配方名称"
+                min-width="130px"
+                align="center"
+              >
+                <template slot-scope="scope">
+                  <span>{{ scope.row.tname }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="配方编码" min-width="90px" align="center">
+                <template slot-scope="scope">
+                  <span>{{ scope.row.tcode }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column
+                label="配方颜色"
+                min-width="110px"
+                align="center"
+              >
+                <template slot-scope="scope">
+                  <el-color-picker
+                    v-model="scope.row.tcolor"
+                    size="mini"
+                    :predefine="predefineColors"
+                    style="vertical-align: middle"
+                  />
+                </template>
+              </el-table-column>
+              <el-table-column
+                label="牲畜类别"
+                min-width="110px"
+                align="center"
+              >
+                <template slot-scope="scope">
+                  <span>{{ scope.row.ccname }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column
+                label="配方类型"
+                min-width="110px"
+                align="center"
+              >
+                <template slot-scope="scope">
+                  <span>{{ scope.row.fttype }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="来源" min-width="90px" align="center">
+                <template slot-scope="scope">
+                  <span>{{ scope.row.source }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="备注" min-width="90px" align="center">
+                <template slot-scope="scope">
+                  <span>{{ scope.row.remark }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="版本号" min-width="90px" align="center">
+                <template slot-scope="scope">
+                  <span>{{ scope.row.version }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="版本时间" min-width="90px" align="center">
+                <template slot-scope="scope">
+                  <span>{{ scope.row.versiontime }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="是否启用" min-width="90px" align="center">
+                <template slot-scope="scope">
+                  <el-switch
+                    v-model="scope.row.enable"
+                    disabled
+                    active-color="#13ce66"
+                    inactive-color="#ff4949"
+                    :active-value="1"
+                    :inactive-value="0"
+                  />
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </div>
+
+        <div
+          v-if="isDetailDialog"
+          id="detailDialog2"
+          ref="detailDialog2"
+          class="detailDialog"
+          style="
+            margin-top: 30px;
+            height: 200px;
+            overflow-y: auto;
+            overflow-x: hidden;
+          "
+        >
+          <div class="recipeTemplate">
+            <p>配方详情表</p>
+          </div>
+          <div class="operation">
+            <div ref="selectInput2" class="filter-item selectInput">
+              <el-input
+                type="text"
+                name=""
+                value=""
+                placeholder="请点击选择搜索条件"
+                class="Input"
+              />
+              <i
+                v-if="arrowDown2"
+                icon="el-icon-arrow-down"
+                class="el-icon-arrow-down"
+              />
+              <i
+                v-if="arrowUp2"
+                icon="el-icon-arrow-up"
+                class="el-icon-arrow-up"
+              />
+              <ul v-if="arrowUp2" class="selectUl">
+                <li>
+                  <a style="width: 130px">饲料名称</a>
+                  <el-select
+                    v-model="template.table2.getdataListParm.parammaps.fname"
+                    filterable
+                    placeholder=""
+                    style="width: 245px"
+                  >
+                    <el-option
+                      v-for="item in feedNameList"
+                      :key="item.id"
+                      :label="item.fname"
+                      :value="item.fname"
+                    />
+                  </el-select>
+                </li>
+                <li>
+                  <a style="width: 130px">饲料组名称</a
+                  ><el-input
+                    v-model="
+                      template.table2.getdataListParm.parammaps.feedgroup
+                    "
+                    style="width: 245px"
+                  />
+                </li>
+                <li>
+                  <a style="width: 130px">重量</a
+                  ><el-input
+                    v-model="template.table2.getdataListParm.parammaps.fweight"
+                    style="width: 245px"
+                  />
+                </li>
+                <li>
+                  <a style="width: 130px">搅拌延时</a>
+                  <el-select
+                    v-model="
+                      template.table2.getdataListParm.parammaps.autosecondname
+                    "
+                    filterable
+                    placeholder=""
+                    style="width: 245px"
+                  >
+                    <el-option
+                      v-for="item in mixingDelayList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.name"
+                    />
+                  </el-select>
+                </li>
+                <li>
+                  <a style="width: 130px">是否锁定牛头数比例</a>
+                  <el-select
+                    v-model="
+                      template.table2.getdataListParm.parammaps.islockcount
+                    "
+                    placeholder=""
+                    style="width: 245px"
+                  >
+                    <el-option
+                      v-for="item in lockBullsList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+                  </el-select>
+                </li>
+                <li>
+                  <a style="width: 130px">顺序</a
+                  ><el-input
+                    v-model="template.table2.getdataListParm.parammaps.sort"
+                    style="width: 245px"
+                  />
+                </li>
+                <li>
+                  <div style="float: right">
+                    <el-button
+                      class="downminCancel"
+                      @click="
+                        arrowUp2 = false;
+                        arrowDown2 = true;
+                      "
+                      >取消</el-button
+                    >
+                    <el-button class="miniPrimary" @click="handleDialogSearch2"
+                      >搜索</el-button
+                    >
+                  </div>
+                </li>
+              </ul>
+            </div>
+            <el-button class="successBorder" @click="handleDialogSearch2"
+              >查询</el-button
+            >
+            <el-button class="successBorder" @click="handleDialogRefresh2"
+              >重置</el-button
+            >
+            <el-button class="hide" @click="handleDialogCloseTable2"
+              >隐藏</el-button
+            >
+          </div>
+
+          <div class="table2">
+            <el-table
+              id="templateTable2"
+              :key="template.table2.tableKey"
+              v-loading="template.table2.listLoading"
+              element-loading-text="给我一点时间"
+              :data="template.table2.list"
+              border
+              fit
+              highlight-current-row
+              style="width: 98%"
+              :summary-method="getTemplateTable2Summaries"
+              show-summary
+              :row-style="rowStyle"
+              :cell-style="cellStyle"
+              class="elTable table-fixed"
+              row-key="id"
+            >
+              <el-table-column label="饲料组" min-width="130px" align="center">
+                <template slot-scope="scope">
+                  <span>{{ scope.row.feedgroup }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column
+                label="饲料名称"
+                min-width="130px"
+                align="center"
+              >
+                <template slot-scope="scope">
+                  <span>{{ scope.row.fname }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column
+                label="重量(KG)"
+                prop="fweight"
+                min-width="200px"
+                align="center"
+              >
+                <template slot-scope="scope">
+                  <span>{{ scope.row.fweight }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column
+                label="搅拌延时(min)"
+                min-width="130px"
+                align="center"
+              >
+                <template slot-scope="scope">
+                  <span>{{ scope.row.autosecondname }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column
+                label="是否锁定牛头数比例"
+                min-width="130px"
+                align="center"
+              >
+                <template slot-scope="scope">
+                  <span v-if="scope.row.islockcount == '0'">否</span>
+                  <span v-if="scope.row.islockcount == '1'">是</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="顺序" min-width="130px" align="center">
+                <template slot-scope="scope">
+                  <span>{{ scope.row.sort }}</span>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </div>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+          class="cancelClose cancelClose1"
+          @click="template.dialogFormVisible = false"
+          >关闭</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <!-- 合成预混料 -->
+    <el-dialog
+      :fullscreen="dialogFull"
+      :destroy-on-close="true"
+      :visible.sync="detail.dialogFormVisible"
+      :close-on-click-modal="false"
+      width="90%"
+    >
+      <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[detail.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="detailDialog">
+        <h2>饲料</h2>
+        <div class="table1">
+          <el-table
+            :key="detail.tableKey"
+            v-loading="detail.listLoading"
+            element-loading-text="给我一点时间"
+            :data="detail.list"
+            fit
+            highlight-current-row
+            style="width: 100%"
+            :row-style="rowStyle"
+            :cell-style="cellStyle"
+            class="elTable table-fixed"
+            show-summary
+          >
+            <el-table-column
+              label="序号"
+              align="center"
+              type="index"
+              width="50px"
+            />
+            <el-table-column label="饲料名称" min-width="130px" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.fname }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="fweight" label="重量(KG)" />
+            <el-table-column
+              label="搅拌延时(min)"
+              min-width="110px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span>{{ scope.row.autosecond }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column
+              v-if="lockCount.isLockCount"
+              label="是否锁定牛头数比例"
+              min-width="130px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span v-if="scope.row.islockcount == '0'">否</span>
+                <span v-if="scope.row.islockcount == '1'">是</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="顺序" min-width="110px" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.sort }}</span>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <h2>合成预混料</h2>
+        <div class="table2" style="margin-bottom: 50px">
+          <el-table
+            :key="detail.tableKey2"
+            v-loading="detail.listLoading2"
+            element-loading-text="给我一点时间"
+            :data="detail.list2"
+            border
+            fit
+            highlight-current-row
+            style="width: 100%"
+            :row-style="rowStyle"
+            :cell-style="cellStyle"
+            class="elTable table-fixed"
+          >
+            <el-table-column label="配方名称" min-width="130px" align="center">
+              <template slot-scope="scope">
+                <el-input
+                  v-model="scope.row.tname"
+                  type="textarea"
+                  :autosize="{ minRows: 1.3, maxRows: 4 }"
+                  maxlength="32"
+                  style="width: 95%; padding: 10px 0"
+                  :disabled="detail.disabled"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="配方颜色" min-width="130px" align="center">
+              <template slot-scope="scope">
+                <el-color-picker
+                  v-model="scope.row.tcolor"
+                  size="mini"
+                  :predefine="predefineColors"
+                  style="vertical-align: middle"
+                  :disabled="detail.disabled"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="牲畜类别" min-width="130px" align="center">
+              <template slot-scope="scope">
+                <el-select
+                  v-model="scope.row.ccid"
+                  placeholder="选择牲畜父类"
+                  class="filter-item"
+                  style="width: 95%; padding: 10px 0"
+                  :disabled="detail.disabled"
+                  @change="changeLivestockType2"
+                >
+                  <el-option
+                    v-for="item in livestockTypeList"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  />
+                </el-select>
+              </template>
+            </el-table-column>
+            <el-table-column label="配方类型" min-width="110px" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.fttype }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="来源" min-width="110px" align="center">
+              <template slot-scope="scope">
+                <span>{{ scope.row.source }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="容重(kg/m³)"
+              min-width="130px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <el-input
+                  v-model="scope.row.volume"
+                  style="width: 95%; padding: 10px 0"
+                  :disabled="detail.disabled"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="备注" min-width="130px" align="center">
+              <template slot-scope="scope">
+                <el-input
+                  v-model="scope.row.remark"
+                  type="textarea"
+                  :autosize="{ minRows: 1.3, maxRows: 4 }"
+                  maxlength="32"
+                  style="width: 95%; padding: 10px 0"
+                  :disabled="detail.disabled"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="是否启用" min-width="130px" align="center">
+              <template slot-scope="scope">
+                <el-switch
+                  v-model="scope.row.enable"
+                  active-color="#13ce66"
+                  inactive-color="#ff4949"
+                  :active-value="1"
+                  :inactive-value="0"
+                  :disabled="detail.disabled"
+                />
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <div slot="footer" class="dialog-footer">
+          <el-button
+            class="cancelClose"
+            @click="detail.dialogFormVisible = false"
+            >关闭</el-button
+          >
+          <el-button
+            class="save"
+            :disabled="isokDisable"
+            @click="syntheticPremixData()"
+            >确认</el-button
+          >
+        </div>
+      </div>
+    </el-dialog>
+    <!-- 历史记录 -->
+    <el-dialog
+      :title="textMap[historyRecord.dialogStatus]"
+      :destroy-on-close="true"
+      :visible.sync="historyRecord.dialogFormVisible"
+      :close-on-click-modal="false"
+      width="90%"
+    >
+      <div class="historyRecord">
+        <keep-alive>
+          <component :is="historyRecord.myComponent" ref="historyRecord" />
+        </keep-alive>
+      </div>
+      <div slot="footer" class="dialog-footer" style="bottom: 10px">
+        <el-button
+          class="cancelClose1"
+          @click="historyRecord.dialogFormVisible = false"
+          >关闭</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <!-- 行内配方记录 -->
+    <el-dialog
+      :title="textMap[rowRecipeRecord.dialogStatus]"
+      :destroy-on-close="true"
+      :visible.sync="rowRecipeRecord.dialogFormVisible"
+      :close-on-click-modal="false"
+      width="90%"
+    >
+      <div class="rowRecipeRecord">
+        <div class="search">
+          <el-date-picker
+            ref="inputDatetime"
+            v-model="rowRecipeRecord.getdataListParm.parammaps.inputDatetime"
+            class="filter-item inputDatetime"
+            type="daterange"
+            style="width: 250px; top: -3px"
+            format="yyyy-MM-dd"
+            value-format="yyyy-MM-dd"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+          />
+          <el-button class="successBorder" @click="handleRowRecipeRecordSearch"
+            >查询</el-button
+          >
+        </div>
+        <div class="table">
+          <el-table
+            :key="rowRecipeRecord.tableKey"
+            v-loading="rowRecipeRecord.listLoading"
+            element-loading-text="给我一点时间"
+            :data="rowRecipeRecord.list"
+            border
+            highlight-current-row
+            style="width: 100%"
+            :row-style="rowStyle"
+            :cell-style="cellStyle"
+            class="elTable table-fixed"
+          >
+            <el-table-column
+              label="序号"
+              align="center"
+              type="index"
+              width="50px"
+            >
+              <template slot-scope="scope">
+                <span>{{
+                  scope.$index +
+                  (rowRecipeRecord.pageNum - 1) * rowRecipeRecord.pageSize +
+                  1
+                }}</span>
+              </template>
+            </el-table-column>
+            <!-- <el-table-column label="序号" width="60px" align="center" prop="sort" /> -->
+            <el-table-column
+              label="修改时间"
+              width="100px"
+              align="center"
+              prop="datetime1"
+            />
+            <el-table-column
+              label="修改用户"
+              width="130px"
+              align="center"
+              prop="empname"
+            />
+            <el-table-column
+              label="饲料名称(单位:kg)"
+              min-width="800px"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <div
+                  v-for="element in scope.row.arrList"
+                  :key="element.name"
+                  class="list-group-item2 item"
+                  style="
+                    width: 150px;
+                    float: left;
+                    overflow: hidden;
+                    text-overflow: ellipsis;
+                    white-space: nowrap;
+                    margin: 5px 5px;
+                    padding: 0;
+                    height: 30px;
+                  "
+                >
+                  <el-tooltip
+                    v-if="element.change == 'red'"
+                    placement="top"
+                    :open-delay="1000"
+                  >
+                    <div slot="content">
+                      {{ element.name }}( {{ element.weight }} /
+                      {{ element.Eweight }} )
+                    </div>
+                    <span
+                      :style="{ color: element.change }"
+                      style="display: block; height: 30px; line-height: 30px"
+                    >
+                      {{ element.name }}( {{ element.weight }} /
+                      {{ element.Eweight }} )
+                    </span>
+                  </el-tooltip>
+                  <el-tooltip v-else placement="top" :open-delay="1000">
+                    <div slot="content">
+                      {{ element.name }}( {{ element.weight }})
+                    </div>
+                    <span
+                      :style="{ color: element.change }"
+                      style="display: block; height: 30px; line-height: 30px"
+                    >
+                      {{ element.name }}( {{ element.weight }})
+                    </span>
+                  </el-tooltip>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination
+            v-show="rowRecipeRecord.total >= 0"
+            :total="rowRecipeRecord.total"
+            :page.sync="rowRecipeRecord.getdataListParm.offset"
+            :limit.sync="rowRecipeRecord.getdataListParm.pagecount"
+            @pagination="getRowRecipeRecordList()"
+          />
+        </div>
+      </div>
+      <div slot="footer" class="dialog-footer" style="bottom: 10px">
+        <el-button
+          class="cancelClose1"
+          @click="rowRecipeRecord.dialogFormVisible = false"
+          >关闭</el-button
+        >
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  GetDataByName,
+  GetDataByNames,
+  PostDataByName,
+  failproccess,
+  checkButtons,
+  postJson,
+  ExecDataByConfig,
+  formatNum,
+  getSurplus,
+} from "@/api/common";
+import Sortable from "sortablejs";
+import { MessageBox } from "element-ui";
+import Cookies from "js-cookie";
+import { json2excel } from "@/utils/index.js";
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import { parseTime } from "@/utils/index.js";
+import Pagination from "@/components/Pagination";
+
+export default {
+  name: "RecipeTemplate",
+  components: { Pagination },
+  data() {
+    return {
+      isproportion: false,
+      oldList: [],
+      tableData: [],
+      chooseTableData: [],
+      dialogFull: false,
+      predefineColors: [
+        "#E57373",
+        "#F06292",
+        "#BA68C8",
+        "#9575CD",
+        "#7986CB",
+        "#64B5F6",
+        "#4FC3F7",
+        "#4DD0E1",
+        "#4DB6AC",
+        "#81C784",
+        "#AED581",
+        "#DCE775",
+        "#FFF176",
+        "#FFD54F",
+        "#FFB74D",
+        "#FF8A65",
+        "#A1887F",
+        "#E0E0E0",
+        "#90A4AE",
+      ],
+      isRoleEdit: [],
+      myheight: document.documentElement.clientHeight - 265,
+      requestParams: [
+        {
+          name: "getCowclassList",
+          page: 1,
+          offset: 1,
+          pagecount: 50,
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            classname: "",
+            parentname: "",
+            enable: 1,
+          },
+        },
+        // { name: 'getDictByName', offset: 0, pagecount: 0, params: ['牲畜父类'] },
+        {
+          name: "getDictByName2",
+          offset: 0,
+          pagecount: 0,
+          params: ["配方类型"],
+        },
+        {
+          name: "getFeedAndPre",
+          offset: 0,
+          pagecount: 0,
+          parammaps: { pastureid: Cookies.get("pastureid") },
+        },
+        { name: "getDistCattle", offset: 0, pagecount: 0, parammaps: {} },
+      ],
+      distCattle: [], //牛群类别
+      enableList: [
+        { id: "0", name: "否" },
+        { id: "1", name: "是" },
+      ], // 是否启用
+      lockBullsList: [
+        { id: "0", name: "否" },
+        { id: "1", name: "是" },
+      ], // 是否锁定牛头数比例
+      livestockTypeList: [], // 牲畜类别
+      formulaTypeList: [], // 配方类型
+      feedNameList: [], // 饲料名称
+      mixingDelayList: [
+        { id: "0", name: "0" },
+        { id: "1", name: "1" },
+        { id: "2", name: "2" },
+        { id: "3", name: "3" },
+        { id: "4", name: "4" },
+        { id: "5", name: "5" },
+        { id: "6", name: "6" },
+        { id: "7", name: "7" },
+        { id: "8", name: "8" },
+        { id: "9", name: "9" },
+        { id: "10", name: "10" },
+        { id: "11", name: "11" },
+        { id: "12", name: "12" },
+        { id: "13", name: "13" },
+        { id: "14", name: "14" },
+        { id: "15", name: "15" },
+      ], // 搅拌延时
+      selectHistoryTimeList: [
+        { id: 0, name: "2020-06-10" },
+        { id: 1, name: "2020-06-11" },
+        { id: 2, name: "2020-06-12" },
+        { id: 3, name: "2020-06-13" },
+      ], // 请选择历史记录时间
+      arrowDown: true,
+      arrowUp: false,
+      ispastureuse: Cookies.get("ispastureuse"),
+      table: {
+        getdataListParm: {
+          name: "getFTList",
+          page: 1,
+          offset: 1,
+          pagecount: "",
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            tname: "",
+            ccid: "",
+            ccname: "",
+            fttypeid: "",
+            fttype: "",
+            remark: "",
+            enable: "1",
+            source: "",
+          },
+        },
+        tableKey: 0,
+        list: [],
+        total: 0,
+        listLoading: true,
+        temp: {},
+      },
+      lockCount: {
+        getdataListParm: {
+          name: "getSysoptEnable",
+          page: 1,
+          offset: 1,
+          pagecount: 30,
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            inforname: "isLockCount",
+          },
+        },
+        isLockCount: false, // 是否显示是否锁定牛头数比例
+      },
+      isDetail: false,
+      arrowDown2: true,
+      arrowUp2: false,
+      table2: {
+        getDryweightParm: {
+          name: "getFTdryweight",
+          page: 1,
+          offset: 1,
+          pagecount: 10,
+          returntype: "Map",
+          parammaps: {
+            pastureid: "",
+            ftid: "",
+          },
+        },
+        dryweight: "",
+        getdataListParm: {
+          name: "getFTdetailList",
+          page: 1,
+          offset: 1,
+          pagecount: "",
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            fname: "",
+            feedgroup: "",
+            fweight: "",
+            autosecondname: "",
+            islockcount: "",
+            sort: "",
+          },
+        },
+        tableKey: 0,
+        list: [],
+        total: 0,
+        listLoading: true,
+        temp: {},
+        updateList: {},
+      },
+      isDetailDialog: false,
+      template: {
+        dialogFormVisible: false,
+        dialogStatus: "",
+        table: {
+          getdataListParm: {
+            name: "getFTListDate",
+            page: 1,
+            offset: 1,
+            pagecount: "",
+            returntype: "Map",
+            parammaps: {
+              pastureid: Cookies.get("pastureid"),
+              tname: "",
+              ccid: "",
+              ccname: "",
+              fttype: "",
+              remark: "",
+              enable: "",
+              date: "",
+              source: "",
+            },
+          },
+          tableKey: 0,
+          total: 0,
+          listLoading: true,
+          list: [],
+        },
+        table2: {
+          getdataListParm: {
+            name: "getFTdetailListDate",
+            page: 1,
+            offset: 1,
+            pagecount: 10,
+            returntype: "Map",
+            parammaps: {
+              pastureid: Cookies.get("pastureid"),
+              fname: "",
+              fweight: "",
+              islockcount: "",
+              sort: "",
+              feedgroup: "",
+              autosecondname: "",
+            },
+          },
+          tableKey: 0,
+          total: 0,
+          listLoading: true,
+          list: [],
+        },
+        // 历史日期
+        getdataDateParm: {
+          name: "getFTMaxDate",
+          page: 1,
+          offset: 1,
+          pagecount: 10,
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+          },
+        },
+      },
+
+      isOrder: true,
+      detail: {
+        dialogFormVisible: false,
+        dialogStatus: "",
+        tableKey: 0,
+        total: 0,
+        listLoading: true,
+        list: [],
+        tableKey2: 0,
+        total2: 0,
+        listLoading2: false,
+        list2: [
+          {
+            tname: "",
+            tcolor: "#ccc",
+            ccid: "",
+            fttype: "预混配方",
+            fttypeid: "2",
+            source: "自定义",
+            remark: "",
+            enable: 1,
+          },
+        ],
+        getdataListParm: {
+          name: "getFTDetailCompare",
+          page: 1,
+          offset: 1,
+          pagecount: 10,
+          returntype: "Map",
+          parammaps: {},
+        },
+        list3: [],
+        disabled: false,
+        getdataListParm2: {
+          name: "getFTCompare",
+          page: 1,
+          offset: 1,
+          pagecount: 10,
+          returntype: "Map",
+          parammaps: {},
+        },
+      },
+      selectList: [],
+      selectList2: [],
+      textMap: {
+        RecipeRecord: "配方记录",
+        SyntheticPremix: "合成预混料",
+        historyRecord: "历史记录",
+        detail: "饲料详情",
+        rowRecipeRecordTxt: "配方修改记录",
+      },
+
+      requestParam: {},
+      requestParam2: {},
+      requestParam3: {},
+      download: {
+        getdataListParm: {
+          name: "getFTList",
+          page: 1,
+          offset: 1,
+          pagecount: 0,
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            tname: "",
+            ccid: "",
+            ccname: "",
+            fttypeid: "",
+            fttype: "",
+            remark: "",
+            enable: "",
+          },
+        },
+        list: [],
+      },
+      historyRecord: {
+        dialogStatus: "",
+        dialogFormVisible: false,
+      },
+      isokDisable: false,
+      rowStyle: { maxHeight: 30 + "px", height: 30 + "px" },
+      cellStyle: { padding: 0 + "px" },
+      dropState: false,
+      myheight2: 0,
+      height: 0,
+      rowRecipeRecord: {
+        dialogStatus: "",
+        dialogFormVisible: false,
+        getdataListParm: {
+          name: "getFitHistory1",
+          name1: "getFitHistory2",
+          page: 1,
+          offset: 1,
+          pagecount: 10,
+          returntype: "Map",
+          parammaps: { inputDatetime: "", pastureid: "", fitid: "" },
+        },
+        tableKey: 0,
+        total: 0,
+        listLoading: true,
+        list: [],
+      },
+      isEnlarge: true,
+      ispalyUd: true,
+      // enlargeHeight: document.documentElement.clientHeight - 85 - 165 + 50,
+      enlargeHeight: document.documentElement.clientHeight - 85 - 165 + 50,
+      getTcodeParm: {
+        name: "getTcode",
+        page: 1,
+        offset: 1,
+        pagecount: 10,
+        returntype: "Map",
+        parammaps: { pastureid: "", fttypeid: "" },
+      },
+      sourceList: [
+        { id: "0", name: "自定义" },
+        { id: "1", name: "集团下发未调整" },
+        { id: "2", name: "集团下发有调整" },
+        { id: "3", name: "导入" },
+      ],
+    };
+  },
+  computed: {
+    // 设置请求头
+    headers() {
+      return {
+        token: getToken(),
+      };
+    },
+    uploadData() {
+      return {
+        name: "checkfttype,checkbigcowclass,checkFeed,insertFTUpload,insertFTdetailUpload",
+        importParams:
+          "配方名称,牲畜类别,配方类型,备注,饲料组,饲料名称,重量(kg),搅拌延时(min),是否锁定牛头数比例",
+        sheetname: "Sheet1",
+        // 登录牧场
+        pastureid: Cookies.get("pastureid"),
+        // 日期参数
+        dateParams: "",
+        // 必填参数
+        requiredParams:
+          "配方名称,牲畜类别,配方类型,饲料名称,重量(kg),搅拌延时(min),是否锁定牛头数比例",
+        // 为数值的参数
+        numParams: "重量(kg),搅拌延时(min)",
+      };
+    },
+    // 设置上传地址
+    uploadExcelUrl() {
+      return Cookies.get("url") + "authdata/ImportExcel";
+    },
+  },
+  mounted() {
+    document.addEventListener("click", (e) => {
+      if (this.$refs.selectInput !== undefined) {
+        if (!this.$refs.selectInput.contains(e.target)) {
+          this.arrowDown = true;
+          this.arrowUp = false;
+        } else {
+          this.arrowDown = false;
+          this.arrowUp = true;
+        }
+      }
+      if (this.$refs.selectInput2 !== undefined) {
+        if (!this.$refs.selectInput2.contains(e.target)) {
+          this.arrowDown2 = true;
+          this.arrowUp2 = false;
+        } else {
+          this.arrowDown2 = false;
+          this.arrowUp2 = true;
+        }
+      }
+    });
+  },
+  created() {
+    this.getIspalyUd();
+    this.getList();
+    this.getButtons();
+    this.getDownList();
+    this.getIsLockCount();
+    this.getLeftTable();
+  },
+  methods: {
+    handle_batchEdit() {
+      this.isproportion = true;
+      this.oldList = JSON.parse(JSON.stringify(this.table2.list));
+      this.table2.list.forEach((item, key) => {
+        item.Edit = false;
+        item.NoEdit = true;
+        item.isUpdate = true;
+        item.isUpdateSave = false;
+        item.groupEdit = false;
+      });
+    },
+    cancelChangeEdit() {
+      // 取消顺序
+      this.form_search2();
+      this.isproportion = false;
+    },
+    SaveEdit() {
+      const arr = this.table2.list.filter((item2) => {
+        return !this.oldList.some(
+          (item1) =>
+            item1.id == item2.id &&
+            item1.fname == item2.fname &&
+            item1.fweight === item2.fweight &&
+            item1.autosecondname === item2.autosecondname &&
+            item1.islockcount === item2.islockcount &&
+            item1.sort === item2.sort &&
+            item1.deviation == item2.deviation
+        );
+      });
+      console.log(arr, "arr");
+      const barList = [];
+      arr.forEach((item) => {
+        let obj = {};
+        obj.fname = item.fname;
+        obj.fweight = item.fweight;
+        obj.autosecondname = item.autosecondname;
+        obj.islockcount = item.islockcount;
+        obj.sort = item.sort;
+        obj.deviation = item.deviation;
+        barList.push(obj);
+      });
+      console.log(barList, "barList");
+      let dateTime = parseTime(new Date(), "{y}-{m}-{d} {h}:{i}:{s}");
+      this.requestParam.common = { returnmap: "0" };
+      this.requestParam.createdate = dateTime;
+      this.requestParam.userId = Cookies.get("employeid");
+      this.requestParam.data = [];
+      if (Array.isArray(barList)) {
+        this.requestParam.data = barList.reduce((acc, currentRow) => {
+          const newData = this.c(currentRow);
+          newData.forEach((item, index) => {
+            // 使用Vue.set确保响应式更新[1,2](@ref)
+            this.$set(acc, acc.length + index, item);
+          });
+          return acc;
+        }, []);
+      }
+      console.log(this.requestParam.data, "this.requestParam");
+      const url = "authdata/ftdetail/edit";
+      const data = this.requestParam;
+      postJson(url, data).then((response) => {
+        if (response.msg !== "fail") {
+          this.$notify({
+            title: "成功",
+            message: "保存成功",
+            type: "success",
+            duration: 2000,
+          });
+          this.getList2();
+          this.getList3();
+          this.dropState = false;
+        } else {
+          this.$notify({
+            title: "保存失败",
+            message: response.data,
+            type: "warning",
+            duration: 2000,
+          });
+        }
+      });
+    },
+    handle_batchEdit_save() {
+      console.log(this.oldList, "oldList");
+      console.log(this.table2.list, "this.table2.list");
+      this.SaveEdit();
+    },
+
+    // 获取替代方案的名字
+    handlegetSurplus(id, row) {
+      const arr = this.tableData.filter((item) => {
+        if (item.id == id) return item;
+      });
+      row.surplus = (arr.length && arr[0].surplus) || "";
+      row.surplusId = (arr.length && arr[0].id) || 0;
+      console.log(row, "hsss");
+    },
+    // 点击编辑的时候 获取当前配方下的饲料数组
+    // 把剩料的数组和 配方下的进行比较 相同的值则可选择,不同的则只能禁止掉
+    handleChooseLeftOver(row) {
+      this.table2.getdataListParm.parammaps.tcolor = row.tcolor;
+      this.table2.getdataListParm.parammaps.tname = row.tname;
+      this.table2.getdataListParm.parammaps.ccname = row.ccname;
+      this.table2.getdataListParm.parammaps.fttype = row.fttype;
+      this.table2.getdataListParm.parammaps.ftid = row.id;
+      this.table2.getdataListParm.parammaps.fttypeid = row.fttypeid;
+      this.table2.getdataListParm.parammaps.dryweight = row.dryweight;
+      GetDataByName(this.table2.getdataListParm).then((res) => {
+        const { data } = res;
+
+        let ids = [];
+        if (data.list && data.list.length) {
+          ids = data.list.map((item) => {
+            return item.fid;
+          });
+        } else {
+          ids = [];
+        }
+        console.log(ids, this.chooseTableData, "饲料-----");
+        const arr = this.chooseTableData.filter((item) => {
+          if (ids.includes(item.feedId) || item.surplus == "日粮") {
+            return item;
+          }
+        });
+        console.log(ids, arr, "hss----");
+        this.tableData = arr;
+      });
+    },
+    async getLeftTable() {
+      const { data } = await getSurplus(Cookies.get("pastureid"));
+      this.chooseTableData = JSON.parse(JSON.stringify(data));
+      this.tableData = data;
+    },
+    getButtons() {
+      const Edit = "RecipeTemplate";
+      const isRoleEdit = checkButtons(
+        JSON.parse(sessionStorage.getItem("buttons")),
+        Edit
+      );
+      this.isRoleEdit = isRoleEdit;
+    },
+    getSummaries(param) {
+      const { columns, data } = param;
+      const sums = [];
+      columns.forEach((column, index) => {
+        if (index === 0) {
+          sums[index] = "合计";
+          return;
+        }
+        if (column.property !== undefined) {
+          // 加了prop属性的el-table-column 才能找到column.property
+          const values = data.map((item) => Number(item[column.property]));
+          if (!values.every((value) => isNaN(value))) {
+            sums[index] = values.reduce((prev, curr) => {
+              const value = Number(curr);
+              if (!isNaN(value)) {
+                return prev + curr; // 多行相加
+              } else {
+                return prev;
+              }
+            }, 0);
+            sums[index] =
+              sums[index].toFixed(4) +
+              "(干物质量:" +
+              this.table2.dryweight +
+              ")";
+          } else {
+            sums[index] = "";
+          }
+        }
+      });
+      // console.log(sums, 'sums[index]')
+      return sums;
+    },
+    getDryWeight() {
+      GetDataByName(this.table2.getDryweightParm).then((response) => {
+        console.log("干物质数据", response.data.list);
+        if (response.data.list[0].dryweight !== undefined) {
+          this.table2.dryweight = response.data.list[0].dryweight;
+        } else {
+          this.table2.dryweight = "";
+        }
+      });
+    },
+    getTemplateTable2Summaries(param) {
+      const { columns, data } = param;
+      const sums = [];
+      columns.forEach((column, index) => {
+        if (index === 0) {
+          sums[index] = "合计";
+          return;
+        }
+        const values = data.map((item) => Number(item[column.property]));
+        if (!values.every((value) => isNaN(value))) {
+          sums[index] = values.reduce((prev, curr) => {
+            const value = Number(curr);
+            if (!isNaN(value)) {
+              return prev + curr;
+            } else {
+              return prev;
+            }
+          }, 0);
+          // 后台待发
+          sums[index] +=
+            "(干物质量:" +
+            this.template.table2.getdataListParm.parammaps.dryweight +
+            ")";
+        } else {
+          sums[index] = "";
+        }
+      });
+      return sums;
+    },
+    getDownList() {
+      GetDataByNames(this.requestParams).then((response) => {
+        // this.livestockTypeList = response.data.getDictByName.list
+        this.livestockTypeList = response.data.getCowclassList.list;
+        for (var i = 0; i < this.livestockTypeList.length; i++) {
+          this.livestockTypeList[i].label = this.livestockTypeList[i].classname;
+          this.livestockTypeList[i].value = this.livestockTypeList[i].id;
+        }
+        this.formulaTypeList = response.data.getDictByName2.list;
+        this.feedNameList = response.data.getFeedAndPre.list;
+        this.distCattle = response.data.getDistCattle.list;
+      });
+    },
+    // -------------------模板-----------------------------
+    getList() {
+      this.table.listLoading = true;
+      GetDataByName(this.table.getdataListParm).then((response) => {
+        console.log("配方模板table数据", response.data.list);
+        if (response.data.list !== null) {
+          for (let i = 0; i < response.data.list.length; i++) {
+            this.$set(response.data.list[i], "Edit", false); // 编辑
+            this.$set(response.data.list[i], "NoEdit", true); // 不可编辑/输入
+            this.$set(response.data.list[i], "isCreate", false); // 新增操作
+            this.$set(response.data.list[i], "isUpdate", true); // 编辑操作
+            this.$set(response.data.list[i], "isUpdateSave", false); // 编辑保存
+          }
+          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 = [];
+          this.isDetail = false;
+        }
+        setTimeout(() => {
+          this.table.listLoading = false;
+        }, 100);
+      });
+    },
+    getList3() {
+      this.table.listLoading = true;
+      GetDataByName(this.table.getdataListParm).then((response) => {
+        console.log("table数据", response.data.list);
+        if (response.data.list !== null) {
+          for (let i = 0; i < response.data.list.length; i++) {
+            this.$set(response.data.list[i], "Edit", false); // 编辑
+            this.$set(response.data.list[i], "NoEdit", true); // 不可编辑/输入
+            this.$set(response.data.list[i], "isCreate", false); // 新增操作
+            this.$set(response.data.list[i], "isUpdate", true); // 编辑操作
+            this.$set(response.data.list[i], "isUpdateSave", false); // 编辑保存
+          }
+          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 = [];
+          this.isDetail = false;
+        }
+        setTimeout(() => {
+          this.table.listLoading = false;
+        }, 100);
+      });
+    },
+    form_search() {
+      console.log("点击了查询");
+      this.table.getdataListParm.offset = 1;
+      this.getList();
+      this.table.getdataListParm.parammaps.all = "";
+      var obj = {};
+      obj.tname = this.table.getdataListParm.parammaps.tname;
+      obj.remark = this.table.getdataListParm.parammaps.remark;
+      // obj.source = this.table.getdataListParm.parammaps.source
+      Object.getOwnPropertyNames(obj).forEach((key) => {
+        console.log(key, obj[key]);
+        if (obj[key] !== "") {
+          this.table.getdataListParm.parammaps.all += obj[key] + "/";
+        }
+      });
+      if (
+        this.table.getdataListParm.parammaps.all.charAt(
+          this.table.getdataListParm.parammaps.all.length - 1
+        ) == "/"
+      ) {
+        this.table.getdataListParm.parammaps.all =
+          this.table.getdataListParm.parammaps.all.slice(
+            0,
+            this.table.getdataListParm.parammaps.all.length - 1
+          );
+      }
+      this.arrowDown = true;
+      this.arrowUp = false;
+    },
+    handleRefresh() {
+      console.log("点击了重置");
+      this.table.getdataListParm.offset = 1;
+      this.table.getdataListParm.parammaps.ccid = "";
+      this.table.getdataListParm.parammaps.ccname = "";
+      this.table.getdataListParm.parammaps.fttype = "";
+      this.table.getdataListParm.parammaps.tname = "";
+      this.table.getdataListParm.parammaps.remark = "";
+      this.table.getdataListParm.parammaps.enable = "1";
+      this.table.getdataListParm.parammaps.source = "";
+      this.table.getdataListParm.parammaps.all = "";
+      this.getList();
+    },
+
+    // 模板新增
+    handleCreate() {
+      // 编辑true/不可编辑false
+      // 新增操true,编辑false,编辑保存false
+      for (let i = 0; i < this.table.list.length; i++) {
+        if (this.table.list[i].Edit === true) {
+          this.$message({
+            type: "error",
+            message: "当前内容未保存,请点击取消或保存继续进行操作",
+            duration: 2000,
+          });
+          return false;
+        }
+      }
+      this.table.list.unshift({
+        myId: new Date().valueOf(),
+        Edit: true,
+        NoEdit: false,
+        isCreate: true,
+        isUpdate: false,
+        isUpdateSave: false,
+        enable: 1,
+        autozone: 0,
+        tname: "",
+        tcode: "",
+        tcolor: "#ccc",
+        ccid: "",
+        ccname: "",
+        fttype: "",
+        fttypeid: "",
+        volume: "",
+        source: "自定义",
+        remark: "",
+        cattle: "",
+      });
+      console.log("点击了新增this.table.list====>", this.table.list);
+      this.table.temp = this.table.list[0];
+      this.getTcodeList();
+    },
+    getTcodeList() {
+      this.getTcodeParm.parammaps.pastureid = Cookies.get("pastureid");
+      console.log(this.table.temp, "this.table.temp");
+      GetDataByName(this.getTcodeParm).then((response) => {
+        if (response.data.list !== null) {
+          this.table.temp.tcode = response.data.list[0].tcode;
+        } else {
+          this.table.temp.tcode = "";
+        }
+      });
+    },
+    // 畜生类别
+    changeLivestockType(item) {
+      this.table.temp.ccname = this.livestockTypeList.find(
+        (obj) => obj.value === item
+      ).label;
+    },
+    // 配方类型
+    changeFormulaType(item) {
+      this.table.temp.fttype = this.formulaTypeList.find(
+        (obj) => obj.value === item
+      ).label;
+    },
+    createData(row) {
+      console.log("点击了新增保存", row);
+      this.table.temp.tname = row.tname;
+      this.table.temp.tcode = row.tcode;
+      this.table.temp.tcolor = row.tcolor;
+      this.table.temp.ccid = row.ccid;
+      this.table.temp.ccname = this.table.temp.ccname;
+      this.table.temp.fttype = this.table.temp.fttype;
+      this.table.temp.fttypeid = row.fttypeid;
+      this.table.temp.source = row.source;
+      this.table.temp.remark = row.remark;
+      this.table.temp.enable = row.enable;
+      // this.table.temp.surplusId = row.surplusId
+      if (this.table.temp.volume == "" || this.table.temp.volume == null) {
+        this.table.temp.volume = 0;
+      }
+      if (
+        isNaN(this.table.temp.autozone) ||
+        this.table.temp.autozone == "" ||
+        this.table.temp.autozone == undefined
+      ) {
+        this.table.temp.autozone = 0;
+      }
+      this.table.temp.volume = parseFloat(row.volume);
+      this.table.temp.pastureid = Cookies.get("pastureid");
+      if (
+        this.table.temp.tname == "" &&
+        this.table.temp.ccid == "" &&
+        this.table.temp.fttypeid == ""
+      ) {
+        this.$message({
+          type: "error",
+          message: "配方名称/牲畜类别/配方类型不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (this.table.temp.ccid == "" && this.table.temp.fttypeid == "") {
+        this.$message({
+          type: "error",
+          message: "牲畜类别/配方类型不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (this.table.temp.tname == "") {
+        this.$message({
+          type: "error",
+          message: "配方名称不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (this.table.temp.ccid == "") {
+        this.$message({
+          type: "error",
+          message: "牲畜类别不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (this.table.temp.fttypeid == "") {
+        this.$message({
+          type: "error",
+          message: "配方类型不能为空",
+          duration: 2000,
+        });
+        return false;
+      }
+      const pattern = new RegExp(
+        "[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]"
+      );
+      // if (pattern.test(this.table.temp.tname)) {
+      //   this.$message({ type: 'error', message: '配方名称不可输入特殊字符', duration: 2000 })
+      //   return false
+      // }
+      if (pattern.test(this.table.temp.tcode)) {
+        this.$message({
+          type: "error",
+          message: "配方编码不可输入特殊字符",
+          duration: 2000,
+        });
+        return false;
+      }
+      console.log(this.table.temp);
+      this.isokDisable = true;
+      setTimeout(() => {
+        this.isokDisable = false;
+      }, 1000);
+      this.requestParam2.name = "checkNumber";
+      this.requestParam2.parammaps = {};
+      this.requestParam2.parammaps.number = this.table.temp.tcode;
+      console.log(this.requestParam2, "this.requestParam2");
+      GetDataByName(this.requestParam2).then((response) => {
+        console.log("table数据", response.data.list);
+        if (response.data.list[0].vmsg !== "输入非法字符") {
+          this.saveCreateData();
+        } else {
+          this.$notify({
+            type: "error",
+            message: "配方编码不可输入特殊字符",
+            duration: 2000,
+          });
+        }
+      });
+    },
+    saveCreateData() {
+      this.requestParam.name = "insertFT";
+      this.table.temp.cattle =
+        this.table.temp.cattle == "" ? 0 : this.table.temp.cattle;
+      this.requestParam.parammaps = this.table.temp;
+      PostDataByName(this.requestParam).then((response) => {
+        console.log("新增保存发送参数", this.requestParam);
+        if (response.msg !== "fail") {
+          this.$notify({
+            title: "成功",
+            message: "保存成功",
+            type: "success",
+            duration: 2000,
+          });
+          this.getList();
+          let data = {};
+          data.name = "insertFeedtemplethistory";
+          data.parammaps = this.table.temp;
+          PostDataByName(data).then((response) => {
+            if (response.msg !== "fail") {
+              this.$notify({
+                title: "成功",
+                message: "保存成功",
+                type: "success",
+                duration: 2000,
+              });
+              this.getList();
+            } else {
+              this.$notify({
+                title: "保存失败",
+                message: response.data,
+                type: "warning",
+                duration: 2000,
+              });
+            }
+          });
+        } else {
+          const isRepeat = new RegExp("Duplicate entry :feedtemplet.tCode");
+          if (isRepeat.test(response.data)) {
+            this.$notify({
+              type: "error",
+              message: "配方编码不可重复,请重新录入",
+              duration: 2000,
+            });
+          } else {
+            this.$notify({
+              title: "保存失败",
+              message: response.data,
+              type: "warning",
+              duration: 2000,
+            });
+          }
+        }
+      });
+    },
+    createCancel(row) {
+      console.log("点击了新增取消");
+      for (let i = 0; i < this.table.list.length; i++) {
+        if (row.myId === this.table.list[i].myId) {
+          var listIndex = this.table.list.indexOf(this.table.list[i]);
+        }
+        if (listIndex > -1) {
+          this.table.list.splice(listIndex, 1);
+          return;
+        }
+      }
+    },
+
+    // 模板编辑
+    handleUpdate(row) {
+      console.log("点击编辑了");
+
+      for (let i = 0; i < this.table.list.length; i++) {
+        if (this.table.list[i].Edit == true) {
+          this.$message({
+            type: "error",
+            message: "当前内容未保存,请点击取消或保存继续进行操作",
+            duration: 2000,
+          });
+          return false;
+        }
+      }
+      // 编辑true,不可编辑false
+      row.Edit = true;
+      row.NoEdit = false;
+      // 新增false,编辑false,编辑保存true
+      row.isCreate = false;
+      row.isUpdate = false;
+      row.isUpdateSave = true;
+      if (row.ccname !== undefined) {
+        row.ccid = String(row.ccid);
+      }
+      this.table.temp.ccname = row.ccname;
+      row.fttypeid = String(row.fttypeid);
+      this.table.temp.fttype = row.fttype;
+      this.handleChooseLeftOver(row);
+      console.log(row, "当前数据", this.table.temp);
+    },
+    updateData(row) {
+      this.table.temp.tname = row.tname;
+      this.table.temp.tcode = row.tcode;
+      this.table.temp.tcolor = row.tcolor;
+      this.table.temp.ccid = row.ccid;
+      this.table.temp.fttypeid = row.fttypeid;
+      this.table.temp.source = row.source;
+      this.table.temp.remark = row.remark;
+      this.table.temp.enable = row.enable;
+      this.table.temp.ccname = this.table.temp.ccname;
+      this.table.temp.fttype = this.table.temp.fttype;
+      this.table.temp.pastureid = row.pastureid;
+      this.table.temp.id = row.id;
+      this.table.temp.cattle = row.cattle;
+      this.table.temp.autozone = row.autozone;
+
+      this.table.temp.surplusId = row.surplusId;
+      this.table.temp.surplus = row.surplus;
+      if (
+        this.table.temp.volume == "" ||
+        this.table.temp.volume == null ||
+        this.table.temp.volume == undefined
+      ) {
+        this.table.temp.volume = 0;
+      }
+      if (
+        isNaN(this.table.temp.autozone) ||
+        this.table.temp.autozone == "" ||
+        this.table.temp.autozone == undefined
+      ) {
+        this.table.temp.autozone = 0;
+      }
+      this.table.temp.volume = parseFloat(row.volume);
+      if (
+        this.table.temp.tname == "" &&
+        this.table.temp.ccid == "" &&
+        this.table.temp.fttypeid == ""
+      ) {
+        this.$message({
+          type: "error",
+          message: "配方名称/牲畜类别/配方类型不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (this.table.temp.ccid == "" && this.table.temp.fttypeid == "") {
+        this.$message({
+          type: "error",
+          message: "牲畜类别/配方类型不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (this.table.temp.tname == "") {
+        this.$message({
+          type: "error",
+          message: "配方名称不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (this.table.temp.ccid == "") {
+        this.$message({
+          type: "error",
+          message: "牲畜类别不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (this.table.temp.fttypeid == "") {
+        this.$message({
+          type: "error",
+          message: "配方类型不能为空",
+          duration: 2000,
+        });
+        return false;
+      }
+      const pattern = new RegExp(
+        "[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]"
+      );
+      // if (pattern.test(this.table.temp.tname)) {
+      //   this.$message({ type: 'error', message: '配方名称不可输入特殊字符', duration: 2000 })
+      //   return false
+      // }
+      if (pattern.test(this.table.temp.tcode)) {
+        this.$message({
+          type: "error",
+          message: "配方编码不可输入特殊字符",
+          duration: 2000,
+        });
+        return false;
+      }
+      console.log(this.table.temp);
+      this.isokDisable = true;
+      setTimeout(() => {
+        this.isokDisable = false;
+      }, 1000);
+      this.requestParam2 = {};
+      this.requestParam2.name = "checkNumber";
+      this.requestParam2.parammaps = {};
+      this.requestParam2.parammaps.number = this.table.temp.tcode;
+      console.log("点击了编辑保存-------——————", row, this.table.temp);
+      GetDataByName(this.requestParam2).then((response) => {
+        console.log("table数据", response.data.list);
+        if (response.data.list[0].vmsg !== "输入非法字符") {
+          this.saveUpdateData();
+        } else {
+          this.$notify({
+            type: "error",
+            message: "配方编码不可输入特殊字符",
+            duration: 2000,
+          });
+        }
+      });
+    },
+    saveUpdateData() {
+      this.requestParam = {};
+      this.requestParam.name = "updateFT";
+      if (
+        this.table.temp.volume == "" ||
+        this.table.temp.volume == null ||
+        this.table.temp.volume == undefined ||
+        isNaN(this.table.temp.volume)
+      ) {
+        this.table.temp.volume = 0;
+      }
+      console.log(this.table.temp.volume, "----");
+      if (
+        isNaN(this.table.temp.autozone) ||
+        this.table.temp.autozone == "" ||
+        this.table.temp.autozone == undefined
+      ) {
+        this.table.temp.autozone = 0;
+      }
+      console.log(this.table.temp, "hss");
+      if (!this.table.temp.surplusId) {
+        this.table.temp.surplusId = 0;
+        this.table.temp.surplus = "";
+      }
+      this.requestParam.parammaps = this.table.temp;
+      PostDataByName(this.requestParam).then((response) => {
+        console.log("新增保存发送参数", this.requestParam);
+        if (response.msg !== "fail") {
+          this.requestParam3 = {};
+          this.requestParam3.name = "insertFTHistory";
+          this.requestParam3.type = "e";
+          this.requestParam3.parammaps = {};
+          this.requestParam3.parammaps.id = this.table.temp.id;
+          this.requestParam3.parammaps.createdate = parseTime(
+            new Date(),
+            "{y}-{m}-{d} {h}:{i}:{s}"
+          );
+          this.requestParam3.parammaps.userId = Cookies.get("employeid");
+          PostDataByName(this.requestParam3).then((response) => {
+            console.log("新增保存发送参数", this.requestParam);
+            if (response.msg !== "fail") {
+              this.$notify({
+                title: "成功",
+                message: "保存成功",
+                type: "success",
+                duration: 2000,
+              });
+              this.table.temp.surplusId = "";
+              this.getList();
+            } else {
+              const isRepeat = new RegExp("Duplicate entry :feedtemplet.tCode");
+              if (isRepeat.test(response.data)) {
+                this.$notify({
+                  type: "error",
+                  message: "配方编码不可重复,请重新录入",
+                  duration: 2000,
+                });
+              } else {
+                this.$notify({
+                  title: "保存失败",
+                  message: response.data,
+                  type: "warning",
+                  duration: 2000,
+                });
+              }
+            }
+          });
+        } else {
+          const isRepeat = new RegExp("Duplicate entry :feedtemplet.tCode");
+          if (isRepeat.test(response.data)) {
+            this.$notify({
+              type: "error",
+              message: "配方编码不可重复,请重新录入",
+              duration: 2000,
+            });
+          } else {
+            this.$notify({
+              title: "保存失败",
+              message: response.data,
+              type: "warning",
+              duration: 2000,
+            });
+          }
+        }
+      });
+    },
+    updateCancel(row) {
+      console.log("点击了编辑取消");
+      // 编辑false,不可编辑true
+      row.Edit = false;
+      row.NoEdit = true;
+      // 新增false,编辑true,编辑保存false
+      row.isCreate = false;
+      row.isUpdate = true;
+      row.isUpdateSave = false;
+      this.getList();
+    },
+
+    // 删除
+    handleRowDelete(row) {
+      console.log("点击了行内删除");
+      MessageBox.confirm("是否确认删除此信息?", {
+        confirmButtonText: "确认",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          const url = "authdata/feedtemplet/del";
+          const data = {
+            ftId: row.id,
+            userId: Cookies.get("employeid"),
+          };
+          postJson(url, data).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();
+              this.isDetail = false;
+            }
+          });
+        })
+        .catch(() => {
+          this.$message({ type: "info", message: "已取消删除" });
+        });
+    },
+    handleSelectionChange(val) {
+      console.log("勾选数据", val);
+      this.selectList = val;
+    },
+    form_delete() {
+      console.log("点击了删除");
+      if (this.selectList.length == 0) {
+        this.$message({ type: "error", message: "请选择配方", duration: 2000 });
+      } else {
+        MessageBox.confirm("是否确认删除此信息?", {
+          confirmButtonText: "确认",
+          cancelButtonText: "取消",
+          type: "warning",
+        }).then(() => {
+          console.log(this.selectList);
+          this.requestParam.common = { returnmap: "0" };
+          this.requestParam.data = [];
+          this.requestParam.data[0] = {
+            name: "insertSpotList",
+            resultmaps: { list: this.selectList },
+          };
+          this.requestParam.data[0].children = [];
+          this.requestParam.data[0].children[0] = {
+            name: "checkdeleteFT",
+            type: "v",
+            parammaps: {
+              id: "@insertSpotList.id",
+              pastureid: "@insertSpotList.pastureid",
+            },
+          };
+          this.requestParam.data[0].children[1] = {
+            name: "deleteFT",
+            type: "e",
+            parammaps: {
+              id: "@insertSpotList.id",
+              pastureid: "@insertSpotList.pastureid",
+            },
+          };
+          ExecDataByConfig(this.requestParam).then((response) => {
+            console.log("删除保存发送参数", this.requestParam);
+            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();
+            }
+          });
+        });
+      }
+    },
+
+    // 复制
+    handleCopy() {
+      if (this.selectList.length == 0) {
+        this.$message({ type: "error", message: "请选择配方", duration: 2000 });
+      } else {
+        MessageBox.confirm("是否确认复制此信息?", {
+          confirmButtonText: "确认",
+          cancelButtonText: "取消",
+          type: "warning",
+        }).then(() => {
+          console.log(this.selectList);
+          this.requestParam.common = { returnmap: "0" };
+          this.requestParam.data = [];
+          this.requestParam.data[0] = {
+            name: "insertSpotList",
+            resultmaps: { list: this.selectList },
+          };
+          this.requestParam.data[0].children = [];
+          this.requestParam.data[0].children[0] = {
+            name: "copyFT",
+            type: "e",
+            parammaps: {
+              ftid: "@insertSpotList.id",
+              pastureid: "@insertSpotList.pastureid",
+            },
+          };
+          ExecDataByConfig(this.requestParam).then((response) => {
+            console.log("复制保存发送参数", this.requestParam);
+            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();
+            }
+          });
+        });
+      }
+    },
+
+    // 配方记录
+    handleRecipeRecord() {
+      console.log("点击了配方记录");
+      this.template.dialogStatus = "RecipeRecord";
+      this.dialogFull = false;
+      this.template.dialogFormVisible = true;
+      this.template.table.getdataListParm.parammaps.ccname = "";
+      this.template.table.getdataListParm.parammaps.fttype = "";
+      this.template.table.getdataListParm.parammaps.enable = "";
+      this.template.table.getdataListParm.parammaps.tname = "";
+      this.template.table.getdataListParm.parammaps.remark = "";
+      this.template.table.getdataListParm.parammaps.source = "";
+      this.template.table.getdataListParm.offset = 1;
+      this.getDateList();
+      this.isDetailDialog = false;
+      this.myheight2 = document.documentElement.clientHeight - 85 - 265;
+    },
+    // 历史时间
+    getDateList() {
+      GetDataByName(this.template.getdataDateParm).then((response) => {
+        console.log("table数据", response.data.list);
+        if (response.data.list !== null) {
+          this.template.table.getdataListParm.parammaps.date =
+            response.data.list[0].maxdate;
+          this.getTemplateDialogList();
+        } else {
+          this.template.table.getdataListParm.parammaps.date = "";
+        }
+      });
+    },
+    // 配方记录-模板
+    getTemplateDialogList() {
+      this.template.table.listLoading = true;
+      GetDataByName(this.template.table.getdataListParm).then((response) => {
+        console.log("table数据", response.data.list);
+        if (response.data.list !== null) {
+          this.template.table.list = response.data.list;
+          this.template.table.pageNum = response.data.pageNum;
+          this.template.table.pageSize = response.data.pageSize;
+          this.template.table.total = response.data.total;
+        } else {
+          this.template.table.list = [];
+          this.template.table2.list = [];
+        }
+        setTimeout(() => {
+          this.template.table.listLoading = false;
+        }, 100);
+      });
+    },
+    handleDialogSearch() {
+      this.template.table.getdataListParm.offset = 1;
+      this.getTemplateDialogList();
+      this.arrowDown = true;
+      this.arrowUp = false;
+    },
+    handleDialogRefresh() {
+      this.template.table.getdataListParm.parammaps.ccname = "";
+      this.template.table.getdataListParm.parammaps.fttype = "";
+      this.template.table.getdataListParm.parammaps.enable = "";
+      this.template.table.getdataListParm.parammaps.tname = "";
+      this.template.table.getdataListParm.parammaps.remark = "";
+      this.template.table.getdataListParm.parammaps.source = "";
+      this.template.table.getdataListParm.offset = 1;
+      this.getTemplateDialogList();
+    },
+
+    // 配方记录-模板行点击
+    tableRowClickDialog(row, column, event) {
+      console.log("配方记录-模板行点击");
+      this.isDetailDialog = true;
+      this.template.table2.getdataListParm.parammaps.date =
+        this.template.table.getdataListParm.parammaps.date;
+      this.template.table2.getdataListParm.parammaps.version = row.version;
+      this.template.table2.getdataListParm.parammaps.ftid = row.id;
+      this.template.table2.getdataListParm.parammaps.dryweight = row.dryweight;
+      this.myheight2 = document.documentElement.clientHeight - 85 - 265 - 185;
+      this.getDialogList();
+      this.getDownList();
+      // aiaiaiai
+    },
+
+    getDialogList() {
+      this.template.table2.listLoading = true;
+      GetDataByName(this.template.table2.getdataListParm).then((response) => {
+        console.log("table数据", response.data.list);
+        if (response.data.list !== null) {
+          this.template.table2.list = response.data.list;
+          this.template.table2.pageNum = response.data.pageNum;
+          this.template.table2.pageSize = response.data.pageSize;
+          this.template.table2.total = response.data.total;
+        } else {
+          this.template.table2.list = [];
+        }
+        this.$nextTick(function () {
+          document.querySelector("#detailDialog2").scrollIntoView();
+          // window.scrollTo({
+          //   'top': this.$refs.detailDialog2.clientHeight
+          // })
+        });
+        setTimeout(() => {
+          this.template.table2.listLoading = false;
+        }, 100);
+      });
+    },
+    handleDialogSearch2() {
+      console.log("点击了查询");
+      this.arrowDown2 = true;
+      this.arrowUp2 = false;
+      this.template.table2.getdataListParm.offset = 1;
+      this.getDialogList2();
+    },
+    handleDialogRefresh2() {
+      console.log("点击了重置");
+      this.template.table2.getdataListParm.parammaps.fname = "";
+      this.template.table2.getdataListParm.parammaps.feedgroup = "";
+      this.template.table2.getdataListParm.parammaps.fweight = "";
+      this.template.table2.getdataListParm.parammaps.autosecondname = "";
+      this.template.table2.getdataListParm.parammaps.islockcount = "0";
+      this.template.table2.getdataListParm.parammaps.sort = "";
+      this.template.table2.getdataListParm.offset = 1;
+      this.getDialogList2();
+    },
+    getDialogList2() {
+      this.template.table2.listLoading = true;
+      GetDataByName(this.template.table2.getdataListParm).then((response) => {
+        console.log("table数据", response.data.list);
+        if (response.data.list !== null) {
+          this.template.table2.list = response.data.list;
+          this.template.table2.pageNum = response.data.pageNum;
+          this.template.table2.pageSize = response.data.pageSize;
+          this.template.table2.total = response.data.total;
+        } else {
+          this.template.table2.list = [];
+        }
+        this.$nextTick(function () {
+          window.scrollTo({
+            top: this.$refs.templateDialog.clientHeight,
+          });
+        });
+        setTimeout(() => {
+          this.template.table2.listLoading = false;
+        }, 100);
+      });
+    },
+    // 导出
+    handleExport(item) {
+      if (item == 1) {
+        console.log("点击了导出模板");
+        const requestParam = this.requestParam;
+        const url =
+          Cookies.get("url") +
+          "file/导入导出模板/配方计划/配方模板导入模板.xlsx"; // 请求下载文件的地址
+        console.log(url);
+        axios({
+          method: "GET",
+          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("点击了导出数据");
+        this.download.getdataListParm.name = "downloadFTList";
+        this.download.getdataListParm.parammaps =
+          this.table.getdataListParm.parammaps;
+        GetDataByName(this.download.getdataListParm).then((response) => {
+          if (response.data.list !== null) {
+            for (let i = 0; i < response.data.list.length; i++) {
+              if (response.data.list[i].islockcount == 0) {
+                this.$set(response.data.list[i], "islockcount", "否");
+              } else {
+                this.$set(response.data.list[i], "islockcount", "是");
+              }
+              if (response.data.list[i].enable == 0) {
+                this.$set(response.data.list[i], "enable", "否");
+              } else {
+                this.$set(response.data.list[i], "enable", "是");
+              }
+            }
+            this.download.list = response.data.list;
+          } else {
+            this.download.list = [];
+          }
+          var excelDatas = [
+            {
+              tHeader: [
+                "配方名称",
+                "配方编码",
+                "牲畜类别",
+                "配方类型",
+                "来源",
+                "备注",
+                "是否启用",
+                "饲料组",
+                "饲料名称",
+                "重量(kg)",
+                "搅拌延时(min)",
+                "是否锁定牛头数比例",
+                "顺序",
+              ],
+              filterVal: [
+                "tname",
+                "tcode",
+                "ccname",
+                "fttype",
+                "source",
+                "remark",
+                "enable",
+                "feedgroup",
+                "fname",
+                "fweight",
+                "autosecond",
+                "islockcount",
+                "sort",
+              ],
+              tableDatas: this.download.list,
+              sheetName: "Sheet1",
+            },
+          ];
+          json2excel(excelDatas, "配方模板", 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)",
+              "搅拌延时(min)",
+              "是否锁定牛头数比例",
+              "错误信息",
+            ];
+            const filterVal = [
+              "配方名称",
+              "牲畜类别",
+              "配方类型",
+              "备注",
+              "饲料组",
+              "饲料名称",
+              "重量(kg)",
+              "搅拌延时(min)",
+              "是否锁定牛头数比例",
+              "error_msg",
+            ];
+            const data1 = this.formatJson(filterVal, list1);
+            excel.export_json_to_excel({
+              header: tHeader,
+              data: data1,
+              filename: "配方模板导入报错信息",
+              autoWidth: true,
+              bookType: "xlsx",
+            });
+          });
+        }
+      } else {
+        const isRepeat = new RegExp("Duplicate entry :feedtemplet_tname");
+        if (isRepeat.test(res.data)) {
+          this.$notify({
+            type: "error",
+            message: "配方名称不可重复,请重新录入",
+            duration: 2000,
+          });
+          return false;
+        }
+        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];
+          }
+        })
+      );
+    },
+    changeDate() {
+      this.getTemplateDialogList();
+    },
+    // 应用
+    handleApplication() {
+      console.log("点击了应用");
+      MessageBox.confirm(
+        "是否确认将" +
+          this.template.table.getdataListParm.parammaps.date +
+          "的数据应用到当前?",
+        {
+          confirmButtonText: "确认",
+          cancelButtonText: "取消",
+          type: "warning",
+        }
+      )
+        .then(() => {
+          this.requestParam.name = "applyFTdate";
+          this.requestParam.parammaps = {};
+          this.requestParam.parammaps.pastureid = Cookies.get("pastureid");
+          this.requestParam.parammaps.date =
+            this.template.table.getdataListParm.parammaps.date;
+          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.getTemplateDialogList();
+              this.getList();
+            }
+          });
+        })
+        .catch(() => {
+          this.$message({ type: "info", message: "已取消应用" });
+        });
+    },
+    // 模板行点击
+    tableRowClick(row, column, event) {
+      for (let i = 0; i < this.table.list.length; i++) {
+        if (this.table.list[i].Edit == true) {
+          return false;
+        }
+      }
+      if (this.isOrder == false) {
+        this.$message({
+          type: "error",
+          message: "请保存或取消当前更改顺序操作",
+          duration: 2000,
+        });
+      } else {
+        if (column.label !== "操作") {
+          this.isDetail = true; // 点击行显示详情
+          this.table2.getdataListParm.parammaps.tcolor = row.tcolor;
+          this.table2.getdataListParm.parammaps.tname = row.tname;
+          this.table2.getdataListParm.parammaps.ccname = row.ccname;
+          this.table2.getdataListParm.parammaps.fttype = row.fttype;
+          this.table2.getdataListParm.parammaps.ftid = row.id;
+          this.table2.getdataListParm.parammaps.fttypeid = row.fttypeid;
+          this.table2.getdataListParm.parammaps.dryweight = row.dryweight;
+          if (row.fttype == "预混配方") {
+            this.requestParams[2].parammaps.type = "1";
+          } else {
+            this.requestParams[2].parammaps.type = "";
+          }
+          this.myheight =
+            document.documentElement.clientHeight - 85 - 265 - 230;
+          this.getList2();
+          this.getDownList();
+        }
+      }
+    },
+    handleCloseTable2() {
+      this.isDetail = false;
+      this.myheight = "";
+      this.isEnlarge = true;
+    },
+    handleDialogCloseTable2() {
+      this.isDetailDialog = false;
+      this.myheight2 = document.documentElement.clientHeight - 85 - 265;
+    },
+    // -------------------详情-----------------------------
+    // 获取是否显示是否锁定牛头数
+    getIsLockCount() {
+      GetDataByName(this.lockCount.getdataListParm).then((response) => {
+        console.log(response.data.list);
+        if (response.data.list[0].inforvalue == 0) {
+          this.lockCount.isLockCount = false;
+        } else {
+          this.lockCount.isLockCount = true;
+        }
+      });
+    },
+    // 详情
+    getList2() {
+      this.table2.listLoading = true;
+      GetDataByName(this.table2.getdataListParm).then((response) => {
+        console.log("table数据", response.data.list);
+        if (response.data.list !== null) {
+          for (let i = 0; i < response.data.list.length; i++) {
+            this.$set(response.data.list[i], "Edit", false); // 编辑
+            this.$set(response.data.list[i], "NoEdit", true); // 不可编辑/输入
+            this.$set(response.data.list[i], "groupEdit", false); // 饲料组编辑
+            this.$set(response.data.list[i], "isGroupDisabled", false); // 饲料组编辑禁止编辑
+            this.$set(response.data.list[i], "groupNoEdit", true); // 饲料组不可编辑
+            this.$set(response.data.list[i], "isCreate", false); // 新增操作
+            this.$set(response.data.list[i], "isUpdate", true); // 编辑操作
+            this.$set(response.data.list[i], "isUpdateSave", false); // 编辑保存
+          }
+          this.table2.getDryweightParm.parammaps =
+            this.table2.getdataListParm.parammaps;
+          this.getDryWeight();
+
+          // for (let i = 0; i < response.data.list.length; i++) {
+          //   console.log(response.data.list[i].fweight, '===12333')
+          // }
+          this.table2.list = response.data.list;
+          this.table2.pageNum = response.data.pageNum;
+          this.table2.pageSize = response.data.pageSize;
+          this.table2.total = response.data.total;
+        } else {
+          this.table2.list = [];
+        }
+        setTimeout(() => {
+          this.table2.listLoading = false;
+        }, 100);
+      });
+    },
+    // 行拖拽
+    rowDrop() {
+      console.log(
+        document.querySelector("#table2 .el-table__body-wrapper tbody")
+      );
+      const tbody = document.querySelector(
+        "#table2 .el-table__body-wrapper tbody"
+      );
+      // this.sorTable()
+      const that = this;
+
+      // Sortable.create(tbody, {
+      var sortable = Sortable.create(tbody, {
+        disabled: that.dropState,
+        onChoose({ newIndex, oldIndex }) {
+          console.log(that.isOrder, "that.isOrder == false");
+          console.log(that.dropState, "that.dropState");
+          if (that.dropState == true || that.isOrder == true) {
+            sortable.destroy();
+          }
+        },
+        onEnd({ newIndex, oldIndex }) {
+          const currRow = that.table2.list.splice(oldIndex, 1)[0];
+          that.table2.list.splice(newIndex, 0, currRow);
+          console.log("索引", newIndex);
+          console.log("拖动数据", currRow);
+          console.log("上", that.table2.list[newIndex - 1]);
+          console.log("下", that.table2.list[newIndex + 1]);
+          if (that.table2.list[newIndex - 1] === undefined) {
+            // 拖动至最上方无值 // 顺序等于0,其他+1 // 饲料组等于饲料名称
+            for (let i = 0; i < that.table2.list.length; i++) {
+              that.table2.list[i].sort = parseInt(that.table2.list[i].sort) + 1; // 其他的顺序+1
+            }
+            currRow.sort = 0;
+            currRow.feedgroup = currRow.fname;
+            console.log("拖动至最上方无值");
+          } else if (currRow.sort == that.table2.list[newIndex - 1].sort) {
+            // 拖动值顺序等于上值顺序
+            currRow.sort = that.table2.list[newIndex - 1].sort;
+            console.log("拖动值顺序等于上值顺序");
+          } else if (that.table2.list[newIndex + 1] == undefined) {
+            // 拖动至最下方无值 // 顺序等于上方顺序+1 // 饲料组等于饲料名称
+            currRow.sort = parseInt(that.table2.list[newIndex - 1].sort) + 1;
+            currRow.feedgroup = currRow.fname;
+            console.log("拖动至最下方无值");
+          } else if (currRow.sort == that.table2.list[newIndex + 1].sort) {
+            // 拖动值顺序等于下值顺序
+            currRow.sort == that.table2.list[newIndex + 1].sort;
+            console.log("拖动值顺序等于下值顺序");
+          } else if (
+            that.table2.list[newIndex - 1].sort ==
+            that.table2.list[newIndex + 1].sort
+          ) {
+            // 拖动至上下顺序一致,顺序/饲料组与上下保持一致
+            currRow.sort = that.table2.list[newIndex - 1].sort;
+            currRow.feedgroup = that.table2.list[newIndex - 1].feedgroup;
+            console.log("拖动至上下顺序一致");
+          } else if (
+            that.table2.list[newIndex - 1].sort !== undefined &&
+            that.table2.list[newIndex + 1].sort !== undefined
+          ) {
+            // 拖动至上下都有值
+            console.log("上下");
+            if (
+              parseInt(that.table2.list[newIndex - 1].sort) + 1 ==
+              that.table2.list[newIndex + 1].sort
+            ) {
+              console.log(newIndex);
+              for (let i = newIndex; i < that.table2.list.length; i++) {
+                that.table2.list[i].sort =
+                  parseInt(that.table2.list[i].sort) + 1;
+              }
+            }
+            currRow.sort = parseInt(that.table2.list[newIndex - 1].sort) + 1;
+            currRow.feedgroup = currRow.fname;
+            console.log(that.table2.list[newIndex + 1].sort);
+          }
+        },
+      });
+      console.log(sortable.option("disabled"));
+    },
+    handleChangeOrder() {
+      this.isOrder = false;
+      this.rowDrop();
+    },
+    saveChangeOrder() {
+      // 保存顺序
+      console.log(this.table2.list);
+      this.requestParam = {};
+      this.requestParam.common = { returnmap: "0" };
+      this.requestParam.data = [];
+      this.requestParam.data[0] = {
+        name: "insertSpotList",
+        resultmaps: { list: this.table2.list },
+      };
+      this.requestParam.data[0].children = [];
+      this.requestParam.data[0].children[0] = {
+        name: "updateFTdetailSort",
+        type: "e",
+        parammaps: {
+          id: "@insertSpotList.id",
+          pastureid: "@insertSpotList.pastureid",
+          sort: "@insertSpotList.sort",
+          feedgroup: "@insertSpotList.feedgroup",
+        },
+      };
+      ExecDataByConfig(this.requestParam).then((response) => {
+        console.log("顺序切换保存发送参数", this.requestParam);
+        if (response.msg === "fail") {
+          this.$notify({
+            title: "顺序切换失败",
+            message: response.data,
+            type: "warning",
+            duration: 2000,
+          });
+        } else {
+          this.$notify({
+            title: "",
+            message: "顺序切换成功",
+            type: "success",
+            duration: 2000,
+          });
+          this.getList2();
+          this.getList3();
+          this.isOrder = true;
+        }
+      });
+    },
+    cancelChangeOrder() {
+      // 取消顺序
+      this.getList2();
+      this.isOrder = true;
+    },
+    form_search2() {
+      console.log("点击了查询");
+      this.arrowDown2 = true;
+      this.arrowUp2 = false;
+      this.table2.getdataListParm.offset = 1;
+      // fname, feedgroup, fweight, autosecondname, islockcount, sort
+      // this.table2.getdataListParm.parammaps.all = this.table2.getdataListParm.parammaps.fname + ' ' + this.table2.getdataListParm.parammaps.feedgroup + ' ' + this.table2.getdataListParm.parammaps.fweight + ' ' + this.table2.getdataListParm.parammaps.autosecondname + ' ' + this.table2.getdataListParm.parammaps.islockcount + ' ' + this.table2.getdataListParm.parammaps.sort
+      this.table2.getdataListParm.parammaps.all = "";
+      var obj = {};
+      obj.fname = this.table2.getdataListParm.parammaps.fname;
+      obj.feedgroup = this.table2.getdataListParm.parammaps.feedgroup;
+      obj.fweight = this.table2.getdataListParm.parammaps.fweight;
+      obj.autosecondname = this.table2.getdataListParm.parammaps.autosecondname;
+      if (this.table2.getdataListParm.parammaps.islockcount !== "") {
+        if (this.table2.getdataListParm.parammaps.islockcount == 0) {
+          this.table2.getdataListParm.parammaps.islockcount = "否";
+        } else {
+          this.table2.getdataListParm.parammaps.islockcount = "是";
+        }
+      }
+      obj.islockcount = this.table2.getdataListParm.parammaps.islockcount;
+      obj.sort = this.table2.getdataListParm.parammaps.sort;
+      Object.getOwnPropertyNames(obj).forEach((key) => {
+        console.log(key, obj[key]);
+        if (obj[key] !== "") {
+          this.table2.getdataListParm.parammaps.all += obj[key] + "/";
+        }
+      });
+      if (
+        this.table2.getdataListParm.parammaps.all.charAt(
+          this.table2.getdataListParm.parammaps.all.length - 1
+        ) == "/"
+      ) {
+        this.table2.getdataListParm.parammaps.all =
+          this.table2.getdataListParm.parammaps.all.slice(
+            0,
+            this.table2.getdataListParm.parammaps.all.length - 1
+          );
+      }
+      this.getList2();
+    },
+    handleRefresh2() {
+      console.log("点击了重置");
+      this.table2.getdataListParm.parammaps.fname = "";
+      this.table2.getdataListParm.parammaps.feedgroup = "";
+      this.table2.getdataListParm.parammaps.fweight = "";
+      this.table2.getdataListParm.parammaps.autosecondname = "";
+      this.table2.getdataListParm.parammaps.islockcount = "0";
+      this.table2.getdataListParm.parammaps.sort = "";
+      this.table2.getdataListParm.parammaps.all = "";
+      this.table2.getdataListParm.offset = 1;
+      this.getList2();
+    },
+
+    // 详情新增
+    handleCreate2() {
+      console.log("点击了详情新增", this.table2.list);
+      // 编辑true/不可编辑false
+      // 新增操true,编辑false,编辑保存false
+      console.log(11);
+      for (let i = 0; i < this.table2.list.length; i++) {
+        if (this.table2.list[i].Edit === true) {
+          console.log(123);
+          this.$message({
+            type: "error",
+            message: "当前内容未保存,请点击取消或保存继续进行操作",
+            duration: 2000,
+          });
+          return false;
+        }
+      }
+      console.log(this.table2.list);
+      if (this.table2.list.length == 0) {
+        var mysort = 0;
+      } else {
+        var mysort =
+          parseInt(this.table2.list[this.table2.list.length - 1].sort) + 1;
+      }
+      this.table2.list.unshift({
+        myId: new Date().valueOf(),
+        Edit: true,
+        NoEdit: false,
+        isCreate: true,
+        isUpdate: false,
+        isUpdateSave: false,
+        groupEdit: false,
+        groupNoEdit: true,
+        enable: 1,
+        feedgroup: "",
+        fid: "",
+        fname: "",
+        fweight: "",
+        autosecond: "0",
+        deviation: "0",
+        islockcount: "0",
+        sort: mysort,
+        shutdown: "0",
+      });
+      console.log(this.table2.list);
+    },
+    changeFname(item, row) {
+      console.log(item, row);
+      this.table2.temp.fname = this.feedNameList.find(
+        (obj) => obj.id == item
+      ).fname;
+      row.fname = this.feedNameList.find((obj) => obj.id == item).fname;
+      if (this.feedNameList.find((obj) => obj.id == item).ispreft == "0") {
+        this.table2.temp.preftid = "0";
+      } else {
+        this.table2.temp.preftid = item;
+      }
+      if (row.sort == "") {
+        row.feedgroup = this.table2.temp.fname;
+      } else {
+        if (row.isCreate == true) {
+          // 新增状态下
+          for (let i = 1; i < this.table2.list.length; i++) {
+            if (this.table2.list[i].sort == row.sort) {
+              console.log(this.table2.list[i]);
+              row.feedgroup = this.table2.list[i].feedgroup;
+              break;
+            } else {
+              row.feedgroup = this.table2.temp.fname;
+            }
+          }
+        } else if (row.isUpdateSave == true) {
+          // 编辑状态下
+          var Arr = [];
+          for (let i = 0; i < this.table2.list.length; i++) {
+            Arr.push(this.table2.list[i].sort);
+          }
+          var Count = 0;
+          for (let i = 0; i < Arr.length; i++) {
+            if (Arr[i] == row.sort) {
+              Count++;
+            }
+          }
+          for (let i = 0; i < this.table2.list.length; i++) {
+            if (Count > 1) {
+              row.feedgroup = this.table2.list[i].feedgroup;
+              console.log(this.table2.list[i].feedgroup);
+              break;
+            } else if (Count == 1) {
+              row.feedgroup = this.table2.temp.fname;
+              console.log(222, this.table2.temp.fname);
+            }
+          }
+        }
+      }
+    },
+
+    bort(row) {
+      if (row.isCreate == true) {
+        if (row.sort !== "") {
+          for (let i = 1; i < this.table2.list.length; i++) {
+            if (this.table2.list[i].sort == parseInt(row.sort)) {
+              row.feedgroup = this.table2.list[i].feedgroup;
+              return false;
+            } else {
+              row.feedgroup = row.fname;
+            }
+          }
+        } else {
+          row.feedgroup = row.fname;
+        }
+      } else if (row.isUpdateSave == true) {
+        if (row.sort !== "") {
+          for (let i = 0; i < this.table2.list.length; i++) {
+            if (this.table2.list[i].sort == row.sort) {
+              console.log(
+                "失去焦点,行内顺序与表格某顺序相同时",
+                this.table2.list[i]
+              );
+              if (this.table2.list[i].id !== row.id) {
+                row.isGroupDisabled = true;
+                row.feedgroup = this.table2.list[i].feedgroup;
+                break;
+              }
+            } else {
+              console.log("失去焦点,行内顺序与表格某顺序不相同时");
+              row.isGroupDisabled = true;
+              row.feedgroup = row.fname;
+            }
+          }
+        } else {
+          row.feedgroup = row.fname;
+        }
+      }
+    },
+    createData2(row) {
+      console.log("点击了详情新增保存1", row);
+      this.table2.temp.pastureid = Cookies.get("pastureid");
+      this.table2.temp.ftid = this.table2.getdataListParm.parammaps.ftid;
+      this.table2.temp.fid = row.fid;
+      this.table2.temp.fname = this.table2.temp.fname;
+      this.table2.temp.fweight = row.fweight;
+      this.table2.temp.islockcount = row.islockcount;
+      this.table2.temp.sort = row.sort;
+      this.table2.temp.feedgroup = row.feedgroup;
+      this.table2.temp.preftid = this.table2.temp.preftid;
+      this.table2.temp.autosecond = row.autosecond;
+      this.table2.temp.deviation = row.deviation;
+      this.table2.temp.shutdown = row.shutdown;
+      if (
+        this.table2.temp.fid === "" &&
+        this.table2.temp.fweight === "" &&
+        this.table2.temp.autosecond === "" &&
+        this.table2.temp.deviation === ""
+      ) {
+        this.$message({
+          type: "error",
+          message: "饲料名称/重量/搅拌延时/允许延时偏差不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (
+        this.table2.temp.fweight === "" &&
+        this.table2.temp.autosecond === "" &&
+        this.table2.temp.deviation === ""
+      ) {
+        this.$message({
+          type: "error",
+          message: "重量/搅拌延时/允许延时偏差不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (
+        this.table2.temp.autosecond === "" &&
+        this.table2.temp.deviation === ""
+      ) {
+        this.$message({
+          type: "error",
+          message: "搅拌延时/允许延时偏差不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (this.table2.temp.fid === "") {
+        this.$message({
+          type: "error",
+          message: "饲料名称不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (this.table2.temp.fweight === "") {
+        this.$message({
+          type: "error",
+          message: "重量不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (this.table2.temp.autosecond === "") {
+        this.$message({
+          type: "error",
+          message: "搅拌延时不能为空",
+          duration: 2000,
+        });
+        return false;
+      } else if (this.table2.temp.deviation === "") {
+        this.$message({
+          type: "error",
+          message: "允许延时偏差不能为空",
+          duration: 2000,
+        });
+        return false;
+      }
+      if (
+        parseFloat(this.table2.temp.deviation) >
+        parseFloat(this.table2.temp.autosecond)
+      ) {
+        this.$message({
+          type: "error",
+          message: "允许延时偏差不可超出搅拌延时",
+          duration: 2000,
+        });
+        return false;
+      }
+      if (this.table2.temp.sort !== "") {
+        this.table2.temp.sort = this.table2.temp.sort;
+      } else {
+        console.log(this.table2.list.length);
+        if (this.table2.list.length == 1) {
+          this.table2.temp.sort = 0;
+        } else {
+          this.table2.temp.sort =
+            parseInt(this.table2.list[this.table2.list.length - 1].sort) + 1;
+          row.sort =
+            parseInt(this.table2.list[this.table2.list.length - 1].sort) + 1;
+        }
+      }
+      if (this.table2.temp.shutdown == "") {
+        this.table2.temp.shutdown = 0;
+      }
+      if (this.table2.getdataListParm.parammaps.fttypeid == 2) {
+        if (parseInt(this.table2.temp.preftid) > 0) {
+          this.$message({
+            type: "error",
+            message: "饲料名称不能选择预混配方",
+            duration: 2000,
+          });
+          return false;
+        }
+      }
+      // 校验顺序是否>=0
+      var ruleSort = /^\d+$/;
+      if (!ruleSort.test(this.table2.temp.sort)) {
+        this.$message({
+          type: "error",
+          message: "饲料顺序不可为负数或小数",
+          duration: 2000,
+        });
+        return false;
+      }
+      // 检验重量>0
+      this.table2.temp.fweight = formatNum(this.table2.temp.fweight, 4); // 根据默认参数设置小数位数
+      row.fweight = formatNum(row.fweight, 4);
+      // return
+      // var ruleWeight = /(^[1-9](\d+)?(\.\d{1,2})?$)|(^\d\.\d{1,2}$)/
+
+      if (this.table2.temp.fweight == 0) {
+        this.$message({
+          type: "error",
+          message: "重量请输入正数,最多保留四位小数",
+          duration: 2000,
+        });
+        return false;
+      }
+      this.isokDisable = true;
+      setTimeout(() => {
+        this.isokDisable = false;
+      }, 1000);
+      let dateTime = parseTime(new Date(), "{y}-{m}-{d} {h}:{i}:{s}");
+      this.requestParam.common = { returnmap: "0" };
+      this.requestParam.createdate = dateTime;
+      this.requestParam.userId = Cookies.get("employeid");
+      this.requestParam.data = [];
+      this.requestParam.data[0] = {
+        name: "insertFTdetail",
+        type: "e",
+        parammaps: {
+          pastureid: this.table2.temp.pastureid,
+          ftid: this.table2.getdataListParm.parammaps.ftid,
+          fid: row.fid,
+          fname: this.table2.temp.fname,
+          fweight: String(row.fweight),
+          islockcount: row.islockcount,
+          sort: row.sort,
+          feedgroup: row.feedgroup,
+          preftid: this.table2.temp.preftid,
+          autosecond: row.autosecond,
+          deviation: row.deviation,
+          shutdown: this.table2.temp.shutdown,
+        },
+      };
+      this.requestParam.data[1] = {
+        name: "updateFPbyFTChange",
+        type: "e",
+        parammaps: {
+          pastureid: this.table2.temp.pastureid,
+          ftid: this.table2.getdataListParm.parammaps.ftid,
+          type: this.table2.getdataListParm.parammaps.fttypeid,
+          status: 0,
+        },
+      };
+      this.requestParam.data[2] = {
+        name: "updateftversion",
+        type: "e",
+        parammaps: {
+          pastureid: this.table2.getdataListParm.parammaps.pastureid,
+          id: this.table2.getdataListParm.parammaps.ftid,
+        },
+      };
+      this.requestParam.data[3] = {
+        name: "insertFitHistory",
+        type: "e",
+        parammaps: {
+          weight: row.fweight,
+          preftid: this.table2.temp.preftid,
+          pastureid: this.table2.getdataListParm.parammaps.pastureid,
+          ftid: this.table2.getdataListParm.parammaps.ftid,
+          dateTime: dateTime,
+          slid: 0,
+          fid: row.fid,
+          autosecond: row.autosecond,
+          userId: Cookies.get("employeid"),
+        },
+      };
+      this.requestParam.data[4] = {
+        name: "insertFTHistory",
+        type: "e",
+        parammaps: {
+          id: this.table2.getdataListParm.parammaps.ftid,
+          createdate: dateTime,
+          userId: Cookies.get("employeid"),
+        },
+      };
+      const url = "authdata/ftdetail/edit";
+      const data = this.requestParam;
+      postJson(url, data).then((response) => {
+        if (response.msg !== "fail") {
+          this.$notify({
+            title: "成功",
+            message: "保存成功",
+            type: "success",
+            duration: 2000,
+          });
+          this.getList2();
+          this.getList3();
+        } else {
+          this.$notify({
+            title: "保存失败",
+            message: response.data,
+            type: "warning",
+            duration: 2000,
+          });
+        }
+      });
+      // ExecDataByConfig(this.requestParam).then(response => {
+      //   console.log('新增保存发送参数', this.requestParam)
+      //   if (response.msg !== 'fail') {
+      //     this.$notify({ title: '成功', message: '保存成功', type: 'success', duration: 2000 })
+      //     this.getList2()
+      //     this.getList3()
+      //   } else {
+      //     this.$notify({ title: '保存失败', message: response.data, type: 'warning', duration: 2000 })
+      //   }
+      // })
+    },
+    createCancel2(row) {
+      console.log("点击了详情新增取消");
+      for (let i = 0; i < this.table2.list.length; i++) {
+        if (row.myId === this.table2.list[i].myId) {
+          var listIndex = this.table2.list.indexOf(this.table2.list[i]);
+        }
+        if (listIndex > -1) {
+          this.table2.list.splice(listIndex, 1);
+          return;
+        }
+      }
+      this.getDialogList();
+    },
+
+    // 详情编辑
+    handleUpdate2(row) {
+      console.log("hssssssss");
+      console.log("详情编辑", row);
+      this.dropState = true;
+      row.isGroupDisabled = false;
+      row.islockcount = String(row.islockcount);
+      row.fid = String(row.fid);
+      // row.autosecond = String(row.autosecond)
+      row.autosecond = row.autosecond;
+      row.deviation = row.deviation;
+      this.table2.temp.fname = row.fname;
+      this.table2.temp.preftid = row.preftid;
+      const rowArr = [];
+      for (let i = 0; i < this.table2.list.length; i++) {
+        if (this.table2.list[i].Edit == true) {
+          this.$message({
+            type: "error",
+            message: "当前内容未保存,请点击取消或保存继续进行操作",
+            duration: 2000,
+          });
+          return false;
+        }
+        rowArr.push(this.table2.list[i].sort);
+      }
+      var count = 0;
+      for (let i = 0; i < rowArr.length; i++) {
+        if (rowArr[i] == row.sort) {
+          count++;
+        }
+      }
+      // 判断是否有相同顺序,如果没有饲料组不可编辑,若有饲料组可编辑
+      if (count == 1) {
+        // 饲料组编辑false,不可编辑true
+        row.groupEdit = false;
+        row.groupNoEdit = true;
+        // 编辑true,不可编辑false
+        row.Edit = true;
+        row.NoEdit = false;
+        // 新增false,编辑false,编辑保存true
+        row.isCreate = false;
+        row.isUpdate = false;
+        row.isUpdateSave = true;
+      } else if (count > 1) {
+        // 饲料组编辑true,不可编辑false
+        row.groupEdit = true;
+        row.groupNoEdit = false;
+        console.log(222);
+        // 编辑true,不可编辑false
+        row.Edit = true;
+        row.NoEdit = false;
+        // 新增false,编辑false,编辑保存true
+        row.isCreate = false;
+        row.isUpdate = false;
+        row.isUpdateSave = true;
+        return false;
+      }
+      this.table2.updateList = Object.assign({}, row);
+    },
+    // updateData2(row) {
+    //   console.log("点击了详情编辑保存", row);
+    //   this.isokDisable = true;
+    //   setTimeout(() => {
+    //     this.isokDisable = false;
+    //   }, 1000);
+    //   console.log(row.autosecond, "======");
+    //   if (
+    //     row.autosecond == null ||
+    //     row.autosecond == undefined ||
+    //     isNaN(row.autosecond)
+    //   ) {
+    //     row.autosecond = "0";
+    //   }
+    //   this.table2.temp.pastureid = row.pastureid;
+    //   this.table2.temp.ftid = this.table2.getdataListParm.parammaps.ftid;
+    //   this.table2.temp.fid = row.fid;
+    //   this.table2.temp.fname = this.table2.temp.fname;
+    //   this.table2.temp.fweight = row.fweight;
+    //   this.table2.temp.islockcount = row.islockcount;
+    //   this.table2.temp.sort = row.sort;
+    //   this.table2.temp.feedgroup = row.feedgroup;
+    //   this.table2.temp.preftid = this.table2.temp.preftid;
+    //   this.table2.temp.autosecond = row.autosecond;
+    //   this.table2.temp.deviation = row.deviation;
+    //   this.table2.temp.shutdown = row.shutdown;
+    //   this.table2.temp.id = row.id;
+    //   console.log("this.table2.updateList", this.table2.updateList);
+    //   console.log("temp", this.table2.temp);
+
+    //   if (
+    //     this.table2.temp.fid === "" &&
+    //     this.table2.temp.fweight === "" &&
+    //     this.table2.temp.autosecond === "" &&
+    //     this.table2.temp.deviation === ""
+    //   ) {
+    //     this.$message({
+    //       type: "error",
+    //       message: "饲料名称/重量/搅拌延时/允许延时偏差不能为空",
+    //       duration: 2000,
+    //     });
+    //     return false;
+    //   } else if (
+    //     this.table2.temp.fweight === "" &&
+    //     this.table2.temp.autosecond === "" &&
+    //     this.table2.temp.deviation === ""
+    //   ) {
+    //     this.$message({
+    //       type: "error",
+    //       message: "重量/搅拌延时/允许延时偏差不能为空",
+    //       duration: 2000,
+    //     });
+    //     return false;
+    //   } else if (
+    //     this.table2.temp.autosecond === "" &&
+    //     this.table2.temp.deviation === ""
+    //   ) {
+    //     this.$message({
+    //       type: "error",
+    //       message: "搅拌延时/允许延时偏差不能为空1=",
+    //       duration: 2000,
+    //     });
+    //     return false;
+    //   } else if (this.table2.temp.fid === "") {
+    //     this.$message({
+    //       type: "error",
+    //       message: "饲料名称不能为空",
+    //       duration: 2000,
+    //     });
+    //     return false;
+    //   } else if (this.table2.temp.fweight === "") {
+    //     this.$message({
+    //       type: "error",
+    //       message: "重量不能为空",
+    //       duration: 2000,
+    //     });
+    //     return false;
+    //   } else if (this.table2.temp.autosecond === "") {
+    //     this.$message({
+    //       type: "error",
+    //       message: "搅拌延时不能为空",
+    //       duration: 2000,
+    //     });
+    //     return false;
+    //   } else if (this.table2.temp.deviation === "") {
+    //     this.$message({
+    //       type: "error",
+    //       message: "允许延时偏差不能为空",
+    //       duration: 2000,
+    //     });
+    //     return false;
+    //   }
+    //   if (
+    //     parseFloat(this.table2.temp.deviation) >
+    //     parseFloat(this.table2.temp.autosecond)
+    //   ) {
+    //     this.$message({
+    //       type: "error",
+    //       message: "允许延时偏差不可超出搅拌延时",
+    //       duration: 2000,
+    //     });
+    //     return false;
+    //   }
+    //   if (this.table2.temp.shutdown == "") {
+    //     this.table2.temp.shutdown = 0;
+    //   }
+    //   if (this.table2.temp.sort !== "") {
+    //     this.table2.temp.sort = this.table2.temp.sort;
+    //   } else {
+    //     this.table2.temp.sort =
+    //       parseInt(this.table2.list[this.table2.list.length - 1].sort) + 1;
+    //   }
+    //   if (this.table2.getdataListParm.parammaps.fttypeid == 2) {
+    //     if (parseInt(this.table2.temp.preftid) > 0) {
+    //       this.$message({
+    //         type: "error",
+    //         message: "饲料名称不能选择预混配方",
+    //         duration: 2000,
+    //       });
+    //       return false;
+    //     }
+    //   }
+    //   // 校验顺序是否>=0
+    //   var ruleSort = /^\d+$/;
+    //   if (!ruleSort.test(this.table2.temp.sort)) {
+    //     this.$message({
+    //       type: "error",
+    //       message: "饲料顺序不可为负数或小数",
+    //       duration: 2000,
+    //     });
+    //     return false;
+    //   }
+    //   this.table2.temp.fweight = formatNum(this.table2.temp.fweight, 4); // 根据默认参数设置小数位数
+    //   row.fweight = formatNum(row.fweight, 4);
+    //   // 检验重量>0
+    //   // var ruleWeight = /(^[1-9](\d+)?(\.\d{1,2})?$)|(^\d\.\d{1,2}$)/
+
+    //   if (this.table2.temp.fweight == 0) {
+    //     this.$message({
+    //       type: "error",
+    //       message: "重量请输入正数,最多保留四位小数",
+    //       duration: 2000,
+    //     });
+    //     return false;
+    //   }
+    //   console.log(row.fweight, "row.fweight");
+    //   let dateTime = parseTime(new Date(), "{y}-{m}-{d} {h}:{i}:{s}");
+    //   this.requestParam.common = { returnmap: "0" };
+    //   this.requestParam.createdate = dateTime;
+    //   this.requestParam.userId = Cookies.get("employeid");
+    //   // 处理数组数据
+    //   if (Array.isArray(row)) {
+    //     this.requestParam.data = row.reduce((acc, currentRow) => {
+    //       const newData = this.generateRequestData(currentRow);
+    //       newData.forEach((item, index) => {
+    //         // 使用Vue.set确保响应式更新[1,2](@ref)
+    //         this.$set(acc, acc.length + index, item);
+    //       });
+    //       return acc;
+    //     }, []);
+    //   } else {
+    //     // 处理单条数据
+    //     this.requestParam.data = this.generateRequestData(row);
+    //   }
+    //   console.log(this.requestParam.data, "this.requestParam.data");
+    //   const url = "authdata/ftdetail/edit";
+    //   const data = this.requestParam;
+    //   postJson(url, data).then((response) => {
+    //     if (response.msg !== "fail") {
+    //       this.$notify({
+    //         title: "成功",
+    //         message: "保存成功",
+    //         type: "success",
+    //         duration: 2000,
+    //       });
+    //       this.getList2();
+    //       this.getList3();
+    //       this.dropState = false;
+    //     } else {
+    //       this.$notify({
+    //         title: "保存失败",
+    //         message: response.data,
+    //         type: "warning",
+    //         duration: 2000,
+    //       });
+    //     }
+    //   });
+    // },
+
+    // generateRequestData(row) {
+    //   return [
+    //     {
+    //       name: "insertFitHistory",
+    //       type: "e",
+    //       parammaps: {
+    //         pastureid: row.pastureid,
+    //         ftid: this.table2.getdataListParm.parammaps.ftid,
+    //         weight: String(row.fweight),
+    //         preftid: this.table2.temp.preftid,
+    //         dateTime: parseTime(new Date(), "{y}-{m}-{d} {h}:{i}:{s}"),
+    //         slid: this.table2.temp.id,
+    //         fid: row.fid,
+    //         autosecond: row.autosecond,
+    //         userId: Cookies.get("employeid"),
+    //       },
+    //     },
+    //     {
+    //       name: "updateFTdetail",
+    //       type: "e",
+    //       parammaps: {
+    //         // pastureid: row.pastureid,
+    //         // ftid: this.table2.getdataListParm.parammaps.ftid,
+    //         fid: row.fid,
+    //         fname: this.table2.temp.fname,
+    //         fweight: String(row.fweight),
+    //         islockcount: row.islockcount,
+    //         sort: row.sort,
+    //         feedgroup: row.feedgroup,
+    //         preftid: this.table2.temp.preftid,
+    //         autosecond: row.autosecond,
+    //         id: row.id,
+    //         deviation: row.deviation,
+    //         shutdown: this.table2.temp.shutdown,
+    //       },
+    //     },
+    //     {
+    //       name: "updateFPbyFTChange",
+    //       type: "e",
+    //       parammaps: {
+    //         pastureid: row.pastureid,
+    //         ftid: this.table2.getdataListParm.parammaps.ftid,
+    //         type: this.table2.getdataListParm.parammaps.fttypeid,
+    //         // status: status
+    //       },
+    //     },
+    //     {
+    //       name: "updateFTdetailbySort",
+    //       type: "e",
+    //       parammaps: {
+    //         pastureid: row.pastureid,
+    //         ftid: this.table2.getdataListParm.parammaps.ftid,
+    //         sort: row.sort,
+    //         feedgroup: row.feedgroup,
+    //       },
+    //     },
+    //     {
+    //       name: "updateFTdetailGroup",
+    //       type: "e",
+    //       parammaps: {
+    //         pastureid: this.table2.getdataListParm.parammaps.pastureid,
+    //         ftid: this.table2.getdataListParm.parammaps.ftid,
+    //       },
+    //     },
+    //     {
+    //       name: "insertFTHistory",
+    //       type: "e",
+    //       parammaps: {
+    //         id: this.table2.getdataListParm.parammaps.ftid,
+    //         createdate: parseTime(new Date(), "{y}-{m}-{d} {h}:{i}:{s}"),
+    //         userId: Cookies.get("employeid"),
+    //       },
+    //     },
+    //   ];
+    // },
+
+    ////////////////////
+    updateData2(row) {
+      console.log("点击了详情编辑保存", row);
+      this.isokDisable = true;
+      setTimeout(() => {
+        this.isokDisable = false;
+      }, 1000);
+
+      // 统一处理输入为数组
+      const rows = Array.isArray(row) ? row : [row];
+
+      // 预处理校验数据
+      const validationPromises = rows.map(async (currentRow, index) => {
+        try {
+          await this.validateRow(currentRow, index);
+          return this.processSingleRow(currentRow);
+        } catch (error) {
+          this.$message.error(error.message || "校验失败");
+          throw error; // 中断后续处理
+        }
+      });
+
+      // 执行批量处理
+      Promise.all(validationPromises)
+        .then((results) => {
+          this.buildRequestData(results);
+          this.sendRequest();
+        })
+        .catch(() => {
+          this.requestParam.data = []; // 清空无效数据
+        });
+    },
+
+    // 单独校验逻辑
+    validateRow(row, index) {
+      return new Promise((resolve, reject) => {
+        // 核心校验逻辑(与原逻辑保持一致)
+        if (!row.fid) return reject("饲料名称不能为空");
+        if (!row.fweight || parseFloat(row.fweight) <= 0) {
+          return reject("重量请输入正数,最多保留四位小数");
+        }
+        if (parseFloat(row.deviation) > parseFloat(row.autosecond)) {
+          return reject("允许延时偏差不可超出搅拌延时");
+        }
+
+        // 特殊校验处理
+        if (this.table2.getdataListParm.parammaps.fttypeid == 2) {
+          if (parseInt(row.preftid) > 0) {
+            return reject("饲料名称不能选择预混配方");
+          }
+        }
+
+        // 格式化处理
+        row.fweight = formatNum(row.fweight, 4);
+        row.sort = row.sort || this.getNextSortValue();
+
+        resolve(row);
+      });
+    },
+
+    // 单条数据处理
+    processSingleRow(row) {
+      const baseParam = {
+        pastureid: row.pastureid,
+        ftid: this.table2.getdataListParm.parammaps.ftid,
+        userId: Cookies.get("employeid"),
+        createdate: parseTime(new Date(), "{y}-{m}-{d} {h}:{i}:{s}"),
+      };
+
+      return [
+        this.buildFitHistory(row, baseParam),
+        this.buildUpdateFTdetail(row, baseParam),
+        this.buildUpdateFPbyFTChange(baseParam),
+        this.buildUpdateFTdetailbySort(baseParam),
+        this.buildUpdateFTdetailGroup(baseParam),
+        this.buildInsertFTHistory(baseParam),
+      ];
+    },
+
+    // 构建具体请求对象(示例)
+    buildFitHistory(row, baseParam) {
+      return {
+        name: "insertFitHistory",
+        type: "e",
+        parammaps: {
+          ...baseParam,
+          weight: String(row.fweight),
+          preftid: this.table2.temp.preftid,
+          slid: this.table2.temp.id,
+          fid: row.fid,
+          autosecond: row.autosecond,
+        },
+      };
+    },
+    buildUpdateFTdetail(row, baseParam) {
+      return {
+        name: "updateFTdetail",
+        type: "e",
+        parammaps: {
+          ...baseParam,
+          fid: row.fid,
+          fname: this.table2.temp.fname,
+          fweight: String(row.fweight),
+          islockcount: row.islockcount,
+          sort: row.sort,
+          feedgroup: row.feedgroup,
+          preftid: this.table2.temp.preftid,
+          autosecond: row.autosecond,
+          id: row.id,
+          deviation: row.deviation,
+          shutdown: this.table2.temp.shutdown,
+        },
+      };
+    },
+    buildUpdateFPbyFTChange(row, baseParam) {
+      return {
+        name: "updateFPbyFTChange",
+        type: "e",
+        parammaps: {
+          ...baseParam,
+          type: this.table2.getdataListParm.parammaps.fttypeid,
+        },
+      };
+    },
+    buildUpdateFTdetailbySort(row, baseParam) {
+      return {
+        name: "updateFTdetailbySort",
+        type: "e",
+        parammaps: {
+          ...baseParam,
+          sort: row.sort,
+          feedgroup: row.feedgroup,
+        },
+      };
+    },
+    buildUpdateFTdetailGroup(row, baseParam) {
+      return {
+        name: "updateFTdetailGroup",
+        type: "e",
+        parammaps: {
+          ...baseParam,
+        },
+      };
+    },
+    buildInsertFTHistory(row, baseParam) {
+      return {
+        name: "insertFTHistory",
+        type: "e",
+        parammaps: {
+          ...baseParam,
+          id: this.table2.getdataListParm.parammaps.ftid,
+        },
+      };
+    },
+    // 其他构建函数类似...
+
+    // 发送请求
+    sendRequest() {
+      const url = "authdata/ftdetail/edit";
+      postJson(url, this.requestParam).then((response) => {
+        if (response.msg !== "fail") {
+          this.$notify.success({ message: "保存成功" });
+          this.getList2();
+          this.getList3();
+          this.dropState = false;
+          this.isproportion = false;
+        } else {
+          this.$notify.warning({ message: response.data });
+        }
+      });
+    },
+
+    // 获取下一个排序值
+    getNextSortValue() {
+      const lastItem = this.table2.list[this.table2.list.length - 1];
+      return lastItem ? parseInt(lastItem.sort) + 1 : 1;
+    },
+    updateCancel2(row) {
+      console.log("点击了详情编辑取消");
+      // 饲料组编辑false,不可编辑true
+      row.groupEdit = false;
+      row.groupNoEdit = true;
+      // 编辑false,不可编辑true
+      row.Edit = false;
+      row.NoEdit = true;
+      // 新增false,编辑true,编辑保存false
+      row.isCreate = false;
+      row.isUpdate = true;
+      row.isUpdateSave = false;
+      this.getList2();
+      this.dropState = false;
+    },
+
+    // 详情删除
+    handleRowDelete2(row) {
+      console.log("点击了行内删除");
+      MessageBox.confirm("是否确认删除此信息?", {
+        confirmButtonText: "确认",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          console.log(this.table2.list.length);
+          let dateTime = parseTime(new Date(), "{y}-{m}-{d} {h}:{i}:{s}");
+          if (this.table2.list.length > 1) {
+            this.requestParam.common = { returnmap: "0" };
+            this.requestParam.createdate = dateTime;
+            this.requestParam.data = [];
+            this.requestParam.data[0] = {
+              name: "insertFitHistory",
+              type: "e",
+              parammaps: {
+                pastureid: row.pastureid,
+                ftid: this.table2.getdataListParm.parammaps.ftid,
+                weight: 0,
+                preftid: row.preftid,
+                dateTime: parseTime(new Date(), "{y}-{m}-{d} {h}:{i}:{s}"),
+                slid: row.id,
+                fid: row.fid,
+                autosecond: row.autosecond,
+                userId: Cookies.get("employeid"),
+              },
+            };
+            this.requestParam.data[1] = {
+              name: "deleteFTdetail",
+              type: "e",
+              parammaps: {
+                pastureid: row.pastureid,
+                id: row.id,
+              },
+            };
+            this.requestParam.data[2] = {
+              name: "updateFPbyFTChange",
+              type: "e",
+              parammaps: {
+                pastureid: row.pastureid,
+                ftid: this.table2.getdataListParm.parammaps.ftid,
+                type: this.table2.getdataListParm.parammaps.fttypeid,
+                status: 1,
+              },
+            };
+            this.requestParam.data[3] = {
+              name: "updateftversion",
+              type: "e",
+              parammaps: {
+                pastureid: this.table2.getdataListParm.parammaps.pastureid,
+                id: this.table2.getdataListParm.parammaps.ftid,
+              },
+            };
+            this.requestParam.data[4] = {
+              name: "insertFTHistory",
+              type: "e",
+              parammaps: {
+                id: this.table2.getdataListParm.parammaps.ftid,
+                createdate: dateTime,
+                userId: Cookies.get("employeid"),
+              },
+            };
+          } else {
+            this.requestParam.common = { returnmap: "0" };
+            this.requestParam.createdate = dateTime;
+            this.requestParam.userId = Cookies.get("employeid");
+            this.requestParam.data = [];
+            // this.requestParam.data[1] = { 'name': 'checkdeleteFT', 'type': 'v', 'parammaps': {
+            //   pastureid: this.table2.getdataListParm.parammaps.pastureid,
+            //   id: this.table2.getdataListParm.parammaps.ftid
+            // }}
+            this.requestParam.data[0] = {
+              name: "insertFitHistory",
+              type: "e",
+              parammaps: {
+                pastureid: row.pastureid,
+                ftid: this.table2.getdataListParm.parammaps.ftid,
+                weight: 0,
+                preftid: row.preftid,
+                dateTime: dateTime,
+                slid: row.id,
+                fid: row.fid,
+                autosecond: row.autosecond,
+                userId: Cookies.get("employeid"),
+              },
+            };
+            this.requestParam.data[1] = {
+              name: "deleteFTdetail",
+              type: "e",
+              parammaps: {
+                pastureid: row.pastureid,
+                id: row.id,
+              },
+            };
+            this.requestParam.data[2] = {
+              name: "updateFPbyFTChange",
+              type: "e",
+              parammaps: {
+                pastureid: row.pastureid,
+                ftid: this.table2.getdataListParm.parammaps.ftid,
+                type: this.table2.getdataListParm.parammaps.fttypeid,
+                status: 1,
+              },
+            };
+            this.requestParam.data[3] = {
+              name: "updateftversion",
+              type: "e",
+              parammaps: {
+                pastureid: this.table2.getdataListParm.parammaps.pastureid,
+                id: this.table2.getdataListParm.parammaps.ftid,
+              },
+            };
+            this.requestParam.data[4] = {
+              name: "insertFTHistory",
+              type: "e",
+              parammaps: {
+                id: this.table2.getdataListParm.parammaps.ftid,
+                createdate: dateTime,
+                userId: Cookies.get("employeid"),
+              },
+            };
+          }
+          const url = "authdata/ftdetail/edit";
+          const data = this.requestParam;
+          postJson(url, data).then((response) => {
+            if (response.msg !== "fail") {
+              this.$notify({
+                title: "成功",
+                message: "删除成功",
+                type: "success",
+                duration: 2000,
+              });
+              this.getList2();
+              this.getList3();
+            } else {
+              this.$notify({
+                title: "删除失败",
+                message: response.data,
+                type: "warning",
+                duration: 2000,
+              });
+            }
+          });
+          // ExecDataByConfig(this.requestParam).then(response => {
+          //   console.log('新增保存发送参数', this.requestParam)
+          //   if (response.msg === 'fail') {
+          //     this.$notify({ title: '删除失败', message: response.data, type: 'warning', duration: 2000 })
+          //   } else {
+          //     this.$notify({ title: '成功', message: '删除成功', type: 'success', duration: 2000 })
+          //     this.getList2()
+          //     this.getList3()
+          //   }
+          // })
+        })
+        .catch(() => {
+          this.$message({ type: "info", message: "已取消删除" });
+        });
+    },
+    handleSelectionChange2(val) {
+      console.log("勾选数据", val);
+      this.selectList2 = val;
+    },
+    celldblclick(row, column, cell, event) {
+      console.log(row, "=====");
+      this.handleUpdate2(row);
+    },
+    form_delete2() {
+      console.log("点击了删除");
+      if (this.selectList2.length == 0) {
+        this.$message({
+          type: "error",
+          message: "请选择配方详情",
+          duration: 2000,
+        });
+      } else {
+        MessageBox.confirm("是否确认删除此信息?", {
+          confirmButtonText: "确认",
+          cancelButtonText: "取消",
+          type: "warning",
+        }).then(() => {
+          console.log(this.table2.list.length - this.selectList2.length);
+          let dateTime = parseTime(new Date(), "{y}-{m}-{d} {h}:{i}:{s}");
+          if (this.table2.list.length - this.selectList2.length > 0) {
+            this.requestParam.common = { returnmap: "0" };
+            this.requestParam.createdate = dateTime;
+            this.requestParam.userId = Cookies.get("employeid");
+            this.requestParam.data = [];
+            this.requestParam.data[0] = {
+              name: "insertSpotList",
+              resultmaps: { list: this.selectList2 },
+            };
+            this.requestParam.data[0].children = [];
+            this.requestParam.data[0].children[0] = {
+              name: "insertFitHistory",
+              type: "e",
+              parammaps: {
+                pastureid: "@insertSpotList.pastureid",
+                ftid: "@insertSpotList.ftid",
+                weight: 0,
+                preftid: "@insertSpotList.preftid",
+                dateTime: dateTime,
+                slid: "@insertSpotList.id",
+                fid: "@insertSpotList.fid",
+                autosecond: "@insertSpotList.autosecond",
+                userId: Cookies.get("employeid"),
+              },
+            };
+            this.requestParam.data[0].children[1] = {
+              name: "deleteFTdetail",
+              type: "e",
+              parammaps: {
+                id: "@insertSpotList.id",
+                pastureid: "@insertSpotList.pastureid",
+              },
+            };
+            this.requestParam.data[1] = {
+              name: "updateftversion",
+              type: "e",
+              parammaps: {
+                pastureid: this.table2.getdataListParm.parammaps.pastureid,
+                id: this.table2.getdataListParm.parammaps.ftid,
+              },
+            };
+            this.requestParam.data[2] = {
+              name: "updateFPbyFTChange",
+              type: "e",
+              parammaps: {
+                pastureid: this.table2.getdataListParm.parammaps.pastureid,
+                ftid: this.table2.getdataListParm.parammaps.ftid,
+                type: this.table2.getdataListParm.parammaps.fttypeid,
+                status: 1,
+              },
+            };
+            this.requestParam.data[3] = {
+              name: "insertFTHistory",
+              type: "e",
+              parammaps: {
+                id: this.table2.getdataListParm.parammaps.ftid,
+                createdate: dateTime,
+                userId: Cookies.get("employeid"),
+              },
+            };
+            const url = "authdata/ftdetail/edit";
+            const data = this.requestParam;
+            postJson(url, data).then((response) => {
+              if (response.msg !== "fail") {
+                this.$notify({
+                  title: "成功",
+                  message: "删除成功",
+                  type: "success",
+                  duration: 2000,
+                });
+                this.getList2();
+                this.getList3();
+              } else {
+                this.$notify({
+                  title: "删除失败",
+                  message: response.data,
+                  type: "warning",
+                  duration: 2000,
+                });
+              }
+            });
+          } else {
+            this.requestParam.common = { returnmap: "0" };
+            this.requestParam.data = [];
+            // this.requestParam.data[0] = { 'name': 'checkdeleteFT', 'type': 'v', 'parammaps': {
+            //   pastureid: this.table2.getdataListParm.parammaps.pastureid,
+            //   id: this.table2.getdataListParm.parammaps.ftid
+            // }}
+            // this.requestParam.data[1] = { 'name': 'insertSpotList', 'resultmaps': { 'list': this.selectList2 }}
+            // this.requestParam.data[1].children = []
+            // this.requestParam.data[1].children[0] = { 'name': 'deleteFTdetail', 'type': 'e', 'parammaps': {
+            //   id: '@insertSpotList.id',
+            //   pastureid: '@insertSpotList.pastureid'
+            // }}
+            this.requestParam.data[0] = {
+              name: "updateftversion",
+              type: "e",
+              parammaps: {
+                pastureid: this.table2.getdataListParm.parammaps.pastureid,
+                id: this.table2.getdataListParm.parammaps.ftid,
+              },
+            };
+            // this.requestParam.data[3] = { 'name': 'updateFPbyFTChange', 'type': 'e', 'parammaps': {
+            //   pastureid: this.table2.getdataListParm.parammaps.pastureid,
+            //   ftid:this.table2.getdataListParm.parammaps.ftid,
+            //   type: this.table2.getdataListParm.parammaps.fttypeid,
+            //   status: 1
+            // }}
+            ExecDataByConfig(this.requestParam).then((response) => {
+              console.log("删除保存发送参数", this.requestParam);
+              if (response.msg === "fail") {
+                this.$notify({
+                  title: "删除失败",
+                  message: response.data,
+                  type: "warning",
+                  duration: 2000,
+                });
+              } else {
+                const url = "authdata/ftdetai/del";
+                const data = {};
+                data.parammaps = {};
+                data.parammaps.pastureid =
+                  this.table2.getdataListParm.parammaps.pastureid;
+                data.parammaps.ftid =
+                  this.table2.getdataListParm.parammaps.ftid;
+                data.parammaps.type =
+                  this.table2.getdataListParm.parammaps.fttypeid;
+                postJson(url, data).then((response) => {
+                  if (response.msg !== "fail") {
+                    this.$notify({
+                      title: "成功",
+                      message: "删除成功",
+                      type: "success",
+                      duration: 2000,
+                    });
+                    this.getList2();
+                    this.getList3();
+                  } else {
+                    this.$notify({
+                      title: "删除失败",
+                      message: response.data,
+                      type: "warning",
+                      duration: 2000,
+                    });
+                  }
+                });
+              }
+            });
+          }
+        });
+      }
+    },
+
+    // 拆分预混料
+    handleSplitPremix(row) {
+      console.log("点击了拆分预混料");
+      MessageBox.confirm("是否确认拆分当前预混料?", {
+        confirmButtonText: "确认",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.requestParam.name = "splitFTpre";
+          this.requestParam.parammaps = {};
+          this.requestParam.parammaps.ftid =
+            this.table2.getdataListParm.parammaps.ftid;
+          this.requestParam.parammaps.preftid = row.preftid;
+          this.requestParam.parammaps.ftdid = row.id;
+          this.requestParam.parammaps.pastureid = row.pastureid;
+          this.requestParam.parammaps.feedgroup = row.feedgroup;
+          this.requestParam.parammaps.sort = row.sort;
+          this.requestParam.parammaps.fweight = row.fweight;
+          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.getList2();
+              this.getList3();
+            }
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除",
+          });
+        });
+    },
+
+    // 合成预混料
+    handleSyntheticPremix() {
+      console.log("点击了合成预混料", this.selectList2);
+      this.dialogFull = false;
+      if (this.table2.getdataListParm.parammaps.fttypeid == 2) {
+        this.$message({
+          type: "error",
+          message: "预混配方不可合成预混料",
+          duration: 2000,
+        });
+        return false;
+      } else {
+        if (this.selectList2.length > 1) {
+          for (let i = 0; i < this.selectList2.length; i++) {
+            if (parseInt(this.selectList2[i].preftid) > 0) {
+              this.$message({
+                type: "error",
+                message: "不可选择预混料",
+                duration: 2000,
+              });
+              return false;
+            }
+          }
+
+          if (this.selectList2[0].splitftpreid !== undefined) {
+            this.detail.getdataListParm.parammaps.ftid =
+              this.selectList2[0].splitftpreid;
+            this.detail.getdataListParm.parammaps.pastureid =
+              this.selectList2[0].pastureid;
+            GetDataByName(this.detail.getdataListParm).then((response) => {
+              if (response.data.list !== null) {
+                // 不为空时得到比对数据
+                this.detail.list3 = response.data.list;
+                const sortList = []; // 声明排序数组
+                var fweightSum = 0; // 总重量
+                for (let i = 0; i < this.selectList2.length; i++) {
+                  const obj = {};
+                  obj.fid = this.selectList2[i].fid;
+                  obj.fweight = this.selectList2[i].fweight;
+                  fweightSum =
+                    fweightSum + parseFloat(this.selectList2[i].fweight);
+                  sortList.push(obj);
+                }
+                // 排序
+                sortList.sort(function (a, b) {
+                  return a.fid.localeCompare(b.fid);
+                });
+                var a = 0;
+                if (this.detail.list3.length == sortList.length) {
+                  for (let i = 0; i < this.detail.list3.length; i++) {
+                    if (
+                      this.detail.list3[i].fid == sortList[i].fid &&
+                      (
+                        this.detail.list3[i].fweight /
+                        this.detail.list3[i].sumWeight
+                      ).toFixed(3) ==
+                        (sortList[i].fweight / fweightSum).toFixed(3)
+                    ) {
+                      a++;
+                    }
+                  }
+                  if (a == this.detail.list3.length) {
+                    // 如果相等,则该配方为原预混配方
+                    this.detail.getdataListParm2.parammaps.ftid =
+                      this.selectList2[0].splitftpreid;
+                    this.detail.getdataListParm2.parammaps.pastureid =
+                      this.selectList2[0].pastureid;
+                    GetDataByName(this.detail.getdataListParm2).then(
+                      (response) => {
+                        if (response.data.list !== null) {
+                          this.detail.dialogStatus = "SyntheticPremix";
+                          this.detail.dialogFormVisible = true;
+                          this.detail.list = this.selectList2;
+                          this.detail.list2 = response.data.list;
+                          this.detail.disabled = true;
+                          setTimeout(() => {
+                            this.detail.listLoading = false;
+                          }, 100);
+                        } else {
+                          this.detail.list2 = [];
+                        }
+                      }
+                    );
+                  } else {
+                    this.detail.dialogStatus = "SyntheticPremix";
+                    this.detail.dialogFormVisible = true;
+                    this.detail.list = this.selectList2;
+                    this.detail.disabled = false;
+                    this.detail.list2 = [
+                      {
+                        tname: "",
+                        tcolor: "#ccc",
+                        ccid: "",
+                        fttype: "预混配方",
+                        fttypeid: "2",
+                        source: "自定义",
+                        remark: "",
+                        enable: 1,
+                        volume: "",
+                      },
+                    ];
+                    setTimeout(() => {
+                      this.detail.listLoading = false;
+                    }, 100);
+                  }
+                } else {
+                  this.detail.dialogStatus = "SyntheticPremix";
+                  this.detail.dialogFormVisible = true;
+                  this.detail.list = this.selectList2;
+                  this.detail.disabled = false;
+                  this.detail.list2 = [
+                    {
+                      tname: "",
+                      tcolor: "#ccc",
+                      ccid: "",
+                      fttype: "预混配方",
+                      fttypeid: "2",
+                      source: "自定义",
+                      remark: "",
+                      enable: 1,
+                      volume: "",
+                    },
+                  ];
+                  setTimeout(() => {
+                    this.detail.listLoading = false;
+                  }, 100);
+                }
+              } else {
+                this.detail.list3 = [];
+                this.detail.dialogStatus = "SyntheticPremix";
+                this.detail.dialogFormVisible = true;
+                this.detail.list = this.selectList2;
+                this.detail.disabled = false;
+                this.detail.list2 = [
+                  {
+                    tname: "",
+                    tcolor: "#ccc",
+                    ccid: "",
+                    fttype: "预混配方",
+                    fttypeid: "2",
+                    source: "自定义",
+                    remark: "",
+                    enable: 1,
+                    volume: "",
+                  },
+                ];
+                setTimeout(() => {
+                  this.detail.listLoading = false;
+                }, 100);
+              }
+            });
+          } else {
+            this.detail.dialogStatus = "SyntheticPremix";
+            this.detail.dialogFormVisible = true;
+            this.detail.list = this.selectList2;
+            this.detail.disabled = false;
+            this.detail.list2 = [
+              {
+                tname: "",
+                tcolor: "#ccc",
+                ccid: "",
+                fttype: "预混配方",
+                fttypeid: "2",
+                source: "自定义",
+                remark: "",
+                enable: 1,
+                volume: "",
+              },
+            ];
+            setTimeout(() => {
+              this.detail.listLoading = false;
+            }, 100);
+          }
+        } else {
+          this.$message({
+            type: "error",
+            message: "请选择俩条及以上饲料进行合成",
+            duration: 2000,
+          });
+          return false;
+        }
+      }
+    },
+    // 畜生类别
+    changeLivestockType2(item) {
+      this.detail.list2[0].ccname = this.livestockTypeList.find(
+        (obj) => obj.value === item
+      ).label;
+    },
+    syntheticPremixData() {
+      console.log("点击了合成预混料确认");
+      if (this.detail.disabled == true) {
+        // 原预混料
+        let sumFweight = 0;
+        for (let i = 0; i < this.detail.list.length; i++) {
+          sumFweight += parseFloat(this.detail.list[i].fweight);
+        }
+        sumFweight = sumFweight.toFixed(3);
+        this.isokDisable = true;
+        setTimeout(() => {
+          this.isokDisable = false;
+        }, 1000);
+        this.requestParam.common = { returnmap: "0" };
+        this.requestParam.data = [];
+        this.requestParam.data[0] = {
+          name: "insertSpotList",
+          resultmaps: { list: this.detail.list },
+        };
+        this.requestParam.data[0].children = [];
+        this.requestParam.data[0].children[0] = {
+          name: "deleteFTdetail",
+          type: "e",
+          parammaps: {
+            pastureid: "@insertSpotList.pastureid",
+            id: "@insertSpotList.id",
+          },
+        };
+        this.requestParam.data[1] = {
+          name: "insertSpotList2",
+          resultmaps: { list: this.detail.list2 },
+        };
+        this.requestParam.data[1].children = [];
+        this.requestParam.data[1].children[0] = {
+          name: "insertFTdetail",
+          type: "e",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            ftid: this.table2.getdataListParm.parammaps.ftid,
+            fid: this.detail.list2[0].id,
+            fname: "@insertSpotList2.tname",
+            shutdown: "0",
+            fweight: sumFweight,
+            islockcount: "0",
+            sort:
+              parseInt(this.table2.list[this.table2.list.length - 1].sort) + 1,
+            feedgroup: "@insertSpotList2.tname",
+            preftid: this.detail.list2[0].id,
+            autosecond: this.detail.list[0].autosecond,
+          },
+        };
+        ExecDataByConfig(this.requestParam).then((response) => {
+          console.log("合成预混料保存发送参数", this.requestParam);
+          if (response.msg === "fail") {
+            const tname = new RegExp("key 'tname'");
+            if (tname.test(response.data)) {
+              this.$message({
+                type: "error",
+                message: "预混配方已存在,不可重复生成",
+                duration: 2000,
+              });
+            } else {
+              this.$notify({
+                title: "保存失败",
+                message: response.data,
+                type: "warning",
+                duration: 2000,
+              });
+            }
+          } else {
+            this.$notify({
+              title: "",
+              message: "保存成功",
+              type: "success",
+              duration: 2000,
+            });
+            this.detail.dialogFormVisible = false;
+            this.getList3();
+            this.getList2();
+            this.getDownList();
+          }
+        });
+      } else {
+        // 现生成预混料
+        if (
+          this.detail.list2[0].tname == "" &&
+          this.detail.list2[0].ccid == ""
+        ) {
+          this.$message({
+            type: "error",
+            message: "配方名称/牲畜类别/不能为空",
+            duration: 2000,
+          });
+          return false;
+        } else if (this.detail.list2[0].tname == "") {
+          this.$message({
+            type: "error",
+            message: "配方名称不能为空",
+            duration: 2000,
+          });
+          return false;
+        } else if (this.detail.list2[0].ccid == "") {
+          this.$message({
+            type: "error",
+            message: "牲畜类别不能为空",
+            duration: 2000,
+          });
+          return false;
+        }
+        const pattern = new RegExp(
+          "[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]"
+        );
+        if (pattern.test(this.detail.list2[0].tname)) {
+          this.$message({
+            type: "error",
+            message: "配方名称不可输入特殊字符",
+            duration: 2000,
+          });
+          return false;
+        }
+        let sumFweight = 0;
+        for (let i = 0; i < this.detail.list.length; i++) {
+          sumFweight += parseFloat(this.detail.list[i].fweight);
+        }
+        sumFweight = sumFweight.toFixed(3);
+        console.log(sumFweight);
+        this.isokDisable = true;
+        setTimeout(() => {
+          this.isokDisable = false;
+        }, 1000);
+        if (this.detail.list2[0].tcolor == null) {
+          this.detail.list2[0].tcolor = "#CCCCCC";
+        }
+        this.requestParam.common = { returnmap: "0" };
+        this.requestParam.data = [];
+        this.requestParam.data[0] = {
+          name: "insertFT",
+          type: "e",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            tcode: this.detail.list2[0].tcode,
+            tname: this.detail.list2[0].tname,
+            tcolor: this.detail.list2[0].tcolor,
+            ccid: this.detail.list2[0].ccid,
+            ccname: this.detail.list2[0].ccname,
+            fttype: this.detail.list2[0].fttype,
+            fttypeid: this.detail.list2[0].fttypeid,
+            source: this.detail.list2[0].source,
+            remark: this.detail.list2[0].remark,
+            enable: this.detail.list2[0].enable,
+            volume: this.detail.list2[0].volume,
+          },
+        };
+        this.requestParam.data[1] = {
+          name: "insertSpotList",
+          resultmaps: { list: this.detail.list },
+        };
+        this.requestParam.data[1].children = [];
+        this.requestParam.data[1].children[0] = {
+          name: "insertFTdetail",
+          type: "e",
+          parammaps: {
+            pastureid: "@insertSpotList.pastureid",
+            ftid: "@insertFT.LastInsertId",
+            fid: "@insertSpotList.fid",
+            fname: "@insertSpotList.fname",
+            fweight: "@insertSpotList.fweight",
+            islockcount: "@insertSpotList.islockcount",
+            sort: "@insertSpotList.sort",
+            feedgroup: "@insertSpotList.feedgroup",
+            preftid: "@insertSpotList.preftid",
+            autosecond: "@insertSpotList.autosecond",
+            shutdown: "@insertSpotList.shutdown",
+          },
+        };
+        this.requestParam.data[1].children[1] = {
+          name: "deleteFTdetail",
+          type: "e",
+          parammaps: {
+            pastureid: "@insertSpotList.pastureid",
+            id: "@insertSpotList.id",
+          },
+        };
+        this.requestParam.data[2] = {
+          name: "insertSpotList2",
+          resultmaps: { list: this.detail.list2 },
+        };
+        this.requestParam.data[2].children = [];
+        this.requestParam.data[2].children[0] = {
+          name: "insertFTdetail",
+          type: "e",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            ftid: this.table2.getdataListParm.parammaps.ftid,
+            fid: "@insertFT.LastInsertId",
+            fname: "@insertSpotList2.tname",
+            shutdown: "0",
+            fweight: sumFweight,
+            islockcount: "0",
+            sort:
+              parseInt(this.table2.list[this.table2.list.length - 1].sort) + 1,
+            feedgroup: "@insertSpotList2.tname",
+            preftid: "@insertFT.LastInsertId",
+            autosecond: this.detail.list[0].autosecond,
+          },
+        };
+        ExecDataByConfig(this.requestParam).then((response) => {
+          console.log("合成预混料保存发送参数", this.requestParam);
+          if (response.msg === "fail") {
+            const tname = new RegExp("key 'tname'");
+            if (tname.test(response.data)) {
+              this.$message({
+                type: "error",
+                message: "预混配方已存在,不可重复生成",
+                duration: 2000,
+              });
+            } else {
+              this.$notify({
+                title: "保存失败",
+                message: response.data,
+                type: "warning",
+                duration: 2000,
+              });
+            }
+          } else {
+            this.$notify({
+              title: "",
+              message: "保存成功",
+              type: "success",
+              duration: 2000,
+            });
+            this.detail.dialogFormVisible = false;
+            this.getList3();
+            this.getList2();
+            this.getDownList();
+          }
+        });
+      }
+    },
+    handleFormulationEvaluation(row) {
+      console.log(row);
+      // this.$router.push({ path: '/statisticalAnalysis/FormulationEvaluation', query: { tname: row.tname }})
+      this.$router.push({
+        name: "FormulationEvaluation",
+        params: {
+          tname: row.tname,
+          ftid: row.id,
+          pastureid: row.pastureid,
+          startTime: parseTime(new Date(), "{y}-{m}-{d}"),
+          inputDatetime: [new Date("startTime"), new Date("startTime")], // 日期后台待传
+          stopTime: parseTime(new Date(), "{y}-{m}-{d}"),
+        },
+      });
+    },
+    // 配方记录
+    handleRowRecipeRecord(row) {
+      console.log(row);
+      this.rowRecipeRecord.temp = Object.assign({}, row);
+      this.rowRecipeRecord.dialogFormVisible = true;
+      this.textMap.rowRecipeRecordTxt = "配方修改记录——配方:" + row.tname;
+      this.rowRecipeRecord.dialogStatus = "rowRecipeRecordTxt";
+      this.rowRecipeRecord.getdataListParm.parammaps.pastureid = row.pastureid;
+      this.rowRecipeRecord.getdataListParm.parammaps.fitid = row.id;
+      this.rowRecipeRecord.getdataListParm.parammaps.inputDatetime = [];
+      this.getRowRecipeRecordList();
+    },
+    getRowRecipeRecordList() {
+      this.rowRecipeRecord.listLoading = true;
+      this.rowRecipeRecord.getdataListParm.parammaps.fitid =
+        this.rowRecipeRecord.temp.id;
+      if (
+        this.rowRecipeRecord.getdataListParm.parammaps.inputDatetime == null
+      ) {
+        this.rowRecipeRecord.getdataListParm.parammaps.inputDatetime = "";
+        this.rowRecipeRecord.getdataListParm.parammaps.startTime = "";
+        this.rowRecipeRecord.getdataListParm.parammaps.stopTime = "";
+      } else {
+        this.rowRecipeRecord.getdataListParm.parammaps.startTime =
+          this.rowRecipeRecord.getdataListParm.parammaps.inputDatetime[0];
+        this.rowRecipeRecord.getdataListParm.parammaps.stopTime =
+          this.rowRecipeRecord.getdataListParm.parammaps.inputDatetime[1];
+      }
+      const url = "authdata/GetArrList";
+      const data = this.rowRecipeRecord.getdataListParm;
+      postJson(url, data).then((response) => {
+        if (response.data.list !== null) {
+          for (let i = 0; i < response.data.list.length; i++) {
+            if (response.data.list[i].arrList == null) {
+              this.$set(response.data.list[i], "arrList", []);
+            }
+          }
+          this.rowRecipeRecord.list = response.data.list;
+          this.rowRecipeRecord.pageNum = response.data.pageNum;
+          this.rowRecipeRecord.pageSize = response.data.pageSize;
+          this.rowRecipeRecord.total = response.data.total;
+        } else {
+          this.rowRecipeRecord.list = [];
+          this.rowRecipeRecord.total = 0;
+        }
+        console.log(response.data, "response.data");
+        setTimeout(() => {
+          this.rowRecipeRecord.listLoading = false;
+        }, 100);
+      });
+    },
+    handleRowRecipeRecordSearch() {
+      this.getRowRecipeRecordList();
+    },
+    handleEnlarge() {
+      var height =
+        (document.documentElement.clientHeight - 165 + 50).toString() + "px";
+      // var height = (document.documentElement.clientHeight - 165 + 80).toString() + 'px'
+      // var height2 = '-' + (document.documentElement.clientHeight - 400).toString() + 'px'
+      var height2 = "-" + this.$refs.template.offsetHeight.toString() + "px";
+      // console.log(this.$refs.detail.offsetHeight)
+      // console.log(height2, 'height2')
+      this.isEnlarge = false;
+      this.$refs.detail.style.top = height2;
+      this.$refs.detail.style.height = height;
+      this.$refs.appContainer.style.height = height;
+      this.$refs.table2.style.height = 0;
+      this.$refs.myContainer.style.posiiton = "relative";
+      this.$refs.detail.style.posiiton = "absolute";
+    },
+    handleNarrow() {
+      this.isEnlarge = true;
+      this.$refs.detail.style.top = 0;
+      this.$refs.detail.style.height = "300px";
+      this.$refs.myContainer.style.posiiton = "";
+      this.$refs.detail.style.posiiton = "";
+      this.$refs.detail.style.zIndex = "";
+    },
+    handleTakeEffect() {
+      if (this.selectList.length == 0) {
+        this.$message({
+          type: "error",
+          message: "请选择车次信息",
+          duration: 2000,
+        });
+      } else {
+        MessageBox.confirm(
+          "当前选中" + this.selectList.length + "条信息,是否生效?",
+          {
+            confirmButtonText: "确认",
+            cancelButtonText: "取消",
+            type: "warning",
+          }
+        ).then(() => {
+          let ids = [];
+          for (let i = 0; i < this.selectList.length; i++) {
+            ids.push(this.selectList[i].id);
+          }
+          var data = {};
+          data.parammaps = {};
+          data.parammaps.enable = 1;
+          data.parammaps.id = ids.toString();
+          var url = "authdata/feedtemplet/enable";
+          postJson(url, data).then((response) => {
+            console.log("生效保存发送参数", data);
+            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();
+            }
+          });
+        });
+      }
+    },
+    handleDisable() {
+      if (this.selectList.length == 0) {
+        this.$message({
+          type: "error",
+          message: "请选择车次信息",
+          duration: 2000,
+        });
+      } else {
+        MessageBox.confirm(
+          "当前选中" + this.selectList.length + "条信息,是否禁用?",
+          {
+            confirmButtonText: "确认",
+            cancelButtonText: "取消",
+            type: "warning",
+          }
+        ).then(() => {
+          let ids = [];
+          for (let i = 0; i < this.selectList.length; i++) {
+            ids.push(this.selectList[i].id);
+          }
+          var data = {};
+          data.parammaps = {};
+          data.parammaps.enable = 0;
+          data.parammaps.id = ids.toString();
+          console.log("禁用", data);
+          var url = "authdata/feedtemplet/enable";
+          postJson(url, data).then((response) => {
+            console.log("禁用保存发送参数", this.requestParam);
+            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();
+            }
+          });
+        });
+      }
+    },
+    getIspalyUd() {
+      let url = "authdata/GetDataByName";
+      let data = {
+        name: "getSysoptEnable",
+        page: 1,
+        offset: 1,
+        pagecount: 1,
+        returntype: "Map",
+        parammaps: {
+          pastureid: Cookies.get("pastureid"),
+          inforname: "gmUdSync",
+        },
+      };
+      postJson(url, data).then((response) => {
+        if (response.msg !== "fail") {
+          if (response.data.list[0].inforvalue == 0) {
+            this.ispalyUd = false;
+          } else {
+            this.ispalyUd = true;
+          }
+        } else {
+          this.$notify({
+            title: "请求失败",
+            message: response.data,
+            type: "warning",
+            duration: 2000,
+          });
+        }
+      });
+    },
+    handleGetUd() {
+      MessageBox.confirm("是否上传配方?", {
+        confirmButtonText: "确认",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        let url = "authdata/gm/udfeedtemplet/push";
+        let data = {
+          pastureId: Cookies.get("pastureid"),
+        };
+        postJson(url, data).then((response) => {
+          if (response.msg !== "fail") {
+            this.$notify({
+              title: "成功",
+              message: "保存成功",
+              type: "success",
+              duration: 2000,
+            });
+            this.getList();
+          } else {
+            this.$notify({
+              title: "保存失败",
+              message: response.data,
+              type: "warning",
+              duration: 2000,
+            });
+          }
+        });
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+// .search{margin-top:10px;height: 40px;}
+// .operation{height: 50px;}
+.table {
+  margin-top: 5px;
+}
+.table2 {
+  margin-top: 10px;
+}
+$width: 350px;
+$left: 325px;
+.selectInput {
+  position: relative;
+  display: inline-block;
+  .Input {
+    width: $width;
+    position: relative;
+  }
+  .el-icon-arrow-down {
+    width: 30px;
+    height: 30px;
+    position: absolute;
+    left: $left;
+    top: 10px;
+    color: #c0c4cc;
+  }
+  .el-icon-arrow-up {
+    width: 30px;
+    height: 30px;
+    position: absolute;
+    left: $left;
+    top: 10px;
+    color: #c0c4cc;
+  }
+  .selectUl {
+    height: 220px;
+    overflow-y: auto;
+    z-index: 111;
+    width: $width;
+    background: #fff;
+    border: 1px solid #e4e7ed;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+    margin: -1px 0 0 0;
+    padding: 6px 0;
+    margin: 0;
+    box-sizing: border-box;
+    position: absolute;
+    li {
+      list-style: none;
+      font-size: 14px;
+      padding: 0 10px;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      color: #606266;
+      height: 50px;
+      line-height: 50px;
+      box-sizing: border-box;
+      cursor: pointer;
+      a {
+        float: left;
+        width: 80px;
+      }
+      a:hover {
+        color: rgba(0, 204, 102, 0.71);
+        font-weight: 700;
+      }
+    }
+  }
+}
+.template {
+  background: #fff;
+  position: relative;
+}
+.app-container {
+  background: #fff;
+}
+.detail {
+  background: #fff;
+  overflow-y: hidden;
+  overflow-x: hidden;
+  // position: fixed;
+  // bottom: 0;
+  // right:0;
+  z-index: 3;
+  // width: calc(100% - 210px);
+  position: relative;
+}
+.hide2 {
+  float: right;
+  right: 0;
+}
+.templateDialog {
+  background: #fff;
+  position: relative;
+}
+.detailDialog {
+  background: #fff;
+  position: relative;
+}
+.hide {
+  float: right;
+  margin-right: 60px;
+}
+</style>
+<style>
+.el-color-dropdown__main-wrapper {
+  display: none !important;
+}
+.el-color-dropdown__value {
+  display: none !important;
+}
+.el-color-dropdown__btns .el-button--text {
+  display: none !important;
+}
+</style>