Compare commits
2 Commits
61a2691c8b
...
d3296d544e
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d3296d544e | ||
![]() |
beb8fbec76 |
82
src/api/route.js
Normal file
82
src/api/route.js
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 分页查询路线(支持路线名模糊查询)
|
||||||
|
export function getRoutesByPage(params) {
|
||||||
|
return request({
|
||||||
|
url: 'cpRoute',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加路线
|
||||||
|
export function createRoute(data) {
|
||||||
|
return request({
|
||||||
|
url: 'cpRoute',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改路线
|
||||||
|
export function updateRoute(data) {
|
||||||
|
return request({
|
||||||
|
url: 'cpRoute',
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 全部路线
|
||||||
|
export function getAllRoutes(params) {
|
||||||
|
return request({
|
||||||
|
url: 'cpRoute/all',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据景区获取景区下的所有路线
|
||||||
|
export function getRoutesByAreaId(params) {
|
||||||
|
return request({
|
||||||
|
url: 'cpRoute/getByAreaId',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据景区名称模糊查询路线
|
||||||
|
export function searchRoutesByName(params) {
|
||||||
|
return request({
|
||||||
|
url: 'cpRoute/searchRoutesByName',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询单个路线
|
||||||
|
export function getRouteDetail(id) {
|
||||||
|
return request({
|
||||||
|
url: `cpRoute/${id}`,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除路线
|
||||||
|
export function deleteRoute(id) {
|
||||||
|
return request({
|
||||||
|
url: `cpRoute/${id}`,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
getRoutesByPage,
|
||||||
|
createRoute,
|
||||||
|
updateRoute,
|
||||||
|
getAllRoutes,
|
||||||
|
getRoutesByAreaId,
|
||||||
|
searchRoutesByName,
|
||||||
|
getRouteDetail,
|
||||||
|
deleteRoute
|
||||||
|
}
|
143
src/views/route/manageroute/add-route/index.vue
Normal file
143
src/views/route/manageroute/add-route/index.vue
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-card class="box-card">
|
||||||
|
<div slot="header" class="clearfix">
|
||||||
|
<span style="color: #027db4;">新增路线</span>
|
||||||
|
</div>
|
||||||
|
<el-form :model="form" :rules="rules" ref="formRef" label-width="100px" class="detail-form">
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="路线名称" prop="routeName">
|
||||||
|
<el-input v-model="form.routeName" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="景区名称" prop="scenicArea">
|
||||||
|
<el-select v-model="form.scenicArea" placeholder="请选择景区">
|
||||||
|
<el-option label="白云山" value="白云山" />
|
||||||
|
<el-option label="丹霞山" value="丹霞山" />
|
||||||
|
<el-option label="西樵山" value="西樵山" />
|
||||||
|
<el-option label="罗浮山" value="罗浮山" />
|
||||||
|
<el-option label="鼎湖山" value="鼎湖山" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="起飞点" prop="takeoffPoint">
|
||||||
|
<el-input v-model="form.takeoffPoint" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="降落点" prop="landingPoint">
|
||||||
|
<el-input v-model="form.landingPoint" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="16">
|
||||||
|
<el-form-item label="路线描述" prop="routeDesc">
|
||||||
|
<el-input type="textarea" v-model="form.routeDesc" :rows="4" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<div class="btn-container">
|
||||||
|
<el-button @click="handleCancel">取消</el-button>
|
||||||
|
<el-button type="primary" @click="handleSubmit">保存</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { ElMessage } from 'element-ui'
|
||||||
|
import routeApi from '@/api/system/route'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'AddRoute',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
routeName: '',
|
||||||
|
scenicArea: '',
|
||||||
|
takeoffPoint: '',
|
||||||
|
landingPoint: '',
|
||||||
|
routeDesc: '',
|
||||||
|
routeType: 'normal'
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
routeName: [
|
||||||
|
{ required: true, message: '请输入路线名称', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
scenicArea: [
|
||||||
|
{ required: true, message: '请选择景区', trigger: 'change' }
|
||||||
|
],
|
||||||
|
takeoffPoint: [
|
||||||
|
{ required: true, message: '请输入起飞点', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
landingPoint: [
|
||||||
|
{ required: true, message: '请输入降落点', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleCancel() {
|
||||||
|
this.$router.go(-1)
|
||||||
|
},
|
||||||
|
handleSubmit() {
|
||||||
|
this.$refs.formRef.validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
this.submitForm()
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async submitForm() {
|
||||||
|
try {
|
||||||
|
await routeApi.createRoute(this.form)
|
||||||
|
ElMessage.success('新增成功')
|
||||||
|
this.$router.push({ path: '/route/manageroute' })
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.error('新增失败')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.app-container {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-form {
|
||||||
|
.el-form-item {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
::v-deep .el-input {
|
||||||
|
width: 240px;
|
||||||
|
}
|
||||||
|
::v-deep .el-select {
|
||||||
|
width: 240px;
|
||||||
|
}
|
||||||
|
::v-deep .el-input.is-disabled .el-input__inner {
|
||||||
|
background-color: white;
|
||||||
|
color: #686868;
|
||||||
|
}
|
||||||
|
::v-deep .el-textarea.is-disabled .el-textarea__inner {
|
||||||
|
background-color: white;
|
||||||
|
color: #686868;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-container {
|
||||||
|
margin-top: 20px;
|
||||||
|
text-align: right;
|
||||||
|
padding-right: 40px;
|
||||||
|
}
|
||||||
|
</style>
|
159
src/views/route/manageroute/edit-route/index.vue
Normal file
159
src/views/route/manageroute/edit-route/index.vue
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-card class="box-card">
|
||||||
|
<div slot="header" class="clearfix">
|
||||||
|
<span style="color: #027db4;">修改路线</span>
|
||||||
|
</div>
|
||||||
|
<el-form :model="form" :rules="rules" ref="formRef" label-width="100px" class="detail-form">
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="路线名称" prop="name">
|
||||||
|
<el-input v-model="form.name" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="景区ID" prop="scenicId">
|
||||||
|
<el-input v-model="form.scenicId" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="起点" prop="startPoint">
|
||||||
|
<el-input v-model="form.startPoint" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="终点" prop="endPoint">
|
||||||
|
<el-input v-model="form.endPoint" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="16">
|
||||||
|
<el-form-item label="路线描述" prop="link">
|
||||||
|
<el-input type="textarea" v-model="form.link" :rows="4" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<div class="btn-container">
|
||||||
|
<el-button @click="handleCancel">取消</el-button>
|
||||||
|
<el-button type="primary" @click="handleSubmit">修改</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { ElMessage } from 'element-ui'
|
||||||
|
import routeApi from '@/api/system/route'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'EditRoute',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
id: null,
|
||||||
|
name: '',
|
||||||
|
scenicId: null,
|
||||||
|
startPoint: '',
|
||||||
|
endPoint: '',
|
||||||
|
link: ''
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
name: [
|
||||||
|
{ required: true, message: '请输入路线名称', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
scenicId: [
|
||||||
|
{ required: true, message: '请输入景区ID', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
startPoint: [
|
||||||
|
{ required: true, message: '请输入起点', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
endPoint: [
|
||||||
|
{ required: true, message: '请输入终点', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getRouteDetail()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getRouteDetail() {
|
||||||
|
const id = this.$route.query.id
|
||||||
|
if (!id) {
|
||||||
|
ElMessage.error('缺少路线ID,请从列表页进入修改')
|
||||||
|
this.$router.go(-1)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const res = await routeApi.getRouteDetail(id)
|
||||||
|
this.form = {
|
||||||
|
...this.form,
|
||||||
|
...res.data
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.error('获取路线详情失败,请重试')
|
||||||
|
this.$router.go(-1)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleCancel() {
|
||||||
|
this.$router.go(-1)
|
||||||
|
},
|
||||||
|
handleSubmit() {
|
||||||
|
this.$refs.formRef.validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
this.submitForm()
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async submitForm() {
|
||||||
|
try {
|
||||||
|
await routeApi.updateRoute(this.form)
|
||||||
|
ElMessage.success('修改成功')
|
||||||
|
this.$router.push({ path: '/route/manageroute' })
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.error('修改失败,请重试')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.app-container {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-form {
|
||||||
|
.el-form-item {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
::v-deep .el-input {
|
||||||
|
width: 240px;
|
||||||
|
}
|
||||||
|
::v-deep .el-select {
|
||||||
|
width: 240px;
|
||||||
|
}
|
||||||
|
::v-deep .el-input.is-disabled .el-input__inner {
|
||||||
|
background-color: white;
|
||||||
|
color: #686868;
|
||||||
|
}
|
||||||
|
::v-deep .el-textarea.is-disabled .el-textarea__inner {
|
||||||
|
background-color: white;
|
||||||
|
color: #686868;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-container {
|
||||||
|
margin-top: 20px;
|
||||||
|
text-align: right;
|
||||||
|
padding-right: 40px;
|
||||||
|
}
|
||||||
|
</style>
|
161
src/views/route/manageroute/index.vue
Normal file
161
src/views/route/manageroute/index.vue
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<!-- 搜索栏 -->
|
||||||
|
<el-card class="box-card">
|
||||||
|
<div class="filter-container">
|
||||||
|
<el-input
|
||||||
|
v-model="query.name"
|
||||||
|
placeholder="请输入路线名称"
|
||||||
|
class="filter-item"
|
||||||
|
style="width: 200px;"
|
||||||
|
clearable
|
||||||
|
/>
|
||||||
|
<el-button type="primary" class="filter-item" @click="handleSearch">
|
||||||
|
<i class="fa fa-search mr-1"></i>查询
|
||||||
|
</el-button>
|
||||||
|
<el-button type="success" class="filter-item" @click="handleAdd">
|
||||||
|
<i class="fa fa-plus mr-1"></i>新增路线
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<!-- 表格 -->
|
||||||
|
<el-table
|
||||||
|
ref="table"
|
||||||
|
:data="tableData"
|
||||||
|
style="width: 100%"
|
||||||
|
@selection-change="handleSelectionChange"
|
||||||
|
>
|
||||||
|
<el-table-column prop="scenicId" label="景区ID" align="left" />
|
||||||
|
<el-table-column prop="name" label="路线名称" align="left" />
|
||||||
|
<el-table-column prop="createTime" label="创建时间" align="left" />
|
||||||
|
<el-table-column label="操作" width="120" align="center" fixed="right">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button type="text" size="small" @click="handleEdit(scope.row)">修改</el-button>
|
||||||
|
<el-button type="text" size="small" class="text-danger" @click="handleDelete(scope.row)">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<!-- 分页 -->
|
||||||
|
<div class="pagination-container">
|
||||||
|
<el-pagination
|
||||||
|
:current-page.sync="page.current"
|
||||||
|
:page-sizes="[10, 20, 50, 100]"
|
||||||
|
:page-size="page.size"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
@size-change="handleSizeChange"
|
||||||
|
@current-change="handleCurrentChange"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { ElMessage, ElMessageBox } from 'element-ui'
|
||||||
|
import routeApi from '@/api/system/route'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'RouteManager',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tableData: [],
|
||||||
|
selection: [],
|
||||||
|
query: {
|
||||||
|
name: ''
|
||||||
|
},
|
||||||
|
page: {
|
||||||
|
current: 1,
|
||||||
|
size: 10,
|
||||||
|
total: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.fetchData()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async fetchData() {
|
||||||
|
try {
|
||||||
|
const params = {
|
||||||
|
...this.query,
|
||||||
|
pageNum: this.page.current,
|
||||||
|
pageSize: this.page.size
|
||||||
|
}
|
||||||
|
const res = await routeApi.getAllRoutes(params)
|
||||||
|
this.tableData = res.data
|
||||||
|
this.page.total = res.totalElements
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.error('获取路线列表失败,请重试')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleSearch() {
|
||||||
|
this.page.current = 1
|
||||||
|
this.fetchData()
|
||||||
|
},
|
||||||
|
handleAdd() {
|
||||||
|
this.$router.push({ path: '/route/manageroute/add-route' })
|
||||||
|
},
|
||||||
|
handleEdit(row) {
|
||||||
|
this.$router.push({
|
||||||
|
path: '/route/manageroute/edit-route',
|
||||||
|
query: { id: row.id }
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async handleDelete(row) {
|
||||||
|
this.$confirm(
|
||||||
|
`确定要删除路线 "${row.name}" 吗?`,
|
||||||
|
'提示',
|
||||||
|
{
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
}
|
||||||
|
).then(async () => {
|
||||||
|
try {
|
||||||
|
await routeApi.deleteRoute(row.id)
|
||||||
|
ElMessage.success('删除成功')
|
||||||
|
this.fetchData()
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.error('删除失败,请重试')
|
||||||
|
}
|
||||||
|
}).catch(() => {})
|
||||||
|
},
|
||||||
|
handleSelectionChange(val) {
|
||||||
|
this.selection = val
|
||||||
|
},
|
||||||
|
handleSizeChange(val) {
|
||||||
|
this.page.size = val
|
||||||
|
this.fetchData()
|
||||||
|
},
|
||||||
|
handleCurrentChange(val) {
|
||||||
|
this.page.current = val
|
||||||
|
this.fetchData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.app-container {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.filter-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
gap: 10px;
|
||||||
|
|
||||||
|
.filter-item {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-table {
|
||||||
|
margin-top: 20px;
|
||||||
|
::v-deep .el-table__body-wrapper {
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
98
src/views/transport-fee/components/SetFeeModal.vue
Normal file
98
src/views/transport-fee/components/SetFeeModal.vue
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
title="设置运输金额"
|
||||||
|
:visible.sync="visible"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
width="400px"
|
||||||
|
>
|
||||||
|
<!-- 表单区域 -->
|
||||||
|
<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-input-number
|
||||||
|
v-model="form.feePerKg"
|
||||||
|
:min="0.01"
|
||||||
|
:step="0.01"
|
||||||
|
:precision="2"
|
||||||
|
placeholder="请输入金额"
|
||||||
|
style="width: 100%"
|
||||||
|
></el-input-number>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<!-- 底部按钮区域 -->
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="handleCancel">取消</el-button>
|
||||||
|
<el-button type="primary" @click="handleSubmit">确定</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'SetFeeModal',
|
||||||
|
props: {
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
scenicInfo: {
|
||||||
|
type: Object,
|
||||||
|
default: () => null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
scenicName: '',
|
||||||
|
feePerKg: null,
|
||||||
|
id: null
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
feePerKg: [
|
||||||
|
{ required: true, message: '请输入金额', trigger: 'blur' },
|
||||||
|
{ type: 'number', min: 0.01, message: '金额必须大于 0', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
scenicInfo(newVal) {
|
||||||
|
if (newVal) {
|
||||||
|
this.form = {
|
||||||
|
scenicName: newVal.scenicName || '',
|
||||||
|
feePerKg: newVal.feePerKg || null,
|
||||||
|
id: newVal.id || null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async handleSubmit() {
|
||||||
|
try {
|
||||||
|
const valid = await this.$refs.feeForm.validate()
|
||||||
|
if (valid) {
|
||||||
|
// 模拟请求成功(不调用真实 API)
|
||||||
|
console.log('提交的数据:', {
|
||||||
|
id: this.form.id,
|
||||||
|
feePerKg: this.form.feePerKg
|
||||||
|
})
|
||||||
|
|
||||||
|
this.$message.success('设置成功')
|
||||||
|
this.$emit('success')
|
||||||
|
this.handleCancel()
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('表单验证失败', error)
|
||||||
|
this.$message.error('请输入正确的金额')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
152
src/views/transport-fee/index.vue
Normal file
152
src/views/transport-fee/index.vue
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<!-- 搜索栏 -->
|
||||||
|
<el-card class="box-card">
|
||||||
|
<div class="filter-container">
|
||||||
|
<el-input
|
||||||
|
v-model="query.scenicName"
|
||||||
|
placeholder="请输入景区名称或区域名称"
|
||||||
|
style="width: 200px"
|
||||||
|
clearable
|
||||||
|
/>
|
||||||
|
<el-button type="primary" @click="handleSearch">查询</el-button>
|
||||||
|
<el-button @click="handleReset">重置</el-button>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<!-- 表格 -->
|
||||||
|
<el-table :data="tableData" stripe style="width: 100%">
|
||||||
|
<el-table-column prop="areaName" label="区域名称" align="left" />
|
||||||
|
<el-table-column prop="scenicName" label="景区名称" align="left" />
|
||||||
|
<el-table-column prop="feePerKg" label="金额 / KG" align="left" />
|
||||||
|
<el-table-column label="操作" width="120" align="center" fixed="right">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button type="primary" size="mini" @click="handleSetFee(scope.row)">设置金额</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<!-- 分页 -->
|
||||||
|
<div class="pagination-container">
|
||||||
|
<el-pagination
|
||||||
|
:current-page.sync="page.current"
|
||||||
|
:page-sizes="[10, 20, 30, 40]"
|
||||||
|
:page-size="page.size"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
:total="page.total"
|
||||||
|
@size-change="handleSizeChange"
|
||||||
|
@current-change="handleCurrentChange"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 弹窗组件 -->
|
||||||
|
<SetFeeModal
|
||||||
|
:visible.sync="setFeeVisible"
|
||||||
|
:scenic-info="currentScenicInfo"
|
||||||
|
@success="handleSetFeeSuccess"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'TransportFee',
|
||||||
|
components: {
|
||||||
|
SetFeeModal
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 查询条件
|
||||||
|
query: {
|
||||||
|
scenicName: ''
|
||||||
|
},
|
||||||
|
// 表格数据
|
||||||
|
tableData: [],
|
||||||
|
// 分页信息
|
||||||
|
page: {
|
||||||
|
current: 1,
|
||||||
|
size: 10,
|
||||||
|
total: 0
|
||||||
|
},
|
||||||
|
// 弹窗控制
|
||||||
|
setFeeVisible: false,
|
||||||
|
currentScenicInfo: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.fetchData()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async fetchData() {
|
||||||
|
// 模拟数据填充
|
||||||
|
this.tableData = [
|
||||||
|
{ areaName: '华南区', scenicName: '白云山', feePerKg: 5.5 },
|
||||||
|
{ areaName: '华东区', scenicName: '西湖', feePerKg: 4.8 }
|
||||||
|
]
|
||||||
|
this.page.total = 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 搜索
|
||||||
|
handleSearch() {
|
||||||
|
this.page.current = 1
|
||||||
|
this.fetchData()
|
||||||
|
},
|
||||||
|
|
||||||
|
// 重置
|
||||||
|
handleReset() {
|
||||||
|
this.query = {
|
||||||
|
scenicName: ''
|
||||||
|
}
|
||||||
|
this.page.current = 1
|
||||||
|
this.fetchData()
|
||||||
|
},
|
||||||
|
|
||||||
|
// 分页大小变更
|
||||||
|
handleSizeChange(size) {
|
||||||
|
this.page.size = size
|
||||||
|
this.fetchData()
|
||||||
|
},
|
||||||
|
|
||||||
|
// 当前页变更
|
||||||
|
handleCurrentChange(current) {
|
||||||
|
this.page.current = current
|
||||||
|
this.fetchData()
|
||||||
|
},
|
||||||
|
|
||||||
|
// 设置金额按钮
|
||||||
|
handleSetFee(row) {
|
||||||
|
this.currentScenicInfo = row
|
||||||
|
this.setFeeVisible = true
|
||||||
|
},
|
||||||
|
|
||||||
|
// 设置金额成功回调
|
||||||
|
handleSetFeeSuccess() {
|
||||||
|
this.setFeeVisible = false
|
||||||
|
this.fetchData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.app-container {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.filter-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
gap: 10px;
|
||||||
|
|
||||||
|
.filter-item {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-container {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue
Block a user