sen
2025-12-31 d7b6c8a258cbc483a59dc5fd68ba34a2423e7e27
ui/admin-ui3/src/views/tms/generationCost/index.vue
@@ -47,7 +47,10 @@
          </el-button>
      </template>
      <template #menu-before="{row}">
        <el-link size="small" type="primary" v-if="[0,1,2,3].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" v-if="![0,1].includes(row.status)" @click="handleLogItinerary(row)"
                 v-hasPermi="['tms:tmsTrip:list']"
                 class="link-btn" :underline="false" icon="el-icon-view">查看行程
@@ -95,6 +98,9 @@
                         :true-value="1"
                         :false-value="0"
                         @change="(e:number) =>isYFChange(e, row)" ></el-checkbox>
          </template>
          <template #remark="{row}">
            <el-input v-model="row.remark" placeholder="备注" ></el-input>
          </template>
          <template #expand="{row}">
            <el-descriptions :column="3" border v-if="row.isYF == 1">
@@ -222,7 +228,31 @@
      </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>
@@ -237,8 +267,8 @@
  costListTmsDispatchOrder,
  updateTmsDispatchOrder,
  generateTmsDispatchOrder, initGenerate, initYSGenerate,
  ysGenerateTmsDispatchOrder, initYFGenerate,yfGenerateTmsDispatchOrder,
  getServiceProvider
  ysGenerateTmsDispatchOrder, initYFGenerate, yfGenerateTmsDispatchOrder,
  getServiceProvider, checkCloseOrder, closeOrder
} from "@/api/tms/tmsDispatchOrder";
import useCurrentInstance from "@/utils/useCurrentInstance";
import {computed, onMounted, reactive, ref, toRefs, watch, getCurrentInstance, nextTick} from "vue";
@@ -255,7 +285,7 @@
import {listTmsLoadingServiceProvider} from "@/api/tms/tmsLoadingServiceProvider";
import {selectPaymentTmsQuotePlan} from "@/api/tms/tmsQuotePlan";
import {addTmsQuoteFee, listTmsQuoteFee, pushTmsQuoteFee} from "@/api/tms/tmsQuoteFee";
import {an} from "vue-router/dist/router-CWoNjPRp";
const {appContext} = getCurrentInstance();
@@ -306,11 +336,12 @@
  isLoad: -1,
  active: 'tab1',
  quotationItems:[],
  serviceProviderList: <any>[]
  serviceProviderList: <any>[],
  open5:false,
})
const {
  queryParams, form, page, selectionList,
  boxTableData, optionType,open,
  boxTableData, optionType,open,open5,
  boxFormOption, boxForm, boxTableOption,boxItemTableOption,selectionList2,isCustoms,isLoad,active,quotationItems,serviceProviderList
} = toRefs(data);
const option = ref({
@@ -622,7 +653,14 @@
      search: true,
    },
    isUrgent: {
      label: '是否紧急否',
      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',
@@ -763,6 +801,9 @@
  }, {
    label: '待生成应付',
    prop: 'tab2',
  }, {
    label: '已作废',
    prop: 'tab3',
  }]
})
const tabsOption2 = ref({
@@ -871,10 +912,15 @@
    voucherUrl: {
      label: '行程凭证',
      display: true,
      span: 24,
      accept: 'string', dataType: 'string',
      type: 'upload',
      action: '/common/upload2',
    },
    remark: {
      label: '备注',span:24,
      display: true,
      type: 'textarea',
    },
    dataSource: {
@@ -925,6 +971,10 @@
      action: '/common/upload2',
    },
    remark: {
      label: '备注',
      display: true,
    },
    isYF:{
      label: '是否应付费用',
      display: true,
@@ -973,6 +1023,9 @@
    },
    sum: {
      label: '总金额',
    },
    remark: {
      label: '备注',
    },
    isYF: {
      label: '是否应付费用',
@@ -1106,6 +1159,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,
    },
  }
})
@@ -1247,36 +1322,53 @@
const getTab1Data = async () =>{
  const quotePlanItemRes = await listTmsQuoteItem({quotePlanId: form.value.quotePlanId, pageNum: 1, pageSize: 999});
  let items = quotePlanItemRes.rows || [];
  const quotePlanItemRes2 = await listTmsQuoteItem({quotePlanId: form.value.quotePlanId, pageNum: 1, pageSize: 999});
  let list = quotePlanItemRes2.rows || [];
  let quotePlanItemRes = await  getDicts("sys_quotation_items");
  console.log(quotePlanItemRes)
  let items = quotePlanItemRes.data || [];
  let res =  await listTmsQuoteFee({dispatchId: form.value.id,  pageNum: 1, pageSize: 999});
    let rowsData = res.rows || [];
  selectionList2.value = []
  itemsTableRef.value?.clearSelection();
  itemsTableData.value = items.map( (item: any) => {
    let find = rowsData.find((ele: any) => {
      return item.free == ele.free
    let find2 = list.find((ele: any) => {
      return item.dictValue == ele.free
    });
    let find = rowsData.find((ele: any) => {
      return item.dictValue == ele.free
    });
    delete item.remark;
    if (find) {
      let aRow = {
        unit: '次',
        ...item,
        feeType: item.freeName,
        rowKey: item.id,
        freeName:item.dictLabel,
        feeType: item.dictLabel,
        rowKey: item.dictCode,
        free: item.dictValue,
        ...find,
        ...find2,
        price: find.price||0,
        currency: find.currency|| 'RMB',
        sum: find.sum|| 0,
      };
      selectionList2.value.push(aRow);
      return aRow
    } else {
      return {
        ...item,
        rowKey: item.id,
        feeType: item.freeName,
        unit: item.unit,
        price: item.price,
        currency: item.currency,
        freeName:item.dictLabel,
        rowKey: item.dictCode,
        feeType: item.dictLabel,
        price: 0,
        currency: 'RMB',
        count: 0,
        unit: '次',
        free: item.dictValue,
        sum: 0,
        ...find2,
      }
    }
  })
@@ -1339,6 +1431,8 @@
  }else if (column.prop === 'tab2'){
    accountsPayableStatus = 0;
  }else if (column.prop === 'tab3'){
    queryParams.value.inStatusList = [5];
  }
  page.value.currentPage = 1;
  queryParams.value.accountsReceivableStatus = accountsReceivableStatus;
@@ -1528,6 +1622,35 @@
  row.yfServiceProviderName = active.serviceProviderName;
  row.yfServiceProviderType = active.serviceProviderType;
}
const handleClose = (row:any) => {
  if (row.status == 2 && row.isfk == 1){
    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>