wujianwei
6 天以前 89fd2cf7202c321512c2ea699a3a220a7138ed44
ui/admin-ui3/src/views/tms/tmsQuoteDetail/index.vue
@@ -52,7 +52,33 @@
        >返回
        </el-button>
      </template>
    </avue-crud>
      <template #items-form="scope">
        <avue-crud
            :option="{...itemsTableOption,selection: !scope.disabled}"          @selection-change="selectionChange2"
            :data="form.items" ref="itemsCrudRef"
        >
          <template #freightPrice="{row}">
            <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 || !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 #taxRate="{row}">
            <el-input v-model="row.taxRate" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)" type="number" placeholder="请输入税点%"></el-input>
          </template>
        </avue-crud>
      </template>
        </avue-crud>
  </basicContainer>
</template>
@@ -74,6 +100,7 @@
import {getTmsServiceProvider, listTmsServiceProvider} from "@/api/tms/tmsServiceProvider";
import {getArea, getCity, getProvince, getStreet} from "@/api/tms/tmsRegion";
import {useRoute,useRouter } from "vue-router";
import {randomId} from "@smallwei/avue";
const {proxy} = useCurrentInstance();
const crudRef = ref();
@@ -87,7 +114,8 @@
    viewBtn: hasPermission(["tms:tmsQuoteDetail:query"]),
  }
})
const {vehicle_type,sys_currency} =
    proxy.useDict("vehicle_type","sys_currency");
const data = reactive({
  form: <TmsQuoteDetailI>{},
  queryParams: <TmsQuoteDetailI & PageQueryInterface>{},
@@ -97,8 +125,9 @@
    currentPage: 1,
  },
  selectionList: [],
  selectionList2: [],
})
const {queryParams, form, page, selectionList} = toRefs(data);
const {queryParams, form, page, selectionList,selectionList2} = toRefs(data);
const option = ref({
  pageKey: 'TmsQuoteDetail',
  rowKey: 'id',
@@ -120,95 +149,95 @@
          editDisplay: false,
          viewDisplay: true,
        },
        vehicleProviderId: {
          label: '车辆服务商',
          display: true,
          editDisplay: true,row:true,
          viewDisplay: true,
          hide: false,
          search: true,
          rules: [
            {
              required: true,
              message: "车辆服务商不能为空", trigger: "change"
            }
          ],
          type: 'table', suffixIcon: 'search',
          children: {
            border: true,
            searchLabelWidth: 100,
            searchMenuSpan: 5,
            column: {
              serviceCode: {
                label: '服务商编码', minWidth: 130,
                search: true,
              },
              serviceShortName: {
                label: '服务商简称', minWidth: 120,
                search: true,
              },
              serviceType: {
                label: '服务类型', multiple: true,
                type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/service_type',
                minWidth: 150,
              },
              isTransport: {
                label: '是否运输服务商',
                type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is',
                minWidth: 150,
              },
              isStorage: {
                label: '是否仓储服务商',
                type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is',
                minWidth: 150,
              },
              isExpress: {
                label: '是否快递服务商',
                type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is',
                minWidth: 150,
              },
              contactName: {
                label: '联系人姓名', minWidth: 120,
              },
            },
          },
          props: {
            label: 'serviceShortName',
            value: 'id'
          },
          onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
            if (value) {
              let id = value;
              if (Array.isArray(value)) {
                id = value[0]
              }
              getTmsServiceProvider(id).then(res => {
                return callback(res.data || {})
              })
            } else {
              listTmsServiceProvider({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => {
                return callback({
                  total: res.total,
                  data: res.rows || [],
                })
              })
            }
          },
          change: (val: any) => {
            const table = crudRef.value?.getPropRef?.('vehicleProviderId')?.$refs?.temp;
            if (!table) return;
            let active = table.active;
            if (Array.isArray(active)) active = active[0];
            if (active) {
              Object.assign(form.value, {
                vehicleProviderId: active.id,
                vehicleProviderName: active.serviceShortName,
              });
            }
          },
        },
        // vehicleProviderId: {
        //   label: '车辆服务商',
        //   display: true,
        //   editDisplay: true,row:true,
        //   viewDisplay: true,
        //   hide: false,
        //   search: true,
        //   rules: [
        //     {
        //       required: true,
        //       message: "车辆服务商不能为空", trigger: "change"
        //     }
        //   ],
        //   type: 'table', suffixIcon: 'search',
        //   children: {
        //     border: true,
        //     searchLabelWidth: 100,
        //     searchMenuSpan: 5,
        //     column: {
        //       serviceCode: {
        //         label: '服务商编码', minWidth: 130,
        //         search: true,
        //       },
        //       serviceShortName: {
        //         label: '服务商简称', minWidth: 120,
        //         search: true,
        //       },
        //       serviceType: {
        //         label: '服务类型', multiple: true,
        //         type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/service_type',
        //         minWidth: 150,
        //       },
        //       isTransport: {
        //         label: '是否运输服务商',
        //         type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is',
        //         minWidth: 150,
        //       },
        //       isStorage: {
        //         label: '是否仓储服务商',
        //         type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is',
        //         minWidth: 150,
        //       },
        //       isExpress: {
        //         label: '是否快递服务商',
        //         type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is',
        //         minWidth: 150,
        //       },
        //       contactName: {
        //         label: '联系人姓名', minWidth: 120,
        //       },
        //     },
        //
        //   },
        //   props: {
        //     label: 'serviceShortName',
        //     value: 'id'
        //   },
        //   onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
        //     if (value) {
        //       let id = value;
        //       if (Array.isArray(value)) {
        //         id = value[0]
        //       }
        //       getTmsServiceProvider(id).then(res => {
        //         return callback(res.data || {})
        //       })
        //     } else {
        //       listTmsServiceProvider({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => {
        //         return callback({
        //           total: res.total,
        //           data: res.rows || [],
        //         })
        //       })
        //     }
        //
        //   },
        //   change: (val: any) => {
        //     const table = crudRef.value?.getPropRef?.('vehicleProviderId')?.$refs?.temp;
        //     if (!table) return;
        //     let active = table.active;
        //     if (Array.isArray(active)) active = active[0];
        //     if (active) {
        //       Object.assign(form.value, {
        //         vehicleProviderId: active.id,
        //         vehicleProviderName: active.serviceShortName,
        //       });
        //     }
        //   },
        // },
        startRegionCode: {
          label: '起点行政区域',
          addDisplay: true,
@@ -275,14 +304,14 @@
            }
          }
        },
        startWarehouse: {
          label: '起点仓库',
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
          type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
        },
        // startWarehouse: {
        //   label: '起点仓库',
        //   addDisplay: true,
        //   editDisplay: true,
        //   viewDisplay: true,
        //   type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
        //
        // },
        endRegionCode: {
          label: '终点行政区域',
          addDisplay: true,
@@ -347,14 +376,14 @@
            }
          }
        },
        endWarehouse: {
          label: '终点仓库',
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
          type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
        },
        // endWarehouse: {
        //   label: '终点仓库',
        //   addDisplay: true,
        //   editDisplay: true,
        //   viewDisplay: true,
        //   type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
        //
        // },
        transportRoute: {
          label: '运输线路',span:24,
          disabled: true,
@@ -373,7 +402,7 @@
        },
        vehicleType: {
          label: '车型',
          addDisplay: true,
          addDisplay: false,
          editDisplay: true,
          viewDisplay: true,
          type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/vehicle_type',
@@ -384,25 +413,24 @@
            }
          ],
        },
        transportMode: {
          label: '运输方式',
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
          type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/transport_mode',
        },
        routeType: {
          label: '线路类型',
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
          type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/route_type',
        },
        // transportMode: {
        //   label: '运输方式',
        //   addDisplay: true,
        //   editDisplay: true,
        //   viewDisplay: true,
        //   type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/transport_mode',
        //
        // },
        // routeType: {
        //   label: '线路类型',
        //   addDisplay: true,
        //   editDisplay: true,
        //   viewDisplay: true,
        //   type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/route_type',
        //
        // },
        freightPrice: {
          label: '运费报价',
          addDisplay: true,
          label: '运费报价',      addDisplay: false,
          editDisplay: true,
          viewDisplay: true,type: 'number',
@@ -413,6 +441,37 @@
            }
          ],
        },
        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"
            }
          ],
        },
      }
    },
    {
      label: '车型报价',
      prop: 'cxbj', addDisplay: true,editDisplay: false,viewDisplay: false,
      column: {
        items:{
          label: '',labelWidth:0,span:24,
        }
      }
    },
    {
@@ -491,11 +550,11 @@
      label: '报价方案编号',minWidth:150,
      display: false,
    },
    vehicleProviderName: {
      label: '车辆服务商',minWidth:150,
      display: false,
      search: true,
    },
    // vehicleProviderName: {
    //   label: '车辆服务商',minWidth:150,
    //   display: false,
    //   search: true,
    // },
    transportRoute: {
      label: '运输线路',minWidth:150,
      display: false,overHidden: true,
@@ -507,48 +566,61 @@
      hide: false,overHidden: true,
      search: false,
    },
    startWarehouse: {
      label: '起点仓库',   display: false,
      hide: false,minWidth:150,
      search: true,
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
    },
    // startWarehouse: {
    //   label: '起点仓库',   display: false,
    //   hide: false,minWidth:150,
    //   search: true,
    //   type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
    //
    // },
    endRegion: {
      label: '终点行政区域',overHidden: true,
      display: false,minWidth:150,
      hide: false,
    },
    endWarehouse: {
      label: '终点仓库',
      display: false,minWidth:150,
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
      search: true,
    },
    // endWarehouse: {
    //   label: '终点仓库',
    //   display: false,minWidth:150,
    //   type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
    //   search: true,
    // },
    vehicleType: {
      label: '车型',
      display: false,minWidth:150,
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/vehicle_type',
      search: true,
    },
    transportMode: {
      label: '运输方式',minWidth:150,
    // transportMode: {
    //   label: '运输方式',minWidth:150,
    //   display: false,
    //   hide: false,
    //   search: true,
    //   type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/transport_mode',
    //
    // },
    // routeType: {
    //   label: '线路类型',
    //   display: false,
    //   hide: false,minWidth:150,
    //   search: true,
    //   type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/route_type',
    //
    // },
    freightPrice: {
      label: '运费报价',
      display: false,
      hide: false,
      search: true,
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/transport_mode',
      hide: false,minWidth:150,
    },
    routeType: {
      label: '线路类型',
    currency: {
      label: '币制',
      display: false,
      hide: false,minWidth:150,
      search: true,
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/route_type',
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
    },
    freightPrice: {
      label: '运费报价',
    taxRate: {
      label: '税点%',
      display: false,
      hide: false,minWidth:150,
    },
@@ -569,7 +641,28 @@
    },
  }
})
const itemsTableOption = ref({
  pageKey: 'itemsTable',
  rowKey: 'rowKey',
  header: false,
  addBtn: false,menu: false,
  column:{
    vehicleType:{
      label: '车型',
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/vehicle_type',
    },
    freightPrice:{
      label: '*运费报价', hide: false
    },
    currency:{
      label: '币制',hide: false
    },
    taxRate:{
      label: '税点%',hide: false
    },
  }
})
const itemsCrudRef =ref()
const {
  tableData,
  pageF,
@@ -609,14 +702,41 @@
    params.quotePlanId = (route.query?.quotePlanId||'') as string;
    return params;
  },
  rowSaveBegin:(row:any)=>{
  rowSaveBegin:(row:any,loading:any)=>{
    row.quotePlanId = (route.query?.quotePlanId||'') as string;
    console.log(row)
  },
    if (selectionList2.value.length == 0){
      proxy.$modal.msgError("请至少选择一条车型报价");
      loading();
      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("请填写所有必填项")
    }
    row.quoteItems = selectionList2.value;
  },
  handleBeforeOpenFunc:(type:string)=>{
    form.value.items = [];
    if (type === 'add'){
      form.value.items = vehicle_type.value.map((item:any)=>{
        return { rowKey: randomId() ,vehicleType: item.value,}
      })
    }
  },
})
const handleBack = () => {
  router.back()
}
const rowKeys = ref<any>([]);
const selectionChange2 = (selection?: any[]) => {
  selectionList2.value = selection;
  rowKeys.value = selection?.map((item:any)=>item.rowKey);
}
</script>