陈婷婷
2025-12-17 41839ab44e27a646bbdb8359a6fb02130129f853
src/views/component/SettleStyleDialog/index.vue
@@ -1,609 +1,955 @@
<template>
  <el-dialog
    title="选择结算方式"
    :visible.sync="dialogVisible"
    width="80%"
    :before-close="handleClose"
    append-to-body
  >
    <div class="settle-style-dialog">
      <!-- 搜索区域 -->
      <el-card class="search-card">
        <div slot="header" class="clearfix">
          <span>查询条件</span>
          <el-button
            style="float: right; padding: 3px 0"
            type="text"
            @click="toggleCollapse"
          >
            {{ collapse ? '展开' : '收起' }}
          </el-button>
        </div>
        <el-form :model="queryParams" ref="queryForm" :inline="true">
          <el-row :gutter="20">
            <el-col :span="6">
              <el-form-item label="代码">
                <el-input
                  v-model="queryParams.HNumber"
                  placeholder="请输入代码"
                  clearable
                  @keyup.enter.native="handleQuery"
                />
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="名称">
                <el-input
                  v-model="queryParams.HName"
                  placeholder="请输入名称"
                  clearable
                  @keyup.enter.native="handleQuery"
                />
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="结算方式代码">
                <el-input
                  v-model="queryParams.HNumber2"
                  placeholder="请输入结算方式代码"
                  clearable
                  style="width: 190px"
                />
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item>
                <el-button type="primary" icon="el-icon-search" @click="handleQuery">查询</el-button>
                <el-button icon="el-icon-refresh" @click="handleReset">重置</el-button>
                <el-button type="primary" @click="handleResCnz" style="margin-left: 10px">重新同步</el-button>
              </el-form-item>
            </el-col>
          </el-row>
          <!-- 高级搜索 -->
          <el-collapse-transition>
            <div v-show="!collapse">
              <el-row :gutter="20">
                <el-col :span="8">
                  <el-form-item label="过滤字段">
                    <el-select v-model="queryParams.ColName" placeholder="请选择字段" style="width: 100%">
                      <el-option value="0" label=""></el-option>
                      <el-option
                        v-for="column in visibleColumns"
                        :key="column.field"
                        :label="column.label"
                        :value="column.field"
                      />
  <div style="padding: 10px; position: relative;">
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="98px" class="searchBox">
      <el-row>
        <!-- <el-form-item label="部门代码" prop="HNumber" style="margin-left: 100px;">
          <el-input v-model="queryParams.HNumber" placeholder="请输入部门代码" @keyup.enter.native="handleQuery" />
        </el-form-item>
        <el-form-item label="部门名称" prop="HName">
          <el-input v-model="queryParams.HName" placeholder="请输入部门名称" @keyup.enter.native="handleQuery" />
        </el-form-item> -->
        <el-form-item label="组织">
          <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 type="primary" icon="el-icon-refresh" @click="resetQuery">重 置</el-button>
        </el-form-item>
      </el-row>
      <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-form-item label-width="0">
                <el-row>
                  <el-col :span="7">
                    <el-select v-model="queryParams.ColName1" placeholder="请选择">
                      <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-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="比较符">
                    <el-select v-model="queryParams.Comparator" placeholder="请选择比较符" style="width: 100%">
                      <el-option value="0" label=""></el-option>
                      <el-option label="=" value="=" />
                      <el-option label=">=" value=">=" />
                      <el-option label=">" value=">" />
                      <el-option label="<=" value="<=" />
                      <el-option label="<" value="<" />
                      <el-option label="<>" value="<>" />
                      <el-option label="包含" value="7" />
                      <el-option label="左包含" value="8" />
                      <el-option label="右包含" value="9" />
                      <el-option label="不包含" value="10" />
                  </el-col>
                  <el-col :span="6" style="padding: 0 10px;">
                    <el-select v-model="queryParams.Comparator1" placeholder="请选择">
                      <el-option v-for="(item, index) in comparatorList" :key="index" :label="item.label"
                        :value="item.value"></el-option>
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="内容">
                    <el-input
                      v-model="queryParams.ColContent"
                      placeholder="请输入内容"
                      clearable
                      @keyup.enter.native="handleQuery"
                    />
                  </el-form-item>
                </el-col>
                  </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-form-item label-width="0">
                  <el-row>
                    <el-col :span="7">
                      <el-select v-model="queryParams.ColName2" placeholder="请选择">
                        <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="请选择">
                        <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="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="请选择">
                      <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="请选择">
                      <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-collapse-transition>
          <!-- 当前过滤方案显示 -->
          <div v-if="currentFilterScheme" class="filter-scheme">
            {{ currentFilterScheme }}
          </div>
        </el-form>
      </el-card>
      <!-- 表格区域 -->
      <el-card class="table-card">
        <div slot="header" class="clearfix">
          <span>结算方式列表</span>
          <el-button-group style="float: right">
            <el-button type="primary" icon="el-icon-refresh" @click="handleRefresh">刷新</el-button>
            <el-button type="primary" icon="el-icon-close" @click="handleExit">退出</el-button>
          </el-button-group>
          </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-download" size="mini" @click="handleImport">导入</el-button>
      </el-col>
      <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-edit" size="mini" :disabled="single"
          @click="handleEdit(row = rowForm, 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" size="mini" :disabled="single"
          @click="set_CheckBill(0, form = rowForm)">审核</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="primary" icon="el-icon-edit" 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" size="mini" :disabled="single"
          @click="set_De_Stop(0, form = rowForm)">禁用</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="primary" icon="el-icon-edit" size="mini" :disabled="single"
          @click="set_De_Stop(1, 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-download" size="mini" @click="handleRowHide">隐藏列设置</el-button>
      </el-col>
    </el-row>
    <div class="tableBox" v-loading="loading">
      <el-table :data="tableData" ref="tableData" max-height="750" :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.sorderid" 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" :pageSizes="pageSizes"
        @pagination="getList" />
      <el-dialog title="隐藏列设置" :visible.sync="openRowHide" width="816px" append-to-body>
        <RowSettings :colName="btResList" :HModName="HModName" @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.HItemID :HSouceBillType=this.rowForm.HSourceBillType
          :copyType="copyType" @editCloseGy="editGyClose" v-if="editShow" />
      </el-dialog>
      <el-dialog :title="upload.title" :visible.sync="upload.open" width="1500px" append-to-body>
        <div style="margin-top:-20px ;">
          <el-button type="primary" @click="set_AddNew">导入数据</el-button>
          <el-button type="primary" @click="upload.open = false">退 出</el-button>
          <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" style="display: inline-block; margin-left: 10px;"
            :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
            :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess">
            <el-button type="primary">文件上传</el-button>
          </el-upload>
        </div>
        <el-table
          ref="table"
          :data="tableData"
          v-loading="loading"
          height="400"
          border
          highlight-current-row
          @row-dblclick="handleRowDblClick"
          @row-click="handleRowClick"
          @selection-change="handleSelectionChange"
        >
          <el-table-column type="selection" width="55" align="center" />
          <el-table-column
            v-for="column in tableColumns"
            :key="column.field"
            :prop="column.field"
            :label="column.label"
            :width="column.width"
            :align="column.align"
            :sortable="column.sortable"
            show-overflow-tooltip
          >
            <template slot-scope="{ row, column }">
              <span v-if="column.property.includes('时间') || column.property.includes('日期')">
                {{ formatDate(row[column.property]) }}
              </span>
              <span v-else>{{ row[column.property] }}</span>
        <el-table :data="uploadData" v-loading="uploadTableLoading" :row-class-name="uploadDataIndex" border
          height="550">
          <el-table-column type="index" label="序号" width="55" align="center" />
          <el-table-column label="组织代码" prop="组织代码" align="center" width="120" />
          <el-table-column label="组织名称" prop="组织名称" align="center" width="120" />
          <el-table-column label="负责人代码" prop="负责人代码" align="center" width="120" />
          <el-table-column label="负责人" prop="负责人" align="center" width="120" />
          <el-table-column label="工作中心代码" prop="工作中心代码" align="center" width="120" />
          <el-table-column label="工作中心名称" prop="工作中心名称" align="center" width="120" />
          <el-table-column label="单班工时" prop="单班工时" align="center" width="120" />
          <el-table-column label="操作" align="center">
            <template slot-scope="scope">
              <el-button size="mini" type="text" icon="el-icon-delete"
                @click="uploadDataDelete(scope.row)">删除</el-button>
            </template>
          </el-table-column>
        </el-table>
        <!-- 分页 -->
        <el-pagination
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :current-page="pagination.page"
          :page-sizes="[50, 100, 500, 5000]"
          :page-size="pagination.size"
          layout="total, sizes, prev, pager, next, jumper"
          :total="pagination.total"
          style="margin-top: 15px; text-align: right;"
        />
      </el-card>
        <pagination v-show="uploadTotal > 0" :total="uploadTotal" :page.sync="uploadPage" :limit.sync="uploadPageSize"
          :pageSizes="uploadPageSizes" @pagination="currentPage" />
      </el-dialog>
    </div>
  </el-dialog>
  </div>
</template>
<script>
import axios from 'axios'
import RowSettings from '@/views/component/rowSettings'
import Edit from '@/views/basic/gy/gyDepartmentEdit.vue'
export default {
  name: 'SettleStyleDialog',
  name: 'GyDepartment',
  components: { RowSettings, Edit },
  props: {
    visible: {
      type: Boolean,
      default: false
    }
    openPage: { type: String, },
  },
  data() {
    return {
      dialogVisible: false,
      collapse: false,
      loading: false,
      activeSeach: '',
      HModName: 'Gy_DepartmentList',
      editShow: false,
      openEdit: false,
      totalNameList: [],
      tableShow: true,
      openPrintList: false,
      printListShow: false,
      // HBillType: '1205',
      openBtnHide: false,
      btnHideShow: false,
      rowHideShow: false,
      openRowHide: false,
      copyType: 0,
      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' },
      ],
      sWhere: '',
      dialogTitle: '',
      organizationList: JSON.parse(sessionStorage.getItem('organizationList')),//组织列表
      OperationType: null,//保存类型(新增1修改3)
      HInterID: null,
      baseURL: process.env.VUE_APP_BASE_API,
      lastSelectedRowIndex: null, // 用于记录上次点击的行索引
      lastSelectedRow: null, // 上一次选中的行
      selectedRow: null, // 当前选中的行
      rowForm: {},
      activeName: 'first',
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      // 查询参数
      queryParams: {
        HNumber: '',
        HName: '',
        HNumber2: '',
        ColName: '0',
        Comparator: '0',
        ColContent: ''
        HOrgID: sessionStorage["OrganizationID"] - 0,
        HName: null,
        HNumber: null,
        Comparator1: '',
        Comparator2: '',
        Comparator: '',
        ColContent1: '',
        ColContent2: '',
        ColContent: '',
      },
      // 表格数据
      tableData: [],
      tableColumns: [],
      selectedRow: null,
      multipleSelection: [],
      // 分页
      pagination: {
        page: 1,
        size: 50,
        total: 0
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 遮罩层
      loading: true,
      tyResList: [],//列表(接口数据)
      btList: [],//表头列表显示
      btResList: [],
      tableData: [],//列表(分页显示)
      dataList: [],
      titleData: ["HItemID", "HUSEORGID", "HEmpID", "负责人"],//不需要显示的字段 可扩展
      pageSizes: [50, 100, 500, 5000, 50000],
      page: 1,
      pageSize: 0,
      total: 0,
      // 表单参数
      form: {},
      // 表单校验
      rules: {},
      upload: {
        // 是否显示弹出层
        open: false,
        // 弹出层标题
        title: "",
        // 是否禁用上传
        isUploading: false,
        // 是否更新已经存在的数据
        updateSupport: 0,
        // 设置上传的请求头部
        // headers: { Authorization: "Bearer " + getToken() },
        // 上传的地址
        url: process.env.VUE_APP_BASE_API + "/Gy_Source/Gy_Source_Excel"
      },
      // 过滤方案
      currentFilterScheme: '',
      HInterID_Choose: 0,
      // 隐藏字段
      hiddenFields: ["HItemID", "HUSEORGID", "HCREATEORGID", "父级ID"],
      baseURL: process.env.VUE_APP_BASE_URL || 'http://47.96.97.237/API/',
      user: 'admin',
      HModName: 'Gy_SettleStyle',
      HModuleName: '结算方式维护',
      Organization: '100038'
    }
      uploadData: [],
      alluploadList: [],
      uploadTableLoading: false,
      uploadPageSizes: [50, 100, 500, 5000, 50000],
      uploadPage: 1,
      uploadPageSize: 50,
      uploadTotal: 0,
    };
  },
  computed: {
    visibleColumns() {
      return this.tableColumns
        .filter(col => !this.hiddenFields.includes(col.field))
        .map(col => ({
          field: col.field,
          label: col.label
        }))
    }
  },
  watch: {
    visible: {
      immediate: true,
      handler(val) {
        this.dialogVisible = val
        if (val) {
          this.initData()
        }
      }
    },
    dialogVisible(val) {
      this.$emit('update:visible', val)
    }
  created() {
    this.getList()
  },
  methods: {
    // 初始化数据
    initData() {
      this.loadTableData()
      this.getDefaultFilterScheme()
    },
    // 加载表格数据
    async loadTableData() {
      this.loading = true
      try {
        const sWhere = this.buildQueryCondition()
        const response = await axios.get(`${this.baseURL}/Gy_SettleStyle/SettleStyleList`, {
          params: {
            sWhere: sWhere,
            user: this.user,
            Organization: this.Organization
          }
        })
        if (response.data.count === 1) {
          this.tableData = response.data.data
          console.log('结算方式数据:', this.tableData)
          this.pagination.total = response.data.total || response.data.data.length
          this.generateTableColumns(response.data.list)
        } else {
          this.$message.error(response.data.Message || '加载数据失败')
    getSummaries(param) {
      const { columns, data } = param;
      const sums = [];
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = '合计';
          return;
        }
      } catch (error) {
        console.error('加载结算方式数据失败:', error)
        this.$message.error('加载结算方式数据失败')
      } finally {
        this.loading = false
        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;
    },
    handleBtnHide() {
      this.btnHideShow = true
      this.openBtnHide = true
    },
    handleRowHide() {
      this.rowHideShow = true
      this.openRowHide = true
    },
    rowSetClose(val) {
      this.rowHideShow = false
      this.tableShow = true
      this.openRowHide = val
      this.getList()
    },
    //列表数据
    getList() {
      this.pageSize = 50
      this.tableShow = false
      this.loading = true
      if (this.pageSize == 0) {
        this.pageSize = 50
      }
      //this.sWhere += " and HUSEORGID = '" + this.queryParams.HOrgID + "'"
      //生产资料列表
      axios.get(this.baseURL + '/Gy_SettleStyle/SettleStyleList', {
        params: {
          "sWhere": this.sWhere,
          "user": sessionStorage["HUserName"],
          "Organization":sessionStorage["Organization"]
        },
      }).then(response => {
        this.tyResList = response.data.data//总数据
        let data1 = response.data
        let option = []
        if (data1.code == 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;
          var temp = "";
          for (var i = 0; i < result.length; i++) {
            if (temp != result[i]["HItemID"]) {
              temp = result[i]["HItemID"];
            } else {
              result[i].日期 = null;
              result[i].单据号 = "";
              /*result[i].状态 = "";*/
              result[i].红蓝单标记 = "";
              result[i].hsupid = "";
              result[i].客户 = "";
              result[i].HEmpID = "";
              result[i].业务员 = "";
              result[i].hmanagerid = "";
              result[i].主管 = "";
              result[i].hsecmanagerid = "";
              result[i].发货人 = "";
              result[i].hkeeperid = "";
              result[i].保管员 = "";
              result[i].HDeptID = "";
              result[i].部门 = "";
              result[i].销售方式 = "";
            }
          }
          option.data = result;
          this.DisPlay_HideColumn(this.HModName, sessionStorage["HUserName"], option, this.dataList);
        }
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    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("接口请求失败!");
      });
    },
    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)
    },
    //点击行
    handleRowClick(row, column, event) {
      this.lastSelectedRow = this.selectedRow; // 记录上一次选中的行
      this.selectedRow = row; // 记录当前选中的行
      this.lastSelectedRowIndex = this.tableData.indexOf(row);
      this.$refs.tableData.toggleRowSelection(row);
      if (this.openPage) {
        this.$emit('deptEmit', row, 5)
      }
    },
    // 构建查询条件
    buildQueryCondition() {
      let sWhere = ""
      // 基本查询条件
      if (this.queryParams.HNumber) {
        sWhere += ` and 结算方式代码 like '%${this.queryParams.HNumber}%'`
    //选中行高亮样式
    rowStyle({ row, rowIndex }) {
      if (this.ids.includes(row.HItemID)) {
        return { "background": "#ecf5ff" }
      }
      if (this.queryParams.HName) {
        sWhere += ` and 结算方式名称 like '%${this.queryParams.HName}%'`
    },
    //双击行
    handleDblclick(row, column, cell, event) {
      this.OperationType = 3
      if (this.openPage) {
        this.$emit('deptEmitDb', row, 5)
      } else {
        this.handleEdit();
      }
      // 高级过滤条件
      if (this.queryParams.ColName && this.queryParams.ColName !== "0" &&
          this.queryParams.Comparator && this.queryParams.Comparator !== "0") {
        let com = ""
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      // this.rowForm = {}
      if (this.openPage) {
        //列表单选
        if (selection.length > 1) {
          const del_row = selection.shift()
          this.$refs.tableData.toggleRowSelection(del_row, false) //设置这一行取消选中
        }
        this.rowForm = {}
        this.ids = selection.map(item => item.HItemID)
        this.rowForm = selection[0]
      } else {
        //多选
        this.ids = selection.map(item => item.HItemID)
        this.single = selection.length != 1
        this.multiple = !selection.length
        if (!this.single) {
          this.rowForm = selection[0]
        }
      }
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.sWhere = ''
      if (this.queryParams.ColName && this.queryParams.Comparator) {
        var com = "";
        switch (this.queryParams.Comparator) {
          case "7":
            com = `like '%${this.queryParams.ColContent}%'`
            break
            com = "like'%" + this.queryParams.ColContent + "%'";
            break;
          case "8":
            com = `like '%${this.queryParams.ColContent}'`
            break
            com = "like'%" + this.queryParams.ColContent + "'";
            break;
          case "9":
            com = `like '${this.queryParams.ColContent}%'`
            break
            com = "like'" + this.queryParams.ColContent + "%'";
            break;
          case "10":
            com = `not like '%${this.queryParams.ColContent}%'`
            break
            com = "not like'%" + this.queryParams.ColContent + "%'";
            break;
          default:
            com = `${this.queryParams.Comparator} '${this.queryParams.ColContent}'`
            break
            com = "" + this.queryParams.Comparator + "'" + this.queryParams.ColContent + "'";
            break;
        }
        sWhere += ` and ${this.queryParams.ColName} ${com}`
        this.sWhere += " and " + this.queryParams.ColName + " " + com;
      }
      // 添加打开类型的过滤条件
      sWhere += this.addSWhereByOpenType()
      return sWhere
      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.HNumber) {
        this.sWhere += " and 部门代码 like '%" + this.queryParams.HNumber + "%'";
      }
      if (this.queryParams.HName) {
        this.sWhere += " and 部门名称 like '%" + this.queryParams.HName + "%'";
      }
      if (this.queryParams.HOrgID) {
        this.sWhere += " and HUSEORGID = '" + this.queryParams.HOrgID + "'"
      }
      // this.sWhere += this.addSWhereByOpenType()
      // this.sWhere += this.getOrgIDByUser()
      this.clearData()
      this.getList()
    },
    // 根据打开类型添加条件
    // 判断是直接打开页面还是其它页面通过选择按钮打开,并显示相应数据
    addSWhereByOpenType() {
      // 这里可以根据需要添加特定的过滤条件
      return " and 禁用标记 = ''"
    },
    // 生成表格列
    generateTableColumns(columnList) {
      this.tableColumns = []
      // 添加选择列
      this.tableColumns.push({ type: 'selection', fixed: 'left' })
      // 动态生成列
      if (columnList && columnList.length > 0) {
        columnList.forEach(item => {
          if (!this.hiddenFields.includes(item.ColmCols)) {
            const column = {
              field: item.ColmCols,
              label: item.ColmCols,
              align: 'center',
              sortable: true,
              width: 200
            }
            // 根据字段类型设置不同的模板
            if (item.ColmType === 'DateTime') {
              column.formatter = this.formatDate
            }
            this.tableColumns.push(column)
          }
        })
      } else {
        // 默认列(如果接口没有返回列信息)
        const defaultColumns = [
          { field: '结算方式代码', label: '结算方式代码', align: 'center', width: 120 },
          { field: '结算方式名称', label: '结算方式名称', align: 'center', width: 120 },
          { field: '条码编号', label: '条码编号', align: 'center', width: 120 },
          { field: '禁用标记', label: '禁用标记', align: 'center', width: 100 },
          { field: '备注', label: '备注', align: 'center', width: 150 },
          { field: '审核人', label: '审核人', align: 'center', width: 100 },
          { field: '创建人', label: '创建人', align: 'center', width: 100 },
          { field: '创建时间', label: '创建时间', align: 'center', width: 150 }
        ]
        this.tableColumns = [...this.tableColumns, ...defaultColumns]
      //获取参数
      var sWhere = "";
      //this.openPage判断是否有值,有代表其它页面通过选择按钮打开
      if (this.openPage) {
        sWhere += " and 禁用标记 != 'Y' and ISNULL(审核人,'')  != ''"
        return sWhere;
      }
      return sWhere;
    },
    // 查询
    handleQuery() {
      this.pagination.page = 1
      this.loadTableData()
    //根据用户获取用户关联组织的过滤条件
    getOrgIDByUser() {
      var res = "";
      axios.get(this.baseURL + '/Xt_User/getOrgIDListByUser', {
        params: {
          HModName: this.HModName,
          user: sessionStorage["HUserName"],
          HOrgID: sessionStorage["OrganizationID"]
        },
      }).then(response => {
        let result = response.data
        if (result.count == 1) {
          if (result.data[0].sWhere == "1") {
            res = " and HUSEORGID = '" + sessionStorage["OrganizationID"] + "'";
          } else {
            res = result.data[0].sWhere;
          }
        }
      }).catch(error => {
        res = " and 1 = 0";
        this.$modal.msgError("接口请求失败!");
      });
      return res;
    },
    // 重置查询
    handleReset() {
    /** 重置按钮操作 */
    resetQuery() {
      this.sWhere = ''
      this.queryParams = {
        HNumber: '',
        HName: '',
        HNumber2: '',
        ColName: '0',
        Comparator: '0',
        ColContent: ''
        HOrgID: null,
        HName: null,
        HNumber: null,
        Comparator1: '',
        Comparator2: '',
        Comparator: '',
        ColContent1: '',
        ColContent2: '',
        ColContent: '',
      }
      this.pagination.page = 1
      this.loadTableData()
      this.clearData()
      this.resetForm("queryForm")
      this.getList()
    },
    // 重新同步
    async handleResCnz() {
      if (!this.queryParams.HNumber2) {
        this.$message.warning('请输入结算方式代码')
        return
      }
      try {
        const response = await axios.get(`${this.baseURL}/Gy_SettleStyle/Gy_SettleStyleViewApi`, {
          params: {
            Number: this.queryParams.HNumber2,
            Type: 'JSFS'
          }
        })
        if (response.data.count === 1) {
          this.$message.success(response.data.Message)
          this.loadTableData() // 重新加载数据
        } else {
          this.$message.error(response.data.Message)
        }
      } catch (error) {
        console.error('重新同步失败:', error)
        this.$message.error('重新同步失败')
      }
    clearData() {
      this.single = true
      this.multiple = true
      this.OperationType = 0
      this.copyType = 0
      this.ids = []
    },
    // 刷新
    handleRefresh() {
      this.loadTableData()
    //退出
    close() {
      this.tableShow = true
      this.openEdit = false
      this.editShow = false
      this.clearData()
      this.getList()
    },
    // 切换折叠状态
    toggleCollapse() {
      this.collapse = !this.collapse
    //打开新增组件弹窗
    handleAddEdit() {
      this.rowForm.HItemID = 0
      this.$nextTick(() => {
        this.openEdit = true
        this.editShow = true
      })
    },
    // 行双击事件
    handleRowDblClick(row) {
      this.selectedRow = row
      this.confirmSelection()
    },
    // 行点击事件
    handleRowClick(row) {
      this.$refs.table.toggleRowSelection(row)
      this.selectedRow = row
    },
    // 选择变化
    handleSelectionChange(selection) {
      this.multipleSelection = selection
      if (selection.length === 1) {
        this.selectedRow = selection[0]
      }
    },
    // 确认选择
    confirmSelection() {
      if (this.selectedRow) {
        this.$emit('selected', {
          HItemID: this.selectedRow.HItemID,
          结算方式名称: this.selectedRow.结算方式名称
        })
        this.dialogVisible = false
      } else {
        this.$message.warning('请选择一条数据')
      }
    },
    // 退出
    handleExit() {
      this.dialogVisible = false
    },
    // 关闭对话框
    handleClose(done) {
      this.$confirm('确认关闭?')
        .then(_ => {
          done()
        })
        .catch(_ => {})
    },
    // 分页大小改变
    handleSizeChange(size) {
      this.pagination.size = size
      this.pagination.page = 1
      this.loadTableData()
    },
    // 当前页改变
    handleCurrentChange(page) {
      this.pagination.page = page
      this.loadTableData()
    },
    // 格式化日期
    formatDate(dateString) {
      if (!dateString) return ''
      try {
        const date = new Date(dateString)
        return date.toLocaleDateString('zh-CN')
      } catch (error) {
        return dateString
      }
    },
    // 获取默认过滤方案
    async getDefaultFilterScheme() {
      try {
        const response = await axios.get(`${this.baseURL}/Xt_FastICScheme/Chooselist`, {
          params: {
            user: this.user,
            HModuleName: this.HModuleName,
            HInterID: 0,
            Type: "Default"
          }
        })
        if (response.data.count === 1) {
          const data = response.data.data[0]
          this.HInterID_Choose = data.hmainid
          this.currentFilterScheme = `当前过滤方案:${data.方案名称} (${data.备注})`
          // 应用过滤条件
          this.applyFilterConditions(response.data.data)
        }
      } catch (error) {
        console.error('获取过滤方案失败:', error)
      }
    },
    // 应用过滤条件
    applyFilterConditions(filterData) {
      filterData.forEach(item => {
        if (this.queryParams.hasOwnProperty(item.过滤字段ID)) {
          this.queryParams[item.过滤字段ID] = item.过滤值
        }
    //打开修改组件弹窗
    handleEdit() {
      this.$nextTick(() => {
        this.openEdit = true
        this.editShow = true
      })
    },
    // 保存过滤方案
    handleSaveScheme() {
      this.$message.info('保存方案功能')
    //关闭编辑页面
    editGyClose(val) {
      this.editShow = false
      this.openEdit = false
      this.clearData()
      this.getList()
    },
    // 读取过滤方案
    handleReadScheme() {
      this.$message.info('读取方案功能')
    /** 删除按钮操作 */
    handleDelete() {
      this.$modal.confirm('确认要删除吗,删除后不能恢复').then(() => {
        if (!this.rowForm.审核人) {
          axios.get(this.baseURL + "DeltetGy_Department", {
            params: { 'HItemID': this.rowForm.HItemID, 'user': sessionStorage["HUserName"] }
          }).then(response => {
            if (response.data.count == 1) {
              this.getList()
              this.$modal.msgSuccess("删除成功")
            } else {
              this.$modal.msgError("错误:" + result.code + result.Message);
            }
          }).catch(error => {
            this.$modal.msgError("接口请求失败!");
          });
        } else {
          this.$modal.msgError("此条数据不是创建状态,无法删除!");
        }
      }).catch(() => { })
    },
    // 列设置
    handleColumnSetting() {
      this.$message.info('列设置功能')
    }
    // 反审核/审核数据
    set_CheckBill(num, form) {
      var InterID = form.HItemID || form.HInterID
      //逻辑审核方法
      axios.get(this.baseURL + "/Gy_Department/AuditGy_Department", {
        params: { "HInterID": InterID, "IsAudit": num, "CurUserName": sessionStorage["HUserName"] }
      }).then(response => {
        let result = response.data
        if (result.code == 1) {
          this.$modal.msgSuccess('操作成功');
          this.getList();
        }
        else {
          this.$modal.msgError("错误:" + result.code + result.Message,);
        }
        this.clearData()
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    // 反禁用/禁用数据
    set_De_Stop(num, form) {
      var InterID = form.HItemID.toString() || form.HInterID.toString()
      //逻辑审核方法
      axios.get(this.baseURL + "/Gy_Department/StopGy_Department", {
        params: { "HInterID": InterID, "IsStop": num, "CurUserName": sessionStorage["HUserName"] }
      }).then(response => {
        let result = response.data
        if (result.code == 1) {
          this.$modal.msgSuccess('操作成功');
          this.getList();
        }
        else {
          this.$modal.msgError("错误:" + result.code + result.Message,);
        }
        this.clearData()
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    //导出
    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, `gySource_${new Date().getTime()}.xlsx`); // 导出文件
    },
    handleImport() {
      this.uploadData = []
      this.upload.isUploading = false
      this.upload.title = "导入";
      this.upload.open = true;
    },
    // 文件上传中处理
    handleFileUploadProgress(event, file, fileList) {
      this.upload.isUploading = true;
      this.uploadTableLoading = true
    },
    // 文件上传成功处理
    handleFileSuccess(response, file, fileList) {
      // this.upload.open = false;
      this.upload.isUploading = true;
      this.$refs.upload.clearFiles();
      if (response.code == 1) {
        this.alluploadList = response.data
        this.uploadData = this.getPage(this.uploadPage, this.alluploadList)
        this.uploadTotal = this.alluploadList.length
        this.uploadTableLoading = false
        // this.set_AddNew(response.data)
      } else {
        this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.Message + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
      }
    },
    // 提交上传文件
    submitFileForm() {
      this.$refs.upload.submit();
    },
    set_AddNew() {
      var num = [];
      for (var i = 0; i < this.uploadData.length; i++) {
        if (this.uploadData[i] != "") {
          num.push(this.uploadData[i])
        }
      }
      var sSubStr = JSON.stringify(num);
      var sMainSub = sSubStr + '&和' + sessionStorage["HUserName"];
      axios({
        method: 'post',
        url: this.baseURL + "/Gy_Source/Gy_Source_btnSave",
        data: {
          'sMainSub': sMainSub
        },
      }).then(res => {
        this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + res.data.Message + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
        this.upload.open = false
        this.getList()
      }).catch(error => {
        this.$modal.msgError("接口请求失败!");
      });
    },
    uploadDataIndex({ row, rowIndex }) {
      row.index = rowIndex + 1;
    },
    uploadDataDelete(row) {
      this.$modal.confirm('确认要删除吗,删除后不能恢复').then(() => {
        const deleteList = [row.index]
        const data = this.uploadData
        this.uploadData = data.filter(item => {
          return deleteList.indexOf(item.index) == -1
        });
      }).catch(() => { })
    },
    getPage(page, list) {
      let sindex = (parseInt(page) - 1) * this.uploadPageSize
      let eindex = parseInt(page) * this.uploadPageSize
      let newList = list.slice(sindex, eindex)
      console.log(newList)
      return newList
    },
    currentPage(val) {
      this.uploadPage = val.page
      setTimeout(() => {
        this.uploadData = this.getPage(this.uploadPage, this.alluploadList)
      }, 100)
    },
  }
}
};
</script>
<style scoped>
.settle-style-dialog {
  height: 70vh;
  display: flex;
  flex-direction: column;
<style>
.xsckdBox .el-date-editor.el-input {
  width: 100%;
}
.search-card {
  margin-bottom: 15px;
}
.table-card {
  flex: 1;
  display: flex;
  flex-direction: column;
}
.table-card >>> .el-card__body {
  flex: 1;
  display: flex;
  flex-direction: column;
}
.clearfix:before,
.clearfix:after {
  display: table;
  content: "";
}
.clearfix:after {
  clear: both;
}
.el-form-item {
  margin-bottom: 15px;
}
.el-table {
  flex: 1;
}
.filter-scheme {
  text-align: center;
  font-size: 15px;
  font-weight: bold;
  color: #fc9393;
  margin: 10px 0;
}
</style>
</style>