From c9e78ad7be4006bfd62e728b249e68a7366d2e38 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 21 一月 2026 17:27:18 +0800
Subject: [PATCH] 湟水峡 1.生产报工单价默认值修改 2.车辆管理页面开发和联调 3.生产管理模块修改 4.发货前端页面开发
---
src/api/collaborativeApproval/vehicleManagement.js | 14
src/assets/styles/index.scss | 3
src/views/inventoryManagement/receiptManagement/index.vue | 82 ------
src/views/inventoryManagement/issueManagement/index.vue | 70 -----
src/views/salesManagement/salesLedger/index.vue | 69 +++++
src/views/collaborativeApproval/vehicleManagement/index.vue | 372 +++++++++++++++++-------------
src/views/inventoryManagement/dispatchLog/index.vue | 61 -----
7 files changed, 289 insertions(+), 382 deletions(-)
diff --git a/src/api/collaborativeApproval/vehicleManagement.js b/src/api/collaborativeApproval/vehicleManagement.js
index 0478101..ce8447d 100644
--- a/src/api/collaborativeApproval/vehicleManagement.js
+++ b/src/api/collaborativeApproval/vehicleManagement.js
@@ -3,7 +3,7 @@
// 鏌ヨ杞﹁締鍒楄〃
export function listVehicle(page, query) {
return request({
- url: "/vehicleManagement/getList",
+ url: "/carInfo/listPage",
method: "get",
params: {
...page,
@@ -15,7 +15,7 @@
// 鏂板杞﹁締
export function addVehicle(data) {
return request({
- url: "/vehicleManagement/add",
+ url: "/carInfo/add",
method: "post",
data,
});
@@ -24,7 +24,7 @@
// 淇敼杞﹁締
export function updateVehicle(data) {
return request({
- url: "/vehicleManagement/update",
+ url: "/carInfo/update",
method: "post",
data,
});
@@ -33,7 +33,7 @@
// 鍒犻櫎杞﹁締
export function delVehicle(query) {
return request({
- url: "/vehicleManagement/delete",
+ url: "/carInfo/delete",
method: "delete",
data: query,
});
@@ -50,7 +50,7 @@
// 浣跨敤杞﹁締
export function useVehicle(data) {
return request({
- url: "/vehicleManagement/useVehicle",
+ url: "/carInfoRecord/add",
method: "post",
data,
});
@@ -59,7 +59,7 @@
// 杩樿溅
export function returnVehicle(data) {
return request({
- url: "/vehicleManagement/returnVehicle",
+ url: "/carInfoRecord/update",
method: "post",
data,
});
@@ -68,7 +68,7 @@
// 浣跨敤璁板綍
export function getVehicleUsageRecords(page, query) {
return request({
- url: "/vehicleManagement/getUsageRecords",
+ url: "/carInfoRecord/list",
method: "get",
params: {
...page,
diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss
index 86ba8dd..a14f968 100644
--- a/src/assets/styles/index.scss
+++ b/src/assets/styles/index.scss
@@ -138,7 +138,8 @@
.table_list {
height: calc(100vh - 11em);
background: #fff;
- padding: 18px
+ padding: 18px;
+ margin-top: 16px;
}
.components-container {
margin: 30px 50px;
diff --git a/src/views/collaborativeApproval/vehicleManagement/index.vue b/src/views/collaborativeApproval/vehicleManagement/index.vue
index 51e4cd5..acbf408 100644
--- a/src/views/collaborativeApproval/vehicleManagement/index.vue
+++ b/src/views/collaborativeApproval/vehicleManagement/index.vue
@@ -3,7 +3,7 @@
<div class="search_form">
<el-form :model="searchForm" :inline="true">
<el-form-item label="杞︾墝鍙凤細">
- <el-input v-model="searchForm.plateNumber" placeholder="璇疯緭鍏ヨ溅鐗屽彿" clearable prefix-icon="Search"
+ <el-input v-model="searchForm.carNo" placeholder="璇疯緭鍏ヨ溅鐗屽彿" clearable prefix-icon="Search"
@change="handleQuery" />
</el-form-item>
<el-form-item label="棰滆壊锛�">
@@ -15,10 +15,10 @@
@change="handleQuery" />
</el-form-item>
<el-form-item label="浣跨敤鐘舵�侊細">
- <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨" clearable @change="handleQuery" style="width: 200px">
- <el-option label="绌洪棽" value="idle" />
- <el-option label="浣跨敤涓�" value="in_use" />
- <el-option label="缁翠慨涓�" value="maintenance" />
+ <el-select v-model="searchForm.usageStatus" placeholder="璇烽�夋嫨" clearable @change="handleQuery" style="width: 200px">
+ <el-option label="绌洪棽" value="绌洪棽" />
+ <el-option label="浣跨敤涓�" value="浣跨敤涓�" />
+ <el-option label="缁翠慨涓�" value="缁翠慨涓�" />
</el-select>
</el-form-item>
<el-form-item>
@@ -33,7 +33,7 @@
<el-button type="primary" @click="openForm('add')">
鏂板杞﹁締
</el-button>
- <el-button @click="handleOut">瀵煎嚭</el-button>
+<!-- <el-button @click="handleOut">瀵煎嚭</el-button>-->
<el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
</div>
</div>
@@ -42,8 +42,10 @@
:column="tableColumns"
:is-selection="true"
:border="true"
+ :row-key="'id'"
+ :expand-row-keys="expandRowKeys"
:table-loading="tableLoading"
- :table-style="{ width: '100%', height: 'calc(100vh - 18.5em)' }"
+ :table-style="{ width: '100%', height: 'calc(100vh - 21.5em)' }"
:page="{
current: page.current,
size: page.size,
@@ -52,14 +54,39 @@
}"
@selection-change="handleSelectionChange"
@pagination="paginationChange"
+ @expand-change="handleExpandChange"
>
+ <template #expand="{ row }">
+ <div class="expand-wrapper">
+ <el-skeleton v-if="expandChildLoading[row.id]" animated :rows="3" />
+ <template v-else>
+ <el-empty v-if="!(expandChildData[row.id] && expandChildData[row.id].length)" description="鏆傛棤浣跨敤璁板綍" />
+ <el-table
+ v-else
+ :data="expandChildData[row.id]"
+ size="small"
+ border
+ style="width: 100%"
+ :header-cell-style="{ background: '#F7F8FA' }"
+ >
+ <el-table-column prop="userName" label="浣跨敤浜�" width="140" />
+ <el-table-column prop="desc" label="鐩殑鍦�" width="180" />
+ <el-table-column prop="useTime" label="浣跨敤鏃堕棿" width="180" />
+ <el-table-column prop="carReturnDate" label="杩樿溅鏃堕棿" width="180" />
+ <el-table-column prop="odometerBefore" label="浣跨敤鍓嶉噷绋�(km)" width="140" />
+ <el-table-column prop="odometerAfter" label="杩樿溅鏃堕噷绋�(km)" width="140" />
+ <el-table-column prop="thisTripMileage" label="鏈琛岄┒閲岀▼(km)" width="160" />
+ </el-table>
+ </template>
+ </div>
+ </template>
<template #operation="{ row }">
<el-button link type="primary" size="small" @click="openForm('edit', row)">缂栬緫</el-button>
- <el-button link type="primary" size="small" v-if="row.status === 'idle'"
- @click="openUseForm(row)">浣跨敤杞﹁締</el-button>
- <el-button link type="primary" size="small" v-if="row.status === 'in_use'"
+ <el-button link type="primary" size="small" v-if="row.usageStatus === '绌洪棽'"
+ @click="openUseForm(row)">鐢ㄨ溅</el-button>
+ <el-button link type="primary" size="small" v-if="row.usageStatus === '浣跨敤涓�'"
@click="openReturnForm(row)">杩樿溅</el-button>
- <el-button link type="primary" size="small" @click="viewUsageRecords(row)">浣跨敤璁板綍</el-button>
+ <el-button link type="primary" size="small" @click="openUsageRecordsDialog(row)">浣跨敤璁板綍</el-button>
</template>
</PIMTable>
</div>
@@ -70,8 +97,8 @@
<el-form :model="form" label-width="120px" label-position="top" :rules="rules" ref="formRef">
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="杞︾墝鍙凤細" prop="plateNumber">
- <el-input v-model="form.plateNumber" placeholder="璇疯緭鍏ヨ溅鐗屽彿" clearable />
+ <el-form-item label="杞︾墝鍙凤細" prop="carNo">
+ <el-input v-model="form.carNo" placeholder="璇疯緭鍏ヨ溅鐗屽彿" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
@@ -87,11 +114,11 @@
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="浣跨敤鐘舵�侊細" prop="status">
- <el-select v-model="form.status" placeholder="璇烽�夋嫨" clearable style="width: 100%">
- <el-option label="绌洪棽" value="idle" />
- <el-option label="浣跨敤涓�" value="in_use" />
- <el-option label="缁翠慨涓�" value="maintenance" />
+ <el-form-item label="浣跨敤鐘舵�侊細" prop="usageStatus">
+ <el-select v-model="form.usageStatus" placeholder="璇烽�夋嫨" clearable style="width: 100%">
+ <el-option label="绌洪棽" value="绌洪棽" />
+ <el-option label="浣跨敤涓�" value="浣跨敤涓�" />
+ <el-option label="缁翠慨涓�" value="缁翠慨涓�" />
</el-select>
</el-form-item>
</el-col>
@@ -99,7 +126,7 @@
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="琛ㄦ樉閲岀▼(km)锛�">
- <el-input-number v-model="form.odometer" :min="0" :precision="2" style="width: 100%"
+ <el-input-number v-model="form.odometerMileage" :min="0" :precision="2" style="width: 100%"
placeholder="璇疯緭鍏ヨ〃鏄鹃噷绋�" clearable />
</el-form-item>
</el-col>
@@ -126,7 +153,7 @@
<el-row :gutter="30">
<el-col :span="24">
<el-form-item label="杞︾墝鍙凤細">
- <el-input :value="currentUseRow ? currentUseRow.plateNumber : ''" disabled />
+ <el-input :value="currentUseRow ? currentUseRow.carNo : ''" disabled />
</el-form-item>
</el-col>
</el-row>
@@ -138,25 +165,40 @@
</el-col>
</el-row>
<el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="琛ㄦ樉閲岀▼(km)锛�" prop="odometer">
- <el-input-number v-model="useForm.odometer" :min="0" :precision="2" style="width: 100%"
- placeholder="璇疯緭鍏ヨ〃鏄鹃噷绋�" clearable />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鏈琛岄┒閲岀▼(km)锛�" prop="travelDistance">
- <el-input-number v-model="useForm.travelDistance" :min="0" :precision="2" style="width: 100%"
- placeholder="璇疯緭鍏ユ湰娆¤椹堕噷绋�" clearable />
+ <el-col :span="24">
+ <el-form-item label="鍊熺敤鏃堕棿锛�" prop="carRentalDate">
+ <el-date-picker
+ style="width: 100%"
+ v-model="useForm.carRentalDate"
+ type="date"
+ value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD"
+ placeholder="璇烽�夋嫨鍊熺敤鏃堕棿"
+ clearable
+ />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="24">
- <el-form-item label="浣跨敤浜猴細" prop="userId">
- <el-select v-model="useForm.userId" placeholder="璇烽�夋嫨浣跨敤浜�" clearable filterable>
- <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
+ <el-form-item label="浣跨敤浜猴細" prop="userName">
+ <el-select v-model="useForm.userName" placeholder="璇烽�夋嫨浣跨敤浜�" clearable filterable>
+ <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName" />
</el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="琛ㄦ樉閲岀▼(km)锛�" prop="odometerMileage">
+ <el-input-number v-model="useForm.odometerMileage" :min="0" :precision="2" style="width: 100%"
+ placeholder="璇疯緭鍏ヨ〃鏄鹃噷绋�" clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏈棰勮琛岄┒閲岀▼(km)锛�" prop="thisTripMileage">
+ <el-input-number v-model="useForm.thisTripMileage" :min="0" :precision="2" style="width: 100%"
+ placeholder="璇疯緭鍏ユ湰娆¢璁¤椹堕噷绋�" clearable />
</el-form-item>
</el-col>
</el-row>
@@ -182,30 +224,23 @@
<el-row :gutter="30">
<el-col :span="24">
<el-form-item label="杞︾墝鍙凤細">
- <el-input :value="currentReturnRow ? currentReturnRow.plateNumber : ''" disabled />
+ <el-input :value="currentReturnRow ? currentReturnRow.carNo : ''" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="24">
- <el-form-item label="杩樿溅鏃堕棿锛�" prop="returnTime">
- <el-date-picker style="width: 100%" v-model="returnForm.returnTime" value-format="YYYY-MM-DD HH:mm:ss"
- format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="璇烽�夋嫨杩樿溅鏃堕棿" clearable />
+ <el-form-item label="杩樿溅鏃堕棿锛�" prop="carReturnDate">
+ <el-date-picker style="width: 100%" v-model="returnForm.carReturnDate" value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD" type="date" placeholder="璇烽�夋嫨杩樿溅鏃堕棿" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="琛ㄦ樉閲岀▼(km)锛�" prop="odometer">
- <el-input-number v-model="returnForm.odometer" :min="0" :precision="2" style="width: 100%"
+ <el-col :span="24">
+ <el-form-item label="琛ㄦ樉閲岀▼(km)锛�" prop="odometerMileage">
+ <el-input-number v-model="returnForm.odometerMileage" :min="0" :precision="2" style="width: 100%"
placeholder="璇疯緭鍏ヨ〃鏄鹃噷绋�" clearable />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="浣跨敤浜猴細" prop="userId">
- <el-select v-model="returnForm.userId" placeholder="璇烽�夋嫨浣跨敤浜�" clearable filterable>
- <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
- </el-select>
</el-form-item>
</el-col>
</el-row>
@@ -232,7 +267,7 @@
:column="usageRecordsColumns"
:border="true"
:table-loading="usageRecordsLoading"
- :table-style="{ width: '100%' }"
+ :table-style="{ height: 'calc(100vh - 24em)', width: '100%' }"
:page="{
current: usageRecordsPage.current,
size: usageRecordsPage.size,
@@ -270,33 +305,52 @@
const selectedRows = ref([]);
const userList = ref([]);
const tableLoading = ref(false);
+const expandRowKeys = ref([]);
const page = reactive({
current: 1,
size: 100,
});
const total = ref(0);
+// 浣跨敤璁板綍寮圭獥
+const usageRecordsVisible = ref(false);
+const usageRecordsData = ref([]);
+const usageRecordsLoading = ref(false);
+const usageRecordsPage = reactive({
+ current: 1,
+ size: 10,
+});
+const usageRecordsTotal = ref(0);
+const usageRecordsColumns = ref([
+ { label: "浣跨敤浜�", prop: "userName", width: "120" },
+ { label: "鐩殑鍦�", prop: "destination", width: "150" },
+ { label: "鍊熺敤鏃堕棿", prop: "carRentalDate", },
+ { label: "杩樿溅鏃堕棿", prop: "carReturnDate",},
+ { label: "浣跨敤鍓嶉噷绋�(km)", prop: "odometerMileage", },
+ { label: "鏈琛岄┒閲岀▼(km)", prop: "thisTripMileage",},
+]);
+
// 鎼滅储琛ㄥ崟
const data = reactive({
searchForm: {
- plateNumber: "",
+ carNo: "",
color: "",
brand: "",
- status: "",
+ usageStatus: "",
},
form: {
- plateNumber: "",
+ carNo: "",
color: "",
brand: "",
- status: "idle",
- odometer: 0,
+ usageStatus: "绌洪棽",
+ odometerMileage: 0,
remark: "",
},
rules: {
- plateNumber: [{ required: true, message: "璇疯緭鍏ヨ溅鐗屽彿", trigger: "blur" }],
+ carNo: [{ required: true, message: "璇疯緭鍏ヨ溅鐗屽彿", trigger: "blur" }],
color: [{ required: true, message: "璇疯緭鍏ラ鑹�", trigger: "blur" }],
brand: [{ required: true, message: "璇疯緭鍏ュ搧鐗�", trigger: "blur" }],
- status: [{ required: true, message: "璇烽�夋嫨浣跨敤鐘舵��", trigger: "change" }],
+ usageStatus: [{ required: true, message: "璇烽�夋嫨浣跨敤鐘舵��", trigger: "change" }],
},
});
const { form, rules } = toRefs(data);
@@ -307,18 +361,20 @@
const currentUseRow = ref(null);
const useVehicleFormData = reactive({
useForm: {
- vehicleId: "",
+ carInfoId: "",
destination: "",
- odometer: 0,
- travelDistance: 0,
- userId: "",
+ carRentalDate: dayjs().format("YYYY-MM-DD"),
+ odometerMileage: 0,
+ thisTripMileage: 0,
+ userName: "",
remark: "",
},
useRules: {
destination: [{ required: true, message: "璇疯緭鍏ョ洰鐨勫湴", trigger: "blur" }],
- odometer: [{ required: true, message: "璇疯緭鍏ヨ〃鏄鹃噷绋�", trigger: "blur" }],
- travelDistance: [{ required: true, message: "璇疯緭鍏ユ湰娆¤椹堕噷绋�", trigger: "blur" }],
- userId: [{ required: true, message: "璇烽�夋嫨浣跨敤浜�", trigger: "change" }],
+ carRentalDate: [{ required: true, message: "璇烽�夋嫨鍊熺敤鏃堕棿", trigger: "change" }],
+ odometerMileage: [{ required: true, message: "璇疯緭鍏ヨ〃鏄鹃噷绋�", trigger: "blur" }],
+ thisTripMileage: [{ required: true, message: "璇疯緭鍏ユ湰娆¤椹堕噷绋�", trigger: "blur" }],
+ userName: [{ required: true, message: "璇烽�夋嫨浣跨敤浜�", trigger: "change" }],
},
});
const { useForm, useRules } = toRefs(useVehicleFormData);
@@ -328,40 +384,20 @@
const currentReturnRow = ref(null);
const returnFormData = reactive({
returnForm: {
- vehicleId: "",
- returnTime: "",
- odometer: 0,
- userId: "",
+ carInfoId: "",
+ carReturnDate: "",
+ odometerMileage: 0,
remark: "",
},
returnRules: {
- returnTime: [{ required: true, message: "璇烽�夋嫨杩樿溅鏃堕棿", trigger: "change" }],
- odometer: [{ required: true, message: "璇疯緭鍏ヨ〃鏄鹃噷绋�", trigger: "blur" }],
- userId: [{ required: true, message: "璇烽�夋嫨浣跨敤浜�", trigger: "change" }],
+ carReturnDate: [{ required: true, message: "璇烽�夋嫨杩樿溅鏃堕棿", trigger: "change" }],
+ odometerMileage: [{ required: true, message: "璇疯緭鍏ヨ〃鏄鹃噷绋�", trigger: "blur" }],
},
});
const { returnForm, returnRules } = toRefs(returnFormData);
-// 浣跨敤璁板綍
-const usageRecordsVisible = ref(false);
-const usageRecordsData = ref([]);
-const usageRecordsLoading = ref(false);
-const usageRecordsPage = reactive({
- current: 1,
- size: 100,
-});
-const usageRecordsTotal = ref(0);
-const usageRecordsColumns = ref([
- { label: "杞︾墝鍙�", prop: "plateNumber", width: "120" },
- { label: "浣跨敤浜�", prop: "userName", width: "120" },
- { label: "鐩殑鍦�", prop: "destination", width: "150" },
- { label: "浣跨敤鏃堕棿", prop: "useTime", width: "180" },
- { label: "杩樿溅鏃堕棿", prop: "returnTime", width: "180" },
- { label: "浣跨敤鍓嶉噷绋�(km)", prop: "odometerBefore", width: "130" },
- { label: "杩樿溅鏃堕噷绋�(km)", prop: "odometerAfter", width: "130" },
- { label: "鏈琛岄┒閲岀▼(km)", prop: "travelDistance", width: "140" },
-]);
-const currentVehicleId = ref(null);
+const expandChildData = reactive({});
+const expandChildLoading = reactive({});
// 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
const operationType = ref("");
@@ -370,29 +406,22 @@
// 琛ㄦ牸鍒楅厤缃�
const tableColumns = ref([
- { label: "杞︾墝鍙�", prop: "plateNumber", width: "120" },
+ { label: "杞︾墝鍙�", prop: "carNo", width: "120" },
{ label: "棰滆壊", prop: "color", width: "100" },
{ label: "鍝佺墝", prop: "brand", width: "120" },
{
label: "浣跨敤鐘舵��",
- prop: "status",
- width: "100",
+ prop: "usageStatus",
dataType: "tag",
- formatData: (val) => {
- if (val === "idle") return "绌洪棽";
- if (val === "in_use") return "浣跨敤涓�";
- if (val === "maintenance") return "缁翠慨涓�";
- return val || "-";
- },
formatType: (val) => {
- if (val === "idle") return "success";
- if (val === "in_use") return "warning";
- if (val === "maintenance") return "danger";
+ if (val === "绌洪棽") return "success";
+ if (val === "浣跨敤涓�") return "warning";
+ if (val === "缁翠慨涓�") return "danger";
return "info";
},
},
- { label: "褰撳墠浣跨敤浜�", prop: "currentUser", width: "120" },
- { label: "琛ㄦ樉閲岀▼(km)", prop: "odometer", width: "120" },
+ { label: "褰撳墠浣跨敤浜�", prop: "currentUserName", },
+ { label: "琛ㄦ樉閲岀▼(km)", prop: "odometerMileage",},
{ label: "鍒涘缓鏃堕棿", prop: "createTime", width: "180" },
{
label: "鎿嶄綔",
@@ -400,13 +429,14 @@
slot: "operation",
align: "center",
fixed: "right",
- width: "250",
+ width: "180",
},
]);
// 鏌ヨ鍒楄〃
const handleQuery = () => {
page.current = 1;
+ expandRowKeys.value = [];
getList();
};
@@ -421,8 +451,8 @@
listVehicle(page, searchForm)
.then((res) => {
tableLoading.value = false;
- tableData.value = res.records || res.data || [];
- total.value = res.total || 0;
+ tableData.value = res.data.records;
+ total.value = res.data.total || 0;
})
.catch(() => {
tableLoading.value = false;
@@ -434,15 +464,35 @@
selectedRows.value = selection;
};
+// 灞曞紑瀛愯〃鏁版嵁
+const handleExpandChange = (row, expandedRows) => {
+ expandRowKeys.value = expandedRows.map((item) => item.id);
+ if (expandRowKeys.value.includes(row.id)) {
+ loadChildRecords(row.id);
+ }
+};
+
+const loadChildRecords = (carInfoId) => {
+ if (expandChildLoading[carInfoId]) return;
+ expandChildLoading[carInfoId] = true;
+ getVehicleUsageRecords({ current: 1, size: 20 }, { carInfoId })
+ .then((res) => {
+ expandChildData[carInfoId] = res.records || res.data || [];
+ })
+ .finally(() => {
+ expandChildLoading[carInfoId] = false;
+ });
+};
+
// 鎵撳紑寮规
const openForm = async (type, row) => {
operationType.value = type;
form.value = {
- plateNumber: "",
+ carNo: "",
color: "",
brand: "",
- status: "idle",
- odometer: 0,
+ usageStatus: "绌洪棽",
+ odometerMileage: 0,
remark: "",
};
@@ -451,9 +501,8 @@
if (type !== "add") {
currentId.value = row.id;
- getVehicleById(row.id).then((res) => {
- form.value = { ...(res.data || res) };
- });
+ // 鐩存帴浣跨敤琛ㄦ牸琛屾暟鎹紝涓嶅啀璋冪敤API
+ form.value = { ...row };
}
dialogFormVisible.value = true;
};
@@ -484,17 +533,19 @@
const closeDia = () => {
proxy.resetForm("formRef");
dialogFormVisible.value = false;
+ currentId.value = "";
};
// 鎵撳紑浣跨敤杞﹁締寮规
const openUseForm = async (row) => {
currentUseRow.value = row;
useForm.value = {
- vehicleId: row.id,
+ carInfoId: row.id,
destination: "",
- odometer: row.odometer || 0,
- travelDistance: 0,
- userId: "",
+ carRentalDate: dayjs().format("YYYY-MM-DD"),
+ odometerMileage: row.odometerMileage || 0,
+ thisTripMileage: 0,
+ userName: "",
remark: "",
};
@@ -519,19 +570,54 @@
// 鍏抽棴浣跨敤杞﹁締寮规
const closeUseDia = () => {
- proxy.resetForm("useFormRef");
+ try {
+ proxy.resetForm("useFormRef");
+ } catch (error) {
+ console.error("Error resetting form:", error);
+ }
useFormVisible.value = false;
currentUseRow.value = null;
+};
+
+// 鎵撳紑浣跨敤璁板綍寮圭獥
+const openUsageRecordsDialog = async (row) => {
+ usageRecordsVisible.value = true;
+ usageRecordsPage.current = 1;
+ loadUsageRecords(row.id);
+};
+
+// 鍔犺浇浣跨敤璁板綍
+const loadUsageRecords = (carInfoId) => {
+ usageRecordsLoading.value = true;
+ getVehicleUsageRecords(usageRecordsPage, { carInfoId: carInfoId })
+ .then((res) => {
+ usageRecordsData.value = res.data.records;
+ usageRecordsTotal.value = res.data.total || 0;
+ })
+ .finally(() => {
+ usageRecordsLoading.value = false;
+ });
+};
+
+// 浣跨敤璁板綍鍒嗛〉
+const usageRecordsPaginationChange = (obj) => {
+ usageRecordsPage.current = obj.page;
+ usageRecordsPage.size = obj.limit;
+ loadUsageRecords(currentUseRow.value.id);
+};
+
+// 鍏抽棴浣跨敤璁板綍寮圭獥
+const closeUsageRecords = () => {
+ usageRecordsVisible.value = false;
};
// 鎵撳紑杩樿溅寮规
const openReturnForm = async (row) => {
currentReturnRow.value = row;
returnForm.value = {
- vehicleId: row.id,
- returnTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
- odometer: row.odometer || 0,
- userId: "",
+ carInfoId: row.id,
+ carReturnDate: dayjs().format("YYYY-MM-DD"),
+ odometerMileage: row.odometerMileage || 0,
remark: "",
};
@@ -545,7 +631,13 @@
const submitReturnForm = () => {
proxy.$refs["returnFormRef"].validate((valid) => {
if (valid) {
- returnVehicle(returnForm.value).then(() => {
+ // 鑷姩璁剧疆浣跨敤鐘舵�佷负绌洪棽骞舵坊鍔犺溅杈嗚褰旾D
+ const formData = {
+ ...returnForm.value,
+ usageStatus: "绌洪棽",
+ id: currentReturnRow.value.carInfoRecordId
+ };
+ returnVehicle(formData).then(() => {
proxy.$modal.msgSuccess("杩樿溅鎴愬姛");
closeReturnDia();
getList();
@@ -559,42 +651,6 @@
proxy.resetForm("returnFormRef");
returnFormVisible.value = false;
currentReturnRow.value = null;
-};
-
-// 鏌ョ湅浣跨敤璁板綍
-const viewUsageRecords = (row) => {
- currentVehicleId.value = row.id;
- usageRecordsPage.current = 1;
- getUsageRecords();
- usageRecordsVisible.value = true;
-};
-
-// 鑾峰彇浣跨敤璁板綍
-const getUsageRecords = () => {
- usageRecordsLoading.value = true;
- getVehicleUsageRecords(usageRecordsPage, { vehicleId: currentVehicleId.value })
- .then((res) => {
- usageRecordsLoading.value = false;
- usageRecordsData.value = res.records || res.data || [];
- usageRecordsTotal.value = res.total || 0;
- })
- .catch(() => {
- usageRecordsLoading.value = false;
- });
-};
-
-// 浣跨敤璁板綍鍒嗛〉
-const usageRecordsPaginationChange = (obj) => {
- usageRecordsPage.current = obj.page;
- usageRecordsPage.size = obj.limit;
- getUsageRecords();
-};
-
-// 鍏抽棴浣跨敤璁板綍寮规
-const closeUsageRecords = () => {
- usageRecordsVisible.value = false;
- usageRecordsData.value = [];
- currentVehicleId.value = null;
};
// 瀵煎嚭
diff --git a/src/views/inventoryManagement/dispatchLog/index.vue b/src/views/inventoryManagement/dispatchLog/index.vue
index 12e6fcf..f41fe86 100644
--- a/src/views/inventoryManagement/dispatchLog/index.vue
+++ b/src/views/inventoryManagement/dispatchLog/index.vue
@@ -128,67 +128,6 @@
/>
</div>
</el-tab-pane>
-
- <el-tab-pane label="鐢熶骇鍑哄簱" name="semiProduct">
- <div class="search_form">
- <div>
- <span class="search_title ml10">鍑哄簱鏃ユ湡锛�</span>
- <el-date-picker
- v-model="searchForm.timeStr"
- type="date"
- placeholder="璇烽�夋嫨鏃ユ湡"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- clearable
- @change="handleQuery"
- />
- <span class="search_title ml10">浜у搧澶х被锛�</span>
- <el-input
- v-model="searchForm.productCategory"
- style="width: 240px"
- placeholder="璇疯緭鍏�"
- clearable
- />
- <el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
- </div>
- <div>
- <el-button @click="handleOut">瀵煎嚭</el-button>
- <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
- <el-button type="primary" plain @click="handlePrint">鎵撳嵃</el-button>
- </div>
- </div>
- <div class="table_list">
- <el-table
- :data="tableData"
- border
- v-loading="tableLoading"
- @selection-change="handleSelectionChange"
- :expand-row-keys="expandedRowKeys"
- :row-key="(row) => row.id"
- show-summary
- style="width: 100%"
- :summary-method="summarizeMainTable"
- height="calc(100vh - 18.5em)"
- >
- <el-table-column align="center" type="selection" width="55" />
- <el-table-column align="center" label="搴忓彿" type="index" width="60" />
- <el-table-column label="鍑哄簱鏃ユ湡" prop="createTime" width="220" show-overflow-tooltip />
- <el-table-column label="浜у搧澶х被" prop="productCategory" show-overflow-tooltip />
- <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" show-overflow-tooltip />
- <el-table-column label="鍗曚綅" prop="unit" width="100" show-overflow-tooltip />
- <el-table-column label="鍑哄簱鏁伴噺" prop="inboundNum" width="220" show-overflow-tooltip />
- <el-table-column label="鍑哄簱浜�" prop="createBy" width="220" show-overflow-tooltip />
- </el-table>
- <pagination
- v-show="total > 0"
- :total="total"
- layout="total, sizes, prev, pager, next, jumper"
- :page="page.current"
- :limit="page.size"
- @pagination="paginationSemiProductChange"
- />
- </div>
- </el-tab-pane>
</el-tabs>
<!-- 鎵撳嵃棰勮寮圭獥 -->
diff --git a/src/views/inventoryManagement/issueManagement/index.vue b/src/views/inventoryManagement/issueManagement/index.vue
index 6f82adc..c221342 100644
--- a/src/views/inventoryManagement/issueManagement/index.vue
+++ b/src/views/inventoryManagement/issueManagement/index.vue
@@ -152,76 +152,6 @@
@pagination="paginationChange" />
</div>
</el-tab-pane>
- <el-tab-pane label="鐢熶骇鍑哄簱"
- name="product">
- <div class="search_form">
- <div>
- <span class="search_title ml10">浜у搧澶х被锛�</span>
- <el-input v-model="searchForm.productCategory"
- style="width: 240px"
- placeholder="璇疯緭鍏�"
- clearable />
- <el-button type="primary"
- @click="handleQuery"
- style="margin-left: 10px">鎼滅储</el-button>
- </div>
- <div>
- <el-button @click="handleOut">瀵煎嚭</el-button>
- </div>
- </div>
- <div class="table_list">
- <el-table :data="tableData"
- border
- v-loading="tableLoading"
- @selection-change="handleSelectionChange"
- :expand-row-keys="expandedRowKeys"
- :row-key="row => row.id"
- show-summary
- style="width: 100%"
- :summary-method="summarizeMainTable"
- height="calc(100vh - 18.5em)">
- <el-table-column align="center"
- type="selection"
- width="55" />
- <el-table-column align="center"
- label="搴忓彿"
- type="index"
- width="60" />
- <el-table-column label="浜у搧澶х被"
- prop="productCategory"
- show-overflow-tooltip />
- <el-table-column label="瑙勬牸鍨嬪彿"
- prop="specificationModel"
- show-overflow-tooltip />
- <el-table-column label="鍗曚綅"
- prop="unit"
- width="70"
- show-overflow-tooltip />
- <el-table-column label="鍓╀綑搴撳瓨"
- prop="inboundNum0"
- width="90"
- show-overflow-tooltip />
- <el-table-column fixed="right"
- label="鎿嶄綔"
- min-width="60"
- align="center">
- <template #default="scope">
- <el-button link
- :disabled="scope.row.inboundNum0 <= 0"
- type="primary"
- size="small"
- @click="openForm(scope.row);">棰嗙敤</el-button>
- </template>
- </el-table-column>
- </el-table>
- <pagination v-show="total > 0"
- :total="total"
- layout="total, sizes, prev, pager, next, jumper"
- :page="page.current"
- :limit="page.size"
- @pagination="paginationChange" />
- </div>
- </el-tab-pane>
</el-tabs>
<el-dialog v-model="dialogFormVisible"
:title="getDialogTitle()"
diff --git a/src/views/inventoryManagement/receiptManagement/index.vue b/src/views/inventoryManagement/receiptManagement/index.vue
index 9aebae4..3258d76 100644
--- a/src/views/inventoryManagement/receiptManagement/index.vue
+++ b/src/views/inventoryManagement/receiptManagement/index.vue
@@ -206,88 +206,6 @@
@pagination="paginationChange"/>
</div>
</el-tab-pane>
- <el-tab-pane label="鐢熶骇鍏ュ簱"
- name="product">
- <div class="search_form">
- <div>
- <span class="search_title ml10">鍏ュ簱鏃ユ湡锛�</span>
- <el-date-picker v-model="searchForm.timeStr"
- type="date"
- placeholder="璇烽�夋嫨鏃ユ湡"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- clearable
- @change="handleQuery"/>
- <span class="search_title ml10">浜у搧澶х被锛�</span>
- <el-input v-model="searchForm.productCategory"
- style="width: 240px"
- placeholder="璇疯緭鍏�"
- clearable/>
- <el-button type="primary"
- @click="handleQuery"
- style="margin-left: 10px">鎼滅储
- </el-button>
- </div>
- <div>
- <el-button type="primary"
- @click="openForm('add', 'purchase')">鏂板鍏ュ簱
- </el-button>
- <el-button @click="handleOut">瀵煎嚭</el-button>
- <el-button type="danger"
- plain
- @click="handleDelete">鍒犻櫎
- </el-button>
- </div>
- </div>
- <div class="table_list">
- <el-table :data="tableData"
- border
- v-loading="tableLoading"
- @selection-change="handleSelectionChange"
- :expand-row-keys="expandedRowKeys"
- :row-key="row => row.id"
- show-summary
- style="width: 100%"
- :summary-method="summarizeMainTable"
- height="calc(100vh - 18.5em)">
- <el-table-column align="center"
- type="selection"
- width="55"/>
- <el-table-column align="center"
- label="搴忓彿"
- type="index"
- width="60"/>
- <el-table-column label="鍏ュ簱鏃堕棿"
- prop="createTime"
- width="100"
- show-overflow-tooltip/>
- <el-table-column label="浜у搧澶х被"
- prop="productCategory"
- show-overflow-tooltip/>
- <el-table-column label="瑙勬牸鍨嬪彿"
- prop="specificationModel"
- show-overflow-tooltip/>
- <el-table-column label="鍗曚綅"
- prop="unit"
- width="220"
- show-overflow-tooltip/>
- <el-table-column label="鍏ュ簱鏁伴噺"
- prop="inboundNum"
- width="220"
- show-overflow-tooltip/>
- <el-table-column label="鍏ュ簱浜�"
- prop="createBy"
- width="220"
- show-overflow-tooltip/>
- </el-table>
- <pagination v-show="total > 0"
- :total="total"
- layout="total, sizes, prev, pager, next, jumper"
- :page="page.current"
- :limit="page.size"
- @pagination="pageProductChange"/>
- </div>
- </el-tab-pane>
</el-tabs>
<form-dia ref="formDia"
@close="handleQuery"
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 637d528..a1bed58 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -426,6 +426,21 @@
<el-form :model="deliveryForm" label-width="120px" label-position="top" :rules="deliveryRules" ref="deliveryFormRef">
<el-row :gutter="30">
<el-col :span="24">
+ <el-form-item label="鍙戣揣绫诲瀷锛�" prop="shippingType">
+ <el-select
+ v-model="deliveryForm.shippingType"
+ placeholder="璇烽�夋嫨鍙戣揣绫诲瀷"
+ style="width: 100%"
+ @change="handleShippingTypeChange"
+ >
+ <el-option label="璐ц溅" value="truck" />
+ <el-option label="蹇��" value="express" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="24">
<el-form-item label="鍙戣揣鏃ユ湡锛�" prop="shippingDate">
<el-date-picker
style="width: 100%"
@@ -440,11 +455,20 @@
</el-col>
</el-row>
<el-row :gutter="30">
- <el-col :span="24">
+ <el-col :span="24" v-if="deliveryForm.shippingType === 'truck'">
<el-form-item label="鍙戣揣杞︾墝鍙凤細" prop="shippingCarNumber">
<el-input
v-model="deliveryForm.shippingCarNumber"
placeholder="璇疯緭鍏ュ彂璐ц溅鐗屽彿"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="24" v-else>
+ <el-form-item label="蹇�掑叕鍙革細" prop="expressCompany">
+ <el-input
+ v-model="deliveryForm.expressCompany"
+ placeholder="璇疯緭鍏ュ揩閫掑叕鍙�"
clearable
/>
</el-form-item>
@@ -597,15 +621,23 @@
const currentDeliveryRow = ref(null);
const deliveryFormData = reactive({
deliveryForm: {
+ shippingType: "truck", // truck: 璐ц溅, express: 蹇��
shippingDate: "",
shippingCarNumber: "",
+ expressCompany: "",
},
deliveryRules: {
+ shippingType: [
+ { required: true, message: "璇烽�夋嫨鍙戣揣绫诲瀷", trigger: "change" }
+ ],
shippingDate: [
{ required: true, message: "璇烽�夋嫨鍙戣揣鏃ユ湡", trigger: "change" }
],
shippingCarNumber: [
- { required: true, message: "璇疯緭鍏ュ彂璐ц溅鐗屽彿", trigger: "blur" }
+ { validator: (_, value, callback) => validateShippingCarNumber(value, callback), trigger: "blur" }
+ ],
+ expressCompany: [
+ { validator: (_, value, callback) => validateExpressCompany(value, callback), trigger: "blur" }
],
},
});
@@ -1413,6 +1445,20 @@
return total.toFixed(2);
};
+// 鍙戣揣绫诲瀷鏍¢獙锛氳揣杞︽椂瑕佹眰杞︾墝锛屽揩閫掓椂瑕佹眰蹇�掑叕鍙�
+const validateShippingCarNumber = (value, callback) => {
+ if (deliveryForm.value.shippingType === "truck") {
+ if (!value) return callback(new Error("璇疯緭鍏ュ彂璐ц溅鐗屽彿"));
+ }
+ callback();
+};
+const validateExpressCompany = (value, callback) => {
+ if (deliveryForm.value.shippingType === "express") {
+ if (!value) return callback(new Error("璇疯緭鍏ュ揩閫掑叕鍙�"));
+ }
+ callback();
+};
+
const mathNum = () => {
console.log("productForm.value", productForm.value);
if (!productForm.value.taxInclusiveUnitPrice) {
@@ -1612,6 +1658,12 @@
// ElMessage.error(err.msg);
// });
currentDeliveryRow.value = row;
+ deliveryForm.value = {
+ shippingType: "truck",
+ shippingDate: getCurrentDate(),
+ shippingCarNumber: "",
+ expressCompany: "",
+ };
deliveryFormVisible.value = true;
};
@@ -1621,8 +1673,10 @@
if (valid) {
addShippingInfo({
salesLedgerId: currentDeliveryRow.value.id,
+ shippingType: deliveryForm.value.shippingType,
shippingDate: deliveryForm.value.shippingDate,
- shippingCarNumber: deliveryForm.value.shippingCarNumber,
+ shippingCarNumber: deliveryForm.value.shippingType === "truck" ? deliveryForm.value.shippingCarNumber : "",
+ expressCompany: deliveryForm.value.shippingType === "express" ? deliveryForm.value.expressCompany : "",
})
.then(() => {
proxy.$modal.msgSuccess("鍙戣揣鎴愬姛");
@@ -1643,6 +1697,15 @@
currentDeliveryRow.value = null;
};
+// 鍙戣揣绫诲瀷鍒囨崲鏃舵竻绌哄搴斿瓧娈�
+const handleShippingTypeChange = (val) => {
+ if (val === "truck") {
+ deliveryForm.value.expressCompany = "";
+ } else {
+ deliveryForm.value.shippingCarNumber = "";
+ }
+};
+
onMounted(() => {
getList();
});
--
Gitblit v1.9.3