sen
1 天以前 7ed2a032d0724e68aec8af940f2ce0023a9f0eb7
ui/admin-ui3/src/views/cwgl/estimatedReceivable/index.vue
@@ -2,7 +2,7 @@
  <basicContainer>
    <avue-crud :option="option" v-model:search="queryParams" :table-loading="pageF.loading" :data="tableData"
      :page="page" :permission="permissionList" :before-open="beforeOpen" v-model="form" ref="crudRef"
      @row-update="rowUpdate" @row-save="rowSave" @refresh-change="refreshChange" @row-del="rowDel"
      @row-update="rowUpdate" @row-save="rowSave" @refresh-change="refreshChange" @row-del="rowDel"
      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
      @current-change="currentChange" @size-change="sizeChange" @on-load="onLoad">
@@ -38,14 +38,16 @@
          @click="handleEditBtn(row, index)" v-if="[0, 1].includes(row.relatedBillStatus) && row.isConfirmed != 2"
          v-hasPermi="['cwgl:estimatedReceivable:cancel']"> 编辑
        </el-link>
        <el-link class="link-btn" type="primary" v-if="row.isConfirmed == 1" :underline="false" plain :size="size"
          @click="handleCancel(row)" v-hasPermi="['cwgl:estimatedReceivable:cancel']"> 取消确认
        <el-link class="link-btn" type="primary"
          v-if="row.isConfirmed == 1 && row.relatedBillStatus != 2 && row.relatedBillStatus != 3" :underline="false"
          plain :size="size" @click="handleCancel(row)" v-hasPermi="['cwgl:estimatedReceivable:cancel']"> 取消确认
        </el-link>
        <el-link class="link-btn" type="primary" v-if="row.isConfirmed == 0 && ![2, 3].includes(row.relatedBillStatus)"
          :underline="false" plain @click="handleAffirm(row)" v-hasPermi="['cwgl:estimatedReceivable:confirm']"> 确认
        </el-link>
        <el-link class="link-btn" type="primary" v-if="row.isConfirmed == 1" :underline="false" plain
          @click="handleInvalid(row)" v-hasPermi="['cwgl:estimatedReceivable:invalid']"> 作废
        <el-link class="link-btn" type="primary"
          v-if="row.isConfirmed == 1 && row.relatedBillStatus != 2 && row.relatedBillStatus != 3" :underline="false"
          plain @click="handleInvalid(row)" v-hasPermi="['cwgl:estimatedReceivable:invalid']"> 作废
        </el-link>
        <el-link class="link-btn" type="primary" :underline="false" plain @click="handleFlow(row)"
          v-hasPermi="['cwgl:estimatedReceivable:flog']"> 日志
@@ -198,12 +200,14 @@
          message: "费用系统编号不能为空", trigger: "blur"
        }
      ],
      minWidth: 140,
      search: true,
      addDisplay: false,
      editDisplay: false,
    },
    dispatchNo: {
      label: '调度单号',
      minWidth: 120,
      rules: [
        {
          required: true,
@@ -227,7 +231,7 @@
      label: '客户名称',
      search: true,
      minWidth: 220,
      showOverflowTooltip: true,
      type: 'select',           // 设置为下拉框类型
      dicData: [], // 使用 selectCustomName 作为数据源
      disabled: false  // 根据需要设置是否禁用
@@ -236,16 +240,31 @@
      label: '项目名称',
      search: true,
      disabled: true,
      minWidth: 220,
      showOverflowTooltip: true,
    },
    orderDate: {
      label: '下单日期',
      search: true,
      minWidth: 180,
      type: 'datetime',  // 改为 datetime 类型
      format: 'YYYY-MM-DD HH:mm:ss',
      valueFormat: 'YYYY-MM-DD HH:mm:ss',
    },
    orderDateArray: {
      label: '下单日期',
      search: true,
      searchRange: true,
      type: 'daterange',
      startPlaceholder: '开始日期',
      endPlaceholder: '结束日期',
      valueFormat: 'YYYY-MM-DD',
      hide: true,
      addDisplay: false,
      editDisplay: false,
    },
    feeName: {
      label: '费用名称',
      minWidth: 120,
      rules: [
        {
          required: true,
@@ -270,12 +289,14 @@
    },
    relatedBillName: {
      label: '关联账单名称',
      minWidth: 120,
      addDisplay: false,  // 新增时不显示
      editDisplay: false, // 修改时不显示
    },
    relatedBillStatus: {
      label: '关联账单状态',
      search: true,
      minWidth: 120,
      dataType: 'string',
      type: 'select',
      addDisplay: false,  // 新增时不显示
@@ -297,6 +318,8 @@
    },
    remark: {
      label: '备注',
      minWidth: 120,
      showOverflowTooltip: true,
      type: 'textarea', minRows: 3, maxRows: 5,
    },
@@ -398,11 +421,47 @@
      }
    },
    getBeginListFunc: (params = {}) => {
      params.feeType = 0;
      return params
     getBeginListFunc: (params = {}) => {
      // 1. 日期转换
      let newParams = <any>{ ...params };
      if (newParams) {
        // 1. 定义日期字段映射 (数组名 : 接口需要的前缀)
        // 这样写的好处是:如果你有多个日期,直接在这里添加一行即可
        const dateMap = {
          orderDateArray: 'orderDate',
        };
    }
        // 2. 遍历处理日期
        Object.keys(dateMap).forEach(arrayKey => {
          const prefix = dateMap[arrayKey];
          const range = newParams[arrayKey];
          if (Array.isArray(range) && range.length > 0) {
            // 赋值 Begin 和 End
            newParams[`${prefix}Begin`] = range[0];
            newParams[`${prefix}End`] = range[1];
          }
          // 【核心改动】:无论是否有值,处理完后都把原始的 Array 字段删掉
          // 这样请求里就不会出现 confirmTimeRangeArray: [...]
          delete newParams[arrayKey];
        });
        // 3. 通用清洗:删除所有空字符串、null 或 undefined 的其他字段
        Object.keys(newParams).forEach(key => {
          const val = newParams[key];
          if (val === '' || val === null || val === undefined) {
            delete newParams[key];
          }
        });
      } else {
        newParams = {};
      }
      return newParams;
    },
  })
const dialog = reactive({
@@ -618,3 +677,12 @@
}
getSelectCustomName()
</script>
<style>
:deep(.avue-crud__table) {
  overflow-y: auto;
}
:deep(.el-scrollbar__bar.is-horizontal) {
  pointer-events: auto;
}
</style>