修改运输金额管理,修改查看结算单页

This commit is contained in:
hr121 2025-08-13 21:45:35 +08:00
parent afb46f9e7b
commit 0aba0aabb6
6 changed files with 130 additions and 138 deletions

View File

@ -317,10 +317,6 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.app-container {
padding: 20px;
}
.filter-container { .filter-container {
display: flex; display: flex;
align-items: center; align-items: center;

View File

@ -371,10 +371,6 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.app-container {
padding: 20px;
}
.page-title { .page-title {
margin-bottom: 20px; margin-bottom: 20px;
color: #303133; color: #303133;

View File

@ -195,10 +195,6 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.app-container {
padding: 20px;
}
.filter-container { .filter-container {
display: flex; display: flex;
align-items: center; align-items: center;

View File

@ -171,9 +171,8 @@ export default {
SettlementPdf SettlementPdf
}, },
data() { data() {
const defaultStartDate = new Date();
const defaultEndDate = new Date();
return { return {
orderId: '',
loading: false, loading: false,
scenicAreaOptions: [], scenicAreaOptions: [],
settlementStatus: 0, settlementStatus: 0,
@ -182,9 +181,9 @@ export default {
query: { query: {
batchNo: "", batchNo: "",
scenicArea: "", scenicArea: "",
dateRange: [defaultStartDate, defaultEndDate], dateRange: [],
}, },
defaultDateRange: [defaultStartDate, defaultEndDate], defaultDateRange: [],
page: { page: {
current: 1, current: 1,
size: 10 size: 10
@ -209,9 +208,20 @@ export default {
})) }))
// //
const orderId = this.$route.query.orderId this.orderId = this.$route.query.orderId
if (orderId) { if(this.orderId) {
this.loading = true this.loading = true
this.getOrderDetail(this.orderId)
} else {
this.$message.error('没有提供订单ID')
}
},
methods: {
getOrderStatusText,
getSettlementStatusText,
getOrderStatusClass,
getSettlementStatusClass,
async getOrderDetail(orderId) {
try { try {
const settleOrderDetail = await getSettleOrderDetail(orderId) const settleOrderDetail = await getSettleOrderDetail(orderId)
await Promise.all(settleOrderDetail.map(async (item) => { await Promise.all(settleOrderDetail.map(async (item) => {
@ -224,8 +234,9 @@ export default {
item.createBy = pilotResponse.name item.createBy = pilotResponse.name
// //
const scenic = scenicResponse.find(s => s.key === item.attractionId) console.log(this.scenicAreaOptions)
item.scenicName = scenic ? scenic.value : '' const scenic = this.scenicAreaOptions.find(s => s.value === item.attractionId)
item.scenicName = scenic ? scenic.label : ''
})) }))
this.originalData = settleOrderDetail // this.originalData = settleOrderDetail //
this.tableData = settleOrderDetail this.tableData = settleOrderDetail
@ -239,13 +250,7 @@ export default {
} finally { } finally {
this.loading = false this.loading = false
} }
} },
},
methods: {
getOrderStatusText,
getSettlementStatusText,
getOrderStatusClass,
getSettlementStatusClass,
handleSearch() { handleSearch() {
this.loading = true this.loading = true
try { try {
@ -290,10 +295,10 @@ export default {
}, },
async handleCancelSettlement() { async handleCancelSettlement() {
try { try {
await updateSettleOrderStatus(this.$route.query.orderId, 3) await updateSettleOrderStatus(this.orderId, 3)
this.settlementStatus = 3 this.settlementStatus = 3
this.$message.success('取消结算成功') this.$message.success('取消结算成功')
this.handleSearch() // this.getOrderDetail(this.orderId) //
} catch (error) { } catch (error) {
console.error('Error canceling settlement:', error) console.error('Error canceling settlement:', error)
this.$message.error('取消结算失败') this.$message.error('取消结算失败')
@ -307,9 +312,9 @@ export default {
this.page.current = val; this.page.current = val;
}, },
async handlePrint() { async handlePrint() {
if (this.$route.query.orderId) { if (this.orderId) {
try { try {
// Wait for Vue to render the component // VUE
await this.$nextTick() await this.$nextTick()
await this.$refs.settlementPdf.generatePDF() await this.$refs.settlementPdf.generatePDF()
} catch (error) { } catch (error) {
@ -322,11 +327,11 @@ export default {
}, },
async handleStatusChange(status) { async handleStatusChange(status) {
try { try {
await updateSettleOrderStatus(this.$route.query.orderId, status) await updateSettleOrderStatus(this.orderId, status)
this.settlementStatus = status this.settlementStatus = status
const statusText = status === 1 ? '已确认' : '已完成' const statusText = status === 1 ? '已确认' : '已完成'
this.$message.success(`结算单状态已更新为:${statusText}`) this.$message.success(`结算单状态已更新为:${statusText}`)
this.handleSearch() // this.getOrderDetail(this.orderId) //
} catch (error) { } catch (error) {
console.error('Error updating settlement status:', error) console.error('Error updating settlement status:', error)
this.$message.error('更新结算状态失败') this.$message.error('更新结算状态失败')
@ -337,10 +342,6 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.app-container {
padding: 20px;
}
.page-title { .page-title {
margin-bottom: 20px; margin-bottom: 20px;
font-size: 22px; font-size: 22px;

View File

@ -7,21 +7,13 @@
> >
<!-- 表单区域 --> <!-- 表单区域 -->
<el-form ref="feeForm" :model="form" :rules="rules" label-width="100px"> <el-form ref="feeForm" :model="form" :rules="rules" label-width="100px">
<!-- 景区名称只读 -->
<el-form-item label="景区名称" prop="scenicName">
<el-input v-model="form.scenicName" disabled></el-input>
</el-form-item>
<!-- 金额输入带校验 --> <!-- 金额输入带校验 -->
<el-form-item label="金额 (KG)" prop="feePerKg"> <el-form-item label="金额 (KG)" prop="feePerKg">
<el-input-number <el-input
v-model="form.feePerKg" v-model="form.feePerKg"
:min="0.01"
:step="0.01"
:precision="2"
placeholder="请输入金额" placeholder="请输入金额"
style="width: 100%" style="width: 100%"
></el-input-number> ></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -34,65 +26,65 @@
</template> </template>
<script> <script>
import { edit } from "@/api/system/scenic";
export default { export default {
name: 'SetFeeModal', name: "SetFeeModal",
props: { props: {
visible: { visible: {
type: Boolean, type: Boolean,
required: true required: true,
}, },
scenicInfo: { scenicInfo: {
type: Object, type: Object,
default: () => null default: () => null,
} },
}, },
data() { data() {
return { return {
form: { form: {
scenicName: '',
feePerKg: null, feePerKg: null,
id: null id: null,
}, },
rules: { rules: {
feePerKg: [ feePerKg: [
{ required: true, message: '请输入金额', trigger: 'blur' }, { required: true, message: "请输入金额", trigger: "blur" },
{ type: 'number', min: 0.01, message: '金额必须大于 0', trigger: 'blur' } ],
] },
} };
}
}, },
watch: { watch: {
scenicInfo(newVal) { scenicInfo(newVal) {
if (newVal) { if (newVal) {
this.form = { this.form = {
scenicName: newVal.scenicName || '',
feePerKg: newVal.feePerKg || null, feePerKg: newVal.feePerKg || null,
id: newVal.id || null id: newVal.id || null,
} };
} }
} },
}, },
methods: { methods: {
async handleSubmit() { handleCancel() {
try { this.$emit("update:visible", false);
const valid = await this.$refs.feeForm.validate() this.$refs.feeForm.resetFields();
if (valid) { },
// API async handleSubmit() {
console.log('提交的数据:', { try {
id: this.form.id, const valid = await this.$refs.feeForm.validate();
feePerKg: this.form.feePerKg if (valid) {
}) await edit({
id: this.form.id,
this.$message.success('设置成功') price: this.form.feePerKg,
this.$emit('success') });
this.handleCancel() this.$message.success("设置成功");
} this.$emit("success");
} catch (error) { this.handleCancel();
console.error('表单验证失败', error) }
this.$message.error('请输入正确的金额') } catch (error) {
} console.error("修改景区价格失败:", error);
} this.$message.error(error.message || "修改失败");
} }
} },
},
};
</script> </script>

View File

@ -1,27 +1,27 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<!-- 搜索栏 --> <!-- 搜索栏 -->
<el-card class="box-card"> <div class="filter-container">
<div class="filter-container"> <el-input
<el-input v-model="query.scenicName"
v-model="query.scenicName" placeholder="请输入景区名称或区域名称"
placeholder="请输入景区名称或区域名称" style="width: 200px"
style="width: 200px" clearable
clearable />
/> <el-button type="primary" @click="handleSearch">查询</el-button>
<el-button type="primary" @click="handleSearch">查询</el-button> <el-button @click="handleReset">重置</el-button>
<el-button @click="handleReset">重置</el-button> </div>
</div>
</el-card>
<!-- 表格 --> <!-- 表格 -->
<el-table :data="tableData" stripe style="width: 100%"> <el-table :data="tableData" stripe style="width: 100%">
<el-table-column prop="areaName" label="区域名称" align="left" /> <el-table-column prop="areaName" label="区域名称" align="left" />
<el-table-column prop="scenicName" label="景区名称" align="left" /> <el-table-column prop="scenicName" label="景区名称" align="left" />
<el-table-column prop="feePerKg" label="金额 / KG" align="left" /> <el-table-column prop="feePerKg" label="金额 / KG" align="center" />
<el-table-column label="操作" width="120" align="center" fixed="right"> <el-table-column label="操作" width="120" align="center" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="primary" size="mini" @click="handleSetFee(scope.row)">设置金额</el-button> <el-button type="primary" size="mini" @click="handleSetFee(scope.row)"
>设置金额</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -49,17 +49,18 @@
</template> </template>
<script> <script>
import SetFeeModal from "./components/SetFeeModal.vue";
import { list } from "@/api/system/scenic";
export default { export default {
name: 'TransportFee', name: "TransportFee",
components: { components: {
SetFeeModal SetFeeModal,
}, },
data() { data() {
return { return {
// //
query: { query: {
scenicName: '' scenicName: "",
}, },
// //
tableData: [], tableData: [],
@ -67,74 +68,84 @@ export default {
page: { page: {
current: 1, current: 1,
size: 10, size: 10,
total: 0 total: 0,
}, },
// //
setFeeVisible: false, setFeeVisible: false,
currentScenicInfo: null currentScenicInfo: null,
} };
}, },
mounted() { mounted() {
this.fetchData() this.fetchData();
}, },
methods: { methods: {
async fetchData() { async fetchData() {
// try {
this.tableData = [ const params = {
{ areaName: '华南区', scenicName: '白云山', feePerKg: 5.5 }, page: this.page.current - 1,
{ areaName: '华东区', scenicName: '西湖', feePerKg: 4.8 } size: this.page.size,
] name: this.query.scenicName,
this.page.total = 2 };
} const { content, totalElements } = await list(params);
}, this.tableData = content.map((item) => ({
id: item.id,
areaName: item.areaName,
scenicName: item.name,
feePerKg: item.price ? item.price + '元' : "无",
}));
this.page.total = parseInt(totalElements);
} catch (error) {
console.error("获取景区数据失败:", error);
this.$message.error("获取景区数据失败");
}
},
// //
handleSearch() { handleSearch() {
this.page.current = 1 this.page.current = 1;
this.fetchData() this.fetchData();
}, },
// //
handleReset() { handleReset() {
this.query = { this.query = {
scenicName: '' scenicName: "",
} };
this.page.current = 1 this.page.current = 1;
this.fetchData() this.fetchData();
}, },
// //
handleSizeChange(size) { handleSizeChange(size) {
this.page.size = size this.page.size = size;
this.fetchData() this.fetchData();
}, },
// //
handleCurrentChange(current) { handleCurrentChange(current) {
this.page.current = current this.page.current = current;
this.fetchData() this.fetchData();
}, },
// //
handleSetFee(row) { handleSetFee(row) {
this.currentScenicInfo = row this.currentScenicInfo = {
this.setFeeVisible = true id: row.id,
scenicName: row.scenicName,
feePerKg: row.feePerKg,
};
this.setFeeVisible = true;
}, },
// //
handleSetFeeSuccess() { handleSetFeeSuccess() {
this.setFeeVisible = false this.setFeeVisible = false;
this.fetchData() this.fetchData();
} },
} },
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.app-container {
padding: 20px;
}
.filter-container { .filter-container {
display: flex; display: flex;
align-items: center; align-items: center;