parent
2273319a02
commit
4c717f56fb
@ -1,33 +0,0 @@
|
||||
HELP.md
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
### STS ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
}
|
@ -0,0 +1,145 @@
|
||||
/* pages/AircraftMaintenance/AircraftMaintenance.wxss */
|
||||
.container {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 90%;
|
||||
border: 1px solid gray;
|
||||
border-bottom:0px ;
|
||||
padding: 5px;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
}
|
||||
.one{
|
||||
margin-top:0px;
|
||||
font-weight: bold;
|
||||
font-size: 21px;
|
||||
display: block;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.two {
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
display: block;
|
||||
margin-left: 2px;
|
||||
}
|
||||
.three{
|
||||
font-weight: bold;
|
||||
font-size: 15px;
|
||||
color: red;
|
||||
}
|
||||
.four{
|
||||
align-items: center;
|
||||
font-size: 15px;
|
||||
color: red;
|
||||
}
|
||||
.five1{
|
||||
margin: 5px;
|
||||
margin-left: 2px;
|
||||
display: block;
|
||||
font-size: 15px;
|
||||
margin-right: 0px;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.five{
|
||||
margin: 5px;
|
||||
margin-left: 2px;
|
||||
margin-right: 120px;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
font-size: 15px;
|
||||
display: block;
|
||||
}
|
||||
.container1{
|
||||
display: flex;
|
||||
position: relative;
|
||||
align-items: center;
|
||||
}
|
||||
.choose1{
|
||||
margin-left: 20px;
|
||||
}
|
||||
.choose{
|
||||
position: absolute;
|
||||
right:0;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.picker {
|
||||
text-align: center;
|
||||
width: 100px;
|
||||
height: auto;
|
||||
font-size: 15px;
|
||||
border: 1px solid #ccc;
|
||||
padding: 3px;
|
||||
margin: 10px;
|
||||
}
|
||||
.picker1 {
|
||||
text-align: center;
|
||||
width: 100px;
|
||||
height: auto;
|
||||
font-size: 15px;
|
||||
border: 1px solid #ccc;
|
||||
padding: 3px;
|
||||
}
|
||||
.input-box {
|
||||
width: 25%;
|
||||
padding: 0px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
margin: 3px;
|
||||
}
|
||||
.input-box2 {
|
||||
width: 250px;
|
||||
padding: 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
.container3 {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 98%;
|
||||
margin: 2px;
|
||||
padding: 3px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
.scroll-input {
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
padding: 10px;
|
||||
font-size: 15px;
|
||||
border: 1px solid black;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
resize: none;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.container4 {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 90%;
|
||||
border: 1px solid gray;
|
||||
padding: 5px;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.container5{
|
||||
border: white;
|
||||
padding-top: 10px;
|
||||
padding-bottom:10px;
|
||||
}
|
||||
.input-box1 {
|
||||
width: 109px;
|
||||
padding: 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
.input-box3 {
|
||||
width: 68px;
|
||||
padding: 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
@ -0,0 +1,320 @@
|
||||
// pages/AirportGround/AirportGround.js
|
||||
Page({
|
||||
data: {
|
||||
name:'AirportGround',
|
||||
selectedTime: '--时--分',
|
||||
selectedDate: '--年--月--日',
|
||||
selectedIndex1: 0,
|
||||
selectedIndex2: 0,
|
||||
selectedIndex4: 0,
|
||||
selectedIndex5: 0,
|
||||
selectedIndex9: 0,
|
||||
selectedIndex9: 0,
|
||||
selectedIndex10: 0,
|
||||
selectedIndex11: 0,
|
||||
selectedIndex20: 0,
|
||||
selectedIndex21: 0,
|
||||
inputValue1: '',
|
||||
inputValue2: '',
|
||||
inputValue3: '',
|
||||
inputValue15: '',
|
||||
inputValue16: '',
|
||||
inputValue20: '',
|
||||
inputValue21: '',
|
||||
inputValue22: '',
|
||||
inputValue23: '',
|
||||
timezones: ['请选择','UTC-12:00', 'UTC-11:00', 'UTC-10:00', 'UTC-9:00', 'UTC-8:00', 'UTC-7:00', 'UTC-6:00', 'UTC-5:00', 'UTC-4:00', 'UTC-3:00', 'UTC-2:00', 'UTC-1:00', 'UTC+0:00', 'UTC+1:00', 'UTC+2:00', 'UTC+3:00', 'UTC+4:00', 'UTC+5:00', 'UTC+6:00', 'UTC+7:00', 'UTC+8:00', 'UTC+9:00', 'UTC+10:00', 'UTC+11:00', 'UTC+12:00'],
|
||||
position:['请选择','飞行','乘务','管制','保安','油科','护卫','动力保障','车辆勤务','现场指挥','灯光','场务','医疗急救','运输员','其他'],
|
||||
License:['请选择','私用驾驶员执照','商用驾驶员执照','航线运输驾驶员执照','临时执照','无','其它'],
|
||||
ACFT:['请选择','飞机','直升机','滑翔机','其它'],
|
||||
phase:['请选择','场外维护','加油','装载食品/货物','登机','推飞机','发动机开车/试车','滑行','其它'],
|
||||
weather:['请选择','IMC','VMC','雷暴','风切变','紊流','结冰','雨','雪','雾','多云','其它'],
|
||||
lv:['请选择','黎明','昼间','黄昏/曙暮光','夜间/月光','夜间/黑暗','未知'],
|
||||
carone:['请选择','客梯车','行李车','食品车','引导车','拖车','加油车','电/气源车','其它'],
|
||||
cartwo:['请选择','客梯车','行李车','食品车','引导车','拖车','加油车','电/气源车','其它']
|
||||
},
|
||||
//时间选择
|
||||
onTimeChange: function (event) {
|
||||
this.setData({
|
||||
selectedTime: event.detail.value
|
||||
});
|
||||
},
|
||||
onTimezoneChange: function (event) {
|
||||
this.setData({
|
||||
selectedIndex1: event.detail.value
|
||||
});
|
||||
},
|
||||
onDateChange: function(e) {
|
||||
this.setData({
|
||||
selectedDate: e.detail.value
|
||||
});
|
||||
},
|
||||
//工作时间选择
|
||||
onInput1: function(event) {
|
||||
this.setData({
|
||||
inputValue1: event.detail.value
|
||||
});
|
||||
},
|
||||
onInput2: function(event) {
|
||||
this.setData({
|
||||
inputValue2: event.detail.value
|
||||
});
|
||||
},
|
||||
onInput3: function(event) {
|
||||
this.setData({
|
||||
inputValue3: event.detail.value
|
||||
});
|
||||
},
|
||||
//执照选择
|
||||
onLicense: function(event) {
|
||||
this.setData({
|
||||
selectedIndex4: event.detail.value
|
||||
});
|
||||
},
|
||||
//工作经历
|
||||
onInput15: function(event) {
|
||||
this.setData({
|
||||
inputValue15: event.detail.value
|
||||
});
|
||||
},
|
||||
onInput16: function(event) {
|
||||
this.setData({
|
||||
inputValue16: event.detail.value
|
||||
});
|
||||
},
|
||||
//岗位选择
|
||||
onposition: function (event) {
|
||||
this.setData({
|
||||
selectedIndex2: event.detail.value
|
||||
});
|
||||
},
|
||||
//航空器种类
|
||||
onACFT: function(event) {
|
||||
this.setData({
|
||||
selectedIndex5: event.detail.value
|
||||
});
|
||||
},
|
||||
//天气
|
||||
onweather: function(event) {
|
||||
this.setData({
|
||||
selectedIndex10: event.detail.value
|
||||
});
|
||||
},
|
||||
//光线条件和能见度
|
||||
onlv: function(event) {
|
||||
this.setData({
|
||||
selectedIndex11: event.detail.value
|
||||
});
|
||||
},
|
||||
//发生阶段
|
||||
onphase: function(event) {
|
||||
this.setData({
|
||||
selectedIndex9: event.detail.value
|
||||
});
|
||||
},
|
||||
//涉及车辆一
|
||||
oncarone: function(event) {
|
||||
this.setData({
|
||||
selectedIndex20: event.detail.value
|
||||
});
|
||||
},
|
||||
//涉及车辆二
|
||||
oncartwo: function(event) {
|
||||
this.setData({
|
||||
selectedIndex21: event.detail.value
|
||||
});
|
||||
},
|
||||
//事件经过
|
||||
onInput20: function(event) {
|
||||
this.setData({
|
||||
inputValue20: event.detail.value
|
||||
});
|
||||
},
|
||||
//个人信息//姓名电话邮箱
|
||||
onInput21: function(event) {
|
||||
this.setData({
|
||||
inputValue21: event.detail.value
|
||||
});
|
||||
},
|
||||
onInput22: function(event) {
|
||||
this.setData({
|
||||
inputValue22: event.detail.value
|
||||
});
|
||||
},
|
||||
onInput23: function(event) {
|
||||
this.setData({
|
||||
inputValue23: event.detail.value
|
||||
});
|
||||
},
|
||||
//文件上传
|
||||
//提交与重写
|
||||
onReset() {
|
||||
this.setData({
|
||||
selectedTime: '--时--分',
|
||||
selectedDate: '--年--月--日',
|
||||
selectedIndex1: 0,
|
||||
selectedIndex2: 0,
|
||||
selectedIndex4: 0,
|
||||
selectedIndex5: 0,
|
||||
selectedIndex9: 0,
|
||||
selectedIndex9: 0,
|
||||
selectedIndex10: 0,
|
||||
selectedIndex11: 0,
|
||||
selectedIndex20: 0,
|
||||
selectedIndex21: 0,
|
||||
inputValue1: '',
|
||||
inputValue2: '',
|
||||
inputValue3: '',
|
||||
inputValue15: '',
|
||||
inputValue16: '',
|
||||
inputValue20: '',
|
||||
inputValue21: '',
|
||||
inputValue22: '',
|
||||
inputValue23: '',
|
||||
},() => {
|
||||
console.log('Form has been reset');
|
||||
})
|
||||
},
|
||||
// 提交数据
|
||||
onSubmit: function () {
|
||||
// 获取存储中的 token
|
||||
const token = wx.getStorageSync('token');
|
||||
|
||||
if (!token) {
|
||||
console.log('Token 不存在,请先登录');
|
||||
wx.showToast({
|
||||
title: '请先登录',
|
||||
icon: 'none'
|
||||
});
|
||||
return; // 终止提交
|
||||
}
|
||||
const data = this.data;
|
||||
|
||||
// 获取各选择项的实际文本值
|
||||
const timezoneText = data.timezones[data.selectedIndex1]; // 获取时区的实际文本
|
||||
const licenseText = data.License[data.selectedIndex4]; // 获取执照类型的实际文本
|
||||
const acftText = data.ACFT[data.selectedIndex5]; // 获取航空器类型的实际文本
|
||||
const phaseText = data.phase[data.selectedIndex9]; // 获取事件阶段的实际文本
|
||||
const weatherText = data.weather[data.selectedIndex10]; // 获取天气情况的实际文本
|
||||
const lightText = data.lv[data.selectedIndex11]; // 获取光线条件的实际文本
|
||||
const caroneText = data.carone[data.selectedIndex20]; // 获取涉及车辆一的实际文本
|
||||
const cartwoText = data.cartwo[data.selectedIndex21]; // 获取涉及车辆二的实际文本
|
||||
|
||||
// 提交数据到后端
|
||||
wx.request({
|
||||
url: 'http://192.168.137.1:8080/report/add',
|
||||
method: 'POST',
|
||||
header: {
|
||||
'Authorization': `${token}`,
|
||||
'content-type': 'application/json'
|
||||
},
|
||||
data: {
|
||||
selectedTime: data.selectedTime,
|
||||
selectedDate: data.selectedDate,
|
||||
timezone: timezoneText, // 提交时区的实际文本
|
||||
license: licenseText, // 提交执照类型的实际文本
|
||||
acftType: acftText, // 提交航空器类型的实际文本
|
||||
phase: phaseText, // 提交事件阶段的实际文本
|
||||
weather: weatherText, // 提交天气情况的实际文本
|
||||
lightCondition: lightText, // 提交光线条件的实际文本
|
||||
carone: caroneText, // 提交涉及车辆一的实际文本
|
||||
cartwo: cartwoText, // 提交涉及车辆二的实际文本
|
||||
inputValue1: data.inputValue1,
|
||||
inputValue2: data.inputValue2,
|
||||
inputValue3: data.inputValue3,
|
||||
inputValue15: data.inputValue15,
|
||||
inputValue16: data.inputValue16,
|
||||
inputValue20: data.inputValue20,
|
||||
inputValue21: data.inputValue21,
|
||||
inputValue22: data.inputValue22,
|
||||
inputValue23: data.inputValue23,
|
||||
name: data.name
|
||||
},
|
||||
success: function(res) {
|
||||
console.log('Data submitted successfully:', res);
|
||||
},
|
||||
fail: function(err) {
|
||||
console.error('Error submitting data:', err);
|
||||
}
|
||||
});
|
||||
// 使用腾讯混元智能体的 API 调用
|
||||
wx.request({
|
||||
url: 'https://yuanqi.tencent.com/openapi/v1/agent/chat/completions',
|
||||
method: 'POST',
|
||||
header: {
|
||||
'X-Source': 'openapi',
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': 'Bearer jSNTZONSnnzJ2uuQT7IEgXlPzfE4lX5f' // 替换为你的实际 Bearer Token
|
||||
},
|
||||
data: {
|
||||
assistant_id: 'ty1W9unZM9IY', // 替换为实际的 assistant_id
|
||||
user_id: '123456', // 替换为实际的用户ID
|
||||
stream: false,
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: JSON.stringify(data) // 将用户填写的数据转换为字符串
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
success: function (res) {
|
||||
console.log('API 调用成功: ', res); // 打印完整的 API 响应
|
||||
console.log('API 返回的 choices:', res.data.choices); // 检查数据结构
|
||||
|
||||
// 检查选择项并从中提取智能体回复
|
||||
if (res.data && res.data.choices && res.data.choices.length > 0) {
|
||||
// 确保 message 字段的内容可以被访问
|
||||
const messageContent = res.data.choices[0].message?.content;
|
||||
let agentReply;
|
||||
|
||||
// 如果 messageContent 存在并且是一个数组,则提取内容
|
||||
if (Array.isArray(messageContent) && messageContent.length > 0) {
|
||||
agentReply = messageContent[0].text; // 假设内容在数组的第一个元素中
|
||||
} else {
|
||||
agentReply = messageContent || '无法获取智能体的回复';
|
||||
}
|
||||
|
||||
// 跳转到详情页面并传递数据和智能体的回复
|
||||
wx.navigateTo({
|
||||
url: '/pages/FlightCrewDetails/FlightCrewDetails',
|
||||
success: function (navRes) {
|
||||
navRes.eventChannel.emit('sendData', {
|
||||
details: data, // 用户输入的数据
|
||||
agentReply: agentReply // 智能体的回复
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.log('API 响应中没有 choices');
|
||||
}
|
||||
},
|
||||
fail: function (err) {
|
||||
console.log('智能体调用失败', err);
|
||||
}
|
||||
});
|
||||
},
|
||||
onLoad(options) {
|
||||
},
|
||||
onReady() {
|
||||
|
||||
},
|
||||
onShow() {
|
||||
},
|
||||
onHide() {
|
||||
},
|
||||
onUnload() {
|
||||
},
|
||||
onPullDownRefresh() {
|
||||
|
||||
},
|
||||
onReachBottom() {
|
||||
|
||||
},
|
||||
onShareAppMessage() {
|
||||
}
|
||||
})
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
}
|
@ -0,0 +1,139 @@
|
||||
/* pages/AirportGround/AirportGround.wxss */
|
||||
/* pages/Airtraffic/Airtraffic.wxss */
|
||||
.container {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 90%;
|
||||
border: 1px solid gray;
|
||||
border-bottom:0px ;
|
||||
padding: 5px;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
}
|
||||
.one{
|
||||
margin-top:0px;
|
||||
font-weight: bold;
|
||||
font-size: 21px;
|
||||
display: block;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.two {
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
display: block;
|
||||
margin-left: 2px;
|
||||
}
|
||||
.three{
|
||||
font-weight: bold;
|
||||
font-size: 15px;
|
||||
color: red;
|
||||
}
|
||||
.four{
|
||||
align-items: center;
|
||||
font-size: 15px;
|
||||
color: red;
|
||||
}
|
||||
.five1{
|
||||
margin: 5px;
|
||||
margin-left: 2px;
|
||||
display: block;
|
||||
font-size: 15px;
|
||||
margin-right: 0px;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.five{
|
||||
margin: 5px;
|
||||
margin-left: 2px;
|
||||
margin-right: 120px;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
font-size: 15px;
|
||||
display: block;
|
||||
}
|
||||
.container1{
|
||||
display: flex;
|
||||
position: relative;
|
||||
align-items: center;
|
||||
}
|
||||
.choose1{
|
||||
margin-left: 20px;
|
||||
}
|
||||
.choose{
|
||||
position: absolute;
|
||||
right:0;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.picker {
|
||||
text-align: center;
|
||||
width: 100px;
|
||||
height: auto;
|
||||
font-size: 15px;
|
||||
border: 1px solid #ccc;
|
||||
padding: 3px;
|
||||
margin: 10px;
|
||||
|
||||
}
|
||||
.input-box {
|
||||
width: 25%;
|
||||
padding: 0px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
margin: 3px;
|
||||
}
|
||||
.input-box2 {
|
||||
width: 250px;
|
||||
padding: 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
.container3 {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 98%;
|
||||
margin: 2px;
|
||||
padding: 3px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
.scroll-input {
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
padding: 10px;
|
||||
font-size: 15px;
|
||||
border: 1px solid black;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
resize: none;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.container4 {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 90%;
|
||||
border: 1px solid gray;
|
||||
padding: 5px;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.container5{
|
||||
border: white;
|
||||
padding-top: 10px;
|
||||
padding-bottom:10px;
|
||||
}
|
||||
.input-box1 {
|
||||
width: 109px;
|
||||
padding: 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
.input-box3 {
|
||||
width: 68px;
|
||||
padding: 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
@ -0,0 +1,188 @@
|
||||
// pages/Fast/Fast.js
|
||||
Page({
|
||||
data: {
|
||||
name:'Fast',
|
||||
selectedTime: '--时--分',
|
||||
selectedDate: '--年--月--日',
|
||||
selectedIndex1: 0,
|
||||
inputValue20: '',
|
||||
inputValue21: '',
|
||||
inputValue22: '',
|
||||
inputValue23: '',
|
||||
timezones: ['请选择','UTC-12:00', 'UTC-11:00', 'UTC-10:00', 'UTC-9:00', 'UTC-8:00', 'UTC-7:00', 'UTC-6:00', 'UTC-5:00', 'UTC-4:00', 'UTC-3:00', 'UTC-2:00', 'UTC-1:00', 'UTC+0:00', 'UTC+1:00', 'UTC+2:00', 'UTC+3:00', 'UTC+4:00', 'UTC+5:00', 'UTC+6:00', 'UTC+7:00', 'UTC+8:00', 'UTC+9:00', 'UTC+10:00', 'UTC+11:00', 'UTC+12:00'],
|
||||
},
|
||||
//时间选择
|
||||
onTimeChange: function (event) {
|
||||
this.setData({
|
||||
selectedTime: event.detail.value
|
||||
});
|
||||
},
|
||||
onTimezoneChange: function (event) {
|
||||
this.setData({
|
||||
selectedIndex1: event.detail.value
|
||||
});
|
||||
},
|
||||
onDateChange: function(e) {
|
||||
this.setData({
|
||||
selectedDate: e.detail.value
|
||||
});
|
||||
},
|
||||
//事件经过
|
||||
onInput20: function(event) {
|
||||
this.setData({
|
||||
inputValue20: event.detail.value
|
||||
});
|
||||
},
|
||||
//个人信息//姓名电话邮箱
|
||||
onInput21: function(event) {
|
||||
this.setData({
|
||||
inputValue21: event.detail.value
|
||||
});
|
||||
},
|
||||
onInput22: function(event) {
|
||||
this.setData({
|
||||
inputValue22: event.detail.value
|
||||
});
|
||||
},
|
||||
onInput23: function(event) {
|
||||
this.setData({
|
||||
inputValue23: event.detail.value
|
||||
});
|
||||
},
|
||||
//提交与重写
|
||||
onReset() {
|
||||
this.setData({
|
||||
selectedTime: '--时--分',
|
||||
selectedDate: '--年--月--日',
|
||||
selectedIndex1: 0,
|
||||
inputValue20: '',
|
||||
inputValue21: '',
|
||||
inputValue22: '',
|
||||
inputValue23: '',
|
||||
},() => {
|
||||
console.log('Form has been reset');
|
||||
})
|
||||
},
|
||||
//提交数据
|
||||
onSubmit: function () {
|
||||
// 获取存储中的 token
|
||||
const token = wx.getStorageSync('token');
|
||||
|
||||
if (!token) {
|
||||
console.log('Token 不存在,请先登录');
|
||||
wx.showToast({
|
||||
title: '请先登录',
|
||||
icon: 'none'
|
||||
});
|
||||
return; // 终止提交
|
||||
}
|
||||
const data = this.data;
|
||||
// 获取各选择项的实际文本值
|
||||
const timezoneText = data.timezones[data.selectedIndex1]; // 获取时区的实际文本
|
||||
|
||||
// 提交数据到后端
|
||||
wx.request({
|
||||
url: 'http://192.168.137.1:8080/report/add',
|
||||
method: 'POST',
|
||||
header: {
|
||||
'Authorization': `${token}`,
|
||||
'content-type': 'application/json'
|
||||
},
|
||||
data: {
|
||||
selectedTime: data.selectedTime, // 提交的选定时间
|
||||
selectedDate: data.selectedDate, // 提交的选定日期
|
||||
timezone: timezoneText, // 提交时区的实际文本
|
||||
inputValue20: data.inputValue20, // 提交输入值20
|
||||
inputValue21: data.inputValue21, // 提交输入值21
|
||||
inputValue22: data.inputValue22, // 提交输入值22
|
||||
inputValue23: data.inputValue23, // 提交输入值23
|
||||
name: data.name // 提交姓名
|
||||
},
|
||||
success: function (res) {
|
||||
console.log('Data submitted successfully:', res);
|
||||
},
|
||||
fail: function (err) {
|
||||
console.error('Error submitting data:', err);
|
||||
}
|
||||
});
|
||||
// 使用腾讯混元智能体的 API 调用
|
||||
wx.request({
|
||||
url: 'https://yuanqi.tencent.com/openapi/v1/agent/chat/completions',
|
||||
method: 'POST',
|
||||
header: {
|
||||
'X-Source': 'openapi',
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': 'Bearer jSNTZONSnnzJ2uuQT7IEgXlPzfE4lX5f' // 替换为你的实际 Bearer Token
|
||||
},
|
||||
data: {
|
||||
assistant_id: 'ty1W9unZM9IY', // 替换为实际的 assistant_id
|
||||
user_id: '123456', // 替换为实际的用户ID
|
||||
stream: false,
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: JSON.stringify(data) // 将用户填写的数据转换为字符串
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
success: function (res) {
|
||||
console.log('API 调用成功: ', res); // 打印完整的 API 响应
|
||||
console.log('API 返回的 choices:', res.data.choices); // 检查数据结构
|
||||
|
||||
// 检查选择项并从中提取智能体回复
|
||||
if (res.data && res.data.choices && res.data.choices.length > 0) {
|
||||
// 确保 message 字段的内容可以被访问
|
||||
const messageContent = res.data.choices[0].message?.content;
|
||||
let agentReply;
|
||||
|
||||
// 如果 messageContent 存在并且是一个数组,则提取内容
|
||||
if (Array.isArray(messageContent) && messageContent.length > 0) {
|
||||
agentReply = messageContent[0].text; // 假设内容在数组的第一个元素中
|
||||
} else {
|
||||
agentReply = messageContent || '无法获取智能体的回复';
|
||||
}
|
||||
|
||||
// 跳转到详情页面并传递数据和智能体的回复
|
||||
wx.navigateTo({
|
||||
url: '/pages/FlightCrewDetails/FlightCrewDetails',
|
||||
success: function (navRes) {
|
||||
navRes.eventChannel.emit('sendData', {
|
||||
details: data, // 用户输入的数据
|
||||
agentReply: agentReply // 智能体的回复
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.log('API 响应中没有 choices');
|
||||
}
|
||||
},
|
||||
fail: function (err) {
|
||||
console.log('智能体调用失败', err);
|
||||
}
|
||||
});
|
||||
},
|
||||
onLoad(options) {
|
||||
},
|
||||
onReady() {
|
||||
|
||||
},
|
||||
onShow() {
|
||||
},
|
||||
onHide() {
|
||||
},
|
||||
onUnload() {
|
||||
},
|
||||
onPullDownRefresh() {
|
||||
|
||||
},
|
||||
onReachBottom() {
|
||||
|
||||
},
|
||||
onShareAppMessage() {
|
||||
}
|
||||
})
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
}
|
@ -0,0 +1,141 @@
|
||||
/* pages/Fast/Fast.wxss */
|
||||
/* pages/Students/students.wxss */
|
||||
/* pages/Aviation/Aviation.wxss */
|
||||
/* pages/Airtraffic/Airtraffic.wxss */
|
||||
.container {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 90%;
|
||||
border: 1px solid gray;
|
||||
border-bottom:0px ;
|
||||
padding: 5px;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
}
|
||||
.one{
|
||||
margin-top:0px;
|
||||
font-weight: bold;
|
||||
font-size: 21px;
|
||||
display: block;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.two {
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
display: block;
|
||||
margin-left: 2px;
|
||||
}
|
||||
.three{
|
||||
font-weight: bold;
|
||||
font-size: 15px;
|
||||
color: red;
|
||||
}
|
||||
.four{
|
||||
align-items: center;
|
||||
font-size: 15px;
|
||||
color: red;
|
||||
}
|
||||
.five1{
|
||||
margin: 5px;
|
||||
margin-left: 2px;
|
||||
display: block;
|
||||
font-size: 15px;
|
||||
margin-right: 0px;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.five{
|
||||
margin: 5px;
|
||||
margin-left: 2px;
|
||||
margin-right: 120px;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
font-size: 15px;
|
||||
display: block;
|
||||
}
|
||||
.container1{
|
||||
display: flex;
|
||||
position: relative;
|
||||
align-items: center;
|
||||
}
|
||||
.choose1{
|
||||
margin-left: 20px;
|
||||
}
|
||||
.choose{
|
||||
position: absolute;
|
||||
right:0;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.picker {
|
||||
text-align: center;
|
||||
width: 100px;
|
||||
height: auto;
|
||||
font-size: 15px;
|
||||
border: 1px solid #ccc;
|
||||
padding: 3px;
|
||||
margin: 10px;
|
||||
|
||||
}
|
||||
.input-box {
|
||||
width: 25%;
|
||||
padding: 0px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
margin: 3px;
|
||||
}
|
||||
.input-box2 {
|
||||
width: 250px;
|
||||
padding: 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
.container3 {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 98%;
|
||||
margin: 2px;
|
||||
padding: 3px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
.scroll-input {
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
padding: 10px;
|
||||
font-size: 15px;
|
||||
border: 1px solid black;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
resize: none;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.container4 {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 90%;
|
||||
border: 1px solid gray;
|
||||
padding: 5px;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.container5{
|
||||
border: white;
|
||||
padding-top: 10px;
|
||||
padding-bottom:10px;
|
||||
}
|
||||
.input-box1 {
|
||||
width: 100px;
|
||||
padding: 0px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
.input-box3 {
|
||||
width: 68px;
|
||||
padding: 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"usingComponents": {
|
||||
}
|
||||
}
|
@ -0,0 +1,144 @@
|
||||
/* pages/Airtraffic/Airtraffic.wxss */
|
||||
.container {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 90%;
|
||||
border: 1px solid gray;
|
||||
border-bottom:0px ;
|
||||
padding: 5px;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
}
|
||||
.one{
|
||||
margin-top:0px;
|
||||
font-weight: bold;
|
||||
font-size: 21px;
|
||||
display: block;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.two {
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
display: block;
|
||||
margin-left: 2px;
|
||||
}
|
||||
.three{
|
||||
font-weight: bold;
|
||||
font-size: 15px;
|
||||
color: red;
|
||||
}
|
||||
.four{
|
||||
align-items: center;
|
||||
font-size: 15px;
|
||||
color: red;
|
||||
}
|
||||
.five1{
|
||||
margin: 5px;
|
||||
margin-left: 2px;
|
||||
display: block;
|
||||
font-size: 15px;
|
||||
margin-right: 0px;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.five{
|
||||
margin: 5px;
|
||||
margin-left: 2px;
|
||||
margin-right: 120px;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
font-size: 15px;
|
||||
display: block;
|
||||
}
|
||||
.container1{
|
||||
display: flex;
|
||||
position: relative;
|
||||
align-items: center;
|
||||
}
|
||||
.choose1{
|
||||
margin-left: 20px;
|
||||
}
|
||||
.choose{
|
||||
position: absolute;
|
||||
right:0;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.picker {
|
||||
text-align: center;
|
||||
width: 100px;
|
||||
height: auto;
|
||||
font-size: 15px;
|
||||
border: 1px solid #ccc;
|
||||
padding: 3px;
|
||||
margin: 10px;
|
||||
|
||||
}
|
||||
.input-box {
|
||||
width: 25%;
|
||||
padding: 0px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
margin: 3px;
|
||||
}
|
||||
.input-box2 {
|
||||
width: 250px;
|
||||
padding: 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
.container3 {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 98%;
|
||||
margin: 2px;
|
||||
padding: 3px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
.scroll-input {
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
padding: 10px;
|
||||
font-size: 15px;
|
||||
border: 1px solid black;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
resize: none;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.container4 {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 90%;
|
||||
border: 1px solid gray;
|
||||
padding: 5px;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.container5{
|
||||
border: white;
|
||||
padding-top: 10px;
|
||||
padding-bottom:10px;
|
||||
}
|
||||
.input-box1 {
|
||||
width: 109px;
|
||||
padding: 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
.input-box3 {
|
||||
width: 68px;
|
||||
padding: 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
|
||||
ec-canvas {
|
||||
width: 100%;
|
||||
height: 400px;
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
Page({
|
||||
data: {
|
||||
details: {}, // 用户填写的数据
|
||||
agentReply: '' // 智能体的回复
|
||||
},
|
||||
onLoad(options) {
|
||||
const eventChannel = this.getOpenerEventChannel();
|
||||
|
||||
// 监听并接收来自 FlightCrew.js 传递的数据
|
||||
eventChannel.on('sendData', (data) => {
|
||||
console.log('接收到的数据: ', data); // 打印接收到的数据,便于调试
|
||||
this.setData({
|
||||
details: data.details, // 用户的详细数据
|
||||
agentReply: data.agentReply // 智能体的回复
|
||||
});
|
||||
});
|
||||
},
|
||||
// 回到首页的函数
|
||||
goToHome() {
|
||||
wx.switchTab({
|
||||
url: '/pages/home/home', // 'home' Tab 页的路径
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
<text>智能分析: {{agentReply}}</text>
|
||||
<button bindtap="goToHome" class="home-button">回到首页</button>
|
@ -0,0 +1,9 @@
|
||||
.home-button {
|
||||
margin-top: 20px;
|
||||
background-color: #007aff;
|
||||
color: #ffffff;
|
||||
padding: 10px 15px;
|
||||
border-radius: 5px;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
{
|
||||
"component": true,
|
||||
"styleIsolation": "apply-shared",
|
||||
"usingComponents": {}
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
<view class="weui-navigation-bar {{extClass}}">
|
||||
<view class="weui-navigation-bar__inner {{ios ? 'ios' : 'android'}}" style="color: {{color}}; background: {{background}}; {{displayStyle}}; {{innerPaddingRight}}; {{safeAreaTop}};">
|
||||
|
||||
<!-- 左侧按钮 -->
|
||||
<view class='weui-navigation-bar__left' style="{{leftWidth}};">
|
||||
<block wx:if="{{back || homeButton}}">
|
||||
<!-- 返回上一页 -->
|
||||
<block wx:if="{{back}}">
|
||||
<view class="weui-navigation-bar__buttons weui-navigation-bar__buttons_goback">
|
||||
<view
|
||||
bindtap="back"
|
||||
class="weui-navigation-bar__btn_goback_wrapper"
|
||||
hover-class="weui-active"
|
||||
hover-stay-time="100"
|
||||
aria-role="button"
|
||||
aria-label="返回"
|
||||
>
|
||||
<view class="weui-navigation-bar__button weui-navigation-bar__btn_goback"></view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<!-- 返回首页 -->
|
||||
<block wx:if="{{homeButton}}">
|
||||
<view class="weui-navigation-bar__buttons weui-navigation-bar__buttons_home">
|
||||
<view
|
||||
bindtap="home"
|
||||
class="weui-navigation-bar__btn_home_wrapper"
|
||||
hover-class="weui-active"
|
||||
aria-role="button"
|
||||
aria-label="首页"
|
||||
>
|
||||
<view class="weui-navigation-bar__button weui-navigation-bar__btn_home"></view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
</block>
|
||||
<block wx:else>
|
||||
<slot name="left"></slot>
|
||||
</block>
|
||||
</view>
|
||||
|
||||
<!-- 标题 -->
|
||||
<view class='weui-navigation-bar__center'>
|
||||
<view wx:if="{{loading}}" class="weui-navigation-bar__loading" aria-role="alert">
|
||||
<view
|
||||
class="weui-loading"
|
||||
aria-role="img"
|
||||
aria-label="加载中"
|
||||
></view>
|
||||
</view>
|
||||
<block wx:if="{{title}}">
|
||||
<text>{{title}}</text>
|
||||
</block>
|
||||
<block wx:else>
|
||||
<slot name="center"></slot>
|
||||
</block>
|
||||
</view>
|
||||
|
||||
<!-- 右侧留空 -->
|
||||
<view class='weui-navigation-bar__right'>
|
||||
<slot name="right"></slot>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
@ -0,0 +1,96 @@
|
||||
.weui-navigation-bar {
|
||||
--weui-FG-0:rgba(0,0,0,.9);
|
||||
--height: 44px;
|
||||
--left: 16px;
|
||||
}
|
||||
.weui-navigation-bar .android {
|
||||
--height: 48px;
|
||||
}
|
||||
|
||||
.weui-navigation-bar {
|
||||
overflow: hidden;
|
||||
color: var(--weui-FG-0);
|
||||
flex: none;
|
||||
}
|
||||
|
||||
.weui-navigation-bar__inner {
|
||||
position: relative;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: calc(var(--height) + env(safe-area-inset-top));
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding-top: env(safe-area-inset-top);
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.weui-navigation-bar__left {
|
||||
position: relative;
|
||||
padding-left: var(--left);
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.weui-navigation-bar__btn_goback_wrapper {
|
||||
padding: 11px 18px 11px 16px;
|
||||
margin: -11px -18px -11px -16px;
|
||||
}
|
||||
|
||||
.weui-navigation-bar__btn_goback_wrapper.weui-active {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.weui-navigation-bar__btn_goback {
|
||||
font-size: 12px;
|
||||
width: 12px;
|
||||
height: 24px;
|
||||
-webkit-mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%;
|
||||
mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%;
|
||||
-webkit-mask-size: cover;
|
||||
mask-size: cover;
|
||||
background-color: var(--weui-FG-0);
|
||||
}
|
||||
|
||||
.weui-navigation-bar__center {
|
||||
font-size: 17px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-weight: bold;
|
||||
flex: 1;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.weui-navigation-bar__loading {
|
||||
margin-right: 4px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.weui-loading {
|
||||
font-size: 16px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
display: block;
|
||||
background: transparent url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='80px' height='80px' viewBox='0 0 80 80' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3Eloading%3C/title%3E%3Cdefs%3E%3ClinearGradient x1='94.0869141%25' y1='0%25' x2='94.0869141%25' y2='90.559082%25' id='linearGradient-1'%3E%3Cstop stop-color='%23606060' stop-opacity='0' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3ClinearGradient x1='100%25' y1='8.67370605%25' x2='100%25' y2='90.6286621%25' id='linearGradient-2'%3E%3Cstop stop-color='%23606060' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' opacity='0.9'%3E%3Cg%3E%3Cpath d='M40,0 C62.09139,0 80,17.90861 80,40 C80,62.09139 62.09139,80 40,80 L40,73 C58.2253967,73 73,58.2253967 73,40 C73,21.7746033 58.2253967,7 40,7 L40,0 Z' fill='url(%23linearGradient-1)'%3E%3C/path%3E%3Cpath d='M40,0 L40,7 C21.7746033,7 7,21.7746033 7,40 C7,58.2253967 21.7746033,73 40,73 L40,80 C17.90861,80 0,62.09139 0,40 C0,17.90861 17.90861,0 40,0 Z' fill='url(%23linearGradient-2)'%3E%3C/path%3E%3Ccircle id='Oval' fill='%23606060' cx='40.5' cy='3.5' r='3.5'%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A") no-repeat;
|
||||
background-size: 100%;
|
||||
margin-left: 0;
|
||||
animation: loading linear infinite 1s;
|
||||
}
|
||||
|
||||
@keyframes loading {
|
||||
from {
|
||||
transform: rotate(0);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
@ -1,71 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>3.2.3</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
<groupId>com.sa</groupId>
|
||||
<artifactId>bigevent</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>bigevent</name>
|
||||
<description>bigevent</description>
|
||||
<properties>
|
||||
<java.version>17</java.version>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mybatis.spring.boot</groupId>
|
||||
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||
<version>3.0.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mybatis.spring.boot</groupId>
|
||||
<artifactId>mybatis-spring-boot-starter-test</artifactId>
|
||||
<version>3.0.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<scope>annotationProcessor</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-validation</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.auth0</groupId>
|
||||
<artifactId>java-jwt</artifactId>
|
||||
<version>4.4.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
@ -1,61 +0,0 @@
|
||||
CREATE TABLE reports (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
name TEXT,
|
||||
selectedTime TEXT,
|
||||
selectedDate TEXT,
|
||||
license TEXT,
|
||||
acftType TEXT,
|
||||
fixstage TEXT,
|
||||
fixcheck TEXT,
|
||||
aarcstatus TEXT,
|
||||
phase TEXT,
|
||||
wether TEXT,
|
||||
lightCondition TEXT,
|
||||
carone TEXT,
|
||||
cartwo TEXT,
|
||||
workPosition TEXT,
|
||||
task TEXT,
|
||||
plan TEXT,
|
||||
ats TEXT,
|
||||
atc TEXT,
|
||||
tcas TEXT,
|
||||
advise TEXT,
|
||||
involve TEXT,
|
||||
tudentType TEXT,
|
||||
acft0Type TEXT,
|
||||
task0 TEXT,
|
||||
plan0 TEXT,
|
||||
phase0 TEXT,
|
||||
wether0 TEXT,
|
||||
lightCondition0 TEXT,
|
||||
ats0 TEXT,
|
||||
atc0 TEXT,
|
||||
tcas0 TEXT,
|
||||
advise0 TEXT,
|
||||
inputValue1 TEXT,
|
||||
inputValue2 TEXT,
|
||||
inputValue3 TEXT,
|
||||
inputValue4 TEXT,
|
||||
inputValue5 TEXT,
|
||||
inputValue6 TEXT,
|
||||
inputValue7 TEXT,
|
||||
inputValue8 TEXT,
|
||||
inputValue9 TEXT,
|
||||
inputValue10 TEXT,
|
||||
inputValue11 TEXT,
|
||||
inputValue12 TEXT,
|
||||
inputValue13 TEXT,
|
||||
inputValue14 TEXT,
|
||||
inputValue15 TEXT,
|
||||
inputValue16 TEXT,
|
||||
inputValue17 TEXT,
|
||||
inputValue18 TEXT,
|
||||
inputValue19 TEXT,
|
||||
inputValue20 TEXT,
|
||||
inputValue21 TEXT,
|
||||
inputValue22 TEXT,
|
||||
inputValue23 TEXT,
|
||||
inputValue100 TEXT,
|
||||
inputValue101 TEXT,
|
||||
inputValue102 TEXT
|
||||
);
|
@ -1,15 +0,0 @@
|
||||
package com.sa.unsafeincidents;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class UnsafeincidentsApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
SpringApplication.run(UnsafeincidentsApplication.class, args);
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
package com.sa.unsafeincidents.config;
|
||||
|
||||
import com.sa.unsafeincidents.interceptors.LoginInterceptor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
@Configuration
|
||||
public class webconfig implements WebMvcConfigurer {
|
||||
|
||||
@Autowired
|
||||
private LoginInterceptor loginInterceptor;
|
||||
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(loginInterceptor).excludePathPatterns("/user/login", "/user/register");
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
package com.sa.unsafeincidents.controller;
|
||||
import com.sa.unsafeincidents.pojo.Report;
|
||||
import com.sa.unsafeincidents.pojo.Result;
|
||||
import com.sa.unsafeincidents.pojo.User;
|
||||
import com.sa.unsafeincidents.service.ReportService;
|
||||
import com.sa.unsafeincidents.service.UserService;
|
||||
import com.sa.unsafeincidents.utils.ThreadLocalUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/report")
|
||||
public class ReportController {
|
||||
@Autowired
|
||||
ReportService reportService;
|
||||
|
||||
@Autowired
|
||||
UserService userService;
|
||||
|
||||
@PostMapping("/add")
|
||||
public Result add(@RequestBody Report form) {
|
||||
reportService.add(form);
|
||||
System.out.println("test");
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
public Result<Report> get(Integer id) {
|
||||
return Result.success(reportService.findByID(id));
|
||||
}
|
||||
|
||||
@PostMapping("/reply")
|
||||
public Result reply(Integer id, String reply) {
|
||||
reportService.reply(id, reply);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
public Result<List<Report>> list() {
|
||||
Map<String,Object> claims = ThreadLocalUtil.get();
|
||||
String username = (String) claims.get("username");
|
||||
User user = userService.findByUsername(username);
|
||||
if (user.getPermissions() == 1) {
|
||||
return Result.success(reportService.list());
|
||||
} else {
|
||||
List<Report> reports = reportService.list(username);
|
||||
return Result.success(reports);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
package com.sa.unsafeincidents.controller;
|
||||
|
||||
|
||||
import com.sa.unsafeincidents.pojo.Result;
|
||||
import com.sa.unsafeincidents.pojo.User;
|
||||
import com.sa.unsafeincidents.service.UserService;
|
||||
import com.sa.unsafeincidents.utils.JwtUtil;
|
||||
import com.sa.unsafeincidents.utils.Md5Util;
|
||||
import com.sa.unsafeincidents.utils.ThreadLocalUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/user")
|
||||
public class UserController {
|
||||
@Autowired
|
||||
UserService userService;
|
||||
|
||||
@PostMapping("/register")
|
||||
public Result register(String username, String password) {
|
||||
User user = userService.findByUsername(username);
|
||||
|
||||
if (user == null) {
|
||||
userService.register(username, password);
|
||||
return Result.success();
|
||||
} else {
|
||||
return Result.error("用户已存在");
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/is_admin")
|
||||
public Result is_admin() {
|
||||
Map<String,Object> claims = ThreadLocalUtil.get();
|
||||
String username = (String) claims.get("username");
|
||||
// System.out.println(username);
|
||||
User user = userService.findByUsername(username);
|
||||
if (user.getPermissions() == 1) return Result.success(true);
|
||||
return Result.success(false);
|
||||
}
|
||||
|
||||
@PostMapping("/login")
|
||||
public Result login(String username,String password) {
|
||||
User loginuser = userService.findByUsername(username);
|
||||
|
||||
// System.out.println(username + ' ' + password);
|
||||
|
||||
if (loginuser == null || !loginuser.getPassword().equals(Md5Util.getMD5String(password))) {
|
||||
return Result.error("用户名或密码错误");
|
||||
} else {
|
||||
Map<String,Object> claims = new HashMap<>();
|
||||
claims.put("id",loginuser.getId());
|
||||
claims.put("username",loginuser.getUsername());
|
||||
String token = JwtUtil.genToken(claims);
|
||||
return Result.success(token);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
package com.sa.unsafeincidents.exception;
|
||||
|
||||
|
||||
import com.sa.unsafeincidents.pojo.Result;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
@RestControllerAdvice
|
||||
public class GlobalExceptionHandle {
|
||||
|
||||
|
||||
@ExceptionHandler(Exception.class)
|
||||
public Result HandleException(Exception e) {
|
||||
e.printStackTrace();
|
||||
return Result.error(StringUtils.hasLength(e.getMessage())? e.getMessage():"操作失败");
|
||||
}
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
package com.sa.unsafeincidents.interceptors;
|
||||
|
||||
import com.sa.unsafeincidents.utils.JwtUtil;
|
||||
import com.sa.unsafeincidents.utils.ThreadLocalUtil;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
@Component
|
||||
public class LoginInterceptor implements HandlerInterceptor {
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
String token = request.getHeader("Authorization");
|
||||
try {
|
||||
ThreadLocalUtil.set(JwtUtil.parseToken(token));
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
response.setStatus(401);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||
ThreadLocalUtil.remove();
|
||||
}
|
||||
}
|
@ -1,104 +0,0 @@
|
||||
package com.sa.unsafeincidents.mapper;
|
||||
|
||||
import com.sa.unsafeincidents.pojo.Report;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@Mapper
|
||||
public interface ReportMapper {
|
||||
|
||||
@Insert("INSERT INTO reports (username, name, selectedTime, selectedDate, license, acftType, fixstage, " +
|
||||
"fixcheck, aarcstatus, phase, wether, lightCondition, carone, cartwo, workPosition, task, plan, ats, atc, tcas, " +
|
||||
"advise, involve, tudentType, acft0Type, task0, plan0, phase0, wether0, lightCondition0, ats0, atc0, tcas0, " +
|
||||
"advise0, inputValue1, inputValue2, inputValue3, inputValue4, inputValue5, inputValue6, inputValue7, " +
|
||||
"inputValue8, inputValue9, inputValue10, inputValue11, inputValue12, inputValue13, inputValue14, inputValue15, " +
|
||||
"inputValue16, inputValue17, inputValue18, inputValue19, inputValue20, inputValue21, inputValue22, " +
|
||||
"inputValue23, inputValue100, inputValue101, inputValue102, reply) " +
|
||||
"VALUES (#{username}, #{name}, #{selectedTime}, #{selectedDate}, #{license}, #{acftType}, #{fixstage}, " +
|
||||
"#{fixcheck}, #{aarcstatus}, #{phase}, #{wether}, #{lightCondition}, #{carone}, #{cartwo}, #{workPosition}, " +
|
||||
"#{task}, #{plan}, #{ats}, #{atc}, #{tcas}, #{advise}, #{involve}, #{tudentType}, #{acft0Type}, #{task0}, " +
|
||||
"#{plan0}, #{phase0}, #{wether0}, #{lightCondition0}, #{ats0}, #{atc0}, #{tcas0}, #{advise0}, " +
|
||||
"#{inputValue1}, #{inputValue2}, #{inputValue3}, #{inputValue4}, #{inputValue5}, #{inputValue6}, " +
|
||||
"#{inputValue7}, #{inputValue8}, #{inputValue9}, #{inputValue10}, #{inputValue11}, #{inputValue12}, " +
|
||||
"#{inputValue13}, #{inputValue14}, #{inputValue15}, #{inputValue16}, #{inputValue17}, #{inputValue18}, " +
|
||||
"#{inputValue19}, #{inputValue20}, #{inputValue21}, #{inputValue22}, #{inputValue23}, #{inputValue100}, " +
|
||||
"#{inputValue101}, #{inputValue102}, #{reply})")
|
||||
void add(Report report);
|
||||
|
||||
@Delete("DELETE FROM reports WHERE id = #{id}")
|
||||
void deleteById(Long id);
|
||||
|
||||
@Select("select * from reports where name=#{name}")
|
||||
ArrayList<Report> findByName(String name);
|
||||
|
||||
@Select("select * from reports")
|
||||
ArrayList<Report> list();
|
||||
|
||||
@Select("select * from reports where id=#{id}")
|
||||
Report findByID(Integer id);
|
||||
|
||||
@Update("UPDATE reports SET " +
|
||||
"name = #{name}, " +
|
||||
"selectedTime = #{selectedTime}, " +
|
||||
"selectedDate = #{selectedDate}, " +
|
||||
"license = #{license}, " +
|
||||
"acftType = #{acftType}, " +
|
||||
"fixstage = #{fixstage}, " +
|
||||
"fixcheck = #{fixcheck}, " +
|
||||
"aarcstatus = #{aarcstatus}, " +
|
||||
"phase = #{phase}, " +
|
||||
"wether = #{wether}, " +
|
||||
"lightCondition = #{lightCondition}, " +
|
||||
"carone = #{carone}, " +
|
||||
"cartwo = #{cartwo}, " +
|
||||
"workPosition = #{workPosition}, " +
|
||||
"task = #{task}, " +
|
||||
"plan = #{plan}, " +
|
||||
"ats = #{ats}, " +
|
||||
"atc = #{atc}, " +
|
||||
"tcas = #{tcas}, " +
|
||||
"advise = #{advise}, " +
|
||||
"involve = #{involve}, " +
|
||||
"tudentType = #{tudentType}, " +
|
||||
"acft0Type = #{acft0Type}, " +
|
||||
"task0 = #{task0}, " +
|
||||
"plan0 = #{plan0}, " +
|
||||
"phase0 = #{phase0}, " +
|
||||
"wether0 = #{wether0}, " +
|
||||
"lightCondition0 = #{lightCondition0}, " +
|
||||
"ats0 = #{ats0}, " +
|
||||
"atc0 = #{atc0}, " +
|
||||
"tcas0 = #{tcas0}, " +
|
||||
"advise0 = #{advise0}, " +
|
||||
"inputValue1 = #{inputValue1}, " +
|
||||
"inputValue2 = #{inputValue2}, " +
|
||||
"inputValue3 = #{inputValue3}, " +
|
||||
"inputValue4 = #{inputValue4}, " +
|
||||
"inputValue5 = #{inputValue5}, " +
|
||||
"inputValue6 = #{inputValue6}, " +
|
||||
"inputValue7 = #{inputValue7}, " +
|
||||
"inputValue8 = #{inputValue8}, " +
|
||||
"inputValue9 = #{inputValue9}, " +
|
||||
"inputValue10 = #{inputValue10}, " +
|
||||
"inputValue11 = #{inputValue11}, " +
|
||||
"inputValue12 = #{inputValue12}, " +
|
||||
"inputValue13 = #{inputValue13}, " +
|
||||
"inputValue14 = #{inputValue14}, " +
|
||||
"inputValue15 = #{inputValue15}, " +
|
||||
"inputValue16 = #{inputValue16}, " +
|
||||
"inputValue17 = #{inputValue17}, " +
|
||||
"inputValue18 = #{inputValue18}, " +
|
||||
"inputValue19 = #{inputValue19}, " +
|
||||
"inputValue20 = #{inputValue20}, " +
|
||||
"inputValue21 = #{inputValue21}, " +
|
||||
"inputValue22 = #{inputValue22}, " +
|
||||
"inputValue23 = #{inputValue23}, " +
|
||||
"inputValue100 = #{inputValue100}, " +
|
||||
"inputValue101 = #{inputValue101}, " +
|
||||
"inputValue102 = #{inputValue102}, " +
|
||||
"reply = #{reply} " +
|
||||
"WHERE id = #{id}")
|
||||
void update(Integer id,Report report);
|
||||
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
package com.sa.unsafeincidents.mapper;
|
||||
|
||||
import com.sa.unsafeincidents.pojo.User;
|
||||
import org.apache.ibatis.annotations.Insert;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
@Mapper
|
||||
public interface UserMapper {
|
||||
|
||||
@Select("select * from users where username = #{username}")
|
||||
User findByUsername(String username);
|
||||
|
||||
|
||||
@Insert("INSERT INTO users (username, password, create_time, update_time) " +
|
||||
"VALUES (#{username}, #{md5Password}, NOW(), NOW())")
|
||||
void register(String username, String md5Password);
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
package com.sa.unsafeincidents.pojo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class Image {
|
||||
private Integer id; //图片id
|
||||
private String image; //图片url
|
||||
private String link; //图片跳转链接
|
||||
private String content; //图片文本
|
||||
@JsonIgnore
|
||||
private String category; //图片类别,图片用在什么地方
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
package com.sa.unsafeincidents.pojo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class Report {
|
||||
private Integer id;
|
||||
private String username;
|
||||
private String name;
|
||||
private String selectedTime;
|
||||
private String selectedDate;
|
||||
private String license;
|
||||
private String acftType;
|
||||
private String fixstage;
|
||||
private String fixcheck;
|
||||
private String aarcstatus;
|
||||
private String phase;
|
||||
private String wether;
|
||||
private String lightCondition;
|
||||
private String carone;
|
||||
private String cartwo;
|
||||
private String workPosition;
|
||||
private String task;
|
||||
private String plan;
|
||||
private String ats;
|
||||
private String atc;
|
||||
private String tcas;
|
||||
private String advise;
|
||||
private String involve;
|
||||
private String tudentType;
|
||||
private String acft0Type;
|
||||
private String task0;
|
||||
private String plan0;
|
||||
private String phase0;
|
||||
private String wether0;
|
||||
private String lightCondition0;
|
||||
private String ats0;
|
||||
private String atc0;
|
||||
private String tcas0;
|
||||
private String advise0;
|
||||
private String inputValue1;
|
||||
private String inputValue2;
|
||||
private String inputValue3;
|
||||
private String inputValue4;
|
||||
private String inputValue5;
|
||||
private String inputValue6;
|
||||
private String inputValue7;
|
||||
private String inputValue8;
|
||||
private String inputValue9;
|
||||
private String inputValue10;
|
||||
private String inputValue11;
|
||||
private String inputValue12;
|
||||
private String inputValue13;
|
||||
private String inputValue14;
|
||||
private String inputValue15;
|
||||
private String inputValue16;
|
||||
private String inputValue17;
|
||||
private String inputValue18;
|
||||
private String inputValue19;
|
||||
private String inputValue20;
|
||||
private String inputValue21;
|
||||
private String inputValue22;
|
||||
private String inputValue23;
|
||||
private String inputValue100;
|
||||
private String inputValue101;
|
||||
private String inputValue102;
|
||||
private String reply;
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
package com.sa.unsafeincidents.pojo;
|
||||
|
||||
|
||||
//统一响应结果
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
public class Result<T> {
|
||||
private Integer code;//业务状态码 0-成功 1-失败
|
||||
private String message;//提示信息
|
||||
private T data;//响应数据
|
||||
|
||||
//快速返回操作成功响应结果(带响应数据)
|
||||
public static <E> Result<E> success(E data) {
|
||||
return new Result<>(0, "操作成功", data);
|
||||
}
|
||||
|
||||
//快速返回操作成功响应结果
|
||||
public static Result success() {
|
||||
return new Result(0, "操作成功", null);
|
||||
}
|
||||
|
||||
public static Result error(String message) {
|
||||
return new Result(1, message, null);
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
package com.sa.unsafeincidents.pojo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class User {
|
||||
private Integer id;//主键ID
|
||||
private String username;//用户名
|
||||
@JsonIgnore
|
||||
private String password;//密码
|
||||
private Integer permissions;
|
||||
private LocalDateTime createTime;//创建时间
|
||||
private LocalDateTime updateTime;//更新时间
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
package com.sa.unsafeincidents.service;
|
||||
|
||||
import com.sa.unsafeincidents.pojo.Report;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public interface ReportService {
|
||||
|
||||
void add(Report form);
|
||||
|
||||
ArrayList<Report> list(String name);
|
||||
ArrayList<Report> list();
|
||||
|
||||
Report findByID(Integer id);
|
||||
|
||||
void reply(Integer id, String reply);
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
package com.sa.unsafeincidents.service;
|
||||
|
||||
import com.sa.unsafeincidents.pojo.User;
|
||||
|
||||
public interface UserService {
|
||||
|
||||
User findByUsername(String username);
|
||||
|
||||
void register(String username, String password);
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
package com.sa.unsafeincidents.service.impl;
|
||||
|
||||
import com.sa.unsafeincidents.mapper.ReportMapper;
|
||||
|
||||
import com.sa.unsafeincidents.pojo.Report;
|
||||
import com.sa.unsafeincidents.service.ReportService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@Service
|
||||
public class ReportServiceImpl implements ReportService {
|
||||
|
||||
@Autowired
|
||||
ReportMapper reportMapper;
|
||||
|
||||
@Override
|
||||
public void add(Report form) {
|
||||
reportMapper.add(form);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<Report> list(String name){
|
||||
return reportMapper.findByName(name);
|
||||
};
|
||||
|
||||
@Override
|
||||
public ArrayList<Report> list(){
|
||||
return reportMapper.list();
|
||||
};
|
||||
|
||||
@Override
|
||||
public Report findByID(Integer id) {
|
||||
return reportMapper.findByID(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reply(Integer id,String reply) {
|
||||
Report report = reportMapper.findByID(id);
|
||||
report.setReply(reply);
|
||||
reportMapper.update(id, report);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
package com.sa.unsafeincidents.service.impl;
|
||||
|
||||
import com.sa.unsafeincidents.mapper.UserMapper;
|
||||
import com.sa.unsafeincidents.pojo.User;
|
||||
import com.sa.unsafeincidents.service.UserService;
|
||||
import com.sa.unsafeincidents.utils.Md5Util;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class UserServiceImpl implements UserService {
|
||||
|
||||
@Autowired
|
||||
UserMapper userMapper;
|
||||
|
||||
@Override
|
||||
public User findByUsername(String username) {
|
||||
return userMapper.findByUsername(username);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(String username, String password) {
|
||||
String md5Password = Md5Util.getMD5String(password);
|
||||
|
||||
userMapper.register(username,md5Password);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
package com.sa.unsafeincidents.utils;
|
||||
|
||||
import com.auth0.jwt.JWT;
|
||||
import com.auth0.jwt.algorithms.Algorithm;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
public class JwtUtil {
|
||||
|
||||
private static final String KEY = "sa";
|
||||
|
||||
//接收业务数据,生成token并返回
|
||||
public static String genToken(Map<String, Object> claims) {
|
||||
return JWT.create()
|
||||
.withClaim("claims", claims)
|
||||
.withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12))
|
||||
.sign(Algorithm.HMAC256(KEY));
|
||||
}
|
||||
|
||||
//接收token,验证token,并返回业务数据
|
||||
public static Map<String, Object> parseToken(String token) {
|
||||
return JWT.require(Algorithm.HMAC256(KEY))
|
||||
.build()
|
||||
.verify(token)
|
||||
.getClaim("claims")
|
||||
.asMap();
|
||||
}
|
||||
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package com.sa.unsafeincidents.utils;
|
||||
|
||||
/**
|
||||
* ThreadLocal 工具类
|
||||
*/
|
||||
@SuppressWarnings("all")
|
||||
public class ThreadLocalUtil {
|
||||
//提供ThreadLocal对象,
|
||||
private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();
|
||||
|
||||
//根据键获取值
|
||||
public static <T> T get(){
|
||||
return (T) THREAD_LOCAL.get();
|
||||
}
|
||||
|
||||
//存储键值对
|
||||
public static void set(Object value){
|
||||
THREAD_LOCAL.set(value);
|
||||
}
|
||||
|
||||
|
||||
//清除ThreadLocal 防止内存泄漏
|
||||
public static void remove(){
|
||||
THREAD_LOCAL.remove();
|
||||
}
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
server:
|
||||
port: 8080
|
||||
spring:
|
||||
datasource:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://localhost:3306/unsafeincidents
|
||||
username: root
|
||||
password: 200408
|
||||
mybatis:
|
||||
configuration:
|
||||
map-underscore-to-camel-case: true
|
@ -1,6 +0,0 @@
|
||||
<html>
|
||||
<body>
|
||||
<h1>hello word!!!</h1>
|
||||
<p>this is a html page</p>
|
||||
</body>
|
||||
</html>
|
@ -1,13 +0,0 @@
|
||||
package com.sa.unsafeincidents;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
@SpringBootTest
|
||||
class UnsafeincidentsApplicationTests {
|
||||
|
||||
@Test
|
||||
void contextLoads() {
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue