wujianwei
6 天以前 89fd2cf7202c321512c2ea699a3a220a7138ed44
ui/admin-ui3/src/views/tms/tmsRoute/index.vue
@@ -1,5 +1,5 @@
<template>
  <basicContainer >
  <basicContainer>
    <avue-crud
        :option="option"
        :table-loading="pageF.loading"
@@ -50,311 +50,704 @@
</template>
<script setup name="tmsRoute" lang="ts">
  import {TmsRouteI,addTmsRoute, delTmsRoute, exportTmsRoute, getTmsRoute, listTmsRoute, updateTmsRoute} from "@/api/tms/tmsRoute";
  import useCurrentInstance from "@/utils/useCurrentInstance";
  import {computed,reactive, ref, toRefs} from "vue";
  import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
  import {usePagePlus} from "@/hooks/usePagePlus";
  import {hasPermission} from "@/utils/permissionUtils";
import {
  TmsRouteI,
  addTmsRoute,
  delTmsRoute,
  exportTmsRoute,
  getTmsRoute,
  listTmsRoute,
  updateTmsRoute
} from "@/api/tms/tmsRoute";
import useCurrentInstance from "@/utils/useCurrentInstance";
import {computed, reactive, ref, toRefs} from "vue";
import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
import {usePagePlus} from "@/hooks/usePagePlus";
import {hasPermission} from "@/utils/permissionUtils";
import {getArea, getCity, getProvince, getStreet} from "@/api/tms/tmsRegion";
  const { proxy } = useCurrentInstance();
  const crudRef = ref();
const {proxy} = useCurrentInstance();
const crudRef = ref();
  const permissionList = computed(()=>{
    return {
      addBtn: hasPermission(["tms:tmsRoute:add"]),
      delBtn: hasPermission(["tms:tmsRoute:remove"]),
      editBtn: hasPermission(["tms:tmsRoute:edit"]),
      viewBtn: hasPermission(["tms:tmsRoute:query"]),
    }
  })
const permissionList = computed(() => {
  return {
    addBtn: hasPermission(["tms:tmsRoute:add"]),
    delBtn: hasPermission(["tms:tmsRoute:remove"]),
    editBtn: hasPermission(["tms:tmsRoute:edit"]),
    viewBtn: hasPermission(["tms:tmsRoute:query"]),
  }
})
  const data = reactive({
    form:<TmsRouteI>{},
    queryParams:<TmsRouteI&PageQueryInterface>{},
    page: <PagesInterface>{
      pageSize: 10,
      total: 0,
      currentPage: 1,
    },
    selectionList:[],
  })
  const {queryParams,form,page,selectionList} = toRefs(data);
  const option = ref({
    pageKey: 'TmsRoute',
    rowKey: 'id',
    column: {
                                id: {
          label: '主键ID',
                  addDisplay : false,
        editDisplay : false,
        viewDisplay : false,
        hide : true,
        search : false,
                  },
                                systemCode: {
const data = reactive({
  form: <TmsRouteI>{},
  queryParams: <TmsRouteI & PageQueryInterface>{},
  page: <PagesInterface>{
    pageSize: 10,
    total: 0,
    currentPage: 1,
  },
  selectionList: [],
})
const {queryParams, form, page, selectionList} = toRefs(data);
const option = ref({
  pageKey: 'TmsRoute',
  rowKey: 'id',
  labelWidth: 120,
  group: [
    {
      label: '基本信息',
      prop: 'jbxx',
      column:{
        systemCode: {
          label: '系统编号',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                      rules: [
              {
                required: true,
                message: "系统编号不能为空", trigger: "blur" }
            ],                  },
                                routeCode: {
          addDisplay: false,
          editDisplay: true, disabled: true,
          viewDisplay: true,
          hide: false,
          search: true,
          rules: [
            {
              required: true,
              message: "系统编号不能为空", trigger: "blur"
            }
          ],
        },
        routeCode: {
          label: '路线编号',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                      rules: [
              {
                required: true,
                message: "路线编号不能为空", trigger: "blur" }
            ],                  },
                                routeName: {
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
          hide: false,
          search: true,
          rules: [
            {
              required: true,
              message: "路线编号不能为空", trigger: "blur"
            }
          ],
        },
        routeName: {
          label: '路线名称',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                      rules: [
              {
                required: true,
                message: "路线名称不能为空", trigger: "blur" }
            ],                  },
                                routeType: {
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
          hide: false,
          search: true,
          rules: [
            {
              required: true,
              message: "路线名称不能为空", trigger: "blur"
            }
          ],
        },
        routeType: {
          label: '路线类型',
                      type: 'select', dataType:'string', dicUrl: '/system/dict/data/type/route_type',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                      rules: [
              {
                required: true,
                message: "路线类型不能为空", trigger: "change"
                 }
            ],                  },
                                transportMode: {
          type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/route_type',
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
          hide: false,
          search: true,
          rules: [
            {
              required: true,
              message: "路线类型不能为空", trigger: "change"
            }
          ],
        },
        transportMode: {
          label: '运输方式',
                      type: 'select', dataType:'string', dicUrl: '/system/dict/data/type/transport_mode',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                      rules: [
              {
                required: true,
                message: "运输方式不能为空", trigger: "change"
                 }
            ],                  },
                                startArea: {
          label: '起点区域',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                      rules: [
              {
                required: true,
                message: "起点区域不能为空", trigger: "blur" }
            ],                  },
                                startWarehouse: {
          label: '起点仓库,关联仓库管理',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                  },
                                endArea: {
          label: '终点区域',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                      rules: [
              {
                required: true,
                message: "终点区域不能为空", trigger: "blur" }
            ],                  },
                                endWarehouse: {
          label: '终点仓库,关联仓库管理',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                  },
                                viaStations: {
          label: '途经站点,多站点用逗号分隔',
                      type: 'textarea', minRows: 3, maxRows: 5,
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                  },
                                distanceKm: {
          label: '路线里程',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                      rules: [
              {
                required: true,
                message: "路线里程不能为空", trigger: "blur" }
            ],                  },
                                estimatedHours: {
          label: '预计耗时',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                  },
                                routeGroup: {
          label: '所属线路组,便于批量维护',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                  },
                                suitableVehicleType: {
          label: '适配车型',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                  },
                                suitableTrayType: {
          label: '托架类型',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                  },
                                routeStatus: {
          label: '路线状态',
                      type: 'select', dataType:'string', dicUrl: '/system/dict/data/type/route_status',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                      rules: [
              {
                required: true,
                message: "路线状态不能为空", trigger: "change"
                 }
            ],                  },
                                isCommon: {
          label: '是否常用路线',
                      type: 'radio', dicUrl: '/system/dict/data/type/sys_number_is',
                  addDisplay :true,
        editDisplay :true,
        viewDisplay :true,
        hide :false,
        search :true,
                      rules: [
              {
                required: true,
                message: "是否常用路线不能为空", trigger: "blur" }
            ],                  },
                                status: {
          label: '状态',
                      type: 'radio', dicUrl: '/system/dict/data/type/sys_normal_disable',
                  addDisplay : false,
        editDisplay : false,
        viewDisplay :true,
        hide :false,
        search :true,
                      rules: [
              {
                required: true,
                message: "状态不能为空", trigger: "blur" }
            ],                  },
                                createBy: {
          label: '创建人',
                  addDisplay : false,
        editDisplay : false,
        viewDisplay : false,
        hide : true,
        search : false,
                  },
                                createTime: {
          label: '创建时间',
                      type: 'date', valueFormat: 'YYYY-MM-DD',
                  addDisplay : false,
        editDisplay : false,
        viewDisplay : false,
        hide : true,
        search : false,
                  },
                                updateBy: {
          label: '更新人',
                  addDisplay : false,
        editDisplay : false,
        viewDisplay : false,
        hide :false,
        search : false,
                  },
                                updateTime: {
          label: '更新时间',
                      type: 'date', valueFormat: 'YYYY-MM-DD',
                  addDisplay : false,
        editDisplay : false,
        viewDisplay : false,
        hide :false,
        search : false,
                  },
                                remark: {
          label: '路线补充说明',
                      type: 'textarea', minRows: 3, maxRows: 5,
                  addDisplay :true,
        editDisplay :true,
        viewDisplay : false,
        hide : true,
        search : false,
                  },
          }
  })
  const { tableData,pageF,rowSave,rowUpdate,rowDel,beforeOpen,searchChange,
    searchReset,selectionChange,onLoad,currentChange,sizeChange,handleDelete,handleExport,handleUpdate,refreshChange} = usePagePlus({
    form:form,
    option:option,
    queryParams:queryParams,
    idKey:'id',
    page:page.value,
    getListApi:listTmsRoute,
    getDetailApi:getTmsRoute,
    exportApi:exportTmsRoute,
    deleteApi:delTmsRoute,
    addApi:addTmsRoute,
    updateApi:updateTmsRoute,
    handleUpdateFunc:()=>{
      crudRef.value.rowEdit(selectionList.value[0]);
          type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/transport_mode',
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
          hide: false,
          search: true,
          rules: [
            {
              required: true,
              message: "运输方式不能为空", trigger: "change"
            }
          ],
        },
      }
    },
    handleSelectionChangeFunc:(selection:any)=>{
      selectionList.value = selection;
    {
      label: '路线详情',
      prop: 'lxxx',
      column: {
        startArea: {
          label: '起点区域',type:'cascader',
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
          hide: false,
          search: true,
          lazy: true,
          props: {
            label: 'name',
            value: 'code'
          },
          rules: [
            {
              required: true,
              message: "起点区域不能为空", trigger: "blur"
            }
          ],
          lazyLoad (node:any, resolve:any) {
            const stopLevel = 3;
            const level = node.level;
            const data = node.data || {};
            const code = data.code;
            let list:any = [];
            const callback = () => {
              resolve((list || []).map((ele:any) => ({
                ...ele,
                leaf: level >= stopLevel
              })));
            };
            if (level === 0) {
              getProvince().then(res => {
                list = res.data || [];
                callback();
              });
            } else if (level === 1) {
              getCity(code).then(res => {
                list = res.data ||[];
                callback();
              });
            } else if (level === 2) {
              getArea(code).then(res => {
                list = res.data ||  [];
                callback();
              });
            }else if (level === 3) {
              getStreet(code).then(res => {
                list = res.data || [];
                callback();
              });
            } else {
              callback();
            }
          }
        },
        startWarehouse: {
          label: '起点仓库',
          type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
        },
        endArea: {
          label: '终点区域',
          addDisplay: true,
          editDisplay: true,type:'cascader',
          viewDisplay: true,
          rules: [
            {
              required: true,
              message: "终点区域不能为空", trigger: "blur"
            }
          ],
          lazy: true,
          props: {
            label: 'name',
            value: 'code'
          },
          lazyLoad (node:any, resolve:any) {
            const stopLevel = 3;
            const level = node.level;
            const data = node.data || {};
            const code = data.code;
            let list:any = [];
            const callback = () => {
              resolve((list || []).map((ele:any) => ({
                ...ele,
                leaf: level >= stopLevel
              })));
            };
            if (level === 0) {
              getProvince().then(res => {
                list = res.data || [];
                callback();
              });
            } else if (level === 1) {
              getCity(code).then(res => {
                list = res.data ||[];
                callback();
              });
            } else if (level === 2) {
              getArea(code).then(res => {
                list = res.data ||  [];
                callback();
              });
            }else if (level === 3) {
              getStreet(code).then(res => {
                list = res.data || [];
                callback();
              });
            } else {
              callback();
            }
          }
        },
        endWarehouse: {
          label: '终点仓库',
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
          type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
        },
        viaStations: {
          label: '途经站点',
          type: 'textarea', minRows: 3, maxRows: 5,
          addDisplay: true,span:24,
          editDisplay: true,
          viewDisplay: true,
          hide: false, placeholder: '请输入途经站点,多站点用逗号分隔',
          search: true,
        },
        distanceKm: {
          label: '路线里程',
          addDisplay: true,
          editDisplay: true,append: 'Km',
          viewDisplay: true,
          hide: false,
          search: true,
          rules: [
            {
              required: true,
              message: "路线里程不能为空", trigger: "blur"
            }
          ],
        },
        estimatedHours: {
          label: '预计耗时',
          addDisplay: true,append:'小时',
          editDisplay: true,
          viewDisplay: true,
          hide: false,
          search: true,
        },
      },
    },
    {
      label: '关联信息',
      prop: 'glxx',
      column: {
        routeGroup: {
          label: '所属线路组',
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
          hide: false,
          search: true,
        },
        suitableVehicleType: {
          label: '适配车型',
          addDisplay: true,
          type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/license_type',
          editDisplay: true,
          viewDisplay: true,
          hide: false,
          search: true,
        },
        suitableTrayType: {
          label: '托架类型',
          addDisplay: true,
          type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/shelf_type',
          editDisplay: true,
          viewDisplay: true,
          hide: false,
          search: true,
        },
      }
    },{
    label: '状态信息',
      prop: 'ztxx',
      column: {
        routeStatus: {
          label: '路线状态',
          type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/route_status',
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
          hide: false,
          search: true,
          rules: [
            {
              required: true,
              message: "路线状态不能为空", trigger: "change"
            }
          ],
        },
        isCommon: {
          label: '是否常用路线',dataType: 'string',
          type: 'radio', dicUrl: '/system/dict/data/type/sys_number_is',
          addDisplay: true,
          editDisplay: true,
          viewDisplay: true,
          hide: false,
          search: true,
          rules: [
            {
              required: true,
              message: "是否常用路线不能为空", trigger: "blur"
            }
          ],
        },
      }
    },{
    label: '其他信息',
      prop: 'qtxx',
      column: {
        status: {
          label: '状态',dataType: 'string',
          type: 'radio', dicUrl: '/system/dict/data/type/sys_normal_disable',
          addDisplay: false,
          editDisplay: false,
          viewDisplay: true,
          hide: false,
          search: true,
          rules: [
            {
              required: true,
              message: "状态不能为空", trigger: "blur"
            }
          ],
        },
        createBy: {
          label: '创建人',
          addDisplay: false,
          editDisplay: false,
          viewDisplay: true,
          hide: true,
          search: false,
        },
        createTime: {
          label: '创建时间',
          type: 'date', valueFormat: 'YYYY-MM-DD',
          addDisplay: false,
          editDisplay: false,
          viewDisplay: true,
          hide: true,
          search: false,
        },
        updateBy: {
          label: '更新人',
          addDisplay: false,
          editDisplay: false,
          viewDisplay: true,
          hide: false,
          search: false,
        },
        updateTime: {
          label: '更新时间',
          type: 'date', valueFormat: 'YYYY-MM-DD',
          addDisplay: false,
          editDisplay: false,
          viewDisplay: true,
          hide: false,
          search: false,
        },
        remark: {
          label: '备注',
          type: 'textarea', minRows: 3, maxRows: 5,
          addDisplay: true,span:24,
          editDisplay: true,
          viewDisplay: true,
          hide: true,
          search: false,
        },
      }
    }
  })
  ],
  column: {
    systemCode: {
      label: '系统编号',
      display: false,
      hide: false,
      search: true,minWidth:150,
    },
    routeCode: {
      label: '路线编号',
      display: false,minWidth:150,
      hide: false,
      search: true,
    },
    routeName: {
      label: '路线名称',
      display: false,minWidth:150,
      hide: false,
      search: true,
    },
    routeType: {
      label: '路线类型',
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/route_type',
      display: false,
      hide: false,
      search: true,minWidth:150,
    },
    transportMode: {
      label: '运输方式',
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/transport_mode',
      display: false,
      hide: false,minWidth:150,
      search: true,
    },
    // startArea: {
    //   label: '起点区域',
    //   display: false,type:'cascader',
    //   hide: false,
    //   search: true,minWidth:150,
    //   lazy: true,
    //   props: {
    //     label: 'name',
    //     value: 'code'
    //   },
    //   rules: [
    //     {
    //       required: true,
    //       message: "起点区域不能为空", trigger: "blur"
    //     }
    //   ],
    //   lazyLoad (node:any, resolve:any) {
    //     const stopLevel = 3;
    //     const level = node.level;
    //     const data = node.data || {};
    //     const code = data.code;
    //     let list:any = [];
    //     const callback = () => {
    //       resolve((list || []).map((ele:any) => ({
    //         ...ele,
    //         leaf: level >= stopLevel
    //       })));
    //     };
    //
    //     if (level === 0) {
    //       getProvince().then(res => {
    //         list = res.data || [];
    //         callback();
    //       });
    //     } else if (level === 1) {
    //       getCity(code).then(res => {
    //         list = res.data ||[];
    //         callback();
    //       });
    //     } else if (level === 2) {
    //       getArea(code).then(res => {
    //         list = res.data ||  [];
    //         callback();
    //       });
    //     }else if (level === 3) {
    //       getStreet(code).then(res => {
    //         list = res.data || [];
    //         callback();
    //       });
    //     } else {
    //       callback();
    //     }
    //   }
    // },
    startWarehouse: {
      label: '起点仓库',
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
      display: false,minWidth:150,
      hide: false,
      search: true,
    },
    // endArea: {
    //   label: '终点区域',
    //   display: false,type:'cascader',
    //   minWidth:150,
    //   hide: false,
    //   search: true,
    //   props: {
    //     label: 'name',
    //     value: 'code'
    //   },
    //   lazyLoad (node:any, resolve:any) {
    //
    //     const stopLevel = 3;
    //     const level = node.level;
    //     const data = node.data || {};
    //     const code = data.code;
    //     let list:any = [];
    //     const callback = () => {
    //       resolve((list || []).map((ele:any) => ({
    //         ...ele,
    //         leaf: level >= stopLevel
    //       })));
    //     };
    //
    //     if (level === 0) {
    //       getProvince().then(res => {
    //         list = res.data || [];
    //         callback();
    //       });
    //     } else if (level === 1) {
    //       getCity(code).then(res => {
    //         list = res.data ||[];
    //         callback();
    //       });
    //     } else if (level === 2) {
    //       getArea(code).then(res => {
    //         list = res.data ||  [];
    //         callback();
    //       });
    //     }else if (level === 3) {
    //       getStreet(code).then(res => {
    //         list = res.data || [];
    //         callback();
    //       });
    //     } else {
    //       callback();
    //     }
    //   }
    // },
    endWarehouse: {
      label: '终点仓库',
      display: false,
      hide: false,minWidth:150,
      search: true,
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
    },
    distanceKm: {
      label: '路线里程',
      display: false,
      hide: false,minWidth:150,
      search: true,
    },
    estimatedHours: {
      label: '预计耗时',
      display: false,
      hide: false,minWidth:150,
      search: true,
    },
    suitableVehicleType: {
      label: '适配车型',
      display: false,
      hide: false,minWidth:150,
      search: true,
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/license_type',
    },
    suitableTrayType: {
      label: '托架类型',
      display: false,
      hide: false,minWidth:150,
      search: true,
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/shelf_type',
    },
    routeStatus: {
      label: '路线状态',
      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/route_status',
      display: false,minWidth:150,
      hide: false,
      search: true,
    },
    isCommon: {
      label: '是否常用路线',
      type: 'radio',dataType: 'string',  dicUrl: '/system/dict/data/type/sys_number_is',
      display: false,minWidth:150,
      hide: false,
      search: true,
    },
    status: {
      label: '状态',
      type: 'radio',dataType: 'string',  dicUrl: '/system/dict/data/type/sys_normal_disable',
      display: false,
      hide: false,minWidth:150,
      search: true,
    },
    updateBy: {
      label: '更新人',
      display: false,
      hide: false,
      search: false,minWidth:150,
    },
    updateTime: {
      label: '更新时间',
      display: false,
      hide: false, minWidth:180,
      search: false,
    },
  }
})
const {
  tableData,
  pageF,
  rowSave,
  rowUpdate,
  rowDel,
  beforeOpen,
  searchChange,
  searchReset,
  selectionChange,
  onLoad,
  currentChange,
  sizeChange,
  handleDelete,
  handleExport,
  handleUpdate,
  refreshChange
} = usePagePlus({
  form: form,
  option: option,
  queryParams: queryParams,
  idKey: 'id',
  page: page.value,
  getListApi: listTmsRoute,
  getDetailApi: getTmsRoute,
  exportApi: exportTmsRoute,
  deleteApi: delTmsRoute,
  addApi: addTmsRoute,
  updateApi: updateTmsRoute,
  handleUpdateFunc: () => {
    crudRef.value.rowEdit(selectionList.value[0]);
  },
  handleSelectionChangeFunc: (selection: any) => {
    selectionList.value = selection;
  },
  rowSaveBegin:(row:any)=>{
    if (Array.isArray(row.startArea)){
      row.startArea = row.startArea.join(",");
    }
    if (Array.isArray(row.endArea)){
      row.endArea = row.endArea.join(",");
    }
  },
  rowUpdateBegin:(row:any)=>{
    if (Array.isArray(row.startArea)){
      row.startArea = row.startArea.join(",");
    }
    if (Array.isArray(row.endArea)){
      row.endArea = row.endArea.join(",");
    }
  },
  handleEndOpenFunc:()=>{
    if (form.value.startArea){
      form.value.startArea = form.value.startArea.split(",");
    }
    if (form.value.endArea){
      form.value.endArea = form.value.endArea.split(",");
    }
  }
})
</script>