This commit is contained in:
zxx 2024-04-22 10:42:22 +08:00
parent 6d8bac75bc
commit 709ade1c57
9 changed files with 787 additions and 14 deletions

View File

@ -0,0 +1,327 @@
<template>
<!-- <page-layout :desc="desc"> -->
<div class="page-body">
<vxe-form :data="formOptions.data" ref="xForm" :title-width="formOptions.titleWidth"
:title-align="formOptions.titleAlign" :rules="formOptions.rules" :items="formOptions.items" titleColon>
<!-- =========================== 自定义区域 Start ======================= -->
<!-- =========================== 自定义区域 End ======================= -->
</vxe-form>
<div class="mk-toolbar" v-if="isEdit">
</div>
<div class="footerbar">
<a-button type="primary" @click="ok">确定</a-button>
<a-button @click="cancel">取消</a-button>
</div>
</div>
<!-- </page-layout> -->
</template>
<script>
import BASE_URL from '@/services/Middle/transport/Maintenance/api.js';
// import PageLayout from '@/layouts/PageLayout'
export default {
name: 'MaintenanceUpdate',
i18n: require('./i18n'),
// components: {PageLayout},
props: {
pageMode: {
type: String,
default: "edit"
},
dataId: {}
},
data() {
//
var pageData = {
//
currentConfigName: "",
// ID
currentBeid: 0,
uploadDefaultImg: null,
detailDataFieldName: "maintenance",
actions: {
// =============================== Start ===============================
MaintenanceList: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/list`, //
MaintenanceSearch: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/search`, //
MaintenanceDetail: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/detail`, //
MaintenanceCreate: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/create`, //
MaintenanceUpdate: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/update`, //
MaintenanceDelete: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/detele`, //
MaintenanceBatchDelete: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/batchDelete`, //
MaintenanceBatchUpdate: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/batchUpdate`, //
MaintenanceBatchCreate: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/batchCreate`, //
MaintenanceBatchHandle: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/batchHandle`, //
OtherExpensesList: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/list`, //
OtherExpensesSearch: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/search`, //
OtherExpensesDetail: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/detail`, //
OtherExpensesCreate: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/create`, //
OtherExpensesUpdate: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/update`, //
OtherExpensesDelete: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/detele`, //
OtherExpensesBatchDelete: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/batchDelete`, //
OtherExpensesBatchUpdate: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/batchUpdate`, //
OtherExpensesBatchCreate: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/batchCreate`, //
OtherExpensesBatchHandle: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/batchHandle`, //
// =============================== End ===============================
},
keyName: 'id',
//
isEdit: false,
//
formOptions: {
data: {
// =============================== Start ===============================
id: 0,
code: "",
name: "",
description: "",
create_uid: 0,
update_uid: 0,
create_time: new Date(2100, 1, 1).getTime() / 10000,
update_time: new Date(2100, 1, 1).getTime() / 10000,
// =============================== End ===============================
},
//
titleWidth: 100,
//
titleAlign: 'right',
//
rules: {
// =============================== Start ===============================
code: [
{message: '请输入编码'}
],
name: [
{message: '请输入名称'}
],
description: [
{message: '请输入描述'}
],
// =============================== End ===============================
},
//
items: [
// =============================== Start ===============================
{field: 'code', title: '编码', span: 12, itemRender: {name: '$input'}},
{field: 'name', title: '名称', span: 12, itemRender: {name: '$input'}},
{field: 'description', title: '描述', span: 24, itemRender: {name: '$input'}},
// =============================== End ===============================
]
},
//
addModeItems: [],
};
pageData.actions.get = pageData.actions.MaintenanceDetail;
pageData.actions.create = pageData.actions.MaintenanceCreate;
pageData.actions.update = pageData.actions.MaintenanceUpdate;
//
pageData.formOptions = Object.assign({}, this.$mk.config.defaults.formOptions, pageData.formOptions);
return pageData;
},
computed: {
// desc() {
// return this.$t('editPageDesc')
// }
},
created() {
// id
let dataId = this.getDataId();
// id
if (dataId) {
const json = `{"id":${dataId}}`;
this.$mk.post({
url: this.actions.get,
loading: "加载中...",
data: json,
config: {
headers: {
'Content-Type': 'application/json'
}
}
}).then(a => {
// =============================== Start ===============================
if (a.data[this.detailDataFieldName].create_time) {
a.data[this.detailDataFieldName].create_time = new Date(a.data[this.detailDataFieldName].create_time * 1000);
}
if (a.data[this.detailDataFieldName].update_time) {
a.data[this.detailDataFieldName].update_time = new Date(a.data[this.detailDataFieldName].update_time * 1000);
}
// =============================== End ===============================
this.formOptions.data = a.data[this.detailDataFieldName];
}).catch((a) => {
this.$mk.error(a.data.msg);
});
this.isEdit = true;
} else {
// id
if(this.addModeItems){
this.addModeItems.forEach(item => {
this.pageOptions.formOptions.items.push(item);
})
}
}
},
//
methods: {
// id
getDataId() {
let dataId = this.dataId;
if (this.$route.params.id) {
dataId = this.$route.params.id;
}
if (!dataId) {
dataId = 0;
}
return dataId;
},
//
back() {
//
if (!this.isEdit) {
this.$closePage({
closeRoute: "/Maintenance/MaintenanceCreate"
});
} else {
//
this.$closePage({
closeRoute: "/Maintenance/MaintenanceUpdate"
});
}
//
this.$openPage('/Maintenance/MaintenanceList')
},
//
ok() {
let save = () => {
//
let action = !this.isEdit ? this.actions.create : this.actions.update;
// id id
let postdata = Object.assign({}, this.formOptions.data);
//
if (this.isEdit) {
// postdata = { Maintenance: postdata }
}
//
this.$mk.formatFormData({data: postdata, rules: this.formOptions.items});
//
this.$mk.post({
url: action,
loading: "保存中...",
data: postdata,
useBigInt: true,
}).then(() => { //
this.$mk.success("保存成功");
if (!this.isEdit) { //
this.back();
this.$forceUpdate()
}
}).catch((a) => { //
this.$mk.error(a.data.msg); //
});
};
//
this.$mk.validateForm({form: this.$refs.xForm}).then(() => { //
save(); //
}).catch(count => { //
this.$mk.error(`存在${count}项错误,请检查`);
});
},
//
cancel() {
this.back();
}
},
//
watch: {}
};
</script>
<style scoped lang="less">
.page-body {
padding: 30px;
background: @base-bg-color;
}
.formtabs .ant-tabs-tabpane {
/* background: white; */
padding: 12px;
}
.gridPanel {
height: calc(100vh - 600px);
}
.footerbar {
padding-top: 20px;
padding-left: 10px;
}
.imagePanel {
cursor: pointer;
padding: 10px;
width: 100px;
img {
width: 80px;
height: 80px;
}
}
</style>

View File

@ -0,0 +1,370 @@
<template>
<div class="page-body">
<a-row type="flex">
<a-col :flex="$mk.config.ui.searchFlex">
<!-- 搜索区 -->
<vxe-form :data="searchFormData" :items="searchFormItems" titleColon @submit="onSearch">
<template #date="{}">
<a-form-item label="创建时间" :style="{ display: 'inline-block', width: 120 }">
</a-form-item>
<a-form-item :style="{ display: 'inline-block', width: 'calc(100% - 120px )' }">
<a-range-picker @change="onDateChange"/>
</a-form-item>
</template>
</vxe-form>
</a-col>
<a-col :flex="$mk.config.ui.toolbarFlex">
<!-- 工具条 -->
<mk-toolbar :isShowLog="false" :isShowSetting="false" :isShowAdd="true" @toolbarClick="toolbarClick"></mk-toolbar>
</a-col>
</a-row>
<vxe-toolbar ref="xToolbar" custom>
<template #buttons>
<a-button type="primary" icon="delete" @click="pageDelete()">批量删除</a-button>
</template>
</vxe-toolbar>
<!-- 表格区 -->
<div class="gridPanel">
<vxe-grid ref='xGrid' v-bind="gridOptions">
<!-- =============================== 表格列 自动生成 Start =============================== -->
<!-- =============================== 表格列 自动生成 End =============================== -->
<template #op="{ row }">
<div class="oplinks">
<a @click.stop="pageEdit(row)" title="编辑">
<a-icon type="edit"/>
</a>
<a @click.stop="pageDelete(row)" title="删除">
<a-icon type="delete"/>
</a>
</div>
</template>
</vxe-grid>
</div>
</div>
</template>
<script>
import BASE_URL from '@/services/Middle/transport/Maintenance/api.js';
export default {
name: 'MaintenanceList',
i18n: require('./i18n'), //
props: {
pageMode: {
type: String,
default: "edit"
}
},
data() {
const listFieldName = 'OtherExpenses';
//
var pageData = { //
keyName: 'id', //
listFieldName: 'maintenance',
addPageUrl: "/Maintenance/MaintenanceCreate",
editPageUrl: "/Maintenance/MaintenanceUpdate/",
//
actions: { // Api
// =============================== Start ===============================
MaintenanceList: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/list`, //
MaintenanceSearch: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/search`, //
MaintenanceDetail: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/detail`, //
MaintenanceCreate: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/create`, //
MaintenanceUpdate: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/update`, //
MaintenanceDelete: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/detele`, //
MaintenanceBatchDelete: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/batchDelete`, //
MaintenanceBatchUpdate: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/batchUpdate`, //
MaintenanceBatchCreate: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/batchCreate`, //
MaintenanceBatchHandle: `${BASE_URL.BASE_URL}/Maintenance/v1/maintenance/batchHandle`, //
OtherExpensesList: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/list`, //
OtherExpensesSearch: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/search`, //
OtherExpensesDetail: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/detail`, //
OtherExpensesCreate: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/create`, //
OtherExpensesUpdate: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/update`, //
OtherExpensesDelete: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/detele`, //
OtherExpensesBatchDelete: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/batchDelete`, //
OtherExpensesBatchUpdate: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/batchUpdate`, //
OtherExpensesBatchCreate: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/batchCreate`, //
OtherExpensesBatchHandle: `${BASE_URL.BASE_URL}/Maintenance/v1/other/expenses/batchHandle`, //
// =============================== End ===============================
},
start_time: 0, //
end_time: 0, //
//
searchFormData: {
name: '',
code: '',
},
//
searchRules: [
{key: "name", mode: "like"},
{key: "code", mode: "like"}
],
//
searchFormItems: [ //
{field: 'code', title: '编号', span: 5, itemRender: {name: '$input', props: {placeholder: '请输入编号'}}},
{field: 'name', title: '名称', span: 5, itemRender: {name: '$input', props: {placeholder: '请输入名称'}}},
{span: 8, slots: {default: 'date'}}, //
{
align: 'right', span: 4, itemRender: { //
name: '$buttons', children: [{props: {type: 'submit', content: '搜索', status: 'primary'}}, //
{props: {type: 'reset', content: '重置'}}]
}
}
],
//
gridOptions: { //
height: '100%', // 100%
stripe: true, //
id: 'datagrid_1', //
//
proxyConfig: { //
sort: true, // query
filter: true, // query
props: {
result: listFieldName, //
total: 'total' //
},
// Promise
ajax: {
// queryreload
query: (options) => { // options
const {page, sorts} = options; //
var params = {}; //
params.page = page.currentPage; //
params.limit = page.pageSize; //
params.order_bys = []; //
params.search_rules = this.getSearchParms(); //
if (sorts) { //
sorts.forEach((v) => { //
params.order_bys.push({ //
column: v.property, //
order: v.order //
})
});
}
return this.loadData({params}); //
}
}
},
//
columns: [
{type: 'checkbox', width: 50}, //
{type: 'seq', width: 30}, //
// =============================== Start ===============================
{field: 'code', sortable: true, title: '编码', width: 120}, //
{field: 'name', sortable: true, title: '名称', width: 250}, //
{field: 'description', sortable: true, title: '描述', width: 250}, //
{
field: 'create_time',
formatter: 'formatDate',
width: 100,
sortable: true,
title: '创建时间',
showHeaderOverflow: true
}, //
// =============================== Start ===============================
{title: '操作', slots: {default: 'op'}, width: 120,fixed: 'right'}
]
}
};
pageData.actions.getList = pageData.actions.MaintenanceList;
pageData.actions.delete = pageData.actions.MaintenanceBatchDelete;
pageData.gridOptions = Object.assign({}, this.$mk.config.defaults.gridOptions, pageData.gridOptions); //
return pageData; //
},
//
computed: {
//
// desc() {
// return this.$t('pageDesc')
// }
},
//
created() {
this.$nextTick(() => { // DOM
//
this.$refs.xGrid.connect(this.$refs.xToolbar) //
});
},
//
activated() {
this.onSearch();
//
},
//
onLoad() {
},
//
methods: {
// =============================== status Start ===============================
// =============================== status End ===============================
//
onDateChange(date) { //
if (date && date.length) { //
this.start_time = parseInt(date[0]._d.getTime() / 1000); //
this.end_time = parseInt(date[1]._d.getTime() / 1000); //
} else { //
this.start_time = 0; //
this.end_time = 0; //
}
},
//
getSearchParms() { //
var rules = []; //
let findMode = k => { //
for (let i in this.searchRules) { //
if (this.searchRules[i].key == k) return this.searchRules[i].mode; //
}
return "equal"; //
};
for (let key in this.searchFormData) { //
let value = this.searchFormData[key]; //
if (value) { //
let mode = findMode(key); //
if (mode == "like") { //
value = "%" + value + "%"; // %
}
rules.push({ //
column: key, //
mode: mode, //
value: value //
});
}
}
return rules; //
},
//
getSelectdRow() { //
let row = this.$refs.xGrid.getCurrentRecord(); //
if (!row) { //
let rows = this.$refs.xGrid.getCheckboxRecords(); //
if (rows && rows.length) {
row = rows[0];
} //
}
return row; //
},
//
loadData({params}) {
params.start_time = this.start_time; //
params.end_time = this.end_time; //
return this.$mk.getPagedData({url: this.actions.getList, data: params}); //
},
// add / log / setting
toolbarClick(e) {
if (e.name == "add") { //
this.$openPage("/Maintenance/MaintenanceCreate"); //
}
},
//
pageEdit(row) {
if (!row) { //
this.$mk.msg("请选择行"); //
return; //
}
this.$openPage("/Maintenance/MaintenanceUpdate/" + row[this.keyName]); //
},
//
pageDelete(row) {
let rows = row ? [row] : this.$refs.xGrid.getCheckboxRecords(); //
let ids = []; // id
rows.forEach((row) => { //
ids.push(row[this.keyName]); // idid
});
if (!ids.length) { //
this.$mk.error("请选择行"); //
return;
}
this.$mk.confirm('您确定要删除吗?').then(type => { //
if (type == 'confirm') { //
this.$mk.post({
url: this.actions.delete, //
loading: "删除中...", //
data: {
ids: ids // id
},
useBigInt: true
}).then(() => { //
this.$mk.success("删除成功"); //
this.onSearch(); //
}).catch((a) => { //
this.$mk.error(a.data.msg); //
});
}
});
},
//
onSearch() {
this.$refs.xGrid.commitProxy('query') //
},
},
//
watch: {}
};
</script>
<style scoped lang="less">
.page-body {
padding: 30px;
background: @base-bg-color;
}
.gridPanel {
height: calc(100vh - 400px);
}
</style>
<style>
.oplinks svg {
width: 22px;
height: 22px;
margin: 0 5px 0 0;
}
</style>

View File

@ -0,0 +1,14 @@
module.exports = {
messages: {
CN: {
pageDesc: '描述内容',
},
HK: {
pageDesc: '描述内容',
},
US: {
pageDesc: 'Form pages are used to collect or verify information to users, and basic forms are common in scenarios where there are fewer data items.',
}
}
}

View File

@ -17,6 +17,18 @@
<!-- =========================== 自定义区域 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="left-line"></div>
<p class="Htitle-p">加油信息</p>
<div class="right-line"></div>
</div>
<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 class="mk-toolbar" v-if="isEdit">
</div>
@ -77,18 +89,7 @@
</vxe-table>
</div>
<div class="tablebox" v-if="!formOptions.data.id && formOptions.data.is_oil == 1">
<div class="Htitle" style="margin-bottom: 20px;">
<div class="left-line"></div>
<p class="Htitle-p">加油信息</p>
<div class="right-line"></div>
</div>
<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 class="tablebox" v-if="!formOptions.data.id">
<div class="Htitle" style="margin-bottom: 20px;">
<div class="left-line"></div>
@ -228,6 +229,7 @@ export default {
oil_consumption_price:null,
oil_consumption_total_price:null,
oil_consumption_remark:null,
oil_consumption_date:null,
},
other_expenses_log:[{
other_expenses_amount:null,
@ -419,7 +421,6 @@ export default {
}
}
},
{field: 'driver_salary', title: '司机工资',isNeedOutbound:true, span: 12, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber }}},
{
field: 'outbound_date',
dataRule: {type: "timestamp"},
@ -539,6 +540,7 @@ export default {
{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_repair', title: '', span: 6,itemRender: { name: '$switch', props: { openLabel: '', openValue: 1, closeValue: 0, closeLabel: '' } }},
@ -561,6 +563,14 @@ export default {
{field: "oil_consumption_number", title: '油耗数量', span: 6, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber } }},
{field: "oil_consumption_price", title: '油耗单价', span: 6, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber } }},
{field: "oil_consumption_total_price", title: '油耗总价', span: 6, itemRender: {name: '$input', props: {type: "number"}, events: { input: this.handleInputNumber }}},
{
field: 'oil_consumption_date',
dataRule: {type: "timestamp"},
isNeedOutbound:true,
title: '加油日期',
span: 6,
itemRender: {name: '$input', props: {type: "date"}}
},
{field: "oil_consumption_remark", title: '油耗备注', span: 24, itemRender: {name: '$textarea'}},
]
},
@ -739,7 +749,8 @@ export default {
// this.formOptions.data.outsourcing_driver_phone
this.formOptions.data.outsourcing_driver_phone = String(this.formOptions.data.outsourcing_driver_phone)
// 2018-01-01
this.formOptions.data.oil_consumption.oil_consumption_date = new Date(this.formOptions.data.oil_consumption.oil_consumption_date).getTime() / 1000
//
let action = !this.isEdit ? this.actions.create : this.actions.update;
// id id

View File

@ -65,6 +65,18 @@ const DriverWagesRouterMap = {
}
},
DriverWagesTotal: {
name: '工资汇总',
icon: 'idcard',
path: '/DriverWages/DriverWagesTotal',
meta: {
invisible: true, // 不在菜单中显示
},
component: () => import('@/pages/Middle/transport/DriverWages/DriverWages/Total'),
authority: {
permission: ["DriverWages","DriverWages-All","Driver-Wages-Total"],
}
},
}

View File

@ -137,6 +137,32 @@ const MaintenanceRouterMap = {
permission: ["Maintenance", "Maintenance-All", "Other-Expenses-Log-Update"],
}
},
OtherExpensesList: {
name: '其他费用项目列表',
icon: 'idcard',
path: '/Maintenance/OtherExpensesList',
meta: {
invisible: true, // 不在菜单中显示
},
component: () => import('@/pages/Middle/transport/Maintenance/OtherExpenses/List'),
authority: {
permission: ["Maintenance","Maintenance-All","Other-Expenses-List"],
}
},
OtherExpensesCreate: {
name: '创建其他费用项目',
icon: 'idcard',
path: '/Maintenance/OtherExpensesCreate',
meta: {
invisible: true, // 不在菜单中显示
},
component: () => import('@/pages/Middle/transport/Maintenance/OtherExpenses/Edit'),
authority: {
permission: ["Maintenance","Maintenance-All","Other-Expenses-Create"],
}
},
}
export default MaintenanceRouterMap

View File

@ -64,6 +64,19 @@ const TruckRouterMap = {
permission: ["Truck", "Truck-All", "Truck-Update"],
}
},
TruckIncomeList: {
name: '货车收入列表',
icon: 'idcard',
path: '/Truck/TruckIncomeList',
meta: {
invisible: true, // 不在菜单中显示
},
component: () => import('@/pages/Middle/transport/Truck/Truck/TruckIncome/List'),
authority: {
permission: ["Truck","Truck-All","Truck-Income-List"],
}
},
}
export default TruckRouterMap