|
|
@@ -0,0 +1,477 @@
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <el-form ref="form" :model="form">
|
|
|
+ <!-- 数据表格 -->
|
|
|
+ <ele-pro-table
|
|
|
+ ref="table"
|
|
|
+ :columns="columns"
|
|
|
+ :datasource="form.datasource"
|
|
|
+ :needPage="false"
|
|
|
+ :toolkit="[]"
|
|
|
+ :minHeight="100"
|
|
|
+ tool-class="ele-toolbar-form"
|
|
|
+ cache-key="eomContactPageTable"
|
|
|
+ :summary-method="getSummaries"
|
|
|
+ show-summary
|
|
|
+ >
|
|
|
+ <!-- 表头工具栏 -->
|
|
|
+ <template v-slot:toolbar>
|
|
|
+ <el-button
|
|
|
+ v-if="dialogType !== 'view'"
|
|
|
+ size="small"
|
|
|
+ type="primary"
|
|
|
+ icon="el-icon-plus"
|
|
|
+ class="ele-btn-icon"
|
|
|
+ @click="handleAddInfo"
|
|
|
+ >
|
|
|
+ 新增
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-slot:action="{ row, $index }" v-if="dialogType !== 'view'">
|
|
|
+ <el-popconfirm
|
|
|
+ class="ele-action"
|
|
|
+ title="确定要删除此信息吗?"
|
|
|
+ @confirm="handleDelInfo($index)"
|
|
|
+ >
|
|
|
+ <template v-slot:reference>
|
|
|
+ <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">
|
|
|
+ <template slot="append">
|
|
|
+ <el-link
|
|
|
+ type="primary"
|
|
|
+ :underline="false"
|
|
|
+ @click.native="handleCar(row, $index)"
|
|
|
+ >
|
|
|
+ 选择</el-link
|
|
|
+ >
|
|
|
+ </template>
|
|
|
+ </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: false,
|
|
|
+ message: '请选择司机',
|
|
|
+ trigger: ['blur', 'change']
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <el-input v-model="row.driverName">
|
|
|
+ <template slot="append">
|
|
|
+ <el-link
|
|
|
+ type="primary"
|
|
|
+ :underline="false"
|
|
|
+ @click.native="handleDriver(row, $index)"
|
|
|
+ >
|
|
|
+ 选择</el-link
|
|
|
+ >
|
|
|
+ </template>
|
|
|
+ </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: false,
|
|
|
+ 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: false,
|
|
|
+ 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: false,
|
|
|
+ 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: false,
|
|
|
+ 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)"
|
|
|
+ style="width: 90%"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ 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: false,
|
|
|
+ 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)"
|
|
|
+ style="width: 90%"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ 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'">
|
|
|
+ <el-input type="textarea" v-model="row.remark"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ <template v-slot:cost="{ row, $index }" v-if="dialogType !== 'view'">
|
|
|
+ <el-form-item :prop="'datasource.' + $index + '.cost'">
|
|
|
+ <el-input type="number" v-model="row.cost"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+
|
|
|
+
|
|
|
+ <template v-slot:headerGLLXMC="{ column }">
|
|
|
+ <span class="is-required">{{ column.label }}</span>
|
|
|
+ </template>
|
|
|
+ </ele-pro-table>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+
|
|
|
+<script>
|
|
|
+// import { checkDriverIsBusyAPI } from '@/api/transportManager/shipManage';
|
|
|
+
|
|
|
+import { getSummaries } from '@/utils/util.js';
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: 'relatedInfoTable',
|
|
|
+ props: {
|
|
|
+
|
|
|
+ dialogType: {
|
|
|
+ type: String,
|
|
|
+ default: ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ editIndex: undefined, //当前修改数据的下标
|
|
|
+
|
|
|
+ form: {
|
|
|
+ datasource: []
|
|
|
+ }
|
|
|
+ };
|
|
|
+ },
|
|
|
+ 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;
|
|
|
+ },
|
|
|
+ //选择司机回调
|
|
|
+ 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) {
|
|
|
+ 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);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+
|
|
|
+<style scoped lang="scss">
|
|
|
+:deep(.el-form-item) {
|
|
|
+ margin-bottom: 0;
|
|
|
+}
|
|
|
+</style>
|