zhangback
2026-01-01 10976c3328bc2aca4b2d91c30c80c9daf18c401a
ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
@@ -44,14 +44,14 @@
            v-hasPermi="['tms:tmsDispatchOrder:export']"
        >导出
        </el-button>
        <el-button
            type="success"
            icon="Promotion"
            :disabled="pageF.multiple"
            @click="handleGenerate"
            v-hasPermi="['tms:tmsDispatchOrder:generate']"
        >生成应收应付费用
        </el-button>
<!--        <el-button-->
<!--            type="success"-->
<!--            icon="Promotion"-->
<!--            :disabled="pageF.multiple"-->
<!--            @click="handleGenerate"-->
<!--            v-hasPermi="['tms:tmsDispatchOrder:generate']"-->
<!--        >生成应收应付费用-->
<!--        </el-button>-->
        <el-button
            type="warning"
            icon="Female"
@@ -85,19 +85,31 @@
            v-hasPermi="['tms:tmsDispatchOrder:loading']"
        >委托卸货信息
        </el-button>
        <el-button
            type="primary"
            icon="UserFilled"
            :disabled="pageF.single"
            @click="handleZZ"
            v-hasPermi="['tms:tmsDispatchOrder:zzdj']"
        >增值作业登记
        </el-button>
      </template>
      <template #menu-before="{row}">
        <el-link size="small" type="primary" @click="handleAddGoods(row)" class="link-btn"
                 v-hasPermi="['tms:tmsGoodsDetail:add']"
                 v-hasPermi="['tms:tmsGoodsDetail:add']" v-if="[0,1,2].includes(row.status)"
                 :underline="false" icon="el-icon-document-add">运输货品登记
        </el-link>
        <el-link size="small" type="primary" @click="handleActual(row)" class="link-btn"
                 v-hasPermi="['tms:tmsDispatchOrder:update']"
                 v-hasPermi="['tms:tmsDispatchOrder:update']" v-if="[0,1,2].includes(row.status)"
                 :underline="false" icon="el-icon-set-up">实际运输记录
        </el-link>
        <el-link size="small" type="primary" v-if="row.status == 0" @click="handleConfirm(row)" class="link-btn"
                 v-hasPermi="['tms:tmsDispatchOrder:confirmOrder']"
                 :underline="false" icon="el-icon-pointer">确定
        </el-link>
        <el-link size="small" type="primary" v-if="[0,1,2].includes(row.status)" @click="handleClose(row)" class="link-btn"
                 v-hasPermi="['tms:tmsDispatchOrder:closeOrder']"
                 :underline="false" icon="el-icon-close">作废
        </el-link>
        <el-link size="small" type="primary" @click="handleCopy(row)" class="link-btn" :underline="false"
                 v-hasPermi="['tms:tmsDispatchOrder:copyOrder']"
@@ -115,10 +127,10 @@
                 v-hasPermi="['tms:tmsDispatchOrder:okOrder']"
                 :underline="false" icon="el-icon-circle-check">完成行程
        </el-link>
        <el-link size="small" type="primary" v-if="[2,3].includes(row.status)" @click="handleAddFinance(row)"
                 class="link-btn" v-hasPermi="['tms:tmsFinanceDetail:add']"
                 :underline="false" icon="el-icon-edit-pen">费用登记
        </el-link>
<!--        <el-link size="small" type="primary" v-if="[2,3].includes(row.status)" @click="handleAddFinance(row)"-->
<!--                 class="link-btn" v-hasPermi="['tms:tmsFinanceDetail:add']"-->
<!--                 :underline="false" icon="el-icon-edit-pen">费用登记-->
<!--        </el-link>-->
      </template>
      <template #menu="{row}">
        <el-link size="small" type="primary" @click="handleLog(row)" class="link-btn" :underline="false"
@@ -126,26 +138,26 @@
        </el-link>
      </template>
      <template #shipperId-form>
      <template #shipperId-form="{disabled}">
        <div style="display:flex; align-items: center;justify-content: space-between">
          <avue-input-table :props="consignorProps"
                            :children="consignorOption"
          <avue-input-table :props="consignorProps" dataType="string"
                            :children="consignorOption" :disabled="disabled"
                            :on-load="onShipperLoad" suffixIcon="search"
                            v-model="form.shipperId" style="width: 80%"
                            @change="changeShipper"
                            placeholder="请选择装货点"></avue-input-table>
          <el-button icon="plus" @click="handleAddShipper"></el-button>
          <el-button icon="plus"  :disabled="disabled" @click="handleAddShipper"></el-button>
        </div>
      </template>
      <template #receiverId-form>
      <template #receiverId-form="{disabled}">
        <div style="display:flex; align-items: center;justify-content: space-between">
          <avue-input-table :props="consignorProps"
                            :children="consignorOption"
                            :children="consignorOption" dataType="string"
                            :on-load="onConsignorLoad" suffixIcon="search"
                            v-model="form.receiverId"
                            v-model="form.receiverId"  :disabled="disabled"
                            @change="changeReceiver" style="width: 80%"
                            placeholder="请选择卸货点"></avue-input-table>
          <el-button icon="plus" @click="handleAddReceiver"></el-button>
          <el-button icon="plus"  :disabled="disabled" @click="handleAddReceiver"></el-button>
        </div>
      </template>
@@ -196,7 +208,7 @@
        >
          <el-descriptions-item label="调度单号">{{ form.dispatchNo }}</el-descriptions-item>
          <el-descriptions-item label="客户">{{ form.customerName }}</el-descriptions-item>
          <el-descriptions-item label="实际运输工具类型">{{ form.$actualVehicleType }}</el-descriptions-item>
          <el-descriptions-item label="派出车型">{{ form.$actualVehicleType }}</el-descriptions-item>
          <el-descriptions-item label="运输工具号码">{{ form.licensePlate }}</el-descriptions-item>
          <el-descriptions-item label="托架号">{{ form.shelfCode }}</el-descriptions-item>
          <el-descriptions-item label="主驾驶员">{{ form.mainDriverName }}</el-descriptions-item>
@@ -210,7 +222,7 @@
        >
          <el-descriptions-item label="调度单号">{{ form.dispatchNo }}</el-descriptions-item>
          <el-descriptions-item label="客户">{{ form.customerName }}</el-descriptions-item>
          <el-descriptions-item label="实际运输工具类型">{{ form.$actualVehicleType }}</el-descriptions-item>
          <el-descriptions-item label="派出车型">{{ form.$actualVehicleType }}</el-descriptions-item>
          <el-descriptions-item label="托架号">{{ form.shelfCode }}</el-descriptions-item>
        </el-descriptions>
        <avue-form v-model="form" ref="boxFormRef" :option="boxFormOption">
@@ -295,6 +307,85 @@
    </el-dialog>
    <el-dialog title="增值作业登记" v-model="open4" class="avue-dialog avue-dialog--top" width="80%">
      <el-descriptions :column="3" border>
        <el-descriptions-item label="调度单号">{{form.dispatchNo}}</el-descriptions-item>
        <el-descriptions-item label="客户名称">{{form.customerName}}</el-descriptions-item>
        <el-descriptions-item label="项目名称">{{form.projectName}}</el-descriptions-item>
        <el-descriptions-item label="运输路线">{{form.transportLine}}</el-descriptions-item>
        <el-descriptions-item label="车型">{{form.$actualVehicleType}}</el-descriptions-item>
        <el-descriptions-item label="车牌">{{form.licensePlate}}</el-descriptions-item>
      </el-descriptions>
      <avue-tabs :option="tabsOption" ref="tabsOptionRef"
                 @change="handleChange"></avue-tabs>
        <avue-crud v-if="active !== 'tab4'"
            :option="zzItemsTableOption" ref="itemsTableRef"
            :data="zzItemsTableData"
        >
          <template #count="{row}">
            <el-input-number v-model="row.count" placeholder="计费数量"
                             :min="0"></el-input-number>
          </template>
          <template #remark="{row}">
            <el-input v-model="row.remark" placeholder="备注" ></el-input>
          </template>
        </avue-crud>
      <div v-if="active === 'tab4'">
        <h2>实报实销费用</h2>
        <avue-form  v-model="boxForm" ref="boxFormRef"
                    :option="boxFormOption">
        </avue-form>
        <avue-crud
            :option="boxTableOption"
            :data="boxTableData"
        >
        </avue-crud>
      </div>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary"
                     :loading="pageF.isUploading" @click="submitTabForm">
            {{ pageF.isUploading ? '提交中' : '确 定' }}
          </el-button>
          <el-button @click="open4 = false">取 消</el-button>
        </div>
      </template>
    </el-dialog>
    <el-dialog title="调度单作废" v-model="open5" class="avue-dialog avue-dialog--top" width="80%">
      <el-descriptions :column="3" border>
        <el-descriptions-item label="调度单号">{{form.dispatchNo}}</el-descriptions-item>
        <el-descriptions-item label="客户名称">{{form.customerName}}</el-descriptions-item>
        <el-descriptions-item label="项目名称">{{form.projectName}}</el-descriptions-item>
        <el-descriptions-item label="运输路线">{{form.transportLine}}</el-descriptions-item>
        <el-descriptions-item label="车型">{{form.$actualVehicleType}}</el-descriptions-item>
        <el-descriptions-item label="车牌">{{form.licensePlate}}</el-descriptions-item>
      </el-descriptions>
      <avue-form  v-model="boxForm" ref="boxFormRef"
                  :option="boxFormOption">
      </avue-form>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary"
                     :loading="pageF.isUploading" @click="submitForm5">
            {{ pageF.isUploading ? '提交中' : '确 定' }}
          </el-button>
          <el-button @click="open5 = false">取 消</el-button>
        </div>
      </template>
    </el-dialog>
  </basicContainer>
</template>
@@ -307,10 +398,11 @@
  getTmsDispatchOrder,
  listTmsDispatchOrder,
  updateTmsDispatchOrder,
  confirmOrder, copyOrder, okOrder, initGenerate, generateTmsDispatchOrder, dropHook, connectHang,customsOrder,loadingOrder,
  confirmOrder, copyOrder, okOrder, initGenerate, generateTmsDispatchOrder, dropHook,
  connectHang,customsOrder,loadingOrder,checkCloseOrder,closeOrder
} from "@/api/tms/tmsDispatchOrder";
import useCurrentInstance from "@/utils/useCurrentInstance";
import {computed, onMounted, reactive, ref, toRefs, watch, getCurrentInstance} from "vue";
import {computed, onMounted, reactive, ref, toRefs, watch, getCurrentInstance, nextTick} from "vue";
import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
import {usePagePlus} from "@/hooks/usePagePlus";
import {hasPermission} from "@/utils/permissionUtils";
@@ -325,15 +417,22 @@
import {addTmsConsignor, getTmsConsignor, listTmsConsignor} from "@/api/tms/tmsConsignor";
import {ElMessage, ElMessageBox} from "element-plus";
import {addTmsTrip, listTmsTrip} from "@/api/tms/tmsTrip";
import {addTmsFinanceDetail, listTmsFinanceDetail, updateTmsFinanceDetail} from "@/api/tms/tmsFinanceDetail";
import {
  addTmsFinanceDetail,
  listTmsFinanceDetail,
  saveTmsFinanceDetail,
  updateTmsFinanceDetail
} from "@/api/tms/tmsFinanceDetail";
import {getTmsProductInfo, listTmsProductInfo} from "@/api/tms/tmsProductInfo";
import {addTmsGoodsDetail, delTmsGoodsDetail, listTmsGoodsDetail, updateTmsGoodsDetail} from "@/api/tms/tmsGoodsDetail";
import {getTransportRouteVi, listTransportRouteVi} from "@/api/tms/tmsTransportRouteVi";
import {listTmsQuoteItem} from "@/api/tms/tmsQuotePlanItem";
import {$DialogForm} from '@smallwei/avue'
import {$DialogForm, randomId} from '@smallwei/avue'
import {getTmsCustomerInfo, listTmsCustomerInfo} from "@/api/tms/tmsCustomerInfo";
import {getAddressCode} from "@/api/tms/tmsRegion";
import {mapRegeo} from "@/api/common";
import {getDicts} from "@/api/system/dict/data";
import {pushTmsQuoteFee} from "@/api/tms/tmsQuoteFee";
const {appContext} = getCurrentInstance();
@@ -381,12 +480,13 @@
  actualForm: <any>{},
  isCustoms:<any> -1,
  isLoad: -1,
  open5:false,
})
const {
  queryParams, form, page, selectionList, open3,
  boxTableData, optionType,
  boxFormOption, boxForm, boxTableOption, title, open, open2,
  goodsTableData, goodsForm, actualForm, selectionList2,isCustoms,isLoad
  goodsTableData, goodsForm, actualForm, selectionList2,isCustoms,isLoad,open5
} = toRefs(data);
const option = ref({
  pageKey: 'TmsDispatchOrder',
@@ -395,6 +495,7 @@
  searchSpan: 6,
  searchLabelWidth: 150,
  menuWidth: 300,
  height: 530,
  group: [
    {
      label: '基本信息',
@@ -432,6 +533,13 @@
                requiredVehicleTypes: active.vehicleType,
                quotePlanId: active.quotePlanId,
              });
              form.value.shipperId = undefined;
              form.value.shipperRegionLabel = undefined;
              form.value.shipperAddress = undefined;
              form.value.shipperMobile = undefined;
              form.value.receiverId = undefined;
              form.value.receiverAddress = undefined;
              form.value.receiverMobile = undefined;
            }
          },
          children: {
@@ -717,7 +825,7 @@
          ],
        },
        isUrgent: {
          label: '是否紧急',
          label: '是否紧急',value: '1',
          display: true,
          type: 'radio', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
          rules: [
@@ -736,6 +844,13 @@
        //   label: '配载方式',
        //   display: true, type: 'select', dicUrl: '/system/dict/data/type/load_method', dataType: 'string',
        // },
        orderTime: {
          label: '下单时间',
          type: 'datetime',  // 改为 datetime 类型
          format: 'YYYY-MM-DD HH:mm:ss',
          valueFormat: 'YYYY-MM-DD HH:mm:ss',
          display: true,
        },
        latestDeparture: {
          label: '要求最晚出发时间',
          type: 'datetime',  // 改为 datetime 类型
@@ -783,13 +898,29 @@
            console.log(value)
            option.value.group.forEach((item: any) => {
              if (item.prop == 'pcxx') {
                item.column.commissionModel.display = value != 1;
                item.column.containerId.display = value != 1;
                item.column.shelfId.display = value != 1;
                item.column.vehicleProviderId.display = value == 1;
                item.column.containerNo.display = value == 1;
                item.column.shelfCode.display = value == 1;
                // item.column.vehicleProviderId.rules.forEach((cItem: any) => {
                //   cItem.required = value == 1;
                // });
              }
            })
          },
        },
        commissionModel:{
          label: '提成模式',
          display: true, type: 'radio', dicUrl: '/system/dict/data/type/commission_model', dataType: 'string',
          rules: [
            {
              required: true,
              message: "提成模式不能为空", trigger: "change"
            }
          ],
        },
        vehicleProviderId: {
          label: '车辆服务商',
@@ -936,7 +1067,7 @@
              listTmsDriver({
                pageSize: page.pageSize,
                pageNum: page.currentPage, ...data,
                carrierType: form.value.operationMode
                carrierType: form.value.operationMode,vehicleProviderId:form.value.vehicleProviderId
              }).then(res => {
                return callback({
                  total: res.total,
@@ -1001,7 +1132,7 @@
            } else {
              listTmsDriver({
                pageSize: page.pageSize,
                pageNum: page.currentPage, ...data,
                pageNum: page.currentPage, ...data,vehicleProviderId:form.value.vehicleProviderId,
                carrierType: form.value.operationMode
              }).then(res => {
                return callback({
@@ -1032,6 +1163,7 @@
              Object.assign(form.value, {
                vehicleId: active.id,
                licensePlate: active.licensePlate,
                actualVehicleType: active.vehicleType,
              });
            }
          },
@@ -1047,6 +1179,8 @@
              },
              vehicleType: {
                label: '车辆类型', minWidth: 120,
                type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/vehicle_type',
                search: true,
              },
              internalCode: {
@@ -1085,7 +1219,7 @@
              listTmsVehicle({
                pageSize: page.pageSize,
                pageNum: page.currentPage, ...data,
                carrierType: form.value.operationMode
                carrierType: form.value.operationMode,serviceProviderId:form.value.vehicleProviderId
              }).then(res => {
                return callback({
                  total: res.total,
@@ -1148,6 +1282,10 @@
          label: '卸货点联系方式',
          display: true, disabled: true
        },
        containerNo: {
          label: '集装箱号',
          display: false,
        },
        containerId: {
          label: '关联集装箱信息',
          display: true,
@@ -1176,6 +1314,11 @@
              containerUseType: {
                label: '集装箱用途类型', minWidth: 120,
                type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/container_use_type',
                search: true,
              },
              selfLeasType: {
                label: '自租类型', minWidth: 120,
                type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/self_leas_type',
                search: true,
              },
              containerSize: {
@@ -1213,6 +1356,10 @@
          }
        },
        shelfCode: {
          label: '托板号',
          display: false,
        },
        shelfId: {
          label: '托板号',
          display: true,
@@ -1239,7 +1386,13 @@
                search: true,
              },
              shelfType: {
                label: '托架类型', minWidth: 120,
                type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/shelf_type',
                search: true,
              },
              selfLeasType: {
                label: '自租类型', minWidth: 120,
                type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/self_leas_type',
                search: true,
              },
              compatibleContainerType: {
@@ -1383,13 +1536,13 @@
      type: 'select', dataType: 'string',
      dicUrl: '/system/dict/data/type/order_type',
    },
    signType: {
      label: '订单类型',
      display: false,
      search: true, minWidth: 120,
      type: 'select', dataType: 'string',
      dicUrl: '/system/dict/data/type/order_type',
    },
    // signType: {
    //   label: '订单类型',
    //   display: false,
    //   search: true, minWidth: 120,
    //   type: 'select', dataType: 'string',
    //   dicUrl: '/system/dict/data/type/order_type',
    // },
    transportLine: {
      label: '运输线路',
@@ -1415,7 +1568,21 @@
      search: true,
    },
    isUrgent: {
      label: '是否紧急否',
      label: '是否紧急',
      display: false, minWidth: 100,
      search: true,
      type: 'select', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
    },
    iscc: {
      label: '是否查车',
      display: false, minWidth: 100,
      search: true,
      type: 'select', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
    },
    isfk: {
      label: '是否放空',
      display: false, minWidth: 100,
      search: true,
      type: 'select', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
@@ -1432,8 +1599,15 @@
    //   display: false,
    //   search: true,
    // },
    requiredVehicleTypes: {
      label: '下单车型',minWidth: 130,
      display: false, type: 'select',  search: true,
      dicUrl: '/system/dict/data/type/vehicle_type',
      dataType: 'string',
    },
    actualVehicleType: {
      label: '实际运输工具类型', minWidth: 130,
      label: '派出车型', minWidth: 130,
      display: false,
      search: true,
      type: 'select', dicUrl: '/system/dict/data/type/vehicle_type', dataType: 'string',
@@ -1456,29 +1630,29 @@
      display: false,
      search: true,
    },
    accountsReceivableStatus: {
      label: '应收费用生成状态', minWidth: 160,
      display: false,
      hide: false,
      search: true,
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/accounts_status',
    },
    accountsPayableStatus: {
      label: '应付费用生成状态', minWidth: 160,
      display: false,
      hide: false,
      search: true,
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/accounts_status',
    },
    // accountsReceivableStatus: {
    //   label: '应收费用生成状态', minWidth: 160,
    //   display: false,
    //   hide: false,
    //   search: true,
    //   type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/accounts_status',
    //
    // },
    // accountsPayableStatus: {
    //   label: '应付费用生成状态', minWidth: 160,
    //   display: false,
    //   hide: false,
    //   search: true,
    //   type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/accounts_status',
    //
    // },
    status: {
      label: '状态', minWidth: 150,
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/tms_dispatch_order_status',
      display: false,
      hide: false, fixed: 'right',
      search: true,
      search: false,
      rules: [
        {
          required: true,
@@ -1486,14 +1660,54 @@
        }
      ],
    },
    inStatusList: {
      label: '状态', minWidth: 150,
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/tms_dispatch_order_status',
      display: false,multiple:true,
      hide: true,
      search: true,
    },
    confirmTime: {
      label: '确认时间', minWidth: 180,
      display: false,
      hide: false,
      search: false,
    },
    orderTime: {
      label: '下单时间', minWidth: 180,
      display: false,
      hide: false,
      search: false,
    },
    createBy: {
      label: '创建人', minWidth: 150,
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: false,
      search: true,
    },
    createTime: {
      label: '创建时间', minWidth: 180,
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: false,
      search: false,
    },
    createTimeRange: {
      label: '创建时间', display: false, search: true, searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
      valueFormat: 'YYYY-MM-DD',
    },
    updateBy: {
      label: '更新人', minWidth: 150,
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: false,
      search: false,
      search: true,
    },
    updateTime: {
      label: '更新时间', minWidth: 180,
@@ -1518,6 +1732,11 @@
      format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
      valueFormat: 'YYYY-MM-DD',
    },
    orderTimeRange: {
      label: '下单时间', display: false, search: true, searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
      valueFormat: 'YYYY-MM-DD',
    },
  }
})
@@ -1539,11 +1758,27 @@
    tripType: {
      label: '行程类型',
      display: true,
      change: function ({value}: any) {
        if (value == '5'){
          itineraryOption.value.column.iscc.display = true
        }
      },
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/trip_type',
      rules: [
        {
          required: true,
          message: "行程类型不能为空", trigger: "change"
        }
      ],
    },
    iscc: {
      label: '是否查车',
      display: false,
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is',
      rules: [
        {
          required: true,
          message: "是否查车不能为空", trigger: "change"
        }
      ],
    },
@@ -1635,11 +1870,10 @@
      display: true,
    },
    voucherUrl: {
      label: '行程凭证',
      label: '凭证',
      display: true,
      span: 24, dataType: 'string',
      type: 'upload',
      action: '/common/upload2',
      type: 'img',
    },
@@ -1672,14 +1906,29 @@
        }
      ],
    },
    voucherUrl: {
      label: '行程凭证',
    currency:{
      label: '币种',
      display: true,
      span: 24,
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
      rules: [
        {
          required: true,
          message: "币种不能为空", trigger: "change"
        }
      ],
    },
    voucherUrl: {
      label: '费用凭证',
      display: true,
      accept: 'string', dataType: 'string',
      type: 'upload',
      action: '/common/upload2',
    },
    remark:{
      label: '备注',
      type: 'textarea', minRows: 3, maxRows: 5, span: 24
    },
    dataSource: {
      label: '数据来源',
@@ -1720,6 +1969,11 @@
      label: '金额',
      display: true,
    },
    currency:{
      label: '币种',
      display: true,
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
    },
    feeVoucherUrl: {
      label: '费用凭证',
      display: true,
@@ -1727,7 +1981,9 @@
      accept: 'string', dataType: 'object',
      type: 'upload',
      action: '/common/upload2',
    },
    remark:{
      label: '备注',
    },
  }
@@ -2075,6 +2331,28 @@
})
const closeOption = ref({
  menuBtn: false,
  labelWidth: 120,
  column: {
    closeWhy:{
      label: '作废原因',span:24,
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/close_why',
      rules: [
        {
          required: true,
          message: "作废原因不能为空", trigger: "change"
        }
      ],
    },
    closeWhyRemark:{
      label: '作废原因说明',
      type: 'textarea',
      span:24,
    },
  }
})
const goodsTableOption = ref({
@@ -2368,6 +2646,65 @@
const itemsCrudRef = ref()
const itemsTableData = ref<any>([])
const tabsOption = ref({
  column: [
    {
      label: '运输增值作业登记',
      prop: 'tab1',
      name: 'tab1',
      value: '0',
    },
    {
      label: '报关增值作业登记',
      prop: 'tab2',
      name: 'tab2',
      value: '1',
    },
    {
      label: '装卸增值作业登记',
      prop: 'tab3',
      name: 'tab3',
      value: '2',
    },
    {
      label: '实报实销费用登记',
      prop: 'tab4',
      name: 'tab4',
      value: '3',
    }
    ]
})
const tabsOptionRef = ref();
const active = ref('tab1');
const open4 = ref(false);
const zzItemsTableOption = ref({
  pageKey: 'zzItemsTable',
  rowKey: 'rowKey',
  header: false,
  menu: false,
  selection: false,
  column: {
    freeName:{
      label: '费用名称',
    },
    unit:{
      label: '计量单位',
    },
    count:{
      label : '计费数量'
    },
    remark:{
      label: '备注'
    }
  }
});
const zzItemsTableData = ref();
const {
  tableData,
  pageF,
@@ -2413,12 +2750,19 @@
    isLoad.value = isLoad.value == 0 && !pageF.single ? 0 : -1;
    console.log(pageF.single)
  },
  getBeginListFunc: () => {
  getBeginListFunc: (params = {}) => {
    queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.createTimeRange, 'createTime') || {};
    queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.updateTimeRange, 'updateTime') || {};
    queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.confirmTimeRange, 'confirmTime') || {};
    queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.okTimeRange, 'okTime') || {};
    queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.orderTimeRange, 'orderTime') || {};
    return params;
  },
  handleBeforeOpenFunc:(type:string)=>{
    if(type == 'add'){
      form.value = {};
    }
  }
})
const handleConfirm = (row: any) => {
@@ -2646,7 +2990,10 @@
      pageF.isUploading = false;
    })
  }else if (optionType.value === 'customs') {
    customsOrder(form.value.id).then(res => {
    customsOrder({id:form.value.id,
      customsServiceProviderId: form.value.customsServiceProviderId,
      customsServiceProviderName: form.value.customsServiceProviderName,
    }).then(res => {
      ElMessage({
        message: "提交成功!",
        type: 'success'
@@ -2657,7 +3004,10 @@
      pageF.isUploading = false;
    })
  }else if (optionType.value === 'loading') {
    loadingOrder(form.value.id).then(res => {
    loadingOrder({id:form.value.id,
      loadingServiceProviderId: form.value.loadingServiceProviderId,
      loadingServiceProviderName: form.value.loadingServiceProviderName,
    }).then(res => {
      ElMessage({
        message: "提交成功!",
        type: 'success'
@@ -2784,7 +3134,7 @@
      if (districtId) data.districtId = districtId;
      if (streetId) data.streetId = streetId;
    }
    listTmsConsignor({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => {
    listTmsConsignor({pageSize: page.pageSize, pageNum: page.currentPage, ...data,customerId: form.value.customerId}).then(res => {
      return callback({
        total: res.total,
        data: res.rows || [],
@@ -2811,7 +3161,7 @@
      if (districtId) data.districtId = districtId;
      if (streetId) data.streetId = streetId;
    }
    listTmsConsignor({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => {
    listTmsConsignor({pageSize: page.pageSize, pageNum: page.currentPage, ...data,customerId: form.value.customerId}).then(res => {
      return callback({
        total: res.total,
        data: res.rows || [],
@@ -3300,4 +3650,124 @@
  optionType.value = 'loading';
  boxFormOption.value = loadingOption.value;
}
const quotationItems = ref();
const getQuotationItems = async () => {
  let res = await  getDicts("sys_quotation_items");
  quotationItems.value = res.data || [];
}
getQuotationItems();
const getTabData = (val:string)=>{
  console.log(val)
  let filter = quotationItems.value.filter((item:any)=>{
    return item.remark == val;
  });
  if (filter.length > 0){
    zzItemsTableData.value = filter.map((item:any)=>{
      return { rowKey: randomId() ,freeName: item.dictLabel,free: item.dictValue,unit: '次'}
    })
  }else{
    zzItemsTableData.value = []
  }
}
const getTab4Data = ()=>{
  listTmsFinanceDetail({
    dispatchOrderId: form.value.id, financeType: 2,
    pageNum: 1, pageSize: 999
  }).then(async res => {
    boxTableData.value = res.rows || [];
    boxForm.value = {
      dispatchOrderId: form.value.id,
      dataSource: 0,
      financeType: 2,
    }
  })
}
const submitTabForm = ()=>{
  if (['tab1','tab2','tab3'].includes(active.value)){
    let quoteFeeItems = zzItemsTableData.value.filter((item:any)=>{
      return item.count && item.count > 0;
    })
    console.log(quoteFeeItems)
    pushTmsQuoteFee({...form.value,quoteFeeItems:quoteFeeItems}).then(res=>{
      ElMessage.success('保存成功');
      open4.value = false;
    })
  }else if (active.value === 'tab4'){
    if (Array.isArray(boxForm.value.feeVoucherUrl)) {
      boxForm.value.feeVoucherUrl = boxForm.value.feeVoucherUrl.toString();
    }
    //boxForm.value.rowItems = boxTableData.value;
    saveTmsFinanceDetail(boxForm.value).then(res => {
      ElMessage({
        message: "操作成功!",
        type: 'success'
      })
      boxFormRef.value?.resetFields();
      getTab4Data();
    })
  }
}
const handleChange = (column:any)=>{
  active.value = column.prop;
  if (['tab1','tab2','tab3'].includes(column.prop)){
    getTabData(column.value)
  }else if (column.prop === 'tab4'){
    getTab4Data()
  }
}
const handleZZ = () => {
  open4.value = true;
  form.value = selectionList.value[0];
  handleChange(tabsOption.value.column[0]);
  boxFormOption.value = financeOption.value;
  boxTableOption.value = financeTableOption.value;
  nextTick(()=>{
    tabsOptionRef.value.active = "0";
  })
}
const handleClose = (row:any) => {
  if (row.status == 2){
    checkCloseOrder(row.id).then(res=>{
      open5.value = true;
      form.value = row;
      boxFormOption.value = closeOption.value;
    });
  }else{
    open5.value = true;
    form.value = row;
    boxFormOption.value = closeOption.value;
  }
}
const submitForm5 = () =>{
  boxFormRef.value.validate((valid: boolean,done:any) => {
    console.log(valid)
    if(valid){
      boxForm.value.id = form.value.id;
      closeOrder(boxForm.value).then(res=>{
        ElMessage.success('操作成功');
        open5.value = false;
        done();
        onLoad(page.value)
      }).catch(err=>{
        done();
      })
    }
  })
}
</script>