wujianwei
2026-01-05 5b9914dc73fcdaecbfe3cecb402121cdd9d70f4c
ui/admin-ui3/src/views/tms/collectionTmsQuoteDetail/index.vue
@@ -59,10 +59,10 @@
            :data="form.items" ref="itemsCrudRef"
        >
          <template #freightPrice="{row}">
            <el-input v-model="row.freightPrice" :min="1" :disabled="scope.disabled" type="number" placeholder="请输入金额"></el-input>
            <el-input v-model="row.freightPrice" :min="1" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)" type="number" placeholder="请输入金额"></el-input>
          </template>
          <template #currency="{row}">
            <el-radio-group v-model="row.currency"  :disabled="scope.disabled">
            <el-radio-group v-model="row.currency"  :disabled="scope.disabled || !rowKeys.includes(row.rowKey)">
              <el-radio
                  v-for="dict in sys_currency"
                  :key="dict.value"
@@ -70,6 +70,49 @@
              >{{ dict.label }}</el-radio>
            </el-radio-group>
          </template>
          <template #taxRate="{row}">
            <el-input v-model="row.taxRate" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)" type="number" placeholder="请输入税点%"></el-input>
          </template>
          <template #segment1FreightQuote="{row}">
            <el-input v-model="row.segment1FreightQuote" @change="(value:any)=>quoteChange(value,row)" :min="1" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)" type="number" placeholder="请输入一段运费报价"></el-input>
          </template>
          <template #segment1Currency="{row}">
            <el-radio-group v-model="row.segment1Currency" @change="(value:any)=>quoteChange(value,row)" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)">
              <el-radio
                  v-for="dict in sys_currency"
                  :key="dict.value"
                  :label="dict.value"
              >{{ dict.label }}</el-radio>
            </el-radio-group>
          </template>
          <template #segment1TaxRate="{row}">
            <el-input v-model="row.segment1TaxRate" @change="(value:any)=>quoteChange(value,row)" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)" type="number" placeholder="请输入一段运费税点%"></el-input>
          </template>
          <template #segment2FreightQuote="{row}">
            <el-input v-model="row.segment2FreightQuote" :min="1" @change="(value:any)=>quoteChange(value,row)" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)" type="number" placeholder="请输入二段运费报价"></el-input>
          </template>
          <template #segment2Currency="{row}">
            <el-radio-group v-model="row.segment2Currency" @change="(value:any)=>quoteChange(value,row)" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)">
              <el-radio
                  v-for="dict in sys_currency"
                  :key="dict.value"
                  :label="dict.value"
              >{{ dict.label }}</el-radio>
            </el-radio-group>
          </template>
          <template #segment2TaxRate="{row}">
            <el-input v-model="row.segment2TaxRate" @change="(value:any)=>quoteChange(value,row)" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)" type="number" placeholder="请输入二段运费税点%"></el-input>
          </template>
          <template #totalFreight="{row}">
              <div>
                <div v-if="row.totalFreightCny">{{row.totalFreightCny}}人民币</div>
                <div v-if="row.totalFreightHkd">{{row.totalFreightHkd}}港币</div>
              </div>
          </template>
        </avue-crud>
      </template>
@@ -131,7 +174,8 @@
const option = ref({
  pageKey: 'TmsQuoteDetail',
  rowKey: 'id',
  labelWidth: 120,
  labelWidth: 150,
  dialogWidth:'80%',
  group:[
    {
      label:"基础信息",
@@ -154,7 +198,7 @@
          label: '起点行政区域',
          addDisplay: true,
          editDisplay: true,dataType: 'string',
          viewDisplay: true,
          viewDisplay: true,checkStrictly:true,
          type:'cascader',
          rules: [
            {
@@ -229,7 +273,7 @@
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,dataType: 'string',
          type:'cascader',
          type:'cascader',checkStrictly:true,
          rules: [
            {
              required: true,
@@ -312,6 +356,121 @@
            }
          ],
        },
        isSegmentedInvoice: {
          label: '是否分段开票',value: '1',
          type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is',
          rules: [
            {
              required: true,
              message: "运费报价不能为空", trigger: "blur"
            }
          ],
          change:({value}:{value:any})=>{
            if (value==1){
              itemsTableOption.value.column.freightPrice.hide = false;
              itemsTableOption.value.column.currency.hide = false;
              itemsTableOption.value.column.taxRate.hide = false;
              itemsTableOption.value.column.segment1FreightQuote.hide = true;
              itemsTableOption.value.column.segment1Currency.hide = true;
              itemsTableOption.value.column.segment1TaxRate.hide = true;
              itemsTableOption.value.column.segment2FreightQuote.hide = true;
              itemsTableOption.value.column.segment2Currency.hide = true;
              itemsTableOption.value.column.segment2TaxRate.hide = true;
              itemsTableOption.value.column.totalFreight.hide = true;
              option.value.group.forEach((item:any) =>{
                if (item.prop == 'jcxx'){
                  item.column.freightPrice.editDisplay = true;
                  item.column.freightPrice.viewDisplay = true;
                  item.column.currency.editDisplay = true;
                  item.column.currency.viewDisplay = true;
                  item.column.taxRate.editDisplay = true;
                  item.column.taxRate.viewDisplay = true;
                  item.column.segment1FreightQuote.editDisplay = false;
                  item.column.segment1FreightQuote.viewDisplay = false;
                  item.column.segment1Currency.editDisplay = false;
                  item.column.segment1Currency.viewDisplay = false;
                  item.column.segment1TaxRate.editDisplay = false;
                  item.column.segment1TaxRate.viewDisplay = false;
                  item.column.segment2FreightQuote.editDisplay = false;
                  item.column.segment2FreightQuote.viewDisplay = false;
                  item.column.segment2Currency.editDisplay = false;
                  item.column.segment2Currency.viewDisplay = false;
                  item.column.segment2TaxRate.editDisplay = false;
                  item.column.segment2TaxRate.viewDisplay = false;
                  item.column.totalFreightCny.editDisplay = false;
                  item.column.totalFreightCny.viewDisplay = false;
                  item.column.totalFreightHkd.editDisplay = false;
                  item.column.totalFreightHkd.viewDisplay = false;
                }
              })
            }else{
              itemsTableOption.value.column.freightPrice.hide = true;
              itemsTableOption.value.column.currency.hide = true;
              itemsTableOption.value.column.taxRate.hide = true;
              itemsTableOption.value.column.segment1FreightQuote.hide = false;
              itemsTableOption.value.column.segment1Currency.hide = false;
              itemsTableOption.value.column.segment1TaxRate.hide = false;
              itemsTableOption.value.column.segment2FreightQuote.hide = false;
              itemsTableOption.value.column.segment2Currency.hide = false;
              itemsTableOption.value.column.segment2TaxRate.hide = false;
              itemsTableOption.value.column.totalFreight.hide = false;
              option.value.group.forEach((item:any) =>{
                 if (item.prop == 'jcxx'){
                   item.column.freightPrice.editDisplay = false;
                   item.column.freightPrice.viewDisplay = false;
                   item.column.currency.editDisplay = false;
                   item.column.currency.viewDisplay = false;
                   item.column.taxRate.editDisplay = false;
                   item.column.taxRate.viewDisplay = false;
                   item.column.segment1FreightQuote.editDisplay = true;
                   item.column.segment1FreightQuote.viewDisplay = true;
                   item.column.segment1Currency.editDisplay = true;
                   item.column.segment1Currency.viewDisplay = true;
                   item.column.segment1TaxRate.editDisplay = true;
                   item.column.segment1TaxRate.viewDisplay = true;
                   item.column.segment2FreightQuote.editDisplay = true;
                   item.column.segment2FreightQuote.viewDisplay = true;
                   item.column.segment2Currency.editDisplay = true;
                   item.column.segment2Currency.viewDisplay = true;
                   item.column.segment2TaxRate.editDisplay = true;
                   item.column.segment2TaxRate.viewDisplay = true;
                   item.column.totalFreightCny.editDisplay = true;
                   item.column.totalFreightCny.viewDisplay = true;
                   item.column.totalFreightHkd.editDisplay = true;
                   item.column.totalFreightHkd.viewDisplay = true;
                 }
              })
            }
          }
        },
        vehicleType: {
          label: '车型',
          addDisplay: false,
@@ -353,6 +512,106 @@
            }
          ],
        },
        currency: {
          label: '币制',addDisplay: false,
          type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
          rules: [
            {
              required: true,
              message: "运费报价不能为空", trigger: "blur"
            }
          ],
        },
        taxRate: {
          label: '税点%',
          addDisplay: false,
          editDisplay: true,
          viewDisplay: true,type: 'number',
          rules: [
            {
              required: true,
              message: "taxRate不能为空", trigger: "blur"
            }
          ],
        },
        segment1FreightQuote:{
          label: '一段运费报价',  addDisplay: false,
          editDisplay: true,
          viewDisplay: true,type: 'number',
          rules: [
            {
              required: true,
              message: "一段运费报价不能为空", trigger: "blur"
            }
          ],
        },
        segment1Currency:{
          label: '一段运费币制',addDisplay: false,
          type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
          rules: [
            {
              required: true,
              message: "一段运费币制不能为空", trigger: "blur"
            }
          ],
        },
        segment1TaxRate:{
          label: '一段运费税点%',  addDisplay: false,
          editDisplay: true,
          viewDisplay: true,type: 'number',
          rules: [
            {
              required: true,
              message: "一段运费税点不能为空", trigger: "blur"
            }
          ],
        },
        segment2FreightQuote:{
          label: '二段运费报价', addDisplay: false,
          editDisplay: true,
          viewDisplay: true,type: 'number',
          rules: [
            {
              required: true,
              message: "二段运费报价不能为空", trigger: "blur"
            }
          ],
        },
        segment2Currency:{
          label: '二段运费币制',addDisplay: false,
        type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
        rules: [
          {
            required: true,
            message: "二段运费币制不能为空", trigger: "blur"
          }
        ],
        },
        segment2TaxRate:{
          label: '二段运费税点%',addDisplay: false,
          editDisplay: true,
          viewDisplay: true,type: 'number',
          rules: [
            {
              required: true,
              message: "二段运费税点不能为空", trigger: "blur"
            }
          ],
        },
        totalFreightCny:{
          label: '总运费人民币报价', disabled: true, addDisplay: false,
          editDisplay: true,
          viewDisplay: true,
        },
        totalFreightHkd:{
          label: '总运费港币报价',disabled: true ,addDisplay: false,
          editDisplay: true,
          viewDisplay: true
        }
      }
    },
    {
@@ -511,6 +770,11 @@
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
    },
    taxRate: {
      label: '税点%',
      display: false,
      hide: false,minWidth:150,
    },
    status: {
      label: '状态',
      type: 'radio',dataType:'string',  dicUrl: '/system/dict/data/type/sys_normal_disable',
@@ -540,10 +804,35 @@
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/vehicle_type',
    },
    freightPrice:{
      label: '*运费报价',
      label: '*运费报价', hide: false
    },
    currency:{
      label: '币制',
      label: '币制',hide: false
    },
    taxRate:{
      label: '税点%',hide: false
    },
    segment1FreightQuote:{
      label: '*一段运费报价', hide: true
    },
    segment1Currency:{
      label: '*一段运费币制',hide: true
    },
    segment1TaxRate:{
      label: '*一段运费税点%',hide: true
    },
    segment2FreightQuote:{
      label: '*二段运费报价', hide: true
    },
    segment2Currency:{
      label: '*二段运费币制',hide: true
    },
    segment2TaxRate:{
      label: '*二段运费税点%',hide: true
    },
    totalFreight:{
      label: '总运费报价', hide: true
    }
  }
})
@@ -597,13 +886,28 @@
      throw new Error("请至少选择一条车型报价");
    }
    let filter = selectionList2.value.filter((item:any)=>{
      return !item.freightPrice || !item.currency
    });
    if (filter.length > 0){
      proxy.$modal.msgError("请填写所有必填项");
      loading();
      throw new Error("请填写所有必填项")
    if (row.isSegmentedInvoice == 1){
      let filter = selectionList2.value.filter((item:any)=>{
        return !item.freightPrice || !item.currency
      });
      if (filter.length > 0){
        proxy.$modal.msgError("请填写所有必填项");
        loading();
        throw new Error("请填写所有必填项")
      }
    }else{
      let filter = selectionList2.value.filter((item:any)=>{
        return !item.segment1FreightQuote || !item.segment1Currency
            || !item.segment1TaxRate|| !item.segment2FreightQuote
            || !item.segment2Currency|| !item.segment2TaxRate
      });
      if (filter.length > 0){
        proxy.$modal.msgError("请填写所有必填项");
        loading();
        throw new Error("请填写所有必填项")
      }
    }
    row.quoteItems = selectionList2.value;
  },
@@ -621,7 +925,33 @@
  router.back()
}
const rowKeys = ref<any>([]);
const selectionChange2 = (selection?: any[]) => {
  selectionList2.value = selection;
  rowKeys.value = selection?.map((item:any)=>item.rowKey);
}
const quoteChange = (value:any,row:any) => {
  let segment1FreightQuote = Number(row.segment1FreightQuote) || 0;
  let segment2FreightQuote = Number(row.segment2FreightQuote) || 0;
  let totalFreightCny = 0;
  let totalFreightHkd = 0;
  if (row.segment1Currency){
    if (row.segment1Currency == 'RMB'){
      totalFreightCny = segment1FreightQuote;
    }else{
      totalFreightHkd = segment1FreightQuote;
    }
  }
  if (row.segment2Currency){
    if (row.segment2Currency == 'RMB'){
      totalFreightCny += segment2FreightQuote;
    }else{
      totalFreightHkd += segment2FreightQuote;
    }
  }
  row.totalFreightCny = totalFreightCny;
  row.totalFreightHkd = totalFreightHkd;
}
</script>