This commit is contained in:
ljx 2024-04-28 17:24:01 +08:00
parent a680cd72d0
commit 7dc3ce3dee
2 changed files with 235 additions and 56 deletions

View File

@ -6,13 +6,13 @@
<!-- 搜索区 -->
<vxe-form :data="searchFormData" :items="searchFormItems" titleColon @submit="onSearch">
<template #driver_id="{ }">
<!-- <template #driver_id="{ }">
<ZkSelectSearch :ListTitle="'请选择司机'" :IsListShowCode="true" :ListUrl="zkSelectSearch2.Search"
:ListUrlData="zkSelectSearch2.zkSelectData"
:ListFieldName="zkSelectSearch2.zkSelectDataFieldName"
:BackFieldNames="zkSelectSearch2.zkBackFieldNames" @zkSelectSearch="StaffhandleChange">
</ZkSelectSearch>
</template>
</template> -->
<template #date="{ }">
<a-form-item label="创建时间" :style="{ display: 'inline-block', width: 120 }">
</a-form-item>
@ -63,12 +63,12 @@
<script>
import BASE_URL from '@/services/Middle/transport/DriverWages/api.js';
import ZkSelectSearch from '@/components/zk/zkSelectSearch.vue';
// import ZkSelectSearch from '@/components/zk/zkSelectSearch.vue';
export default {
name: 'DriverWagesList',
i18n: require('./i18n'), //
components: { ZkSelectSearch },
// components: { ZkSelectSearch },
props: {
pageMode: {
type: String,
@ -134,27 +134,27 @@
//
searchFormData: {
wages_year:'',
wages_month: '',
year:'',
month: '',
staff_uid: '',
},
//
searchRules: [
{ key: "wages_year", mode: "=" },
{ key: "wages_month", mode: "=" },
{ key: "year", mode: "=" },
{ key: "month", mode: "=" },
{ key: "staff_uid", mode: "=" }
],
//
searchFormItems: [ //
{field: 'wages_year', title: '年份', span: 3, itemRender: {name: '$select',props: { options: year,placeholder: '请选择年份' }}},
{field: 'wages_month', title: '月份', span: 3, itemRender: {name: '$select',props: { options: month,placeholder: '请选择月份' }}},
{
field: 'staff_uid',
title: '司机',
span: 4,
slots: { default: 'driver_id' }
},
{ span: 8, slots: { default: 'date' } }, //
{field: 'wages_year', title: '年份', span: 4, itemRender: {name: '$select',props: { options: year,placeholder: '请选择年份' }}},
{field: 'wages_month', title: '月份', span: 4, itemRender: {name: '$select',props: { options: month,placeholder: '请选择月份' }}},
// {
// field: 'staff_uid',
// title: '',
// span: 4,
// slots: { default: 'driver_id' }
// },
// { span: 8, slots: { default: 'date' } }, //
{
align: 'right', span: 6, itemRender: { //
name: '$buttons', children: [{ props: { type: 'submit', content: '搜索', status: 'primary' } }, //
@ -219,15 +219,15 @@
// { field: "mes_staff['wages_year']", sortable: true, title: '', width: 80 }, //
// { field: 'wages_month', sortable: true, title: '', width: 70 }, //
{ field: 'staff_name', sortable: true, title: '司机姓名', width: 120 }, //
{ field: 'staff_code', sortable: true, title: '司机编号', width: 120 }, //
{ field: 'staff_phone', sortable: true, title: '司机手机', width: 120 }, //
{ field: 'total', sortable: true, title: '总工资', width: 100 }, //
{
field: 'wages_status', sortable: true, title: '状态', width: 120,
slots: { default: 'wages_status' }
}, //
{ field: 'wages_date', sortable: true, title: '日期', formatter: 'formatDate', width: 120 }, //
{ field: 'name', sortable: true, title: '司机姓名', width: 120 }, //
{ field: 'code', sortable: true, title: '司机编号', width: 120 }, //
{ field: 'phone', sortable: true, title: '司机手机', width: 120 }, //
{ field: 'wages_total', sortable: true, title: '总工资', width: 100 }, //
// {
// field: 'status', sortable: true, title: '', width: 120,
// slots: { default: 'wages_status' }
// }, //
// { field: 'wages_date', sortable: true, title: '', formatter: 'formatDate', width: 120 }, //
// { field: 'wages_balance', sortable: true, title: '', width: 120 }, //
{ field: 'wages_remark', sortable: true, title: '备注', width: 250 }, //
]

View File

@ -11,55 +11,91 @@
<p class="Htitle-p">
{{ item.Htitle }}
</p>
<div style="padding-right: 10px;" v-if="item.needAdd"><vxe-button size="small" status="primary" @click="addTrainNumber" content="新增车次"></vxe-button></div>
<div class="right-line"></div>
</div>
</vxe-form-item>
<!-- =========================== 自定义区域 End ======================= -->
</vxe-form>
<!-- 额外车次 -->
<div class="tablebox" v-for="(item,index) in formOptions.data.train_number" :key="'train_number'+index">
<div class="Htitle" style="margin-bottom: 20px;align-items: center;">
<div class="left-line" ></div>
<p class="Htitle-p" >额外车次{{ index+1 }}</p>
<div style="padding-right: 10px;"><vxe-button size="small" @click="deleteTrainNumber(index)" status="danger" content="删除车次"></vxe-button></div>
<div class="right-line" ></div>
</div>
<div @click="nowIndex = index">
<vxe-form :data="item" :title-width="formOptions.titleWidth"
:title-align="formOptions.titleAlign">
<vxe-form-item v-for="(item,index) in train_numberOptions.items" :title="item.title" :field="item.field" :span="item.span" :key="index" :item-render="item.itemRender">
</vxe-form-item>
</vxe-form>
</div>
</div>
<!-- 司机补贴 -->
<vxe-form :data="formOptions.data" ref="xForm1" :title-width="formOptions.titleWidth"
:title-align="formOptions.titleAlign" :rules="formOptions.rules" titleColon>
<!-- =========================== 自定义区域 Start ======================= -->
<vxe-form-item v-for="(item,index) in driver_subsidyOptions.items" :title="item.title" :field="item.field" :span="item.span" :key="index" :item-render="item.itemRender" :visible="isShow(item)">
<div v-if="item.isTitle" class="Htitle">
<div class="left-line"></div>
<p class="Htitle-p">
{{ item.Htitle }}
</p>
<div></div>
<div class="right-line"></div>
</div>
</vxe-form-item>
<!-- =========================== 自定义区域 End ======================= -->
</vxe-form>
<div class="tablebox" v-if="!formOptions.data.id && formOptions.data.is_oil == 1">
<div class="Htitle" style="margin-bottom: 20px;">
<div class="tablebox" v-if="!formOptions.data.id">
<div class="Htitle" style="margin-bottom: 20px;align-items: center;">
<div class="left-line"></div>
<p class="Htitle-p">加油信息</p>
<div style="font-size: 14px;display: flex;align-items: center;">是否加油 <vxe-switch v-model="formOptions.data.is_oil" size="small" open-label="是" close-label="否"></vxe-switch></div>
<div class="right-line"></div>
</div>
<vxe-form :data="formOptions.data.oil_consumption" :title-width="formOptions.titleWidth"
<div v-if="formOptions.data.is_oil == 1">
<vxe-form :data="formOptions.data.oil_consumption" :title-width="formOptions.titleWidth"
:title-align="formOptions.titleAlign">
<vxe-form-item v-for="(item,index) in formOptions2.items" :title="item.title" :field="item.field" :span="item.span" :key="index" :item-render="item.itemRender">
</vxe-form-item>
</vxe-form>
</div>
</div>
<div class="mk-toolbar" v-if="isEdit">
</div>
<div class="tablebox" v-if="formOptions.data.is_repair == 1">
<div class="tablebox" >
<div class="Htitle" style="margin-bottom: 20px;">
<div class="left-line"></div>
<p class="Htitle-p">维修信息</p>
<div class="right-line"></div>
</div>
<vxe-table border show-overflow keep-source ref="xTable1" :data="tableData"
<vxe-table border show-overflow keep-source ref="xTable1" :data="formOptions.data.maintenance"
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false }">
<vxe-column width="60">
<template #default="{ row }">
<div style="font-size: 18px;">
<a @click.stop="pageAdd(row)" title="新增" style="margin-right: 5px;">
<a @click.stop="pageAdd(row,'maintenance','xTable1')" title="新增" style="margin-right: 5px;">
<a-icon type="plus-circle" />
</a>
<a @click.stop="pageDelete(row)" title="删除">
<a @click.stop="pageDelete(row,'maintenance','xTable1')" title="删除">
<a-icon type="delete" />
</a>
</div>
</template>
</vxe-column>
<vxe-column type="seq" width="60"></vxe-column>
<vxe-column field="name" title="维修项目" :edit-render="{ name: '$input',props: { type: 'number' }}"></vxe-column>
<vxe-column field="name2" title="维修金额" formatter="formatNumber" :edit-render="{ name: '$input',props: { type: 'number' } }"></vxe-column>
<vxe-column field="age" title="维修内容" :edit-render="{ name: '$input' }"></vxe-column>
<vxe-column field="maintenance_name" title="维修项目" :edit-render="{ name: '$input' }"></vxe-column>
<vxe-column field="maintenance_price" title="维修金额" formatter="formatNumber" :edit-render="{ name: '$input',props: { type: 'number' } }"></vxe-column>
<vxe-column field="maintenance_description" title="维修内容" :edit-render="{ name: '$input' }"></vxe-column>
</vxe-table>
</div>
<div class="tablebox" v-if="formOptions.data.is_change_tire == 1">
<div class="tablebox">
<div class="Htitle" style="margin-bottom: 20px;">
<div class="left-line"></div>
<p class="Htitle-p">轮胎更换信息</p>
@ -70,21 +106,21 @@
<vxe-column width="60">
<template #default="{ row }">
<div style="font-size: 18px;">
<a @click.stop="pageAdd(row)" title="新增" style="margin-right: 5px;">
<a @click.stop="pageAdd(row,'tire','xTable2')" title="新增" style="margin-right: 5px;">
<a-icon type="plus-circle" />
</a>
<a @click.stop="pageDelete(row)" title="删除">
<a @click.stop="pageDelete(row,'tire','xTable2')" title="删除">
<a-icon type="delete" />
</a>
</div>
</template>
</vxe-column>
<vxe-column type="seq" width="60"></vxe-column>
<vxe-column field="name" title="旧轮胎胎号" :edit-render="{ name: '$input' }"></vxe-column>
<vxe-column field="name1" title="新轮胎胎号" :edit-render="{ name: '$input' }"></vxe-column>
<vxe-column field="name2" title="轮胎品牌" :edit-render="{ name: '$input' }"></vxe-column>
<vxe-column field="sex" title="轮胎更换费用金额" :edit-render="{ name: '$input', props: { type: 'number' } }"></vxe-column>
<vxe-column field="age" title="备注" :edit-render="{ name: '$input' }"></vxe-column>
<vxe-column field="old_tire_number" title="旧轮胎胎号" :edit-render="{ name: '$input' }"></vxe-column>
<vxe-column field="tire_number" title="新轮胎胎号" :edit-render="{ name: '$input' }"></vxe-column>
<vxe-column field="tire_brand" title="轮胎品牌" :edit-render="{ name: '$input' }"></vxe-column>
<vxe-column field="tire_price" title="轮胎更换费用金额" formatter="formatNumber" :edit-render="{ name: '$input',props: { type: 'number' } }"></vxe-column>
<vxe-column field="tire_remark" title="备注" :edit-render="{ name: '$input' }"></vxe-column>
</vxe-table>
</div>
@ -149,6 +185,7 @@ export default {
//
var pageData = {
nowIndex:0,
current_distance:0,
//
currentConfigName: "",
@ -236,6 +273,19 @@ export default {
other_expenses_name: "",
other_expenses_remark: ""
}],
maintenance:[{
maintenance_price:null,
maintenance_name: "",
maintenance_remark: ""
}],
tire:[{
old_tire_number:'',
tire_number:'',
tire_brand:'',
tire_price:0,
tire_remark:''
}],
train_number:[],
is_customer_settlement:0, //
is_supplier_settlement:0, //
is_driver_settlement:0, //
@ -402,7 +452,7 @@ export default {
this.formOptions.data.truck_id = data.id;
this.formOptions.data.current_distance = data.current_distance;
this.formOptions.data.end_mileage = data.current_distance;
this.formOptions.items[12].itemRender.props.min = data.current_distance;
this.formOptions.items[11].itemRender.props.min = data.current_distance;
}
}
}
@ -449,7 +499,7 @@ export default {
{field: 'outbound_remark', title: '出车备注', isNeedOutbound:true,span: 24, itemRender: {name: '$textarea'}},
// {field: 'outbound_mileage',isNeedOutbound:true,title: '',span: 6,itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber }}},
{field:'',title:'',span:24,isTitle:true,Htitle:'基础信息',itemRender:{}},//线
{field:'',title:'',span:24,isTitle:true,needAdd:true,Htitle:'车次信息',itemRender:{}},//线
{field: 'custom_name', title: '选择客户', span: 8, itemRender: {
name: 'MkFormDataSelector', props: {
params: {
@ -542,13 +592,7 @@ export default {
// {field: 'is_supplier_settlement', title: '', span: 24, itemRender: { name: '$switch', props: { openLabel: '', openValue: 1, closeValue: 0, closeLabel: '' } }},
// {field: 'is_driver_settlement', title: '', span: 24, itemRender: { name: '$switch', props: { openLabel: '', openValue: 1, closeValue: 0, closeLabel: '' } }},
{field: 'freight', title: '运费', span: 8, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber }}},
{field: 'is_oil', title: '是否加油', span: 24,itemRender: { name: '$switch', props: { openLabel: '是', openValue: 1, closeValue: 0, closeLabel: '否' } }},
{field:'',title:'',span:24,isTitle:true,Htitle:'司机补贴',itemRender:{}},//线
{field: 'driver_salary', title: '司机工资',isNeedOutbound:true, span: 12, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber }}},
{field: 'driver_subsidy', title: '补贴金额', span: 12, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber }}},
{field: 'driver_subsidy_remark', title: '补贴备注', span: 24, itemRender: {name: '$textarea'}},
// {field: 'is_oil', title: '', span: 24,itemRender: { name: '$switch', props: { openLabel: '', openValue: 1, closeValue: 0, closeLabel: '' } }},
// {field: 'is_repair', title: '', span: 6,itemRender: { name: '$switch', props: { openLabel: '', openValue: 1, closeValue: 0, closeLabel: '' } }},
// {field: 'is_change_tire', title: '', span: 6,itemRender: { name: '$switch', props: { openLabel: '', openValue: 1, closeValue: 0, closeLabel: '' } }},
@ -580,6 +624,89 @@ export default {
{field: "oil_consumption_remark", title: '油耗备注', span: 24, itemRender: {name: '$textarea'}},
]
},
train_numberOptions: {
items: [
{field: 'custom_name', title: '选择客户', span: 8, itemRender: {
name: 'MkFormDataSelector', props: {
params: {
dataType: "string",
valueField: "id",
textField: "name",
listdataFieldName: 'Custom',
dataUrl: `${BASE_URL.BASE_URL}/Custom/v1/custom/list`,
actionParams:{
search_rules: [
{
"column": "type",
"mode": "=",
"value": "0"
}
],
},
onDataChanged: ({value,data}) => {
console.log(value,data)
this.formOptions.data.train_number[this.nowIndex].custom_id = data.id;
}
}
}
}},
{field: 'supplier_name', title: '选择供应商', span: 8, itemRender: {
name: 'MkFormDataSelector', props: {
params: {
dataType: "string",
valueField: "id",
textField: "name",
listdataFieldName: 'Custom',
actionParams:{
search_rules: [
{
"column": "type",
"mode": "=",
"value": "1"
}
],
},
dataUrl: `${BASE_URL.BASE_URL}/Custom/v1/custom/list`,
onDataChanged: ({value,data}) => {
console.log(value,data)
this.formOptions.data.train_number[this.nowIndex].supplier_id = data.id;
}
}
}
}},
{field: 'soil_quality_material', title: '选择运输物品', span: 8, itemRender: {
name: 'MkFormDataSelector', props: {
params: {
dataType: "string",
valueField: "id",
textField: "name",
listdataFieldName: 'SoilQualityMaterial',
dataUrl: `${BASE_URL.BASE_URL}/SoilQualityMaterial/v1/soil/quality/material/list`,
onDataChanged: ({value,data}) => {
console.log(value,data)
this.formOptions.data.train_number[this.nowIndex].soil_quality_material_id = data.id;
}
}
}
}},
{field: 'supplier_outbound_tonnage',title: '供应商出库吨位',span: 8,itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber }}},
{field: 'buy_unit_price', title: '购入单价', span: 8, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber } }},
{field: 'buy_total_price', title: '购入总价', span: 8, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber }}},
{field: 'customer_warehousing_tonnage',title: '客户入库吨位',span: 8,itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber }}},
{field: 'unit_price', title: '单价', span: 8, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber } }},
{field: 'total_price', title: '总价', span: 8, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber }}},
{field: 'freight', title: '运费', span: 8, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber }}},
]},
//
driver_subsidyOptions: {
items: [
{field:'',title:'',span:24,isTitle:true,Htitle:'司机补贴',itemRender:{}},//线
{field: 'driver_salary', title: '司机工资',isNeedOutbound:true, span: 12, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber }}},
{field: 'driver_subsidy', title: '补贴金额', span: 12, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber }}},
{field: 'driver_subsidy_remark', title: '补贴备注', span: 24, itemRender: {name: '$textarea'}},
]
},
//
addModeItems: [],
tableData: [
@ -641,6 +768,13 @@ export default {
// =============================== End ===============================
this.formOptions.data = a.data[this.detailDataFieldName];
if(!this.formOptions.data.maintenance){
this.formOptions.data.maintenance = [{
maintenance_price:null,
maintenance_name: "",
maintenance_remark: ""
}]
}
if(!this.formOptions.data.other_expenses_log){
this.formOptions.data.other_expenses_log = [{
other_expenses_amount:null,
@ -648,6 +782,16 @@ export default {
other_expenses_remark: ""
}]
}
if(!this.formOptions.data.tire){
this.formatFormData.data.tire=[{
old_tire_number:'',
tire_number:'',
tire_brand:'',
tire_price:0,
tire_remark:''
}]
}
}).catch((a) => {
this.$mk.error(a.data.msg);
});
@ -710,6 +854,33 @@ export default {
return false
}
},
//
addTrainNumber(){
this.formOptions.data.train_number.push({
custom_id: null,
custom_name: "",
supplier_id: null,
supplier_name: "",
soil_quality_material_id: null,
supplier_outbound_tonnage:0,
//
buy_unit_price:0,
//
buy_total_price:0,
//
customer_warehousing_tonnage:0,
//
unit_price:0,
//
total_price:0,
//
freight:0
})
},
//
deleteTrainNumber(index){
this.formOptions.data.train_number.splice(index,1)
},
//
pageAdd(row,field,table) {
const $table = this.$refs[table]
@ -743,6 +914,10 @@ export default {
this.formOptions.data.oil_consumption[e.field] = Number(this.formOptions.data.oil_consumption[e.field])
}else{
this.formOptions.data[e.field] = Number(this.formOptions.data[e.field])
if( this.formOptions.data.train_number.length>0){
this.formOptions.data.train_number[this.nowIndex][e.field] = Number(this.formOptions.data.train_number[this.nowIndex][e.field])
}
}
}else{
return
@ -765,6 +940,12 @@ export default {
this.formOptions.data.other_expenses_log.forEach(item => {
item.other_expenses_amount = Number(item.other_expenses_amount)
})
this.formOptions.data.tire.forEach(item => {
item.tire_price = Number(item.tire_price)
})
this.formOptions.data.maintenance.forEach(item => {
item.maintenance_price = Number(item.maintenance_price)
})
//
if(this.formOptions.data.is_outsourcing == 0){
this.formOptions.data.outsourcing_truck_number = null;
@ -864,13 +1045,11 @@ export default {
}
.Htitle{
font-weight: bold;
font-size: 16px;
color: #122ed1;
display: flex;
align-items: center;
width: 100%;
padding-left: 10px;
.Htitle-p{margin-bottom: 0;margin: 0 10px;}
.Htitle-p{margin-bottom: 0;margin: 0 10px; color: #122ed1; font-size: 16px;}
.left-line{width: 40px;height: 1px;background-color:#122ed1;}
.right-line{flex-grow: 1;height: 1px;background-color:#122ed1;}
}