yusheng 1 سال پیش
والد
کامیت
559ec50192

+ 3 - 3
src/BIZComponents/innerdetails.vue

@@ -153,7 +153,7 @@
               :show-overflow-tooltip="true"
             >
             </el-table-column>
-            <el-table-column
+            <!-- <el-table-column
               label="最小包装单元"
               align="center"
               width="120"
@@ -164,10 +164,10 @@
                   row.packingUnit
                 }}
               </template>
-            </el-table-column>
+            </el-table-column> -->
 
             <el-table-column
-              label="包装数量"
+              label="数量"
               prop="packingQuantity"
               align="center"
             >

+ 8 - 4
src/components/addDoc/file-edit.vue

@@ -183,7 +183,8 @@
       async getTreeCode() {
         let nodeData = {};
         await this.$nextTick(() => {
-          nodeData = this.$refs.cascaderRef.getCheckedNodes();
+          // console.log(this.$refs,'this.$refs')
+          nodeData = this.$refs.cascaderRef&&this.$refs.cascaderRef.getCheckedNodes();
         });
         this.nodeData = {
           id: nodeData[0]?.data?.id,
@@ -196,15 +197,18 @@
         this.options = this.nodeData.id ? await listCode(this.nodeData) : [];
         if (this.options.length > 0) {
           this.form.businessCodeId = this.options[0].id;
+          this.form.codeType = this.options[0].parentId;
         } else {
           this.form.businessCodeId = '';
         }
       },
       async open() {
         this.showEditFlag = true;
-        this.list = await selectTreeList();
-        await this.initFileCode();
-        this.setTree(this.list);
+        this.$nextTick(async () => {
+          this.list = await selectTreeList();
+          await this.initFileCode();
+          this.setTree(this.list);
+        });
       },
 
       setTree(data) {

+ 160 - 165
src/components/addDoc/file-table-listTemplate.vue

@@ -9,7 +9,6 @@
       row-key="id"
       :selection.sync="selection"
       :toolbar="false"
-      height="600px"
     >
       <!-- 操作列 -->
       <template v-slot:action="{ row }">
@@ -28,176 +27,172 @@
 </template>
 
 <script>
-  import { filePageAPI } from './api';
-  import browse from './browse.vue';
+import { filePageAPI } from './api';
+import browse from './browse.vue';
 
-  export default {
-    components: { browse },
-    props: {
-      // 上级
-      parentData: {
-        type: Object,
-        default: () => {}
-      },
-
-      disabledTableList: {
-        //已选择列表
-        default: () => []
-      }
+export default {
+  components: { browse },
+  props: {
+    // 上级
+    parentData: {
+      type: Object,
+      default: () => {}
     },
 
-    data() {
-      return {
-        selection: [],
-        columns: [
-          {
-            width: 45,
-            type: 'selection',
-            columnKey: 'selection',
-            align: 'center',
-            reserveSelection: true,
-            selectable: (row, index) => {
-              return !this.disabledTableList
-                .map((item) => item.id)
-                .includes(row.id);
-            }
-          },
-          {
-            label: '编码',
-            prop: 'code',
-            width: 180,
-            align: 'center',
-            fixed: 'left',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'name',
-            label: '文档名称',
-            align: 'center',
-            slot: 'name',
-            showOverflowTooltip: true,
-            minWidth: 200
-          },
-          {
-            prop: 'storagePath',
-            label: '文件名称',
-            align: 'center',
+    disabledTableList: {
+      //已选择列表
+      default: () => []
+    }
+  },
 
-            showOverflowTooltip: true,
-            minWidth: 200,
-            formatter: (_row, _column, cellValue) => {
-              return cellValue[0]?.name;
-            }
-          },
-          {
-            prop: 'version',
-            label: '版本',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100
-          },
-          {
-            prop: 'checkOutUserName',
-            label: '检出人',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100
-          },
-          {
-            prop: 'checkOutStatus',
-            label: '检出状态',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100,
-            formatter: (_row, _column, cellValue) => {
-              return cellValue == 1 ? '已检出' : '';
-            }
-          },
-          {
-            prop: 'checkOutTime',
-            label: '检出时间',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 160
-          },
-          {
-            prop: 'createUserName',
-            label: '创建人',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100
-          },
-          {
-            prop: 'createTime',
-            label: '创建时间',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 160,
-            formatter: (_row, _column, cellValue) => {
-              return this.$util.toDateString(cellValue);
-            }
-          },
-          {
-            prop: 'updateUserName',
-            label: '修改人',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100
-          },
-          {
-            prop: 'updateTime',
-            label: '修改时间',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 160
-          },
-          {
-            prop: 'sizeUnit',
-            label: '文档大小',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100
-          },
-          {
-            columnKey: 'action',
-            label: '操作',
-            width: 150,
-            align: 'center',
-            resizable: false,
-            slot: 'action',
-            showOverflowTooltip: true,
-            fixed: 'right'
+  data() {
+    return {
+      selection: [],
+      columns: [
+        {
+          width: 45,
+          type: 'selection',
+          columnKey: 'selection',
+          align: 'center',
+          selectable: (row, index) => {
+            return !this.disabledTableList
+              .map((item) => item.id)
+              .includes(row.id);
           }
-        ]
-      };
-    },
-    created() {},
+        },
+        {
+          label: '编码',
+          prop: 'code',
+          width: 180,
+          align: 'center',
+          fixed: 'left',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'name',
+          label: '文档名称',
+          align: 'center',
+          slot: 'name',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'storagePath',
+          label: '文件名称',
+          align: 'center',
+
+          showOverflowTooltip: true,
+          minWidth: 200,
+          formatter: (_row, _column, cellValue) => {
+            return cellValue[0]?.name;
+          }
+        },
+        {
+          prop: 'version',
+          label: '版本',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100
+        },
+        {
+          prop: 'checkOutUserName',
+          label: '检出人',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100
+        },
+        {
+          prop: 'checkOutStatus',
+          label: '检出状态',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100,
+          formatter: (_row, _column, cellValue) => {
+            return cellValue == 1 ? '已检出' : '';
+          }
+        },
+        {
+          prop: 'checkOutTime',
+          label: '检出时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 160
+        },
+        {
+          prop: 'createUserName',
+          label: '创建人',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100
+        },
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 160,
+          formatter: (_row, _column, cellValue) => {
+            return this.$util.toDateString(cellValue);
+          }
+        },
+        {
+          prop: 'updateUserName',
+          label: '修改人',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100
+        },
+        {
+          prop: 'updateTime',
+          label: '修改时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 160
+        },
+        {
+          prop: 'sizeUnit',
+          label: '文档大小',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100
+        },
+        {
+          columnKey: 'action',
+          label: '操作',
+          width: 150,
+          align: 'center',
+          resizable: false,
+          slot: 'action',
+          showOverflowTooltip: true,
+          fixed: 'right'
+        }
+      ]
+    };
+  },
+  created() {},
 
-    methods: {
-      /* 表格数据源 */
-      datasource({ page, limit, where, order }) {
-        return filePageAPI({
-          ...where,
-          ...order,
-          pageNum: page,
-          size: limit,
-          directoryId: this.parentData?.id
-        });
-      },
-      /* 刷新表格 */
-      reload(where) {
-        this.$refs.table.reload({ pageNum: 1, where: where });
-      },
+  methods: {
+    /* 表格数据源 */
+    datasource({ page, limit, where, order }) {
+      return filePageAPI({
+        ...where,
+        ...order,
+        pageNum: page,
+        size: limit,
+        directoryId: this.parentData?.id
+      });
+    },
+    /* 刷新表格 */
+    reload(where) {
+      this.$refs.table.reload({ pageNum: 1, where: where });
+    },
 
-      browseOpen(row) {
-        this.$refs.browseRef.open(row);
-      },
-      getTableList() {
-        return JSON.parse(JSON.stringify(this.selection));
-      },
-      setSelectedRows(data) {
-        this.$refs.table.setSelectedRows(data);
-      }
+    browseOpen(row) {
+      this.$refs.browseRef.open(row);
+    },
+    getTableList() {
+      return JSON.parse(JSON.stringify(this.selection));
     }
-  };
+  }
+};
 </script>

+ 0 - 2
src/components/addDoc/getCode.vue

@@ -63,7 +63,6 @@
 
 <script>
   import { selectTreeList, listParentId, getCode } from './api';
-  import headerTitle from '@/components/header-title/index.vue';
 
   export default {
     data() {
@@ -92,7 +91,6 @@
       }
     },
     components: {
-      headerTitle
     },
     created() {},
     methods: {

+ 5 - 0
src/components/addDoc/index.vue

@@ -6,6 +6,7 @@
         v-if="type != 'view'"
         type="primary"
         @click="handleUpload"
+        :size="size"
       >
         上传</el-button
       >
@@ -43,6 +44,10 @@
         default: () => {
           return [];
         }
+      },
+      size: {
+        type: String,
+        default: 'mini'
       }
     },
     data() {

+ 0 - 1
src/components/addDoc/main.vue

@@ -212,7 +212,6 @@ export default {
         return;
       }
       this.tableList.push(...list);
-      this.$refs.doc_templateRef.$refs.tableRef.setSelectedRows([])
     }
   }
 };

+ 2 - 2
src/components/addDoc/util.js

@@ -1,6 +1,6 @@
 import store from '@/store';
-const userId = store.state.user.info.userId
-const userName = store.state.user.info.name
+const userId = store.state.user?.info?.userId
+const userName = store.state.user?.info?.name
 export function isPower(data = {}, power, selection = []) {
 
     if (power == 'add' && data.userAuthority.length == 0) { //文件夹默认开放新增权限

+ 5 - 3
src/main.js

@@ -51,10 +51,11 @@ import 'bpmn-js/dist/assets/diagram-js.css';
 import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css';
 import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css';
 import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css';
+import fileMain from '@/components/addDoc/index.vue';
+Vue.component('fileMain', fileMain);
+
 function render(props = {}) {
-  const { container, routerBase, fileMain } = props;
-  
-  Vue.component('fileMain', fileMain);
+  const { container, routerBase } = props;
 
   // const router = new VueRouter({
   //   base: window.__POWERED_BY_QIANKUN__ ? routerBase : process.env.BASE_URL,
@@ -74,6 +75,7 @@ if (!window.__POWERED_BY_QIANKUN__) {
   // 这里是子应用独立运行的环境,实现子应用的登录逻辑
   render();
 }
+// window.location.reload()
 
 export async function bootstrap() {
   console.log('[vue] vue app bootstraped');

+ 43 - 32
src/views/contractManage/contractBook/index.vue

@@ -35,36 +35,33 @@
             >
               <!-- 表头工具栏 -->
               <template v-slot:toolbar>
-                <el-button
-                  size="small"
-                  type="primary"
-                  icon="el-icon-plus"
-                  class="ele-btn-icon"
-                  @click="openEdit('add', {})"
-                >
-                  新建
-                </el-button>
-
-                <el-button
-                  size="small"
-                  type="danger"
-                  el-icon-delete
-                  class="ele-btn-icon"
-                  @click="allDelBtn"
-                  :disabled="selection?.length === 0"
-                >
-                  批量删除
-                </el-button>
+                <div class="flex-end">
+                  <div>
+                    <el-button
+                      size="small"
+                      type="primary"
+                      icon="el-icon-plus"
+                      class="ele-btn-icon"
+                      @click="openEdit('add', {})"
+                    >
+                      新建
+                    </el-button>
 
-                <!--                <el-button-->
-                <!--                  size="small"-->
-                <!--                  type="primary"-->
-                <!--                  class="ele-btn-icon"-->
-                <!--                  @click="contractBatchSubmit"-->
-                <!--                  :disabled="selection?.length === 0"-->
-                <!--                >-->
-                <!--                  批量提交-->
-                <!--                </el-button>-->
+                    <el-button
+                      size="small"
+                      type="danger"
+                      el-icon-delete
+                      class="ele-btn-icon"
+                      @click="allDelBtn"
+                      :disabled="selection?.length === 0"
+                    >
+                      批量删除
+                    </el-button>
+                  </div>
+                  <div class="title">
+                    合同总金额:{{ extInfo.contractTotalPrice }}元
+                  </div>
+                </div>
               </template>
 
               <!-- 查看详情列 -->
@@ -258,6 +255,7 @@
         processSubmitDialogFlag: false,
         addOrEditDialogFlag: false,
         treeList: [], //左边分类数据
+        extInfo: {},
         columns: [
           {
             width: 45,
@@ -471,18 +469,20 @@
         this.reload({ categoryId: data.id });
       },
       /* 表格数据源 */
-      datasource({ page, limit, where, order }) {
+     async datasource({ page, limit, where, order }) {
         if (this.businessOpportunityData.id) {
           where['opportunityId'] = this.businessOpportunityData.id;
         }
         if (this.contactData.id) {
           where['contactId'] = this.contactData.id;
         }
-        return getTableList({
+       const data= await getTableList({
           pageNum: page,
           size: limit,
           ...where
-        });
+        })
+        this.extInfo = data.extInfo;
+        return data
       },
 
       //获取左边分类
@@ -628,4 +628,15 @@
       margin-left: 10px;
     }
   }
+  .flex-end{
+    display: flex;
+    align-items: center;
+    .title{
+      font-size: 14px;
+      flex:1;
+      display: flex;
+      padding-right: 20px;
+      justify-content: flex-end;
+    }
+  }
 </style>

+ 268 - 265
src/views/marketManagem/components/taskInfoTable.vue

@@ -146,16 +146,10 @@
           >
             <el-date-picker
               v-model="row.planTimeStart"
-              :picker-options="{
-                disabledDate: (time) => {
-                  return (
-                    row.planTimeEnd &&
-                    time.getTime() > new Date(row.planTimeEnd)
-                  );
-                }
-              }"
               type="datetime"
-              @change="() => handleCheckCarOrDriverIsBusy(row)"
+              @change="
+                () => handleCheckCarOrDriverIsBusy(row, 'planTimeStart', $index)
+              "
               style="width: 90%"
               value-format="yyyy-MM-dd HH:mm:ss"
               placeholder="选择日期时间"
@@ -177,16 +171,10 @@
           >
             <el-date-picker
               v-model="row.planTimeEnd"
-              :picker-options="{
-                disabledDate: (time) => {
-                  return (
-                    row.planTimeStart &&
-                    time.getTime() < new Date(row.planTimeStart)
-                  );
-                }
-              }"
               type="datetime"
-              @change="() => handleCheckCarOrDriverIsBusy(row)"
+              @change="
+                () => handleCheckCarOrDriverIsBusy(row, 'planTimeEnd', $index)
+              "
               style="width: 90%"
               value-format="yyyy-MM-dd HH:mm:ss"
               placeholder="选择日期时间"
@@ -204,7 +192,7 @@
             <el-input type="number" v-model="row.cost"></el-input>
           </el-form-item>
         </template>
-        
+
         <!-- <template v-slot:taskType="{row,$index}">
           <el-form-item :prop="'datasource.'+$index+'.taskType'"
                         :rules="{required:false,message:'请选择任务类型',trigger:['blur','change']}">
@@ -236,264 +224,279 @@
   </div>
 </template>
 
-
 <script>
-import { checkDriverIsBusyAPI } from '@/api/transportManager/shipManage';
-import SelectDriverDialog from '@/views/transportManager/shipManage/dispatchManage/components/selectDriverDialog.vue';
-import SelectCarDialog from '@/views/transportManager/shipManage/dispatchManage/components/selectCarDialog.vue';
-import { getSummaries } from '@/utils/util.js';
+  import { checkDriverIsBusyAPI } from '@/api/transportManager/shipManage';
+  import SelectDriverDialog from '@/views/transportManager/shipManage/dispatchManage/components/selectDriverDialog.vue';
+  import SelectCarDialog from '@/views/transportManager/shipManage/dispatchManage/components/selectCarDialog.vue';
+  import { getSummaries } from '@/utils/util.js';
 
-export default {
-  name: 'relatedInfoTable',
-  components: { SelectCarDialog, SelectDriverDialog },
-  props: {
-
-    dialogType: {
-      type: String,
-      default: ''
-    }
-  },
-  data() {
-    return {
-      editIndex: undefined, //当前修改数据的下标
-      selectDriverDialogFlag: false,
-      selectCarDialogFlag: false,
-      form: {
-        datasource: []
+  export default {
+    name: 'relatedInfoTable',
+    components: { SelectCarDialog, SelectDriverDialog },
+    props: {
+      dialogType: {
+        type: String,
+        default: ''
       }
-    };
-  },
-  computed: {
-    columns() {
-      let list = [
-        {
-          columnKey: 'index',
-          label: '序号',
-          type: 'index',
-          width: 55,
-          align: 'center',
-          showOverflowTooltip: true,
-          fixed: 'left'
-        },
-        {
-          prop: 'trakNumber',
-          label: '车牌号',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 160,
-          slot: 'trakNumber',
-          headerSlot: 'headerGLLXMC'
-        },
-        {
-          prop: 'startPlace',
-          label: '出发地',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 120,
-          slot: 'startPlace'
-        },
-        {
-          prop: 'endPlace',
-          label: '目的地',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 120,
-          slot: 'endPlace'
-        },
-        {
-          prop: 'planTimeStart',
-          label: '预计发车日期',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 240,
-          slot: 'planTimeStart'
-        },
-        {
-          prop: 'planTimeEnd',
-          label: '预计结束日期',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 240,
-          slot: 'planTimeEnd'
-        },
-        {
-          prop: 'driverName',
-          label: '司机',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 150,
-          slot: 'driverName'
-        },
-        {
-          prop: 'phone',
-          label: '司机电话',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 120,
-          slot: 'phone'
-        },
-        {
-          prop: 'cost',
-          label: '预计费用',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 120,
-          slot: 'cost'
-        },
-
-        {
-          prop: 'remark',
-          label: '备注',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 120,
-          slot: 'remark'
-        }
-      ];
-      let action = [
-        {
-          columnKey: 'action',
-          slot: 'action',
-          label: '操作',
-          resizable: false,
-          width: 80,
-          align: 'center',
-          showOverflowTooltip: true,
-          fixed: 'right'
-        }
-      ];
-      this.dialogType === 'view'
-        ? (list = [...list])
-        : (list = [...list, ...action]);
-      return list;
-    }
-  },
-
-  methods: {
-    getSummaries(param) {
-      return getSummaries(param,'cost')
-    },
-    //新增任务信息数据
-    handleAddInfo() {
-      this.form.datasource.push({
-        driverId: '',
-        driverName: '',
-        endPlace: '',
-        phone: '',
-        planId: '',
-        planTimeEnd: '',
-        planTimeStart: '',
-        realEntTime: '',
-        realStartTime: '',
-        remark: '',
-        startPlace: '',
-        trakId: '',
-        trakNumber: '',
-        taskId: '',
-        taskType: '1',
-        taskCode: '',
-        cost: ''
-      });
-    },
-    setSelectData(val) {
-      this.$set(this.form.datasource[this.editIndex], 'taskId', val.id);
-      this.$set(this.form.datasource[this.editIndex], 'taskCode', val.code);
     },
-    //删除任务信息数据
-    handleDelInfo(index) {
-      this.form.datasource.splice(index, 1);
-    },
-    //修改任务类型
-    handleChangeFinLink(val, row, index) {
-      this.editIndex = index;
-      this.setSelectData({
-        id: '',
-        code: ''
-      });
-      this.$nextTick(() => {
-        this.$refs.form.clearValidate('datasource.' + index + '.taskCode');
-      });
-    },
-    //选择司机
-    handleDriver(row, index) {
-      this.editIndex = index;
-      this.selectDriverDialogFlag = true;
+    data() {
+      return {
+        editIndex: undefined, //当前修改数据的下标
+        selectDriverDialogFlag: false,
+        selectCarDialogFlag: false,
+        form: {
+          datasource: []
+        }
+      };
     },
-    //选择司机回调
-    getDriverInfo(row) {
-      this.$set(this.form.datasource[this.editIndex], 'driverId', row.driverId);
-      this.$set(
-        this.form.datasource[this.editIndex],
-        'driverName',
-        row.driverName
-      );
-      this.$set(this.form.datasource[this.editIndex], 'phone', row.phone);
+    computed: {
+      columns() {
+        let list = [
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            prop: 'trakNumber',
+            label: '车牌号',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 160,
+            slot: 'trakNumber',
+            headerSlot: 'headerGLLXMC'
+          },
+          {
+            prop: 'startPlace',
+            label: '出发地',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 120,
+            slot: 'startPlace'
+          },
+          {
+            prop: 'endPlace',
+            label: '目的地',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 120,
+            slot: 'endPlace'
+          },
+          {
+            prop: 'planTimeStart',
+            label: '预计发车日期',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 240,
+            slot: 'planTimeStart'
+          },
+          {
+            prop: 'planTimeEnd',
+            label: '预计结束日期',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 240,
+            slot: 'planTimeEnd'
+          },
+          {
+            prop: 'driverName',
+            label: '司机',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 150,
+            slot: 'driverName'
+          },
+          {
+            prop: 'phone',
+            label: '司机电话',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 120,
+            slot: 'phone'
+          },
+          {
+            prop: 'cost',
+            label: '预计费用',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 120,
+            slot: 'cost'
+          },
 
-      this.handleCheckCarOrDriverIsBusy(this.form.datasource[this.editIndex]);
-    },
-    //选择车辆
-    handleCar(row, index) {
-      this.editIndex = index;
-      this.selectCarDialogFlag = true;
+          {
+            prop: 'remark',
+            label: '备注',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 120,
+            slot: 'remark'
+          }
+        ];
+        let action = [
+          {
+            columnKey: 'action',
+            slot: 'action',
+            label: '操作',
+            resizable: false,
+            width: 80,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'right'
+          }
+        ];
+        this.dialogType === 'view'
+          ? (list = [...list])
+          : (list = [...list, ...action]);
+        return list;
+      }
     },
-    //选择车辆回调
-    getCarInfo(row) {
-      this.$set(
-        this.form.datasource[this.editIndex],
-        'driverId',
-        row.defaultDriverId
-      );
-      this.$set(
-        this.form.datasource[this.editIndex],
-        'driverName',
-        row.defaultDriver
-      );
-      this.$set(this.form.datasource[this.editIndex], 'phone', row.phone);
-      this.$set(
-        this.form.datasource[this.editIndex],
-        'trakNumber',
-        row.trakNumber
-      );
-      this.$set(this.form.datasource[this.editIndex], 'trakId', row.id);
 
-      this.handleCheckCarOrDriverIsBusy(this.form.datasource[this.editIndex]);
-    },
-    //检查车辆或司机是否在运输中
-    async handleCheckCarOrDriverIsBusy(row) {
-      return;
-      if (
-        (row.driverName || row.trakNumber) &&
-        row.planTimeStart &&
-        row.planTimeEnd
-      ) {
-        let data = await checkDriverIsBusyAPI(row);
-        console.log(data);
-        if (data.code == 1) {
-          this.$message.warning(data.message);
+    methods: {
+      getSummaries(param) {
+        return getSummaries(param, 'cost');
+      },
+      //新增任务信息数据
+      handleAddInfo() {
+        this.form.datasource.push({
+          driverId: '',
+          driverName: '',
+          endPlace: '',
+          phone: '',
+          planId: '',
+          planTimeEnd: '',
+          planTimeStart: '',
+          realEntTime: '',
+          realStartTime: '',
+          remark: '',
+          startPlace: '',
+          trakId: '',
+          trakNumber: '',
+          taskId: '',
+          taskType: '1',
+          taskCode: '',
+          cost: ''
+        });
+      },
+      setSelectData(val) {
+        this.$set(this.form.datasource[this.editIndex], 'taskId', val.id);
+        this.$set(this.form.datasource[this.editIndex], 'taskCode', val.code);
+      },
+      //删除任务信息数据
+      handleDelInfo(index) {
+        this.form.datasource.splice(index, 1);
+      },
+      //修改任务类型
+      handleChangeFinLink(val, row, index) {
+        this.editIndex = index;
+        this.setSelectData({
+          id: '',
+          code: ''
+        });
+        this.$nextTick(() => {
+          this.$refs.form.clearValidate('datasource.' + index + '.taskCode');
+        });
+      },
+      //选择司机
+      handleDriver(row, index) {
+        this.editIndex = index;
+        this.selectDriverDialogFlag = true;
+      },
+      //选择司机回调
+      getDriverInfo(row) {
+        this.$set(
+          this.form.datasource[this.editIndex],
+          'driverId',
+          row.driverId
+        );
+        this.$set(
+          this.form.datasource[this.editIndex],
+          'driverName',
+          row.driverName
+        );
+        this.$set(this.form.datasource[this.editIndex], 'phone', row.phone);
+
+        this.handleCheckCarOrDriverIsBusy(this.form.datasource[this.editIndex]);
+      },
+      //选择车辆
+      handleCar(row, index) {
+        this.editIndex = index;
+        this.selectCarDialogFlag = true;
+      },
+      //选择车辆回调
+      getCarInfo(row) {
+        this.$set(
+          this.form.datasource[this.editIndex],
+          'driverId',
+          row.defaultDriverId
+        );
+        this.$set(
+          this.form.datasource[this.editIndex],
+          'driverName',
+          row.defaultDriver
+        );
+        this.$set(this.form.datasource[this.editIndex], 'phone', row.phone);
+        this.$set(
+          this.form.datasource[this.editIndex],
+          'trakNumber',
+          row.trakNumber
+        );
+        this.$set(this.form.datasource[this.editIndex], 'trakId', row.id);
+
+        this.handleCheckCarOrDriverIsBusy(this.form.datasource[this.editIndex]);
+      },
+      //检查车辆或司机是否在运输中
+      //检查车辆或司机是否在运输中
+      async handleCheckCarOrDriverIsBusy(row, key, index) {
+        if (key) {
+          if (
+            new Date(row.planTimeEnd).getTime() <=
+            new Date(row.planTimeStart).getTime()
+          ) {
+            this.$message.warning(
+              key == 'planTimeEnd'
+                ? '结束时间不能小于发车时间!'
+                : '发车时间不能大于结束时间!'
+            );
+            this.$set(this.form.datasource[index], key, '');
+          }
         }
+        return;
+        if (
+          (row.driverName || row.trakNumber) &&
+          row.planTimeStart &&
+          row.planTimeEnd
+        ) {
+          let data = await checkDriverIsBusyAPI(row);
+          console.log(data);
+          if (data.code == 1) {
+            this.$message.warning(data.message);
+          }
+        }
+      },
+      //修改回显
+      putTableValue(data) {
+        if (data) {
+          this.form.datasource = data;
+        }
+      },
+      getTableValue() {
+        return this.form.datasource;
+      },
+      getTableValidate(callback) {
+        this.$refs.form.validate((valid) => {
+          callback(valid);
+        });
       }
-    },
-    //修改回显
-    putTableValue(data) {
-      if (data) {
-        this.form.datasource = data;
-      }
-    },
-    getTableValue() {
-      return this.form.datasource;
-    },
-    getTableValidate(callback) {
-      this.$refs.form.validate((valid) => {
-        callback(valid);
-      });
     }
-  }
-};
+  };
 </script>
 
-
 <style scoped lang="scss">
-:deep(.el-form-item) {
-  margin-bottom: 0;
-}
+  :deep(.el-form-item) {
+    margin-bottom: 0;
+  }
 </style>

+ 14 - 14
src/views/purchasingManage/purchaseOrder/components/addDialog.vue

@@ -1426,16 +1426,16 @@
             if (!v.productCode) {
               isTemporary.push(v.productName);
             }
-            tabList.forEach((v2, j) => {
-              if (
-                v.productCode == v2.productCode &&
-                v.taskId == v2.taskId &&
-                v.batchNo == v2.batchNo &&
-                i != j
-              ) {
-                is = true;
-              }
-            });
+            // tabList.forEach((v2, j) => {
+            //   if (
+            //     v.productCode == v2.productCode &&
+            //     v.taskId == v2.taskId &&
+            //     v.batchNo == v2.batchNo &&
+            //     i != j
+            //   ) {
+            //     is = true;
+            //   }
+            // });
           });
 
           if (isTemporary.length > 0) {
@@ -1447,10 +1447,10 @@
             return;
           }
 
-          if (is) {
-            this.$message.error('同产品,工序、批次号不能完全一致!');
-            return;
-          }
+          // if (is) {
+          //   this.$message.error('同产品,工序、批次号不能完全一致!');
+          //   return;
+          // }
           let productList = [
             ...tabList,
             ...rawDetailList.map((item) => {

+ 7 - 4
src/views/saleManage/businessOpportunity/components/addFollowDialog.vue

@@ -74,12 +74,15 @@
           ></el-input>
         </el-form-item>
         <el-form-item prop="files" label="附件">
-          <fileUpload
+          <!-- <fileUpload
             v-model="form.files"
             module="main"
             :showLib="false"
             :limit="5"
-          /> </el-form-item
+          />  -->
+          <fileMain v-model="form.files" ></fileMain>
+
+          </el-form-item
         >
       </el-form>
 
@@ -94,7 +97,7 @@
   import dictMixins from '@/mixins/dictMixins';
   import { copyObj } from '@/utils/util';
   import { deepClone } from '@/utils/index';
-  import fileUpload from '@/components/upload/fileUpload';
+  // import fileMain from '@/components/upload/fileUpload';
 
   import {
 
@@ -105,7 +108,7 @@
   export default {
     mixins: [dictMixins],
     components:{
-      fileUpload
+      // fileUpload
     },
     data() {
       let formDef = {

+ 1 - 0
src/views/saleManage/saleOrder/invoice/components/product-list.vue

@@ -190,6 +190,7 @@ export default {
     open(data) {
       this.currentData = data || [];
       this.visible = true;
+      this.radio=null
     },
     //获取订单详情
     async getSaleOrderDetail(id) {

+ 575 - 438
src/views/transportManager/shipManage/dispatchManage/components/taskInfoTable.vue

@@ -1,7 +1,6 @@
 <template>
   <div>
     <el-form ref="form" :model="form">
-
       <!-- 数据表格 -->
       <ele-pro-table
         ref="table"
@@ -16,114 +15,201 @@
         <!-- 表头工具栏 -->
         <template v-slot:toolbar>
           <el-button
-            v-if="dialogType!=='view'"
+            v-if="dialogType !== 'view'"
             size="small"
             type="primary"
             icon="el-icon-plus"
             class="ele-btn-icon"
-            @click="handleAddInfo">
+            @click="handleAddInfo"
+          >
             新增任务
           </el-button>
         </template>
 
-        <template v-slot:action="{row,$index}" v-if="dialogType!=='view'">
+        <template v-slot:action="{ row, $index }" v-if="dialogType !== 'view'">
           <el-popconfirm
             class="ele-action"
             title="确定要删除此信息吗?"
-            @confirm="handleDelInfo($index)">
+            @confirm="handleDelInfo($index)"
+          >
             <template v-slot:reference>
-              <el-link
-                type="danger"
-                :underline="false"
-                icon="el-icon-delete">
+              <el-link type="danger" :underline="false" icon="el-icon-delete">
                 删除
               </el-link>
             </template>
           </el-popconfirm>
         </template>
-        <template v-slot:trakNumber="{row,$index}" v-if="dialogType!=='view'">
-          <el-form-item :prop="'datasource.'+$index+'.trakNumber'"
-                        :rules="{required:true,message:'请选择车辆',trigger:['blur','change']}">
-            <el-input v-model="row.trakNumber" @click.native="handleCar(row,$index)"></el-input>
+        <template
+          v-slot:trakNumber="{ row, $index }"
+          v-if="dialogType !== 'view'"
+        >
+          <el-form-item
+            :prop="'datasource.' + $index + '.trakNumber'"
+            :rules="{
+              required: true,
+              message: '请选择车辆',
+              trigger: ['blur', 'change']
+            }"
+          >
+            <el-input
+              v-model="row.trakNumber"
+              @click.native="handleCar(row, $index)"
+            ></el-input>
           </el-form-item>
-
         </template>
-        <template v-slot:driverName="{row,$index}" v-if="dialogType!=='view'">
-          <el-form-item :prop="'datasource.'+$index+'.driverName'"
-                        :rules="{required:true,message:'请选择司机',trigger:['blur','change']}">
-            <el-input v-model="row.driverName" @click.native="()=>handleDriver(row,$index)"></el-input>
+        <template
+          v-slot:driverName="{ row, $index }"
+          v-if="dialogType !== 'view'"
+        >
+          <el-form-item
+            :prop="'datasource.' + $index + '.driverName'"
+            :rules="{
+              required: true,
+              message: '请选择司机',
+              trigger: ['blur', 'change']
+            }"
+          >
+            <el-input
+              v-model="row.driverName"
+              @click.native="() => handleDriver(row, $index)"
+            ></el-input>
           </el-form-item>
-
         </template>
-        <template v-slot:phone="{row,$index}" v-if="dialogType!=='view'">
-          <el-form-item :prop="'datasource.'+$index+'.phone'"
-                        :rules="{required:true,message:'请输入司机电话',trigger:['blur','change']}">
+        <template v-slot:phone="{ row, $index }" v-if="dialogType !== 'view'">
+          <el-form-item
+            :prop="'datasource.' + $index + '.phone'"
+            :rules="{
+              required: true,
+              message: '请输入司机电话',
+              trigger: ['blur', 'change']
+            }"
+          >
             <el-input v-model="row.phone"></el-input>
           </el-form-item>
-
         </template>
-        <template v-slot:startPlace="{row,$index}" v-if="dialogType!=='view'">
-          <el-form-item :prop="'datasource.'+$index+'.startPlace'"
-                        :rules="{required:true,message:'请输入出发地',trigger:['blur','change']}">
+        <template
+          v-slot:startPlace="{ row, $index }"
+          v-if="dialogType !== 'view'"
+        >
+          <el-form-item
+            :prop="'datasource.' + $index + '.startPlace'"
+            :rules="{
+              required: true,
+              message: '请输入出发地',
+              trigger: ['blur', 'change']
+            }"
+          >
             <el-input v-model="row.startPlace"></el-input>
           </el-form-item>
-
         </template>
-        <template v-slot:endPlace="{row,$index}" v-if="dialogType!=='view'">
-          <el-form-item :prop="'datasource.'+$index+'.endPlace'"
-                        :rules="{required:true,message:'请输入目的地',trigger:['blur','change']}">
+        <template
+          v-slot:endPlace="{ row, $index }"
+          v-if="dialogType !== 'view'"
+        >
+          <el-form-item
+            :prop="'datasource.' + $index + '.endPlace'"
+            :rules="{
+              required: true,
+              message: '请输入目的地',
+              trigger: ['blur', 'change']
+            }"
+          >
             <el-input v-model="row.endPlace"></el-input>
           </el-form-item>
         </template>
-        <template v-slot:planTimeStart="{row,$index}" v-if="dialogType!=='view'">
-          <el-form-item :prop="'datasource.'+$index+'.planTimeStart'"
-                        :rules="{required:true,message:'请选择发车时间',trigger:['blur','change']}">
+        <template
+          v-slot:planTimeStart="{ row, $index }"
+          v-if="dialogType !== 'view'"
+        >
+          <el-form-item
+            :prop="'datasource.' + $index + '.planTimeStart'"
+            :rules="{
+              required: true,
+              message: '请选择发车时间',
+              trigger: ['blur', 'change']
+            }"
+          >
             <el-date-picker
               v-model="row.planTimeStart"
-              :picker-options="{disabledDate:(time)=>{return row.planTimeEnd&&time.getTime()>new Date(row.planTimeEnd)}}"
               type="datetime"
-              @change="()=>handleCheckCarOrDriverIsBusy(row)"
+              @change="
+                () => handleCheckCarOrDriverIsBusy(row, 'planTimeStart', $index)
+              "
               style="width: 90%"
               value-format="yyyy-MM-dd HH:mm:ss"
-              placeholder="选择日期时间">
+              placeholder="选择日期时间"
+            >
             </el-date-picker>
           </el-form-item>
         </template>
-        <template v-slot:planTimeEnd="{row,$index}" v-if="dialogType!=='view'">
-          <el-form-item :prop="'datasource.'+$index+'.planTimeEnd'"
-                        :rules="{required:true,message:'请选择结束时间',trigger:['blur','change']}">
+        <template
+          v-slot:planTimeEnd="{ row, $index }"
+          v-if="dialogType !== 'view'"
+        >
+          <el-form-item
+            :prop="'datasource.' + $index + '.planTimeEnd'"
+            :rules="{
+              required: true,
+              message: '请选择结束时间',
+              trigger: ['blur', 'change']
+            }"
+          >
             <el-date-picker
               v-model="row.planTimeEnd"
-              :picker-options="{disabledDate:(time)=>{return row.planTimeStart&&time.getTime()<new Date(row.planTimeStart)}}"
               type="datetime"
-              @change="()=>handleCheckCarOrDriverIsBusy(row)"
+              @change="
+                () => handleCheckCarOrDriverIsBusy(row, 'planTimeEnd', $index)
+              "
               style="width: 90%"
               value-format="yyyy-MM-dd HH:mm:ss"
-              placeholder="选择日期时间">
+              placeholder="选择日期时间"
+            >
             </el-date-picker>
           </el-form-item>
         </template>
-        <template v-slot:remark="{row,$index}" v-if="dialogType!=='view'">
-          <el-form-item :prop="'datasource.'+$index+'.remark'">
+        <template v-slot:remark="{ row, $index }" v-if="dialogType !== 'view'">
+          <el-form-item :prop="'datasource.' + $index + '.remark'">
             <el-input type="textarea" v-model="row.remark"></el-input>
           </el-form-item>
         </template>
-        <template v-slot:taskType="{row,$index}">
-          <el-form-item :prop="'datasource.'+$index+'.taskType'"
-                        :rules="{required:true,message:'请选择任务类型',trigger:['blur','change']}">
-            <DictSelection clearable dictName="派车任务类型" v-model="row.taskType"
-                           :disabled="dialogType==='view'"
-                           @itemChange="(val)=>handleChangeFinLink(val,row,$index)"></DictSelection>
+        <template v-slot:taskType="{ row, $index }">
+          <el-form-item
+            :prop="'datasource.' + $index + '.taskType'"
+            :rules="{
+              required: true,
+              message: '请选择任务类型',
+              trigger: ['blur', 'change']
+            }"
+          >
+            <DictSelection
+              clearable
+              dictName="派车任务类型"
+              v-model="row.taskType"
+              :disabled="dialogType === 'view'"
+              @itemChange="(val) => handleChangeFinLink(val, row, $index)"
+            ></DictSelection>
           </el-form-item>
         </template>
-        <template v-slot:taskCode="{row,$index}" v-if="dialogType!=='view'">
-          <el-form-item :prop="'datasource.'+$index+'.taskCode'"
-                        :rules="{required:true,message:'请选择',trigger:['blur','change']}">
-            <el-input v-model="row.taskCode" @click.native="(val)=>handleSelectData(val,row,$index)"
-                      clearable></el-input>
+        <template
+          v-slot:taskCode="{ row, $index }"
+          v-if="dialogType !== 'view'"
+        >
+          <el-form-item
+            :prop="'datasource.' + $index + '.taskCode'"
+            :rules="{
+              required: true,
+              message: '请选择',
+              trigger: ['blur', 'change']
+            }"
+          >
+            <el-input
+              v-model="row.taskCode"
+              @click.native="(val) => handleSelectData(val, row, $index)"
+              clearable
+            ></el-input>
           </el-form-item>
         </template>
-        <template v-slot:headerGLLXMC="{column}">
+        <template v-slot:headerGLLXMC="{ column }">
           <span class="is-required">{{ column.label }}</span>
         </template>
       </ele-pro-table>
@@ -134,419 +220,470 @@
       @changeParent="changeOrder"
     ></sendListDialog>
     <!-- 委外发货单   -->
-    <out-source-send-dialog :out-source-send-dialog-flag.sync="outSourceSendDialogFlag" v-if="outSourceSendDialogFlag"
-                            ref="outSourceSendDialogRef"
-                            @changeParent="getOutSourceInfo"></out-source-send-dialog>
+    <out-source-send-dialog
+      :out-source-send-dialog-flag.sync="outSourceSendDialogFlag"
+      v-if="outSourceSendDialogFlag"
+      ref="outSourceSendDialogRef"
+      @changeParent="getOutSourceInfo"
+    ></out-source-send-dialog>
     <!--  采购收货单  -->
     <purchaseReceivingGoodsDialog
       ref="purchaseReceivingGoodsRef"
       @changeParent="getPurchaseReceivingGoodsInfo"
     ></purchaseReceivingGoodsDialog>
     <!--  受托发货单  -->
-    <entrusted-receive-dialog :entrusted-receive-dialog-flag.sync="entrustedReceiveDialogFlag"
-                              v-if="entrustedReceiveDialogFlag"
-                              @changeParent="getEntrustedReceiveInfo"
-                              ref="entrustedReceiveDialogRef"></entrusted-receive-dialog>
+    <entrusted-receive-dialog
+      :entrusted-receive-dialog-flag.sync="entrustedReceiveDialogFlag"
+      v-if="entrustedReceiveDialogFlag"
+      @changeParent="getEntrustedReceiveInfo"
+      ref="entrustedReceiveDialogRef"
+    ></entrusted-receive-dialog>
     <!-- 销售退货   -->
-    <return-order-dialog :returnOrderDialogFlag.sync="returnOrderDialogFlag" v-if="returnOrderDialogFlag"
-                         @changeParent="getSReturnOrderInfo" ref="returnOrderDialogRef">
+    <return-order-dialog
+      :returnOrderDialogFlag.sync="returnOrderDialogFlag"
+      v-if="returnOrderDialogFlag"
+      @changeParent="getSReturnOrderInfo"
+      ref="returnOrderDialogRef"
+    >
     </return-order-dialog>
     <!-- 采购退货   -->
-    <purchase-return-order-dialog :purchaseReturnOrderDialogFlag.sync="purchaseReturnOrderDialogFlag"
-                                  v-if="purchaseReturnOrderDialogFlag"
-                                  @changeParent="getPReturnOrderInfo"
-                                  ref="returnOrderDialogRef"></purchase-return-order-dialog>
+    <purchase-return-order-dialog
+      :purchaseReturnOrderDialogFlag.sync="purchaseReturnOrderDialogFlag"
+      v-if="purchaseReturnOrderDialogFlag"
+      @changeParent="getPReturnOrderInfo"
+      ref="returnOrderDialogRef"
+    ></purchase-return-order-dialog>
     <!-- 选择司机   -->
-    <select-driver-dialog ref="selectDriverDialogRef" :selectDriverDialogFlag.sync="selectDriverDialogFlag"
-                          v-if="selectDriverDialogFlag" @changeParent="getDriverInfo"></select-driver-dialog>
-    <select-car-dialog ref="selectCarDialogRef" :selectCarDialogFlag.sync="selectCarDialogFlag"
-                       v-if="selectCarDialogFlag" @changeParent="getCarInfo"></select-car-dialog>
+    <select-driver-dialog
+      ref="selectDriverDialogRef"
+      :selectDriverDialogFlag.sync="selectDriverDialogFlag"
+      v-if="selectDriverDialogFlag"
+      @changeParent="getDriverInfo"
+    ></select-driver-dialog>
+    <select-car-dialog
+      ref="selectCarDialogRef"
+      :selectCarDialogFlag.sync="selectCarDialogFlag"
+      v-if="selectCarDialogFlag"
+      @changeParent="getCarInfo"
+    ></select-car-dialog>
   </div>
 </template>
 
-
 <script>
-import selectCarDialog from "./selectCarDialog.vue";
-import selectDriverDialog from "./selectDriverDialog.vue";
-import sendListDialog from "@/views/saleManage/saleOrder/returnGoods/components/sendListDialog.vue";
-import outSourceSendDialog from "@/views/purchasingManage/purchaseOrder/invoice/components/outSourceSendDialog.vue";
-import purchaseReceivingGoodsDialog
-  from "@/views/purchasingManage/purchaseOrder/returnGoods/components/sendListDialog.vue";
-import entrustedReceiveDialog from "@/views/saleManage/saleOrder/invoice/components/entrustedReceiveDialog.vue";
-import returnOrderDialog from "@/views/saleManage/saleOrder/customerReturnOrder/returnOrderDialog.vue";
-import purchaseReturnOrderDialog from "./purchaseReturnOrderDialog.vue";
-import {checkDriverIsBusyAPI} from "@/api/transportManager/shipManage";
+  import selectCarDialog from './selectCarDialog.vue';
+  import selectDriverDialog from './selectDriverDialog.vue';
+  import sendListDialog from '@/views/saleManage/saleOrder/returnGoods/components/sendListDialog.vue';
+  import outSourceSendDialog from '@/views/purchasingManage/purchaseOrder/invoice/components/outSourceSendDialog.vue';
+  import purchaseReceivingGoodsDialog from '@/views/purchasingManage/purchaseOrder/returnGoods/components/sendListDialog.vue';
+  import entrustedReceiveDialog from '@/views/saleManage/saleOrder/invoice/components/entrustedReceiveDialog.vue';
+  import returnOrderDialog from '@/views/saleManage/saleOrder/customerReturnOrder/returnOrderDialog.vue';
+  import purchaseReturnOrderDialog from './purchaseReturnOrderDialog.vue';
+  import { checkDriverIsBusyAPI } from '@/api/transportManager/shipManage';
 
-export default {
-  name: "relatedInfoTable",
-  components: {
-    returnOrderDialog,
-    entrustedReceiveDialog,
-    outSourceSendDialog,
-    sendListDialog,
-    purchaseReceivingGoodsDialog,
-    purchaseReturnOrderDialog,
-    selectCarDialog,
-    selectDriverDialog,
-  },
-  props: {
-    trakNoteList: {
-      type: Array,
-      default: () => []
-    },
-    dialogType: {
-      type: String,
-      default: ''
+  export default {
+    name: 'relatedInfoTable',
+    components: {
+      returnOrderDialog,
+      entrustedReceiveDialog,
+      outSourceSendDialog,
+      sendListDialog,
+      purchaseReceivingGoodsDialog,
+      purchaseReturnOrderDialog,
+      selectCarDialog,
+      selectDriverDialog
     },
-  },
-  data() {
-    return {
-      editIndex: undefined,//当前修改数据的下标
-      selectCarDialogFlag: false,
-      selectDriverDialogFlag: false,
-      outSourceSendDialogFlag: false,
-      entrustedReceiveDialogFlag: false,
-      returnOrderDialogFlag: false,
-      purchaseReturnOrderDialogFlag: false,
-      form: {
-        datasource: []
+    props: {
+      trakNoteList: {
+        type: Array,
+        default: () => []
       },
-
-    }
-  },
-  computed: {
-    columns() {
-      let list = [
-        {
-          columnKey: 'index',
-          label: '序号',
-          type: 'index',
-          width: 55,
-          align: 'center',
-          showOverflowTooltip: true,
-          fixed: 'left'
-        },
-        {
-          prop: 'trakNumber',
-          label: '车牌号',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 120,
-          slot: 'trakNumber',
-          headerSlot: 'headerGLLXMC',
-        },
-        {
-          prop: 'startPlace',
-          label: '出发地',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 120,
-          slot: 'startPlace',
-          headerSlot: 'headerGLLXMC',
-        },
-        {
-          prop: 'endPlace',
-          label: '目的地',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 120,
-          slot: 'endPlace',
-          headerSlot: 'headerGLLXMC',
-        },
-        {
-          prop: 'planTimeStart',
-          label: '预计发车日期',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 240,
-          slot: 'planTimeStart',
-          headerSlot: 'headerGLLXMC',
-        },
-        {
-          prop: 'planTimeEnd',
-          label: '预计结束日期',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 240,
-          slot: 'planTimeEnd',
-          headerSlot: 'headerGLLXMC',
-        },
-        {
-          prop: 'driverName',
-          label: '司机',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 120,
-          slot: 'driverName',
-          headerSlot: 'headerGLLXMC',
-        },
-        {
-          prop: 'phone',
-          label: '司机电话',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 120,
-          slot: 'phone',
-          headerSlot: 'headerGLLXMC',
-        },
-        {
-          prop: 'taskType',
-          label: '任务类型',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 120,
-          slot: 'taskType',
-          headerSlot: 'headerGLLXMC',
-        },
-        {
-          prop: 'taskCode',
-          label: '单据名称',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 130,
-          slot: 'taskCode',
-          headerSlot: 'headerGLLXMC'
-        },
-        {
-          prop: 'remark',
-          label: '备注',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 120,
-          slot: 'remark',
-        },
-      ]
-      let action = [{
-        columnKey: 'action',
-        slot: 'action',
-        label: '操作',
-        resizable: false,
-        width: 80,
-        align: 'center',
-        showOverflowTooltip: true,
-        fixed: 'right'
-      },]
-      this.dialogType === 'view' ? list = [...list] : list = [...list, ...action]
-      return list
-    },
-  },
-  mounted() {
-
-    this.form.datasource = this.trakNoteList
-    console.log(this.form.datasource);
-  },
-  methods: {
-    //新增任务信息数据
-    handleAddInfo() {
-      this.form.datasource.push(
-        {
-          driverId: '',
-          driverName: "",
-          endPlace: "",
-          phone: "",
-          planId: '',
-          planTimeEnd: "",
-          planTimeStart: "",
-          realEntTime: "",
-          realStartTime: "",
-          remark: "",
-          startPlace: "",
-          trakId: '',
-          trakNumber: "",
-          taskId: "",
-          taskType: "",
-          taskCode: ""
-        }
-      )
-    },
-    //
-    handleSelectData(val, row, index) {
-      this.editIndex = index
-      if (val.target.nodeName == 'I') {
-        row.taskId = ''
-        row.taskCode = ''
-        return
-      }
-      switch (row.taskType) {
-        case '1': //销售发货
-          this.handleOrderBtn(row);
-          break;
-        case '2': //委外发货
-          this.handleOutsourceSend(row);
-          break
-        case '3': //采购收货
-          this.handlePurchaseReceivingGoods(row);
-          break
-        case '4': //受托发货
-          this.handleEntrustedReceive(row);
-          break;
-        case '5': //销售退货
-          this.handleSaleReturnOrder(row);
-          break;
-        case '6': //采购退货
-          this.handlePurchaseReturnOrder(row);
-          break
+      dialogType: {
+        type: String,
+        default: ''
       }
     },
-    setSelectData(val) {
-      this.$set(this.form.datasource[this.editIndex], 'taskId', val.id)
-      this.$set(this.form.datasource[this.editIndex], 'taskCode', val.code)
-    },
-    //删除任务信息数据
-    handleDelInfo(index) {
-      this.form.datasource.splice(index, 1)
-    },
-    //修改任务类型
-    handleChangeFinLink(val, row, index) {
-      this.editIndex = index
-      this.setSelectData({
-        id: '',
-        code: ''
-      })
-      this.$nextTick(() => {
-        this.$refs.form.clearValidate('datasource.' + index + '.taskCode')
-      })
-    },
-
-    //选择发货单
-    handleOrderBtn() {
-      this.$refs.sendListDialogRef.open();
+    data() {
+      return {
+        editIndex: undefined, //当前修改数据的下标
+        selectCarDialogFlag: false,
+        selectDriverDialogFlag: false,
+        outSourceSendDialogFlag: false,
+        entrustedReceiveDialogFlag: false,
+        returnOrderDialogFlag: false,
+        purchaseReturnOrderDialogFlag: false,
+        form: {
+          datasource: []
+        }
+      };
     },
-    //选择发货单回调
-    changeOrder(params) {
-      let row = {
-        id: params.id,
-        code: params.docNo
+    computed: {
+      columns() {
+        let list = [
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            prop: 'trakNumber',
+            label: '车牌号',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 120,
+            slot: 'trakNumber',
+            headerSlot: 'headerGLLXMC'
+          },
+          {
+            prop: 'startPlace',
+            label: '出发地',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 120,
+            slot: 'startPlace',
+            headerSlot: 'headerGLLXMC'
+          },
+          {
+            prop: 'endPlace',
+            label: '目的地',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 120,
+            slot: 'endPlace',
+            headerSlot: 'headerGLLXMC'
+          },
+          {
+            prop: 'planTimeStart',
+            label: '预计发车日期',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 240,
+            slot: 'planTimeStart',
+            headerSlot: 'headerGLLXMC'
+          },
+          {
+            prop: 'planTimeEnd',
+            label: '预计结束日期',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 240,
+            slot: 'planTimeEnd',
+            headerSlot: 'headerGLLXMC'
+          },
+          {
+            prop: 'driverName',
+            label: '司机',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 120,
+            slot: 'driverName',
+            headerSlot: 'headerGLLXMC'
+          },
+          {
+            prop: 'phone',
+            label: '司机电话',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 120,
+            slot: 'phone',
+            headerSlot: 'headerGLLXMC'
+          },
+          {
+            prop: 'taskType',
+            label: '任务类型',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 120,
+            slot: 'taskType',
+            headerSlot: 'headerGLLXMC'
+          },
+          {
+            prop: 'taskCode',
+            label: '单据名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 130,
+            slot: 'taskCode',
+            headerSlot: 'headerGLLXMC'
+          },
+          {
+            prop: 'remark',
+            label: '备注',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 120,
+            slot: 'remark'
+          }
+        ];
+        let action = [
+          {
+            columnKey: 'action',
+            slot: 'action',
+            label: '操作',
+            resizable: false,
+            width: 80,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'right'
+          }
+        ];
+        this.dialogType === 'view'
+          ? (list = [...list])
+          : (list = [...list, ...action]);
+        return list;
       }
-      this.setSelectData(row)
     },
-    //选择采购收货单
-    handlePurchaseReceivingGoods() {
-      this.$refs.purchaseReceivingGoodsRef.open();
-    },
-    //选择采购收货单回调
-    getPurchaseReceivingGoodsInfo(params) {
-      let row = {
-        id: params.id,
-        code: params.receiveNo
-      }
-      this.setSelectData(row)
+    mounted() {
+      this.form.datasource = this.trakNoteList;
     },
+    methods: {
+      //新增任务信息数据
+      handleAddInfo() {
+        this.form.datasource.push({
+          driverId: '',
+          driverName: '',
+          endPlace: '',
+          phone: '',
+          planId: '',
+          planTimeEnd: '',
+          planTimeStart: '',
+          realEntTime: '',
+          realStartTime: '',
+          remark: '',
+          startPlace: '',
+          trakId: '',
+          trakNumber: '',
+          taskId: '',
+          taskType: '',
+          taskCode: ''
+        });
+      },
+      //
+      handleSelectData(val, row, index) {
+        this.editIndex = index;
+        if (val.target.nodeName == 'I') {
+          row.taskId = '';
+          row.taskCode = '';
+          return;
+        }
+        switch (row.taskType) {
+          case '1': //销售发货
+            this.handleOrderBtn(row);
+            break;
+          case '2': //委外发货
+            this.handleOutsourceSend(row);
+            break;
+          case '3': //采购收货
+            this.handlePurchaseReceivingGoods(row);
+            break;
+          case '4': //受托发货
+            this.handleEntrustedReceive(row);
+            break;
+          case '5': //销售退货
+            this.handleSaleReturnOrder(row);
+            break;
+          case '6': //采购退货
+            this.handlePurchaseReturnOrder(row);
+            break;
+        }
+      },
+      setSelectData(val) {
+        this.$set(this.form.datasource[this.editIndex], 'taskId', val.id);
+        this.$set(this.form.datasource[this.editIndex], 'taskCode', val.code);
+      },
+      //删除任务信息数据
+      handleDelInfo(index) {
+        this.form.datasource.splice(index, 1);
+      },
+      //修改任务类型
+      handleChangeFinLink(val, row, index) {
+        this.editIndex = index;
+        this.setSelectData({
+          id: '',
+          code: ''
+        });
+        this.$nextTick(() => {
+          this.$refs.form.clearValidate('datasource.' + index + '.taskCode');
+        });
+      },
 
-    //选择委外发货单弹框
-    handleOutsourceSend() {
-      this.outSourceSendDialogFlag = true
-      this.$nextTick(() => {
-        this.$refs.outSourceSendDialogRef.init();
-      })
-    },
-    //选择委外发货单回调
-    getOutSourceInfo(params) {
-      let row = {
-        id: params.id,
-        code: params.code
-      }
-      this.setSelectData(row)
-    },
-    //选择受托收货单弹框
-    handleEntrustedReceive(e) {
-      this.entrustedReceiveDialogFlag = true
-      this.$nextTick(() => {
-        this.$refs.entrustedReceiveDialogRef.init();
-      })
-    },
-    //获取受托收货单数据回调
-    async getEntrustedReceiveInfo(params) {
-      let row = {
-        id: params.id,
-        code: params.code
-      }
-      this.setSelectData(row)
-    },
-    //选择销售退货单
-    handleSaleReturnOrder() {
-      this.returnOrderDialogFlag = true
-      // this.$nextTick(() => {
-      //   this.$refs.returnOrderDialogRef.init()
-      // })
-    },
-    //销售退货单回调
-    getSReturnOrderInfo(params) {
-      let row = {
-        id: params.id,
-        code: params.returnNo
-      }
-      this.setSelectData(row)
-    },
-    //选择采购退货单
-    handlePurchaseReturnOrder() {
-      this.purchaseReturnOrderDialogFlag = true
-    },
-    //采购退货单回调
-    getPReturnOrderInfo(params) {
-      let row = {
-        id: params.id,
-        code: params.returnNo
-      }
-      this.setSelectData(row)
-    },
+      //选择发货单
+      handleOrderBtn() {
+        this.$refs.sendListDialogRef.open();
+      },
+      //选择发货单回调
+      changeOrder(params) {
+        let row = {
+          id: params.id,
+          code: params.docNo
+        };
+        this.setSelectData(row);
+      },
+      //选择采购收货单
+      handlePurchaseReceivingGoods() {
+        this.$refs.purchaseReceivingGoodsRef.open();
+      },
+      //选择采购收货单回调
+      getPurchaseReceivingGoodsInfo(params) {
+        let row = {
+          id: params.id,
+          code: params.receiveNo
+        };
+        this.setSelectData(row);
+      },
 
-    //选择司机
-    handleDriver(row, index) {
-      this.editIndex = index
-      this.selectDriverDialogFlag = true
-    },
-    //选择司机回调
-    getDriverInfo(row) {
-      this.$set(this.form.datasource[this.editIndex], 'driverId', row.driverId)
-      this.$set(this.form.datasource[this.editIndex], 'driverName', row.driverName)
-      this.$set(this.form.datasource[this.editIndex], 'phone', row.phone)
+      //选择委外发货单弹框
+      handleOutsourceSend() {
+        this.outSourceSendDialogFlag = true;
+        this.$nextTick(() => {
+          this.$refs.outSourceSendDialogRef.init();
+        });
+      },
+      //选择委外发货单回调
+      getOutSourceInfo(params) {
+        let row = {
+          id: params.id,
+          code: params.code
+        };
+        this.setSelectData(row);
+      },
+      //选择受托收货单弹框
+      handleEntrustedReceive(e) {
+        this.entrustedReceiveDialogFlag = true;
+        this.$nextTick(() => {
+          this.$refs.entrustedReceiveDialogRef.init();
+        });
+      },
+      //获取受托收货单数据回调
+      async getEntrustedReceiveInfo(params) {
+        let row = {
+          id: params.id,
+          code: params.code
+        };
+        this.setSelectData(row);
+      },
+      //选择销售退货单
+      handleSaleReturnOrder() {
+        this.returnOrderDialogFlag = true;
+        // this.$nextTick(() => {
+        //   this.$refs.returnOrderDialogRef.init()
+        // })
+      },
+      //销售退货单回调
+      getSReturnOrderInfo(params) {
+        let row = {
+          id: params.id,
+          code: params.returnNo
+        };
+        this.setSelectData(row);
+      },
+      //选择采购退货单
+      handlePurchaseReturnOrder() {
+        this.purchaseReturnOrderDialogFlag = true;
+      },
+      //采购退货单回调
+      getPReturnOrderInfo(params) {
+        let row = {
+          id: params.id,
+          code: params.returnNo
+        };
+        this.setSelectData(row);
+      },
 
-      this.handleCheckCarOrDriverIsBusy(this.form.datasource[this.editIndex])
-    },
-    //选择车辆
-    handleCar(row, index) {
-      this.editIndex = index
-      this.selectCarDialogFlag = true
-    },
-    //选择车辆回调
-    getCarInfo(row) {
-      this.$set(this.form.datasource[this.editIndex], 'driverId', row.defaultDriverId)
-      this.$set(this.form.datasource[this.editIndex], 'driverName', row.defaultDriver)
-      this.$set(this.form.datasource[this.editIndex], 'phone', row.phone)
-      this.$set(this.form.datasource[this.editIndex], 'trakNumber', row.trakNumber)
-      this.$set(this.form.datasource[this.editIndex], 'trakId', row.id)
+      //选择司机
+      handleDriver(row, index) {
+        this.editIndex = index;
+        this.selectDriverDialogFlag = true;
+      },
+      //选择司机回调
+      getDriverInfo(row) {
+        this.$set(
+          this.form.datasource[this.editIndex],
+          'driverId',
+          row.driverId
+        );
+        this.$set(
+          this.form.datasource[this.editIndex],
+          'driverName',
+          row.driverName
+        );
+        this.$set(this.form.datasource[this.editIndex], 'phone', row.phone);
 
-      this.handleCheckCarOrDriverIsBusy(this.form.datasource[this.editIndex])
+        this.handleCheckCarOrDriverIsBusy(this.form.datasource[this.editIndex]);
+      },
+      //选择车辆
+      handleCar(row, index) {
+        this.editIndex = index;
+        this.selectCarDialogFlag = true;
+      },
+      //选择车辆回调
+      getCarInfo(row) {
+        this.$set(
+          this.form.datasource[this.editIndex],
+          'driverId',
+          row.defaultDriverId
+        );
+        this.$set(
+          this.form.datasource[this.editIndex],
+          'driverName',
+          row.defaultDriver
+        );
+        this.$set(this.form.datasource[this.editIndex], 'phone', row.phone);
+        this.$set(
+          this.form.datasource[this.editIndex],
+          'trakNumber',
+          row.trakNumber
+        );
+        this.$set(this.form.datasource[this.editIndex], 'trakId', row.id);
 
-    },
-    //检查车辆或司机是否在运输中
-    async handleCheckCarOrDriverIsBusy(row) {
-      if ((row.driverName || row.trakNumber) && row.planTimeStart && row.planTimeEnd) {
-        let data = await checkDriverIsBusyAPI(row)
-        console.log(data);
-        if (data.code == 1) {
-          this.$message.warning(data.message)
+        this.handleCheckCarOrDriverIsBusy(this.form.datasource[this.editIndex]);
+      },
+      //检查车辆或司机是否在运输中
+      async handleCheckCarOrDriverIsBusy(row, key, index) {
+        if (key) {
+          if (
+            new Date(row.planTimeEnd).getTime() <=
+            new Date(row.planTimeStart).getTime()
+          ) {
+            this.$message.warning(
+              key == 'planTimeEnd'
+                ? '结束时间不能小于发车时间!'
+                : '发车时间不能大于结束时间!'
+            );
+            this.$set(this.form.datasource[index], key, '');
+          }
         }
+        if (
+          (row.driverName || row.trakNumber) &&
+          row.planTimeStart &&
+          row.planTimeEnd
+        ) {
+          let data = await checkDriverIsBusyAPI(row);
+          console.log(data);
+          if (data.code == 1) {
+            this.$message.warning(data.message);
+          }
+        }
+      },
+      getTableValidate() {
+        return new Promise((resolve, reject) => {
+          if (this.form.datasource.length == 0)
+            return this.$message.warning('请填写任务信息');
+          this.$refs.form.validate((valid) => {
+            if (!valid) return this.$message.warning('请填写完整信息');
+            resolve(this.form.datasource);
+          });
+        });
       }
-
-    },
-    getTableValidate() {
-      return new Promise((resolve, reject) => {
-        if (this.form.datasource.length == 0) return this.$message.warning('请填写任务信息')
-        this.$refs.form.validate((valid) => {
-          if (!valid) return this.$message.warning('请填写完整信息')
-          resolve(this.form.datasource)
-        })
-      })
-    },
-  }
-}
+    }
+  };
 </script>
 
-
 <style scoped lang="scss">
-:deep(.el-form-item) {
-  margin-bottom: 0;
-}
+  :deep(.el-form-item) {
+    margin-bottom: 0;
+  }
 </style>