<template>
  <div class="app-container">
    <el-dialog
      :title="upload.title"
      :visible.sync="upload.open"
      width="400px"
      append-to-body
    >
      <el-upload
        ref="upload"
        :limit="1"
        accept=".xlsx, .xls"
        :headers="upload.headers"
        :action="
          upload.url +
          '?updateSupport=' +
          upload.updateSupport +
          '&tableName=' +
          tableName +
          '&sqlKey=' +
          tableKey
        "
        v-loading="upload.isUploading"
        :disabled="upload.isUploading"
        :on-progress="handleFileUploadProgress"
        :on-success="handleFileSuccess"
        :auto-upload="false"
        :onChange="handleChange"
        drag
      >
        <i class="el-icon-upload"></i>
        <div class="el-upload__text">将文件拖到此处，或<em>点击上传</em></div>
        <div class="el-upload__tip text-center" slot="tip">
          <!--          <div class="el-upload__tip" slot="tip">-->
          <!--            <el-checkbox v-model="upload.updateSupport"/>-->
          <!--            是否更新已经存在的用户数据-->
          <!--          </div>-->
          <span>仅允许导入xls、xlsx格式文件。</span>
          <el-link
            type="primary"
            :underline="false"
            style="font-size: 12px; vertical-align: baseline"
            @click="importTemplate"
            >下载模板
          </el-link>
        </div>
      </el-upload>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitFileForm">确 定</el-button>
        <el-button @click="upload.open = false">取 消</el-button>
      </div>
    </el-dialog>
    <Queryfrom
      :form-vals="templateInfo.where"
      :statisticList="statisticList"
      :showCount="showCount"
      :showSearch="showSearch"
      @getList="getList"
      ref="mychild"
    />
    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="primary"
          plain
          icon="el-icon-plus"
          size="mini"
          @click="addHandler"
          >新增
        </el-button>
      </el-col>
      <!-- <el-col :span="1.5" v-if="false">
        <el-button
          type="success"
          plain
          icon="el-icon-edit"
          size="mini"
          :disabled="single"
          @click="handleUpdate"
          >修改
        </el-button>
      </el-col> -->
      <el-col :span="1.5">
        <el-button
          type="danger"
          plain
          icon="el-icon-delete"
          size="mini"
          :disabled="multiple"
          @click="batchDelete"
          >删除
        </el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          plain
          icon="el-icon-upload2"
          size="mini"
          @click="upload.open = true"
          >导入
        </el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          size="mini"
          @click="handleExport"
          >导出
        </el-button>
      </el-col>

      <right-toolbar
        style="float: right"
        :showCount.sync="showCount"
        :showSearch.sync="showSearch"
        :counts="true"
        @queryTable="pageList"
      ></right-toolbar>
      <el-radio-group
        style="float: right; margin-right: 100px"
        v-model="orderType"
        size="mini"
        @change="orderTypeChange"
      >
        <el-radio-button :label="0">全部</el-radio-button>
        <el-radio-button :label="1">库存</el-radio-button>
        <el-radio-button :label="2">生产</el-radio-button>
      </el-radio-group>
    </el-row>
    <el-table
      v-loading="loading"
      :data="tableList"
      @selection-change="handleSelectionChange"
      ref="tableRef"
      :cell-style="cellStyle"
      :reserve-selection="true"
      :row-key="getRowKey"
    >
      <el-table-column
        type="selection"
        width="55"
        reserve-selection
        align="center"
      >
      </el-table-column>
      <!-- <span v-for="(key, val) in columns" :key="key">
        <el-table-column :label="key" align="center" :prop="val" />
      </span> -->
      <el-table-column
        v-for="item in columns"
        :key="item.key"
        :label="item.value"
        align="center"
        :prop="item.key"
      >
        <template slot-scope="scope">
          <!-- 存在字段样式或字典样式 -->
          <template
            v-if="
              scope.row.styleFieldObj != undefined &&
              scope.row.styleFieldObj[item.key]
            "
          >
            <!-- 字段样式 -->
            <template v-if="scope.row.styleFieldObj[item.key].styleType == 1">
              <!-- 一般字体样式 -->
              <template
                v-if="scope.row.styleFieldObj[item.key].fieldStyleType == 0"
              >
                <span
                  :style="`color:${
                    scope.row.styleFieldObj[item.key].fontColor
                  }`"
                  >{{ scope.row[item.key] }}</span
                >
              </template>
              <!-- 标签字体样式 -->
              <template
                v-else-if="
                  scope.row.styleFieldObj[item.key].fieldStyleType == 1
                "
              >
                <el-tag
                  :type="scope.row.styleFieldObj[item.key].tagType"
                  :effect="
                    scope.row.styleFieldObj[item.key].isTagFullBg
                      ? 'dark'
                      : 'light'
                  "
                >
                  {{ scope.row[item.key] }}
                </el-tag>
              </template>
            </template>
            <!-- 字典样式 -->
            <template
              v-else-if="scope.row.styleFieldObj[item.key].styleType == 2"
            >
              <span
                v-if="
                  scope.row.styleFieldObj[item.key].listClass == '' ||
                  scope.row.styleFieldObj[item.key].listClass == 'default'
                "
                >{{ scope.row.styleFieldObj[item.key].dictLabel }}</span
              >
              <el-tag
                v-else
                :type="
                  scope.row.styleFieldObj[item.key].listClass == 'primary'
                    ? ''
                    : scope.row.styleFieldObj[item.key].listClass
                "
                >{{ scope.row.styleFieldObj[item.key].dictLabel }}</el-tag
              >
            </template>
          </template>
          <!-- 显示默认值 -->
          <template v-else>
            {{ scope.row[item.key] }}
          </template>
        </template>
      </el-table-column>
      <el-table-column
        v-if="isShowExcuteCol"
        label="操作"
        align="center"
        class-name="small-padding fixed-width"
      >
        <template slot-scope="scope">
          <!-- <el-button
            type="info"
            size="default"
            @click="handleEdit(scope.$index, scope.row)"
            >编辑</el-button
          > -->

          <Menu
            :row="scope.row"
            v-for="btnObj in excuteBtnArr"
            :key="btnObj.id"
            :listAll="btnObj"
            @excuteHandler="excuteHandler"
          ></Menu>
        </template>
      </el-table-column>
    </el-table>
    <pagination
      v-show="total > 0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="pageList"
    />
    <!-- k-form-build 组件渲染弹窗-->
    <el-dialog :title="title" :visible.sync="kOpen" append-to-body>
      <k-form-build
        v-if="jsonData"
        class="formBuild"
        ref="addFromRef"
        :dynamicData="dynamicData"
        :defaultValue="defaultValue"
        @submit="tempSubBtn"
        @change="formChangeHandler"
        :value="jsonData"
      />
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="editConfirmHandler">确 定</el-button>
        <el-button @click="kCancel">取 消</el-button>
      </div>
    </el-dialog>
    <!-- 添加或修改销售出库单：- 过磅记录生成数据对话框 -->
    <el-dialog :title="title" :visible.sync="open" append-to-body>
      <!-- <iframe
        :src="iframeUrl"
        width="100%"
        height="600px"
        style="border: none"
        scrolling="no"
      >
      </iframe> -->
      <!-- <k-form-build
        v-if="jsonData"
        class="formBuild"
        ref="addFromRef"
        :dynamicData="dynamicData"
        :defaultValue="defaultValue"
        @submit="tempSubBtn"
        @change="formChangeHandler"
        :value="jsonData"
      /> -->
      <el-row :gutter="20">
        <el-form
          :model="formData"
          ref="formDataRef"
          :rules="rules"
          label-width="100px"
          :inline="true"
          size="normal"
        >
          <!-- <el-form-item prop="saleNo" label="合同号:">
          <el-input size="small" v-model="formData.saleNo"></el-input>
        </el-form-item> -->
          <el-col :span="12">
            <el-form-item prop="saleDate" label="日期:">
              <el-date-picker
                size="small"
                v-model="formData.saleDate"
                value-format="yyyy-MM-dd"
                format="yyyy-MM-dd"
                type="date"
                placeholder="选择日期"
              >
              </el-date-picker>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item prop="saleCustomNo" label="客户名称:">
              <el-select
                size="small"
                v-model="formData.saleCustomNo"
                placeholder="请选择客户"
                clearable
                filterable
                @change="customChangeHandler"
              >
                <el-option
                  v-for="item in customerOptions"
                  :key="item.customNo"
                  :label="item.customName"
                  :value="item.customNo"
                >
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="联系人:" size="normal">
              {{ formData.contactPerson }}
            </el-form-item>
            <el-form-item label="客户地址:" size="normal">
              {{ formData.customAddress }}
            </el-form-item>
            <el-form-item label="客户国别:" size="normal">
              {{ formData.customCountryType }}
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item
              label-width="120px"
              prop="saleDate"
              label="预计下单时间:"
            >
              <el-date-picker
                size="small"
                v-model="formData.saleOrderEstimatedTime"
                value-format="yyyy-MM-dd"
                format="yyyy-MM-dd"
                type="date"
                placeholder="选择日期"
              >
              </el-date-picker>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="交货周期:" size="normal" prop="saleLeadTime">
              <el-input size="small" v-model="formData.saleLeadTime"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-divider>货品明细</el-divider>
          </el-col>
          <el-table
            :data="productionTableData"
            border
            show-summary
            :summary-method="getSummaries"
            sum-text="小计"
            style="width: 100%"
          >
            <el-table-column prop="productName" label="品名" width="180">
              <template slot-scope="scope">
                <!-- <el-input
                v-model="scope.row.productName"
                size="small"
                clearable
              ></el-input> -->
                <el-select
                  v-model="scope.row.productNo"
                  placeholder=""
                  clearable
                  filterable
                  @change="handleProductChange(scope.row.productNo, scope.row)"
                >
                  <el-option
                    v-for="item in productionOptions"
                    :key="item.productNo"
                    :label="item.productName"
                    :value="item.productNo"
                  >
                  </el-option>
                </el-select>
              </template>
            </el-table-column>
            <el-table-column prop="productNumber" label="数量/kg">
              <template slot-scope="scope">
                <el-input
                  v-model="scope.row.productNumber"
                  size="small"
                  clearable
                  @change="computedPrice(scope.row)"
                ></el-input>
              </template>
            </el-table-column>
            <el-table-column prop="productUnitPrice" label="单价">
              <template slot-scope="scope">
                <el-input
                  v-model="scope.row.productUnitPrice"
                  size="small"
                  @change="computedPrice(scope.row)"
                  clearable
                ></el-input>
              </template>
            </el-table-column>
            <el-table-column prop="productAmounts" label="金额">
              <template slot-scope="scope">
                <!-- <el-input
                  v-model="scope.row.productAmounts"
                  size="small"
                  clearable
                ></el-input> -->
                {{ scope.row.productAmounts }}
              </template>
            </el-table-column>
            <el-table-column prop="sliceType" label="切片型号">
              <template slot-scope="scope">
                <el-select
                  v-model="scope.row.sliceType"
                  placeholder=""
                  clearable
                  filterable
                  @change="sliceTypeChangeHandler(scope.row)"
                >
                  <el-option
                    v-for="item in sliceTypeOptions"
                    :key="item.materielCode"
                    :label="item.materielName"
                    :value="item.materielCode"
                  >
                  </el-option>
                </el-select>
              </template>
            </el-table-column>
            <el-table-column prop="colourNumber" label="色号">
              <template slot-scope="scope">
                <el-select
                  v-model="scope.row.colourNumber"
                  placeholder=""
                  clearable
                  filterable
                  @change="colourNumberChangeHandler(scope.row)"
                >
                  <el-option
                    v-for="item in colourNumberOptions"
                    :key="item.materielCode"
                    :label="item.materieColorNumber"
                    :value="item.materielCode"
                  >
                  </el-option>
                </el-select>
              </template>
            </el-table-column>
            <el-table-column prop="remark" label="备注">
              <template slot-scope="scope">
                <el-input
                  v-model="scope.row.remark"
                  size="small"
                  clearable
                ></el-input>
              </template>
            </el-table-column>
            <el-table-column label="操作">
              <template slot-scope="scope">
                <el-button
                  type="danger"
                  size="small"
                  @click="deleteProduct(scope.$index)"
                  >删除</el-button
                >
              </template>
            </el-table-column>
          </el-table>
          <el-button
            class="mt5"
            type="primary"
            style="width: 100%"
            size="small"
            @click="addProduct"
            >添加货品</el-button
          >
          <el-col :span="12">
            <el-form-item label-width="120px" label="合计金额(大写)">
              <el-input
                v-model="formData.saleAmountInWords"
                size="small"
                clearable
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="付款方式">
              <el-input
                v-model="formData.salePayType"
                size="small"
                clearable
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-divider>工艺要求</el-divider>
          </el-col>
          <el-col :span="12">
            <el-form-item label="网络:">
              <el-input
                v-model="formData.craftGrid"
                size="small"
                clearable
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="油剂:">
              <el-input
                v-model="formData.craftOil"
                size="small"
                clearable
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="卷装:">
              <el-input
                v-model="formData.craftPackage"
                size="small"
                clearable
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="色牢度:">
              <el-input
                v-model="formData.craftColorFastness"
                size="small"
                clearable
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="其它:">
              <el-input
                v-model="formData.craftOther"
                size="small"
                clearable
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="包装/贴唛:">
              <el-input
                v-model="formData.craftMark"
                size="small"
                clearable
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="运输方式:">
              <el-input
                v-model="formData.shippingMethod"
                size="small"
                clearable
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-divider>审计人员数据</el-divider>
          </el-col>
          <el-col :span="12">
            <el-form-item label="业务员:">
              <!-- <el-input
            v-model="formData.salesman"
            size="small"
            clearable
          ></el-input> -->
              {{ nickName }}
            </el-form-item>
          </el-col>
        </el-form>
      </el-row>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="editConfirm">确 定</el-button>
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>

    <!-- 绑定按钮dialog -->
    <el-dialog
      title="提示"
      :visible.sync="btnDialogVisible"
      :before-close="handleClose"
    >
      <DialogTemplate
        ref="dialogRef"
        :groupKey="groupKey"
        :rowobj="rowobj"
        :subCount="subCount"
        :tableCount="tableCount"
        :subTableName="subTableName"
        @addList="addListHandler"
      >
      </DialogTemplate>
      <span slot="footer" class="dialog-footer">
        <el-button @click="btnDialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="btnComfirm">确 定</el-button>
      </span>
    </el-dialog>

    <!-- 自定义弹窗 -->
    <el-dialog
      title="提示"
      :visible.sync="btnDialogVisible"
      :before-close="handleClose"
    >
      <DialogTemplate
        ref="dialogRef"
        :groupKey="groupKey"
        :rowobj="rowobj"
        :subCount="subCount"
        :tableCount="tableCount"
        :subTableName="subTableName"
        @addList="addListHandler"
      >
      </DialogTemplate>
      <span slot="footer" class="dialog-footer">
        <el-button @click="btnDialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="btnComfirm">确 定</el-button>
      </span>
    </el-dialog>
    <!-- 详情弹窗 -->
    <el-dialog title="详情" :visible.sync="detailShow" width="1200px">
      <div ref="detailTable" id="detail"></div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="detailShow = false">取 消</el-button>
        <el-button type="primary" @click="detailPrintHandler">打 印</el-button>
      </span>
    </el-dialog>
    <div id="printDom"></div>
  </div>
</template>
<script>
import {
  delTableData,
  dragTableInfo,
  listTable,
  unionListTableData,
  getInfoBySqlKey,
  btnCommonApi,
  addTableData,
  batchEdit,
  getStatisticList,
  getTableList1,
} from "@/api/tablelist/commonTable";
import { listData } from "@/api/system/tenant/data";
import { getToken } from "@/utils/auth";
import Queryfrom from "@/views/tablelist/commonTable/queryfrom.vue";
import { camelCase, toUnderline } from "@/utils";
import { inputDisableComplete } from "@/utils/other";
import Menu from "@/views/tablelist/commonTable/BtnMenu.vue";
import { checkRole } from "@/utils/permission";
import DialogTemplate from "@/views/dialogTemplate/components/index.vue";
import { queryDropDownBoxData } from "@/api/dragform/form";
import { v4 as uuidv4 } from "uuid";
import { mapState } from "vuex";
import moment from "moment";

export default {
  name: "listInfo",
  components: { Queryfrom, Menu, DialogTemplate },
  data() {
    return {
      // 详情弹窗数据
      detailShow: false,
      printDomData: "",
      // k-form-build组件渲染弹窗
      kOpen: false,
      // 新的自定义数据 start
      orderType: 0, //新的条件查询参数
      productIds: [], //货品Ids
      isEdit: false,
      formData: {
        //订单表数据
        saleNo: "", //合同号
        saleCustomNo: "", //客户编号
        saleDate: "", //销售单日期
        saleOrderEstimatedTime: "", //预计下单时间
        saleLeadTime: "", //交货周期
        saleAmounts: "", //合计金额 小写
        saleAmountInWords: "", //合计金额 大写
        salePayType: "", //支付方式
        salesman: "", //业务员
        saleLeader: "", //业务主管
        finance: "", //财务部
        production: "", //生产部
        saleApprover: "", //批准人
        customAddress: "", //客户地址
        customCountryType: "", //国家类型
        contactPerson: "", //联系人
        // 货品明细表数据
        productNo: "", //货品号
        productName: "", //货品名称
        productNumber: "", //销售数量
        productWeight: "", //销售重量kg
        productUnitPrice: "", //单价
        productAmounts: "", //金额
        sliceType: "", //切片类型
        sliceTypeLabel: "",
        colourNumberLabel: "",
        colourNumber: "", //色号
        remark: "", //备注
        // 工艺表
        craftGrid: "", //网络
        craftOil: "", //油剂
        craftPackage: "", //卷装
        craftColorFastness: "", //色牢度
        craftOther: "", //其它工艺要求
        craftMark: "", //包装/贴唛
        shippingMethod: "", //运输方式
      },
      productionOptions: [],
      customerOptions: [],
      productionTableData: [
        // {
        //   productNo: "", //货品名称
        //   productNumber: 2, //销售数量
        //   productWeight: 1, //销售重量kg
        //   productUnitPrice: 20, //单价
        //   productAmounts: 20, //金额
        //   remark: "", //备注
        // },
      ],
      rules: {
        saleDate: [
          {
            required: true,
            message: "请选择日期",
            trigger: "change",
          },
        ],
        saleCustomNo: [
          {
            required: true,
            message: "请选择客户",
            trigger: "change",
          },
        ],
        saleDate: [
          {
            required: true,
            message: "请选择预计下单时间",
            trigger: "change",
          },
        ],
        saleLeadTime: [
          {
            required: true,
            message: "请输入交货周期",
            trigger: "blur",
          },
        ],
      },

      // end
      // 绑定按钮dialog
      btnDialogVisible: false,
      // 绑定修改dialog
      groupKey: "",
      // 遮罩层
      loading: true,
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 显示统计
      showCount: true,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 用户表格数据
      tableList: [],
      // 弹出层标题
      title: "",
      // 日期范围
      dateRange: [],
      // 表单参数
      form: {},
      // cru 弹窗
      open: false,
      // excel共通导入数据
      upload: {
        // 是否显示弹出层
        open: false,
        // 弹出层标题（
        title: "",
        // 是否禁用上传
        isUploading: false,
        // 是否更新已经存在的数据
        updateSupport: 0,
        // 设置上传的请求头部
        headers: { Authorization: "Bearer " + getToken() },
        // 上传的地址
        url: process.env.VUE_APP_BASE_API1 + "common/uploadData",
      },
      // 排序方式 默认降序
      sortOrder: true,
      // 共通查询参数接受子组件的参数
      queryParams: {
        pageNum: 1, // 第几页
        pageSize: 10, // 每页大小
        orderByColumn: "", // 根据某列排序
        isAsc: "", // desc（降序）或 asc（升序）
        saleOrderOrderType: "",
        // 基本查询参数
        basicMap: {
          tableName: "drag_form",
        },
        // 当前表字段筛选参数
        queryMap: {
          // 当前查询基本参数
          // ... key : value         当前页面的筛选条件
          // 超级查询的唯一值
          queryCriteriaValue: "",
        },
      },
      // 列信息
      columns: {},
      // 当前模版信息
      templateInfo: {},
      // 查询条件
      queryFromWhere: {},
      // 当前table唯一标识
      tableKey: null,
      // 当前表名称
      tableName: null,
      //存放html代码块
      iframeUrl: "",
      //存放表单渲染数据
      jsonData: {},
      // 回显表格数据,
      defaultValue: {},
      // 统计card
      statisticList: [],
      // 样式表
      styleList: [],
      // 字典样式对象
      dictStyleObj: {},
      // 操作列 按钮数据
      excuteBtnArr: [],
      // 下拉框动态数据
      dynamicData: {},
      // 当前点击按钮的数据
      currentBtnData: {},
      // 修改选中行
      rowobj: {},
      // 该行的统计信息
      subCount: [],
      tableCount: [],
      // 弹窗新增数据
      addLists: [],
      subTableName: "",
      // 当前点击行的数据
      currentRow: {},
    };
  },

  created() {
    // 得到当前展示的table的唯一标识
    this.tableKey = this.$route.query.tableKey;
  },
  watch: {},
  async mounted() {
    await this.getDropDownData();
  },
  computed: {
    isShowExcuteCol() {
      return !this.excuteBtnArr?.every((arr) => arr.children.length == 0);
    },
    ...mapState({
      nickName: (state) => state.user.nickName,
    }),
  },
  methods: {
    // 产品名称改变
    handleProductChange(productNo, row) {
      if (!productNo) {
        return;
      }
      row.productName = this.productionOptions.find(
        (item) => item.productNo == productNo
      )?.productName;
    },
    // 订单类型改变回调
    orderTypeChange(type) {
      this.getList(false, type);
    },
    // 重置审计表单数据
    resetFormData() {
      Object.assign(this.formData, {
        //订单表数据
        saleNo: "", //合同号
        saleCustomNo: "", //客户编号
        saleDate: "", //销售单日期
        saleOrderEstimatedTime: "", //预计下单时间
        saleLeadTime: "", //交货周期
        saleAmounts: "", //合计金额 小写
        saleAmountInWords: "", //合计金额 大写
        salePayType: "", //支付方式
        salesman: "", //业务员
        saleLeader: "", //业务主管
        finance: "", //财务部
        production: "", //生产部
        saleApprover: "", //批准人
        customAddress: "", //客户地址
        customCountryType: "", //国家类型
        contactPerson: "", //联系人
        // 货品明细表数据
        productNo: "", //货品号
        productName: "", //货品名称
        productNumber: "", //销售数量
        productWeight: "", //销售重量kg
        productUnitPrice: "", //单价
        productAmounts: "", //金额
        sliceType: "", //切片类型
        sliceTypeLabel: "",
        colourNumberLabel: "",
        colourNumber: "", //色号
        remark: "", //备注
        // 工艺表
        craftGrid: "", //网络
        craftOil: "", //油剂
        craftPackage: "", //卷装
        craftColorFastness: "", //色牢度
        craftOther: "", //其它工艺要求
        craftMark: "", //包装/贴唛
        shippingMethod: "", //运输方式
      });
      this.productionTableData = [];
    },
    // 自定义的小计计算方法
    getSummaries(param) {
      const { columns, data } = param;
      console.log(columns, data);
      const sums = [];
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = "小计";
          return;
        }
        const values = data.map((item) => Number(item[column.property]));
        if (index === 4 || index === 5 || index === 6 || index === 7) {
          sums[index] = "";
        } else 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];
        } else {
          sums[index] = "N/A";
        }
      });

      return sums;
    },
    // 货品表格数据删除回调
    deleteProduct(index) {
      this.productionTableData.splice(index, 1);
    },
    // 货品表格数据新增回调
    addProduct() {
      this.productionTableData.push({
        saleProductNo: uuidv4(),
        productNo: "", //货品编号
        productName: "", //货品名称
        productNumber: "", //销售数量
        productWeight: "", //销售重量kg
        productUnitPrice: "", //单价
        productAmounts: "", //金额
        sliceType: "", //切片类型
        sliceTypeLabel: "",
        colourNumberLabel: "",
        colourNumber: "", //色号
        remark: "", //备注
      });
    },
    // 客户名称改变回调
    customChangeHandler(val) {
      // if (!val) return;
      let customData = this.customerOptions.find(
        (item) => item.customNo == val
      );
      this.formData.customAddress = customData?.customAddress || "无";
      this.formData.customCountryType = customData?.customCountryType || "无";
      this.formData.contactPerson = customData?.contactPerson || "无";
    },
    //审计新增
    async addHandler() {
      this.isEdit = false;
      await this.getDropDownData();
      this.resetFormData();
      this.title = "新增审计单";
      this.open = true;
    },
    // 获取下拉框数据
    async getDropDownData() {
      try {
        let payLoad = [
          {
            basicMap: {
              tableName: "production",
            },
          },
          {
            basicMap: {
              tableName: "customer",
            },
          },
        ];
        let res = await queryDropDownBoxData(payLoad);
        if (res.code == 200) {
          let { production, customer } = res.data.resultMap;
          this.productionOptions = production || [];
          this.customerOptions = customer || [];
        } else {
          throw Error("获取下拉框数据失败");
        }
      } catch (error) {
        console.log(error);
      }
      // 色号数据
      try {
        let payLoad = [
          {
            basicMap: {
              tableName: "materiel",
            },
            conditionMap: {
              materiel_species: ["1"],
            },
          },
        ];
        let res = await queryDropDownBoxData(payLoad);
        if (res.code == 200) {
          console.log(res.data.resultMap);
          let { materiel } = res.data.resultMap;
          this.colourNumberOptions = materiel || [];
        } else {
          throw Error("获取下拉框数据失败");
        }
      } catch (error) {
        console.log(error);
      }
      // 切片型号
      try {
        let payLoad = [
          {
            basicMap: {
              tableName: "materiel",
            },
            conditionMap: {
              materiel_species: ["6"],
            },
          },
        ];
        let res = await queryDropDownBoxData(payLoad);
        if (res.code == 200) {
          console.log(res.data.resultMap);
          let { materiel } = res.data.resultMap;
          this.sliceTypeOptions = materiel || [];
        } else {
          throw Error("获取下拉框数据失败");
        }
      } catch (error) {
        console.log(error);
      }
    },
    //
    // 获取row-key
    getRowKey(row) {
      return row[
        camelCase(this.tableName + "_" + this.templateInfo.template?.primaryKey)
      ];
    },
    /** 查询列表 */
    getList(queryParams, orderType = 0) {
      this.loading = true;
      // 序列化当前查询参数列表
      queryParams && (this.queryParams.queryMap = queryParams.queryMap);
      // 获取当前表单结构信息
      dragTableInfo({ queryMap: { tableKey: this.tableKey } })
        .then((res) => {
          // 得到当前模版信息 --- sql columns queryWhere
          this.templateInfo = res.data.resultMap;
          this.styleList = res.data.resultMap.style?.map((item) => {
            item.styleField = camelCase(
              item.styleField.replace(".", "_") || ""
            );
            return item;
          });
          // 获取操作列的按钮数据
          this.excuteBtnArr = res.data.resultMap.button;
          console.log(this.excuteBtnArr, "excuteBtnArr");
          // if (this.excuteBtnArr.length) {
          this.excuteBtnArr[0].children.push(
            {
              btnName: "编辑",
              btnType: "myEdit",
              btnIcon: "",
              btnShowCondition: "",
              children: [],
            },
            {
              btnName: "详情",
              btnType: "myDetail",
              btnIcon: "",
              btnShowCondition: "",
              children: [],
            }
          );
          // }

          this.queryParams.orderByColumn =
            res.data.resultMap.querySql.orderByColumn;
          this.sortOrder = JSON.parse(res.data.resultMap.querySql.sortOrder);
          // 根据拖拽时设置当前列表排列顺序
          this.queryParams.isAsc = this.sortOrder ? "DESC" : "ASC";
          this.tableName = this.templateInfo.template.dtTableName;
          // 得到查询条件
          this.queryFromWhere = res.data.resultMap.where;
          //  得到当前列表信息
          this.columns = this.columnsHandler(
            JSON.parse(this.templateInfo.template.dtColumnName)
          );
          console.log(this.columns, "000");
        })
        .finally((fes) => {
          if (this.templateInfo == {}) return;
          // 调用查询需要携带当前table的唯一标识
          this.queryParams.queryMap.sqlkey = this.templateInfo.template.sqlKey;
          this.queryParams.orderByColumn = camelCase(
            this.queryParams.orderByColumn || ""
          );
          // 根据sql语句查询当前表数据
          let getListFun = orderType == 0 ? unionListTableData : getTableList1;
          if (orderType != 0) {
            this.queryParams.conditionMap = {
              columnName: "order_type",
              columnValue: orderType,
            };
          }
          getListFun(this.queryParams).then(async (res) => {
            this.tableList = [];
            res.rows.forEach((item) => {
              this.tableList.push(item.resultMap);
            });
            // 驼峰转换
            let tempTableList = [];
            tempTableList = this.tableList.map((item) => {
              let kv = {};
              for (let itemKey in item) {
                kv[camelCase(itemKey)] = item[itemKey];
              }
              return kv;
            });
            // this.setDictStyleData().then(() => {
            //   this.tableList = this.setFieldStyleData(this.tableList);
            // });
            this.tableList = await this.setFieldStyleData(tempTableList);
            this.total = res.total;
            // this.$nextTick(() => {
            //   this.$refs.tableRef?.clearSelection();
            // });
            this.loading = false;
          });

          // 查询统计信息
          getStatisticList({
            queryMap: {
              tableKey: this.templateInfo.template.tableKey,
              queryCriteriaValue: this.queryParams.queryMap.queryCriteriaValue,
            },
          }).then((res) => {
            this.statisticList = res.data;
          });
        });
    },
    // 审计   提交编辑结果按钮回调
    async editConfirm() {
      this.$refs.formDataRef.validate(async (valid) => {
        if (valid) {
          let {
            //订单表数据
            saleCustomNo,
            saleDate,
            saleOrderEstimatedTime,
            saleLeadTime,
            saleAmounts,
            saleAmountInWords,
            salePayType,
            salesman,
            saleLeader,
            finance,
            production,
            saleApprover,

            // 工艺表数据
            craftGrid,
            craftOil,
            craftPackage,
            craftColorFastness,
            craftOther,
            craftMark,
            shippingMethod,
          } = this.formData;
          let saleCraftNo = this.isEdit ? this.formData.saleCraftNo : uuidv4(),
            saleNo = this.isEdit ? this.formData.saleNo : uuidv4();
          let saleProductsNo = this.productionTableData
            .map((item) => item.saleProductNo)
            .join(","); //销售单表sale_products_no字段存货品表的sale_product_no，逗号分割
          let saleValue = {
            status: 1, //新增销售单时  默认为1
            saleNo,
            saleProductsNo,
            saleOrderTechnologyNo: saleCraftNo,
            saleCustomNo,
            saleDate: moment(new Date(saleDate)).format("YYYY-MM-DD"),
            saleOrderEstimatedTime: moment(
              new Date(saleOrderEstimatedTime)
            ).format("YYYY-MM-DD"),
            saleLeadTime,
            // saleAmounts, //合计金额  小写
            saleAmountInWords,
            salePayType,
            salesman: this.nickName,
            saleLeader,
            finance,
            production,
            saleApprover,
          };
          let craftValue = {
            saleOrderNo: saleNo,
            saleCraftNo,
            craftGrid,
            craftOil,
            craftPackage,
            craftColorFastness,
            craftOther,
            craftMark,
            shippingMethod,
          };

          let saleData = {
            //订单表新增数据
            basicMap: {
              tableName: "sale_order",
            },
            // addListMap: [saleValue],
            conditionMap: {},
            commMap: {},
            btnParametersMap: {},
          };
          let craftData = {
            //工艺表新增数据
            basicMap: {
              tableName: "sale_craft",
            },
            // addListMap: [craftValue],
            conditionMap: {},
            commMap: {},
            btnParametersMap: {},
          };
          this.productionTableData.forEach((item) => {
            item.saleOrderNo = saleNo;
            delete item.id;
            delete item.productNotes;
            delete item.updateBy;
            delete item.updateById;
            delete item.updateTime;
            delete item.createBy;
            delete item.createTime;
            delete item.createById;
            delete item.delFlag;
            delete item.sliceTypeLabel;
            delete item.colourNumberLabel;
          });
          let productData = {
            //货品表新增数据
            basicMap: {
              tableName: "sale_products",
            },
            addListMap: [...this.productionTableData],
            conditionMap: {},
            commMap: {},
            btnParametersMap: {},
          };
          if (this.isEdit) {
            //修改
            Object.keys(saleValue).map((k) => {
              saleData.commMap[k] = saleValue[k];
            });
            Object.keys(craftValue).map((k) => {
              craftData.commMap[k] = craftValue[k];
            });
            saleData.conditionMap.saleNo = saleValue.saleNo;
            craftData.conditionMap.saleCraftNo = craftValue.saleCraftNo;
            // for(let i = 0;i<this.)
            let deletPayload = {
              //删除货品数据的接口
              basicMap: {
                tableName: "sale_products",
              },
              conditionMap: {
                saleProductNo: this.productIds,
              },
            };
            let delRes = { code: 200 };
            if (this.productIds.length) {
              delRes = await delTableData(deletPayload); //删除旧数据
            }

            let updateSaleRes = await batchEdit(saleData);
            let updateCraftRes = await batchEdit(craftData);
            let addProductRes = { code: 200 };
            if (productData.addListMap.length) {
              addProductRes = await addTableData(productData);
            }
            console.log(delRes, updateSaleRes, updateCraftRes, addProductRes);
            if (
              delRes?.code === 200 &&
              updateSaleRes?.code === 200 &&
              updateCraftRes?.code === 200 &&
              addProductRes?.code === 200
            ) {
              this.$message.success("修改成功");
              this.open = false;
              this.getList();
            } else {
              this.$message.error("修改失败");
            }
          } else {
            //新增
            saleData.addListMap = [saleValue];
            craftData.addListMap = [craftValue];
            let saleRes = await addTableData(saleData);
            let craftRes = await addTableData(craftData);
            let productRes = { code: 200 };
            if (productData.addListMap.length) {
              productRes = await addTableData(productData);
            }

            if (
              saleRes.code === 200 &&
              craftRes.code === 200 &&
              productRes.code === 200
            ) {
              this.$message.success("添加成功");
              this.open = false;
              this.getList();
            } else {
              this.$message.error("添加失败");
            }
          }
          // Object.keys(saleValue).map((k) => {
          //   saleData.commMap[k] = saleValue[k];
          // });
        }
      });
    },
    // 审计   编辑回调
    async handleEdit(index, row) {
      console.log(row);
      let { saleOrderSaleNo } = row;
      try {
        let payLoad = [
          {
            basicMap: {
              tableName: "sale_order",
            },
            conditionMap: {
              sale_no: [saleOrderSaleNo],
            },
          },
          {
            basicMap: {
              tableName: "sale_products",
            },
            conditionMap: {
              sale_order_no: [saleOrderSaleNo],
            },
          },
          {
            basicMap: {
              tableName: "sale_craft",
            },
            conditionMap: {
              sale_order_no: [saleOrderSaleNo],
            },
          },
        ];
        let res = await queryDropDownBoxData(payLoad);
        if (res.code == 200) {
          this.isEdit = true;
          let { sale_craft, sale_order, sale_products } = res.data.resultMap;

          Object.assign(this.formData, {
            ...sale_craft[0],
            ...sale_order[0],
          });
          let { saleDate, saleOrderEstimatedTime } = sale_order[0];
          saleDate && (this.formData.saleDate = new Date(saleDate));
          saleOrderEstimatedTime &&
            (this.formData.saleOrderEstimatedTime = saleOrderEstimatedTime);
          this.productionTableData = sale_products;
          this.productIds = sale_products.map((item) => item.saleProductNo);

          await this.getDropDownData();
          if (this.formData.saleCustomNo) {
            this.customChangeHandler(this.formData.saleCustomNo);
          }
          this.title = "编辑审计单";
          this.open = true;
        }
      } catch (error) {
        console.log(error);
      }
    },
    // 审计   批量删除回调
    async batchDelete() {
      if (!this.ids.length) return;
      try {
        await this.$confirm("是否确认删除选中的数据？", "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
        });
        let orderPayload = {
          basicMap: {
            tableName: "sale_order",
          },
          conditionMap: {
            saleNo: this.ids,
          },
        };
        let productsPayload = {
          basicMap: {
            tableName: "sale_products",
          },
          conditionMap: {
            saleOrderNo: this.ids,
          },
        };
        let craftPayload = {
          basicMap: {
            tableName: "sale_craft",
          },
          conditionMap: {
            saleOrderNo: this.ids,
          },
        };
        let orderRes = await delTableData(orderPayload);
        // let productRes = await delTableData(productsPayload);
        // let craftRes = await delTableData(craftPayload);
        if (orderRes.code == 200) {
          this.$message.success("删除成功");
          this.getList();
        } else {
          this.$message.error("删除失败");
          throw Error("删除失败");
        }
        this.ids = [];
        this.$refs.tableRef.clearSelection();
      } catch (error) {
        console.log(error);
      }
    },
    // 计算金额
    computedPrice(row) {
      let { productNumber, productUnitPrice } = row;
      row.productAmounts = Number(productNumber) * Number(productUnitPrice);
    },
    isUpperCase(char) {
      return char === char.toUpperCase();
    },
    // 下划线命名转驼峰命名
    toUnderScoreCase(str) {
      if (str === null) {
        return null;
      }
      let sb = "";
      // 前置字符是否大写
      let preCharIsUpperCase = true;
      // 当前字符是否大写
      let curreCharIsUpperCase = true;
      // 下一字符是否大写
      let nexteCharIsUpperCase = true;
      for (let i = 0; i < str.length; i++) {
        let c = str.charAt(i);
        if (i > 0) {
          preCharIsUpperCase = isUpperCase(str.charAt(i - 1));
        } else {
          preCharIsUpperCase = false;
        }

        curreCharIsUpperCase = isUpperCase(c);

        if (i < str.length - 1) {
          nexteCharIsUpperCase = isUpperCase(str.charAt(i + 1));
        }

        if (
          preCharIsUpperCase &&
          curreCharIsUpperCase &&
          !nexteCharIsUpperCase
        ) {
          sb += SEPARATOR;
        } else if (i !== 0 && !preCharIsUpperCase && curreCharIsUpperCase) {
          sb += SEPARATOR;
        }
        sb += c.toLowerCase();
      }

      return sb;
    },
    // 处理列表信息
    columnsHandler(columns) {
      let resArr = [];
      console.log(columns, 111);
      columns.forEach((item) => {
        for (const key in item) {
          let tempObj = {};
          tempObj.key = camelCase(key);
          tempObj.value = item[key];
          resArr.push(tempObj);
        }
      });
      console.log(resArr, 222);
      return resArr;
    },
    // 取消按钮
    cancel() {
      this.open = false;
      // this.reset();
    },
    // k-form-build 取消按钮
    kCancel() {
      this.kOpen = false;
      // this.reset();
    },
    // 分页查询
    pageList(row) {
      // 调用子组件-》携带子组件参数请求后台
      this.$refs.mychild.pageList(
        row == undefined
          ? {
              limit: this.queryParams.pageSize,
              page: this.queryParams.pageNum,
            }
          : row
      );
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      // this.ids = selection.map(
      //   (item) =>
      //     item[
      //       camelCase(
      //         this.tableName + "_" + this.templateInfo.template?.primaryKey
      //       )
      //     ]
      // );
      this.ids = selection.map((item) => item.saleOrderSaleNo);
      this.single = selection.length != 1;
      this.multiple = !selection.length;
    },

    // 更多操作触发
    handleCommand(command, row) {
      switch (command) {
        case "handleResetPwd":
          this.handleResetPwd(row);
          break;
        case "handleAuthRole":
          this.handleAuthRole(row);
          break;
        default:
          break;
      }
    },
    /** 新增按钮操作 */
    handleAdd(row) {
      // this.reset();
      this.defaultValue = {};
      getInfoBySqlKey(this.templateInfo.template.sqlKey).then(({ data }) => {
        if (!data || !data.dfVueTemplate) {
          this.jsonData = false;
          this.$message.error("当前表格未绑定表单!");
          return;
        }
        if (data.dfFormSql) {
          let dynamicData = JSON.parse(data.dfFormSql);
          Object.assign(this.dynamicData, dynamicData);
        }
        this.jsonData = JSON.parse(data.dfVueTemplate);
        this.open = true;
        this.title = "添加信息";
        this.form.password = this.initPassword;
        this.$nextTick(() => {
          this.$refs.addFromRef.reset();
          inputDisableComplete();
        });
      });
    },
    longestCommonSubstring(strs) {
      if (!strs || strs.includes("")) return "";
      let str1_Length = strs[0].length;
      let str_Nums = strs.length;
      let flag = 0;
      for (let i = 0; i < str1_Length && flag == 0; i++) {
        let char = strs[0][i];
        for (var j = 1; j < str_Nums; j++) {
          if (char !== strs[j][i] || i == strs[j].length) {
            return strs[1].substring(0, i);
          }
        }
      }
      return strs[0];
    },
    // 绑定dialog对话框关闭
    handleClose() {
      this.btnDialogVisible = false;
    },
    getLastUppercaseWord(text) {
      const pattern = /\b[A-Z][a-z]*\b/g;
      const matches = [...text.matchAll(pattern)];
      if (matches.length > 0) {
        const lastMatch = matches[matches.length - 1][0];
        return lastMatch;
      } else {
        return null;
      }
    },
    /** 修改按钮操作 */
    async handleUpdate(row, btnData) {
      let nameTable = this.templateInfo.template.dtTableName;
      this.rowobj = {};
      let obj = {};
      for (let key in row) {
        let modifiedTable = key
          .replace(/[A-Z]/g, (match) => `_${match}`)
          .toLowerCase();

        this.rowobj[modifiedTable] = row[key];

        let str = modifiedTable.substring(nameTable.length + 1);
        obj[str] = row[key];
      }
      // getInfoBySqlKey(this.templateInfo.template.sqlKey).then(({ data }) => {
      //   if (!data || !data.dfVueTemplate) {
      //     this.$message.error("当前表格未绑定表单!");
      //     return;
      //   }});

      // 新的修改请求
      try {
        let payLoad = {
          basicMap: {
            btnType: this.currentBtnData.btnType,
            btnKey: this.currentBtnData.btnKey,
            visible: "false",
            sqlKey: this.templateInfo.template.sqlKey,
            tableName: this.tableName,
          },
          conditionMap: {},
        };
        let primary = camelCase(
          this.tableName + "_" + this.templateInfo.template?.primaryKey
        );
        payLoad.conditionMap[this.templateInfo.template?.primaryKey] =
          row[primary];
        let res = await btnCommonApi(payLoad);
        // 判断是否绑定dialog弹窗
        if (!this.currentBtnData.btnTableFormGroupKey) {
          if (!res.data || !res.data.template) {
            this.$message.error("当前按钮未绑定表单!");
            return;
          }

          res.data.template.dfFormSql &&
            (this.dynamicData = JSON.parse(res.data.template.dfFormSql));
          this.addRealFieldName(res.data.result.resultMap);
          let resultMap = res.data.result.resultMap;

          Object.assign(this.defaultValue, resultMap);
          this.jsonData = JSON.parse(res.data.template.dfVueTemplate);
          this.kOpen = true;
          this.title = "修改信息";
          this.form.password = this.initPassword;
          this.$nextTick(() => {
            this.$refs.addFromRef.setData(res.data.result.resultMap);
          });
        } else {
          this.subTableName = res.data.result.dragTables[1].dtTableName;
          this.btnDialogVisible = true;
          this.groupKey = this.currentBtnData.btnTableFormGroupKey;
          this.$nextTick(() => {
            let refChild = this.$refs.dialogRef;
            refChild.getLists(this.groupKey);
          });

          let tablesubKey = res.data.result.dragTables[1].tableKey;

          // 查询统计信息
          getStatisticList({
            queryMap: {
              tableKey: tablesubKey,
            },
          }).then((res) => {
            this.subCount = res.data;
          });

          let prmKey = this.templateInfo.template.primaryKey;
          let pkey = prmKey.replace(/_([a-z])/g, (match, p1) =>
            p1.toUpperCase()
          );

          let data = {
            queryMap: {
              tableKey: res.data.result.dragTables[2].tableKey,
            },
          };

          let key =
            "#{" +
            this.templateInfo.template.dtTableName +
            "." +
            this.templateInfo.template.primaryKey;

          data.queryMap[key] =
            "'" + obj[this.templateInfo.template.primaryKey] + "'";

          getStatisticList(data).then((res) => {
            this.tableCount = res.data;
          });
        }

        // let fieldList = Object.keys(resultMap);
        // let tableName = this.longestCommonSubstring(fieldList);
        // fieldList.forEach((field) => {
        //   let realField = field.replace(tableName, "");
        //   realField = realField[0].toLocaleLowerCase() + realField.substring(1);
        //   resultMap[realField] = resultMap[field];
        // });
      } catch (error) {
        this.$message.error("网络异常,请稍后再试");
        console.log(error);
      }
      return;
      // getInfoBySqlKey(this.templateInfo.template.sqlKey).then(({ data }) => {
      //   if (!data || !data.dfVueTemplate) {
      //     this.$message.error("当前表格未绑定表单!");
      //     return;
      //   }
      //   // let fieldList = Object.keys(row);
      //   // let tableName = this.longestCommonSubstring(fieldList);
      //   // fieldList.forEach((field) => {
      //   //   let realField = field.replace(tableName, "");
      //   //   realField = realField[0].toLocaleLowerCase() + realField.substring(1);
      //   //   row[realField] = row[field];
      //   // });
      //   this.addRealFieldName(row);
      //   Object.assign(this.defaultValue, row);
      //   this.jsonData = JSON.parse(data.dfVueTemplate);
      //   this.open = true;
      //   this.title = "修改信息";
      //   this.form.password = this.initPassword;
      //   this.$nextTick(() => {
      //     this.$refs.addFromRef.setData(row);
      //   });
      // });
      // return;
      this.reset();
      const userId = row.userId || this.ids;
      getUser(userId).then((response) => {
        this.form = response.data;
        this.postOptions = response.posts;
        this.roleOptions = response.roles;
        this.$set(this.form, "postIds", response.postIds);
        this.$set(this.form, "roleIds", response.roleIds);
        this.open = true;
        this.title = "修改当前信息";
        this.form.password = "";
      });
    },
    // 添加真正的字段名
    addRealFieldName(row) {
      let fieldList = Object.keys(row);
      // let tableName = this.longestCommonSubstring(fieldList);
      let tableName = camelCase(this.tableName);
      fieldList.forEach((field) => {
        let realField = field.replace(tableName, "");
        realField = realField[0].toLocaleLowerCase() + realField.substring(1);
        row[realField] = row[field];
      });
    },

    /** 提交按钮 */
    submitForm: function () {
      this.$refs["form"].validate((valid) => {
        if (valid) {
          if (this.form.userId != undefined) {
            updateUser(this.form).then((response) => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            });
          } else {
            addUser(this.form).then((response) => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
            });
          }
        }
      });
    },
    /** 删除按钮操作
     *
     * 删除提示信息语句（标识）
     * */
    handleDelete(row, btnData) {
      let delIds = this.ids;
      let primary = camelCase(this.templateInfo.template?.primaryKey);
      // let realyKey=
      this.addRealFieldName(row);
      if (row[primary] != undefined && row[primary] != null) {
        delIds = [];
        delIds.push(row[primary]);
      }
      let data = {
        basicMap: {
          btnType: btnData.btnType,
          btnKey: btnData.btnKey,
          tableName: this.tableName,
        },
        conditionMap: {
          // id: delIds,
        },
        btnParametersMap: {},
      };
      if (this.currentBtnData.btnParams) {
        let btnParams =
          JSON.parse(this.currentBtnData.btnParams)?.commonFieldData || [];
        let conditionData =
          JSON.parse(this.currentBtnData.btnParams).conditionData || [];
        conditionData.forEach((item) => {
          data.conditionMap[item.fieldName.split(".")[1]] = item.fieldValue
            ? item.fieldValue
            : this.currentRow[camelCase(item.fieldName.replace(".", "_"))];
        });
        btnParams.forEach((item) => {
          data.btnParametersMap[item.fieldName.split(".")[1]] = item.fieldValue
            ? item.fieldValue
            : this.currentRow[camelCase(item.fieldName.replace(".", "_"))];
        });
      }
      // data.conditionMap[this.templateInfo.template?.primaryKey] = delIds;
      this.$modal
        .confirm('是否确认删除"' + delIds + '"的数据项？')
        .then(function () {
          // return delTableData(data);
          return btnCommonApi(data);
        })
        .then(() => {
          // 调用子组件查询方法 目的是携带上子组件中的查询参数
          this.$refs.mychild.pageList();
          this.$modal.msgSuccess("删除成功");
        })
        .catch(() => {});
    },
    // 批量删除接口
    handleBatchDelete() {
      let delIds = this.ids;
      let primary = camelCase(this.templateInfo.template?.primaryKey);
      // if (row && row[primary] != undefined && row[primary] != null) {
      //   delIds = [];
      //   delIds.push(row[primary]);
      // }
      let data = {
        basicMap: {
          tableName: this.tableName,
        },
        conditionMap: {
          // id: delIds,
        },
      };
      // if (this.currentBtnData.btnParams) {
      //   let btnParams = JSON.parse(this.currentBtnData.btnParams);
      //   btnParams.forEach((item) => {
      //     data.btnParametersMap[
      //       this.formatField(item.fieldName, camelCase(this.tableName))
      //     ] = item.fieldValue
      //       ? item.fieldValue
      //       : this.currentRow[item.fieldName];
      //   });
      // }
      data.conditionMap[this.templateInfo.template?.primaryKey] = delIds;
      this.$modal
        .confirm('是否确认删除"' + delIds + '"的数据项？')
        .then(function () {
          return delTableData(data);
          // return btnCommonApi(data);
        })
        .then(() => {
          // 调用子组件查询方法 目的是携带上子组件中的查询参数
          this.$refs.mychild.pageList();
          this.$modal.msgSuccess("删除成功");
        })
        .catch(() => {});
    },
    /** 导出按钮操作 */
    handleExport() {
      let primary = camelCase(this.templateInfo.template?.primaryKey);
      let realyKey = camelCase(this.tableName + "_" + primary);
      if (this.ids.length > 0) {
        this.queryParams["execlMap"] = [];
        this.ids.forEach((item) => {
          this.queryParams.execlMap.push(
            this.tableList.find((ttem) => {
              return ttem[realyKey] === item;
            })
          );
        });
      } else {
        this.$message.warning("请至少勾选一条导出数据");
        return;
      }
      this.queryParams.execlMap = JSON.stringify(this.queryParams.execlMap);
      this.download(
        process.env.VUE_APP_BASE_API1 + "common/export",
        {
          ...this.queryParams,
        },
        `文件名称_${new Date().getTime()}.xlsx`
      );
    },
    /** 导入按钮操作 */
    handleImport() {
      this.upload.title = "当前导入";
      this.upload.open = true;
    },
    /** 下载模板操作 */
    importTemplate() {
      this.download(
        process.env.VUE_APP_BASE_API1 +
          `common/exportTemplate?tableName=${this.tableName}&sqlkey=${this.templateInfo.template.sqlKey}`,
        {},
        `下载模版名称${new Date().getTime()}.xlsx`
      );
    },
    // 文件上传中处理
    handleFileUploadProgress(event, file, fileList) {
      this.upload.isUploading = true;
    },
    // 文件上传成功处理
    handleFileSuccess(response, file, fileList) {
      this.upload.open = false;
      this.upload.isUploading = false;
      this.$refs.upload.clearFiles();
      this.$alert(
        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
          response.msg +
          "</div>",
        "导入结果",
        { dangerouslyUseHTMLString: true }
      );
      this.$refs.mychild.pageList({
        limit: this.queryParams.pageSize,
        page: this.queryParams.pageNum,
      });
    },
    //重点在这里
    handleChange(file, fileList) {
      file.name = this.tableName + "." + file.name.split(".")[1];
      fileList.forEach((item) => {
        item.name = this.tableName + "." + file.name.split(".")[1];
      });
      let newFile = new File(
        [file],
        this.tableName + "." + file.name.split(".")[1]
      ); //创建出来也是不可编辑的file对象
    },
    // 提交上传文件
    submitFileForm() {
      this.$refs.upload.submit();
    },
    // 弹窗新增的数
    addListHandler(val) {
      this.addLists.push(...val);
    },
    // 绑定弹窗Dialog确定按钮
    btnComfirm() {
      // let data = {
      //   addListMap:[],
      //   basicMap:{
      //     btnType: 10,
      //     tableName: this.subTableName,
      //     visible: true,
      //   },
      //   commMap: {},
      //   conditionMap: {},
      // }
      // // data.addListMap =
      // btnCommonApi(data).then(res => {
      //   console.log('弹窗确定', res);
      // })
    },
    // 去掉表名 开头字母小写
    formatField(field = "", tableName) {
      let temp = field.replace(tableName, "");
      return toUnderline(temp[0].toLowerCase() + temp.slice(1));
    },
    //提交编辑结果按钮回调
    async editConfirmHandler() {
      if (this.$refs.addFromRef) {
        this.$refs.addFromRef
          .getData()
          .then(async (values) => {
            let data = {
              basicMap: {
                tableName: this.tableName,
                // btnKey: btnData.btnKey,
                btnKey: this.currentBtnData.btnKey,
              },
              addListMap: [values],
              conditionMap: {},
              commMap: {},
              btnParametersMap: {},
            };
            if (this.currentBtnData.btnParams) {
              let btnParams =
                JSON.parse(this.currentBtnData.btnParams)?.commonFieldData ||
                [];
              let conditionData =
                JSON.parse(this.currentBtnData.btnParams).conditionData || [];
              // let
              btnParams.forEach((item) => {
                data.btnParametersMap[item.fieldName.split(".")[1]] =
                  item.fieldValue
                    ? item.fieldValue
                    : this.currentRow[
                        camelCase(item.fieldName.replace(".", "_"))
                      ];
              });
              conditionData.forEach((item) => {
                data.conditionMap[item.fieldName.split(".")[1]] =
                  item.fieldValue
                    ? item.fieldValue
                    : this.currentRow[
                        camelCase(item.fieldName.replace(".", "_"))
                      ];
              });
            }
            if (Object.keys(this.defaultValue).length) {
              // data.conditionMap[this.templateInfo.template?.primaryKey] =
              //   this.defaultValue[this.templateInfo.template?.primaryKey];
              Object.keys(values).map((k) => {
                data.commMap[k] = values[k];
              });
              data.basicMap.btnType = this.currentBtnData.btnType;
              data.basicMap.visible = true;
            } else {
              data.basicMap.btnType = "INSERT";
              data.basicMap.visible = true;
            }
            try {
              let res = await btnCommonApi(data);
              if (res.code == 200) {
                this.$message.success("操作成功");
              } else {
                this.$message.error("网络异常,请稍后再试");
              }
            } catch (error) {
              console.log(error);
              this.$message.error("网络异常,请稍后再试");
            }
            this.getList();
            this.defaultValue = {};
            this.kOpen = false;
          })
          .catch((res) => {
            console.log(res);
            this.$modal.msgError("表单校验失败,请规范填写数据");
          });
      } else {
        // 没有绑定表单
        let data = {
          basicMap: {
            tableName: this.tableName,
            // btnKey: btnData.btnKey,
            btnKey: this.currentBtnData.btnKey,
            btnType: this.currentBtnData.btnType,
            visible: true,
          },
          addListMap: [],
          conditionMap: {},
          commMap: {},
          btnParametersMap: {},
        };
        if (this.currentBtnData.btnParams) {
          let btnParams =
            JSON.parse(this.currentBtnData.btnParams)?.commonFieldData || [];
          let conditionData =
            JSON.parse(this.currentBtnData.btnParams).conditionData || [];
          conditionData.forEach((item) => {
            data.conditionMap[item.fieldName.split(".")[1]] = item.fieldValue
              ? item.fieldValue
              : this.currentRow[camelCase(item.fieldName.replace(".", "_"))];
          });
          btnParams.forEach((item) => {
            data.btnParametersMap[item.fieldName.split(".")[1]] =
              item.fieldValue
                ? item.fieldValue
                : this.currentRow[camelCase(item.fieldName.replace(".", "_"))];
          });
        }
        // data.basicMap.btnType = this.currentBtnData.btnType;
        // data.basicMap.visible = true;
        try {
          let res = await btnCommonApi(data);
          if (res.code == 200) {
            this.$message.success("操作成功");
          } else {
            this.$message.error("网络异常,请稍后再试");
          }
        } catch (error) {
          console.log(error);
          this.$message.error("网络异常,请稍后再试");
        }
        this.getList();
        this.defaultValue = {};
        this.kOpen = false;
      }
    },
    // 使用提交数据类型的按钮获取数据
    tempSubBtn(getData) {
      getData()
        .then((values) => {
          console.log("验证通过", values);
        })
        .catch(() => {
          console.log("验证未通过，获取失败");
        });
    },
    // 判断是否生效行样式
    cellStyle({ row, column, rowIndex, columnIndex }) {
      let rowStyleList = this.styleList.filter((item) => item.styleType == 0);
      if (!rowStyleList.length) return "";
      let mainTableName = this.templateInfo.querySql.tableAlias; //主表名
      for (let i = 0; i < rowStyleList.length; i++) {
        let item = rowStyleList[i];
        let judgeRes = this.determineCondition(item.styleCondtion, row);
        if (judgeRes) {
          let styleCode = JSON.parse(item.styleCode);
          return `background-color:${styleCode.rowBgColor};`;
        }
      }
    },

    // 获取生效条件组结果
    determineCondition(conditionStr, row) {
      let conditionList = JSON.parse(conditionStr);
      if (!conditionList.length) return false;
      return conditionList.every((item) => this.judgeOneCondition(item, row));
    },

    // 获取单个判断条件结果
    judgeOneCondition(item, row) {
      let fullField = camelCase(item.tableName + "_" + item.fieldName);
      switch (item.condition) {
        case 1:
          return row[fullField] > item.flagValue;
        case 2:
          return row[fullField] < item.flagValue;
        case 3:
          return row[fullField] == item.flagValue;
        case 4:
          return row[fullField] >= item.flagValue;
        case 5:
          return row[fullField] <= item.flagValue;
        default:
          return true; //默认为true
      }
    },

    // 设置表格字段样式
    async setFieldStyleData(tableList) {
      console.log(JSON.parse(JSON.stringify(tableList)));
      let fieldConditionList = this.styleList.filter(
        (item) => item.styleType == 1 || item.styleType == 2
      );
      if (!fieldConditionList.length) return tableList;
      let res = await this.setDictStyleData();

      this.dictStyleObj = res.reduce((pre, item) => {
        return {
          ...pre,
          ...item,
        };
      }, {});
      // console.log("this.dictStyleObj", this.dictStyleObj);
      tableList.forEach((row) => {
        // if (!row.styleFieldObj) row.styleFieldObj = {};
        for (let i = 0; i < fieldConditionList.length; i++) {
          let item = fieldConditionList[i];
          if (item.styleType == 1) {
            //字段样式
            let judgeRes = this.determineCondition(item.styleCondtion, row);
            if (judgeRes) {
              let styleCode = JSON.parse(item.styleCode);
              if (!row.styleFieldObj) row.styleFieldObj = {};
              row.styleFieldObj[item.styleField] = {
                styleType: item.styleType,
                fieldStyleType: styleCode.fieldStyleType,
                fontColor: styleCode.fontColor,
                isTagFullBg: styleCode.isTagFullBg,
                tagType: styleCode.tagType,
              };
              // row.styleField = item.styleField; //样式生效字段
              // row.styleType = item.styleType; //0:行样式 1:字段样式 2:字典样式
              // row.fieldStyleType = styleCode.fieldStyleType; //0:文本  1:标签
              // row.fontColor = styleCode.fontColor;
              // row.isTagFullBg = styleCode.isTagFullBg; //true/false
              // row.tagType = styleCode.tagType; //string
            }
          } else {
            //字典样式
            let dicStyle = this.dictStyleObj[item.styleField]?.find((dict) => {
              return dict.dictValue == row[item.styleField];
            });
            if (dicStyle) {
              if (!row.styleFieldObj) row.styleFieldObj = {};
              row.styleFieldObj[item.styleField] = dicStyle; //设置该字段应该显示的字典样式
              row.styleFieldObj[item.styleField].styleType = 2;
            }
          }
        }
      });
      return tableList;
    },

    //设置表格字典相关数据
    setDictStyleData() {
      let fieldConditionList = this.styleList.filter(
        (item) => item.styleType == 2
      );
      if (!fieldConditionList.length) return;
      let PromiseList = fieldConditionList.map((item) => {
        return new Promise((resolve, reject) => {
          let temp = {};
          try {
            listData({
              isEnablePaging: false,
              dictType: item.styleCondtion,
            }).then((res) => {
              temp[item.styleField] = res.rows;
              resolve(temp);
            });
          } catch (error) {
            reject(error);
          }
        });
      });
      return Promise.all(PromiseList);
    },

    // 内链页面跳转
    routerHandler(btnData, type) {
      let { url, commonFieldData } = JSON.parse(btnData.btnParams);
      let tempArr = [];
      if (commonFieldData) {
        let queryArr = JSON.parse(commonFieldData);

        tempArr = queryArr.map((item) => {
          let key = this.formatField(item.fieldName, camelCase(this.tableName));
          let value = item.fieldValue
            ? item.fieldValue
            : this.currentRow[item.fieldName];
          return key + "=" + value;
        });
      }
      if (tempArr.length) {
        url += "?" + tempArr.join("&");
      }
      // let link = btnData.btnParams;
      if (type == "INNERLINK") {
        this.$router.push(url);
      } else {
        window.open("http://" + url, "_blank");
      }
    },
    async handleDetail(row) {
      this.printDomData = await this.getDetailTableString(row);
      this.detailShow = true;
      this.$nextTick(() => {
        this.$refs.detailTable.innerHTML = this.printDomData;
      });
    },
    // 切片类型改变回调
    sliceTypeChangeHandler(row) {
      let { sliceType } = row;
      if (sliceType) {
        row.sliceTypeLabel = this.sliceTypeOptions.find(
          (item) => item.materielCode == sliceType
        )?.materielName;
      }
    },
    // 色号改变回调
    colourNumberChangeHandler(row) {
      let { colourNumber } = row;
      if (colourNumber) {
        row.colourNumberLabel = this.colourNumberOptions.find(
          (item) => item.materielCode == colourNumber
        )?.materieColorNumber;
      }
    },
    // 打印回调
    detailPrintHandler() {
      document.body.innerHTML = document.getElementById("printDom").innerHTML =
        this.printDomData;
      window.print(); //打印
      window.location.reload();
      return false;
    },
    // 获取详情html字符串
    async getDetailTableString(row) {
      let { saleOrderSaleNo } = row;
      let payLoad = [
        {
          basicMap: {
            tableName: "sale_order",
          },
          conditionMap: {
            sale_no: [saleOrderSaleNo],
          },
        },
        {
          basicMap: {
            tableName: "sale_products",
          },
          conditionMap: {
            sale_order_no: [saleOrderSaleNo],
          },
        },
        {
          basicMap: {
            tableName: "sale_craft",
          },
          conditionMap: {
            sale_order_no: [saleOrderSaleNo],
          },
        },
      ];
      let res = await queryDropDownBoxData(payLoad);
      if (res.code == 200) {
        console.log(res);
        let { sale_craft, sale_order, sale_products } = res.data.resultMap;
        let {
          //订单表数据
          saleNo, //合同号
          saleCustomNo, //客户编号
          saleDate, //销售单日期
          saleOrderEstimatedTime, //预计下单时间
          saleLeadTime, //交货周期
          saleAmounts, //合计金额 小写
          saleAmountInWords, //合计金额 大写
          salePayType, //支付方式
          salesman, //业务员
          saleLeader, //业务主管
          finance, //财务部
          production, //生产部
          saleApprover, //批准人
          // customAddress, //客户地址
          // customCountryType, //国家类型
          // contactPerson, //联系人
          // 货品明细表数据
          // productNo, //货品号
          // productName, //货品名称
          // productNumber: "", //销售数量
          // productWeight: "", //销售重量kg
          // productUnitPrice: "", //单价
          // productAmounts: "", //金额
          // remark: "", //备注
          // 工艺表
          craftGrid, //网络
          craftOil, //油剂
          craftPackage, //卷装
          craftColorFastness, //色牢度
          craftOther, //其它工艺要求
          craftMark, //包装/贴唛
          shippingMethod, //运输方式
        } = { ...sale_craft[0], ...sale_order[0] };
        let customData = this.customerOptions.find(
          (item) => item.customNo == saleCustomNo
        );
        let customerName = customData ? customData.customName : "";
        let customAddress = customData?.customAddress || "无";
        let customCountryType = customData?.customCountryType || "";
        let contactPerson = customData?.contactPerson || "无";
        let printStr = `
        <table style="width:1050px; border-collapse:collapse;" border="1" cellpadding="10" align="center">
            <div style="text-align:center;font-size: 20px;">诸暨市新丝维纤维有限公司</div>
            <div style="text-align:center;">销售合同审计单</div>
            <tbody>
                <tr>
                    <td width="600px" colspan="4">合同号：${saleNo}</td>
                    <td width="450px" colspan="3">日期：${saleDate.replace(
                      "T",
                      " "
                    )}</td>
                </tr>
                <tr align="center">
                    <td width="300px" colspan="2">客户名称：</td>
                    <td width="300px" colspan="2">${customerName}</td>
                    <td width="300px" colspan="2">联系人：</td>
                    <td width="150px" colspan="1">${contactPerson}</td>
                </tr>
                <tr align="center">
                    <td width="300px" colspan="2">客户地址：</td>
                    <td width="300px" colspan="2">${customAddress}</td>
                    <td width="300px" colspan="2">客户国别：</td>
                    <td width="150px" colspan="1">${customCountryType}</td>
                </tr>
                <tr align="center">
                    <td width="300px" colspan="2">预计下单时间：</td>
                    <td width="300px" colspan="2">${saleOrderEstimatedTime.replace(
                      "T",
                      " "
                    )}</td>
                    <td width="300px" colspan="2">交货周期：</td>
                    <td >${saleLeadTime}</td>
                </tr>
                <tr align="center">
                    <td colspan="7">货品明细</td>
                </tr>
                <tr align="center">
                    <td width="150px">品名</td>
                    <td width="150px">数量/kg</td>
                    <td width="150px">单价</td>
                    <td width="150px">金额</td>
                    <td width="150px">切片型号</td>
                    <td width="150px">色号</td>
                    <td width="150px">备注</td>
                </tr>`;
        let amountTotal = 0,
          singlTotal = 0,
          moneyTotal = 0;
        for (let i = 0; i < sale_products.length; i++) {
          let item = sale_products[i];
          amountTotal += Number(item.productNumber);
          singlTotal += Number(item.productUnitPrice);
          moneyTotal += Number(item.productAmounts);
          let productData = this.productionOptions.find(
            (pro) => pro.productNo == item.productNo
          );
          console.log("item", item);
          item.sliceTypeLabel =
            this.sliceTypeOptions.find(
              (k) => k.materielCode == item.sliceType
            )?.materielName || "";
          item.colourNumberLabel = this.colourNumberOptions.find(
            (k) => k.materielCode == item.colourNumber
          )?.materieColorNumber;
          let productName = productData ? productData.productName : "";
          printStr += `<tr align="center">
                    <td>${productName}</td>
                    <td>${item.productNumber}</td>
                    <td>${item.productUnitPrice}</td>
                    <td>${item.productAmounts}</td>
                    <td>${item.sliceTypeLabel}</td>
                    <td>${item.colourNumberLabel}</td>
                    <td>${item.remark}</td>
                </tr>`;
        }
        // 计算小计
        printStr += `
        <tr align="center">
          <td>小计：</td>
          <td>${amountTotal}</td>
          <td>${singlTotal}</td>
          <td>${moneyTotal}</td>
          <td></td>
          <td></td>
          <td></td>
        </tr>
                <tr>
                    <td colspan="7">合计金额（大写）：${saleAmountInWords}</td>
                </tr>
                <tr>
                    <td colspan="7">付款方式：${salePayType}</td>
                </tr>
                <tr align="center">
                    <td colspan="7">工艺要求</td>
                </tr>
                <tr align="center">
                    <td width="150px">网络</td>
                    <td width="150px">油剂</td>
                    <td width="150px">卷装</td>
                    <td width="150px">色牢度</td>
                    <td width="150px">其他</td>
                    <td width="150px"></td>
                    <td width="150px"></td>
                </tr>
                <tr align="center">
                    <td >${craftGrid}</td>
                    <td>${craftOil}</td>
                    <td>${craftPackage}</td>
                    <td>${craftColorFastness}</td>
                    <td>${craftOther}</td>
                    <td width="150px"></td>
                    <td width="150px"></td>
                </tr>
                <tr>
                    <td colspan="7">包装/贴唛：${craftMark}</td>
                </tr>
                <tr>
                    <td colspan="7">装运方式：${shippingMethod}</td>
                </tr>
                <tr align="center">
                    <td colspan="2">业务员：</td>
                    <td colspan="2">${salesman}</td>
                    <td colspan="2">业务主管：</td>
                    <td>${saleLeader}</td>
                </tr>
                <tr align="center">
                    <td colspan="2">财务部：</td>
                    <td colspan="2">${finance}</td>
                    <td colspan="2">生产部：</td>
                    <td>${production}</td>
                </tr>
                <tr align="center">
                    <td colspan="2">批准人：</td>
                    <td colspan="2">${saleApprover}</td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
            </tbody>
        </table>
        `;
        return printStr;
        //         <tr align="center">
        //             <td colspan="2"> 2</td>
        //             <td> </td>
        //             <td> </td>
        //             <td> </td>
        //             <td> </td>
        //         </tr>
        //         <tr>
        //             <td colspan="2">小计：</td>
        //             <td></td>
        //             <td></td>
        //             <td></td>
        //             <td></td>
        //         </tr>
      }
    },

    // 操作列回调
    excuteHandler(btnData, row) {
      let { btnType, btnParams, btnFormType } = btnData;
      this.currentBtnData = btnData;
      this.currentRow = JSON.parse(JSON.stringify(row));
      console.log("btnData", btnType, btnData, row);
      // 无表单
      if (btnFormType == "noNeed") {
        this.noNeedHandler(btnData, row);
        return;
      }
      switch (btnType) {
        case "INNERLINK":
          this.routerHandler(btnData, btnType);
          break;
        case "OUTLINK":
          this.routerHandler(btnData, btnType);
          break;
        case "UPDATE":
          this.handleUpdate(row, btnData);
          break;
        case "EXECUTE":
          this.handleUpdate(row, btnData);
          break;
        case "INITIATED":
          this.handleUpdate(row, btnData);
          break;
        case "DELETE":
          this.handleDelete(row, btnData);
          break;
        case "myEdit":
          this.handleEdit("1", row);
          break;
        case "myDetail":
          this.handleDetail(row);
          break;
        default:
          break;
      }
    },
    noNeedHandler(btnData, row) {
      this.$modal
        .confirm("是否确认执行该操作？")
        .then(async () => {
          // 获取默认参数
          let data = {
            basicMap: {
              tableName: this.tableName,
              // btnKey: btnData.btnKey,
              btnKey: this.currentBtnData.btnKey,
            },
            conditionMap: {},
            commMap: {},
            btnParametersMap: {},
          };
          console.log(this.currentBtnData, this.currentRow);
          if (this.currentBtnData.btnParams) {
            let conditionData =
              JSON.parse(this.currentBtnData.btnParams).conditionData || [];
            // let
            let commonData =
              JSON.parse(this.currentBtnData.btnParams).commonFieldData || [];

            conditionData.forEach((item) => {
              data.conditionMap[item.fieldName.split(".")[1]] = item.fieldValue
                ? item.fieldValue
                : this.currentRow[camelCase(item.fieldName.replace(".", "_"))];
            });
            commonData.forEach((item) => {
              data.btnParametersMap[item.fieldName.split(".")[1]] =
                item.fieldValue
                  ? item.fieldValue
                  : this.currentRow[
                      camelCase(item.fieldName.replace(".", "_"))
                    ];
            });
          }
          data.basicMap.btnType = this.currentBtnData.btnType;
          data.basicMap.visible = true;
          try {
            let res = await btnCommonApi(data);
            if (res.code == 200) {
              this.$message.success(res.msg);
            } else {
              this.$message.error("网络异常,请稍后再试");
            }
          } catch (error) {
            console.log(error);
            this.$message.error("网络异常,请稍后再试");
          }
        })
        .then(() => {
          // 调用子组件查询方法 目的是携带上子组件中的查询参数
          this.$refs.mychild.pageList();
          // this.$modal.msgSuccess("操作成功");
        })
        .catch(() => {});
    },

    // k-form-build表单变化回调
    formChangeHandler(value, label) {
      // console.log(value, label);
    },
  },
};
</script>

<style scoped lang="scss">
::v-deep .el-dialog:not(.is-fullscreen) {
  min-width: 610px !important;
}
</style>
