后端 #13

Closed
pfqxe4nai wants to merge 0 commits from xiaofan_branch into master

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 MiB

Binary file not shown.

@ -0,0 +1,118 @@
/*
Navicat Premium Data Transfer
Source Server : mini12306
Source Server Type : MySQL
Source Server Version : 80036
Source Host : localhost:3306
Source Schema : mini12306
Target Server Type : MySQL
Target Server Version : 80036
File Encoding : 65001
Date: 10/05/2024 10:26:03
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for log
-- ----------------------------
DROP TABLE IF EXISTS `log`;
CREATE TABLE `log` (
`id` int(0) NOT NULL,
`eventname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`operator` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`eventtime` datetime(0) DEFAULT CURRENT_TIMESTAMP,
`eventcontent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_german2_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for passenger
-- ----------------------------
DROP TABLE IF EXISTS `passenger`;
CREATE TABLE `passenger` (
`id` int(0) NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`account` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`mobileno` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`bankcardno` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`idcardno` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`state` enum('已乘坐','未乘坐') CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`membertype` enum('普通用户','高级会员') CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_german2_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of passenger
-- ----------------------------
INSERT INTO `passenger` VALUES (1, '肖帆', '2023210156', 'xiaofan123.', '18879439530', '122312324334546575676', '362502200202213611', '未乘坐', '普通用户');
-- ----------------------------
-- Table structure for ticket
-- ----------------------------
DROP TABLE IF EXISTS `ticket`;
CREATE TABLE `ticket` (
`id` int(0) NOT NULL,
`seatno` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`seatclass` int(0) DEFAULT NULL,
`price` decimal(10, 2) DEFAULT NULL,
`state` enum('未售','已售') CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`trainno` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`date` datetime(0) DEFAULT NULL,
`passengerAccont` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`fromstation` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`tostation` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_german2_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for ticketseller
-- ----------------------------
DROP TABLE IF EXISTS `ticketseller`;
CREATE TABLE `ticketseller` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NOT NULL,
`accont` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NOT NULL,
`password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`idcardno` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`mobileno` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`state` enum('未购票','已购票','已乘坐') CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`authority level` enum('普通用户','高级会员') CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_german2_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for train
-- ----------------------------
DROP TABLE IF EXISTS `train`;
CREATE TABLE `train` (
`id` int(0) NOT NULL,
`trainno` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`date` date DEFAULT NULL,
`departurestation` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`arrivalstation` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`departuretime` datetime(0) DEFAULT NULL,
`arrivaltime` datetime(0) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_german2_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for train station
-- ----------------------------
DROP TABLE IF EXISTS `train station`;
CREATE TABLE `train station` (
`id` int(0) NOT NULL,
`trainno` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`date` datetime(0) DEFAULT NULL,
`stationname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL,
`arrivaltime` datetime(0) DEFAULT NULL,
`departuretime` datetime(0) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_german2_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 MiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

@ -23,12 +23,6 @@
"navigationBarTitleText": "Mini-12306"
}
},
{
"path": "pages/index/returnsearch-results",
"style": {
"navigationBarTitleText": "Mini-12306"
}
},
{
"path": "pages/index/ticket",
"style": {
@ -82,29 +76,11 @@
"navigationBarTitleText": "Mini-12306"
}
},
{
"path": "pages/index/buyReturn",
"style": {
"navigationBarTitleText": "Mini-12306"
}
},
{
"path": "pages/index/return-Payment",
"style": {
"navigationBarTitleText": "Mini-12306"
}
},
{
"path": "pages/index/newpassenger",
"style": {
"navigationBarTitleText": "Mini-12306"
}
},
{
"path": "pages/index/change-password",
"style": {
"navigationBarTitleText": "Mini-12306"
}
}
],
"globalStyle": {

@ -1,184 +1,58 @@
<template>
<view class="Change-page">
<view class="change-ticket-page">
<view class="header">改签申请</view>
<view class="Change-form">
<view class="change-form">
<view class="form-item">
<text class="label">订单号</text>
<input v-model="orderNumber" type="text" placeholder="请输入订单号" />
<text class="label">订单号</text>
<input v-model="originalOrderNumber" type="text" placeholder="请输入订单号" />
</view>
<view class="form-item">
<text class="label">乘车日期</text>
<input v-model="travelDate" type="date" placeholder="乘车日期" :value="today"/>
<text class="label">乘车日期</text>
<input v-model="newTravelDate" type="date" placeholder="请选择新乘车日期" />
</view>
<view class="form-item">
<text class="label">改签原因</text>
<textarea v-model="ChangeReason" placeholder="请输入改签原因"></textarea>
<textarea v-model="changeReason" placeholder="请输入改签原因"></textarea>
</view>
<view class="search-box">
<input v-model="departure" type="text" placeholder="新的出发地" @click="handleDepartureClick" />
<input v-model="destination" type="text" placeholder="新的目的地" @click="handleDestinationClick" />
</view>
<view>
<input v-model="date" type="date" placeholder="新的出发日期" :value="today" />
</view>
<view class="form-item">
<button class="submit-btn" @click="submitChange"></button>
</view>
</view>
</view>
<view class="home-page">
<div v-if="ticketInfo && ticketInfo.length">
<div v-for="(ticket, index) in ticketInfo" :key="index" class="ticket-box">
<div class="departure-info">
<p class="time">{{ ticket.departure_time }}</p>
<p class="station">{{ ticket.departure_station }}</p>
</div>
<div class="train-info">
<h2 class="train-no">{{ ticket.trainno }}</h2>
<p class="date">{{ ticket.date }}</p>
</div>
<div class="arrival-info">
<p class="time">{{ ticket.arrival_time }}</p>
<p class="station">{{ ticket.arrival_station }}</p>
</div>
<button class="change-button" @click="changeticketClick(ticket)"></button>
</div>
</div>
</view>
</template>
<script>
export default {
data() {
return {
orderNumber: '',
ChangeReason: '',
travelDate:'',
departure: '',
destination: '',
date: '',
today: '',
ticketInfo: []
originalOrderNumber: '',
newTravelDate: '',
changeReason: ''
};
},
mounted() {
//
this.today = new Date().toISOString().slice(0,10);
this.date = this.today; //
},
methods: {
submitChange() {
if (!this.ChangeReason) {
uni.showToast({
title: '请说明理由',
icon: 'none',
duration: 2000
});
return;
}
// 退退
const formData = {
ticket_id:this.orderNumber,
travelDate:this.travelDate,
departure: this.departure,
destination: this.destination,
date:this.date,
};
uni.request({
url: 'http://localhost:8000/reschedule_ticket/',
method: 'POST',
data: JSON.stringify(formData), // formDataJSON
header: {
'content-type': 'application/json' // JSON
},
success: (res) => {
//
if (res.statusCode === 200) { // 200
const data = res.data;
if (data.message === '申请成功') {
console.log('请求成功',data);
this.ticketInfo = data.trains;
uni.showToast({
title: '查询成功',
icon: 'success'
});
} else {
//
const data = res.data;
console.log('请求成功', data);
uni.showToast({
title: data.message + (data.reason ? ': ' + data.reason : ''),
icon: 'none'
});
}
}
},
fail: (err) => {
//
console.error('请求失败', err);
uni.showToast({
title: '请求失败,请重试',
icon: 'none'
});
}
});
},
changeticketClick(ticket) {
const formData = {
ticket_id:this.orderNumber,
travelDate:this.travelDate,
trainno:ticket.trainno,
date:this.date,
};
uni.request({
url: 'http://localhost:8000/change_ticket/',
method: 'POST',
data: JSON.stringify(formData), // formDataJSON
header: {
'content-type': 'application/json' // JSON
},
success: (res) => {
//
if (res.statusCode === 200) { // 200
const data = res.data;
if (data.message === '改签成功') {
console.log('请求成功',data);
uni.showToast({
title: '改签成功',
icon: 'success'
});
uni.navigateTo({
url: '/pages/index/Orders'
});
} else {
//
const data = res.data;
console.log('请求成功', data);
uni.showToast({
title: data.message + (data.reason ? ': ' + data.reason : ''),
icon: 'none'
});
}
}
},
fail: (err) => {
//
console.error('请求失败', err);
uni.showToast({
title: '请求失败,请重试',
icon: 'none'
});
}
});
},
//
console.log('原订单号:', this.originalOrderNumber);
console.log('新乘车日期:', this.newTravelDate);
console.log('改签原因:', this.changeReason);
//
this.originalOrderNumber = '';
this.newTravelDate = '';
this.changeReason = '';
//
uni.showToast({
title: '改签申请已提交',
icon: 'success',
duration: 2000
});
}
}
};
</script>
<style>
.Change-button {
.change-ticket-page {
display: flex;
flex-direction: column;
align-items: center;
@ -186,21 +60,14 @@ export default {
height: 100vh;
}
.search-box {
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 10px;
}
.header {
font-size: 24px;
font-weight: bold;
margin-bottom: 20px;
}
.Change-form {
width: 95%;
.change-form {
width: 80%;
}
.form-item {
@ -225,57 +92,6 @@ textarea {
height: 100px;
}
.ticket-box {
display: flex;
justify-content: space-between;
align-items: center;
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 10px;
}
.departure-info, .arrival-info {
text-align: center;
}
.train-info {
text-align: center;
}
.time {
font-size: 12px; /* 设置时间的字体大小 */
}
.station {
font-size: 16px; /* 设置车站名称的字体大小 */
}
.train-no {
font-size: 20px; /* 设置车次的字体大小 */
}
.date {
font-size: 10px; /* 设置日期的字体大小 */
}
.change-button {
background-color: #007aff; /* 绿色背景 */
color: white; /* 白色文本 */
border: none; /* 无边框 */
padding: 5px 18px; /* 内边距 */
text-align: center; /* 文本居中 */
text-decoration: none; /* 无下划线 */
display: inline-block; /* 内联块级元素 */
font-size: 12px; /* 字体大小 */
margin: 4px 2px; /* 外边距 */
cursor: pointer; /* 鼠标指针 */
border-radius: 4px; /* 圆角边框 */
}
.book-button:hover {
background-color: #007aff; /* 悬停效果 */
}
.submit-btn {
width: 100%;
height: 40px;

@ -59,8 +59,7 @@ export default {
if (res.statusCode === 200) { // 200
const data = res.data;
if (data.message === '登录成功') {
console.log('请求成功', data);
localStorage.setItem('passenger', JSON.stringify(data.passengers));
console.log('请求成功', data);
uni.showToast({
title: '登录成功',
icon: 'success'

@ -9,29 +9,20 @@
<!-- 订单列表 -->
<view class="order-list">
<view v-if="activeTab === 'unpaid'" class="order-item unpaid" v-for="(order, index) in unpaidOrders" :key="index" @click="handleOrderClick(order)">
<text>订单号{{ order.id }}</text>
<text>车次{{ order.trainno }}</text>
<text>出发日期{{ order.date }}</text>
<text>金额{{ order.price }}</text>
<text>姓名{{ order.passenger_name }}</text>
<text>状态{{ order.state }}</text>
<view v-if="activeTab === 'unpaid'" class="order-item unpaid" v-for="(order, index) in unpaidOrders" :key="index">
<text>订单号{{ order.orderNumber }}</text>
<text>金额{{ order.amount }}</text>
<text>状态待支付</text>
</view>
<view v-if="activeTab === 'paid'" class="order-item paid" v-for="(order, index) in paidOrders" :key="index" @click="paidOrderClick(order)">
<text>订单号{{ order.id }}</text>
<text>车次{{ order.trainno }}</text>
<text>出发日期{{ order.date }}</text>
<text>金额{{ order.price }}</text>
<text>姓名{{ order.passenger_name }}</text>
<text>状态{{ order.state }}</text>
<view v-if="activeTab === 'paid'" class="order-item paid" v-for="(order, index) in paidOrders" :key="index">
<text>订单号{{ order.orderNumber }}</text>
<text>金额{{ order.amount }}</text>
<text>状态已支付</text>
</view>
<view v-if="activeTab === 'myTicket'" class="order-item my-ticket" v-for="(order, index) in myTickets" :key="index">
<text>订单号{{ order.id }}</text>
<text>车次{{ order.trainno }}</text>
<text>出发日期{{ order.date }}</text>
<text>金额{{ order.price }}</text>
<text>姓名{{ order.passenger_name }}</text>
<text>状态{{ order.state }}</text>
<text>订单号{{ order.orderNumber }}</text>
<text>车次{{ order.trainNumber }}</text>
<text>座位号{{ order.seatNumber }}</text>
</view>
</view>
</view>
@ -41,39 +32,22 @@
export default {
data() {
return {
activeTab: 'unpaid', //
myTickets: [], //
unpaidOrders: [], //
paidOrders: [], //
activeTab: 'unpaid', //
unpaidOrders: [
{ orderNumber: '123456789', amount: 100 },
{ orderNumber: '987654321', amount: 200 },
], //
paidOrders: [
{ orderNumber: '543216789', amount: 150 },
{ orderNumber: '987654312', amount: 250 },
], //
myTickets: [
{ orderNumber: '123456789', trainNumber: 'G1234', seatNumber: 'A12' },
{ orderNumber: '987654321', trainNumber: 'D5678', seatNumber: 'B34' },
], //
};
},
mounted() {
this.fetchorders();
},
methods: {
fetchorders() {
fetch('http://localhost:8000/get_orders/')
.then(response => response.json())
.then(data => {
this.unpaidOrders = data.unpaidOrders;
this.paidOrders = data.paidOrders;
this.myTickets = data.myTicket;
})
.catch(error => {
console.error('Error fetching passengers:', error);
//
});
},
handleOrderClick(order) {
uni.navigateBack({
url:'pages/index/confirm-order'
});
},
paidOrderClick(order){
uni.navigateTo({
url: `/pages/index/ticket?id=${order.id}&ticketno=${order.trainno}&date=${order.date}`
});
},
switchTab(tab) {
this.activeTab = tab;
}

@ -1,40 +1,9 @@
<template>
<div class="payment-page">
<div class="content">
<h1>支付页面</h1>
</div>
<div class="ticket-info">
<div class="departure-info">
<p class="time">{{ departure_time }}</p>
<p class="station">{{ departure }}</p>
</div>
<div class="train-info">
<h2 class="train-no">{{ ticketno }}</h2>
<p class="date">{{ date }}</p>
</div>
<div class="arrival-info">
<p class="time">{{ arrival_time }}</p>
<p class="station"> {{ arrival }}</p>
</div>
</div>
<div class="content">
<view class="ticket-info">
<view class="info-item">
<text class="info-value">订单号{{ ticket_id }}</text>
</view>
<view class="info-item">
<text class="info-value">乘客{{ passenger_name }}</text>
</view>
<view class="info-item">
<text class="info-value">座位等级{{ tickettype }}</text>
</view>
<view class="info-item">
<text class="info-value">价格{{ price }}</text>
</view>
<view class="info-item">
<text class="info-value">座位号{{ seatno }}</text>
</view>
</view>
<!-- 支付内容展示 -->
<h1>支付页面</h1>
<p>这里展示支付相关的信息和操作</p>
</div>
<div class="footer">
<button class="btn cancel-order" @click="cancelOrder"></button>
@ -45,186 +14,32 @@
</template>
<script>
import ticketVue from './ticket.vue';
export default {
data() {
return {
ticket_id :'',
passenger_name:'肖帆',
date :'',
ticketno :'',
tickettype :'二等座',
price :'100',
seatno :'A',
departure: '',
arrival: '',
departure_time:'',
arrival_time:''
};
},
onLoad(query) {
//
this.ticket_id = query.id || '';
this.ticketno = query.ticketno || '';
this.date = query.date || '';
this.departure = query.departure || '';
this.arrival = query.arrival || '';
this.departure_time = query.departure_time || '';
this.arrival_time = query.arrival_time || '';
},
methods: {
cancelOrder() {
const formData = {
ticket_id :this.ticket_id,
passenger_name:'肖帆',
date :this.date,
trainno :this.ticketno,
tickettype :'二等座',
price :'100',
seatno :'A',
};
// POSTformDataJSON
uni.request({
url: 'http://localhost:8000/cancelOrder/',
method: 'POST',
data: JSON.stringify(formData), // formDataJSON
header: {
'content-type': 'application/json' // JSON
},
success: (res) => {
//
if (res.statusCode === 200) { // 200
const data = res.data;
if (data.message === '取消成功') {
console.log('请求成功',data);
uni.showToast({
title: '取消成功,订单待支付',
icon: 'success'
});
uni.navigateTo({
url: '/pages/index/Orders'
});
} else {
//
const data = res.data;
console.log('请求成功', data);
uni.showToast({
title: data.message + (data.reason ? ': ' + data.reason : ''),
icon: 'none'
});
}
}
},
fail: (err) => {
//
console.error('请求失败', err);
uni.showToast({
title: '请求失败,请重试',
icon: 'none'
});
}
});
uni.navigateTo({
url: '/pages/index/confirm-order'
});
},
buyReturn() {
//
const formData = {
departure: this.departure,
arrival: this.arrival,
};
uni.request({
url: 'http://localhost:8000/buyReturn/',
method: 'POST',
data: JSON.stringify(formData), // formDataJSON
header: {
'content-type': 'application/json' // JSON
},
success: (res) => {
//
if (res.statusCode === 200) { // 200
const data = res.data;
if (data.message === '查询成功') {
console.log('请求成功',data);
localStorage.setItem('ticketInfo', JSON.stringify(data.trains));
uni.showToast({
title: '购买成功',
icon: 'success'
});
uni.navigateTo({
url: '/pages/index/returnsearch-results'
});
} else {
//
const data = res.data;
console.log('请求成功', data);
uni.showToast({
title: data.message + (data.reason ? ': ' + data.reason : ''),
icon: 'none'
});
}
}
},
fail: (err) => {
//
console.error('请求失败', err);
uni.showToast({
title: '请求失败,请重试',
icon: 'none'
});
}
});
console.log("购买返程");
alert('改签功能暂未开放,敬请期待!');
},
payNow() {
const formData = {
ticket_id :this.ticket_id,
passenger_name:'肖帆',
date :this.date,
trainno :this.ticketno,
tickettype :'二等座',
price :'100',
seatno :'A',
};
// POSTformDataJSON
uni.request({
url: 'http://localhost:8000/buy_ticket/',
method: 'POST',
data: JSON.stringify(formData), // formDataJSON
header: {
'content-type': 'application/json' // JSON
},
success: (res) => {
//
if (res.statusCode === 200) { // 200
const data = res.data;
if (data.message === '购票成功') {
console.log('请求成功',data);
uni.showToast({
title: '购买成功',
icon: 'success'
});
uni.navigateTo({
url: `/pages/index/Orders`
});
} else {
//
const data = res.data;
console.log('请求成功', data);
uni.showToast({
title: data.message + (data.reason ? ': ' + data.reason : ''),
icon: 'none'
});
}
}
},
fail: (err) => {
//
console.error('请求失败', err);
uni.showToast({
title: '请求失败,请重试',
icon: 'none'
});
}
});
const paymentSuccess = Math.random() < 0.8; // 80%
if (paymentSuccess) {
uni.showToast({
title: '支付成功',
icon: 'none'
});
uni.navigateTo({
url: '/pages/index/ticket'
});
} else {
alert("支付失败,余额不足!");
}
}
}
};
@ -235,23 +50,6 @@ export default {
padding: 20px;
}
.ticket-info {
display: flex;
justify-content: space-between;
align-items: center;
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 10px;
}
.departure-info, .arrival-info {
text-align: center;
}
.train-info {
text-align: center;
}
.content {
text-align: center;
margin-bottom: 20px;
@ -291,55 +89,6 @@ export default {
border: 1px solid #add8e6;
}
.ticket-info {
display: flex;
flex-wrap: wrap;
padding: 20rpx;
}
.ticket-info {
display: flex;
justify-content: space-between;
align-items: center;
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 10px;
}
.departure-info, .arrival-info {
text-align: center;
}
.train-info {
text-align: center;
}
.time .num,.price {
font-size: 12px; /* 设置时间的字体大小 */
}
.station {
font-size: 16px; /* 设置车站名称的字体大小 */
}
.train-no,{
font-size: 20px; /* 设置车次的字体大小 */
}
.date {
font-size: 10px; /* 设置日期的字体大小 */
}
.info-item {
flex: 0 0 auto;
margin-right: 20rpx;
margin-bottom: 10rpx;
}
.info-value {
color: #333;
}
.pay-now {
background-color: #ffa500; /* 橙色 */
color: white;

@ -1,283 +0,0 @@
<template>
<div>
<h1>确认订单(返程)</h1>
<div class="ticket-info">
<div class="departure-info">
<p class="time">{{ departure_time }}</p>
<p class="station">{{ departure }}</p>
</div>
<div class="train-info">
<h2 class="train-no">{{ ticketno }}</h2>
<p class="date">{{ date }}</p>
</div>
<div class="arrival-info">
<p class="time">{{ arrival_time }}</p>
<p class="station"> {{ arrival }}</p>
</div>
</div>
<view v-if="ticketData">
<div class="container">
<!-- 二等座 -->
<div
class="seat-box Second"
@click="selectSeat('Second')"
:class="{ selected: selectedSeat === 'Second' }"
>
<p>二等座</p>
<p class="price">¥{{ ticketData.secondseatprice }}</p>
<p class="num">{{ ticketData.secondseatnum }}</p>
</div>
<!-- 一等座 -->
<div
class="seat-box First"
@click="selectSeat('First')"
:class="{ selected: selectedSeat === 'First' }"
>
<p>一等座</p>
<p class="price">¥{{ ticketData.firstseatprice }}</p>
<p class="num">{{ ticketData.firstseatnum }}</p>
</div>
<!-- 商务座 -->
<div
class="seat-box Business"
@click="selectSeat('Business')"
:class="{ selected: selectedSeat === 'Business' }"
>
<p>商务座</p>
<p class="price">¥{{ ticketData.businessseatprice }}</p>
<p class="num">{{ ticketData.businessseatnum }}</p>
</div>
<!-- 无座 -->
<div
class="seat-box NO"
@click="selectSeat('NO')"
:class="{ selected: selectedSeat === 'NO' }"
>
<p>无座</p>
<p class="price">¥{{ ticketData.noseatprice }}</p>
<p class="num">{{ ticketData.noseatnum }}</p>
</div>
<div v-if="selectedSeatType" class="seat-selection">
<div
class="seat-option"
v-for="seat in ['A', 'B', 'C', 'D', 'E']"
:key="seat"
@click="selectSeat(seat)"
:class="{ selected: selectedSeat === seat }"
>
{{ seat }}
</div>
</div>
</div>
</view>
<button class="submit-btn" @click="submitOrder"></button>
</div>
</template>
<script>
export default {
data() {
return {
selectedSeat: null,
id:'',
ticketno: '',
date: '',
departure: '',
arrival: '',
departure_time:'',
arrival_time:'',
ticketData: null
};
},
onLoad(query) {
this.id = query.id || '';
//
this.ticketno = query.ticketno || '';
this.date = query.date || '';
this.departure = query.departure || '';
this.arrival = query.arrival || '';
this.departure_time = query.departure_time || '';
this.arrival_time = query.arrival_time || '';
},
mounted() {
this.fetchTicketInfo();
this.loadSelectedPassengers();
},
methods: {
onshow(){
this.fetchTicketInfo();
this.loadSelectedPassengers();
},
selectSeat(seatType) {
this.selectedSeat = seatType; //
},
submitOrder() {
if (!this.selectedSeat) {
uni.showToast({
title: '请选择座次',
icon: 'none',
duration: 2000
});
return;
}
uni.navigateTo({
url: `/pages/index/return-Payment?id=${this.id}&ticketno=${this.ticketno}&date=${this.date}&departure=${this.departure}&arrival=${this.arrival}&departure_time=${this.departure_time}&arrival_time=${this.arrival_time}`
});
},
addPassenge(){
uni.navigateTo({
url: '/pages/index/passenge-list'
});
},
fetchTicketInfo() {
const formData = {
date:this.date,
trainno:this.ticketno,
};
// POSTformDataJSON
uni.request({
url: 'http://localhost:8000/book_ticket/',
method: 'POST',
data: JSON.stringify(formData), // formDataJSON
header: {
'content-type': 'application/json' // JSON
},
success: (res) => {
//
if (res.statusCode === 200) { // 200
const data = res.data;
if (data.message === '选座成功') {
console.log('请求成功',data);
this.ticketData = data.tickets;
uni.showToast({
title: '查询成功',
icon: 'success'
});
} else {
//
const data = res.data;
console.log('请求成功', data);
uni.showToast({
title: data.message + (data.reason ? ': ' + data.reason : ''),
icon: 'none'
});
}
}
},
fail: (err) => {
//
console.error('请求失败', err);
uni.showToast({
title: '请求失败,请重试',
icon: 'none'
});
}
});
},
}
};
</script>
<style scoped>
h1 {
text-align: center;
font-size: 24px;
margin-bottom: 20px;
}
.ticket-info {
display: flex;
justify-content: space-between;
align-items: center;
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 10px;
}
.departure-info, .arrival-info {
text-align: center;
}
.train-info {
text-align: center;
}
.time .num,.price {
font-size: 12px; /* 设置时间的字体大小 */
}
.station {
font-size: 16px; /* 设置车站名称的字体大小 */
}
.train-no,{
font-size: 20px; /* 设置车次的字体大小 */
}
.date {
font-size: 10px; /* 设置日期的字体大小 */
}
.container {
display: flex;
justify-content: space-between; /* 均匀分布每个子元素 */
}
.container > div { /* 选择 container 中的每一个直接子元素 */
flex: 1; /* 每个子元素平分父容器的宽度 */
border: 1px solid #ccc;
padding: 10px;
margin-right: 10px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
box-sizing: border-box;
}
.container > div:last-child {
margin-right: 0; /* 移除最后一个子元素的右边距 */
}
.container {
display: flex;
flex-wrap: wrap;
}
.seat-box {
width: 100px;
padding: 10px;
margin: 10px;
border: 1px solid #ccc;
text-align: center;
cursor: pointer;
}
.seat-box.selected {
background-color: #4cd964;; /* 选中的座位框变绿 */
color: white;
}
.selected {
background-color: yellow; /* 选中时的背景色 */
color: white; /* 文字颜色 */
}
.submit-btn {
width: 100%;
height: 40px;
background-color: #007aff;
color: #fff;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
}
</style>

@ -1,117 +0,0 @@
<template>
<view class="container">
<view class="user-info">
<text class="user-name">{{ userName.name }}</text>
</view>
<input v-model="oldPassword" type="password" placeholder="请输入旧密码" />
<input v-model="newPassword" type="password" placeholder="请输入新密码" />
<input v-model="confirmPassword" type="password" placeholder="请确认新密码" />
<button @click="changePassword"></button>
</view>
</template>
<script>
export default {
data() {
return {
userName:[],
oldPassword: '',
newPassword: '',
confirmPassword: ''
};
},
mounted() {
//
const storedname = JSON.parse(localStorage.getItem('passenger'));
if (storedname) {
this.userName = storedname;
}
},
methods: {
changePassword() {
//
if (this.newPassword !== this.confirmPassword) {
uni.showToast({
title: '新密码与确认密码不一致',
icon: 'none'
});
return;
}
//
const formData = {
name:this.userName.name,
oldpassword:this.oldPassword,
newpassword:this.newPassword,
};
uni.request({
url: 'http://localhost:8000/change_password/',
method: 'POST',
data: JSON.stringify(formData), // formDataJSON
header: {
'content-type': 'application/json' // JSON
},
success: (res) => {
//
if (res.statusCode === 200) { // 200
const data = res.data;
if (data.message === '修改成功') {
console.log('请求成功',data);
uni.showToast({
title: '修改成功',
icon: 'success'
});
uni.navigateTo({
url: '/pages/index/Login'
});
} else {
//
const data = res.data;
console.log('请求成功', data);
uni.showToast({
title: data.message + (data.reason ? ': ' + data.reason : ''),
icon: 'none'
});
}
}
},
fail: (err) => {
//
console.error('请求失败', err);
uni.showToast({
title: '请求失败,请重试',
icon: 'none'
});
}
});
}
}
};
</script>
<style>
.container {
padding: 20rpx;
}
input {
margin-bottom: 20rpx;
height: 60rpx;
border: 1px solid #ccc;
border-radius: 8rpx;
padding: 0 20rpx;
}
button {
width: 100%;
height: 100rpx;
line-height: 100rpx;
text-align: center;
background-color: #007AFF;
color: #fff;
border: none;
border-radius: 8rpx;
}
.user-name {
font-size: 30px;
font-weight: bold;
position: center;
}
</style>

@ -60,17 +60,6 @@
<p class="price">¥{{ ticketData.noseatprice }}</p>
<p class="num">{{ ticketData.noseatnum }}</p>
</div>
<div v-if="selectedSeatType" class="seat-selection">
<div
class="seat-option"
v-for="seat in ['A', 'B', 'C', 'D', 'E']"
:key="seat"
@click="selectSeat(seat)"
:class="{ selected: selectedSeat === seat }"
>
{{ seat }}
</div>
</div>
</div>
</view>
<div>
@ -92,7 +81,6 @@
data() {
return {
selectedSeat: null,
id:'',
ticketno: '',
date: '',
departure: '',
@ -105,7 +93,6 @@
},
onLoad(query) {
//
this.id = query.id || '';
this.ticketno = query.ticketno || '';
this.date = query.date || '';
this.departure = query.departure || '';
@ -113,49 +100,31 @@
this.departure_time = query.departure_time || '';
this.arrival_time = query.arrival_time || '';
},
onshow(){
this.fetchTicketInfo();
this.loadSelectedPassengers();
},
mounted() {
this.fetchTicketInfo();
this.loadSelectedPassengers();
},
methods: {
onshow(){
this.fetchTicketInfo();
this.loadSelectedPassengers();
},
selectSeat(seatType) {
this.selectedSeat = seatType; //
},
loadSelectedPassengers(){
const passengers = localStorage.getItem('selectedPassenger');
if (passengers) {
this.selectedPassengers = JSON.parse(passengers);
} else {
console.error('No passengers found in local storage.');
}
if (passengers) {
this.selectedPassengers = JSON.parse(passengers);
} else {
console.error('No passengers found in local storage.');
}
},
submitOrder() {
if (!this.selectedSeat) {
uni.showToast({
title: '请选择座次',
icon: 'none',
duration: 2000
});
return;
}
//
if (this.selectedPassengers.length === 0) {
uni.showToast({
title: '请选择乘车人',
icon: 'none',
duration: 2000
});
return;
}
uni.navigateTo({
url: `/pages/index/Payment?id=${this.id}&ticketno=${this.ticketno}&date=${this.date}&departure=${this.departure}&arrival=${this.arrival}&departure_time=${this.departure_time}&arrival_time=${this.arrival_time}`
});
},
uni.navigateTo({
url: '/pages/index/Payment'
});
},
addPassenge(){
uni.navigateTo({
url: '/pages/index/passenge-list'
@ -291,11 +260,6 @@ h1 {
color: white;
}
.selected {
background-color: yellow; /* 选中时的背景色 */
color: white; /* 文字颜色 */
}
.submit-btn {
width: 100%;
height: 40px;

@ -35,4 +35,6 @@
height: 100vh; /* 高度100vh填充整个视口 */
}
</style>

@ -24,13 +24,13 @@ export default {
passengers: []
};
},
onShow() { // Uni-app
this.fetchPassengerInfo();
},
mounted() {
this.fetchPassengerInfo();
},
methods: {
onShow() { // Uni-app
this.fetchPassengerInfo();
},
onSelectPassenger(index) {
this.$set(this.passengers, index, {
...this.passengers[index],

@ -32,63 +32,20 @@ export default {
},
methods: {
submitRefund() {
if (!this.refundReason) {
uni.showToast({
title: '请说明理由',
icon: 'none',
duration: 2000
});
return;
}
// 退退
const formData = {
ticket_id:this.orderNumber,
date:this.travelDate,
};
uni.request({
// url: 'http://192.168.251.7:8000/search_train/', //
url: 'http://localhost:8000/refund_ticket/',
method: 'POST',
data: JSON.stringify(formData), // formDataJSON
header: {
'content-type': 'application/json' // JSON
},
success: (res) => {
//
if (res.statusCode === 200) { // 200
const data = res.data;
localStorage.setItem('state', JSON.stringify({data}))
if (data.message === '退票成功') {
console.log('请求成功',data);
uni.showToast({
title: '退票成功',
icon: 'success'
});
//
this.orderNumber = '';
this.travelDate = '';
this.refundReason = '';
uni.navigateTo({
url: '/pages/index/Orders'
});
} else {
//
uni.showToast({
title: '订单不存在',
icon: 'none'
});
}
}
},
fail: (err) => {
//
console.error('请求失败', err);
uni.showToast({
title: '请求失败,请重试',
icon: 'none'
});
}
});
console.log('订单号:', this.orderNumber);
console.log('乘车日期:', this.travelDate);
console.log('退票原因:', this.refundReason);
//
this.orderNumber = '';
this.travelDate = '';
this.refundReason = '';
// 退
uni.showToast({
title: '退票申请已提交',
icon: 'success',
duration: 2000
});
}
}
};

@ -1,248 +0,0 @@
<template>
<div class="payment-page">
<div class="content">
<h1>支付页面(返程)</h1>
</div>
<div class="ticket-info">
<div class="departure-info">
<p class="time">{{ departure_time }}</p>
<p class="station">{{ departure }}</p>
</div>
<div class="train-info">
<h2 class="train-no">{{ ticketno }}</h2>
<p class="date">{{ date }}</p>
</div>
<div class="arrival-info">
<p class="time">{{ arrival_time }}</p>
<p class="station"> {{ arrival }}</p>
</div>
</div>
<div class="content">
<view class="ticket-info">
<view class="info-item">
<text class="info-value">订单号{{ ticket_id }}</text>
</view>
<view class="info-item">
<text class="info-value">乘客{{ passenger_name }}</text>
</view>
<view class="info-item">
<text class="info-value">座位等级{{ tickettype }}</text>
</view>
<view class="info-item">
<text class="info-value">价格{{ price }}</text>
</view>
<view class="info-item">
<text class="info-value">座位号{{ seatno }}</text>
</view>
</view>
</div>
<div class="footer">
<button class="btn cancel-order" @click="cancelOrder"></button>
<button class="btn pay-now" @click="payNow"></button>
</div>
</div>
</template>
<script>
export default {
data() {
return {
ticket_id :'',
passenger_name:'肖帆',
date :'',
ticketno :'',
tickettype :'二等座',
price :'100',
seatno :'A',
departure: '',
arrival: '',
departure_time:'',
arrival_time:''
};
},
onLoad(query) {
//
this.ticket_id = query.id || '';
this.ticketno = query.ticketno || '';
this.date = query.date || '';
this.departure = query.departure || '';
this.arrival = query.arrival || '';
this.departure_time = query.departure_time || '';
this.arrival_time = query.arrival_time || '';
},
methods: {
cancelOrder() {
uni.navigateBack({
url: '/pages/index/confirm-order'
});
},
payNow() {
const formData = {
ticket_id :this.ticket_id,
passenger_name:'肖帆',
date :this.date,
trainno :this.ticketno,
tickettype :'二等座',
price :'100',
seatno :'A',
};
// POSTformDataJSON
uni.request({
url: 'http://localhost:8000/buy_ticket/',
method: 'POST',
data: JSON.stringify(formData), // formDataJSON
header: {
'content-type': 'application/json' // JSON
},
success: (res) => {
//
if (res.statusCode === 200) { // 200
const data = res.data;
if (data.message === '购票成功') {
console.log('请求成功',data);
uni.showToast({
title: '购买成功',
icon: 'success'
});
uni.navigateTo({
url: `/pages/index/ticket?id=${this.ticket_id}&ticketno=${this.ticketno}&date=${this.date}&departure=${this.departure}&arrival=${this.arrival}&departure_time=${this.departure_time}&arrival_time=${this.arrival_time}`
});
} else {
//
const data = res.data;
console.log('请求成功', data);
uni.showToast({
title: data.message + (data.reason ? ': ' + data.reason : ''),
icon: 'none'
});
}
}
},
fail: (err) => {
//
console.error('请求失败', err);
uni.showToast({
title: '请求失败,请重试',
icon: 'none'
});
}
});
}
}
};
</script>
<style scoped>
.payment-page {
padding: 20px;
}
.ticket-info {
display: flex;
justify-content: space-between;
align-items: center;
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 10px;
}
.departure-info, .arrival-info {
text-align: center;
}
.train-info {
text-align: center;
}
.content {
text-align: center;
margin-bottom: 20px;
}
.footer {
display: flex;
justify-content: space-between;
position: fixed;
bottom: 0;
left: 0;
right: 0;
background-color: white;
padding: 10px 20px;
box-shadow: 0 -2px 5px rgba(0,0,0,0.1);
}
.btn {
padding: 10px 20px;
border: none;
cursor: pointer;
border-radius: 5px;
font-size: 12px;
flex: 1;
margin: 0 5px;
}
.cancel-order {
background-color: transparent; /* 无色 */
color: black;
border: 1px solid gray;
}
.ticket-info {
display: flex;
flex-wrap: wrap;
padding: 20rpx;
}
.ticket-info {
display: flex;
justify-content: space-between;
align-items: center;
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 10px;
}
.departure-info, .arrival-info {
text-align: center;
}
.train-info {
text-align: center;
}
.time .num,.price {
font-size: 12px; /* 设置时间的字体大小 */
}
.station {
font-size: 16px; /* 设置车站名称的字体大小 */
}
.train-no,{
font-size: 20px; /* 设置车次的字体大小 */
}
.date {
font-size: 10px; /* 设置日期的字体大小 */
}
.info-item {
flex: 0 0 auto;
margin-right: 20rpx;
margin-bottom: 10rpx;
}
.info-label {
font-weight: bold;
}
.info-value {
color: #333;
}
.pay-now {
background-color: #ffa500; /* 橙色 */
color: white;
border: 1px solid #ffa500;
}
</style>

@ -1,154 +0,0 @@
<template>
<h1>查询结果(返程)</h1>
<div>
<!-- 日期选项卡 -->
<div class="date-tabs">
<div class="date-tab"
v-for="date in uniqueDates"
:key="date"
@click="selectDate(date)"
:class="{ 'active': selectedDate === date }">
{{ date }}
</div>
</div>
<!-- 按选择的日期显示的车票信息 -->
<div>
<div v-for="(ticket, index) in filteredTickets" :key="index" class="ticket-box">
<div class="departure-info">
<p class="time">{{ ticket.departure_time }}</p>
<p class="station">{{ ticket.departure_station }}</p>
</div>
<div class="train-info">
<h2 class="train-no">{{ ticket.trainno }}</h2>
<p class="date">{{ ticket.date }}</p>
</div>
<div class="arrival-info">
<p class="time">{{ ticket.arrival_time }}</p>
<p class="station">{{ ticket.arrival_station }}</p>
</div>
<button class="book-button" @click="handleBookClick(ticket)"></button>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
tickets: [], //
uniqueDates: [], //
selectedDate: null //
};
},
mounted() {
//
const storedTicketInfo = JSON.parse(localStorage.getItem('ticketInfo'));
if (storedTicketInfo) {
this.tickets = storedTicketInfo;
this.uniqueDates = Array.from(new Set(this.tickets.map(ticket => ticket.date)));
//
if (this.uniqueDates.length > 0) {
this.selectedDate = this.uniqueDates[0];
}
}
},
computed: {
filteredTickets() {
// 使 this.tickets
return this.tickets.filter(ticket => {
//
// date
return ticket.date === this.selectedDate;
});
}
},
methods: {
handleBookClick(ticket) {
uni.navigateTo({
url: `/pages/index/buyReturn?id=${ticket.id}&ticketno=${ticket.trainno}&date=${ticket.date}&departure=${ticket.departure_station}&arrival=${ticket.arrival_station}&departure_time=${ticket.departure_time}&arrival_time=${ticket.arrival_time}`
});
},
selectDate(date) {
this.selectedDate = date;
},
//
}
};
</script>
<style scoped>
h1 {
text-align: center;
font-size: 24px;
margin-bottom: 20px;
}
.ticket-box {
display: flex;
justify-content: space-between;
align-items: center;
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 10px;
}
.departure-info, .arrival-info {
text-align: center;
}
.train-info {
text-align: center;
}
.time {
font-size: 12px; /* 设置时间的字体大小 */
}
.station {
font-size: 16px; /* 设置车站名称的字体大小 */
}
.train-no {
font-size: 20px; /* 设置车次的字体大小 */
}
.date {
font-size: 10px; /* 设置日期的字体大小 */
}
.book-button {
background-color: #007aff; /* 绿色背景 */
color: white; /* 白色文本 */
border: none; /* 无边框 */
padding: 5px 18px; /* 内边距 */
text-align: center; /* 文本居中 */
text-decoration: none; /* 无下划线 */
display: inline-block; /* 内联块级元素 */
font-size: 12px; /* 字体大小 */
margin: 4px 2px; /* 外边距 */
cursor: pointer; /* 鼠标指针 */
border-radius: 4px; /* 圆角边框 */
}
.date-tabs {
display: flex;
justify-content: space-around;
margin-bottom: 10px;
}
.date-tab {
padding: 5px 10px;
cursor: pointer;
border: 1px solid #ccc;
border-radius: 4px;
}
.date-tab.active {
background-color: #007bff;
color: white;
}
.book-button:hover {
background-color: #007aff; /* 悬停效果 */
}
</style>

@ -1,79 +1,49 @@
<template>
<h1>查询结果</h1>
<div>
<!-- 日期选项卡 -->
<div class="date-tabs">
<div class="date-tab"
v-for="date in uniqueDates"
:key="date"
@click="selectDate(date)"
:class="{ 'active': selectedDate === date }">
{{ date }}
<div>
<h1>查询结果</h1>
<div v-if="ticketInfo && ticketInfo.length">
<div v-for="(ticket, index) in ticketInfo" :key="index" class="ticket-box">
<div class="departure-info">
<p class="time">{{ ticket.departure_time }}</p>
<p class="station">{{ ticket.departure_station }}</p>
</div>
</div>
<!-- 按选择的日期显示的车票信息 -->
<div>
<div v-for="(ticket, index) in filteredTickets" :key="index" class="ticket-box">
<div class="departure-info">
<p class="time">{{ ticket.departure_time }}</p>
<p class="station">{{ ticket.departure_station }}</p>
</div>
<div class="train-info">
<h2 class="train-no">{{ ticket.trainno }}</h2>
<p class="date">{{ ticket.date }}</p>
</div>
<div class="arrival-info">
<p class="time">{{ ticket.arrival_time }}</p>
<p class="station">{{ ticket.arrival_station }}</p>
</div>
<button class="book-button" @click="handleBookClick(ticket)"></button>
<div class="train-info">
<h2 class="train-no">{{ ticket.trainno }}</h2>
<p class="date">{{ ticket.date }}</p>
</div>
<div class="arrival-info">
<p class="time">{{ ticket.arrival_time }}</p>
<p class="station">{{ ticket.arrival_station }}</p>
</div>
<button class="book-button" @click="handleBookClick(ticket)"></button>
</div>
</div>
<div v-else>
<p>未找到车票信息</p>
</div>
</div>
</template>
<script>
export default {
data() {
return {
tickets: [], //
uniqueDates: [], //
selectedDate: null //
ticketInfo: [] //
};
},
mounted() {
//
const storedTicketInfo = JSON.parse(localStorage.getItem('ticketInfo'));
if (storedTicketInfo) {
this.tickets = storedTicketInfo;
this.uniqueDates = Array.from(new Set(this.tickets.map(ticket => ticket.date)));
//
if (this.uniqueDates.length > 0) {
this.selectedDate = this.uniqueDates[0];
}
this.ticketInfo = storedTicketInfo;
}
},
computed: {
filteredTickets() {
// 使 this.tickets
return this.tickets.filter(ticket => {
//
// date
return ticket.date === this.selectedDate;
});
}
},
methods: {
handleBookClick(ticket) {
uni.navigateTo({
url: `/pages/index/confirm-order?id=${ticket.id}&ticketno=${ticket.trainno}&date=${ticket.date}&departure=${ticket.departure_station}&arrival=${ticket.arrival_station}&departure_time=${ticket.departure_time}&arrival_time=${ticket.arrival_time}`
url: `/pages/index/confirm-order?ticketno=${ticket.trainno}&date=${ticket.date}&departure=${ticket.departure_station}&arrival=${ticket.arrival_station}&departure_time=${ticket.departure_time}&arrival_time=${ticket.arrival_time}`
});
},
selectDate(date) {
this.selectedDate = date;
},
//
}
}
};
</script>
@ -132,22 +102,6 @@ h1 {
border-radius: 4px; /* 圆角边框 */
}
.date-tabs {
display: flex;
justify-content: space-around;
margin-bottom: 10px;
}
.date-tab {
padding: 5px 10px;
cursor: pointer;
border: 1px solid #ccc;
border-radius: 4px;
}
.date-tab.active {
background-color: #007bff;
color: white;
}
.book-button:hover {
background-color: #007aff; /* 悬停效果 */
}

@ -1,139 +1,65 @@
<template>
<div class="ticket-page">
<div class="content">
<h1>车票详情</h1>
</div>
<div v-for="(ticket, index) in ticketInfo" :key="index" class="ticket-box">
<div class="departure-info">
<p class="time">{{ ticket.departure_time }}</p>
<p class="station">{{ ticket.departure_station }}</p>
</div>
<div class="train-info">
<h2 class="train-no">{{ ticket.trainno }}</h2>
<p class="date">{{ ticket.date }}</p>
</div>
<div class="arrival-info">
<p class="time">{{ ticket.arrival_time }}</p>
<p class="station">{{ ticket.arrival_station }}</p>
</div>
</div>
<div class="content">
<view class="ticket-info">
<view class="info-item">
<text class="info-value">订单号{{ ticket_id }}</text>
</view>
<view class="info-item">
<text class="info-value">乘客{{ passenger_name }}</text>
</view>
<view class="info-item">
<text class="info-value">座位等级{{ tickettype }}</text>
</view>
<view class="info-item">
<text class="info-value">价格{{ price }}</text>
</view>
<view class="info-item">
<text class="info-value">座位号{{ seatno }}</text>
</view>
</view>
</div>
<div class="content">
<h1>车票详情</h1>
<div v-if="ticket">
<p><strong>车次</strong>{{ ticket.trainNumber }}</p>
<p><strong>出发时间</strong>{{ ticket.departureTime }}</p>
<p><strong>到达时间</strong>{{ ticket.arrivalTime }}</p>
<p><strong>出发站</strong>{{ ticket.departureStation }}</p>
<p><strong>到达站</strong>{{ ticket.arrivalStation }}</p>
<p><strong>座位</strong>{{ ticket.seat }}</p>
<p><strong>乘客姓名</strong>{{ ticket.passengerName }}</p>
</div>
<div v-else>
<p>加载中...</p>
</div>
</div>
<div class="footer">
<button class="btn" @click="refundTicket">退</button>
<button class="btn" @click="rescheduleTicket"></button>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
ticketInfo:[],
ticket_id :'',
passenger_name:'肖帆',
date :'',
ticketno :'',
tickettype :'二等座',
price :'100',
seatno :'A',
departure: '',
arrival: '',
departure_time:'',
arrival_time:''
};
},
mounted() {
this.fetchTicketInfo();
},
onLoad(query) {
//
this.ticket_id = query.id || '';
this.ticketno = query.ticketno || '';
this.date = query.date || '';
this.departure = query.departure || '';
this.arrival = query.arrival || '';
this.departure_time = query.departure_time || '';
this.arrival_time = query.arrival_time || '';
},
data() {
return {
ticket: null, //
};
},
methods: {
fetchTicketInfo(){
const formData = {
trainno : this.ticketno,
date : this.date,
};
// POSTformDataJSON
uni.request({
url: 'http://localhost:8000/search_ticket/',
method: 'POST',
data: JSON.stringify(formData), // formDataJSON
header: {
'content-type': 'application/json' // JSON
},
success: (res) => {
//
if (res.statusCode === 200) { // 200
const data = res.data;
if (data.message === '匹配成功') {
console.log('请求成功',data);
this.ticketInfo = data.trains;
uni.showToast({
title: '查询成功',
icon: 'success'
});
} else {
//
const data = res.data;
console.log('请求成功', data);
uni.showToast({
title: data.message + (data.reason ? ': ' + data.reason : ''),
icon: 'none'
});
}
}
},
fail: (err) => {
//
console.error('请求失败', err);
uni.showToast({
title: '请求失败,请重试',
icon: 'none'
});
}
});
},
refundTicket() {
// 退
fetchTicketDetails() {
//
setTimeout(() => {
this.ticket = {
trainNumber: 'G1234',
departureTime: '2024-06-15 08:00',
arrivalTime: '2024-06-15 10:30',
departureStation: '北京南',
arrivalStation: '上海虹桥',
seat: '1号车厢3A',
passengerName: '张三',
};
}, 1000); //
},
rescheduleTicket() {
//
uni.navigateTo({
url: '/pages/index/refund'
});
},
rescheduleTicket() {
//
refundTicket() {
// 退
uni.navigateTo({
url: '/pages/index/Change'
});
}
},
mounted() {
this.fetchTicketDetails(); //
}
};
</script>
@ -142,57 +68,9 @@ export default {
padding: 20px;
}
.ticket-info {
display: flex;
flex-wrap: wrap;
padding: 20rpx;
}
.ticket-info {
display: flex;
justify-content: space-between;
align-items: center;
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 10px;
}
.departure-info, .arrival-info {
text-align: center;
}
.train-info {
text-align: center;
}
.time .num,.price {
font-size: 12px; /* 设置时间的字体大小 */
}
.station {
font-size: 16px; /* 设置车站名称的字体大小 */
}
.train-no,{
font-size: 20px; /* 设置车次的字体大小 */
}
.date {
font-size: 10px; /* 设置日期的字体大小 */
}
.info-item {
flex: 0 0 auto;
margin-right: 20rpx;
margin-bottom: 10rpx;
}
.info-label {
font-weight: bold;
}
.info-value {
color: #333;
.content {
text-align: left;
margin-bottom: 20px;
}
.footer {
@ -207,11 +85,6 @@ export default {
box-shadow: 0 -2px 5px rgba(0,0,0,0.1);
}
.content {
text-align: center;
margin-bottom: 20px;
}
.btn {
padding: 3px 20px;
border: none;
@ -223,37 +96,4 @@ export default {
background-color: #32CD32; /* 绿色 */
color: white;
}
.ticket-box {
display: flex;
justify-content: space-between;
align-items: center;
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 10px;
}
.departure-info, .arrival-info {
text-align: center;
}
.train-info {
text-align: center;
}
.time {
font-size: 12px; /* 设置时间的字体大小 */
}
.station {
font-size: 16px; /* 设置车站名称的字体大小 */
}
.train-no {
font-size: 20px; /* 设置车次的字体大小 */
}
.date {
font-size: 10px; /* 设置日期的字体大小 */
}
</style>

@ -2,7 +2,7 @@
<view class="container">
<!-- 顶部用户信息部分 -->
<view class="user-info">
<text class="user-name">{{userName.name}}</text>
<text class="user-name">{{ userName }}</text>
</view>
<!-- 功能按钮部分 -->
@ -19,16 +19,9 @@
export default {
data() {
return {
userName: [] //
userName: '张三' //
};
},
mounted() {
//
const storedname = JSON.parse(localStorage.getItem('passenger'));
if (storedname) {
this.userName = storedname;
}
},
methods: {
navigateToPassenger() {
uni.navigateTo({
@ -42,7 +35,7 @@ export default {
},
navigateToChangePassword() {
uni.navigateTo({
url: 'change-password'
url: '/pages/change-password/index'
});
},
logout() {

@ -1,2 +0,0 @@
# import pymysql
# pymysql.install_as_MySQLdb()

@ -1,382 +0,0 @@
# myapp/views.py
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponseBadRequest
from django.http import HttpResponse
from django.contrib.auth import authenticate, login
# from django.contrib.auth.models import User
from django.shortcuts import render
from .models import Passenger, Buylist
import json # 确保导入了json模块
from django.http import JsonResponse
from .models import Train, Ticket ,Newpassenger # 假设车票模型名称为Train
@csrf_exempt # 如果需要跨域且没有CSRF中间件
def save_passenger(request):
if request.method == 'POST':
try:
# 解析 JSON 数据
data = json.loads(request.body)
name = data.get('name')
account = data.get('PhoneNO')
idcardno = data.get('idCard')
mobileno = data.get('PhoneNO')
password = data.get('password')
bankcardno = data.get('Bankcard')
# 创建Passenger对象并保存到数据库
passenger = Passenger(
name=name,
account=account,
password=password,
mobileno=mobileno,
bankcardno=bankcardno,
idcardno=idcardno
)
passenger.save()
return JsonResponse({'message': '注册成功'})
# else:
# return JsonResponse({'message': '注册失败', 'reason': '姓名或身份证号不正确'}) # 使用JsonResponse并设置状态码
except KeyError as e:
# 如果有任何键不存在返回400错误
return JsonResponse({'message': f'缺少必要的参数: {e}'}, status=400)
except json.JSONDecodeError: # 添加异常处理来捕获JSON解析错误
return JsonResponse({'message': '无效的JSON数据'}, status=400)
# 处理非POST请求的情况
return JsonResponse({'message': '不支持的请求方法'}, status=405) # 对于非POST请求返回405状态码
def login_view(request):
if request.method == 'POST':
try:
# 解析 JSON 数据
data = json.loads(request.body)
account = data.get('account')
password = data.get('password')
# 查询 passenger 表,查找匹配的账号和密码
# passenger = Passenger.objects.filter(account=account, password=password).first()
passengers = Passenger.objects.filter(account=account, password=password)
if passengers.exists():
passenger=Passenger.objects.get(account=account)
passenger_data = {'name':passenger.name}
return JsonResponse({'message': '登录成功','passengers':passenger_data})
else :
return JsonResponse({'message': '登录失败', 'reason': '账号或密码不正确'}) # 使用JsonResponse并设置状态码
except KeyError as e:
# 如果有任何键不存在返回400错误
return JsonResponse({'message': f'缺少必要的参数: {e}'}, status=400)
except json.JSONDecodeError: # 添加异常处理来捕获JSON解析错误
return JsonResponse({'message': '无效的JSON数据'}, status=400)
# 处理非POST请求的情况
return JsonResponse({'message': '不支持的请求方法'}, status=405)
#查询车次
def search_train(request):
if request.method == 'POST':
try:
data = json.loads(request.body)
departure = data.get('departure') # 前端传入的出发站
destination = data.get('destination') # 前端传入的到达站
# date = data.get('date') # 前端传入的日期
# 在 Train 模型中查询符合条件的车次信息,等号左边的 departure 是数据库中车票模型 Ticket 的一个字段名,表示出发地。
trains = Train.objects.filter(departure_station=departure, arrival_station=destination)
if trains.exists():
train_data = [{'id': train.id, 'trainno': train.trainno, 'date': train.date, 'departure_station': train.departure_station, 'arrival_station':
train.arrival_station, 'departure_time': train.departure_time, 'arrival_time': train.arrival_time} for train in trains]
return JsonResponse({'message': '查询成功', 'trains': train_data})
else:
return JsonResponse({'message': '查询失败', 'reason': '未找到匹配的车次信息'})
except KeyError as e:
return JsonResponse({'message': f'缺少必要的参数: {e}'}, status=400)
except json.JSONDecodeError:
return JsonResponse({'message': '无效的JSON数据'}, status=400)
return JsonResponse({'message': '不支持的请求方法'}, status=405)
#预订车票
def book_ticket(request):
if request.method == 'POST':
try:
data = json.loads(request.body)
date = data.get('date') # 日期
trainno = data.get('trainno') # 车次
tickets = Ticket.objects.filter( date=date,trainno=trainno)
if tickets.exists():
# 构造返回的车票信息
# ticket_data = [{'secondseatnum': ticket.secondseatnum, 'secondseatprice': ticket.secondseatprice,'firstseatnum': ticket.firstseatnum,
# 'firstseatprice': ticket.firstseatprice,'businessseatnum': ticket.businessseatnum, 'businessseatprice': ticket.businessseatprice,
# 'noseatnum': Ticket.noseatnum, 'noseatprice': ticket.noseatprice} for ticket in tickets]
ticket_data = {'secondseatnum': 12, 'secondseatprice': 100,'firstseatnum': 15,
'firstseatprice': 200,'businessseatnum': 18, 'businessseatprice': 300,
'noseatnum': 6, 'noseatprice': 100}
return JsonResponse({'message': '选座成功', 'tickets': ticket_data})
else:
return JsonResponse({'message': '选座失败', 'reason': '未找到匹配的座次信息'})
except KeyError as e:
return JsonResponse({'message': f'缺少必要的参数: {e}'}, status=400)
except json.JSONDecodeError:
return JsonResponse({'message': '无效的JSON数据'}, status=400)
return JsonResponse({'message': '不支持的请求方法'}, status=405)
#获取乘客信息
def get_passengers(request):
if request.method == 'GET':
newpassengers = list(Newpassenger.objects.all().values('id', 'name', 'mobileno', 'idcardno','passengerstate'))
return JsonResponse({'passenger': newpassengers})
#添加乘客信息
def addpassenger(request):
if request.method == 'POST':
try:
# 解析 JSON 数据
data = json.loads(request.body)
name = data.get('name')
idcardno = data.get('idCard')
mobileno = data.get('PhoneNO')
passengerstate = data.get('passengerstate')
# 创建Passenger对象并保存到数据库
newpassengers = Newpassenger(
name=name,
mobileno=mobileno,
idcardno=idcardno,
passengerstate=passengerstate
)
newpassengers.save()
return JsonResponse({'message':'添加成功'},)
except KeyError as e:
# 如果有任何键不存在返回400错误
return JsonResponse({'message': f'缺少必要的参数: {e}'}, status=400)
except json.JSONDecodeError: # 添加异常处理来捕获JSON解析错误
return JsonResponse({'message': '无效的JSON数据'}, status=400)
# 处理非POST请求的情况
return JsonResponse({'message': '不支持的请求方法'}, status=405) # 对于非POST请求返回405状态码
#购买车票
def buy_ticket(request):
if request.method == 'POST':
try:
data = json.loads(request.body)
ticket_id = data.get('ticket_id') # 车票ID
passenger_name = data.get('passenger_name')
date = data.get('date')
trainno = data.get('trainno')
tickettype = data.get('tickettype')
price = data.get('price')
seatno = data.get('seatno')
# 创建车票
buylist = Buylist(id=ticket_id,passenger_name=passenger_name,date =date,trainno = trainno,tickettype=tickettype,price=price,seatno=seatno,state='已售出')
buylist.save()
# 返回退票成功信息
return JsonResponse({'message': '购票成功'})
except KeyError as e:
return JsonResponse({'message': f'缺少必要的参数: {e}'}, status=400)
except Ticket.DoesNotExist:
return JsonResponse({'message': '购票失败', 'reason': '该车票不存在'}, status=404)
except json.JSONDecodeError:
return JsonResponse({'message': '无效的JSON数据'}, status=400)
return JsonResponse({'message': '不支持的请求方法'}, status=405)
#取消订单
def cancelOrder(request):
if request.method == 'POST':
try:
data = json.loads(request.body)
ticket_id = data.get('ticket_id') # 车票ID
passenger_name = data.get('passenger_name')
date = data.get('date')
trainno = data.get('trainno')
tickettype = data.get('tickettype')
price = data.get('price')
seatno = data.get('seatno')
# 创建车票
buylist = Buylist(id=ticket_id,passenger_name=passenger_name,date =date,trainno = trainno,tickettype=tickettype,price=price,seatno=seatno,state='未支付')
buylist.save()
return JsonResponse({'message': '取消成功'})
except KeyError as e:
return JsonResponse({'message': f'缺少必要的参数: {e}'}, status=400)
except json.JSONDecodeError:
return JsonResponse({'message': '无效的JSON数据'}, status=400)
return JsonResponse({'message': '不支持的请求方法'}, status=405)
#退票
def refund_ticket(request):
if request.method == 'POST':
try:
data = json.loads(request.body)
id = data.get('ticket_id') # 订单号
date = data.get('date')
# 检查车票是否存在
buylist = Buylist.objects.get(id=id,date=date,state='已售出')
buylist.state = '已退票'
buylist.save()
return JsonResponse({'message': '退票成功','data':buylist.state})
except KeyError as e:
return JsonResponse({'message': f'缺少必要的参数: {e}'}, status=400)
except json.JSONDecodeError:
return JsonResponse({'message': '无效的JSON数据'}, status=400)
return JsonResponse({'message': '不支持的请求方法'}, status=405)
#改签
def reschedule_ticket(request):
if request.method == 'POST':
try:
data = json.loads(request.body)
ticket_id = data.get('ticket_id') # 订单号
old_date = data.get('travelDate')
new_departure = data.get('departure') # 前端传入的出发站
new_arrival = data.get('destination') # 前端传入的到达站
new_date = data.get('date') # 前端传入的日期
# 检查车票是否存在
buylist = Buylist.objects.filter(id=ticket_id,date=old_date)
# 检查新车次是否存在
trains = Train.objects.filter(departure_station=new_departure, arrival_station=new_arrival, date=new_date)
if buylist.exists() and trains.exists():
train_data = [{'id': train.id, 'trainno': train.trainno, 'date': train.date, 'departure_station': train.departure_station, 'arrival_station':
train.arrival_station, 'departure_time': train.departure_time, 'arrival_time': train.arrival_time} for train in trains]
# 更新车票信息
return JsonResponse({'message': '申请成功','trains': train_data})
else:
return JsonResponse({'message': '未找到车次'})
except KeyError as e:
return JsonResponse({'message': f'缺少必要的参数: {e}'}, status=400)
except Ticket.DoesNotExist:
return JsonResponse({'message': '申请失败', 'reason': '该车票不存在'}, status=404)
except Train.DoesNotExist:
return JsonResponse({'message': '申请失败', 'reason': '新车次不存在'}, status=404)
except json.JSONDecodeError:
return JsonResponse({'message': '无效的JSON数据'}, status=400)
return JsonResponse({'message': '不支持的请求方法'}, status=405)
def change_ticket(request):
if request.method == 'POST':
try:
data = json.loads(request.body)
id = data.get('ticket_id') # 订单号
old_date = data.get('travelDate')
trainno = data.get('trainno')
new_date = data.get('date') # 前端传入的日期
# trains = Train.objects.filter(id=id)
buylist = Buylist.objects.get(id=id,date=old_date,state='已售出')
buylist.date = new_date
buylist.trainno=trainno
buylist.state = '已改签'
buylist.save()
# 返回改签成功信息
return JsonResponse({'message': '改签成功'})
except KeyError as e:
return JsonResponse({'message': f'缺少必要的参数: {e}'}, status=400)
except json.JSONDecodeError:
return JsonResponse({'message': '无效的JSON数据'}, status=400)
return JsonResponse({'message': '不支持的请求方法'}, status=405)
#购买返程
def buyReturn(request):
if request.method == 'POST':
try:
data = json.loads(request.body)
departure = data.get('departure') # 前端传入的出发站
destination = data.get('arrival') # 前端传入的到达站
# 在 Train 模型中查询符合条件的车次信息,等号左边的 departure 是数据库中车票模型 Ticket 的一个字段名,表示出发地。
trains = Train.objects.filter(departure_station=destination, arrival_station=departure)
if trains.exists():
train_data = [{'id': train.id, 'trainno': train.trainno, 'date': train.date, 'departure_station': train.departure_station, 'arrival_station':
train.arrival_station, 'departure_time': train.departure_time, 'arrival_time': train.arrival_time} for train in trains]
return JsonResponse({'message': '查询成功', 'trains': train_data})
else:
return JsonResponse({'message': '查询失败', 'reason': '未找到匹配的车次信息'})
except KeyError as e:
return JsonResponse({'message': f'缺少必要的参数: {e}'}, status=400)
except json.JSONDecodeError:
return JsonResponse({'message': '无效的JSON数据'}, status=400)
return JsonResponse({'message': '不支持的请求方法'}, status=405)
#修改密码
def change_password(request):
if request.method == 'POST':
try:
data = json.loads(request.body)
name = data.get('name')
oldpassword = data.get('oldpassword')
newpassword = data.get('newpassword')
# trains = Train.objects.filter(id=id)
passenger = Passenger.objects.get(name=name,password=oldpassword)
passenger.password = newpassword
passenger.save()
# 返回修改成功信息
return JsonResponse({'message': '修改成功'})
except KeyError as e:
return JsonResponse({'message': f'缺少必要的参数: {e}'}, status=400)
except json.JSONDecodeError:
return JsonResponse({'message': '无效的JSON数据'}, status=400)
return JsonResponse({'message': '不支持的请求方法'}, status=405)
#获取订单
def get_orders(request):
if request.method == 'GET':
buylist_data = list(Buylist.objects.all().values('id', 'passenger_name', 'date', 'trainno', 'tickettype', 'price', 'seatno', 'state'))
unpaid_orders = []
paid_orders = []
other_orders = []
for item in buylist_data:
if item['state'] == '未支付':
unpaid_orders.append(item)
elif item['state'] == '已售出':
paid_orders.append(item)
else:
other_orders.append(item)
response_data = {
'unpaidOrders': unpaid_orders,
'paidOrders': paid_orders,
'myTicket': other_orders
}
return JsonResponse(response_data)
#查询车次
def search_ticket(request):
if request.method == 'POST':
try:
data = json.loads(request.body)
trainno = data.get('trainno')
date = data.get('date')
# 在 Train 模型中查询符合条件的车次信息,等号左边的 departure 是数据库中车票模型 Ticket 的一个字段名,表示出发地。
trains = Train.objects.filter(trainno=trainno,date=date)
if trains.exists():
train_data = [{'id': train.id, 'trainno': train.trainno, 'date': train.date, 'departure_station': train.departure_station, 'arrival_station':
train.arrival_station, 'departure_time': train.departure_time, 'arrival_time': train.arrival_time} for train in trains]
return JsonResponse({'message': '匹配成功', 'trains': train_data})
else:
return JsonResponse({'message': '查询失败', 'reason': '未找到匹配的车次信息'})
except KeyError as e:
return JsonResponse({'message': f'缺少必要的参数: {e}'}, status=400)
except json.JSONDecodeError:
return JsonResponse({'message': '无效的JSON数据'}, status=400)
return JsonResponse({'message': '不支持的请求方法'}, status=405)

@ -1,2 +0,0 @@
# import pymysql
# pymysql.install_as_MySQLdb()

@ -1,670 +0,0 @@
# import json
# import requests
#
# url='http://localhost:8000/save_passenger/'
# payload = json.dumps({
# "name": "123123",
# "idCard": "585654785478945674",
# "PhoneNO": "19999999999",
# "Bankcard": "1231231232568745",
# "password": "123123123"
# })
# headers = {
# 'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
# 'content-type': 'application/json',
# 'Accept': '*/*',
# 'Host': 'localhost:8000',
# 'Connection': 'keep-alive'
# }
# response = requests.post(url=url, data=payload)
# assert response.status_code == 200
# # assert response.json()['message'] == '注册成功'
# print(response.json())
import requests
import json
# 设置基本的URL和路由
base_url = 'http://localhost:8000'
save_passenger_url = base_url + '/save_passenger/'
login_view_url = base_url + '/login_view/'
search_train_url = base_url + '/search_train/'
headers = {
'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
'content-type': 'application/json',
'Accept': '*/*',
'Host': 'localhost:8000',
'Connection': 'keep-alive'
}
# 保存乘客信息的测试
def test_save_passenger():
data = json.dumps({
"name": "123123",
"idCard": "585654785478945674",
"PhoneNO": "19999999999",
"Bankcard": "1231231232568745",
"password": "123123123"
})
response = requests.post(save_passenger_url, data=data,headers=headers)
if response.status_code == 200:
print("Ticket booking successful:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("Failed to book ticket:", response.status_code)
# 登录的测试
def test_login_view():
data = {
'account': '15315219585',
'password': '1'
}
response = requests.post(login_view_url, json=data)
if response.status_code == 200:
print("Ticket booking successful:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("Failed to book ticket:", response.status_code)
# 查询车次的测试
def test_search_train():
data = {
"departure": "1",
"destination": "1",
"date": "2024-07-04"
}
response = requests.post(search_train_url, json=data)
if response.status_code == 200:
print("Ticket booking successful:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("Failed to book ticket:", response.status_code)
def test_book_ticket():
url = 'http://localhost:8000/book_ticket/'
# 预订车票
data = {
"date": "2024-07-05",
"trainno": "G123"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url=url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("Ticket booking successful:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("Failed to book ticket:", response.status_code)
# 获取乘客信息
def test_get_passengers():
url = 'http://localhost:8000/get_passengers/'
response = requests.get(url=url)
if response.status_code == 200:
print("Passenger data:", response.json())
else:
print("Failed to retrieve passengers:", response.status_code)
# 添加乘客信息
def test_addpassenger():
url = 'http://localhost:8000/addpassenger/'
data = {
"name": "张三",
"idCard": "420322199545857478",
"PhoneNO": "15315219585",
"passengerstate": "正常"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("Passenger added successfully:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("Failed to add passenger:", response.status_code)
# 购买车票
def test_buy_ticket():
url = 'http://localhost:8000/buy_ticket/'
data = {
"ticket_id": "1",
"passenger_name": "张三",
"date": "2024-07-05",
"trainno": "G123",
"tickettype": "二等座",
"price": 100,
"seatno": "C12"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("购票成功:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
elif response.status_code == 404:
print("购票失败, 车票不存在")
else:
print("其他错误:", response.status_code)
# 改签
def test_reschedule_ticket():
url = 'http://localhost:8000/reschedule_ticket/'
data = {
"ticket_id": "1",
"travelDate": "2024-07-05",
"departure": "12",
"destination": "12",
"date": "2024-07-05"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("改签申请成功:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
elif response.status_code == 404:
print("申请失败, 车票或新车次不存在")
else:
print("其他错误:", response.status_code)
# 取消订单
def test_cancelOrder():
url = 'http://localhost:8000/cancelOrder/'
data = {
"ticket_id": "1",
"passenger_name": "张三",
"date": "2024-07-05",
"trainno": "G123",
"tickettype": "二等座",
"price": 100,
"seatno": "C12"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("取消成功:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("其他错误:", response.status_code)
# 退票
# def test_refund_ticket():
# url = 'http://localhost:8000/refund_ticket/'
# data = {
# "ticket_id": "1",
# "date": "2024-07-05"
# }
#
# headers = {'Content-Type': 'application/json'}
#
# response = requests.post(url, data=json.dumps(data), headers=headers)
#
# if response.status_code == 200:
# print("退票成功:", response.json())
# elif response.status_code == 400:
# print("Bad Request:", response.json())
# else:
# print("其他错误:", response.status_code)
# 改签
# def test_change_ticket():
# data = {
# "ticket_id": "3",
# "travelDate": "2024-07-05",
# "trainno": "G1233",
# "date": "2024-07-05"
# }
# url = 'http://localhost:8000/change_ticket/'
# headers = {'Content-Type': 'application/json'}
#
# response = requests.post(url=url, data=json.dumps(data), headers=headers)
#
# if response.status_code == 200:
# print("改签成功:", response.json())
# elif response.status_code == 400:
# print("Bad Request:", response.json())
# else:
# print("其他错误:", response.status_code)
# 购买返程
def test_buyReturn():
url = 'http://localhost:8000/buyReturn/'
data = {
"departure": "12",
"arrival": "12"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url=url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("返程查询成功:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("其他错误:", response.status_code)
# 修改密码
def test_change_password():
url = 'http://localhost:8000/change_password/'
data = {
"name": "test1",
"oldpassword": "12",
"newpassword": "123"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url=url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("密码修改成功:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("其他错误:", response.status_code)
# 获取订单
def test_get_orders():
url = 'http://localhost:8000/get_orders/'
response = requests.get(url)
if response.status_code == 200:
print("订单查询成功:", response.json())
else:
print("其他错误:", response.status_code)
# 查询车次
def test_search_ticket():
url = 'http://localhost:8000/search_ticket/'
data = {
"trainno": "G123",
"date": "2024-07-05"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url=url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("车次查询成功:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("其他错误:", response.status_code)
# 运行测试
# test_save_passenger()
# test_login_view()
# test_search_train()
# import json
# import requests
#
# url='http://localhost:8000/save_passenger/'
# payload = json.dumps({
# "name": "123123",
# "idCard": "585654785478945674",
# "PhoneNO": "19999999999",
# "Bankcard": "1231231232568745",
# "password": "123123123"
# })
# headers = {
# 'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
# 'content-type': 'application/json',
# 'Accept': '*/*',
# 'Host': 'localhost:8000',
# 'Connection': 'keep-alive'
# }
# response = requests.post(url=url, data=payload)
# assert response.status_code == 200
# # assert response.json()['message'] == '注册成功'
# print(response.json())
import requests
import json
# 设置基本的URL和路由
base_url = 'http://localhost:8000'
save_passenger_url = base_url + '/save_passenger/'
login_view_url = base_url + '/login_view/'
search_train_url = base_url + '/search_train/'
headers = {
'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
'content-type': 'application/json',
'Accept': '*/*',
'Host': 'localhost:8000',
'Connection': 'keep-alive'
}
# 保存乘客信息的测试
def test_save_passenger():
data = json.dumps({
"name": "123123",
"idCard": "585654785478945674",
"PhoneNO": "19999999999",
"Bankcard": "1231231232568745",
"password": "123123123"
})
response = requests.post(save_passenger_url, data=data,headers=headers)
if response.status_code == 200:
print("Ticket booking successful:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("Failed to book ticket:", response.status_code)
# 登录的测试
def test_login_view():
data = {
'account': '15315219585',
'password': '1'
}
response = requests.post(login_view_url, json=data)
if response.status_code == 200:
print("Ticket booking successful:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("Failed to book ticket:", response.status_code)
# 查询车次的测试
def test_search_train():
data = {
"departure": "1",
"destination": "1",
"date": "2024-07-04"
}
response = requests.post(search_train_url, json=data)
if response.status_code == 200:
print("Ticket booking successful:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("Failed to book ticket:", response.status_code)
def test_book_ticket():
url = 'http://localhost:8000/book_ticket/'
# 预订车票
data = {
"date": "2024-07-05",
"trainno": "G123"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url=url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("Ticket booking successful:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("Failed to book ticket:", response.status_code)
# 获取乘客信息
def test_get_passengers():
url = 'http://localhost:8000/get_passengers/'
response = requests.get(url=url)
if response.status_code == 200:
print("Passenger data:", response.json())
else:
print("Failed to retrieve passengers:", response.status_code)
# 添加乘客信息
def test_addpassenger():
url = 'http://localhost:8000/addpassenger/'
data = {
"name": "张三",
"idCard": "420322199545857478",
"PhoneNO": "15315219585",
"passengerstate": "正常"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("Passenger added successfully:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("Failed to add passenger:", response.status_code)
# 购买车票
def test_buy_ticket():
url = 'http://localhost:8000/buy_ticket/'
data = {
"ticket_id": "1",
"passenger_name": "张三",
"date": "2024-07-05",
"trainno": "G123",
"tickettype": "二等座",
"price": 100,
"seatno": "C12"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("购票成功:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
elif response.status_code == 404:
print("购票失败, 车票不存在")
else:
print("其他错误:", response.status_code)
# 改签
def test_reschedule_ticket():
url = 'http://localhost:8000/reschedule_ticket/'
data = {
"ticket_id": "1",
"travelDate": "2024-07-05",
"departure": "12",
"destination": "12",
"date": "2024-07-05"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("改签申请成功:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
elif response.status_code == 404:
print("申请失败, 车票或新车次不存在")
else:
print("其他错误:", response.status_code)
# 取消订单
def test_cancelOrder():
url = 'http://localhost:8000/cancelOrder/'
data = {
"ticket_id": "1",
"passenger_name": "张三",
"date": "2024-07-05",
"trainno": "G123",
"tickettype": "二等座",
"price": 100,
"seatno": "C12"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("取消成功:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("其他错误:", response.status_code)
# 退票
# def test_refund_ticket():
# url = 'http://localhost:8000/refund_ticket/'
# data = {
# "ticket_id": "1",
# "date": "2024-07-05"
# }
#
# headers = {'Content-Type': 'application/json'}
#
# response = requests.post(url, data=json.dumps(data), headers=headers)
#
# if response.status_code == 200:
# print("退票成功:", response.json())
# elif response.status_code == 400:
# print("Bad Request:", response.json())
# else:
# print("其他错误:", response.status_code)
# 改签
# def test_change_ticket():
# data = {
# "ticket_id": "3",
# "travelDate": "2024-07-05",
# "trainno": "G1233",
# "date": "2024-07-05"
# }
# url = 'http://localhost:8000/change_ticket/'
# headers = {'Content-Type': 'application/json'}
#
# response = requests.post(url=url, data=json.dumps(data), headers=headers)
#
# if response.status_code == 200:
# print("改签成功:", response.json())
# elif response.status_code == 400:
# print("Bad Request:", response.json())
# else:
# print("其他错误:", response.status_code)
# 购买返程
def test_buyReturn():
url = 'http://localhost:8000/buyReturn/'
data = {
"departure": "12",
"arrival": "12"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url=url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("返程查询成功:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("其他错误:", response.status_code)
# 修改密码
def test_change_password():
url = 'http://localhost:8000/change_password/'
data = {
"name": "test1",
"oldpassword": "12",
"newpassword": "123"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url=url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("密码修改成功:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("其他错误:", response.status_code)
# 获取订单
def test_get_orders():
url = 'http://localhost:8000/get_orders/'
response = requests.get(url)
if response.status_code == 200:
print("订单查询成功:", response.json())
else:
print("其他错误:", response.status_code)
# 查询车次
def test_search_ticket():
url = 'http://localhost:8000/search_ticket/'
data = {
"trainno": "G123",
"date": "2024-07-05"
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url=url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("车次查询成功:", response.json())
elif response.status_code == 400:
print("Bad Request:", response.json())
else:
print("其他错误:", response.status_code)
# 运行测试
# test_save_passenger()
# test_login_view()
# te

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save