fjk_branch #15

Merged
puf7keiya merged 8 commits from 冯健铠 into master 2 years ago

@ -0,0 +1,17 @@
# **常态化疫情下的大学生出入校管理系统**
## **系统介绍**
&emsp;&emsp;在常态化疫情防控的背景下,由于大学校园人口密度较大,为防止疫情传入学校造成聚集性传播,学校需对进出校人员进行科学合理的管理。目前针对学生、教职工及校外人员存在的出入校的需求,主要通过申请人提交申请,再由人工对健康码、核酸报告、行程码等信息进行核查。由于学校人口基数大,人工审核可能存在处理不及时、检查不准确等问题,且在当前高中低风险区的划分政策下,风险地区变化较快,人工查阅不一定及时。因此,为降低疫情传播入校的风险,对出入校管理效率和能力的提升成为目前各大学亟待解决的难题,有现实迫切的需求。`<br>`&emsp;&emsp;本软件专为提高疫情期间师生出入校申请、审批的效率而设计,它可以帮助用户(老师、学生)查看天津市本地的疫情状况,帮助用户提交出入校申请,帮助管理员进行自动审批申请表,并在发现异常时提交给管理员进行手动审批,还可以在用户进出学校的时候进行扫码操作变更自己的出入校状态,且能通过界面查看该状态。`<br>`&emsp;
## **配置环境**
前端界面:微信开发者平台 + wxml + wxss + JavaScript `<br>`
后端服务器Python 3.10 + flask框架 + jpype `<br>`
OCR模块Java 1.7以上 + maven + com.baidu.aip `<br>`
数据库SQL server 2019
## **备注**
前端使用微信小程序,该部分代码无法被质量分析软件识别。`<br>`
OCR部分封装成jar包后直接调用jar包部分也无法被质量分析软件识别已将源代码放入/src/client/OCR_baidu文件夹下。

Binary file not shown.

@ -0,0 +1,17 @@
# **常态化疫情下的大学生出入校管理系统**
## **系统介绍**
&emsp;&emsp;在常态化疫情防控的背景下,由于大学校园人口密度较大,为防止疫情传入学校造成聚集性传播,学校需对进出校人员进行科学合理的管理。目前针对学生、教职工及校外人员存在的出入校的需求,主要通过申请人提交申请,再由人工对健康码、核酸报告、行程码等信息进行核查。由于学校人口基数大,人工审核可能存在处理不及时、检查不准确等问题,且在当前高中低风险区的划分政策下,风险地区变化较快,人工查阅不一定及时。因此,为降低疫情传播入校的风险,对出入校管理效率和能力的提升成为目前各大学亟待解决的难题,有现实迫切的需求。`<br>`&emsp;&emsp;本软件专为提高疫情期间师生出入校申请、审批的效率而设计,它可以帮助用户(老师、学生)查看天津市本地的疫情状况,帮助用户提交出入校申请,帮助管理员进行自动审批申请表,并在发现异常时提交给管理员进行手动审批,还可以在用户进出学校的时候进行扫码操作变更自己的出入校状态,且能通过界面查看该状态。`<br>`&emsp;
## **配置环境**
前端界面:微信开发者平台 + wxml + wxss + JavaScript `<br>`
后端服务器Python 3.10 + flask框架 + jpype `<br>`
OCR模块Java 1.7以上 + maven + com.baidu.aip `<br>`
数据库SQL server 2019
## **备注**
前端使用微信小程序,该部分代码无法被质量分析软件识别。`<br>`
OCR部分封装成jar包后直接调用jar包部分也无法被质量分析软件识别已将源代码放入/src/client/OCR_baidu文件夹下。

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
</component>
</project>

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="df78773e-dd80-4766-8285-f044837e315a" name="变更" comment="" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../../.." />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="ProjectId" id="2I8n2RJqDuEdA4rT9gP1o3Hi6sl" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true"
}
}]]></component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="默认任务">
<changelist id="df78773e-dd80-4766-8285-f044837e315a" name="变更" comment="" />
<created>1669571873455</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1669571873455</updated>
</task>
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State />
</value>
</entry>
</map>
</option>
</component>
</project>

Binary file not shown.

Binary file not shown.

@ -0,0 +1,71 @@
// pages/v11_success/v11_success.js
Page({
/**
* 页面的初始数据
*/
data: {
},
c1:function(){
wx.switchTab({
url: '/pages/home/home',
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,12 @@
<!--pages/v11_success/v11_success.wxml-->
<view style="height: 100rpx;"></view>
<!--按钮-->
<view class="loginBtnView">
<button class="loginBtn" type="warn" >成功提交表单</button>
<view style="height: 100rpx;"></view>
<navigator url="/pages/user/user"><button class="loginBtn" type="primary" >点击返回用户首页</button> </navigator>
<view style="height: 100rpx;"></view>
<button class="loginBtn" type="primary" bindtap="c1" >点击返回首页</button>
</view>

@ -0,0 +1 @@
/* pages/v11_success/v11_success.wxss */

@ -0,0 +1,66 @@
// pages/v10_auto/v10_auto.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,2 @@
<!--pages/v10_auto/v10_auto.wxml-->
<text>pages/v10_auto/v10_auto.wxml</text>

@ -0,0 +1,66 @@
// pages/v12_submit_info/v12_submit_info.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,2 @@
<!--pages/v12_submit_info/v12_submit_info.wxml-->
<text>pages/v12_submit_info/v12_submit_info.wxml</text>

@ -0,0 +1,265 @@
Page({
data: {
name: '', //姓名
sno:" ",//学号
phone: '', //手机号
time:"",//入校时间,
door:"",//校门
city:"",//省市
area:"",//区
address:"",//详细地址
images: [] ,//存放图片的数组
test:[],
},
// 个人简介
bindTextAreaBlur(e) {
this.setData({
describe: e.detail.value
})
},
//点击添加按钮上传图片
chooseImage: function(e) {
var that = this
wx.chooseMedia({
sizeType: ['original', 'compressed'], //可选择原图或压缩后的图片
sourceType: ['album', 'camera'], //可选择性开放访问相册、相机
success: res => {
// console.log(res)
var team_image = wx.getFileSystemManager().readFileSync(res.tempFiles[0].tempFilePath, "base64") //将图片进行base64编码。
if (this.data.images.length <= 2) {
const test = this.data.test.concat(team_image)
const images = this.data.images.concat(res.tempFiles[0].tempFilePath)
// 限制最多只能留下2张照片
that.setData({
test:test,
images: images
})
} else {
wx.showToast({
title: '最多只能选择三张照片',
icon: 'none',
duration: 2000,
mask: true
})
}
}
})
},
removeImage(e) {
const idx = e.target.dataset.idx;
console.log(e.target.dataset.idx);
this.data.images.splice(idx, 1);
var del_image = this.data.images;
this.setData({
images: del_image
})
},
handleImagePreview(e) {
const idx = e.target.dataset.idx
const images = this.data.images
wx.previewImage({
current: images[idx], //当前预览的图片
urls: images, //所有要预览的图片
})
},
upload_info: function() {
var images_list = []; //设置了一个空数组进行储存服务器端图片路径
var phone_reg = /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/; //手机正则
var that = this;
//验证表单信息
if (that.data.name == '') {
wx.showToast({
title: '姓名不能为空',
icon: 'none',
duration: 2000,
mask: true
})
} else if (that.data.phone == '' || phone_reg.test(that.data.phone) == false) {
wx.showToast({
title: '请输入正确的手机号码',
icon: 'none',
duration: 2000,
mask: true
})
} else {
// 进行request请求
wx.request({
url: 'http://127.0.0.1:2020/out_school',
data: {name:this.data.name,
sno:this.data.sno,
phone:this.data.phone,
time:this.data.time,
door:this.data.door,
city:this.data.city,
area:this.data.area,
address:this.data.address,
// images:this.data.images,
test:this.data.test,
type:'出校'
},
enableCache: true,
enableHttp2: true,
enableQuic: true,
method: 'POST',
timeout: 0,
success: (result) => {
console.log(result)
if(result.data=='1'){
wx.navigateTo({
url: '/pages/v11_success/v11_success',
})
}
if(result.data=='2'){
wx.showModal({
cancelColor: 'cancelColor',
title: '您已经提交过申请,请在通过情况中查看',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定')
} else {
console.log('用户点击取消')
}
}
})
}
if(result.data=='3'){
wx.showModal({
cancelColor: 'cancelColor',
title: '您目前状态为出校,不能提交出校申请',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定')
} else {
console.log('用户点击取消')
}
}
})
}
},
fail: (res) => {
},
})
}
},
// 姓名
name: function(e) {
// console.log(e)
this.setData({
name: e.detail.value
})
},
// 电话
phone: function(e) {
this.setData({
phone: e.detail.value
})
},
//学号
sno: function(e) {
this.setData({
sno: e.detail.value
})
},
//时间
time: function(e) {
this.setData({
time: e.detail.value
})
},
// 校门
door: function(e) {
this.setData({
door: e.detail.value
})
},
//省市
city: function(e) {
this.setData({
city: e.detail.value
})
},
//区
area: function(e) {
this.setData({
area: e.detail.value
})
},
//详细地址
address: function(e) {
this.setData({
address: e.detail.value
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function() {
}
})

@ -0,0 +1,62 @@
<view class='box'>
<view class="section">
<input placeholder="姓名" bindblur="name" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input placeholder="学号" bindblur="sno" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input type='number' placeholder="电话" bindblur="phone" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input placeholder="时间" bindblur="time" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input placeholder="校门" bindblur="door" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input placeholder="省市" bindblur="city" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input placeholder="区" bindblur="area" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input placeholder="详细地址" bindblur="address" style='background-image: url("/static/image/CAUC.png");' />
</view>
<!-- <view class="section" style='height:165px;'>
<textarea class='texta' bindblur="bindTextAreaBlur" placeholder="个人简介" />
</view> -->
<view class='upload_img'>
<view class='upload_img_btn'>
<view class='title'>
<view class='shu'></view>
<text>核酸报告,健康码图片</text>
</view>
<button type="primary" size="mini" bindtap="chooseImage" class='btn'>添加</button>
</view>
<view class='img_box' id='imgs' style='display:flex;justify-content: space-between;padding-top:10px;'>
<!-- 存放上传的图片的盒子 -->
<block wx:for="{{images}}" wx:key="*this">
<view class="q-image-wrap imgs">
<!-- 图片缩略图 -->
<image class="q-image" src="{{item}}" mode="aspectFill" data-idx="{{index}}" bindtap="handleImagePreview"></image>
<!-- 移除图片的按钮 -->
<view class="q-image-remover delete" data-idx="{{index}}" bindtap="removeImage">删除</view>
</view>
</block>
</view>
</view>
<!-- <view>{{images}}</view> -->
<view class='btn_box'>
<button type="primary" bindtap="upload_info" class='upload_info'>提交表单</button>
</view>
</view>

@ -0,0 +1,265 @@
.box{
background-color: #efeff4;
height: 100%;
width: 100%;
}
.input-placeholder{
font-size: 16px;
}
.section{
width: 100%;
height: 55px;
box-sizing: border-box;
padding-top: 15px;
font-size: 16px;
display: flex;
}
.section input{
width: 90%;
margin: 0 auto;
border-radius: 6px;
background-color:#FFF;
height: 40px;
box-sizing: border-box;
padding-left: 45px;
background-repeat: no-repeat;
background-size: 26px 26px;
background-position: 10px 7px;
}
.sex_age_box{
display: flex;
justify-content: space-between;
box-sizing: border-box;
padding: 0 5%;
}
.section_sex{
width: 47.5%;
margin-top:15px;
background-color: #FFF;
height: 40px;
border-radius: 6px;
font-size: 16px;
color: #777777;
}
.imgs_sex{
width: 26px;
height: 26px;
display: inline-block;
margin: 7px 5% 0 4%;
}
.text_sex{
position: relative;
top: -7px;
}
.section_age{
width: 47.5%;
margin-top:15px;
font-size: 16px;
}
.section_age input{
width: 100%;
margin: 0 auto;
border-radius: 6px;
background-color:#FFF;
height: 40px;
box-sizing: border-box;
padding-left: 45px;
background-repeat: no-repeat;
background-size: 26px 26px;
background-position: 10px 7px;
}
.texta{
width: 90%;
margin: 0 auto;
border-radius: 6px;
background-color:#FFF;
height: 150px;
box-sizing: border-box;
padding-left: 20px;
padding-top: 10px;
}
.upload_img{
width: 90%;
margin: 0 auto;
background-color: #FFF;
margin-top: 15px;
border-radius: 6px;
}
.upload_img_btn{
width: 100%;
height: 60px;
line-height: 60px;
border-bottom:1px solid #dddddd;
display: flex;
justify-content: space-between;
}
.upload_img_btn text{
font-size: 17px;
color: #777777;
margin-left: 10px;
}
.btn{
height: 30px;
margin: 15px 15px 0 0;
}
.img_box{
box-sizing: border-box;
padding: 10px;
}
.imgs{
width: 47.5%;
height: 180px;
}
.imgs image{
width: 100%;
height: 150px;
}
.delete{
text-align: center;
font-size: 16px;
color: red;
height: 30px;
line-height: 30px;
}
.expert_choice{
width: 90%;
margin: 15px auto;
border-radius: 6px;
background-color: #FFF;
box-sizing: border-box;
padding: 0 15px 15px 15px;
font-size: 17px;
}
.msg{
color: #777777;
}
.choice_box{
display: flex;
flex-direction: column;
margin-top: 10px;
width: 100%;
background: linear-gradient(to right, #A4DFA5 , #86D78A ,#A4DFA5);
box-sizing: border-box;
padding: 15px;
color: #FFF;
border-radius: 6px;
text-align: center;
}
.choice_msg{
margin-top: 10px;
font-size: 13px;
color: #000;
}
.expert_checkbox{
margin-top: 20px;
font-size: 12px;
color: #777777;
}
.checkbox{
margin-bottom: 15px;
}
checkbox-group{
display: flex;
flex-direction: column;
}
checkbox .wx-checkbox-input{
border-radius: 50%;
height: 18px;
width: 18px;
margin-top: -4px;
}
/* 日期选择 */
.picker_group {
height: 85rpx;
line-height: 85rpx;
justify-content: center;
display: flex;
align-items: center;
font-size: 30rpx;
color: #888;
border-bottom: 1rpx solid #efefef;
}
.picker_group picker {
/* background-color: yellow; */
color: #64bff1;
height: 55rpx;
line-height: 55rpx;
margin: 0 2%;
padding: 0 2%;
border: 1rpx solid #64bff1;
border-radius: 30rpx;
}
.me_interval{
width: 90%;
margin: 0 auto;
background-color: #FFF;
border-radius: 6px;
box-sizing: border-box;
}
.me_interval text{
font-size: 17px;
color: #777777;
margin-left: 15px;
}
.picker_group{
margin-top: 10px;
padding-bottom: 10px;
border: none;
}
.picker_group picker{
padding: 0 5%;
}
.hospitalize{
width: 90%;
margin: 15px auto;
background-color: #FFF;
border-radius: 6px;
box-sizing: border-box;
}
.hospitalize text{
font-size: 17px;
color: #777777;
margin-left: 15px;
}
.radio-group{
margin-left: 15px;
font-size: 15px;
color: #777777;
display: flex;
flex-direction: column;
line-height: 35px;
}
.btn_box{
box-sizing: border-box;
padding: 20px 5% 50px;
}
.name_box{
display: flex;
justify-content: space-between;
margin-bottom: 20px;
}
.name_box input{
width: 47.5%;
height: 30px;
border: 1px solid #DDD;
border-radius: 6px;
box-sizing: border-box;
padding-left: 15px;
}
.hedden{
display: none;
}
.show{
display: flex;
}
.title{
display: flex;
}
.shu{
width: 3px;
height: 26px;
background: #07afff;
margin: 17px 0 15px 17px;
}

@ -0,0 +1,269 @@
Page({
data: {
name: '', //姓名
sno:" ",//学号
phone: '', //手机号
time:"",//入校时间,
door:"",//校门
city:"",//省市
area:"",//区
address:"",//详细地址
images: [] ,//存放图片的数组
test:[],
xxx:"",
},
// 个人简介
bindTextAreaBlur(e) {
this.setData({
describe: e.detail.value
})
},
//点击添加按钮上传图片
chooseImage: function(e) {
var that = this
wx.chooseMedia({
sizeType: ['original', 'compressed'], //可选择原图或压缩后的图片
sourceType: ['album', 'camera'], //可选择性开放访问相册、相机
success: res => {
// console.log(res)
var team_image = wx.getFileSystemManager().readFileSync(res.tempFiles[0].tempFilePath, "base64") //将图片进行base64编码。
console.log(team_image)
if (this.data.images.length <= 2) {
const test = this.data.test.concat(team_image)
const images = this.data.images.concat(res.tempFiles[0].tempFilePath)
// 限制最多只能留下2张照片
that.setData({
test:test,
images: images
})
} else {
wx.showToast({
title: '最多只能选择三张照片',
icon: 'none',
duration: 2000,
mask: true
})
}
}
})
},
removeImage(e) {
const idx = e.target.dataset.idx;
console.log(e.target.dataset.idx);
this.data.images.splice(idx, 1);
var del_image = this.data.images;
this.setData({
images: del_image
})
},
handleImagePreview(e) {
const idx = e.target.dataset.idx
const images = this.data.images
wx.previewImage({
current: images[idx], //当前预览的图片
urls: images, //所有要预览的图片
})
},
upload_info: function() {
var images_list = []; //设置了一个空数组进行储存服务器端图片路径
var phone_reg = /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/; //手机正则
var that = this;
//验证表单信息
if (that.data.name == '') {
wx.showToast({
title: '姓名不能为空',
icon: 'none',
duration: 2000,
mask: true
})
} else if (that.data.phone == '' || phone_reg.test(that.data.phone) == false) {
wx.showToast({
title: '请输入正确的手机号码',
icon: 'none',
duration: 2000,
mask: true
})
} else {
// 进行request请求
wx.request({
url: 'http://127.0.0.1:2020/in_school',
data: {name:this.data.name,
sno:this.data.sno,
phone:this.data.phone,
time:this.data.time,
door:this.data.door,
city:this.data.city,
area:this.data.area,
address:this.data.address,
// images:this.data.images,
test:this.data.test,
type:'入校'
},
enableCache: true,
enableHttp2: true,
enableQuic: true,
method: 'POST',
timeout: 0,
success: (result) => {
console.log(result)
if(result.data=='1'){
wx.navigateTo({
url: '/pages/v11_success/v11_success',
})
}
if(result.data=='2'){
wx.showModal({
cancelColor: 'cancelColor',
title: '您已经提交过申请,请在通过情况中查看',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定')
} else {
console.log('用户点击取消')
}
}
})
}
if(result.data=='3'){
wx.showModal({
cancelColor: 'cancelColor',
title: '您目前状态为入校,不能提交入校申请',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定')
} else {
console.log('用户点击取消')
}
}
})
}
},
fail: (res) => {
},
})
}
},
// 姓名
name: function(e) {
// console.log(e)
this.setData({
name: e.detail.value
})
},
// 电话
phone: function(e) {
this.setData({
phone: e.detail.value
})
},
//学号
sno: function(e) {
this.setData({
sno: e.detail.value
})
},
//时间
time: function(e) {
this.setData({
time: e.detail.value
})
},
// 校门
door: function(e) {
this.setData({
door: e.detail.value
})
},
//省市
city: function(e) {
this.setData({
city: e.detail.value
})
},
//区
area: function(e) {
this.setData({
area: e.detail.value
})
},
//详细地址
address: function(e) {
this.setData({
address: e.detail.value
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function() {
}
})

@ -0,0 +1,67 @@
<view class='box'>
<view class="section">
<input placeholder="姓名" bindblur="name" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input placeholder="学号" bindblur="sno" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input type='number' placeholder="电话" bindblur="phone" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input placeholder="时间" bindblur="time" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input placeholder="校门" bindblur="door" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input placeholder="省市" bindblur="city" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input placeholder="区" bindblur="area" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view class="section">
<input placeholder="详细地址" bindblur="address" style='background-image: url("/static/image/CAUC.png");' />
</view>
<!-- <view class="section">
<input model:value="{{xxx}}" placeholder="xxxx" bindblur="address" style='background-image: url("/static/image/CAUC.png");' />
</view>
<view>{{xxx}}</view> -->
<!-- <view class="section" style='height:165px;'>
<textarea class='texta' bindblur="bindTextAreaBlur" placeholder="个人简介" />
</view> -->
<view class='upload_img'>
<view class='upload_img_btn'>
<view class='title'>
<view class='shu'></view>
<text>核酸报告,健康码图片</text>
</view>
<button type="primary" size="mini" bindtap="chooseImage" class='btn'>添加</button>
</view>
<view class='img_box' id='imgs' style='display:flex;justify-content: space-between;padding-top:10px;'>
<!-- 存放上传的图片的盒子 -->
<block wx:for="{{images}}" wx:key="*this">
<view class="q-image-wrap imgs">
<!-- 图片缩略图 -->
<image class="q-image" src="{{item}}" mode="aspectFill" data-idx="{{index}}" bindtap="handleImagePreview"></image>
<!-- 移除图片的按钮 -->
<view class="q-image-remover delete" data-idx="{{index}}" bindtap="removeImage">删除</view>
</view>
</block>
</view>
</view>
<!-- <view>{{images}}</view> -->
<view class='btn_box'>
<button type="primary" bindtap="upload_info" class='upload_info'>提交表单</button>
</view>
</view>

@ -0,0 +1,265 @@
.box{
background-color: #efeff4;
height: 100%;
width: 100%;
}
.input-placeholder{
font-size: 16px;
}
.section{
width: 100%;
height: 55px;
box-sizing: border-box;
padding-top: 15px;
font-size: 16px;
display: flex;
}
.section input{
width: 90%;
margin: 0 auto;
border-radius: 6px;
background-color:#FFF;
height: 40px;
box-sizing: border-box;
padding-left: 45px;
background-repeat: no-repeat;
background-size: 26px 26px;
background-position: 10px 7px;
}
.sex_age_box{
display: flex;
justify-content: space-between;
box-sizing: border-box;
padding: 0 5%;
}
.section_sex{
width: 47.5%;
margin-top:15px;
background-color: #FFF;
height: 40px;
border-radius: 6px;
font-size: 16px;
color: #777777;
}
.imgs_sex{
width: 26px;
height: 26px;
display: inline-block;
margin: 7px 5% 0 4%;
}
.text_sex{
position: relative;
top: -7px;
}
.section_age{
width: 47.5%;
margin-top:15px;
font-size: 16px;
}
.section_age input{
width: 100%;
margin: 0 auto;
border-radius: 6px;
background-color:#FFF;
height: 40px;
box-sizing: border-box;
padding-left: 45px;
background-repeat: no-repeat;
background-size: 26px 26px;
background-position: 10px 7px;
}
.texta{
width: 90%;
margin: 0 auto;
border-radius: 6px;
background-color:#FFF;
height: 150px;
box-sizing: border-box;
padding-left: 20px;
padding-top: 10px;
}
.upload_img{
width: 90%;
margin: 0 auto;
background-color: #FFF;
margin-top: 15px;
border-radius: 6px;
}
.upload_img_btn{
width: 100%;
height: 60px;
line-height: 60px;
border-bottom:1px solid #dddddd;
display: flex;
justify-content: space-between;
}
.upload_img_btn text{
font-size: 17px;
color: #777777;
margin-left: 10px;
}
.btn{
height: 30px;
margin: 15px 15px 0 0;
}
.img_box{
box-sizing: border-box;
padding: 10px;
}
.imgs{
width: 47.5%;
height: 180px;
}
.imgs image{
width: 100%;
height: 150px;
}
.delete{
text-align: center;
font-size: 16px;
color: red;
height: 30px;
line-height: 30px;
}
.expert_choice{
width: 90%;
margin: 15px auto;
border-radius: 6px;
background-color: #FFF;
box-sizing: border-box;
padding: 0 15px 15px 15px;
font-size: 17px;
}
.msg{
color: #777777;
}
.choice_box{
display: flex;
flex-direction: column;
margin-top: 10px;
width: 100%;
background: linear-gradient(to right, #A4DFA5 , #86D78A ,#A4DFA5);
box-sizing: border-box;
padding: 15px;
color: #FFF;
border-radius: 6px;
text-align: center;
}
.choice_msg{
margin-top: 10px;
font-size: 13px;
color: #000;
}
.expert_checkbox{
margin-top: 20px;
font-size: 12px;
color: #777777;
}
.checkbox{
margin-bottom: 15px;
}
checkbox-group{
display: flex;
flex-direction: column;
}
checkbox .wx-checkbox-input{
border-radius: 50%;
height: 18px;
width: 18px;
margin-top: -4px;
}
/* 日期选择 */
.picker_group {
height: 85rpx;
line-height: 85rpx;
justify-content: center;
display: flex;
align-items: center;
font-size: 30rpx;
color: #888;
border-bottom: 1rpx solid #efefef;
}
.picker_group picker {
/* background-color: yellow; */
color: #64bff1;
height: 55rpx;
line-height: 55rpx;
margin: 0 2%;
padding: 0 2%;
border: 1rpx solid #64bff1;
border-radius: 30rpx;
}
.me_interval{
width: 90%;
margin: 0 auto;
background-color: #FFF;
border-radius: 6px;
box-sizing: border-box;
}
.me_interval text{
font-size: 17px;
color: #777777;
margin-left: 15px;
}
.picker_group{
margin-top: 10px;
padding-bottom: 10px;
border: none;
}
.picker_group picker{
padding: 0 5%;
}
.hospitalize{
width: 90%;
margin: 15px auto;
background-color: #FFF;
border-radius: 6px;
box-sizing: border-box;
}
.hospitalize text{
font-size: 17px;
color: #777777;
margin-left: 15px;
}
.radio-group{
margin-left: 15px;
font-size: 15px;
color: #777777;
display: flex;
flex-direction: column;
line-height: 35px;
}
.btn_box{
box-sizing: border-box;
padding: 20px 5% 50px;
}
.name_box{
display: flex;
justify-content: space-between;
margin-bottom: 20px;
}
.name_box input{
width: 47.5%;
height: 30px;
border: 1px solid #DDD;
border-radius: 6px;
box-sizing: border-box;
padding-left: 15px;
}
.hedden{
display: none;
}
.show{
display: flex;
}
.title{
display: flex;
}
.shu{
width: 3px;
height: 26px;
background: #07afff;
margin: 17px 0 15px 17px;
}

@ -0,0 +1,133 @@
// pages/v9_manual/v9_manual.js
var app = getApp();
Page({
/**
* 页面的初始数据
*/
data: {
list:[]
},
toinfo:function(abc){
// console.log(abc.currentTarget.dataset.abc)
console.log(abc)
app.globalData.no=abc.currentTarget.dataset.abc
// console.log(app.globalData.no)
wx.redirectTo({
url: '/pages/info/info',
})
},
// pulldata:function(){
// var that = this
// wx.request({
// url: 'http://127.0.0.1:2020/shengpi',
// method: 'GET',
// timeout: 0,
// dataType:JSON,
// success: (result) => {
// console.log(result.data)
// // JSON.parse将JSON字符串转换成一个JS对象然后利用python的调用语法对相关内容进行操作
// var p=JSON.parse(result.data)
// that.setData({
// list:p.test1
// })
// // var p=JSON.parse(result.data)
// wx.setStorageSync('test', p.test1[0])
// this.setData({
// name:this.data.name.concat(p.test1[0]),
// test:this.data.test.concat(wx.getStorageSync('test'))
// })
// },
// })
// },
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
var that = this
wx.request({
url: 'http://127.0.0.1:2020/info',
method: 'GET',
timeout: 0,
dataType:JSON,
success: (result) => {
// console.log(result.data)
// console.log(result.data)
// JSON.parse将JSON字符串转换成一个JS对象然后利用python的调用语法对相关内容进行操作
var p=JSON.parse(result.data)
// console.log(p.test1)
// console.log(p.image)
// that.setData({
// list:p.test1
// })
// // var p=JSON.parse(result.data)
// wx.setStorageSync('test', p.test1[0])
this.setData({
list:p.test1,
// test:this.data.test.concat(wx.getStorageSync('test'))
})
},
})
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,3 @@
{
"usingComponents": {}
}

@ -0,0 +1,18 @@
<!--pages/v9_manual/v9_manual.wxml-->
<!-- <view style="height: 100rpx;"></view> -->
<text>审批</text>
<!-- <view style="height: 100rpx;"></view>
<text>每次载入得到的人名信息如下</text> -->
<!-- <view bindtap="pulldata">点击刷新</view> -->
<!-- <view>{{name}}</view>
<view>{{test}}</view> -->
<view wx:for="{{list}}" bindtap="toinfo" data-abc="{{index}}" class="container">
<view class="item">
<!-- {{index}} -->
<text>{{item[2]}}</text>
<image src="/static/image/my-o.png" class="image1"></image>
<!-- <text>100</text> -->
</view>
</view>

@ -0,0 +1,13 @@
/* pages/v9_manual/v9_manual.wxss */
.item{
padding: 40rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
}
.image1{
width: 50rpx;
height: 50rpx;
/* 如果要设置圆角的话 */
border-radius: 25rpx;
}
Loading…
Cancel
Save