duhe
2025-11-19 cc2c6975b3258cff0ab884f140667d2308601b48
其他出库单:列表、删除、审核/反审核、条码明细、查看
2个文件已添加
2个文件已修改
2055 ■■■■■ 已修改文件
src/router/index.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/permission.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/KCGL/OtherOutBill/Kf_OtherOutBillEdit.vue 1107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/KCGL/OtherOutBill/Kf_OtherOutBillList.vue 870 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js
@@ -769,6 +769,45 @@
      },
    ],
  },
  //其他出库单列表
  {
    path: "/purchase/OtherOutBill/OtherOutBillList",
    component: Layout,
    hidden: true,
    redirect: "noredirect",
    meta: {
      breadcrumb: false, // 如果设置为false,则不会在breadcrumb面包屑中显示
      activeMenu: "/purchase/OtherOutBill", // 当路由设置了该属性,则会高亮相对应的侧边栏。
    },
    children: [
      {
        path: "/purchase/OtherOutBill/OtherOutBillList",
        component: () => import("@/views/KCGL/OtherOutBill/Kf_OtherOutBillList.vue"),
        name: "OtherOutBillList",
        meta: { title: "其他出库单列表", activeMenu: "/views/KCGL/OtherOutBill" },
      },
    ],
  },
  //其他出库单
  {
    path: "/purchase/OtherOutBill/OtherOutBillEdit",
    component: Layout,
    hidden: true,
    redirect: "noredirect",
    meta: {
      breadcrumb: false, // 如果设置为false,则不会在breadcrumb面包屑中显示
      activeMenu: "/purchase/OtherOutBill", // 当路由设置了该属性,则会高亮相对应的侧边栏。
    },
    children: [
      {
        path: "/purchase/OtherOutBill/OtherOutBillEdit",
        component: () => import("@/views/KCGL/OtherOutBill/Kf_OtherOutBillEdit.vue"),
        name: "OtherOutBillEdit",
        meta: { title: "其他出库单", activeMenu: "/views/KCGL/OtherOutBill" },
      },
    ],
  },
];
// 动态路由,基于用户权限动态去加载
src/store/modules/permission.js
@@ -569,6 +569,45 @@
                  },
                ],
              },
              {
                meta: {
                  icon: "build",
                  link: null,
                  noCache: false,
                  title: "其他出库单维护",
                },
                hidden: false,
                name: "OtherOutBill",
                path: "OtherOutBill",
                redirect: "noRedirect",
                component: "Layout",
                children: [
                  {
                    meta: {
                      icon: "build",
                      link: null,
                      noCache: false,
                      title: "其他出库单列表",
                    },
                    component: () => import("@/views/KCGL/OtherOutBill/Kf_OtherOutBillList.vue"),
                    hidden: false,
                    name: "OtherOutBillList",
                    path: "OtherOutBillList",
                  },
                  {
                    meta: {
                      icon: "build",
                      link: null,
                      noCache: false,
                      title: "其他出库单",
                    },
                    component: () => import("@/views/KCGL/OtherOutBill/Kf_OtherOutBillEdit.vue"),
                    hidden: false,
                    name: "OtherOutBillEdit",
                    path: "OtherOutBillEdit",
                  },
                ],
              },
            ],
          },
          {
src/views/KCGL/OtherOutBill/Kf_OtherOutBillEdit.vue
New file
@@ -0,0 +1,1107 @@
<template>
  <div v-loading="formLoading" v-if="formShow">
    <div style=" margin-bottom: 10px; border-bottom: 1px solid #f6f6f6;">
      <el-button type="primary" @click="handleAdd(OperationType = 1)" v-if="addBtnShow">新增</el-button>
      <el-button type="primary" @click="submitForm" :disabled="subDisabled">保 存</el-button>
      <el-button type="primary" @click="set_CheckBill(0, form)">审 核</el-button>
      <el-button type="primary" @click="close">退 出</el-button>
      <!-- <el-button @click="cancel">取 消</el-button> -->
    </div>
    <div style="margin: 10px; font-size: 28px; font-weight: bold; text-align: center;">其他出库单</div>
    <el-form ref="form" :model="form" :rules="rules" label-width="80px">
      <el-tabs v-model="activeName" type="card">
        <el-tab-pane label="基本信息" name="first">
          <el-row>
            <el-col :span="6">
              <el-form-item label="单据编号" prop="HBillNo">
                <el-input v-model="form.HBillNo" placeholder="请输入单据编号" disabled="true" />
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="日期" prop="HDate">
                <el-date-picker v-model="form.HDate" type="date" placeholder="选择日期" value-format="yyyy-MM-ddT">
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="业务员" prop="HEmpName">
                <el-input v-model="form.HKeeperName" placeholder="请输入业务员" disabled>
                  <el-button slot="append" icon="el-icon-search" @click="openDataDialog(1)"></el-button>
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="部门" prop="HDeptName">
                <el-input v-model="form.HDeptName" placeholder="请输入部门" disabled>
                  <el-button slot="append" icon="el-icon-search" @click="openDataDialog(1)"></el-button>
                </el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="往来单位" prop="HSupName">
                <el-input v-model="form.HDeptName" placeholder="请输入往来单位" disabled>
                  <el-button slot="append" icon="el-icon-search" @click="openDataDialog(1)"></el-button>
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="仓库" prop="HWHName">
                <el-input v-model="form.HWHName" placeholder="请输入仓库" disabled>
                  <el-button slot="append" icon="el-icon-search" @click="openDataDialog(1)"></el-button>
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="源单类型" prop="HSourceBillType">
                <el-select v-model="form.HSourceBillType" @change="sourceBillTypeChange" >
                  <el-option v-for="(item, index) in sourceBillTypeList" :key="index" :label="item.HSourceBillTypeName" :value="item.HSourceBillType">
                </el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="选单号" prop="HMainSourceBillNo">
                <el-input v-model="form.HMainSourceBillNo" placeholder="请选择源单" disabled>
                  <el-button slot="append" icon="el-icon-search" @click="openDataDialog(1)"></el-button>
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="保管员" prop="HKeeperName">
                <el-input v-model="form.HKeeperName" placeholder="请输入保管员" disabled>
                  <el-button slot="append" icon="el-icon-search" @click="openDataDialog(1)"></el-button>
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="验收员" prop="HSecManagerName">
                <el-input v-model="form.HSecManagerName" placeholder="请输入验收员" disabled>
                  <el-button slot="append" icon="el-icon-search" @click="openDataDialog(1)"></el-button>
                </el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-form-item label="备注" prop="HRemark">
            <el-input v-model="form.HRemark" placeholder="请输入备注" />
          </el-form-item>
          <el-form-item label="组织" prop="HOrgID">
            <el-select v-model="form.HOrgID" placeholder="请选择组织" @change="organizationChange" :disabled="zzSelDis">
              <el-option v-for="(item, index) in organizationList" :key="index" :label="item.Name" :value="item.ID">
              </el-option>
            </el-select>
          </el-form-item>
          <el-row  v-show="formHideDataShow">
            <el-col :span="6">
              <el-form-item label="保管员" prop="HKeeperName">
                <el-input v-model="form.HKeeperName" placeholder="请输入保管员" disabled>
                  <el-button slot="append" icon="el-icon-search" @click="openDataDialog(1)"></el-button>
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="验收员" prop="HSecManagerName">
                <el-input v-model="form.HSecManagerName" placeholder="请输入验收员" disabled>
                  <el-button slot="append" icon="el-icon-search" @click="openDataDialog(1)"></el-button>
                </el-input>
              </el-form-item>
            </el-col>
          </el-row>
        </el-tab-pane>
        <el-tab-pane label="制单信息" name="third">
          <el-row>
            <el-col :span="6">
              <el-form-item label="制单人" prop="HMaker">
                <el-input v-model="form.HMaker" placeholder="请输入制单人" disabled />
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="修改人" prop="HUpDater">
                <el-input v-model="form.HUpDater" placeholder="请输入修改人" disabled />
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="审核人" prop="HChecker">
                <el-input v-model="form.HChecker" placeholder="请输入审核人" disabled />
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="关闭人" prop="HCloseMan">
                <el-input v-model="form.HCloseMan" placeholder="请输入关闭人" disabled />
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="制单日期" prop="HMakeDate">
                <el-date-picker v-model="form.HMakeDate" type="date" placeholder="选择制单日期" disabled>
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="修改日期" prop="HUpDateDate">
                <el-date-picker v-model="form.HUpDateDate" type="date" placeholder="选择审核日期" disabled>
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="审核日期" prop="HCheckDate">
                <el-date-picker v-model="form.HCheckDate" type="date" placeholder="选择审核日期" disabled>
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="关闭日期" prop="HCloseDate">
                <el-date-picker v-model="form.HCloseDate" type="date" placeholder="选择关闭日期" disabled>
                </el-date-picker>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="作废人" prop="HDeleteMan">
                <el-input v-model="form.HDeleteMan" placeholder="请输入作废人" disabled />
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              <el-form-item label="作废日期" prop="HDeleteDate">
                <el-date-picker v-model="form.HDeleteDate" type="date" placeholder="选择作废日期" disabled>
                </el-date-picker>
              </el-form-item>
            </el-col>
          </el-row>
        </el-tab-pane>
      </el-tabs>
      <div style="margin-bottom: 10px;">
        <el-button type="success" plain icon="el-icon-plus" @click="handleAddSysZb()" size="mini">增加一行</el-button>
        <el-button type="success" plain icon="el-icon-plus" @click="handleAddSysZb(zbIndex, 1)"
          size="mini">插入一行</el-button>
        <el-button type="success" plain icon="el-icon-plus" @click="handleCopyZbRow" size="mini">复制一行</el-button>
        <el-button type="success" plain icon="el-icon-arrow-up" @click="handleMoveRowUp(zbSelForm)"
          size="mini">上移</el-button>
        <el-button type="success" plain icon="el-icon-arrow-down" @click="handleMoveRowDown(zbSelForm)"
          size="mini">下移</el-button>
      </div>
      <el-table :data="editData" style="width: 100%" height="300" width="100%" ref="zbTable"
        @selection-change="handleTableZbEdit" :row-class-name="rowSysZbIndex" show-summary border>
        <el-table-column type="selection" width="55" align="center" />
        <el-table-column align="center" label="序号" type="index" width="80" />
        <el-table-column align="center" label="源单单号" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HSourceBillNo }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="源单类型" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HSourceBillType }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="源单主内码" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HSourceInterID }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="源单子内码" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HSourceEntryID }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="HMaterID" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HMaterID }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="物料代码" width="120">
          <template slot-scope="scope">
            <el-input v-model="scope.row.物料代码" placeholder="请输入物料代码" @keyup.native.f7="openDataDialog(3, scope.row)"
              @dblclick.native="openDataDialog(3, scope.row)" />
          </template>
        </el-table-column>
        <el-table-column align="center" label="物料名称" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.物料名称 }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="规格型号" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.规格型号 }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="HUnitID" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HUnitID }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="计量单位" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.计量单位 }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="HPropertyID" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HPropertyID }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="辅助属性" width="120">
          <template slot-scope="scope">
              <span>{{ scope.row.辅助属性 }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="HAuxPropID" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HAuxPropID }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="物料辅助属性" width="120">
          <template slot-scope="scope">
              <span>{{ scope.row.物料辅助属性 }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="换算率" width="120">
          <template slot-scope="scope">
              <span>{{ scope.row.HSecUnitRate }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="应发数量" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HQtyMust }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="实发数量" width="120">
          <template slot-scope="scope">
            <el-input-number v-model="scope.row.HQty" :min="0" style="width: 90px;"
              controls-position="right"></el-input-number>
          </template>
        </el-table-column>
        <el-table-column align="center" label="件数" width="120">
          <template slot-scope="scope">
            <el-input-number v-model="scope.row.HPieceQty" :min="0" style="width: 90px;"
              controls-position="right"></el-input-number>
          </template>
        </el-table-column>
        <el-table-column align="center" label="单价" width="120">
          <template slot-scope="scope">
            <el-input-number v-model="scope.row.HPrice" :min="0" style="width: 90px;"
              controls-position="right"></el-input-number>
          </template>
        </el-table-column>
        <el-table-column align="center" label="金额" width="120">
          <template slot-scope="scope">
            <span>{{scope.row.HMoney = scope.row.HPrice * scope.row.HQty }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="发料仓库" width="120">
          <template slot-scope="scope">
            <el-input v-model="scope.row.收料仓库" placeholder="请输入发料仓库" @keyup.native.f7="openDataDialog(2, scope.row)"
              @dblclick.native="openDataDialog(2, scope.row)" />
          </template>
        </el-table-column>
        <el-table-column align="center" label="发料仓位" width="120">
          <template slot-scope="scope">
            <el-input v-model="scope.row.收料仓位" placeholder="请输入发料仓位" @keyup.native.f7="openDataDialog(2, scope.row)"
              @dblclick.native="openDataDialog(2, scope.row)" />
          </template>
        </el-table-column>
        <el-table-column align="center" label="批次" width="120">
          <template slot-scope="scope">
            <el-input v-model="scope.row.HBatchNo" placeholder="请输入批次" />
          </template>
        </el-table-column>
        <el-table-column align="center" label="采购订单号" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HPOOrderBillNo }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="采购订单主内码" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HPOOrderInterID }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="采购订单子内码" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HPOOrderEntryID }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="销售订单号" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HPOOrderBillNo }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="销售订单主内码" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HSeOrderInterID }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="销售订单子内码" width="120">
          <template slot-scope="scope">
            <span>{{ scope.row.HSeOrderEntryID }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="备注" width="120">
          <template slot-scope="scope">
            <el-input v-model="scope.row.HRemark" placeholder="请输入备注" />
          </template>
        </el-table-column>
        <el-table-column align="center" label="操作" width="55" fixed="right">
          <template slot-scope="scope">
            <el-button type="danger" icon="el-icon-delete" size="mini" circle
              @click="handleDeleteSysZb(scope.row)"></el-button>
          </template>
        </el-table-column>
      </el-table>
    </el-form>
    <!-- 数据弹窗 -->
    <el-dialog :title="dialogTitle" :visible.sync="openData" width="1280px" append-to-body>
      <!-- 部门 -->
      <Dept @deptEmitDb="dbEmitData" @deptEmit="emitData" v-if="deptShow" />
      <!-- 仓库 -->
      <Warehouse @deptEmitDb="dbEmitData" @deptEmit="emitData" v-if="warehouseShow" />
      <!-- 物料 -->
      <Material @deptEmitDb="dbEmitData" @deptEmit="emitData" v-if="materialShow" />
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="deptClickSub">确 定</el-button>
        <el-button @click="deptClose">取 消</el-button>
      </div>
    </el-dialog>
    <el-dialog title="隐藏列设置" :visible.sync="openRowHide" width="816px" append-to-body>
      <RowSettings :colName="btResList" HModName="Kf_ProductInBillEdit" @rowEditClose="rowSetClose" v-if="rowHideShow" />
    </el-dialog>
  </div>
</template>
<script>
import axios from 'axios'
import moment from 'moment';
import RowSettings from '@/views/component/rowSettings'
import Dept from '@/views/component/dept'
import Warehouse from '@/views/component/warehouse'
import Material from '@/views/component/material'
export default {
  name: 'ProductInBill',
  components: { Dept, Warehouse, Material, RowSettings },
  props: {
    OperationType: { type: Number, },
    linterid: { type: Number, },
    HSouceBillType: { type: String, },
    propsData: { type: String, },
    copyType: { type: Number, },
  },
  data() {
    return {
      baseURL: process.env.VUE_APP_BASE_API,                                     //后端接口前缀(后端服务器IP)
      organizationList: [],                                                      //页面初始化组织列表
      sourceBillTypeList: [],                                                   //页面初始化源单类型列表
      loading: true,                                                             // 遮罩层
      addBtnShow: false,                                                         //新增按钮显示标记
      subDisabled: false,                                                        //保存按钮禁用标记
      formShow: false,                                                           //表单是否显示标记
      formHideDataShow: false,                                                   //表单隐藏内容标记
      formLoading: true,                                                         //表单加载遮罩
      zzSelDis: false,                                                           //组织下拉列表禁用标记
      rowHideShow: false,                                                        //列设置组件容器显示标记
      openRowHide: false,                                                        //列设置组件显示标记
      dialogTitle: '',                                                           //弹窗标题
      openData: false,                                                           //数据弹窗
      dialogTypeNum: null,                                                       //部门弹窗1,仓库弹窗2
      deptShow: false,                                                           //部门数据组件显示标记
      warehouseShow: false,                                                      //仓库数据组件显示标记
      materialShow: false,                                                       //物料数据组件显示标记
      stockPlaceShow: false,                                                     //仓位数据组件显示标记
      deptform: {},                                                              //弹窗选中数据
      temp: undefined,                                                           //临时变量
      btResList: [],                                                             // 列设置
      form: {},                                                                  // 表单参数
      rules: {                                                                   // 表单校验
      },
      checkedSysZb: [],
      editData: [],                                                              //子表数据
      editBtData: [],                                                            //子表表头
      activeName: 'first',
      zbIndex: null,
      zbSelForm: {},                                                             //子表选中数据,用于子表复制、上移、下移等操作
    };
  },
  created() {
    this.fetchData()
    this.fetchData_SourceBillTypeList()
    this.getdata()
  },
  beforeDestroy() {
    this.$destroy()
  },
  methods: {
    //#region 表单数据初始化
    getdata() {
      this.formShow = false
      this.formLoading = true
      if ((this.OperationType == 1 && this.copyType != 1) || (!this.OperationType && !this.copyType)) {
        this.handleAdd()
      }
      else if (this.OperationType == 3 || this.copyType == 1) {
        this.handleUpdate()
      }
    },
    //#endregion
    //#region 页面数据初始化
    reset() {
      this.form = {
        HInterID: 0,
        HBillNo: "",
        HDate: new Date(),
        HInnerBillNo: "",
        HSupID: 0,
        HSupName: "",
        HWHID: 0,
        HWHName: "",
        HSecManagerID: 0,
        HSecManagerName: "",
        HKeeperID: 0,
        HKeeperName: "",
        HDeptID: 0,
        HDeptName: "",
        HManagerID: 0,
        HMangerName: "",
        HEmpID: 0,
        HEmpName: "",
        HSourceBillType: "",
        HExplanation :"",
        HRemark: "",
        HOrgID: sessionStorage["OrganizationID"] - 0,
        HMaker: sessionStorage["HUserName"],
        HMakeDate: new Date(),
        HUpDater: "",
        HUpDateDate: "",
        HChecker: "",
        HCheckDate: "",
        HCloseMan: "",
        HCloseDate: "",
        HDeleteMan: "",
        HDeleteDate: "",
      }
      this.editData = []
      this.editBtData = []
      this.ids = []
      this.subDisabled = false
      this.addBtnShow = false
      // this.$refs.tableData.clearSelection()
      this.activeName = 'first'
      this.resetForm("form");
    },
    //#endregion
    //#region 新增按钮操作
    handleAdd() {
      this.reset()
      //新增获取单据号
      this.getHBillNo()
      if (this.OperationType == 1) {
        this.handleAddSysZb()
      }
      this.$nextTick(() => {
        this.formShow = true
        this.formLoading = false
      })
    },
    //#endregion
    //#region 编辑页面初始化
    handleUpdate() {
      this.reset()
      let rowHmainid = this.linterid
      axios.get(this.baseURL + "/Kf_OtherOutBill/Kf_OtherOutBillEdit", {
        params: { 'HInterID': rowHmainid }
      }).then(response => {
        if (response.data.count == 1) {
          var result = response.data
          var data = response.data.data[0]
          this.form.BillType = data.HSourceBillType
          if (this.copyType == 1) {
            this.getHBillNo()
          }
          else {
            this.form.HInterID = data.hmainid
            this.form.HBillNo = data.单据号
            this.form.HDate = data.日期
            this.form.HMaker = data.制单人
            this.form.HUpDater = data.修改人
            this.form.HChecker = data.审核人
            this.form.HMakeDate = data.制单日期
            this.form.HUpDateDate = data.修改日期
            this.form.HCheckDate = data.审核日期
            this.form.HCloseMan = data.关闭人
            this.form.HDeleteMan = data.作废人
            this.form.HCloseDate = data.关闭日期
            this.form.HDeleteDate = data.作废日期
          }
          this.form.HEmpID= data.HEmpID
          this.form.HEmpName= data.业务员
          this.form.HDeptName= data.部门
          this.form.HDeptID= data.HDeptID
          this.form.HSupID= data.HSupID
          this.form.HSupName= data.往来单位
          this.form.HWHID= data.HWHID
          this.form.HWHName= data.仓库
          this.form.HExplanation= data.HExplanation
          this.form.HRemark= data.表头备注
          this.form.HSecManagerID= data.HSecManagerID
          this.form.HSecManagerName= data.验收员
          this.form.HKeeperID= data.HKeeperID
          this.form.HKeeperName= data.保管员
          // this.form.HManagerID= data.HManagerID
          // this.form.HMangerName= data.主管
          // this.form.HInnerBillNo= data.内部单据号
          // //子表  赋值
          // for (var i = 0; i < result.data.length; i++) {
          //   // const data = result.data[i];
          //   // this.editData.push(result.data[i])
          // }
          if (data.状态 != '创建' && this.copyType != 1) {
            this.$modal.msgError("此条数据不是创建状态,不能修改");
            this.subDisabled = true
          }
          this.formShow = true
          this.formLoading = false
        }
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#endregion
    //#region 列设置
    handleRowHide() {
      this.rowHideShow = true
      this.openRowHide = true
    },
    rowSetClose(val) {
      this.rowHideShow = false
      this.openRowHide = val
      this.$destroy()
    },
    //#endregion
    //#region 组织值变更事件
    organizationChange(val) {
      // let options=undefined
      //  this.form=this.organizationList.find(option => option.ID === val)?.Name || '';
    },
    //#endregion
    //#region 源单类型值变更事件
    sourceBillTypeChange(val) {
    },
    //#endregion
    //#region 数据弹窗
    //#region 打开数据列表弹窗
    openDataDialog(num, row) {
      if (row) {
        this.zbIndex = row.index - 1
      }
      this.showReset()
      if (num == 1) {
        this.dialogTitle = '部门列表'
        this.deptShow = true
        this.openData = true
      } else if (num == 2) {
        this.dialogTitle = '出库仓库列表'
        this.warehouseShow = true
        this.openData = true
      } else if (num == 3) {
        this.dialogTitle = '物料列表'
        this.materialShow = true
        this.openData = true
      }else if (num == 4) {
        this.dialogTitle = '仓位列表'
        this.stockPlaceShow = true
        this.openData = true
      }
    },
    //#region 将数据弹窗全部取消加载
    showReset() {
      this.deptShow = false
      this.warehouseShow = false
      this.materialShow = false
    },
    //#endregion
    //#endregion
    //#region 弹窗数据双击返回表单赋值事件
    dbEmitData(deptRow, num) {
      if (num == 1) {
        this.form.HDeptName = deptRow.部门名称                                  //部门
        this.form.HDeptID = deptRow.HItemID
        this.form.HEmpID = deptRow.HEmpID
        this.form.HManagerName = deptRow.负责人
        this.openData = false
      }
      else if (num == 2) {                                                      //收料仓库
        this.editData[this.zbIndex].HWHID = deptRow.HItemID;
        this.editData[this.zbIndex].收料仓库 = deptRow.仓库名称;
        this.openData = false
      }
      else if (num == 4) {                                                      //仓位
        this.editData[this.zbIndex].HSPID = deptRow.HItemID;
        this.editData[this.zbIndex].仓位名称 = deptRow.仓位名称;
        this.openData = false
      }
      else if (num == 3) {                                                      //物料
        this.editData[this.zbIndex].HMaterID = deptRow.HItemID;
        this.editData[this.zbIndex].物料代码 = deptRow.物料代码;
        this.editData[this.zbIndex].物料名称 = deptRow.物料名称;
        this.editData[this.zbIndex].HUnitID = deptRow.HUnitID;
        this.editData[this.zbIndex].规格型号 = deptRow.规格型号
        this.editData[this.zbIndex].计量单位 = deptRow.计量单位名称
        this.editData[this.zbIndex].HTaxPrice = deptRow.含税成本价
        this.editData[this.zbIndex].HTaxRate = deptRow.默认税率
        this.openData = false
      }
    },
    //#endregion
    //#region 弹窗数据单击事件
    emitData(deptRow, num) {
      this.dialogTypeNum = num
      this.deptform = deptRow
    },
    //#endregion
    //#region 弹窗确定事件
    deptClickSub() {
      this.dbEmitData(this.deptform, this.dialogTypeNum)
      this.deptform = {}
    },
    //#endregion
    //#region 弹窗取消事件
    deptClose() {
      this.deptform = {}
      this.openData = false
    },
    //#endregion
    //#endregion
    //#region 工具栏按钮操作
    //#region 编辑提交保存
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          let fhck = false
          this.editData.map((item, index) => {
            if (!item.发货仓库) {
              fhck = true
              this.$modal.msgError("第" + (index + 1) + "行:发货仓库未选择!");
            }
          })
          this.$nextTick(() => {
            if (!fhck) {
              var sMainStr = JSON.stringify(this.form);
              var sSubStr = JSON.stringify(this.editData);
              var sMainSub = sMainStr + ';' + sSubStr + ';' + sessionStorage["HUserName"] + ';' + this.OperationType;
              axios({
                method: 'post',
                url: this.baseURL + "/Kf_SellOutBill/SaveSellOutBillList",
                data: {
                  'msg': sMainSub
                },
              }).then(response => {
                if (response.data.count == 1) {
                  this.subDisabled = true//设置保存按钮不可用
                  this.$modal.msgSuccess(response.data.Message);
                  this.get_MAXNum_Task(1);//设置流水号增加
                  if (response.data.Verify == "Y") //自动审核
                  {
                    this.set_CheckBill(0, this.form); //审核
                  }
                  this.addBtnShow = true
                }
              }).catch(error => {
                this.$modal.msgError("接口请求失败!");
              });
            }
          })
        }
      });
    },
    //#endregion
    //#region 反审核/审核数据
    set_CheckBill(num, form) {
      var InterID = form.hmainid || form.HInterID
      //逻辑审核方法
      axios.get(this.baseURL + "/Kf_SellOutBill/AuditKf_SellOutBill", {
        params: { "HInterID": InterID, "IsAudit": num, "CurUserName": sessionStorage["HUserName"] }
      }).then(response => {
        let result = response.data
        if (result.code == 1) {
          this.$modal.msgSuccess('操作成功');
        }
        else {
          this.$modal.msgError("错误:" + result.code + result.Message,);
        }
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#endregion
    //#region 退出按钮操作
    close() {
      this.reset()
      if (!this.OperationType && !this.copyType) {
        // this.$router.back()
        window.close()
      } else {
        this.formShow = false
        this.$emit('editClose', false)
      }
    },
    //#endregion
    //#endregion
    //#region 子表操作
    //#region 设置子表序号列
    rowSysZbIndex({ row, rowIndex }) {
      row.index = rowIndex + 1;
    },
    //#endregion
    //#region 子表新增、插入按钮操作
    handleAddSysZb(index, num) {
      if (num == 1 && !index) {
        this.$modal.msgError("请选择一行数据编辑!");
      } else {
        let obj = {
          HMaterID: 0,
          物料代码: '',
          物料名称: '',
          规格型号: '',
          HUnitID: 0,
          计量单位: '',
          HQtyMust: 1,
          HQty: 1,
          HPieceQty: 0,
          HPrice: 0,
          HTaxPrice: 0,
          HTaxRate: 0,
          HMoney: 0,
          HTaxMoney: 0,
          HWHID: 0,
          发货仓库: '',
          HRemark: '',
          HQty_Full: 0,
          HQty_Empty: 0,
          HQty_Back: 0,
          HCostPrice: 0,
          HCostMoney: 0,
          HSalePrice: 0,
          HSeOrderInterID: 741,
          HSeOrderEntryID: 18,
          HSeOrderBillNo: 'XSFH00000747',
          HSourceInterID: 741,
          HSourceEntryID: 18,
          HSourceBillNo: 'XSFH00000747',
          HSourceBillType: 1402,
          HRelationQty: 0,
          HRelationMoney: 0,
          HSPID: 0,
          HSPName: '',
          HSPGroupID: 0,
          HSPGroupName: '',
          HSCWHID: 0,
          HSCWHName: '',
          HSCSPID: 0,
          HSCSPName: '',
          HBatchNo: '',
          HPOOrderInterID: 0,
          HPOOrderEntryID: 0,
          HPOOrderBillNo: '',
          HPropertyID: 0,
          HPropertyName: '',
          HSecUnitID: 0,
          HSecUnitName: '',
          HSecUnitRate: 0,
          HEngineNum: '',
          HUnderPanNum: '',
          HLeaveFactCard: '',
          HReqBuyQty: 0,
          HReqOutQty: 0,
          HCurrentInventory: 0,
        }
        if (index) {
          this.editData.splice(index, 0, obj);
          this.$set(this.editData, index, obj)
        } else {
          this.editData.push(obj);
        }
      }
    },
    //#endregion
    //#region 子表复制按钮
    handleCopyZbRow() {
      if (!this.zbIndex) {
        this.$modal.msgError("请选择一行数据")
      } else {
        let copyRow = JSON.parse(JSON.stringify(this.zbSelForm))
        this.editData.push(copyRow);
      }
    },
    //#endregion
    //#region 子表上移按钮
    handleMoveRowUp(zbSelForm) {
      if (!this.zbIndex) {
        this.$modal.msgError("请选择一行数据")
      } else {
        if (zbSelForm.index == 1) {
          this.$modal.msgError("第一行数据无法上移");
        } else { // 确保不是第一行
          let num = zbSelForm.index - 1
          const record = this.editData.splice(num, 1)[0];
          this.editData.splice(num - 1, 0, record);
        }
      }
    },
    //#endregion
    //#region 子表下移按钮
    handleMoveRowDown(zbSelForm) {
      if (!this.zbIndex) {
        this.$modal.msgError("请选择一行数据")
      } else {
        if (zbSelForm.index == this.editData.length) {
          this.$modal.msgError("最后一行数据无法下移");
        } else { // 确保不是第一行
          let num = zbSelForm.index - 1
          const record = this.editData.splice(num, 1)[0];
          this.editData.splice(num + 1, 0, record);
        }
      }
    },
    //#endregion
    //#region 子表删除按钮
    handleDeleteSysZb(row) {
      this.checkedSysZb = []
      this.checkedSysZb.push(row.index)
      if (this.checkedSysZb.length == 0) {
        this.$modal.msgError("请先选择要删除的明细数据");
      } else {
        const editData = this.editData;
        const checkedSysZb = this.checkedSysZb;
        this.editData = editData.filter(function (item) {
          return checkedSysZb.indexOf(item.index) == -1
        });
      }
    },
    //#endregion
    //#region 子表复选框选中数据
    handleTableZbEdit(selection) {
      this.checkedSysZb = selection.map(item => item.index)
      this.zbSelForm = selection[0]
      this.zbIndex = this.checkedSysZb[0]
      if (selection.length > 1) {
        const del_row = selection.shift()
        this.$refs.zbTable.toggleRowSelection(del_row, false) //设置这一行取消选中
      }
    },
    //#endregion
    //#endregion
    //#region 通用方法。
    //#region 获取参数_传递的JSON格式参数
    getUrlVars_JSON() {
      var datajson;
      var str = this.propsData; //获取链接中传递的参数
      var arr = str.substring(str.lastIndexOf("=") + 1);
      datajson = JSON.parse(decodeURI(arr));
      return datajson;
    },
    //#endregion
    //#region 组织下拉列表数据初始化
    fetchData() {
      axios.get(this.baseURL + "/Web/GetOrganizations", {
      }).then(response => {
        if (response.data.count == 1) {
          this.organizationList = response.data.data;//组织列表
        }
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#endregion
    //#region 源单类型下拉列表数据初始化
    fetchData_SourceBillTypeList() {
      var HName = '其他出库单';
      axios.get(this.baseURL + "/Web/GetHSourceBillType", {
        params: {
          HName: HName,
          Num: 2
        }
      }).then(response => {
        if (response.data.count == 1) {
          this.sourceBillTypeList = response.data.data;//组织列表
        }
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#endregion
    //#region 获取内码、单据号
    getHBillNo() {
      axios.get(this.baseURL + "/WEBSController/GetMaxBillNoAndID_Json", {
        params: {
          HBillType: '1206'
        }
      }).then(response => {
        this.form.HBillNo = response.data.data[0].HBillNo
        this.form.HInterID = response.data.data[0].HInterID
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#endregion
    //#region 获取最大单据号
    get_MAXNum_Task(Type) {
      var sql = `exec h_p_Xt_GetMaxBillNo_SubType '1206','${this.form.HDate}',0,0,0,'${Type}','${this.form.HDeptID}'`;
      axios({
        method: 'get',
        url: this.baseURL + "/CommonModel/searchMethod",
        params: { "sql": sql, "user": sessionStorage["HUserName"], "ModRightNameCheck": "" },
      }).then(response => {
        if (response.data.count == 1) {
          this.form.HBillNo = response.data.data[0].HBillNo;
        } else {
          this.$modal.msgError(response.data.code + response.data.Message);
        }
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#endregion
    //#region 根据用户获取对应职员、部门、销售主管
    getCzyglByUser() {
      axios.get(this.baseURL + '/Xs_SeOrderBill/getCzyglByUser', {
        params: { "CurUserName": sessionStorage["HUserName"] }
      }).then(response => {
        let dataForm = response.data.data[0]
        this.form.HDeptID = dataForm.HDeptID
        this.form.HDeptName = dataForm.HDeptName
        this.form.HEmpID = dataForm.HEmpID
        this.form.HEmpName = dataForm.HEmpName
        this.form.HManagerID = dataForm.HManagerID
        this.form.HManagerName = dataForm.HManagerName
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#endregion
    //#region 根据客户获取客户余额
    getCustomerBalance(HCusID) {
      axios.get(this.baseURL + '/Xs_CusRatingChangeBill/getCustomerBalance', {
        params: { "HCusID": HCusID, 'CurUserName': sessionStorage["HUserName"] }
      }).then(response => {
        var data = response.data.data[0];
        this.form.HCusBalance = data.HCusBalance
        this.form.HCreditRating_Now = data.HCreditRating_Now
        this.form.HAvailableBalance = data.HAvailableBalance
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#endregion
    //#region 根据客户带出联系人、联系电话
    getCustomerByCusID(HCusID) {
      axios.get(this.baseURL + "/Xs_SeOrderBill/getCustomerByCusID", {
        params: {
          HCusID: HCusID
        }
      }).then(response => {
        this.form.联系人 = response.data.data[0].HLinkMan
        this.form.联系电话 = response.data.data[0].HLinkPhone
        // this.form = response.data.data[0]
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#endregion
    //#region 获取销售出库单对应的条码明细
    getBarCodeNoteBySellOutBill(rowHmainid) {
      axios.get(this.baseURL + '/Kf_SellOutBill/BarCodeNote', {
        params: { "HInterID": rowHmainid }
      }).then(response => {
        if (response.data.count == 1) {
          if (response.data.data[2].length > 0) {
            this.$modal.msgError("当前单据由扫码生成,不可以编辑!");
            this.subDisabled = true
          }
        } else { }
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#endregion
    //#region 根据主内码与子内码获取源单销售订单数据
    getPushSourceBillInit(HSourceInterID, HSourceEntryID) {
      axios.get(this.baseURL + '/Xs_SeOrderBill/loadXs_SeOrderBill_Push', {
        params: {
          "HInterID": HSourceInterID
          , "HSubID": HSourceEntryID
        },
      }).then(response => {
        let result = response.data
        if (result.code == 1) { // 说明验证成功了,
          this.temp = result.data[0];
        } else {
          this.temp = result.data;
        }
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#endregion
    //#endregion
  }
};
</script>
<style>
.xsckdBox .el-date-editor.el-input {
  width: 100%;
}
</style>
src/views/KCGL/OtherOutBill/Kf_OtherOutBillList.vue
New file
@@ -0,0 +1,870 @@
<template>
  <div style="padding: 10px;">
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="78px" class="searchBox">
      <el-form-item label="开始日期" style="margin-left: 100px;">
        <el-date-picker v-model="queryParams.sTime" type="date" placeholder="开始日期" style="width: 150px;">
        </el-date-picker>
      </el-form-item>
      <el-form-item label="结束日期">
        <el-date-picker v-model="queryParams.eTime" type="date" placeholder="结束日期" style="width: 150px;">
        </el-date-picker>
      </el-form-item>
      <el-form-item label="日期间隔">
        <el-select v-model="queryParams.HInitTimeCycle" placeholder="请选择" @change="riqiChange" style="width: 150px;">
          <el-option v-for="(item, index) in rqsgList" :key="index" :label="item.label" :value="item.value">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="单据号" prop="HBillNo">
        <el-input v-model="queryParams.HBillNo" placeholder="请输入单据号" @keyup.enter.native="handleQuery" />
      </el-form-item>
      <el-form-item label="组织" prop="HOrgID">
        <el-select v-model="queryParams.HOrgID" placeholder="请选择组织">
          <el-option v-for="(item, index) in organizationList" :key="index" :label="item.Name" :value="item.ID">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label-width="78px">
        <el-button type="primary" icon="el-icon-search" @click="handleQuery"> 搜 索</el-button>
        <el-button icon="el-icon-circle-close" @click="resetQuery">重 置</el-button>
      </el-form-item>
      <el-collapse v-model="activeSeach">
        <el-collapse-item title="更多" name="1">
          <el-card class="box-card">
            <div slot="header" class="clearfix"><span>过滤</span></div>
            <div>
              <el-row>
                <el-form-item label-width="0">
                  <el-row>
                    <el-col :span="7">
                      <el-select v-model="queryParams.ColName1" placeholder="请选择" @change="riqiChange">
                        <span v-for="(item, index) in btList" :key="index">
                          <el-option :label="item.field" :value="item.field" v-if="!item.hide"></el-option>
                        </span>
                      </el-select>
                    </el-col>
                    <el-col :span="6" style="padding: 0 10px;">
                      <el-select v-model="queryParams.Comparator1" placeholder="请选择" @change="riqiChange">
                        <el-option v-for="(item, index) in comparatorList" :key="index" :label="item.label"
                          :value="item.value"></el-option>
                      </el-select>
                    </el-col>
                    <el-col :span="11">
                      <el-input v-model="queryParams.ColContent1" placeholder="请输入" clearable
                        @keyup.enter.native="handleQuery" />
                    </el-col>
                  </el-row>
                </el-form-item>
              </el-row>
              <el-row>
                <el-form-item label-width="0">
                  <el-row>
                    <el-col :span="7">
                      <el-select v-model="queryParams.ColName2" placeholder="请选择" @change="riqiChange">
                        <span v-for="(item, index) in btList" :key="index">
                          <el-option :label="item.field" :value="item.field" v-if="!item.hide"></el-option>
                        </span>
                      </el-select>
                    </el-col>
                    <el-col :span="6" style="padding: 0 10px;">
                      <el-select v-model="queryParams.Comparator2" placeholder="请选择" @change="riqiChange">
                        <el-option v-for="(item, index) in comparatorList" :key="index" :label="item.label"
                          :value="item.value"></el-option>
                      </el-select>
                    </el-col>
                    <el-col :span="11">
                      <el-input v-model="queryParams.ColContent2" placeholder="请输入" clearable
                        @keyup.enter.native="handleQuery" />
                    </el-col>
                  </el-row>
                </el-form-item>
              </el-row>
              <el-form-item label-width="0">
                <el-row>
                  <el-col :span="7">
                    <el-select v-model="queryParams.ColName" placeholder="请选择" @change="riqiChange">
                      <el-option v-for="(item, index) in btList" :key="index" :label="item.field"
                        :value="item.field"></el-option>
                    </el-select>
                  </el-col>
                  <el-col :span="6" style="padding: 0 10px;">
                    <el-select v-model="queryParams.Comparator" placeholder="请选择" @change="riqiChange">
                      <el-option v-for="(item, index) in comparatorList" :key="index" :label="item.label"
                        :value="item.value"></el-option>
                    </el-select>
                  </el-col>
                  <el-col :span="11">
                    <el-input v-model="queryParams.ColContent" placeholder="请输入" clearable
                      @keyup.enter.native="handleQuery" />
                  </el-col>
                </el-row>
              </el-form-item>
            </div>
          </el-card>
        </el-collapse-item>
      </el-collapse>
    </el-form>
    <el-row :gutter="10" class="mb8" style="margin-top: 10px;">
      <el-col :span="1.5">
        <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAddEdit(OperationType = 1)"
          id="btn-Add">新增</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="primary" icon="el-icon-edit" size="mini" :disabled="single"
          @click="handleEdit(row = rowForm, OperationType = 3)">编辑</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="primary" icon="el-icon-document-copy" size="mini" :disabled="single"
          @click="handleEdit(row = rowForm, OperationType = 1, copyType = 1)">复制</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="primary" icon="el-icon-delete" size="mini" :disabled="single" @click="handleDelete">删除
        </el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="primary" icon="el-icon-edit-outline" size="mini" :disabled="single"
          @click="set_CheckBill(1, form = rowForm)">审核</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="primary" icon="el-icon-edit-outline" size="mini" :disabled="single"
          @click="set_CheckBill(2, form = rowForm)">返审核</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="primary" icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="primary" icon="el-icon-date" size="mini" @click="handleRowHide">隐藏列设置</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="primary" icon="el-icon-printer" size="mini" @click="get_PrintReport">打印</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="primary" icon="el-icon-printer" size="mini" :disabled="single" @click="get_BarCodeDetail">条码明细</el-button>
      </el-col>
    </el-row>
    <div class="tableBox" v-loading="loading">
      <el-table :data="tableData" ref="tableData" max-height="710" :summary-method="getSummaries"
        @selection-change="handleSelectionChange" show-summary border @row-click="handleRowClick" :row-style="rowStyle"
        @cell-dblclick="handleDblclick" v-if="tableShow">
        <template v-for="(item, index) in btList">
          <el-table-column type="selection" width="55" align="center" :fixed="item.fixed" v-if="item.type == 'checkbox'"
            :key="index" />
          <el-table-column :align="item.align" :prop="item.field" :label="item.title" :width="item.width" :key="item.id"
            v-else-if="!item.hide && item.type != 'checkbox'" :sortable="item.sort" show-overflow-tooltip
            :fixed="item.fixed">
            <template slot-scope="{row,  column }">
              <el-checkbox v-model="checked" v-if="item.type == 'checkbox'"></el-checkbox>
              <div :style="item.style">
                <span v-if="column.property.includes('日期')">{{ parseTime(row[column.property], '{y}-{m}-{d}') }}</span>
                <el-button type="text" @click="handleEdit(row, OperationType = 3)"
                  v-else-if="column.property == '单据号'">{{
                    row.单据号
                  }}</el-button>
                <span v-else>{{ row[column.label] }}</span>
              </div>
            </template>
          </el-table-column>
        </template>
      </el-table>
      <!-- 记录数、页数、当前页 -->
      <pagination v-show="total > 0" :total="total" :page.sync="page" :limit.sync="pageSize" @pagination="handleQuery" />
      <!-- 列设置 -->
      <el-dialog title="隐藏列设置" :visible.sync="openRowHide" width="816px" append-to-body>
        <RowSettings :colName="btResList" HModName="Kf_OtherOutBillList" @rowEditClose="rowSetClose"
          v-if="rowHideShow" />
      </el-dialog>
      <!-- 编辑 -->
      <el-dialog title="编辑" :visible.sync="openEdit" width="1480px" append-to-body class="xsckdBox" @close="close">
        <edit :OperationType=OperationType :linterid=this.rowForm.hmainid :HSouceBillType=this.rowForm.HSourceBillType
          :copyType="copyType" @editClose="editClose" v-if="editShow" />
      </el-dialog>
      <!-- 打印 -->
      <el-dialog title="打印模板选择" :visible.sync="openPrintList" width="800px" append-to-body>
        <PrintList :linterid=this.rowForm.hmainid :MyMsg=this.rowForm.hmainid Type='Kf_ProductInBillList'
          HModName='Kf_OtherOutBillList' @rowEditClose="rowSetClose" v-if="printListShow" />
        <!-- <div>111</div> -->
      </el-dialog>
      <!-- 条码明细 -->
      <BarCodeDetail :visible.sync="barCodeDetailShow" ref="barcodeDetail"/>
    </div>
  </div>
</template>
<script>
import axios from 'axios'
import moment from 'moment';                                              //导出组件
import RowSettings from '@/views/component/rowSettings'                   //列设置组件
import PrintList from '@/views/component/printList'                       //打印组件
import BarCodeDetail from '@/views/component/BarCodeDetail'               //条码明细组件
import Edit from '@/views/KCGL/OtherOutBill/Kf_OtherOutBillEdit.vue'      //编辑页面组件
export default {
  name: 'Kf_OtherOutBillList',
  components: { RowSettings, Edit, PrintList,BarCodeDetail },
  data() {
    return {
      baseURL: process.env.VUE_APP_BASE_API,                //后端接口前缀(后端服务器ip地址)
      OperationType: null,                                  //保存类型(新增1修改3)
      copyType: 0,                                          //复制标记。打开编辑组件时,用于区分编辑还是复制
      HInterID: null,
      rqsgList: [                                           //日期间隔下拉列表数据
        { label: '今天', value: 0 },
        { label: '近两天', value: 1 },
        { label: '近三天', value: 2 },
        { label: '近四天', value: 3 },
        { label: '近五天', value: 4 },
        { label: '近六天', value: 5 },
        { label: '近七天', value: 6 },
        { label: '近30天', value: 29 },
        { label: '近半年', value: 180 },
        { label: '近一年', value: 365 },
      ],
      organizationList: [],                                 //组织列表
      btList: [],                                           //列表表头字段列表
      comparatorList: [                                     //运算标识下拉列表
        { label: '=', value: '=' },
        { label: '>=', value: '>=' },
        { label: '>', value: '>' },
        { label: '<=', value: '<=' },
        { label: '<', value: '<' },
        { label: '<>', value: '<>' },
        { label: '包含', value: '7' },
        { label: '左包含', value: '8' },
        { label: '右包含', value: '9' },
        { label: '不包含', value: '10' },
      ],
      dialogTitle: '',                                      // 弹窗标题
      title: "",                                            // 弹出层标题
      open: false,                                          // 是否显示弹出层
      loading: true,                                        // 遮罩层
      activeSeach: '',
      // addBtnShow: false,                                    //编辑组件容器显示标记
      editShow: false,                                      //编辑组件容器显示标记
      openEdit: false,                                      //编辑组件显示标记
      openPrintList: false,                                 //打印组件容器显示标记
      printListShow: false,                                 //打印组件显示标记
      openBtnHide: false,                                   //按钮组件容器显示标记
      btnHideShow: false,                                   //按钮组件显示标记
      openRowHide: false,                                   //列设置组件显示标记
      rowHideShow: false,                                   //列设置组件容器显示标记
      barCodeDetailShow: false,                             //条码明细组件容器显示标记
      // 查询参数
      sWhere: '',                                                   // 拼接过滤条件
      queryParams: {                                                // form数据
        HBillNo: '',
        HInitTimeCycle: 29,
        sTime: '',
        eTime: '',
        HOrgID: 0,
        ColName1: '',
        ColName2: '',
        ColName: '',
        Comparator1: '',
        Comparator2: '',
        Comparator: '',
        ColContent1: '',
        ColContent2: '',
        ColContent: '',
      },
      page: 1,                                                      //page页索引
      pageSize: 0,                                                  //page页面记录数
      total: 0,                                                     //记录合计数
      tableShow: true,                                              // table显示标记
      totalNameList: [],                                            // 需要设置合计行的列数组
      tableData: [],                                                // 列表数据。用于table监听事件
      ids: [],                                                      // 选中行的hmainid数组
      single: true,                                                 // 当选中的行数不为1时为true。用于禁用相关操作
      multiple: true,                                               // 当选中的行数为0时为true。用于禁用相关操作
      lastSelectedRowIndex: null,                                   // 用于记录上次点击的行索引
      lastSelectedRow: null,                                        // 上一次选中的行
      selectedRow: null,                                            // 当前选中的行
      rowForm: {},                                                  // 当选中的只有一行时,更新数据为该选中的行。
      tyResList: [],                                                // 列表数据,用于导出
      titleData: [],                                                // 不需要显示的字段 可扩展
      btResList: [],                                                // 列表表头数据。用于列设置
      dataList: [],                                                 // option记录。用于当option数据无效时,用于列设置
    };
  },
  created() {
    this.fetchData()                //加载组织下拉列表数据
    this.riqiChange()
    this.handleQuery();
  },
  methods: {
    //#region 设置表头
    renderHeader(h, { column, $index }) {// 新建一个 span
      let span = document.createElement(span)// 设置表头名称
      span.innerText = column.label
      //临时插入 document
      document.body.appendChild(span)// 重点:获取 span 最小宽度,设置当前列,注意这里加了 20,字段较多时column.minWidth=span.getBoundingClientRect().width + 50.//移除 document 中临时的 span
      document.body.removeChild(span)
      return h(span, column.label)
    },
    //#endregion
    //#region 点击行
    handleRowClick(row, column, event) {
      this.lastSelectedRow = this.selectedRow; // 记录上一次选中的行
      this.selectedRow = row; // 记录当前选中的行
      this.lastSelectedRowIndex = this.tableData.indexOf(row);
      this.$refs.tableData.toggleRowSelection(row);
    },
    //#endregion
    //#region 选中行高亮样式
    rowStyle({ row, rowIndex }) {
      if (this.ids.includes(row.hmainid)) {
        return { "background": "#ecf5ff" }
      }
    },
    //#endregion
    //#region 双击行
    handleDblclick(row, column, cell, event) {
      this.OperationType = 3
      this.handleEdit()
    },
    //#endregion
    //#region 多选框选中数据
    handleSelectionChange(selection) {
      // this.rowForm = {}
      this.ids = selection.map(item => item.hmainid)
      this.single = selection.length != 1
      this.multiple = !selection.length
      if (!this.single) {
        this.rowForm = selection[0]
      }
    },
    //#endregion
    //#region 根据日期间隔,设置开始日期、结束日期
    riqiChange() {
      const end = new Date();
      const start = new Date();
      start.setTime(start.getTime() - 3600 * 1000 * 24 * this.queryParams.HInitTimeCycle);
      const yyyyS = start.getFullYear();
      const mmS = String(start.getMonth() + 1).padStart(2, '0'); // 月份是从0开始的
      const ddS = String(start.getDate()).padStart(2, '0');
      const yyyyE = end.getFullYear();
      const mmE = String(end.getMonth() + 1).padStart(2, '0'); // 月份是从0开始的
      const ddE = String(end.getDate()).padStart(2, '0');
      this.queryParams.sTime = yyyyS + '-' + mmS + '-' + ddS
      this.queryParams.eTime = yyyyE + '-' + mmE + '-' + ddE
    },
    //#endregion
    //#region 加载组织下拉列表数据
    fetchData() {
      axios.get(this.baseURL + "/Web/GetOrganizations", {
      }).then(response => {
        if (response.data.count == 1) {
          this.organizationList = response.data.data;//组织列表
        }
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
      this.queryParams.HOrgID = sessionStorage["OrganizationID"];
    },
    //#endregion
    //#region 重置
    resetQuery() {
      this.sWhere = ''
      this.queryParams = {
        HBillNo: '',
        HInitTimeCycle: 29,
        ColName1: '',
        ColName2: '',
        ColName: '',
        Comparator1: '',
        Comparator2: '',
        Comparator: '',
        ColContent1: '',
        ColContent2: '',
        ColContent: '',
      }
      this.riqiChange()
      this.resetForm("queryForm")
      this.handleQuery()
    },
    //#endregion
    //#region 快速过滤
    handleQuery() {
      this.sWhere = ''
      if (this.queryParams.ColName && this.queryParams.Comparator) {
        var com = "";
        switch (this.queryParams.Comparator) {
          case "7":
            com = "like'%" + this.queryParams.ColContent + "%'";
            break;
          case "8":
            com = "like'%" + this.queryParams.ColContent + "'";
            break;
          case "9":
            com = "like'" + this.queryParams.ColContent + "%'";
            break;
          case "10":
            com = "not like'%" + this.queryParams.ColContent + "%'";
            break;
          default:
            com = "" + this.queryParams.Comparator + "'" + this.queryParams.ColContent + "'";
            break;
        }
        this.sWhere += " and " + this.queryParams.ColName + " " + com;
      }
      if (this.queryParams.ColName1 && this.queryParams.Comparator1) {
        var com1 = "";
        switch (this.queryParams.Comparator1) {
          case "7":
            com1 = "like'%" + this.queryParams.ColContent1 + "%'";
            break;
          case "8":
            com1 = "like'%" + this.queryParams.ColContent1 + "'";
            break;
          case "9":
            com1 = "like'" + this.queryParams.ColContent1 + "%'";
            break;
          case "10":
            com1 = "not like'%" + this.queryParams.ColContent1 + "%'";
            break;
          default:
            com1 = "" + this.queryParams.Comparator1 + "'" + this.queryParams.ColContent1 + "'";
            break;
        }
        this.sWhere += " and " + this.queryParams.ColName1 + " " + com1;
      }
      if (this.queryParams.ColName2 && this.queryParams.Comparator2) {
        var com2 = "";
        switch (this.queryParams.Comparator2) {
          case "7":
            com2 = "like'%" + this.queryParams.ColContent2 + "%'";
            break;
          case "8":
            com2 = "like'%" + this.queryParams.ColContent2 + "'";
            break;
          case "9":
            com2 = "like'" + this.queryParams.ColContent2 + "%'";
            break;
          case "10":
            com2 = "not like'%" + this.queryParams.ColContent2 + "%'";
            break;
          default:
            com2 = "" + this.queryParams.Comparator + "'" + this.queryParams.ColContent + "'";
            break;
        }
        this.sWhere += " and " + this.queryParams.ColName2 + " " + com2;
      }
      if (this.queryParams.sTime) {
        this.queryParams.sTime = moment(this.queryParams.sTime).format('YYYY-MM-DD')
        this.queryParams.eTime = moment(this.queryParams.eTime).format('YYYY-MM-DD')
        console.log(this.queryParams.sTime, this.queryParams.eTime)
        this.sWhere += " and CONVERT(varchar(100),日期, 23) >= '" + this.queryParams.sTime + "'" + " and CONVERT(varchar(100),日期, 23) <= '" + this.queryParams.eTime + "'";
      }
      if (this.queryParams.HBillNo) {
        this.sWhere += " and 单据号 like '%" + this.queryParams.HBillNo + "%'";
      }
      if (this.queryParams.HOrgID) {
        this.sWhere += " and HOrgID = '" + this.queryParams.HOrgID + "'";
      }
      this.getList()
    },
    //#endregion
    //#region 查询
    getList() {
      this.pageSize = 50
      if (this.pageSize == 0) {
        this.pageSize = 50
      }
      this.tableShow = false
      this.loading = true
      // 列表查询
      axios.get(this.baseURL + '/Kf_OtherOutBill/GetOtherOutBillList', {
        params: {
          "sWhere": this.sWhere,
          "user": sessionStorage["HUserName"]
        },
      }).then(response => {
        this.tyResList = response.data.data//总数据
        let data1 = response.data
        let option = []
        if (data1.count == 1) {
          this.btResList = data1.list             //列表表头数据
          this.total = data1.count;
          var data = [];//列字段数据
          var col = [];
          var totalArray = [];
          //给空的数组赋值
          for (var key in data1.list) {//循序遍历数组
            data.push({ "id": data1.list[key].ColmCols, "name": data1.list[key].ColmCols, "Type": data1.list[key].ColmType });//从每个对象中提取数据
          }
          //在列表左边添加勾选框
          col.push({ type: 'checkbox', fixed: 'left', totalRowText: '合计' });
          for (var i = 0; i < data.length; i++) {//遍历data数组重的数据
            if (this.titleData.indexOf(data[i].name) > -1) {//检查data【i】.name是否在数组中  //计算列
              col.push({ field: data[i].id, title: data[i].name, align: 'center', hide: true }); //隐藏id列
            } else if (totalArray.indexOf(data[i].name) > -1 || (data[i].Type == "Decimal" || data[i].Type == "Int32")) { //计算列
              col.push({ field: data[i].id, title: data[i].name, align: 'center', sort: true, totalRow: true, width: 120 });
            }
            else {
              col.push({ field: data[i].id, title: data[i].name, align: 'center', sort: true, width: 200 });
            }
          }
          option.cols = [col]
          this.dataList = option
          option.data = data1.data;
          var result = data1.data;
          option.data = result;
          let HModName = "Kf_OtherOutBillList"
          this.DisPlay_HideColumn(HModName, sessionStorage["HUserName"], option, this.dataList);
        }
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#region 合计行数据处理
    getSummaries(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 (this.totalNameList[index].totalRow) {
          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)
          } else {
            sums[index] = '';
          }
        }
      }, 1000);
      return sums;
    },
    //#endregion
    //#endregion
    //#region 新增
    handleAddEdit() {
      this.rowForm.hmainid = 0
      this.editShow = true
      this.openEdit = true
    },
    //#endregion
    //#region 编辑
    handleEdit(row) {
      this.rowForm = row
      this.editShow = true
      this.openEdit = true
    },
    editClose(val) {
      this.open = val
      this.editShow = false
      this.openEdit = val
      this.handleQuery()
    },
    //#endregion
    //#region 删除
    handleDelete() {
      this.$modal.confirm('确认要删除吗,删除后不能恢复').then(() => {
        if (this.rowForm.状态 == "创建") {
          axios.get(this.baseURL + "Kf_OtherOutBill/DelteteGetOtherOutBill", {
            params: { 'HInterID': this.rowForm.hmainid.toString(), 'user': sessionStorage["HUserName"] }
          }).then(response => {
            if (response.data.count == 1) {
              this.handleQuery()
              this.$modal.msgSuccess("删除成功")
            } else {
              this.$modal.msgError("错误:" + result.code + result.Message);
            }
          }).catch(error => {
            this.$modal.msgError("接口请求失败!");
          });
        } else {
          this.$modal.msgError("此条数据不是创建状态,无法删除!");
        }
      }).catch(() => { })
    },
    //#endregion
    //#region 审核/反审核
    set_CheckBill(num, form) {
      var InterID = form.hmainid || form.HInterID
      //逻辑审核方法
      axios.get(this.baseURL + "/Kf_OtherOutBill/CheckKf_OtherOutBill", {
        params: { "HInterID": InterID, "Type": num, "user": sessionStorage["HUserName"] }
      }).then(response => {
        let result = response.data
        if (result.count == 1) {
          this.$modal.msgSuccess('操作成功');
          this.handleQuery();
        }
        else {
          this.$modal.msgError("错误:" + result.code + result.Message,);
        }
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#endregion
    //#region 列设置
    handleRowHide() {
      this.rowHideShow = true
      this.openRowHide = true
    },
    rowSetClose(val) {
      this.rowHideShow = false
      this.tableShow = true
      this.openRowHide = val
      this.handleQuery()
    },
    DisPlay_HideColumn(HModName, user, option, dataOption) {
      this.totalNameList = []
      axios.get(this.baseURL + '/Xt_grdAlignment_WMES/grdAlignmentWMESList', {
        params: {
          "HModName": HModName,
          "user": user,
        },
      }).then(res => {
        let data1 = res.data
        if (data1.data.length != 0) {
          var dataCol = [];//数据库查询出的列数据
          var newCols = [[]];//对应数据库列顺序col
          newCols[0].push(option.cols[0][0]);//放入第一个checkbox
          dataCol = data1.data[0].HGridString.split(',');
          //列设置列数与页面列数是否一致
          if (dataCol.length == option.cols[0].length - 1) {
            //遍历寻找列设置对应列按顺序插入
            for (var j = 0; j < option.cols[0].length - 1; j++) {
              for (var i = 0; i < option.cols[0].length - 1; i++) {
                var dataCols = dataCol[j].split('|');
                //选择与datacols相应列进行修改
                if (option.cols[0][i + 1]["field"] == dataCols[5]) {
                  //隐藏列
                  if (dataCols[1] == 1) {
                    option.cols[0][i + 1]["hide"] = true;
                  }
                  //设置列宽
                  if (dataCols[3] > 0) {
                    option.cols[0][i + 1]["width"] = dataCols[3];
                  }
                  //设置内容字体大小
                  if (data1.data[0].HFontSize != 0) {
                    option.cols[0][i + 1]["style"] = "font-size:" + data1.data[0].HFontSize + "px;";
                  } else {
                    option.cols[0][i + 1]["style"] = "font-size:100%";
                  }
                  //显示列
                  if (dataCols[1] == 0 && this.titleData.indexOf(option.cols[0][i + 1]["title"]) == -1) {
                    option.cols[0][i + 1]["hide"] = false;
                  }
                  //统计列
                  if (dataCols[6] == 1) {
                    option.cols[0][i + 1]["totalRow"] = true;
                  } else {
                    option.cols[0][i + 1]["totalRow"] = false;
                  }
                  //字体所在位置(左 居中 右)
                  switch (dataCols[2]) {
                    case "L":
                      option.cols[0][i + 1]["align"] = "left";
                      break;
                    case "M":
                      option.cols[0][i + 1]["align"] = "center";
                      break;
                    case "R":
                      option.cols[0][i + 1]["align"] = "right";
                      break;
                  }
                  //设置表格title属性显示别名
                  if (dataCols[4] != null && dataCols[4] != "") {
                    option.cols[0][i + 1]["title"] = dataCols[4];
                  }
                  newCols[0].push(option.cols[0][i + 1]);
                  break;
                }
              }
            }
            //遍历循环后判断对应列数是否一致
            if (dataCol.length == newCols[0].length - 1) {
              option.cols = newCols;
              //取消冻结列
              for (var i = 1; i < option.cols[0].length - 1; i++) {
                if (option.cols[0][i + 1]["fixed"] != null) {
                  option.cols[0][i + 1]["fixed"] = null;
                }
                else {
                  break;
                }
              }
              //冻结列
              if (data1.data[0].HFixCols != 0) {
                for (var i = 0; i < data1.data[0].HFixCols; i++) {
                  if (dataOption.cols[0].indexOf(option.cols[0][i + 1]["title"]) != -1) {
                    data1.data[0].HFixCols += 1;
                  }
                  option.cols[0][i + 1]["fixed"] = "left";
                }
              }
              //设置列排序
              for (var i = 1; i < option.cols[0].length; i++) {
                if (data1.data[0].HSortFlag == "是") {
                  option.cols[0][i]["sort"] = true;
                }
                else {
                  option.cols[0][i]["sort"] = false;
                }
              }
            }
          }
          this.btList = option.cols[0]
          this.btList.map(item => {
            if (!item.hide) {
              this.totalNameList.push(item)
            }
          })
          if (data1.data[0].HPageSize == 0) {
            this.pageSize = 50
          } else {
            this.pageSize = data1.data[0].HPageSize
          }
          this.tableData = option.data
          this.tableShow = true
          this.loading = false
        } else {
          this.btList = dataOption.cols[0]
          this.btList.map(item => {
            if (!item.hide) {
              this.totalNameList.push(item)
            }
          })
          this.tableData = dataOption.data
          this.tableShow = true
          this.loading = false
        }
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //#endregion
    //#region 按钮设置
    handleBtnHide() {
      this.btnHideShow = true
      this.openBtnHide = true
    },
    //#endregion
    //#region 导出
    handleExport() {
      const ws = this.$XLSX.utils.json_to_sheet(this.tyResList); // 将数据转换为工作表
      const wb = this.$XLSX.utils.book_new(); // 创建一个新的工作簿
      this.$XLSX.utils.book_append_sheet(wb, ws, "Sheet1"); // 将工作表添加到工作簿中,并命名为"Sheet1"
      this.$XLSX.writeFile(wb, `Kf_OtherOutBillList_${new Date().getTime()}.xlsx`); // 导出文件
    },
    //#endregion
    //#region 打印
    get_PrintReport() {
      if (this.ids.length != 1) {
        this.$modal.msgError("请选择一行数据")
      } else if (this.rowForm.状态 != "已审核" && !this.defaintOperationByCompanyName()) {
        this.$modal.msgError("打印失败!原因:单据状态不为'已审核'状态!!");
      } else {
        axios.get(this.baseURL + "/Kf_SellOutBill/CheckSellOutBill_IsExist", {
          params: { "HInterID": this.rowForm.hmainid }
        }).then(response => {
          var result = response.data
          if (result.count == 1) {
            this.printListShow = true
            this.openPrintList = true
            // this.$router.push({ path:'/printList', query: { linterid: this.rowForm.hmainid,MyMsg:this.rowForm.hmainid,Type:'Kf_SellOutBillList' }})
          } else {
            this.$modal.msgError(result.code + result.Message)
          }
        }).catch(error => {
          this.$modal.msgError("接口请求失败!");
        });
      }
      //  var content= ['../../BaseSet/SRM_OpenTmpList.html?linterid=' + data[0].hmainid.toString() + '&MyMsg=' + data[0].hmainid.toString() + '&Type=Kf_SellOutBillList', 'yes']
    },
    //#endregion
    //#region 条码明细
    get_BarCodeDetail() {
      // if (this.selectedRow.length !== 1) {
      //   this.$message.warning('请选择一行数据查看条码明细!')
      //   return
      // }
      this.barCodeDetailShow = true
      this.$nextTick(() => {
        this.$refs.barcodeDetail.open(this.rowForm)
      })
        },
    //#endregion
    //#region 退出
    close() {
      // this.reset()
      this.tableShow = true
      this.openEdit = false
      this.editShow = false
      this.handleQuery()
    },
    //#endregion
    //#region 获取公司名,根据公司进行定制化开发
    defaintOperationByCompanyName() {
      var result = false;
      axios.get(this.baseURL + '/Xt_getInfo/getCompanyName').then(response => {
        var data1 = response.data
        if (data1.count == 1) {
          if (data1.data == "水务") {
            result = true;
          }
        }
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
      return result;
    },
    //#endregion
  }
};
</script>
<style>
.xsckdBox .el-date-editor.el-input {
  width: 100%;
}
</style>