From 4c717f56fb7a8b97c8ceedd3e900a92143e7cf0f Mon Sep 17 00:00:00 2001 From: hcy Date: Sat, 23 Nov 2024 18:00:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=B3=E7=8E=AE=E4=BD=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 33 -- AircraftMaintenance/AircraftMaintenance.js | 310 ++++++++++++++ AircraftMaintenance/AircraftMaintenance.json | 3 + AircraftMaintenance/AircraftMaintenance.wxml | 188 ++++++++ AircraftMaintenance/AircraftMaintenance.wxss | 145 +++++++ AirportGround/AirportGround.js | 320 ++++++++++++++ AirportGround/AirportGround.json | 3 + AirportGround/AirportGround.wxml | 206 +++++++++ AirportGround/AirportGround.wxss | 139 ++++++ Fast/Fast.js | 188 ++++++++ Fast/Fast.json | 3 + Fast/Fast.wxml | 81 ++++ Fast/Fast.wxss | 141 ++++++ FlightCrew/FlightCrew.js | 404 ++++++++++++++++++ FlightCrew/FlightCrew.json | 4 + FlightCrew/FlightCrew.wxml | 292 +++++++++++++ FlightCrew/FlightCrew.wxss | 144 +++++++ FlightCrewDetails/FlightCrewDetails.js | 25 ++ FlightCrewDetails/FlightCrewDetails.json | 3 + FlightCrewDetails/FlightCrewDetails.wxml | 2 + FlightCrewDetails/FlightCrewDetails.wxss | 9 + components/navigation-bar/navigation-bar.js | 105 +++++ components/navigation-bar/navigation-bar.json | 5 + components/navigation-bar/navigation-bar.wxml | 64 +++ components/navigation-bar/navigation-bar.wxss | 96 +++++ pom.xml | 71 --- sql.txt | 61 --- .../UnsafeincidentsApplication.java | 15 - .../sa/unsafeincidents/config/webconfig.java | 20 - .../controller/ReportController.java | 53 --- .../controller/UserController.java | 60 --- .../exception/GlobalExceptionHandle.java | 18 - .../interceptors/LoginInterceptor.java | 31 -- .../unsafeincidents/mapper/ReportMapper.java | 104 ----- .../sa/unsafeincidents/mapper/UserMapper.java | 18 - .../com/sa/unsafeincidents/pojo/Image.java | 14 - .../com/sa/unsafeincidents/pojo/Report.java | 68 --- .../com/sa/unsafeincidents/pojo/Result.java | 31 -- .../com/sa/unsafeincidents/pojo/User.java | 17 - .../service/ReportService.java | 17 - .../unsafeincidents/service/UserService.java | 10 - .../service/impl/ReportServiceImpl.java | 46 -- .../service/impl/UserServiceImpl.java | 29 -- .../com/sa/unsafeincidents/utils/JwtUtil.java | 30 -- .../com/sa/unsafeincidents/utils/Md5Util.java | 73 ---- .../utils/ThreadLocalUtil.java | 26 -- src/main/resources/application.yml | 11 - src/main/resources/static/index.html | 6 - .../UnsafeincidentsApplicationTests.java | 13 - 49 files changed, 2880 insertions(+), 875 deletions(-) delete mode 100644 .gitignore create mode 100644 AircraftMaintenance/AircraftMaintenance.js create mode 100644 AircraftMaintenance/AircraftMaintenance.json create mode 100644 AircraftMaintenance/AircraftMaintenance.wxml create mode 100644 AircraftMaintenance/AircraftMaintenance.wxss create mode 100644 AirportGround/AirportGround.js create mode 100644 AirportGround/AirportGround.json create mode 100644 AirportGround/AirportGround.wxml create mode 100644 AirportGround/AirportGround.wxss create mode 100644 Fast/Fast.js create mode 100644 Fast/Fast.json create mode 100644 Fast/Fast.wxml create mode 100644 Fast/Fast.wxss create mode 100644 FlightCrew/FlightCrew.js create mode 100644 FlightCrew/FlightCrew.json create mode 100644 FlightCrew/FlightCrew.wxml create mode 100644 FlightCrew/FlightCrew.wxss create mode 100644 FlightCrewDetails/FlightCrewDetails.js create mode 100644 FlightCrewDetails/FlightCrewDetails.json create mode 100644 FlightCrewDetails/FlightCrewDetails.wxml create mode 100644 FlightCrewDetails/FlightCrewDetails.wxss create mode 100644 components/navigation-bar/navigation-bar.js create mode 100644 components/navigation-bar/navigation-bar.json create mode 100644 components/navigation-bar/navigation-bar.wxml create mode 100644 components/navigation-bar/navigation-bar.wxss delete mode 100644 pom.xml delete mode 100644 sql.txt delete mode 100644 src/main/java/com/sa/unsafeincidents/UnsafeincidentsApplication.java delete mode 100644 src/main/java/com/sa/unsafeincidents/config/webconfig.java delete mode 100644 src/main/java/com/sa/unsafeincidents/controller/ReportController.java delete mode 100644 src/main/java/com/sa/unsafeincidents/controller/UserController.java delete mode 100644 src/main/java/com/sa/unsafeincidents/exception/GlobalExceptionHandle.java delete mode 100644 src/main/java/com/sa/unsafeincidents/interceptors/LoginInterceptor.java delete mode 100644 src/main/java/com/sa/unsafeincidents/mapper/ReportMapper.java delete mode 100644 src/main/java/com/sa/unsafeincidents/mapper/UserMapper.java delete mode 100644 src/main/java/com/sa/unsafeincidents/pojo/Image.java delete mode 100644 src/main/java/com/sa/unsafeincidents/pojo/Report.java delete mode 100644 src/main/java/com/sa/unsafeincidents/pojo/Result.java delete mode 100644 src/main/java/com/sa/unsafeincidents/pojo/User.java delete mode 100644 src/main/java/com/sa/unsafeincidents/service/ReportService.java delete mode 100644 src/main/java/com/sa/unsafeincidents/service/UserService.java delete mode 100644 src/main/java/com/sa/unsafeincidents/service/impl/ReportServiceImpl.java delete mode 100644 src/main/java/com/sa/unsafeincidents/service/impl/UserServiceImpl.java delete mode 100644 src/main/java/com/sa/unsafeincidents/utils/JwtUtil.java delete mode 100644 src/main/java/com/sa/unsafeincidents/utils/Md5Util.java delete mode 100644 src/main/java/com/sa/unsafeincidents/utils/ThreadLocalUtil.java delete mode 100644 src/main/resources/application.yml delete mode 100644 src/main/resources/static/index.html delete mode 100644 src/test/java/com/sa/unsafeincidents/UnsafeincidentsApplicationTests.java diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 549e00a..0000000 --- a/.gitignore +++ /dev/null @@ -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/ diff --git a/AircraftMaintenance/AircraftMaintenance.js b/AircraftMaintenance/AircraftMaintenance.js new file mode 100644 index 0000000..d0da2da --- /dev/null +++ b/AircraftMaintenance/AircraftMaintenance.js @@ -0,0 +1,310 @@ +// pages/AircraftMaintenance/AircraftMaintenance.js +Page({ + data: { + name:'AircraftMaintenance', + selectedTime: '--时--分', + selectedDate: '--年--月--日', + selectedIndex1: 0, + selectedIndex4: 0, + selectedIndex5: 0, + selectedIndex17: 0, + selectedIndex18: 0, + selectedIndex19: 0, + inputValue1: '', + inputValue2: '', + inputValue3: '', + inputValue15: '', + inputValue16: '', + inputValue17: '', + inputValue18: '', + inputValue19: '', + 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'], + License:['请选择','航空器维修人员执照','航空器部件维修人员执照','航空器维修管理人员执照','维护检验执照','修理检验执照','其它'], + ACFT:['请选择','飞机','直升机','滑翔机','其它'], + FixT:['请选择','A检','B检','C检','D检','其它'], + FixH:['请选择','航前检查','过站检查','航后检查','其它'], + AARC:['请选择','飞机放行','飞机记录完整','不能放行','未知'], + }, + //时间选择 + 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 + }); + }, + //航空器种类 + onACFT: function(event) { + this.setData({ + selectedIndex5: event.detail.value + }); + }, + //事件发生阶段 + onFixT: function(event) { + this.setData({ + selectedIndex17: event.detail.value + }); + }, + onFixH: function(event) { + this.setData({ + selectedIndex18: event.detail.value + }); + }, + //涉及的系统部件 + onInput17: function(event) { + this.setData({ + inputValue17: event.detail.value + }); + }, + onInput18: function(event) { + this.setData({ + inputValue18: event.detail.value + }); + }, + onInput19: function(event) { + this.setData({ + inputValue19: event.detail.value + }); + }, + //航空器适航情况 + onAARC: function(event) { + this.setData({ + selectedIndex19: 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, + selectedIndex4: 0, + selectedIndex5: 0, + selectedIndex17: 0, + selectedIndex18: 0, + selectedIndex19: 0, + inputValue1: '', + inputValue2: '', + inputValue3: '', + inputValue15: '', + inputValue16: '', + inputValue17: '', + inputValue18: '', + inputValue19: '', + 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 fixTText = data.FixT[data.selectedIndex17]; // 获取事件阶段的实际文本 + const fixHText = data.FixH[data.selectedIndex18]; // 获取维护检查的实际文本 + const aarcText = data.AARC[data.selectedIndex19]; // 获取适航情况的实际文本 + + 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, // 提交航空器类型的实际文本 + fixStage: fixTText, // 提交事件阶段的实际文本 + fixCheck: fixHText, // 提交维护检查的实际文本 + aarcStatus: aarcText, // 提交适航情况的实际文本 + inputValue1: data.inputValue1, + inputValue2: data.inputValue2, + inputValue3: data.inputValue3, + inputValue15: data.inputValue15, + inputValue16: data.inputValue16, + inputValue17: data.inputValue17, + inputValue18: data.inputValue18, + inputValue19: data.inputValue19, + 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() { + } +}) \ No newline at end of file diff --git a/AircraftMaintenance/AircraftMaintenance.json b/AircraftMaintenance/AircraftMaintenance.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/AircraftMaintenance/AircraftMaintenance.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/AircraftMaintenance/AircraftMaintenance.wxml b/AircraftMaintenance/AircraftMaintenance.wxml new file mode 100644 index 0000000..004a88a --- /dev/null +++ b/AircraftMaintenance/AircraftMaintenance.wxml @@ -0,0 +1,188 @@ + + + + + + 机务人员使用 (Aircraft maintenance crew) + + + + 欢迎您为民航不安全事件管理系统提供事件信息,请您仔细填写适用条目: + (红色字体为必填项) + + + + 事件发生时的当地时间: + + 时间: + + + {{selectedDate}} + + + + + {{ selectedTime }} + + + + 时区: + + + {{ timezones[selectedIndex1] }} + + + + + + 事件发生前您的工作时间: + + 过去一个月的工作天数: + + + + + + 过去一星期的工作天数: + + + + + + 过去24小时的工作时长: + + + 小时 + + + + + + 您的执照类型: + + + {{ License[selectedIndex4] }} + + + + + + + 您的工作经历是: + + 工作经验: + + + + + + 在此岗位工作了: + + + + + + + + + 事件航空器种类: + + + {{ ACFT[selectedIndex5] }} + + + + + + + + 事件发生阶段: + + + 定期维护: + + + {{ FixT[selectedIndex17] }} + + + + + 航线维护: + + + {{ FixH[selectedIndex18] }} + + + + + + + 涉及的部件/系统/子系统: + + + + + / + + + + / + + + + + + + + 航空器适航情况: + + + {{ AARC[selectedIndex19] }} + + + + + + + 请您尽可能完整地描述事件经过:(如事件过程、原因、建议等) + + + + + + + + 民航不安全事件管理系统欢迎全行业所有人员做安全“吹哨人”!感谢您积极主动参与改善航空安全行动和自愿报告安全风险隐患信息!我们欢迎您本着诚信原则报送有关安全信息,同时建议您留一个有效的联系方式,以方便该信息得到有效处理、应用、反馈和奖励。我们承诺对每一位员工、每一家单位的报告信息严格保密,谢谢! + + + + + + + 姓名: + + + + + + + + 电话: + + + + + + + + 邮箱: + + + + + + + + + + diff --git a/AircraftMaintenance/AircraftMaintenance.wxss b/AircraftMaintenance/AircraftMaintenance.wxss new file mode 100644 index 0000000..ffc1450 --- /dev/null +++ b/AircraftMaintenance/AircraftMaintenance.wxss @@ -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; +} + diff --git a/AirportGround/AirportGround.js b/AirportGround/AirportGround.js new file mode 100644 index 0000000..6ae961b --- /dev/null +++ b/AirportGround/AirportGround.js @@ -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() { + } +}) \ No newline at end of file diff --git a/AirportGround/AirportGround.json b/AirportGround/AirportGround.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/AirportGround/AirportGround.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/AirportGround/AirportGround.wxml b/AirportGround/AirportGround.wxml new file mode 100644 index 0000000..ebf3ee6 --- /dev/null +++ b/AirportGround/AirportGround.wxml @@ -0,0 +1,206 @@ + + + + + + 机场地面人员使用 (Airport ground staff) + + + + 欢迎您为民航不安全事件管理系统提供事件信息,请您仔细填写适用条目: + (红色字体为必填项) + + + + 事件发生时的当地时间: + + 时间: + + + {{selectedDate}} + + + + + {{ selectedTime }} + + + + 时区: + + + {{ timezones[selectedIndex1] }} + + + + + + 事件发生前您的工作时间: + + 过去一个月的工作天数: + + + + + + 过去一星期的工作天数: + + + + + + 过去24小时的工作时长: + + + 小时 + + + + + + 您的执照类型: + + + {{ License[selectedIndex4] }} + + + + + + + 您的工作经历是: + + 工作经验: + + + + + + 在此岗位工作了: + + + + + + + + + 事件发生时您的岗位: + + + {{ position[selectedIndex2] }} + + + + + + + + 事件航空器种类: + + + {{ ACFT[selectedIndex5] }} + + + + + + + + 天气条件: + + + {{ weather[selectedIndex10] }} + + + + + + + + 光线条件和能见度为: + + + {{ lv[selectedIndex11] }} + + + + + + + + 事件发生时的阶段: + + + {{ phase[selectedIndex9] }} + + + + + + + + 涉及车辆(车辆一): + + + {{ carone[selectedIndex20] }} + + + + + + + + 涉及车辆(车辆二): + + + {{ cartwo[selectedIndex21] }} + + + + + + + 请您尽可能完整地描述事件经过:(如事件过程、原因、建议等) + + + + + + + + 民航不安全事件管理系统欢迎全行业所有人员做安全“吹哨人”!感谢您积极主动参与改善航空安全行动和自愿报告安全风险隐患信息!我们欢迎您本着诚信原则报送有关安全信息,同时建议您留一个有效的联系方式,以方便该信息得到有效处理、应用、反馈和奖励。我们承诺对每一位员工、每一家单位的报告信息严格保密,谢谢! + + + + + + + 姓名: + + + + + + + + 电话: + + + + + + + + 邮箱: + + + + + + + + + + + diff --git a/AirportGround/AirportGround.wxss b/AirportGround/AirportGround.wxss new file mode 100644 index 0000000..a5db39a --- /dev/null +++ b/AirportGround/AirportGround.wxss @@ -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; +} + diff --git a/Fast/Fast.js b/Fast/Fast.js new file mode 100644 index 0000000..fed060f --- /dev/null +++ b/Fast/Fast.js @@ -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() { + } +}) \ No newline at end of file diff --git a/Fast/Fast.json b/Fast/Fast.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/Fast/Fast.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/Fast/Fast.wxml b/Fast/Fast.wxml new file mode 100644 index 0000000..bfe26a2 --- /dev/null +++ b/Fast/Fast.wxml @@ -0,0 +1,81 @@ + + + + + + 快速上报 (Fast) + + + + 欢迎您为民航不安全事件管理系统提供事件信息,请您仔细填写适用条目: + (红色字体为必填项) + + + + 事件发生时的当地时间: + + 时间: + + + {{selectedDate}} + + + + + {{ selectedTime }} + + + + 时区: + + + {{ timezones[selectedIndex1] }} + + + + + + 请您尽可能完整地描述事件经过:(如事件过程、原因、建议等) + + + + + + + + 民航不安全事件管理系统欢迎全行业所有人员做安全“吹哨人”!感谢您积极主动参与改善航空安全行动和自愿报告安全风险隐患信息!我们欢迎您本着诚信原则报送有关安全信息,同时建议您留一个有效的联系方式,以方便该信息得到有效处理、应用、反馈和奖励。我们承诺对每一位员工、每一家单位的报告信息严格保密,谢谢! + + + + + + + 姓名: + + + + + + + + 电话: + + + + + + + + 邮箱: + + + + + + + + + + + + diff --git a/Fast/Fast.wxss b/Fast/Fast.wxss new file mode 100644 index 0000000..7a8fa30 --- /dev/null +++ b/Fast/Fast.wxss @@ -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; +} + diff --git a/FlightCrew/FlightCrew.js b/FlightCrew/FlightCrew.js new file mode 100644 index 0000000..330558f --- /dev/null +++ b/FlightCrew/FlightCrew.js @@ -0,0 +1,404 @@ +// pages/FlightCrew/FlightCrew.js +Page({ +  data: { +    name:'FlightCrew', +    selectedTime: '--时--分', +    selectedDate: '--年--月--日', +    selectedIndex1: 0,  +    selectedIndex2: 0,  +    selectedIndex3: 0,  +    selectedIndex4: 0,  +    selectedIndex5: 0, +    selectedIndex6: 0, +    selectedIndex7: 0,  +    selectedIndex8: 0, +    selectedIndex9: 0, +    selectedIndex10: 0, +    selectedIndex11: 0, +    selectedIndex12: 0, +    selectedIndex13: 0, +    selectedIndex14: 0, +    selectedIndex15: 0, +    inputValue1: '', +    inputValue2: '', +    inputValue3: '', +    inputValue4: '', +    inputValue5: '', +    inputValue6: '', +    inputValue7: '', +    inputValue8: '', +    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'], +    workposition:['请选择','机长','副驾驶','责任机长','教员','学员','其他'], +    controll: ['请选择','是','否'], +    License:['请选择','私用驾驶员执照','商用驾驶员执照','航线运输驾驶员执照','临时执照','无','其它'], +    ACFT:['请选择','飞机','直升机','滑翔机','其它'], +    company:['请选择','运输航空公司','通用航空公司','公务航空公司','飞行训练机构','其它'], +    task:['请选择','客运','货运','训练','检查','调机','通用飞行','其它'], +    plan:['请选择','目视飞行计划','仪表飞行计划','其它'], +    phase:['请选择','地面/滑行','起飞','爬升','巡航/作业','下降','进近','复飞','着陆','其它'], +    weather:['请选择','IMC','VMC','雷暴','风切变','紊流','结冰','雨','雪','雾','多云','其它'], +    lv:['请选择','黎明','昼间','黄昏/曙暮光','夜间/月光','夜间/黑暗','未知'], +    ATS:['请选择','地面','塔台','进近','区调','其它'], +    ATC:['请选择','雷达管制','程序管制','雷达监视下的程序管制','其它'], +    TCAS:['请选择','是','否'], +    Advise:['请选择','是','否'], +  }, +  //时间选择 +  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 +    }); +  }, +  //岗位选择 +  onworkposition: function (event) { +    this.setData({ +      selectedIndex2: event.detail.value +    }); +  }, +  //控制器选择 +  oncontroll: function(event) { +    this.setData({ +      selectedIndex3: event.detail.value +    }); +  }, +  //执照选择 +  onLicense: function(event) { +    this.setData({ +      selectedIndex4: event.detail.value +    }); +  }, +  //工作经验 +  onInput4: function(event) { +    this.setData({ +      inputValue4: event.detail.value +    }); +  }, +  onInput5: function(event) { +    this.setData({ +      inputValue5: event.detail.value +    }); +  }, +  //航空器种类 +  onACFT: function(event) { +    this.setData({ +      selectedIndex5: event.detail.value +    }); +  }, +  //工作单位种类 +  oncompany: function(event) { +    this.setData({ +      selectedIndex6: event.detail.value +    }); +  }, +  //任务 +  ontask: function(event) { +    this.setData({ +      selectedIndex7: event.detail.value +    }); +  }, +  //计划 +  onplan: function(event) { +    this.setData({ +      selectedIndex8: event.detail.value +    }); +  }, +  //飞行阶段 +  onphase: function(event) { +    this.setData({ +      selectedIndex9: event.detail.value +    }); +  }, +  //飞行高度 +  onInput6: function(event) { +    this.setData({ +      inputValue6: event.detail.value +    }); +  }, +  //天气 +  onweather: function(event) { +    this.setData({ +      selectedIndex10: event.detail.value +    }); +  }, +  //光线条件和能见度 +  onlv: function(event) { +    this.setData({ +      selectedIndex11: event.detail.value +    }); +  }, +  onInput7: function(event) { +    this.setData({ +      inputValue7: event.detail.value +    }); +  }, +  onInput8: function(event) { +    this.setData({ +      inputValue8: event.detail.value +    }); +  }, +  //ATS +  onATS: function (event) { +    this.setData({ +      selectedIndex12: event.detail.value +    }); +  }, +  //ATC +  onATC: function (event) { +    this.setData({ +      selectedIndex13: event.detail.value +    }); +  }, +  //TCAS +  onTCAS: function (event) { +    this.setData({ +      selectedIndex14: event.detail.value +    }); +  }, +  //Advise +  onAdvise: function (event) { +    this.setData({ +      selectedIndex15: 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 +    }); +  }, +  //事件经过 +  onInput20: function(event) { +    this.setData({ +      inputValue20: event.detail.value +    }); +  }, +  //提交与重写 +  onReset() { +    this.setData({ +      selectedTime: '--时--分', +      selectedDate: '--年--月--日', +      selectedIndex1: 0, +      selectedIndex2: 0, +      selectedIndex3: 0, +      selectedIndex4: 0, +      selectedIndex5: 0, +      selectedIndex6: 0, +      selectedIndex7: 0, +      selectedIndex8: 0, +      selectedIndex9: 0, +      selectedIndex10: 0, +      selectedIndex11: 0, +      selectedIndex12: 0, +      selectedIndex13: 0, +      selectedIndex14: 0, +      selectedIndex15: 0, +      inputValue1: '', +      inputValue2: '', +      inputValue3: '', +      inputValue4: '', +      inputValue5: '', +      inputValue6: '', +      inputValue7: '', +      inputValue8: '', +      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 workPositionText = data.workposition[data.selectedIndex2]; + const licenseText = data.License[data.selectedIndex4]; + const acftText = data.ACFT[data.selectedIndex5]; + const taskText = data.task[data.selectedIndex7]; + const phaseText = data.phase[data.selectedIndex9]; + const weatherText = data.weather[data.selectedIndex10]; + const lvText = data.lv[data.selectedIndex11]; + const ats = data.ATS[data.selectedIndex12]; + const atc = data.ATC[data.selectedIndex13]; + const tcas = data.TCAS[data.selectedIndex14]; + const advise = data.Advise[data.selectedIndex15]; + + wx.request({ + url: 'http://192.168.144.1:8080/report/add', + method: 'POST', + header: { + 'Authorization': `${token}`, + 'content-type': 'application/json' + }, + data: { + selectedTime: data.selectedTime, + selectedDate: data.selectedDate, + timezone: timezoneText, + workPosition: workPositionText, + license: licenseText, + acft: acftText, + task: taskText, + phase: phaseText, + weather: weatherText, + lv: lvText, + ats: ats, + atc: atc, + tcas: tcas, + advise: advise, + inputValue1: data.inputValue1, + inputValue2: data.inputValue2, + inputValue3: data.inputValue3, + inputValue4: data.inputValue4, + inputValue5: data.inputValue5, + inputValue6: data.inputValue6, + inputValue7: data.inputValue7, + inputValue8: data.inputValue8, + 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() { +  } +}) +   diff --git a/FlightCrew/FlightCrew.json b/FlightCrew/FlightCrew.json new file mode 100644 index 0000000..c77dc7a --- /dev/null +++ b/FlightCrew/FlightCrew.json @@ -0,0 +1,4 @@ +{ + "usingComponents": { + } +} diff --git a/FlightCrew/FlightCrew.wxml b/FlightCrew/FlightCrew.wxml new file mode 100644 index 0000000..34ae9f8 --- /dev/null +++ b/FlightCrew/FlightCrew.wxml @@ -0,0 +1,292 @@ + + + + + + 飞行事件使用 (Flight crew report) + + + + 欢迎您为民航不安全事件管理系统提供事件信息,请您仔细填写适用条目: + (红色字体为必填项) + + + + 事件发生时的当地时间: + + 时间: + + + {{selectedDate}} + + + + + {{ selectedTime }} + + + + 时区: + + + {{ timezones[selectedIndex1] }} + + + + + + 事件发生前您的工作时间: + + 过去一个月的工作天数: + + + + + + 过去一星期的工作天数: + + + + + + 过去24小时的工作时长: + + + 小时 + + + + + + 事件发生时您的岗位: + + + {{ workposition[selectedIndex2] }} + + + + + + + + 当时您是否控制航空器: + + + {{ controll[selectedIndex3] }} + + + + + + + + 您的执照类型: + + + {{ License[selectedIndex4] }} + + + + + + + 您的驾驶经验: + + 飞行小时数: + + + 小时 + + + 本机型小时: + + + 小时 + + + + + + 事件航空器种类: + + + {{ ACFT[selectedIndex5] }} + + + + + + + + 您的工作单位的种类: + + + {{ company[selectedIndex6] }} + + + + + + + + 本次飞行任务: + + + {{ task[selectedIndex7] }} + + + + + + + + 本次飞行计划: + + + {{ plan[selectedIndex8] }} + + + + + + + + 事件发生时的飞行阶段: + + + {{ phase[selectedIndex9] }} + + + + + + + + 飞行高度为: + + + 千米 + + + + + + 天气条件: + + + {{ weather[selectedIndex10] }} + + + + + + + + 光线条件和能见度为: + + + {{ lv[selectedIndex11] }} + + + + + 云底高: + + + + + + 跑道视程: + + + + + + + + + 事件发生时的空中交通管制单位为: + + + {{ ATS[selectedIndex12] }} + + + + + + + + 管制类型: + + + {{ ATC[selectedIndex13] }} + + + + + + + + 若为两机冲突,当时TCAS是否提出告警: + + + {{ TCAS[selectedIndex14] }} + + + + + + + + 是否提出建议: + + + {{ weather[selectedIndex15] }} + + + + + + + 请您尽可能完整地描述事件经过:(如事件过程、原因、建议等) + + + + + + + + 民航不安全事件管理系统欢迎全行业所有人员做安全“吹哨人”!感谢您积极主动参与改善航空安全行动和自愿报告安全风险隐患信息!我们欢迎您本着诚信原则报送有关安全信息,同时建议您留一个有效的联系方式,以方便该信息得到有效处理、应用、反馈和奖励。我们承诺对每一位员工、每一家单位的报告信息严格保密,谢谢! + + + + + + + 姓名: + + + + + + + + 电话: + + + + + + + + 邮箱: + + + + + + + + + + diff --git a/FlightCrew/FlightCrew.wxss b/FlightCrew/FlightCrew.wxss new file mode 100644 index 0000000..7fbe498 --- /dev/null +++ b/FlightCrew/FlightCrew.wxss @@ -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; +} \ No newline at end of file diff --git a/FlightCrewDetails/FlightCrewDetails.js b/FlightCrewDetails/FlightCrewDetails.js new file mode 100644 index 0000000..a80010e --- /dev/null +++ b/FlightCrewDetails/FlightCrewDetails.js @@ -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 页的路径 + }); + } +}); + diff --git a/FlightCrewDetails/FlightCrewDetails.json b/FlightCrewDetails/FlightCrewDetails.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/FlightCrewDetails/FlightCrewDetails.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/FlightCrewDetails/FlightCrewDetails.wxml b/FlightCrewDetails/FlightCrewDetails.wxml new file mode 100644 index 0000000..1d3d7fc --- /dev/null +++ b/FlightCrewDetails/FlightCrewDetails.wxml @@ -0,0 +1,2 @@ +智能分析: {{agentReply}} + \ No newline at end of file diff --git a/FlightCrewDetails/FlightCrewDetails.wxss b/FlightCrewDetails/FlightCrewDetails.wxss new file mode 100644 index 0000000..cce8dcb --- /dev/null +++ b/FlightCrewDetails/FlightCrewDetails.wxss @@ -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; +} diff --git a/components/navigation-bar/navigation-bar.js b/components/navigation-bar/navigation-bar.js new file mode 100644 index 0000000..e93f90f --- /dev/null +++ b/components/navigation-bar/navigation-bar.js @@ -0,0 +1,105 @@ +Component({ + options: { + multipleSlots: true // 在组件定义时的选项中启用多slot支持 + }, + /** + * 组件的属性列表 + */ + properties: { + extClass: { + type: String, + value: '' + }, + title: { + type: String, + value: '' + }, + background: { + type: String, + value: '' + }, + color: { + type: String, + value: '' + }, + back: { + type: Boolean, + value: true + }, + loading: { + type: Boolean, + value: false + }, + homeButton: { + type: Boolean, + value: false, + }, + animated: { + // 显示隐藏的时候opacity动画效果 + type: Boolean, + value: true + }, + show: { + // 显示隐藏导航,隐藏的时候navigation-bar的高度占位还在 + type: Boolean, + value: true, + observer: '_showChange' + }, + // back为true的时候,返回的页面深度 + delta: { + type: Number, + value: 1 + }, + }, + /** + * 组件的初始数据 + */ + data: { + displayStyle: '' + }, + lifetimes: { + attached() { + const rect = wx.getMenuButtonBoundingClientRect() + wx.getSystemInfo({ + success: (res) => { + const isAndroid = res.platform === 'android' + const isDevtools = res.platform === 'devtools' + this.setData({ + ios: !isAndroid, + innerPaddingRight: `padding-right: ${res.windowWidth - rect.left}px`, + leftWidth: `width: ${res.windowWidth - rect.left }px`, + safeAreaTop: isDevtools || isAndroid ? `height: calc(var(--height) + ${res.safeArea.top}px); padding-top: ${res.safeArea.top}px` : `` + }) + } + }) + }, + }, + /** + * 组件的方法列表 + */ + methods: { + _showChange(show) { + const animated = this.data.animated + let displayStyle = '' + if (animated) { + displayStyle = `opacity: ${ + show ? '1' : '0' + };transition:opacity 0.5s;` + } else { + displayStyle = `display: ${show ? '' : 'none'}` + } + this.setData({ + displayStyle + }) + }, + back() { + const data = this.data + if (data.delta) { + wx.navigateBack({ + delta: data.delta + }) + } + this.triggerEvent('back', { delta: data.delta }, {}) + } + }, +}) diff --git a/components/navigation-bar/navigation-bar.json b/components/navigation-bar/navigation-bar.json new file mode 100644 index 0000000..4a20f17 --- /dev/null +++ b/components/navigation-bar/navigation-bar.json @@ -0,0 +1,5 @@ +{ + "component": true, + "styleIsolation": "apply-shared", + "usingComponents": {} +} \ No newline at end of file diff --git a/components/navigation-bar/navigation-bar.wxml b/components/navigation-bar/navigation-bar.wxml new file mode 100644 index 0000000..be9a663 --- /dev/null +++ b/components/navigation-bar/navigation-bar.wxml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{title}} + + + + + + + + + + + + diff --git a/components/navigation-bar/navigation-bar.wxss b/components/navigation-bar/navigation-bar.wxss new file mode 100644 index 0000000..8bd379e --- /dev/null +++ b/components/navigation-bar/navigation-bar.wxss @@ -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); + } +} diff --git a/pom.xml b/pom.xml deleted file mode 100644 index 8bf2ac0..0000000 --- a/pom.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.2.3 - - - com.sa - bigevent - 0.0.1-SNAPSHOT - bigevent - bigevent - - 17 - - - - org.springframework.boot - spring-boot-starter-web - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 3.0.3 - - - - com.mysql - mysql-connector-j - runtime - - - org.springframework.boot - spring-boot-starter-test - test - - - org.mybatis.spring.boot - mybatis-spring-boot-starter-test - 3.0.3 - test - - - org.projectlombok - lombok - annotationProcessor - - - org.springframework.boot - spring-boot-starter-validation - - - com.auth0 - java-jwt - 4.4.0 - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/sql.txt b/sql.txt deleted file mode 100644 index e70b73d..0000000 --- a/sql.txt +++ /dev/null @@ -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 -); \ No newline at end of file diff --git a/src/main/java/com/sa/unsafeincidents/UnsafeincidentsApplication.java b/src/main/java/com/sa/unsafeincidents/UnsafeincidentsApplication.java deleted file mode 100644 index 90965b6..0000000 --- a/src/main/java/com/sa/unsafeincidents/UnsafeincidentsApplication.java +++ /dev/null @@ -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); - - } - -} diff --git a/src/main/java/com/sa/unsafeincidents/config/webconfig.java b/src/main/java/com/sa/unsafeincidents/config/webconfig.java deleted file mode 100644 index f03e229..0000000 --- a/src/main/java/com/sa/unsafeincidents/config/webconfig.java +++ /dev/null @@ -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"); - } -} diff --git a/src/main/java/com/sa/unsafeincidents/controller/ReportController.java b/src/main/java/com/sa/unsafeincidents/controller/ReportController.java deleted file mode 100644 index 518ba93..0000000 --- a/src/main/java/com/sa/unsafeincidents/controller/ReportController.java +++ /dev/null @@ -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 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() { - Map 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 reports = reportService.list(username); - return Result.success(reports); - } - } -} diff --git a/src/main/java/com/sa/unsafeincidents/controller/UserController.java b/src/main/java/com/sa/unsafeincidents/controller/UserController.java deleted file mode 100644 index 9ef5212..0000000 --- a/src/main/java/com/sa/unsafeincidents/controller/UserController.java +++ /dev/null @@ -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 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 claims = new HashMap<>(); - claims.put("id",loginuser.getId()); - claims.put("username",loginuser.getUsername()); - String token = JwtUtil.genToken(claims); - return Result.success(token); - } - } -} diff --git a/src/main/java/com/sa/unsafeincidents/exception/GlobalExceptionHandle.java b/src/main/java/com/sa/unsafeincidents/exception/GlobalExceptionHandle.java deleted file mode 100644 index 0ebc07d..0000000 --- a/src/main/java/com/sa/unsafeincidents/exception/GlobalExceptionHandle.java +++ /dev/null @@ -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():"操作失败"); - } -} diff --git a/src/main/java/com/sa/unsafeincidents/interceptors/LoginInterceptor.java b/src/main/java/com/sa/unsafeincidents/interceptors/LoginInterceptor.java deleted file mode 100644 index 1d95aca..0000000 --- a/src/main/java/com/sa/unsafeincidents/interceptors/LoginInterceptor.java +++ /dev/null @@ -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(); - } -} \ No newline at end of file diff --git a/src/main/java/com/sa/unsafeincidents/mapper/ReportMapper.java b/src/main/java/com/sa/unsafeincidents/mapper/ReportMapper.java deleted file mode 100644 index 7ed06ba..0000000 --- a/src/main/java/com/sa/unsafeincidents/mapper/ReportMapper.java +++ /dev/null @@ -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 findByName(String name); - - @Select("select * from reports") - ArrayList 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); - -} \ No newline at end of file diff --git a/src/main/java/com/sa/unsafeincidents/mapper/UserMapper.java b/src/main/java/com/sa/unsafeincidents/mapper/UserMapper.java deleted file mode 100644 index 4c5519e..0000000 --- a/src/main/java/com/sa/unsafeincidents/mapper/UserMapper.java +++ /dev/null @@ -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); -} diff --git a/src/main/java/com/sa/unsafeincidents/pojo/Image.java b/src/main/java/com/sa/unsafeincidents/pojo/Image.java deleted file mode 100644 index 36817c4..0000000 --- a/src/main/java/com/sa/unsafeincidents/pojo/Image.java +++ /dev/null @@ -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; //图片类别,图片用在什么地方 -} diff --git a/src/main/java/com/sa/unsafeincidents/pojo/Report.java b/src/main/java/com/sa/unsafeincidents/pojo/Report.java deleted file mode 100644 index d192a44..0000000 --- a/src/main/java/com/sa/unsafeincidents/pojo/Report.java +++ /dev/null @@ -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; -} diff --git a/src/main/java/com/sa/unsafeincidents/pojo/Result.java b/src/main/java/com/sa/unsafeincidents/pojo/Result.java deleted file mode 100644 index 7ec81c4..0000000 --- a/src/main/java/com/sa/unsafeincidents/pojo/Result.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.sa.unsafeincidents.pojo; - - -//统一响应结果 - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@NoArgsConstructor -@AllArgsConstructor -@Data -public class Result { - private Integer code;//业务状态码 0-成功 1-失败 - private String message;//提示信息 - private T data;//响应数据 - - //快速返回操作成功响应结果(带响应数据) - public static Result 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); - } -} diff --git a/src/main/java/com/sa/unsafeincidents/pojo/User.java b/src/main/java/com/sa/unsafeincidents/pojo/User.java deleted file mode 100644 index 19af14f..0000000 --- a/src/main/java/com/sa/unsafeincidents/pojo/User.java +++ /dev/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;//更新时间 -} \ No newline at end of file diff --git a/src/main/java/com/sa/unsafeincidents/service/ReportService.java b/src/main/java/com/sa/unsafeincidents/service/ReportService.java deleted file mode 100644 index 0e49667..0000000 --- a/src/main/java/com/sa/unsafeincidents/service/ReportService.java +++ /dev/null @@ -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 list(String name); - ArrayList list(); - - Report findByID(Integer id); - - void reply(Integer id, String reply); -} diff --git a/src/main/java/com/sa/unsafeincidents/service/UserService.java b/src/main/java/com/sa/unsafeincidents/service/UserService.java deleted file mode 100644 index 1b5a60f..0000000 --- a/src/main/java/com/sa/unsafeincidents/service/UserService.java +++ /dev/null @@ -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); -} diff --git a/src/main/java/com/sa/unsafeincidents/service/impl/ReportServiceImpl.java b/src/main/java/com/sa/unsafeincidents/service/impl/ReportServiceImpl.java deleted file mode 100644 index dbca8d5..0000000 --- a/src/main/java/com/sa/unsafeincidents/service/impl/ReportServiceImpl.java +++ /dev/null @@ -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 list(String name){ - return reportMapper.findByName(name); - }; - - @Override - public ArrayList 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); - } - - -} diff --git a/src/main/java/com/sa/unsafeincidents/service/impl/UserServiceImpl.java b/src/main/java/com/sa/unsafeincidents/service/impl/UserServiceImpl.java deleted file mode 100644 index a6e7583..0000000 --- a/src/main/java/com/sa/unsafeincidents/service/impl/UserServiceImpl.java +++ /dev/null @@ -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); - } - - -} diff --git a/src/main/java/com/sa/unsafeincidents/utils/JwtUtil.java b/src/main/java/com/sa/unsafeincidents/utils/JwtUtil.java deleted file mode 100644 index b682f0f..0000000 --- a/src/main/java/com/sa/unsafeincidents/utils/JwtUtil.java +++ /dev/null @@ -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 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 parseToken(String token) { - return JWT.require(Algorithm.HMAC256(KEY)) - .build() - .verify(token) - .getClaim("claims") - .asMap(); - } - -} diff --git a/src/main/java/com/sa/unsafeincidents/utils/Md5Util.java b/src/main/java/com/sa/unsafeincidents/utils/Md5Util.java deleted file mode 100644 index 1e5bc60..0000000 --- a/src/main/java/com/sa/unsafeincidents/utils/Md5Util.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.sa.unsafeincidents.utils; - - -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -public class Md5Util { - /** - * 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合 - */ - protected static char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; - - protected static MessageDigest messagedigest = null; - - static { - try { - messagedigest = MessageDigest.getInstance("MD5"); - } catch (NoSuchAlgorithmException nsaex) { - System.err.println(Md5Util.class.getName() + "初始化失败,MessageDigest不支持MD5Util。"); - nsaex.printStackTrace(); - } - } - - /** - * 生成字符串的md5校验值 - * - * @param s - * @return - */ - public static String getMD5String(String s) { - return getMD5String(s.getBytes()); - } - - /** - * 判断字符串的md5校验码是否与一个已知的md5码相匹配 - * - * @param password 要校验的字符串 - * @param md5PwdStr 已知的md5校验码 - * @return - */ - public static boolean checkPassword(String password, String md5PwdStr) { - String s = getMD5String(password); - return s.equals(md5PwdStr); - } - - - public static String getMD5String(byte[] bytes) { - messagedigest.update(bytes); - return bufferToHex(messagedigest.digest()); - } - - private static String bufferToHex(byte bytes[]) { - return bufferToHex(bytes, 0, bytes.length); - } - - private static String bufferToHex(byte bytes[], int m, int n) { - StringBuffer stringbuffer = new StringBuffer(2 * n); - int k = m + n; - for (int l = m; l < k; l++) { - appendHexPair(bytes[l], stringbuffer); - } - return stringbuffer.toString(); - } - - private static void appendHexPair(byte bt, StringBuffer stringbuffer) { - char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换, >>> - // 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同 - char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换 - stringbuffer.append(c0); - stringbuffer.append(c1); - } - -} diff --git a/src/main/java/com/sa/unsafeincidents/utils/ThreadLocalUtil.java b/src/main/java/com/sa/unsafeincidents/utils/ThreadLocalUtil.java deleted file mode 100644 index 536a77e..0000000 --- a/src/main/java/com/sa/unsafeincidents/utils/ThreadLocalUtil.java +++ /dev/null @@ -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 get(){ - return (T) THREAD_LOCAL.get(); - } - - //存储键值对 - public static void set(Object value){ - THREAD_LOCAL.set(value); - } - - - //清除ThreadLocal 防止内存泄漏 - public static void remove(){ - THREAD_LOCAL.remove(); - } -} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml deleted file mode 100644 index 62795d5..0000000 --- a/src/main/resources/application.yml +++ /dev/null @@ -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 diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html deleted file mode 100644 index 89bb8ba..0000000 --- a/src/main/resources/static/index.html +++ /dev/null @@ -1,6 +0,0 @@ - - -

hello word!!!

-

this is a html page

- - \ No newline at end of file diff --git a/src/test/java/com/sa/unsafeincidents/UnsafeincidentsApplicationTests.java b/src/test/java/com/sa/unsafeincidents/UnsafeincidentsApplicationTests.java deleted file mode 100644 index 257ab46..0000000 --- a/src/test/java/com/sa/unsafeincidents/UnsafeincidentsApplicationTests.java +++ /dev/null @@ -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() { - } - -}