From cb07f43f85661039c3ef19bb2c39c358ac02670e Mon Sep 17 00:00:00 2001 From: hcy Date: Sat, 23 Nov 2024 17:56:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=83=A1=E6=99=A8=E9=9B=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 31 ++ .gitignore | 33 -- Airtraffic/Airtraffic.js | 509 ++++++++++++++++++ Airtraffic/Airtraffic.json | 3 + Airtraffic/Airtraffic.wxml | 402 ++++++++++++++ Airtraffic/Airtraffic.wxss | 138 +++++ Aviation/Aviation.js | 325 +++++++++++ Aviation/Aviation.json | 3 + Aviation/Aviation.wxml | 198 +++++++ Aviation/Aviation.wxss | 139 +++++ Crew/Crew.js | 313 +++++++++++ Crew/Crew.json | 3 + Crew/Crew.wxml | 187 +++++++ Crew/Crew.wxss | 138 +++++ 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 + Students/students.js | 221 ++++++++ Students/students.json | 3 + Students/students.wxml | 114 ++++ Students/students.wxss | 140 +++++ admin/admin.js | 20 + admin/admin.json | 3 + admin/admin.wxml | 17 + admin/admin.wxss | 35 ++ app.js | 6 + app.json | 55 ++ app.wxss | 10 + dataAnalysis/dataAnalysis.js | 31 ++ dataAnalysis/dataAnalysis.json | 5 + dataAnalysis/dataAnalysis.wxml | 42 ++ dataAnalysis/dataAnalysis.wxss | 110 ++++ home/home.js | 26 + home/home.json | 3 + home/home.wxml | 63 +++ home/home.wxss | 65 +++ image/乘务人员.png | Bin 0 -> 5266 bytes image/人工智能大脑 (1).png | Bin 0 -> 4958 bytes image/人工智能大脑.png | Bin 0 -> 4805 bytes image/化工专家.png | Bin 0 -> 5094 bytes image/地勤人员.png | Bin 0 -> 4250 bytes image/基础折线图.png | Bin 0 -> 23783 bytes image/基础漏斗图.png | Bin 0 -> 28216 bytes image/学生学员.png | Bin 0 -> 3812 bytes image/快速上报.png | Bin 0 -> 3351 bytes image/我的-copy.png | Bin 0 -> 3877 bytes image/我的.png | Bin 0 -> 4154 bytes image/机务人员.jpg | Bin 0 -> 3921 bytes image/空管人员.png | Bin 0 -> 4745 bytes image/空防事件.png | Bin 0 -> 3865 bytes image/轮播图1.jpg | Bin 0 -> 21683 bytes image/轮播图2.jpg | Bin 0 -> 22661 bytes image/轮播图3.jpg | Bin 0 -> 9716 bytes image/面积饼图.png | Bin 0 -> 42429 bytes image/飞行人员.png | Bin 0 -> 2934 bytes image/首页 (2).png | Bin 0 -> 3581 bytes image/首页.png | Bin 0 -> 2841 bytes login/login.js | 127 +++++ login/login.json | 3 + login/login.wxml | 31 ++ login/login.wxss | 80 +++ message/message.js | 97 ++++ message/message.json | 3 + message/message.wxml | 24 + message/message.wxss | 107 ++++ package-lock.json | 75 +++ package.json | 18 + pom.xml | 71 --- profile/profile.js | 24 + profile/profile.json | 3 + profile/profile.wxml | 13 + profile/profile.wxss | 53 ++ project.config.json | 28 + project.private.config.json | 148 +++++ register/register.js | 66 +++ register/register.json | 3 + register/register.wxml | 32 ++ register/register.wxss | 76 +++ sitemap.json | 7 + 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 - userview/usereview.js | 14 + userview/usereview.json | 3 + userview/usereview.wxml | 13 + userview/usereview.wxss | 17 + viewReports/viewReports.js | 14 + viewReports/viewReports.json | 3 + viewReports/viewReports.wxml | 13 + viewReports/viewReports.wxss | 17 + 115 files changed, 5353 insertions(+), 875 deletions(-) create mode 100644 .eslintrc.js delete mode 100644 .gitignore create mode 100644 Airtraffic/Airtraffic.js create mode 100644 Airtraffic/Airtraffic.json create mode 100644 Airtraffic/Airtraffic.wxml create mode 100644 Airtraffic/Airtraffic.wxss create mode 100644 Aviation/Aviation.js create mode 100644 Aviation/Aviation.json create mode 100644 Aviation/Aviation.wxml create mode 100644 Aviation/Aviation.wxss create mode 100644 Crew/Crew.js create mode 100644 Crew/Crew.json create mode 100644 Crew/Crew.wxml create mode 100644 Crew/Crew.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 Students/students.js create mode 100644 Students/students.json create mode 100644 Students/students.wxml create mode 100644 Students/students.wxss create mode 100644 admin/admin.js create mode 100644 admin/admin.json create mode 100644 admin/admin.wxml create mode 100644 admin/admin.wxss create mode 100644 app.js create mode 100644 app.json create mode 100644 app.wxss create mode 100644 dataAnalysis/dataAnalysis.js create mode 100644 dataAnalysis/dataAnalysis.json create mode 100644 dataAnalysis/dataAnalysis.wxml create mode 100644 dataAnalysis/dataAnalysis.wxss create mode 100644 home/home.js create mode 100644 home/home.json create mode 100644 home/home.wxml create mode 100644 home/home.wxss create mode 100644 image/乘务人员.png create mode 100644 image/人工智能大脑 (1).png create mode 100644 image/人工智能大脑.png create mode 100644 image/化工专家.png create mode 100644 image/地勤人员.png create mode 100644 image/基础折线图.png create mode 100644 image/基础漏斗图.png create mode 100644 image/学生学员.png create mode 100644 image/快速上报.png create mode 100644 image/我的-copy.png create mode 100644 image/我的.png create mode 100644 image/机务人员.jpg create mode 100644 image/空管人员.png create mode 100644 image/空防事件.png create mode 100644 image/轮播图1.jpg create mode 100644 image/轮播图2.jpg create mode 100644 image/轮播图3.jpg create mode 100644 image/面积饼图.png create mode 100644 image/飞行人员.png create mode 100644 image/首页 (2).png create mode 100644 image/首页.png create mode 100644 login/login.js create mode 100644 login/login.json create mode 100644 login/login.wxml create mode 100644 login/login.wxss create mode 100644 message/message.js create mode 100644 message/message.json create mode 100644 message/message.wxml create mode 100644 message/message.wxss create mode 100644 package-lock.json create mode 100644 package.json delete mode 100644 pom.xml create mode 100644 profile/profile.js create mode 100644 profile/profile.json create mode 100644 profile/profile.wxml create mode 100644 profile/profile.wxss create mode 100644 project.config.json create mode 100644 project.private.config.json create mode 100644 register/register.js create mode 100644 register/register.json create mode 100644 register/register.wxml create mode 100644 register/register.wxss create mode 100644 sitemap.json 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 create mode 100644 userview/usereview.js create mode 100644 userview/usereview.json create mode 100644 userview/usereview.wxml create mode 100644 userview/usereview.wxss create mode 100644 viewReports/viewReports.js create mode 100644 viewReports/viewReports.json create mode 100644 viewReports/viewReports.wxml create mode 100644 viewReports/viewReports.wxss diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..115cc02 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,31 @@ +/* + * Eslint config file + * Documentation: https://eslint.org/docs/user-guide/configuring/ + * Install the Eslint extension before using this feature. + */ +module.exports = { + env: { + es6: true, + browser: true, + node: true, + }, + ecmaFeatures: { + modules: true, + }, + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module', + }, + globals: { + wx: true, + App: true, + Page: true, + getCurrentPages: true, + getApp: true, + Component: true, + requirePlugin: true, + requireMiniProgram: true, + }, + // extends: 'eslint:recommended', + rules: {}, +} 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/Airtraffic/Airtraffic.js b/Airtraffic/Airtraffic.js new file mode 100644 index 0000000..b56870c --- /dev/null +++ b/Airtraffic/Airtraffic.js @@ -0,0 +1,509 @@ +// pages/Airtraffic/Airtraffic.js +Page({ + data: { + name:'Airtraffic', + selectedTime: '--时--分', + selectedDate: '--年--月--日', + selectedIndex1: 0, + selectedIndex2: 0, + selectedIndex4: 0, + selectedIndex5: 0, + selectedIndex7: 0, + selectedIndex8: 0, + selectedIndex9: 0, + selectedIndex10: 0, + selectedIndex11: 0, + selectedIndex12: 0, + selectedIndex13: 0, + selectedIndex14: 0, + selectedIndex15: 0, + selectedIndex16: 0, + selectedIndex100: 0, + selectedIndex101: 0, + selectedIndex102: 0, + selectedIndex103: 0, + selectedIndex104: 0, + selectedIndex105: 0, + selectedIndex106: 0, + selectedIndex107: 0, + inputValue1: '', + inputValue2: '', + inputValue3: '', + inputValue6: '', + inputValue7: '', + inputValue8: '', + inputValue15: '', + inputValue16: '', + inputValue20: '', + inputValue21: '', + inputValue22: '', + inputValue23: '', + inputValue100: '', + inputValue101: '', + inputValue102: '', + 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:['请选择','区域','进近','塔台','管掉','总调','报告室','其他'], + License:['请选择','私用驾驶员执照','商用驾驶员执照','航线运输驾驶员执照','临时执照','无','其它'], + ACFT:['请选择','飞机','直升机','滑翔机','其它'], + controlledairspace:['请选择','A类空域','B类空域','C类空域','D类空域'], + 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 + }); + }, + //工作经历 + onInput15: function(event) { + this.setData({ + inputValue15: event.detail.value + }); + }, + onInput16: function(event) { + this.setData({ + inputValue16: event.detail.value + }); + }, + //执照选择 + onLicense: function(event) { + this.setData({ + selectedIndex4: event.detail.value + }); + }, + //管制席位 + onATS: function (event) { + this.setData({ + selectedIndex12: event.detail.value + }); + }, + //管制类型 + onATC: function (event) { + this.setData({ + selectedIndex13: event.detail.value + }); + }, + //管制空域 + onControlledairspace: function (event) { + this.setData({ + selectedIndex16: event.detail.value + }); + }, + + //航空器一 + //航空器种类 + onACFT: function(event) { + this.setData({ + selectedIndex5: 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 + }); + }, + //TCAS + onTCAS: function (event) { + this.setData({ + selectedIndex14: event.detail.value + }); + }, + //Advise + onAdvise: function (event) { + this.setData({ + selectedIndex15: event.detail.value + }); + }, + + //航空器二 + //航空器种类 + onACFT0: function(event) { + this.setData({ + selectedIndex100: event.detail.value + }); + }, + //任务 + ontask0: function(event) { + this.setData({ + selectedIndex101: event.detail.value + }); + }, + //计划 + onplan0: function(event) { + this.setData({ + selectedIndex102: event.detail.value + }); + }, + //飞行阶段 + onphase0: function(event) { + this.setData({ + selectedIndex103: event.detail.value + }); + }, + //飞行高度 + onInput100: function(event) { + this.setData({ + inputValue100: event.detail.value + }); + }, + //天气 + onweather0: function(event) { + this.setData({ + selectedIndex104: event.detail.value + }); + }, + //光线条件和能见度 + onlv0: function(event) { + this.setData({ + selectedIndex105: event.detail.value + }); + }, + onInput101: function(event) { + this.setData({ + inputValue101: event.detail.value + }); + }, + onInput102: function(event) { + this.setData({ + inputValue102: event.detail.value + }); + }, + //TCAS + onTCAS0: function (event) { + this.setData({ + selectedIndex106: event.detail.value + }); + }, + //Advise + onAdvise0: function (event) { + this.setData({ + selectedIndex107: 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, + selectedIndex4: 0, + selectedIndex5: 0, + selectedIndex7: 0, + selectedIndex8: 0, + selectedIndex9: 0, + selectedIndex10: 0, + selectedIndex11: 0, + selectedIndex12: 0, + selectedIndex13: 0, + selectedIndex14: 0, + selectedIndex15: 0, + selectedIndex16: 0, + selectedIndex100: 0, + selectedIndex101: 0, + selectedIndex102: 0, + selectedIndex103: 0, + selectedIndex104: 0, + selectedIndex105: 0, + selectedIndex106: 0, + selectedIndex107: 0, + inputValue1: '', + inputValue2: '', + inputValue3: '', + inputValue6: '', + inputValue7: '', + inputValue8: '', + inputValue15: '', + inputValue16: '', + inputValue20: '', + inputValue21: '', + inputValue22: '', + inputValue23: '', + inputValue100: '', + inputValue101: '', + inputValue102: '', + },() => { + 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 planText = data.plan[data.selectedIndex8]; // 获取计划的实际文本 + const phaseText = data.phase[data.selectedIndex9]; // 获取飞行阶段的实际文本 + const weatherText = data.weather[data.selectedIndex10]; // 获取天气的实际文本 + const lightText = data.lv[data.selectedIndex11]; // 获取光线条件的实际文本 + const atsText = data.ATS[data.selectedIndex12]; // 获取管制席位的实际文本 + const atcText = data.ATC[data.selectedIndex13]; // 获取管制类型的实际文本 + const tcasText = data.TCAS[data.selectedIndex14]; // 获取TCAS的实际文本 + const adviseText = data.Advise[data.selectedIndex15]; // 获取建议的实际文本 + const acft0Text = data.ACFT[data.selectedIndex100]; // 获取航空器二的类型 + const task0Text = data.task[data.selectedIndex101]; // 获取航空器二的任务 + const plan0Text = data.plan[data.selectedIndex102]; // 获取航空器二的计划 + const phase0Text = data.phase[data.selectedIndex103]; // 获取航空器二的阶段 + const weather0Text = data.weather[data.selectedIndex104]; // 获取航空器二的天气 + const light0Text = data.lv[data.selectedIndex105]; // 获取航空器二的光线条件 + const tcas0Text = data.TCAS[data.selectedIndex106]; // 获取航空器二的TCAS + const advise0Text = data.Advise[data.selectedIndex107]; // 获取航空器二的建议 + + // 提交数据到后端 + 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, // 提交时区的实际文本 + workPosition: workPositionText,// 提交岗位的实际文本 + license: licenseText, // 提交执照类型的实际文本 + acftType: acftText, // 提交航空器类型的实际文本 + task: taskText, // 提交任务的实际文本 + plan: planText, // 提交计划的实际文本 + phase: phaseText, // 提交飞行阶段的实际文本 + weather: weatherText, // 提交天气的实际文本 + lightCondition: lightText, // 提交光线条件的实际文本 + ats: atsText, // 提交管制席位的实际文本 + atc: atcText, // 提交管制类型的实际文本 + tcas: tcasText, // 提交TCAS的实际文本 + advise: adviseText, // 提交建议的实际文本 + + acft0Type: acft0Text, // 提交航空器类型的实际文本 + task0: task0Text, // 提交任务的实际文本 + plan0: plan0Text, // 提交计划的实际文本 + phase0: phase0Text, // 提交飞行阶段的实际文本 + weather0: weather0Text, // 提交天气的实际文本 + lightCondition0: light0Text, // 提交光线条件的实际文本 + ats0: ats0Text, // 提交管制席位的实际文本 + atc0: atcT0ext, // 提交管制类型的实际文本 + tcas0: tcas0Text, // 提交TCAS的实际文本 + advise0: advise0Text, // 提交建议的实际文本 + inputValue1: data.inputValue1, + inputValue2: data.inputValue2, + inputValue3: data.inputValue3, + inputValue6: data.inputValue6, + inputValue7: data.inputValue7, + inputValue8: data.inputValue8, + inputValue15: data.inputValue15, + inputValue16: data.inputValue16, + inputValue20: data.inputValue20, + inputValue21: data.inputValue21, + inputValue22: data.inputValue22, + inputValue23: data.inputValue23, + inputValue100: data.inputValue100, + inputValue101: data.inputValue101, + inputValue102: data.inputValue102, + 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/Airtraffic/Airtraffic.json b/Airtraffic/Airtraffic.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/Airtraffic/Airtraffic.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/Airtraffic/Airtraffic.wxml b/Airtraffic/Airtraffic.wxml new file mode 100644 index 0000000..48c586a --- /dev/null +++ b/Airtraffic/Airtraffic.wxml @@ -0,0 +1,402 @@ + + + + + + 空中交通管制人员使用 (Air traffic controller) + + + + 欢迎您为民航不安全事件管理系统提供事件信息,请您仔细填写适用条目: + (红色字体为必填项) + + + + 事件发生时的当地时间: + + 时间: + + + {{selectedDate}} + + + + + {{ selectedTime }} + + + + 时区: + + + {{ timezones[selectedIndex1] }} + + + + + + 事件发生前您的工作时间: + + 过去一个月的工作天数: + + + + + + 过去一星期的工作天数: + + + + + + 过去24小时的工作时长: + + + 小时 + + + + + + 事件发生时您的岗位: + + + {{ workposition[selectedIndex2] }} + + + + + + + 您的工作经历是: + + 工作经验: + + + + + + 在此岗位工作了: + + + + + + + + + 您的执照类型: + + + {{ License[selectedIndex4] }} + + + + + + + + 事件发生时您的管制席位 + + + {{ ATS[selectedIndex12] }} + + + + + + + + 事件发生时的管制类型: + + + {{ ATC[selectedIndex13] }} + + + + + + + + 事件发生的管制空域为: + + + {{ controlledairspace[selectedIndex16] }} + + + + + + + 航空器一: + + + + + 事件航空器种类: + + + {{ ACFT[selectedIndex5] }} + + + + + + + + 本次飞行任务: + + + {{ task[selectedIndex7] }} + + + + + + + + 本次飞行计划: + + + {{ plan[selectedIndex8] }} + + + + + + + + 事件发生时的飞行阶段: + + + {{ phase[selectedIndex9] }} + + + + + + + + 飞行高度为: + + + 千米 + + + + + + 天气条件: + + + {{ weather[selectedIndex10] }} + + + + + + + + 光线条件和能见度为: + + + {{ lv[selectedIndex11] }} + + + + + 云底高: + + + + + + 跑道视程: + + + + + + + + + 若为两机冲突,当时TCAS是否提出告警: + + + {{ TCAS[selectedIndex14] }} + + + + + + + + 是否提出建议: + + + {{ weather[selectedIndex15] }} + + + + + + + + + + 航空器二: + + + + + 事件航空器种类: + + + {{ ACFT[selectedIndex100] }} + + + + + + + + 本次飞行任务: + + + {{ task[selectedIndex101] }} + + + + + + + + 本次飞行计划: + + + {{ plan[selectedIndex102] }} + + + + + + + + 事件发生时的飞行阶段: + + + {{ phase[selectedIndex103] }} + + + + + + + + 飞行高度为: + + + 千米 + + + + + + 天气条件: + + + {{ weather[selectedIndex104] }} + + + + + + + + 光线条件和能见度为: + + + {{ lv[selectedIndex105] }} + + + + + 云底高: + + + + + + 跑道视程: + + + + + + + + + 若为两机冲突,当时TCAS是否提出告警: + + + {{ TCAS[selectedIndex106] }} + + + + + + + + 是否提出建议: + + + {{ weather[selectedIndex107] }} + + + + + + + 请您尽可能完整地描述事件经过:(如事件过程、原因、建议等) + + + + + + + + 民航不安全事件管理系统欢迎全行业所有人员做安全“吹哨人”!感谢您积极主动参与改善航空安全行动和自愿报告安全风险隐患信息!我们欢迎您本着诚信原则报送有关安全信息,同时建议您留一个有效的联系方式,以方便该信息得到有效处理、应用、反馈和奖励。我们承诺对每一位员工、每一家单位的报告信息严格保密,谢谢! + + + + + + + 姓名: + + + + + + + + 电话: + + + + + + + + 邮箱: + + + + + + + + + + + diff --git a/Airtraffic/Airtraffic.wxss b/Airtraffic/Airtraffic.wxss new file mode 100644 index 0000000..b0977ec --- /dev/null +++ b/Airtraffic/Airtraffic.wxss @@ -0,0 +1,138 @@ +/* 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/Aviation/Aviation.js b/Aviation/Aviation.js new file mode 100644 index 0000000..8181049 --- /dev/null +++ b/Aviation/Aviation.js @@ -0,0 +1,325 @@ +// pages/Aviation/Aviation.js +Page({ + data: { + name:'Aviation', + selectedTime: '--时--分', + selectedDate: '--年--月--日', + selectedIndex1: 0, + selectedIndex2: 0, + selectedIndex4: 0, + selectedIndex9: 0, + selectedIndex22: 0, + inputValue1: '', + inputValue2: '', + inputValue3: '', + inputValue9: '', + inputValue10: '', + inputValue11: '', + inputValue12: '', + inputValue13: '', + inputValue14: '', + 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:['请选择','安检员','乘务员','飞行员','机务人员','保安员','管制员','机场地面服务人员','其他'], + phase:['请选择','值机','安检','候机','登机','滑行','停靠','起飞','航路','着陆','其它'], + License:['请选择','私用驾驶员执照','商用驾驶员执照','航线运输驾驶员执照','临时执照','无','其它'], + involve:['请选择','是','否'] + }, + //时间选择 + 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 + }); + }, + //岗位选择 + onposition: function (event) { + this.setData({ + selectedIndex2: 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 + }); + }, + //飞行区间 + onInput9: function(event) { + this.setData({ + inputValue9: event.detail.value + }); + }, + onInput10: function(event) { + this.setData({ + inputValue10: event.detail.value + }); + }, + //人员情况 + onInput11: function(event) { + this.setData({ + inputValue11: event.detail.value + }); + }, + onInput12: function(event) { + this.setData({ + inputValue12: event.detail.value + }); + }, + onInput13: function(event) { + this.setData({ + inputValue13: event.detail.value + }); + }, + onInput14: function(event) { + this.setData({ + inputValue14: event.detail.value + }); + }, + //飞行阶段 + onphase: function(event) { + this.setData({ + selectedIndex9: event.detail.value + }); + }, + //是否设计航空器 + oninvolve: function(event) { + this.setData({ + selectedIndex22: 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, + selectedIndex9: 0, + selectedIndex22: 0, + inputValue1: '', + inputValue2: '', + inputValue3: '', + inputValue9: '', + inputValue10: '', + inputValue11: '', + inputValue12: '', + inputValue13: '', + inputValue14: '', + 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 workPositionText = data.position[data.selectedIndex2]; // 获取岗位的实际文本 + const licenseText = data.License[data.selectedIndex4]; // 获取执照类型的实际文本 + const phaseText = data.phase[data.selectedIndex9]; // 获取飞行阶段的实际文本 + const involveText = data.involve[data.selectedIndex22]; // 获取是否设计航空器的实际文本 + + // 提交数据到后端 + 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, // 提交时区的实际文本 + workPosition: workPositionText, // 提交岗位的实际文本 + license: licenseText, // 提交执照类型的实际文本 + phase: phaseText, // 提交飞行阶段的实际文本 + involve: involveText, // 提交是否设计航空器的实际文本 + inputValue1: data.inputValue1, + inputValue2: data.inputValue2, + inputValue3: data.inputValue3, + inputValue9: data.inputValue9, + inputValue10: data.inputValue10, + inputValue11: data.inputValue11, + inputValue12: data.inputValue12, + inputValue13: data.inputValue13, + inputValue14: data.inputValue14, + 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/Aviation/Aviation.json b/Aviation/Aviation.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/Aviation/Aviation.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/Aviation/Aviation.wxml b/Aviation/Aviation.wxml new file mode 100644 index 0000000..286b95d --- /dev/null +++ b/Aviation/Aviation.wxml @@ -0,0 +1,198 @@ + + + + + + 空防安全事件 (Aviation securityincident) + + + + 欢迎您为民航不安全事件管理系统提供事件信息,请您仔细填写适用条目: + (红色字体为必填项) + + + + 事件发生时的当地时间: + + 时间: + + + {{selectedDate}} + + + + + {{ selectedTime }} + + + + 时区: + + + {{ timezones[selectedIndex1] }} + + + + + + 事件发生前您的工作时间: + + 过去一个月的工作天数: + + + + + + 过去一星期的工作天数: + + + + + + 过去24小时的工作时长: + + + 小时 + + + + + + 事件发生时您的岗位: + + + {{ position[selectedIndex2] }} + + + + + + + + 您的执照类型: + + + {{ License[selectedIndex4] }} + + + + + + + 您的工作经历是: + + 工作经验: + + + + + + 在此岗位工作了: + + + + + + + + + 事件发生时的飞行阶段: + + + {{ phase[selectedIndex9] }} + + + + + + + + 事件是否涉及航空器: + + + {{ involve[selectedIndex22] }} + + + + + + + 飞行区间是: + + + + + + + + + + + + + 机上的人员情况是: + + 飞行机组 + + + + 乘务员 + + + + + 空中保安 + + + + 共有旅客 + + + + + + + 请您尽可能完整地描述事件经过:(如事件过程、原因、建议等) + + + + + + + + 民航不安全事件管理系统欢迎全行业所有人员做安全“吹哨人”!感谢您积极主动参与改善航空安全行动和自愿报告安全风险隐患信息!我们欢迎您本着诚信原则报送有关安全信息,同时建议您留一个有效的联系方式,以方便该信息得到有效处理、应用、反馈和奖励。我们承诺对每一位员工、每一家单位的报告信息严格保密,谢谢! + + + + + + + 姓名: + + + + + + + + 电话: + + + + + + + + 邮箱: + + + + + + + + + + + + diff --git a/Aviation/Aviation.wxss b/Aviation/Aviation.wxss new file mode 100644 index 0000000..f9694f3 --- /dev/null +++ b/Aviation/Aviation.wxss @@ -0,0 +1,139 @@ +/* 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/Crew/Crew.js b/Crew/Crew.js new file mode 100644 index 0000000..ede9af3 --- /dev/null +++ b/Crew/Crew.js @@ -0,0 +1,313 @@ +// pages/Crew/Crew.js +Page({ + data: { + name:'Crew', + selectedTime: '--时--分', + selectedDate: '--年--月--日', + selectedIndex1: 0, + selectedIndex2: 0, + selectedIndex5: 0, + selectedIndex9: 0, + inputValue1: '', + inputValue2: '', + inputValue3: '', + inputValue4: '', + inputValue5: '', + inputValue9: '', + inputValue10: '', + inputValue11: '', + inputValue12: '', + inputValue13: '', + inputValue14: '', + 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:['请选择','乘务员','主任乘务长','乘务教员','乘务检查员','保安员','其他'], + ACFT:['请选择','飞机','直升机','滑翔机','其它'], + phase:['请选择','地面/滑行','起飞','爬升','巡航/作业','下降','进近','复飞','着陆','其它'], + }, + //时间选择 + 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 + }); + }, + //岗位选择 + onposition: function (event) { + this.setData({ + selectedIndex2: event.detail.value + }); + }, + //飞行经历 + onInput4: function(event) { + this.setData({ + inputValue4: event.detail.value + }); + }, + onInput5: function(event) { + this.setData({ + inputValue5: event.detail.value + }); + }, + //飞行区间 + onInput9: function(event) { + this.setData({ + inputValue9: event.detail.value + }); + }, + onInput10: function(event) { + this.setData({ + inputValue10: event.detail.value + }); + }, + //航空器种类 + onACFT: function(event) { + this.setData({ + selectedIndex5: event.detail.value + }); + }, + //人员情况 + onInput11: function(event) { + this.setData({ + inputValue11: event.detail.value + }); + }, + onInput12: function(event) { + this.setData({ + inputValue12: event.detail.value + }); + }, + onInput13: function(event) { + this.setData({ + inputValue13: event.detail.value + }); + }, + onInput14: function(event) { + this.setData({ + inputValue14: event.detail.value + }); + }, + //飞行阶段 + onphase: function(event) { + this.setData({ + selectedIndex9: 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, + selectedIndex5: 0, + selectedIndex9: 0, + inputValue1: '', + inputValue2: '', + inputValue3: '', + inputValue4: '', + inputValue5: '', + inputValue9: '', + inputValue10: '', + inputValue11: '', + inputValue12: '', + inputValue13: '', + inputValue14: '', + 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.position[data.selectedIndex2]; // 获取岗位的实际文本 + const acftText = data.ACFT[data.selectedIndex5]; // 获取航空器类型的实际文本 + const phaseText = data.phase[data.selectedIndex9]; // 获取飞行阶段的实际文本 + + // 提交数据到后端 + 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, // 提交时区的实际文本 + workPosition: workPositionText,// 提交岗位的实际文本 + acftType: acftText, // 提交航空器类型的实际文本 + phase: phaseText, // 提交飞行阶段的实际文本 + inputValue1: data.inputValue1, + inputValue2: data.inputValue2, + inputValue3: data.inputValue3, + inputValue4: data.inputValue4, + inputValue5: data.inputValue5, + inputValue9: data.inputValue9, + inputValue10: data.inputValue10, + inputValue11: data.inputValue11, + inputValue12: data.inputValue12, + inputValue13: data.inputValue13, + inputValue14: data.inputValue14, + 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/Crew/Crew.json b/Crew/Crew.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/Crew/Crew.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/Crew/Crew.wxml b/Crew/Crew.wxml new file mode 100644 index 0000000..566c7db --- /dev/null +++ b/Crew/Crew.wxml @@ -0,0 +1,187 @@ + + + + + + (乘务事件使用 Crew member) + + + + 欢迎您为民航不安全事件管理系统提供事件信息,请您仔细填写适用条目: + (红色字体为必填项) + + + + 事件发生时的当地时间: + + 时间: + + + {{selectedDate}} + + + + + {{ selectedTime }} + + + + 时区: + + + {{ timezones[selectedIndex1] }} + + + + + + 事件发生前您的工作时间: + + 过去一个月的工作天数: + + + + + + 过去一星期的工作天数: + + + + + + 过去24小时的工作时长: + + + 小时 + + + + + + 事件发生时您的岗位: + + + {{ position[selectedIndex2] }} + + + + + + + 您所具有的飞行经历是: + + 飞行小时数: + + + 小时 + + + 本机型小时: + + + 小时 + + + + + 飞行区间是: + + + + + + + + + + + + + + 事件航空器种类: + + + {{ ACFT[selectedIndex5] }} + + + + + + + 机上的人员情况是: + + 飞行机组 + + + + 乘务员 + + + + + 空中保安 + + + + 共有旅客 + + + + + + + + 事件发生时的飞行阶段: + + + {{ phase[selectedIndex9] }} + + + + + + + 请您尽可能完整地描述事件经过:(如事件过程、原因、建议等) + + + + + + + + 民航不安全事件管理系统欢迎全行业所有人员做安全“吹哨人”!感谢您积极主动参与改善航空安全行动和自愿报告安全风险隐患信息!我们欢迎您本着诚信原则报送有关安全信息,同时建议您留一个有效的联系方式,以方便该信息得到有效处理、应用、反馈和奖励。我们承诺对每一位员工、每一家单位的报告信息严格保密,谢谢! + + + + + + + 姓名: + + + + + + + + 电话: + + + + + + + + 邮箱: + + + + + + + + + + + + diff --git a/Crew/Crew.wxss b/Crew/Crew.wxss new file mode 100644 index 0000000..641ddff --- /dev/null +++ b/Crew/Crew.wxss @@ -0,0 +1,138 @@ +/* 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/Students/students.js b/Students/students.js new file mode 100644 index 0000000..56094b6 --- /dev/null +++ b/Students/students.js @@ -0,0 +1,221 @@ +// pages/Students/students.js +Page({ + data: { + name:'Students', + selectedTime: '--时--分', + selectedDate: '--年--月--日', + selectedIndex1: 0, + selectedIndex9: 0, + selectedIndex22: 0, + selectedIndex23: 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'], + phase:['请选择','场外维护','加油','装载食品/货物','登机','推飞机','发动机开车/试车','滑行','其它'], + involve:['请选择','是','否'], + student:['请选择','飞行学生','地面学生','其它'] + }, + //时间选择 + 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 + }); + }, + //学生类型 + onstudent: function(event) { + this.setData({ + selectedIndex23: event.detail.value + }); + }, + //飞行阶段 + onphase: function(event) { + this.setData({ + selectedIndex9: event.detail.value + }); + }, + //是否涉及航空器 + oninvolve: function(event) { + this.setData({ + selectedIndex22: 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, + selectedIndex22: 0, + selectedIndex23: 0, + selectedIndex9: 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 = this.data.timezones[data.selectedIndex1]; // 获取时区文本 + const phaseText = this.data.phase[data.selectedIndex9]; // 获取飞行阶段文本 + const involveText = this.data.involve[data.selectedIndex22]; // 获取是否涉及航空器的文本 + const studentText = this.data.student[data.selectedIndex23]; // 获取学生类型的文本 + // 提交的数据中只包含实际选择的文本内容 + 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, // 时区对应的文本 + phase: phaseText, // 飞行阶段对应的文本 + involve: involveText, // 是否涉及航空器对应的文本 + studentType: studentText, // 学生类型对应的文本 + 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/Students/students.json b/Students/students.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/Students/students.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/Students/students.wxml b/Students/students.wxml new file mode 100644 index 0000000..b124300 --- /dev/null +++ b/Students/students.wxml @@ -0,0 +1,114 @@ + + + + + + 学生学员使用 (Students) + + + + 欢迎您为民航不安全事件管理系统提供事件信息,请您仔细填写适用条目: + (红色字体为必填项) + + + + 事件发生时的当地时间: + + 时间: + + + {{selectedDate}} + + + + + {{ selectedTime }} + + + + 时区: + + + {{ timezones[selectedIndex1] }} + + + + + + + 学生学员类型: + + + {{ student[selectedIndex23] }} + + + + + + + + 事件发生时的飞行阶段: + + + {{ phase[selectedIndex9] }} + + + + + + + + 事件是否涉及航空器: + + + {{ involve[selectedIndex22] }} + + + + + + + 请您尽可能完整地描述事件经过:(如事件过程、原因、建议等) + + + + + + + + 民航不安全事件管理系统欢迎全行业所有人员做安全“吹哨人”!感谢您积极主动参与改善航空安全行动和自愿报告安全风险隐患信息!我们欢迎您本着诚信原则报送有关安全信息,同时建议您留一个有效的联系方式,以方便该信息得到有效处理、应用、反馈和奖励。我们承诺对每一位员工、每一家单位的报告信息严格保密,谢谢! + + + + + + + 姓名: + + + + + + + + 电话: + + + + + + + + 邮箱: + + + + + + + + + + + + diff --git a/Students/students.wxss b/Students/students.wxss new file mode 100644 index 0000000..9c2a584 --- /dev/null +++ b/Students/students.wxss @@ -0,0 +1,140 @@ +/* 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/admin/admin.js b/admin/admin.js new file mode 100644 index 0000000..6b0e48d --- /dev/null +++ b/admin/admin.js @@ -0,0 +1,20 @@ +Page({ + // 跳转到查看上报页面 + goToViewReports() { + wx.navigateTo({ + url: '/pages/viewReports/viewReports', // 这里是查看上报的页面路径 + }); + }, + // 跳转到智能统计分析页面 + goToDataAnalysis() { + wx.navigateTo({ + url: '/pages/dataAnalysis/dataAnalysis', // 这里是智能统计分析的页面路径 + }); + }, + // 跳转到智能统计分析页面 + goTologin() { + wx.navigateTo({ + url: '/pages/login/login', // 这里是智能统计分析的页面路径 + }); + } +}); diff --git a/admin/admin.json b/admin/admin.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/admin/admin.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/admin/admin.wxml b/admin/admin.wxml new file mode 100644 index 0000000..25f219e --- /dev/null +++ b/admin/admin.wxml @@ -0,0 +1,17 @@ + + + + 管理员界面 + + + + + + + + + + + + + diff --git a/admin/admin.wxss b/admin/admin.wxss new file mode 100644 index 0000000..8285257 --- /dev/null +++ b/admin/admin.wxss @@ -0,0 +1,35 @@ +/* pages/admin/admin.wxss */ +.container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100%; +} + +.header { + margin-bottom: 100rpx; +} + +.title { + font-size: 70rpx; + font-weight: bold; +} + +.buttons { + display: flex; + flex-direction: column; + justify-content: space-around; + align-items: center; +} + +.action-btn { + width: 400rpx; + height: 100rpx; + margin: 35rpx 0; + background-color: #007aff; + color: white; + font-size: 40rpx; + text-align: center; + border-radius: 20rpx; +} diff --git a/app.js b/app.js new file mode 100644 index 0000000..a36fc27 --- /dev/null +++ b/app.js @@ -0,0 +1,6 @@ +// app.js +App({ + globalData: { + token: null + } +}); diff --git a/app.json b/app.json new file mode 100644 index 0000000..1f0e0e5 --- /dev/null +++ b/app.json @@ -0,0 +1,55 @@ +{ + "pages": [ + "pages/register/register", + "pages/login/login", + "pages/admin/admin", + "pages/home/home", + "pages/message/message", + "pages/profile/profile", + "pages/FlightCrew/FlightCrew", + "pages/Crew/Crew", + "pages/Aviation/Aviation", + "pages/AirportGround/AirportGround", + "pages/Airtraffic/Airtraffic", + "pages/Students/students", + "pages/Fast/Fast", + "pages/AircraftMaintenance/AircraftMaintenance", + "pages/FlightCrewDetails/FlightCrewDetails", + "pages/viewReports/viewReports", + "pages/userview/usereview", + "pages/dataAnalysis/dataAnalysis", + "pages/z1/z1", + "pages/z2/z2", + "pages/z3/z3" + ], + "window": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "民航不安全事件上报", + "navigationBarBackgroundColor": "#fff" + }, + "tabBar": { + "list": [ + { + "pagePath": "pages/home/home", + "iconPath": "image/首页.png", + "selectedIconPath": "image/首页 (2).png", + "text": "首页" + }, + { + "pagePath": "pages/message/message", + "iconPath": "image/人工智能大脑.png", + "selectedIconPath": "image/人工智能大脑 (1).png", + "text": "AI对话" + }, + { + "pagePath": "pages/profile/profile", + "iconPath": "image/我的.png", + "selectedIconPath": "image/我的-copy.png", + "text": "个人中心" + } + ] + }, + "componentFramework": "glass-easel", + "sitemapLocation": "sitemap.json", + "lazyCodeLoading": "requiredComponents" +} \ No newline at end of file diff --git a/app.wxss b/app.wxss new file mode 100644 index 0000000..06c6fc9 --- /dev/null +++ b/app.wxss @@ -0,0 +1,10 @@ +/**app.wxss**/ +.container { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + padding: 200rpx 0; + box-sizing: border-box; +} diff --git a/dataAnalysis/dataAnalysis.js b/dataAnalysis/dataAnalysis.js new file mode 100644 index 0000000..286fdc9 --- /dev/null +++ b/dataAnalysis/dataAnalysis.js @@ -0,0 +1,31 @@ +Page({ + data: { + predictResult: { + pre_data: [ + { dt: '2024-9', idx: 130 }, + { dt: '2024-8', idx: 140 }, + { dt: '2024-7', idx: 145 }, + { dt: '2024-6', idx: 150 }, + { dt: '2024-5', idx: 400 }, + { dt: '2024-4', idx:200 } + ] + } + }, + + onLoad: function () { + // 模拟获取数据(可以替换成网络请求) + const preData = [ + { dt: '2024-9', idx: 500 }, + { dt: '2024-8', idx: 670 }, + { dt: '2024-7', idx: 345 }, + { dt: '2024-6', idx: 150 }, + { dt: '2024-5', idx: 400 }, + { dt: '2024-4', idx:100 } + ]; + + // 将数据设置到页面的 data 中 + this.setData({ + 'predictResult.pre_data': preData + }); + } +}); diff --git a/dataAnalysis/dataAnalysis.json b/dataAnalysis/dataAnalysis.json new file mode 100644 index 0000000..9120626 --- /dev/null +++ b/dataAnalysis/dataAnalysis.json @@ -0,0 +1,5 @@ +{ + "usingComponents": { + "ec-canvas": "../../echarts-for-weixin/ec-canvas/ec-canvas" + } +} \ No newline at end of file diff --git a/dataAnalysis/dataAnalysis.wxml b/dataAnalysis/dataAnalysis.wxml new file mode 100644 index 0000000..86cc626 --- /dev/null +++ b/dataAnalysis/dataAnalysis.wxml @@ -0,0 +1,42 @@ + +    2024年不安全事件上报的汇总 +   + + + + 日期 + + 上报数量 + + + {{item.dt}} + + + + + 150 + 300 + 450 + 600 + 750 + 900 + | + | + | + | + | + | + + + + {{item.idx}} + + + + + + + +    2024年事件上报情况-柱状图 +   \ No newline at end of file diff --git a/dataAnalysis/dataAnalysis.wxss b/dataAnalysis/dataAnalysis.wxss new file mode 100644 index 0000000..ad0556f --- /dev/null +++ b/dataAnalysis/dataAnalysis.wxss @@ -0,0 +1,110 @@ +.indexGraph { + display: flex; + width: 100%; + height: 800rpx; + background-color: #eee; + border-radius: 15rpx; + box-shadow: 2px 2px 5px 1px rgba(0, 0, 0, 0.5); +} +.left { + width: 120rpx; +} +.leftTop { + width: 100%; + height: 150rpx; + /* background-color: pink; */ +} +.date { + position: absolute; + top: 18%; + left: 1%; +} +.slice { + margin-top: -100rpx; + width: 200rpx; + height: 200rpx; + position: absolute; + left: 5%; + rotate: 45deg; + border-bottom: 3px solid rgba(0, 0, 0, 0.5); +} +.idx { + position: absolute; + top: 13%; + left: 6%; +} +.yAxis { + display: flex; + /* background-color: pink; */ + flex-direction: column; + align-items: center; + justify-content: space-around; + height: 650rpx; +} +.right { + flex: 1; +} +.graph { + position: absolute; + width: 592.5rpx; + padding-top: 30rpx; + height: 650rpx; + background-color: skyblue; + border-radius: 0 0 15rpx 0; + border-left: 2px solid rgb(0, 0, 0, 0.8); + border-top: 2px solid rgb(0, 0, 0, 0.8); +} +.colarea { + display: flex; + flex-direction: column; + justify-content: space-around; + height: 650rpx; + /* background-color: skyblue; */ +} + +.col { + padding-right: 10rpx; + height: 40rpx; + background-color: rgb(139, 0, 139); + text-align: right; + color: white; +} +.xAxis { + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; + height: 120rpx; + +} +.deg { + width: 98.75rpx; + text-align: center; +} +.deg:nth-child(-n+6) { + line-height: 48px; + font-size: 20px; +} +.deg:nth-child(n+7) { + font-size: 10px; + line-height: 10px; +} + +.info { + font-size: 18px; +} + +.module { + display: flex; + flex-direction: column; + align-items: center; /* 图片和文字居中 */ + border-bottom: 2px solid #ccc; /* 分界线 */ + padding: 4px 0; /* 上下内边距 */ + width: 100%; /* 确保模块宽度一致 */ +} + + +.caption { + text-align: center; /* 文字居中 */ +} + + diff --git a/home/home.js b/home/home.js new file mode 100644 index 0000000..abe0d40 --- /dev/null +++ b/home/home.js @@ -0,0 +1,26 @@ +Page({ + data: { + }, + swiperItemTap: function(event) { + const pagePath = event.currentTarget.dataset.url; + wx.navigateTo({ + url: pagePath + }); + }, + onLoad(options) { + }, + onReady() { + }, + onShow() { + }, + onHide() { + }, + onUnload() { + }, + onPullDownRefresh() { + }, + onReachBottom() { + }, + onShareAppMessage() { + }, +}) \ No newline at end of file diff --git a/home/home.json b/home/home.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/home/home.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/home/home.wxml b/home/home.wxml new file mode 100644 index 0000000..aa87a16 --- /dev/null +++ b/home/home.wxml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + 上报中心 + + + + + + 飞行事件 + + + + 乘务事件 + + + + 空管事件 + + + + 机务事件 + + + + 地勤事件 + + + + 空防事件 + + + + 学生事件 + + + + 快速上报 + + + + + \ No newline at end of file diff --git a/home/home.wxss b/home/home.wxss new file mode 100644 index 0000000..4e93cdb --- /dev/null +++ b/home/home.wxss @@ -0,0 +1,65 @@ +/*轮播图*/ +.swiper1 { + width: 100%; + height: 450rpx; +} +.slide-image { + width: 100%; + height: 100%; + display: block; +} + +/* 容器样式 */ +.grid-container { + display: grid; + grid-template-columns: repeat(4, 1fr); /* 4列布局 */ + gap: 15rpx; /* 项目之间的间距 */ + padding: 20rpx; /* 容器内边距 */ + justify-items: center; /* 项目居中 */ +} + +/* 每个项目的样式 */ +.grid-item { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; +} + +/* 图片样式 */ +.grid-item image { + width: 160rpx; /* 调整图片大小 */ + height: 160rpx; + margin-bottom: 10rpx; /* 图片和文字之间的间距 */ + border-radius: 10rpx; /* 圆角效果 */ + box-shadow: 0 4rpx 8rpx rgba(0, 0, 0, 0.1); /* 图片阴影效果 */ +} + +/* 文字样式 */ +.grid-item text { + font-size: 30rpx; + color: #333; /* 设置文字颜色 */ + font-weight: bold; /* 加粗字体 */ + margin:20rpx +} + +/* 容器自适应 */ +@media screen and (max-width: 375px) { + .grid-container { + grid-template-columns: repeat(2, 1fr); /* 当屏幕宽度较小(如手机端)时,改为2列布局 */ + } +} + +.three{ + margin-top: 20px; +} +.four { + display: flex; /* 使用 Flexbox 布局 */ + justify-content: center; /* 水平居中 */ + align-items: center; /* 垂直居中 */ + height: 100rpx; /* 设置高度,以便垂直居中 */ + font-size: 60rpx; /* 字体大小 */ + color: #333; /* 字体颜色 */ + font-weight: bold; /* 加粗字体 */ + margin: 20rpx; +} diff --git a/image/乘务人员.png b/image/乘务人员.png new file mode 100644 index 0000000000000000000000000000000000000000..e8dd42e4f7e3352e8c31cfabdef0c4a0f421fee0 GIT binary patch literal 5266 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 Y18;4PeKrwiMF0Q*07*qoM6N<$g7-26tpET3 literal 0 HcmV?d00001 diff --git a/image/人工智能大脑 (1).png b/image/人工智能大脑 (1).png new file mode 100644 index 0000000000000000000000000000000000000000..b17bbaf7d496fe9f6f6bb28bd93152882a32af9e GIT binary patch literal 4958 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 literal 0 HcmV?d00001 diff --git a/image/化工专家.png b/image/化工专家.png new file mode 100644 index 0000000000000000000000000000000000000000..609349f4a2962d1ed0fc00c2cb74fe2ac61a3daf GIT binary patch literal 5094 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 IM6N<$g0F~r>i_@% literal 0 HcmV?d00001 diff --git a/image/地勤人员.png b/image/地勤人员.png new file mode 100644 index 0000000000000000000000000000000000000000..52c63997a229ef68d9a5a91c6ee47ad6ec50f52d GIT binary patch literal 4250 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 literal 0 HcmV?d00001 diff --git a/image/基础折线图.png b/image/基础折线图.png new file mode 100644 index 0000000000000000000000000000000000000000..5c1a0e5941e1506dcd6da0a9e53eb70f1e71f8a8 GIT binary patch literal 23783 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𝔜GC5Wz6tjwBPgyc3w)#$z}B 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 literal 0 HcmV?d00001 diff --git a/image/基础漏斗图.png b/image/基础漏斗图.png new file mode 100644 index 0000000000000000000000000000000000000000..8f752fbec18f1ffc0fde7d6acba00da35de18c62 GIT binary patch literal 28216 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 Wns%Lc0{IkM0i)YUy&4^-sQ&@bJs9Tz literal 0 HcmV?d00001 diff --git a/image/快速上报.png b/image/快速上报.png new file mode 100644 index 0000000000000000000000000000000000000000..6443e4d8b11d674d4d9656fe4f7d63cee425d58a GIT binary patch literal 3351 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 literal 0 HcmV?d00001 diff --git a/image/我的.png b/image/我的.png new file mode 100644 index 0000000000000000000000000000000000000000..0dbf09dbe1d0a9254459c1a298135c8e7f66287f GIT binary patch literal 4154 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 Ef=02FJpcdz literal 0 HcmV?d00001 diff --git a/image/机务人员.jpg b/image/机务人员.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e436b4ce04754afbbbf2be977bde3aba49e057c GIT binary patch literal 3921 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 literal 0 HcmV?d00001 diff --git a/image/空管人员.png b/image/空管人员.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1aa32364102b874f93c6fd1600f6172bbbd334 GIT binary patch literal 4745 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 Xo`ywk3WQcL00000NkvXXu0mjfIS()- literal 0 HcmV?d00001 diff --git a/image/空防事件.png b/image/空防事件.png new file mode 100644 index 0000000000000000000000000000000000000000..e390d3353a58580bcc6baf16706a3819dfaed93e GIT binary patch literal 3865 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 literal 0 HcmV?d00001 diff --git a/image/轮播图1.jpg b/image/轮播图1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6a0c8de9fe1213215789491ba6dfabf08087187 GIT binary patch literal 21683 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 Td$WIO``0fuZ-%BW4qov;7Eq=3 literal 0 HcmV?d00001 diff --git a/image/轮播图3.jpg b/image/轮播图3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40166ace72cb34dc6ab013f69f421b36564c7541 GIT binary patch literal 9716 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 AIRF3v literal 0 HcmV?d00001 diff --git a/image/面积饼图.png b/image/面积饼图.png new file mode 100644 index 0000000000000000000000000000000000000000..4883277a7b5334141dbd353392ef93d3d15f4e46 GIT binary patch literal 42429 zcma%iWmH|w5+x84EO?MWaCZpq?hY5%;O_1u1a}V_F7ECc+zIXw+}(W+pS*c*t@$y( zfJ@(Vx~r?JcJ107q97-Z2#*5~0Re$1DIuZ+0Rc4)0Rg!L`wsZzBS@7G_yOstBrXI| zHu`A~0)h}iQbZ8srhAwUm;6CA<>p00#alI#W%>6fM8pyA)gylx%1|tDIIM2Tx2n4EfV z<8kRmD#ohDCdMYMcRYN|PNFSmy$rlw7kNd9E zbH2mb2NGMx`9Hms^y20Bvn{zzm{wMnzqUGOf}8GY%IJ;rx4(!ylfECpE4AbvFyooi zjnH3agVv;WI%WC1tR%#SUlrH!EFe9-s9fnJgRA}NWMJL}H@kfbN^w`X#Q1bEqEIMkXdjy-o{@k?crQ;4T6M9rhV`cBGL$XW?^$(v@Oea3;6I zn9kX%&v{(tpUOV`t{U^niZ5O7WbdtNP$xt8v2^*v-}JSJUBHG|ke4NBdwo8wLcpSD zc@nv;_qIgDm`WRw?K%(I$Lj_krVR%f$}qat&`xqjwG43ED;zaPL^0)u@`C4P`B7}@0{7WA-Zp~X z50sv8j0e?f$Bi^kxW3!51*%Mi2_JZsmqYW}j+B)^7oWSNt18xPNy7M_^?z`?+AyGw zv{CZk?~+WyA26?E-=21-rZ6iTRIs?x+R$lX)=_$*9ImuBC;k4yz697tXk5mpnohR` zdnk!PZNjMgvq#AO%*>3!hq{Ia^(1$cf+xgB46XHJU)pz{df2-(9BikG4xil~&-#S7 z^5iqi5P}NiL?}D9HDzUG8T`ABmsN^Yuh7Q4B8^N<4LAE^s-E;Wo-QZlH~M2p0xwne z5CnO=Nj%JrhGHk1DkLN?tQRQv-MTObpF&Wh*1dDan&6{uI zMh4I+yG;nbGXv8@3=Bhs9`| zb079C!tHK^1Ws^g)b7iWG;?QNX>9{@RUFK|>$+>g3GTd+yq5PwnB57-U4JB+e=(~o znRPFel&hlmcK&JROQyPZSaT$aFIO5#JJvMP%erQb8LH3Y27!14tT=0dJ!CETemm8+ z*Z1YdcL<)Cym!^-!J2U`Js}~tx#IVIn4DovVCqGgc8DLPg+w-A5Imm-^$!glpkht1z&xWjYS+jd z=L_cYNi;XMKQlkJoqr3kQz0(u63x1k-!kY^119zs0keNwbZEInX?u+Sg=fX%pj6tS zs4D`|GBs+fHv+fP=g9-4sv4+m&{nbQo|7q-o7s~h|B11&V4DF$hUfGwCX&YV7e|#I z(QW&DYiF-Wnhk2CRu0z$)8}4_4dx0UJ0Dl%uab>K_Fdo-R3#eea$fP3IOqK8;5kO?XN7CLe`Kx-M;LX`w)4 z@EJGs{zIiY;pJeCoAzexB7*Iu=O&+nRqha>J!-C;^KpFxedrri40z$`x3EMyA1`<@ z{G+F8MavU1|Dyuik;MH{(!;Ua#Rz+)$w*l@6Z_lmlQ1WyhZ9mS=Bz^{YyNR)C6OC*tXFp z^nnCR5Dv>a@pEEZaxlTMfjzFdRr2kIAsHsgnpM~&|E8DkN$ZUeSoz4{V|AECp+L0f zFE|Ry9)=97!$wMsDAXO7`^&xGT{@aU^DFJX{E4(0XeoRSjYAeB(^gD0%?%vuVK^FE zGP@N?+XRn)U|L0-S@=7d^p8&8S~|21iALqr-9DPsVRO5jG4Sjm1ai2>RHk#-8_0Wn zWg(Luc-(RH?(l=;?fiZ>J2CO~2eWBlFDPwn)LXC8KvV`*n>oy4@8-Kx+U2IxybGez#+S zHLc0#d3T}KbR97EWzUg)q57L|pY-H$&X@sb1eq+if$=OhICFGKvz#&M5sX9L49Uscn=*fnuI0B9I zK2#J9$-^dg@N$*1vLGa2bKsRYvQher(LF?^#zL zNMZ>ylj^Cu9r|WlnD1oONoNv9TGSI`zsG=OVe7^mwlBfJw;o)8CP;OofLR@S2_|Mw zTuSd(youvx7pTDiIZLMrxYZ5{)*Tc8ZH5A(no=oDnyx^9@k3>1!n_dCvoiAo zu9gDYkUyC!+Vn)K0(}IDcBmhRQm3PBuIVDE?#?DQM+n2Oh_x^*BvDiPWifz;#8*shT+>qf{c zHGbDxSGlqnPf-Dd*~*+r>L}5#f10*i%sHc**mS7pa7+w6%_ew)mFGF@CezxNyy)!a zqjXP}e&`g9pR?i7g8HEX8lsa!8uAVux!Xx_U>X8ZE zxg=@=irfqS31T*Tg|AVS%XL$6o<3nGZwos>Bt`Q)CRo0S18^dZJf3^ippaeDBZ)pS z`VoO9RzsFw^eaWO`$Pu^&qch4#TR$ zn0ceAI1e~wcFU13<3zqTg(~qpZ@7@{VvV6vfK3{&8voe zqdBm~poyv$tD2{xWh9>Ahk@jqRVmE_sT^uiO`x1{`z37T4KslT(t7WDm$!D4MQi(Y?P#Iw*D<-%kq-yavO|O(@-JQ%B5UPr5rIg7zWhw^RX#uK zr%20gSR?+c_%BDX1#It~y91w(whM;*5r>Nb;k&AY>K3=lfCq9d=6tmQYl*X)%S!m0ojO?iCIN%YuqF zdo#W=+*qt-PUNZYJo#u6H)elHoq5nK73Vf#ibO$vP<9Qo3Ubthrbg z%lf}ez)xgIwCQ_0vf_VOT(!D2Qkg;B6G+`pRnmGqp=10k9@PnbH5Of-nR& zSrg<6{p~iWh}!GWe9BqkK0jxDw6jee^jmG#CH9wFDSI%3{5ypWxc!A?@Fz&+AWp`D zsGpYHVjoX-Vb}YAL0F6(42`6d=}Q#)36ddYH;Enn%Y#V#web{-i%c(n1V7o@GFuVi zQ_=VGBQr4Pw6d?by-8)a?M2a{n# z?OTJc9>TgOTdenK``GLQA%)Cop`1e)UI3M#psf6DR?nCB@{A;k2kl<(`eb-mMzl^# zOH24FG%TzVsPjdg3sC;u4dz#>qwV+)q}7Gnd(&PKR`gk^vZKZNAn0G6-w{+0ph~+d zR9)gP*_D3e)e*9J&Eb{*NZ#jn$wqj(=oBycm@S*irelyA($49)-943;nBa3pkRAwc zar|&-se_HP_MH@m9c@~36sk(}?=4ZK(3etdEzf-$cjJ|SQpa3XRcU#?SzvtutEH@r zKIi)n1(H1zR_ixU;*p7u_~+$_iA`!mLzj0Z#2vj$y!Z#lQj>G>wqZ_B@)QW>bnzuA zIVlG68}x816WL*Wc&{vNQG!@rZUmKazplPosV2q^19#<$FDU9CcNJiP%KI=)z^2`O z6of2(p_4Rrp-s<{sE0Xy4Ui6}w;NF#534VHGv#_w)5U5BI9DKQJ}_6AvcKNZwc*a0 zpWF;dDxThYN9<5n{$~;Nph~XNp5!zRoDNfNG?JofN9ZLVtdM>6zRZ2pf7}}doiVrI zc`OX8^3>8X%z}K%1t4k$3B1?7V|h48Yjj7#9UBiNe%a`aXbq_2SWwl{@|4_^y?1;V zOrWXsx;w}BYr~gLq8BwbHkNm{FZ!nbJ~1KTDn~3nKEC_YNNrUC zQeS$PA?iFb-!0+g*!lVS@8nEAZ!VTz2Se~Ss^en;0k|KlE>c3)B^(uxw_?T)8Xb48VOMmTU49+8WY^TNkVgN|IYY?3{GRmC zz0F0_H_>oARCW87lYyap=X>0|dbNqHSyp8Rm7c{hKehDVP8mWW0Ooq9NcZ$LDb&hD ziMlsuywr>n{5a$TRNh4PB_L4HkR!%Jmq^f3B*IyaWU>xO8jCtGY*4yUd=OXeog!XH zYJ9})>S52fC(TYho;zzyxhW~vm*`Q^#s|@XIlIbX$F?4Zx+RKA>udJJnXCQc@<5lZ zwRVY0XY_-a(t|5@*5)+QXGMAZze9!J3J|jT2#dDbhUZsZPF9xDM`F>(X>U>(%;M4E zc(~|XB#(Ej&Sne^xOuqxzBkN8YB!n*iH&SBHv`C8feFp^%yeQ|C{_?8zK$sgs=mao zcdU^Q1pF7zgaqsq5{~ zg^ltBw10<+xg>}Xiv)0r_(FGMjRCsBT2HpY81Iet?vMtpOD;HNCn8Y#MggsmT#?Q< zTP(Cgd}EX@^ui-MceB7g7)(xa7%5`XxH7VKDcopH5~&S%mA|hr;KfH3r&NA)cFCA-Tq$CaYsn zPo@yeLK8zU>67riWq7PL#GUuUpKr(pt8Ly{Ue+1nPrKPs>rXeUeE_B|x%I>K^!=`I z@=uz2os$qq99?k@)1;EY#YI$l5d{GP|04zgEeQqe6fI~IN_|ZyYAq6tp z_kzUZej+@FMh5q`++-F4_B8BmbFxDU)5Jb1%(v@P=&V}%A@ziYd~pTOL;aGI?m0`j znbPuO@wn)$QBd4r7WlH;i>OsSS%+j>Aru+W%S!T(6I3^0D86f`V>@;m=zDL~HG^ym zDSW76%VPAs;anMtKid8~g=;b(yjy?o(mUiPGdTG1gJin$sy|uNgzr%l8EWm?ZZ?~) zO7frN+#&HAhgCW9mih&>Scf@|K1lhrMJP@t45XWQF3XMsfc{Y(G?J8LA?UzH)9i zh(#WJ66{Nhjm)5=wHW>#0o;{_@3>YL2nJn2A)Gc3mAE>)nH1`YD-6%s=ttJQ&HN9V zSb<2cyEBZ^S;_3Sx?_c4hoIWs8IF(S{{RYoMo575jypO^_B|zx#4TV;PBsCjl+D3@ z`YZE(zV1JI&AY5Z&!(0hIzph+B`lcugz;}1 zMBm~skf$lm80=e6)Y+FIrbBcsFWHms{a~QD+SXJT_rBM%RnW`*vmcJU!t62T7Hl%t zu)m;p32qkVoBjU>l(-iyaK>}{EcdVZa-e1Ciev}Fmx%ux84*IY0)QzGPVk>$|Fm@0 z0pH+~^8=;-H)ivD9m%OL2{qBhON_^WU-+%2CzUKHGwna7;R0ZmEIa8Y3Pp$fZ*=sv z{Jn(4#Pt|){5?+l&-0?J{QjpD{C9Bpo`*~T3pyxAO4e-4cnstw^)|1@5=5Wyn}hi>t%U)?+$}q&rm1c`>TGHk<8I7 zuDitHB3C8weY9`6-!Ek$Zqj}C$I%Sl<|OqU2H|40^5gk2O$Irmq<W+6@)r9a8+JidO)T3Lvf>N~A-my_wOn{k3s+8LVJ0qW%dZF;Bc=%uT~4 z=_NuueZF0-L>fr>a*Sk#&pT^@p7}L5`KezJbD8e85!?ZGVF4TyJHkA62+WGBLM2YgUe+kst;Ok zR=U2vMX&?t(CC6ufI3fb_~n@Cj`I#{LI%4UmPxuDC12u{ty@Sp%>v;>@T zrSpktXODoP^%70j^QczWJ66t+Eas9l^?pj{Z){&d2w;88Pc=q>y|WD5-Q6X+tE5{L z6sf(oz->H(G;%u8VNFusbJGeU$@zK=elXl3P}ub_Aj?=?u)x_9xZ7~P;9{+egMW|n zC5`5qJ;fUKTT5V3SJ`tp?}G~XEoaMmgpqltE~Nc#MFXa>+9^qg9`k(uE;syM4@ljt z+d>ihnFv7k+vOtc0zAezCd^=nMSdR&By6mIEXOX|pAfcjc zTt^M`A!Ska(F9SXNwxnS@XS{p|0?JEdtA2nw(U3c?$ux@) zt10}=Dv}(KgtxZ5V&I)r<(d>?j;K4am>jr)&eTCI9$s}9@$Z&T7a_Tx70Xg{UnT3x zS>$u|+1g&7PHw1a>R+5#>}hqn2X@42JW8}#6!EO1EE+GP%wR^%I9=uO5&Yl|zK1DC zC(xOhr&#?BsRhu0G@Rc3&Gx#ikEBRrH3wlwedXM>{b4zpatkJx5@UMZ%WO~XlNAh# zk7WH+T&RU=16~zdo*gGri%B>jh77rv0=LJ*j;4~6v|-0kF|mWDw?oA1CcT7wX5es!B-J9rLhb}# z98>*u;qzAjC6Q1nt8JZLj2MKWHv`XFFJ90@?bXu0&EM=^2?gEY@9QG9!xhI`u1jB zZ!U*ne{DuCxSl3gSv?{Jbt+O3h-kQ?DGN+*A@}&k^X#bQD8NS|X!-6s#Y1>F*_PjY z*+wV$=bZ0U=t)wt*{ozbtj0bx?g-YPD{lpgTSEv9I7)mH+<7>kq$*)+;7m{nR~Qg7($yU~7L?M9&TZNKpc*G{=OE7toQ$Fv#kWA*ITY|a zFFIlj4LK5S5YEfd{XV3Kl=LuM|Hjy*+jH@vlsYvfrNU;p={MiW#1V~#X3zd~vF8z2 z_md)Z(H&H`gdl7qI;e*mPx9lb9()f%>)wZ%?omAp9Zw+U*P2RU0`x)!1f+`)$)Zx! zc@Z6>I<=11bFFZJ<*tH;bla^C`}~klOKxqPJ zvJ^wIN*FrWFBi4~9cOG7dKU#-IzrRQ^Z=LZG~HQmty#K_lagwsxI!MMH({$kC8W-o ztei9npNP*no?x4FHrOp@?H`u-ErHK15m21^*ILf54^U(thG+uk%biqXK-I&+XYeXU zyq6bWzP$C0WZIMgK@-@@lR0H?;-86t+t+p%@BqoCj!?jTx(>Tnn(HiV6}0Bsyni}o znYX_pNTxN$MA5nRiDp1+d;An|6O@PRBLvYVcl@jDD8A5}Ro`|~niewzimqJW)1+@0 zG^&?rGewvgmt=xexGRxAfF%!o9i(6Y_H%&yddiVF`Vv}Q_i9UxbG$tHy0~u0=yqn+ zC$QP(Q@HIiV}CTgebyk3Ap*iYT!FR(KhRyzx;3A<6HOgd$_`;`%tl=j1e>I%5> z9#Y0&K4p8icJ*%U;@$Y+o0OEVX6J9mCq99!gsp$6i_}iAK|}7UMMr|aI$bhI2-|;o z7aBIf6yOpvVO4X*gP5m&rQVuNlg_Q*1e839`f~mGL{UpF? ze@~2JUP&Cr!LI$jV-iKg(2()6U3ZL~>Z6#RN9ewU_m}Zw!Kcqm4IJoXJwLFyqMvre zY!dI}z%oYrLE{%hnx0ZO*^wrFR+%)sM!i-(ar^_q0PlGo&UzIOpvaFIf2(RjSHcZ>e+qB_Tco_! z)tpM7C4f08LUVEZRhvSsKB|3$ILyxWB&ta*z;vbW+3E;CyGv%uLN*CMLFeig+Y?3j zkPr)Y0H%R02mpE1cC&QWU|IOr9*--u;Fx)_7R_NVU% z!1W5MprGu2==0ZV;VlE!n8Dg`_Z;U^?s~TgrOlTM5hu1a5S#Tjbh}k=fSEWt z9B_S#jRMQ59g*OD3GvgaY|GhlJ!DKpdU|?Q+9G#;)pFekpt!gMcP--bdawX1^$=l4 zAEA&-+cg*VvO3 zr)XQxlVM($zjRxCHa2=8zQFDRF?5#g zlg5K7Any73ipN7Qj#r6JoO1D~(>U&7J+U}UQTtZ*GUYFAr2sLYk(49#4y(tr$s&%T z7Duai)x8AUG_W9YD&o=03R90x2hZ3U{|H`ba<&{p@Y9a0amykOt6Ftk_2xAvIBB^+ z;=BFx4F$^Fr=CM4fWf2Y78E@6;rjLf4Rw-cigt{cFVfzB_i>e zNbV!*juP{Dv&D3gZXtCH=I5%q?(y?4U4d&y^{Yr*di6Cm`g;?(C_9!k1I5qnnGa{v z=GG!6<}rTUrkpV+k=_jYym>U}6Mb#hTF?5JymJ!PfFw`s2VMf-N$7L3mTpc7)ZZnu znFMfb0vY2*K%|Nz{Dv}aO+jhF7&|IqJ+)|nVU*}8{%rM%$wfAHD=V9M?7i10jS*LLA8$qxp z9+OMMaD>`5@>5bw#;tq#s3)~75NcF_jj7x3|Iu**6kqfULs*1j3kV)(>petgh2&4d zp+b`PK}&oSG0|e7AnA)LjfZg&)+i&~nCHr;p9G6Y?@p&m%K}7;Qy2Zm_z%REe?ZI) z1UVIw06ZKXgKi2QDYLH&)AragGI`D3UlhTvB(UBLCu)NP8CPk3hlyegbQU1p8jPK;e4!CD|~T0!E4q_!&k6Uh=1xrZDU zW~s^eiR~B@8)Ek&PItceo2(bHEqIhs^SB8x1r758xgy?6!IG1T?~=n6#D{CiuvKgg zz$yG-`+-K8>?E-X)VM=Y55k?4l$4Nr53Sk{1na#S_lX+#vz_s}DRfsMK#vlZ(}xC# zgQUP5N!m*cxeV`^kfoACBj^NM8kZYbqVw4F`%rx)WWvfd%>8b_E`@ZOj-QKp(WVz7 zhDX#eHWDqv#@VB~Yh6GCKmiFA4xGajm_#5qBk<5TiFl!9j|a75$Gn@E`Pdyv0{M7$ z0P*$ng1c3jAB1SJioD7zco!|TTTFvgXEcRySfWxKQu?bL^+N-~OM(LUa~|#DK{! zWy|*QH(#XyT0kEYc-qKkw9Oy`sPPH854fKj^cz5^-Qh0?Y#E2g@v}o2EwKR+`iug@_*%+Ism`QYZQQv4fj(uC+xHQ zI_J|LHHa|SU4wn$1oQh)S&v~LFjS=W*Bd?nC15Ty!cO*W;Vyk<6$hLW@0FkEqEsRX z_LG8=QTKJ`s#_MIXL(!sqz~~h+MUtK#EEQHPOMn!G)Jja8XwQLHAsQ+rwkY7i`|Qi z_4`;101LzdxL`jA+hm^aL3cPrtrT?0D()+i#W#}DH^l>4s!}Q5 zTzk>|mO_PJXS>b}N*VeI;@SK7LzCQzC z&jrm5(G@hv5x5E#lsez5^y)N9Iy8j?#C6}BcXlOWFH_+l7{(&r;4-<9W@DOffDf>y z0Vrwx`K_=5*Kce3zJ6T5m}pV}@)J5!-Vo{d1nq_+aR&?YY+4?fW&Y!Mv>*MqNaHjr z1yqQI;}V4ugE|*1H%H*#l6oKxq-?(~rQqi6+0fWiL6e!6kE07b;~cJtz)MGiv3QC| zt$R?UXz7c^nnL`C$!pJTJhJm}SnO9c!IV~rL9DL{l}Uj7XV&xaltN)@bntD$PFo=NufSigy@C|8rLe zN~Kj5Z+rj=$b=mhR*85x)sLe}n}Duu7l=)Sd#}Yp6Hz`AI^-V-XNdL%Jiq)Np7FJF zZO9Bq(vq!hiV%x~rP@2rLiM(S56l#om64O1RKVg=UYqW4VxNVeON9T_!$93G6B%NW zP-jgt2n+ZC#|~{;$|US=Xo=62@VGIz`!O;$2#7#tuf(qj-70jV@r@<{QsWIF!M9zCT`zM*_oW1FZ*{*Vhib3s@q8 z(nP=QT7%$Qux)dSvU{R+ML3;`t-!n>QY^jF`O?zba{*&G-Xhq`E<^VkAYK`^z^uH$ zV82ReD8T?ZsU@v1bpDztM*^A=&bmm5!ob>4}`dxj7T-U9Moa_)u4anHfn zrVC(B7Vj&1&v(*3vh1eY7a-6R`0z%sloJVBE{wpSeCWGyfVa*Q|xt zs4h!>A^#w@nq?XAEH06H^^D|;2^usM9(%i@zZ)I^wFDD$gM~<@bEL-3+ch&nH2g*wu#o z*`+T5T6~miyGns<@co6Nb)%G`N_bqtLFWIGo=e9V)2D<1kUPsX9wX3uGo@OdqM-Rz zHtU5c!|S`9%swsKR%c1M+L|;Dhf!s`WC>%`#lgYBXx?%rn^POXfnI%4Cci z9rI1@w1RD+=9(H%VnTziwe=AhIOXo{e28HKz(~6owTW_Kxm4738Qt*Q;$Tf8N@_9a zVHy1cQ=dbALju7OjWLX^Z4kH9YIgy3ZSWW%-;G-Q(d9|>#KsULk?xD zlH!Ou(@O(~=?iANT|hO79NZpIkCdCS-&n4+xL27IOkfc-PN78P1(gm1>2BIi$uu@X zKpN(>TE5wSFfZ($d=qZBsA_fS>w>!!Sd)(FAc26J2S%PAH)N^g!vSY`hoQZQCUu!1 z(9O`m98cUf2va6eN2=G(QKJ^w!rYR4ibXG$U0pTNwE}@qNBr`hLjuP(&05fz~fO3Tq%YN^)OL*%za~M(&l&$AYUlPr=pq zSig-f_{35Hb#FFmRo~9Hd*eTzLtg|yy4}F5D&p9y#y)3>fyAZtf>l5la$y%mjSVK5l`Ii%qP5!aA!vg5HsZ+J zNw?L&O@WHpI-kSpD8BmwQ&SXRHu-EJ7F#6+q^OK<{a?(jI$l2QiCq7HQoc0|K%a#E znLDt8dMEKo5`@b%G(7o^`;*Dmw`?Y3nT%~YdqLhj{U!^dl3Zp3R4owbgDOb+#s!lB zWCTt*@*cs&3PpC05pyBQH9O_&p()xr4A2tjAEHL>EwKWGw%UC4AW~^8;=vFLsTT#d z2T2gkhDdI(9~JE5x)AR%mjmhM(B$a2UHbU5^y~+`1P&%LWV2#oMeE*5qRdN@)6F*| z_VY$Zx)~ZxeSH}G$RXzBMG;NO4TcEo-JNPJcG2QaThKLbsKi)(K%0uU*_ZLJwuVMQ z|67v9R^b#qZ5^Fu%h_lwJujx3Z!nAX8X*PSP-i=__zI6X7N;iufsGjRJ`X`&d(k ziTsIsW@y3@JLRVM%pS64hNfPR02kud%rH1FA-zeD4SLr`7tQI)nyCE{5bo)tUF83w%)9dPC%W6`O4 zd;%8D$6FT60!eS#Ux$w1d z(`@rgtR84YhYi^m8EfmVYkxc@USgziAsPlx(n_Vn3Z|<&gxD_c-}R4UYLRDDH1YtQ z%d#^<+u#l|Xx;L{U#@Z)!4f9leBr%V&Fk`Z93Tw2{YE1wS?Mz{A#4FT;V>irzgi>u?r6`OG6!x}cG&TH%nxu9UN!*M*^04=8QEM^U3gdc(D- zDo2RRXMm>q^G5f~N*t-EEvJQ;&;9a9hfB#7t*1ZYX0Cca+%s+WzU(tOSP$SO{}fV> z`xzP4u3DQwFELfbTYA{P^~2J5vCIWX0?tN-dWjULW31D+WkP}@Tn7Pu5!RFAcH`!E zZ9xYDc?gu&NS&+Ji}Zso;Udls5$p%nK0YXFOKk`%W&676ncPOGy;tcUQDGOq-PZ%I zDO!*utDf$4TF@s#DEL~|!}737LldLk&R*FO)606QDgC-8368n-uGUA`X z9f=E?kJD!>&0ds6w>v_Hc$^I{>)5xNhg2mO6MoNFaWv%sa!ujxSTLTP{FYpQOT%(c zL*lX-IFXAzZR$||*$dgCt{Dc-!gB1*`AP~fS1re-e#=y}IZeH&<|vzzTUk zJeoL(IleYrwLO_#W-3j;i;}1o4GG~RQ%u+ZCBx1|1CPT+qIMqefOc_fZFv4I=mcGZ z5h|@ihONoe;UVzB%}b-suNTMKoyv@jNEEO=baPh3ipz@+%e(laOA_bd^w@|Ym{Io2 zcoE?>1w)Yz;@3qR{p^>0K;xL3_}U1A{IjfBI!TUilUnqPD8G&s#l)_k3?!#BpcmkL zH&w?5ZPWZhi1X$=h?~lKt(@G8V7|~@DomLZs6U*5UYRCLfl(|hC7E4YHM%1be#dO- zeMb9JfFtSWu}j7MMB~8(Q^<^q>#@>2iCW{l91C&V<`Wd0ZythLZ{2BU!@>$p>^EyxHnb|TTBZ`1(SqQGnhoJd zQF6OQZ@p|L?3YfX6?mYv4wpIsney(c?sVMI+gWk$4C zKIt7?hT^HcmV1*WQM*#z@AiOj%=`77SE+l~VYjHuIq_d!_bM7Z8!i+j_M?!`?Bvhj zPC`NRB}fZMbo>Zst`#K~v;!*vsLD!Vw5ke`{omev68~nWK(GNpkLyNaa+#T(>irjw z%>%%57Up2TU(m1W9j=(!-s8g440+icgp@j+3`n>Aqf{-~7z^2aX`zT^moYdNco?Uf zwZI87z+Xd;j}+bjW_kSnN=_h(bO=Db%-f+NAQP}v^qk7JE-~R{cqCDIh0KO1a{B3S zydu0lZsB3Ym%7~i-@9|B$;_)bS2`a|5t&MOErMZ5xq-JZ^Mq8WalbF*|RsEX9_(R_( zE&g^XWFn3(c|Gd~{mSi#WWVuY|C~QPROC0#|8~h{Wt;oq--kodxl!F#fuBl4Xg8YC z2%Puq5hF)mpP_YlH|1;WV?l{+M1} z1=bhm{2D0Zp)JFWAos2xR9%-^GB(M9kd3$=0zx0&&6Gs4zt%C=8{2)g!1{K=YKC{W zZK&s?koBERZiQ=n3g1Ks=U=^{4mJN7M^0bIm@K21$Iz|W0;i={C75%%YkZ|JFY#_r zuK!I_(QA{&D0VVitIZj6rG^3VsAXuaJC=pLDh27vVwUxh8|8kKZ3@dG9F`RK)s$@O zQ+mR1k2^hK>bJF=nB-yyw@|YX;pLS6(`0*26u%E^Js3QqFhzld>t1;KOoFLda(%xP z7iI~$qwxu+x8*WKB8}D)Y4h2!%)3FCph8vOwZ{KUTVC4ZUGnR zhLC=W;h_itN;y^=W}4?gkdoplTjMh=I7wsIs#Yfi7E$s4ni?#g!t?#wY0TM3SP81l9G~c z(3)i+Y!~ZF#T%H3#)$8<)vG;#rUq>7uf}#jGe#6M<_$DhTo~xrp38DpO&BiLdcqo( ziQT7S)SuHCk$zRroAl8gWGX}Sy1pA9{~~$AV4p%fy-m>PUOxk-yO9s%)QnAx!2LR6 zSL=f=py&)o-#~8V7tN%g!b%Nv&;*R2>M*8dc8}&N--Kb(bw>F<8n*n^H<>!2I1&lA zSP{qP6O<^y(Fa@w2p%ghL_n<{&jqv6S`b zxHw12P1X0wxdIg~KmNpvh2|E1nCNGe-_zeilW{r+A=zuby%DE2`GLItXl>4-WrG&1 z2RpZOXdHlWB>_$m&2%To^%+iOM+RzigeT38?3szWt$Y2eMW?eElH0qtj>qD7G>b`4 zapT(Q_?A}z)6%YxB$|F@^auI=K+Kq930*i{y2JXdQ9)wCSqi^&cpQdS&IU8U0kZBxqVgQ{bmezW3<4BUEupUYAa=H2#6A5a!+=V;PD z32DlYV#=3OQc>+yjs@IqkED7Av}i+fY3HPDF<-=^G=3c0w`Zcq(lGHhyqYc5!rE`w z4oI8b@p-*H=XO*(ODOvgUB_UvxbM1Q$vW+JxhYxfDm?QNp)>iXRJKxk)nps~bpB7g zDBARPnunuJOK@46FUxRa?vKX)E4-;1-q~bRqD`-hR$^+|Ez#BfF*3A(^SA|LkV(?f=` zchbS>F;zSUu48^DUinwyhHjlik7LZ&{&c;Vs8`|EP>X?nL20endHu$ zjPH*2@RgyQ!PRS+*}XHf`AnRa6h)ShVE*~Nb#KYiPBCmOQ`4#Sg$5Uoz_iAD*9Dzs zP#f-RR;zT&wZGLhGsjCgesUAc$4ylWGqt1y(pPM$-`N!<8>6^6FwI86di92as?4L> zxaj$Onc{CBEv>9rb=c@|XPB9pe=L7;K7)^*EUML!tatnutXD)I$ug|yin~I}W1VvN zS==HpeJ**sHhfBY-b`8a$#EAxxNrjKleA)DQk|Hn7!)1^-;ZB9K4xQ3eO0urpye^- zcR^!P&YtW|T8Kn(`SR~?@YyMkp3H|EMZEDF|9bQQAT!AlG`{|buJR}-L7aBN(yJ2m zpxl2D<1o$0cTU@H6}*q-mrrZNq)K9e%wG(_4Hs=7A#UwOe(VL3;Lf+J$Z3g*woHYR zKyv=FKJn#etR;=0ndG9EgzfhG;Sj9$zmoM$A|3>)lqHc0FGc2d{Yy?xt{vwnNmmCU zWGF01VTT_o1Io)&PG^oklXlrx9TDhuY1SJp7*_oWv7?u{O>AFf8^ehW77aNHqhvEgU^fiTb&weE~%cM zE}?ir@;fzYm*{){`prEwhLIf4Nav(iwG}?T%$yk;$%L^o?c+Jf4@4rO|KrV)rqbt? z(wi&9{`PS)l`_{0N_;+KM z&bR1euY811Uwx!`d4O$SMnTHAhejBy1Wnl12%nPwK!_C1Si4()n;`a8q&AKDD!-7F z5o6|WLtgwn!%DW^5P4b=ZfDFX7S;m5Hbm<=nqu~b#jum0Zy>S>fePD+B;+SxLPcxH+2ZfMeJF!a)8OC-Aj6GW|+ii%Q;;AO870WlWABWV7Kd zSNNKB2$Z&BfhHOA{PmW8I_NR|I*09D<`^L@Z;}N>;G4Zw*5ot(4CDYtlC7&=*hua% z!UOjAULia=80xi&vdyngI~=DEL1w`6f#l=t&$nM5Y>9-9}|LO#?LS)^eJ zap@|cVii0K+4w7(ZsPuSE7iA9X>A~H7AmV@rN~v&E~l{S`)aO(mPvOfb^0~=81vLJ=}LBRQXr#MX?Z$lh*LUrmV+S&MZ^Y zp3>U_>wJZVm#WcY04f(y(l&||zof#o=dybVv?c6b9aAQ_jdtP`I&8}Gofq!+`JrIJ zwgTH@(}?l&c~{&w>;MSTjkFy&L0Y00x_II~>@7b$-gxdzIoi^QT+~j&p1>cxhKT*V ztMXRS>EnLS>fRw^zTW9oKEo@BUhNMFEeYe_{9Car&RA)t5iK(yAHslRW{SkUOH%<^ z8(JmVDQY`{(gg~CRI|{ycY_o0(~-eru|-NyZ*?9)cLhX*KaX&WPs}a1$tUtX;>o^s z+Z!$ObHnt49T_CXO0PHE1W@mc8Vi+&`i)1C&ylkI+4p2Z8Du)*oUre1drfxWJyB<& zv)IM6E`8DXGhvg%&%O=Eruu|wF{_B$j+p`DU*F+9xD(=hwB@5~e{`ZCFtKF z>9)4FaB>Do+r)rxz z)wy16@-HY{EjpIbkPqJhao?lj@ux#TbwLK6)2t3x-J?4)x%I*#g6`8<35bpwv48@U zFW8`wE(e`Ch)OuzNR8@`I_Li#(?H}%i?*;8R7J1|Z(zq&VRFH9F5y`>gs3k6i>A3 z2e6fWj@fHVkE6>O-F!_a>(hCj9uV1Vp3P33ELhzuN8kS1EvSS^w{2zER1CJ7W;{X& zc#8p>{;IRJus@H@WsIhp8HK#=>zok=F_T(@e-z~oI8xI-_+9f{NCTQ`#cA^94P4V< z(x1Oa0+o^PViN^d;OWm7fk8r;#B;l5+-Fj}6h*La4Q8M$w_;i0&G zvUfkW)p4B^%5$U@xQ6kK!q(BHP|iZ{tE3y*EO&RXADh?TySCH|W6T^Wbmt~uf8imE zT$4lo0Ili&#qAskFGPbE=6ePt)kJ?Xbn9UJP&G9_=)Y67Y!9|fG)BotY<5r8w&5Lx zjj%?~Eme2Ylwbsu8{NU#8D?&|nJDYHL_W!KS#qU>P1ch_)igN$1b|9ek$5=?9w8qg!BJzyD4V0#k2Bem{qq5g5>9GV| zPA*4&g{>UUR2^aW;A+eiK|ugB^8?#cDav^929x56bq9cp&? z;C7z?FI3+V&I(VLclWV{K_D&>gmMP!jdiRdo-5G65SN78i~9aLr}{y`8sXP;%gPGg z?^WTn#kw^1xuQafO~vZ8rA=0h@kC%*{j<2QOqlp>R(K@>7X9dXeYVCo8m@l|31>d` zI-732InCl+V*pAYGs@_NOrd&7#}X1^ty~pAf1XRBN!Q9{y?cnYR!^)T?AXLwqfTX! zpd`5n;2SqKWa@3C*RRqDJ$E*d(yxXdR~Dw(Ng}T*0tFZ8Na$OPI`qY4HA=Gy8&^8f zBVmuczXJVKzlnX|GLB~UGpj97{}W3`)LNVr=}C$S1J=8rs)|a4g?}?+OKfXX{}p|7 zpWE^wV7=_8MeA&SEJ_4C532$G$3I2y5jyW)L5*^9-yeJgEcMNoaNvrH0~C;g~ysI4E(2>suy zu!y#*p$7AhwxtJOpe0?A|64zticj=K^z!(bI<{SU>9?9#K3NM>*@WqqCK<{?et& zg*P_2#j}s$6a*>yFGr2hh6)7CBT&8G!sFSGeQG_A^WjLdnnXR>Ez^Kq4en*urB;0! zjahpvuRZG-krIcm|K9f3b?deM`F(s_ygqRS7)-$vUsN{@n*$UQ}u#it5?_Yu>gn zw|2yz4GMDu36x^SgW^VV-JgG1aU?|3I@awlC$;tT2<+f#Jch9Y4I(jwg zg%q}&R~0#9r!7Tb%*J2%UV}Ha=<

{x;~=Z9g(>Gc2+Gj!Y-Xl(pi=sYNZpCxWFY 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 literal 0 HcmV?d00001 diff --git a/image/飞行人员.png b/image/飞行人员.png new file mode 100644 index 0000000000000000000000000000000000000000..120f58a5a0630411afa15ff21454e70328d1a851 GIT binary patch literal 2934 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 literal 0 HcmV?d00001 diff --git a/image/首页.png b/image/首页.png new file mode 100644 index 0000000000000000000000000000000000000000..12e8f1900146f05013047dc58bc6645d15c99705 GIT binary patch literal 2841 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 literal 0 HcmV?d00001 diff --git a/login/login.js b/login/login.js new file mode 100644 index 0000000..7a234e7 --- /dev/null +++ b/login/login.js @@ -0,0 +1,127 @@ +// pages/login/login.js +Page({ + data: { + ID: '', // 用户输入的 ID + password: '', // 用户输入的密码 + errorMessage: '' // 错误信息提示 + }, + + // 处理 ID 输入 + onIDInput(e) { + this.setData({ + ID: e.detail.value // 将输入的ID存储到 data 中 + }); + this.clearErrorMessage(); // 清除错误提示 + }, + + // 处理密码输入 + onPasswordInput(e) { + this.setData({ + password: e.detail.value // 将输入的密码存储到 data 中 + }); + this.clearErrorMessage(); // 清除错误提示 + }, + + // 清除错误信息 + clearErrorMessage() { + if (this.data.errorMessage) { + this.setData({ errorMessage: '' }); + } + }, + + // 检查管理员状态 + checkAdminStatus() { + const token = getApp().globalData.token || wx.getStorageSync('token'); + if (!token) { + this.setData({ errorMessage: 'Token 丢失,请重新登录' }); + return; + } + console.log("Checking admin status with token:", token); // 输出 token 确认 + + wx.request({ + header: { + 'Authorization': `${token}`, // 使用存储的 token + 'content-type': 'application/x-www-form-urlencoded' + }, + url: 'http://192.168.144.1:8080/user/is_admin', // 管理员状态查询接口 + method: 'GET', + success: (res) => { + console.log("Admin status response:", res); // 输出请求返回数据 + if (res.data.data) { + wx.navigateTo({ + url: '/pages/admin/admin' // 管理员页面 + }); + } else { + wx.switchTab({ + url: '/pages/home/home' // 普通用户主页 + }); + } + }, + fail: (error) => { + console.log("Admin status check failed", error); + this.setData({ + errorMessage: '无法验证管理员状态,请稍后再试' + }); + } + }); + }, + + submitUserInfo() { + const { ID, password } = this.data; + + if (!ID || !password) { + this.setData({ + errorMessage: 'ID和密码不能为空' + }); + return; + } + + wx.request({ + header: { + 'content-type': 'application/x-www-form-urlencoded' + }, + url: 'http://192.168.144.1:8080/user/login', + method: 'POST', + data: { + 'username': ID, + 'password': password + }, + success: (res) => { + if (res.data.code == 0) { + wx.showToast({ + title: '登录成功', + icon: 'success' + }); + + // 检查 getApp() 和 globalData 是否定义 + const appInstance = getApp(); + if (appInstance && appInstance.globalData) { + appInstance.globalData.token = res.data.data; + wx.setStorageSync('token', res.data.data); + } else { + console.error("App instance or globalData is not initialized"); + } + + this.checkAdminStatus(); + } else { + this.setData({ + errorMessage: res.data.message || '登录失败,请检查ID和密码' + }); + } + }, + fail: (error) => { + console.log('登录失败', error); + this.setData({ + errorMessage: '网络请求失败,请稍后再试' + }); + } + }); + }, + + // 跳转到注册页面 + goToRegister() { + wx.redirectTo({ + url: '/pages/register/register' // 跳转到注册页面 + }); + } +}); diff --git a/login/login.json b/login/login.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/login/login.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/login/login.wxml b/login/login.wxml new file mode 100644 index 0000000..ad5f9dc --- /dev/null +++ b/login/login.wxml @@ -0,0 +1,31 @@ + + + 登录 + + + + + + + + + {{errorMessage}} + + + + + + + 还没有账号?点击注册 + + diff --git a/login/login.wxss b/login/login.wxss new file mode 100644 index 0000000..919e6f3 --- /dev/null +++ b/login/login.wxss @@ -0,0 +1,80 @@ +/* pages/login/login.wxss */ +page { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; + background-color: #f8f8f8; +} + +.container { + width: 90%; + max-width: 400px; + background-color: #fff; + border-radius: 10px; + padding: 20px; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); +} + +.title { + text-align: center; + font-size: 24px; + font-weight: bold; + color: #333; + margin-bottom: 20px; +} + +input { + width: 100%; + height: 40px; + padding: 0 10px; + margin-bottom: 15px; + border: 1px solid #ddd; + border-radius: 5px; + background-color: #fafafa; +} + +input:focus { + border-color: #007aff; + background-color: #fff; +} + +button { + width: 100%; + height: 45px; + background-color: #007aff; + color: #fff; + border: none; + border-radius: 5px; + font-size: 16px; + text-align: center; + line-height: 45px; + margin-top: 10px; +} + +button:active { + background-color: #005bb5; +} + +.admin-section { + margin-bottom: 15px; +} + +.error { + color: red; + font-size: 14px; + margin-top: 5px; +} + +.message { + margin-top: 10px; + text-align: center; + color: #666; +} + +.link { + color: #007aff; + text-decoration: underline; + cursor: pointer; +} diff --git a/message/message.js b/message/message.js new file mode 100644 index 0000000..fad4a41 --- /dev/null +++ b/message/message.js @@ -0,0 +1,97 @@ +Page({ + data: { + messages: [], // 用于存储消息内容 + inputVal: '', // 用户输入的内容 + }, + + // 生成唯一ID函数 + generateUniqueId() { + return 'msg_' + new Date().getTime() + Math.floor(Math.random() * 1000); + }, + + // 发送用户消息 + sendMessage() { + const that = this; + + // 检查输入框内容是否为空 + if (this.data.inputVal === '') { + wx.showToast({ + title: '请输入内容', + icon: 'none' + }); + return; + } + + // 添加用户消息,并生成唯一ID + const userMessage = { + id: this.generateUniqueId(), + role: 'user', + content: this.data.inputVal + }; + + // 更新消息列表,并清空输入框内容 + this.setData({ + messages: [...this.data.messages, userMessage], + inputVal: '' // 清空输入框内容 + }); + + // 调用腾讯混元 API 获取回复,传递所有消息历史 + wx.request({ + url: 'https://yuanqi.tencent.com/openapi/v1/agent/chat/completions', // API地址 + method: 'POST', + data: { + assistant_id: 'XEpMRFLn0yqm', // 替换为你的 assistant_id + user_id: '', // 替换为实际的用户ID + stream: false, + messages: that.data.messages.map(msg => ({ + role: msg.role, + content: [ + { + type: 'text', + text: msg.content + } + ] + })) + }, + header: { + 'X-Source': 'openapi', // 必需的X-Source头部 + 'Content-Type': 'application/json', + 'Authorization': 'Bearer K8xhMFEsRpO00MKFKRUqeyideA0Ego3a' // 替换为你的API密钥 + }, + success(res) { + if (res.data && res.data.choices && res.data.choices.length > 0) { + const assistantMessage = { + id: that.generateUniqueId(), // 为助手消息生成唯一ID + role: 'assistant', + content: res.data.choices[0].message.content + }; + + // 添加助手消息 + that.setData({ + messages: [...that.data.messages, assistantMessage] + }); + } else { + wx.showToast({ + title: 'API返回异常', + icon: 'none' + }); + } + }, + + fail(response) { + console.log('请求失败:', response); // 输出失败信息用于调试 + wx.showToast({ + title: '请求失败,请检查网络或API密钥', + icon: 'none' + }); + } + }); + }, + + // 处理用户输入 + bindKeyInput(e) { + this.setData({ + inputVal: e.detail.value + }); + } +}); diff --git a/message/message.json b/message/message.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/message/message.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/message/message.wxml b/message/message.wxml new file mode 100644 index 0000000..a4d6481 --- /dev/null +++ b/message/message.wxml @@ -0,0 +1,24 @@ + + + AI助手 + + + + + + + + {{item.content}} + + + {{item.content}} + + + + + + + + + + diff --git a/message/message.wxss b/message/message.wxss new file mode 100644 index 0000000..8731775 --- /dev/null +++ b/message/message.wxss @@ -0,0 +1,107 @@ +/* 全局容器样式 */ +.container { + display: flex; + flex-direction: column; + height: 106vh; + background-color: #ffffff; /* 背景为纯白色 */ + color: #333333; /* 深色文本,和白色背景形成对比 */ + margin-top: -100px; + margin-bottom: -60px; +} +/* 标题区域 */ +.header { + padding: 10px; /* 调整内边距 */ + text-align: center; /* 标题左对齐 */ + border-bottom: 1px solid #e0e0e0; /* 边框为浅灰色 */ +} + +.title { + color: black; /* 深灰色标题 */ + font-size: 24px; + font-weight: bold; + text-transform: uppercase; /* 大写标题 */ +} + +/* 聊天区域 */ +.chat-area { + flex: 1; + background-color: #ffffff; /* 白色背景 */ + overflow-y: auto; /* 允许滚动 */ + border-top: 1px solid #e0e0e0; /* 边框线 */ +} + +/* 消息气泡 */ +.message { + margin: 10px 10px; + display: flex; + flex-direction: row; /* 水平排列 */ +} + +.user-message, .assistant-message { + padding: 10px; + border-radius: 15px; + border: 1px solid #dddddd; + color: #333333; + word-wrap: break-word; /* 自动换行 */ + word-break: break-all; /* 长单词自动拆分换行 */ + white-space: pre-wrap; /* 保留空白符并换行 */ + max-width: 80%; /* 最大宽度为70% */ + font-family: 'Arial', sans-serif; +} + +.user-message { + margin-left: auto; + background-color: #f0f0f0; /* 用户消息为浅灰色背景 */ + border-radius: 15px 15px 0 15px; /* 圆角气泡 */ +} + +.assistant-message { + margin-right: auto; + background-color: #e8e8e8; /* AI消息背景色为稍深灰色 */ + border-radius: 15px 15px 15px 0; /* 圆角气泡 */ +} + +/* 输入区域 */ +.input-area { + display: flex; + padding: 10px 15px; + background-color: white; /* 输入区为浅灰色背景 */ + border-top: 1px solid #dddddd; /* 上方的分隔线 */ + position: sticky; /* 固定输入框在底部 */ + bottom: 0; +} + +.input-box { + flex: 1; + padding: 10px; + border: 1px solid #cccccc; /* 边框为浅灰色 */ + border-radius: 5px; /* 圆角输入框 */ + background-color: #ffffff; /* 输入框为白色 */ + color: #333333; + margin-right: 10px; + font-family: 'Arial', sans-serif; + word-wrap: break-word; /* 输入框内长内容自动换行 */ + word-break: break-all; +} + +/* 发送按钮样式 */ +.send-btn { + padding: 6px 12px; /* 调整为更小的内边距 */ + background-color: #4a90e2; /* 亮蓝色 */ + color: #ffffff; + border-radius: 5px; /* 保持圆角 */ + border: none; + font-weight: bold; + font-size: 14px; /* 缩小字体大小 */ + cursor: pointer; + transition: background-color 0.3s ease; +} + +.send-btn:hover { + background-color: #357ABD; /* 悬停时颜色加深 */ +} + +/* 图标颜色和输入框样式 */ +input::placeholder { + color: #aaaaaa; /* 输入框提示符为浅灰色 */ +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..38455b1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,75 @@ +{ + "name": "unsafe-pro", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "unsafe-pro", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@vant/weapp": "^1.11.6", + "echarts-for-weixin": "^1.0.2", + "miniprogram-api-typings": "^3.12.2", + "var": "^0.4.0" + } + }, + "node_modules/@vant/weapp": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@vant/weapp/-/weapp-1.11.6.tgz", + "integrity": "sha512-a3heReWYT2gNdsyj6x1hBwsM8V8NrjcPAmle86NH2CD2V/i/h0le75piW6KntSfOPCwekVWMBKhysNrBpJeKdw==" + }, + "node_modules/echarts": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.1.tgz", + "integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==", + "peer": true, + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.6.0" + } + }, + "node_modules/echarts-for-weixin": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/echarts-for-weixin/-/echarts-for-weixin-1.0.2.tgz", + "integrity": "sha512-cEk4yFMCJDQpvAgVRKbGvMjXvuW965iEUootJffRFHwJwCq0/GIeoRTTAEuj50PKMMtLTW4DmBPmvPja3sH2jQ==", + "peerDependencies": { + "echarts": "^5.1.2" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/miniprogram-api-typings": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/miniprogram-api-typings/-/miniprogram-api-typings-3.12.2.tgz", + "integrity": "sha512-OJB2uVAfhycX4teG/zEVpoThushQqLOx946XACDpVc6OQydiJWjn7djVzvNCbv0VOA7sbHGPQp/RkXD9vMCDEw==" + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "peer": true + }, + "node_modules/var": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/var/-/var-0.4.0.tgz", + "integrity": "sha512-olxlLAssnt9UPL5UAErYTaCJhpwaDfkuSxOEB5eUclEJbl4xi7EhOIaOh6Y8KTQHIKUnyd2DygRLSnTaXtXuGg==", + "dependencies": { + "lodash": "^4.17.4" + } + }, + "node_modules/zrender": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.0.tgz", + "integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==", + "peer": true, + "dependencies": { + "tslib": "2.3.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..14359f1 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "unsafe-pro", + "version": "1.0.0", + "main": ".eslintrc.js", + "dependencies": { + "@vant/weapp": "^1.11.6", + "echarts-for-weixin": "^1.0.2", + "miniprogram-api-typings": "^3.12.2", + "var": "^0.4.0" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "" +} 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/profile/profile.js b/profile/profile.js new file mode 100644 index 0000000..c885722 --- /dev/null +++ b/profile/profile.js @@ -0,0 +1,24 @@ +Page({ + data: { + avatarUrl: '/image/化工专家.png', // 默认头像 + }, + viewLogs: function() { + wx.navigateTo({ + url: '/pages/userview/usereview', + }); + }, + logout: function() { + wx.showModal({ + title: '退出登录', + content: '你确定要退出登录吗?', + success: (res) => { + if (res.confirm) { + wx.clearStorage(); // 清除本地存储的用户数据 + wx.redirectTo({ + url: '/pages/login/login' // 跳转到登录页面 + }); + } + } + }); + } +}); diff --git a/profile/profile.json b/profile/profile.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/profile/profile.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/profile/profile.wxml b/profile/profile.wxml new file mode 100644 index 0000000..6b527dc --- /dev/null +++ b/profile/profile.wxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/profile/profile.wxss b/profile/profile.wxss new file mode 100644 index 0000000..d8effee --- /dev/null +++ b/profile/profile.wxss @@ -0,0 +1,53 @@ +.profile-page { + padding: 20px; + background-color: white; /* 整体背景色 */ + margin-top: 100px; +} +.profile-header { + display: flex; + align-items: center; + padding: 20px; + background-color: #fff; + border-radius: 10px; + margin-bottom: 20px; + flex-direction: column; + align-items: center; /* 水平居中 */ + padding: 20px; +} + +.avatar-container { + width: 125px; + height: 125px; + margin-right: 15px; + border-radius: 50%; + overflow: hidden; +} + +.avatar { + width: 100%; + height: 100%; + object-fit: cover; /* 确保图片不变形 */ +} + +.actions { + background-color: #fff; + padding: 40px; + border-radius: 10px; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); +} + +.action-btn { + height: 50px; + width: 100%; + padding: 5px; + background-color: #007aff; + color: white; + text-align: center; + border-radius: 5px; + margin-bottom: 15px; + font-size: 16px; +} + +.logout-btn { + background-color: #ff3b30; /* 红色背景,用于突出退出按钮 */ +} diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..228eb3d --- /dev/null +++ b/project.config.json @@ -0,0 +1,28 @@ +{ + "appid": "wxdb7149e7addd81c6", + "compileType": "miniprogram", + "libVersion": "3.4.6", + "packOptions": { + "ignore": [], + "include": [] + }, + "setting": { + "coverView": true, + "es6": true, + "postcss": true, + "minified": true, + "enhance": true, + "showShadowRootInWxmlPanel": true, + "packNpmRelationList": [], + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + } + }, + "condition": {}, + "editorSetting": { + "tabIndent": "insertSpaces", + "tabSize": 2 + } +} \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json new file mode 100644 index 0000000..2dd5162 --- /dev/null +++ b/project.private.config.json @@ -0,0 +1,148 @@ +{ + "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "projectname": "%E4%B8%8D%E5%AE%89%E5%85%A8%E4%BA%8B%E4%BB%B6%E7%AE%A1%E7%90%86%E5%BC%80%E5%8F%91", + "setting": { + "compileHotReLoad": true, + "skylineRenderEnable": true, + "urlCheck": false + }, + "condition": { + "miniprogram": { + "list": [ + { + "name": "echarts-for-weixin\\pages\\bar\\index", + "pathName": "echarts-for-weixin\\pages\\bar\\index", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/z9/z9", + "pathName": "pages/z9/z9", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/z5/z5", + "pathName": "pages/z5/z5", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/z10/z10", + "pathName": "pages/z10/z10", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/z4/z4", + "pathName": "pages/z4/z4", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/viewdetail/viewdetail", + "pathName": "pages/viewdetail/viewdetail", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/userview/usereview", + "pathName": "pages/userview/usereview", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/userview/usereview", + "pathName": "pages/userview/usereview", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/profile/profile", + "pathName": "pages/profile/profile", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/FlightCrew/FlightCrew", + "pathName": "pages/FlightCrew/FlightCrew", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/login/login", + "pathName": "pages/login/login", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/admin/admin", + "pathName": "pages/admin/admin", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/profile/profile", + "pathName": "pages/profile/profile", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/dataAnalysis/dataAnalysis", + "pathName": "pages/dataAnalysis/dataAnalysis", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/viewReports/viewReports", + "pathName": "pages/viewReports/viewReports", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/home/home", + "pathName": "pages/home/home", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/contact/contact", + "pathName": "pages/contact/contact", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/message/message", + "pathName": "pages/message/message", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/register/register", + "pathName": "pages/register/register", + "query": "", + "launchMode": "default", + "scene": null + } + ] + } + } +} \ No newline at end of file diff --git a/register/register.js b/register/register.js new file mode 100644 index 0000000..32bf028 --- /dev/null +++ b/register/register.js @@ -0,0 +1,66 @@ +// pages/register/register.js +Page({ + data: { + ID: '', + password: '', + errorMessage: '' + }, + + // 处理ID输入 + onIDInput(e) { + this.setData({ + ID: e.detail.value + }); + }, + + // 处理密码输入 + onPasswordInput(e) { + this.setData({ + password: e.detail.value + }); + }, + + // 处理注册逻辑 + submitUserInfo() { + const { ID, password } = this.data; + + // 验证 ID 和密码是否为空 + if (!ID || !password) { + this.setData({ + errorMessage: '账号ID和密码不能为空' + }); + return; + } + + // 发起注册请求,使用 x-www-form-urlencoded + wx.request({ + header: { + 'content-type': 'application/x-www-form-urlencoded' // 设置请求头 + }, + url: 'http://192.168.144.1:8080/user/register', // 替换为你的后端API地址 + method: 'POST', + data: { + 'username': ID, + 'password': password + }, + success(res) { + console.log('注册成功', res); + wx.showToast({ + title: '注册成功', + icon: 'success' + }); + // 注册成功后跳转到登录页面 + wx.redirectTo({ + url: '/pages/login/login' + }); + }, + }); + }, + + // 跳转到登录页面 + goToLogin() { + wx.redirectTo({ + url: '/pages/login/login' // 登录页面的路径 + }); + } +}); diff --git a/register/register.json b/register/register.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/register/register.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/register/register.wxml b/register/register.wxml new file mode 100644 index 0000000..de3e8c4 --- /dev/null +++ b/register/register.wxml @@ -0,0 +1,32 @@ + + + + 注册 + + + + + + + + + {{errorMessage}} + + + + + + + 已有账号?点击登录 + + diff --git a/register/register.wxss b/register/register.wxss new file mode 100644 index 0000000..bfe364c --- /dev/null +++ b/register/register.wxss @@ -0,0 +1,76 @@ +/* pages/register/register.wxss */ +page { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; + background-color: #f8f8f8; +} + +.container { + width: 90%; + max-width: 400px; + background-color: #fff; + border-radius: 10px; + padding: 20px; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); +} + +.title { + text-align: center; + font-size: 24px; + font-weight: bold; + color: #333; + margin-bottom: 20px; +} + +input { + width: 100%; + height: 40px; + padding: 0 10px; + margin-bottom: 15px; + border: 1px solid #ddd; + border-radius: 5px; + background-color: #fafafa; +} + +input:focus { + border-color: #007aff; + background-color: #fff; +} + +button { + width: 100%; + height: 45px; + background-color: #007aff; + color: #fff; + border: none; + border-radius: 5px; + font-size: 16px; + text-align: center; + line-height: 45px; + margin-top: 10px; +} + +button:active { + background-color: #005bb5; +} + +.error { + color: red; + font-size: 14px; + margin-top: 5px; +} + +.message { + margin-top: 10px; + text-align: center; + color: #666; +} + +.link { + color: #007aff; + text-decoration: underline; + cursor: pointer; +} diff --git a/sitemap.json b/sitemap.json new file mode 100644 index 0000000..cd24f35 --- /dev/null +++ b/sitemap.json @@ -0,0 +1,7 @@ +{ + "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", + "rules": [{ + "action": "allow", + "page": "*" + }] +} \ No newline at end of file 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() { - } - -} diff --git a/userview/usereview.js b/userview/usereview.js new file mode 100644 index 0000000..31820ea --- /dev/null +++ b/userview/usereview.js @@ -0,0 +1,14 @@ +Page({ +   data: { +     record: {},  // 选中的上报记录 +     list: []     // 转换后的键值对列表,用于页面展示 +   }, +   // 在页面的 onLoad 方法中接收数据 + onLoad: function (options) { +   const eventChannel = this.getOpenerEventChannel(); +   eventChannel.on('sendDetailData', (data) => { +     console.log(data.records);  // 这里可以使用传递过来的记录 +     // 处理 data.records +   }); + } + }); \ No newline at end of file diff --git a/userview/usereview.json b/userview/usereview.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/userview/usereview.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/userview/usereview.wxml b/userview/usereview.wxml new file mode 100644 index 0000000..5b45ee7 --- /dev/null +++ b/userview/usereview.wxml @@ -0,0 +1,13 @@ + +   +     +     +       +         +        {{item.selectedDate}}-{{item.selectedTime}} - {{item.name}} +         +        点击查看详细信息... +       +     +   + \ No newline at end of file diff --git a/userview/usereview.wxss b/userview/usereview.wxss new file mode 100644 index 0000000..4f5df83 --- /dev/null +++ b/userview/usereview.wxss @@ -0,0 +1,17 @@ +.container{ + margin-top: -95px; +} +.message-item { + padding: 10px; + border-bottom: 1px solid #e5e5e5; +} + +.message-item text { + display: block; +} + +.message-summary { + color: #888; + font-size: 12px; + margin-top: 4px; +} diff --git a/viewReports/viewReports.js b/viewReports/viewReports.js new file mode 100644 index 0000000..31820ea --- /dev/null +++ b/viewReports/viewReports.js @@ -0,0 +1,14 @@ +Page({ +   data: { +     record: {},  // 选中的上报记录 +     list: []     // 转换后的键值对列表,用于页面展示 +   }, +   // 在页面的 onLoad 方法中接收数据 + onLoad: function (options) { +   const eventChannel = this.getOpenerEventChannel(); +   eventChannel.on('sendDetailData', (data) => { +     console.log(data.records);  // 这里可以使用传递过来的记录 +     // 处理 data.records +   }); + } + }); \ No newline at end of file diff --git a/viewReports/viewReports.json b/viewReports/viewReports.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/viewReports/viewReports.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/viewReports/viewReports.wxml b/viewReports/viewReports.wxml new file mode 100644 index 0000000..5b45ee7 --- /dev/null +++ b/viewReports/viewReports.wxml @@ -0,0 +1,13 @@ + +   +     +     +       +         +        {{item.selectedDate}}-{{item.selectedTime}} - {{item.name}} +         +        点击查看详细信息... +       +     +   + \ No newline at end of file diff --git a/viewReports/viewReports.wxss b/viewReports/viewReports.wxss new file mode 100644 index 0000000..4f5df83 --- /dev/null +++ b/viewReports/viewReports.wxss @@ -0,0 +1,17 @@ +.container{ + margin-top: -95px; +} +.message-item { + padding: 10px; + border-bottom: 1px solid #e5e5e5; +} + +.message-item text { + display: block; +} + +.message-summary { + color: #888; + font-size: 12px; + margin-top: 4px; +}