diff --git a/jiandang/app.js b/jiandang/app.js
new file mode 100644
index 0000000..8fd6b59
--- /dev/null
+++ b/jiandang/app.js
@@ -0,0 +1,26 @@
+//app.js
+App({
+ onLaunch: function (option) {
+ console.log('app_options:', option)
+ var that = this
+ //调用API从本地缓存中获取数据
+ var userToken = wx.getStorageSync('userToken')
+ console.log('userToken,',userToken)
+ this.globalData.token = userToken || ''
+ // wx.setStorageSync('hospitalId', '2100001700')
+ if (option.query) {
+ if (option.query.mpid) {
+ wx.setStorageSync('mpid', option.query.mpid)
+ }
+ if (option.query.hospitalId) {
+ wx.setStorageSync('hospitalId', option.query.hospitalId)
+ }
+ }
+ this.globalData.openInfo.mpid = wx.getStorageSync('mpid')
+ this.globalData.openInfo.hospitalId = wx.getStorageSync('hospitalId')
+ },
+ globalData: {
+ openInfo:{},
+ token:''
+ }
+})
\ No newline at end of file
diff --git a/jiandang/app.json b/jiandang/app.json
new file mode 100644
index 0000000..676298b
--- /dev/null
+++ b/jiandang/app.json
@@ -0,0 +1,18 @@
+{
+ "pages":[
+ "pages/home/home",
+ "pages/index/index",
+ "pages/resetPassword/resetPassword",
+ "pages/personDetail/personDetail",
+ "pages/createDocumentList/createDocumentList",
+
+ "pages/register/register",
+ "pages/logs/logs"
+ ],
+ "window":{
+ "backgroundTextStyle":"light",
+ "navigationBarBackgroundColor": "#fff",
+ "navigationBarTitleText": "WeChat",
+ "navigationBarTextStyle":"black"
+ }
+}
diff --git a/jiandang/app.wxss b/jiandang/app.wxss
new file mode 100644
index 0000000..034b5f7
--- /dev/null
+++ b/jiandang/app.wxss
@@ -0,0 +1,45 @@
+/**app.wxss**/
+.container {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ padding: 200rpx 0;
+ box-sizing: border-box;
+}
+
+page {
+ width: 100%;
+ height: 100%;
+}
+
+.placeholder {
+ color: #C6C6C8;
+ font-size: 16px;
+}
+
+.themeColor {
+ background: #477DEB;
+}
+
+.hover_color {
+ background: #C6C6C8;
+}
+
+.hover_color_text {
+ color: #C6C6C8;
+}
+
+.bottom_line {
+ border-bottom: solid 1px #E6E6E8;
+}
+
+.loadMoreView {
+ height: 20px;
+ text-align: center;
+ font-size: 12px;
+ width: 100%;
+ background:white;
+ color: rgb(22, 22, 22)
+}
\ No newline at end of file
diff --git a/jiandang/pages/createDocumentList/createDocumentList.js b/jiandang/pages/createDocumentList/createDocumentList.js
new file mode 100644
index 0000000..d78f734
--- /dev/null
+++ b/jiandang/pages/createDocumentList/createDocumentList.js
@@ -0,0 +1,125 @@
+// pages/createDocumentList/createDocumentList.js
+const networkUtil = require('../../utils/network_util.js')
+const api = require('../../utils/apiFile.js')
+
+var page = 1
+// 是否有更多
+var hasMore
+var isRefresh
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ selectArr: [{ title: '预约建档', index: 0 }, { title: '预约成功', index: 1 }],
+ sucList: [],
+ buildList:[],
+ currentIndex:0,
+ hasMore:false,
+ cDate:''
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ hasMore = true
+ isRefresh = false
+ var date = new Date()
+ this.data.cDate = { year:date.getFullYear(), month: date.getMonth() + 1}
+ this.requestBuildList()
+ },
+ clickBar(e){
+ this.setData({
+ currentIndex: e.target.dataset.index
+ })
+ if (e.target.dataset.index == 1 && this.data.sucList.length == 0){
+ isRefresh = false
+ this.requestSuccessList()
+ }
+ },
+ // 加载更多
+ loadMore: function (e) {
+ if (isRefresh == true) {
+ return
+ }
+ this.loadData(this.data.currentIndex)
+ },
+ myScroll: function (e) {
+ if (e.detail.scrollTop >= e.detail.scrollHeight - wx.getSystemInfoSync().windowHeight - 3) {
+ this.loadMore()
+ }
+ },
+ loadData(index){
+ if (index == 0) {
+ if (!hasMore) {
+ return
+ }
+ page++
+ this.requestBuildList()
+ } else {
+ this.data.cDate.month = this.data.cDate.month - 1
+ if (this.data.cDate.month == 0) {
+ this.data.cDate.year = this.data.cDate.year - 1
+ this.data.cDate.month = 12
+ }
+ console.log('当前时间', this.data.cDate)
+ this.requestSuccessList()
+ }
+ },
+ tapmore(){
+ this.loadData(this.data.currentIndex)
+ },
+ // ------------------网络请求------------------
+ requestSuccessList(){
+ networkUtil.showLoading()
+ var self = this
+ isRefresh = true
+ networkUtil._get(api.ArchiveSuccessList, { hospitalId: getApp().globalData.openInfo.hospitalId, month: this.data.cDate.year + '-' + this.data.cDate.month + ''}, function (res) {
+ console.log(res)
+ isRefresh = false
+ var arr = self.data.sucList
+ var temp = {}
+ temp['date'] = self.data.cDate.year + '年' + self.data.cDate.month + '月'
+ temp['data'] = res.data.data
+ console.log('temp', temp)
+ arr.push(temp)
+ self.setData({
+ sucList: arr
+ })
+ }, function (res) {
+ isRefresh = false
+ networkUtil.showErrorToast(res.errormsg)
+ })
+ },
+ requestBuildList() {
+ var self = this
+ networkUtil.showLoading()
+ networkUtil._get(api.ArchiveBuildList, { hospitalId: getApp().globalData.openInfo.hospitalId,page:page,limit:15}, function (res) {
+ console.log(res)
+ isRefresh = false
+ var arr = []
+ if (page > 0) {// 加载更多模式
+ arr = self.data.buildList
+ }
+ if (res.data.data.length < 15) {
+ hasMore = false
+ }
+ arr = arr.concat(res.data.data)
+ self.setData({
+ buildList: arr,
+ hasMore: hasMore
+ })
+ }, function (res) {
+
+ networkUtil.showErrorToast(res.errormsg)
+ })
+ },
+ toDetail(e){
+ wx.navigateTo({
+ url:'../personDetail/personDetail'
+ })
+ }
+})
\ No newline at end of file
diff --git a/jiandang/pages/createDocumentList/createDocumentList.json b/jiandang/pages/createDocumentList/createDocumentList.json
new file mode 100644
index 0000000..9e04bb6
--- /dev/null
+++ b/jiandang/pages/createDocumentList/createDocumentList.json
@@ -0,0 +1,6 @@
+{
+ "backgroundColor": "#EFEFEF",
+ "navigationBarTitleText": "建档信息",
+ "navigationBarBackgroundColor": "#477DEB",
+ "navigationBarTextStyle": "white"
+}
\ No newline at end of file
diff --git a/jiandang/pages/createDocumentList/createDocumentList.wxml b/jiandang/pages/createDocumentList/createDocumentList.wxml
new file mode 100644
index 0000000..9baa843
--- /dev/null
+++ b/jiandang/pages/createDocumentList/createDocumentList.wxml
@@ -0,0 +1,29 @@
+
+ {{item.title}}
+
+
+
+ 姓名
+ 手机号
+ 日期
+
+
+
+ {{item.userName}}
+ {{item.phone}}
+ {{item.date}}
+
+
+
+
+ {{sucItem.date}}
+
+ {{item.userName}}
+ {{item.phone}}
+ {{item.date}}
+
+ 当月没有数据
+
+
+ 加载更多...
+
diff --git a/jiandang/pages/createDocumentList/createDocumentList.wxss b/jiandang/pages/createDocumentList/createDocumentList.wxss
new file mode 100644
index 0000000..cf5680c
--- /dev/null
+++ b/jiandang/pages/createDocumentList/createDocumentList.wxss
@@ -0,0 +1,71 @@
+page {
+ background: #efefef;
+}
+
+.select_bar {
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ height: 44px;
+ width: 100%;
+ z-index: 10;
+}
+
+.select_item {
+ height: 41px;
+ margin-left: 15px;
+ margin-right: 15px;
+ font-size: 16px;
+ color: #141B31;
+ line-height: 44px;
+ display: inline-block;
+}
+
+.scroll_view {
+ margin-top:48px;
+ background:#efefef;
+ height: calc(100% - 48px);
+}
+
+.info_bar {
+ height: 44px;
+ display: flex;
+ font-size: 14px;
+ color: #ADADAD;
+ text-align: center;
+ line-height: 44px;
+ background: white;
+ padding-left: 15px;
+}
+
+.date_bar {
+ font-size: 16px;
+ color: #141B31;
+ height: 36px;
+ background: #EFEFEF;
+ line-height: 36px;
+ padding-left: 15px;
+}
+
+.info_bar view:nth-child(1) {
+ flex: 2;
+ text-align: left;
+}
+
+.info_bar view:nth-child(2) {
+ flex: 4;
+ text-align: left;
+}
+
+.info_bar view:nth-child(3) {
+ flex: 3;
+ text-align: left;
+}
+
+.noData {
+ height: 45px;
+ padding-left: 15px;
+ line-height: 45px;
+ background: white
+}
+
diff --git a/jiandang/pages/home/home.js b/jiandang/pages/home/home.js
new file mode 100644
index 0000000..cde7dcf
--- /dev/null
+++ b/jiandang/pages/home/home.js
@@ -0,0 +1,207 @@
+// pages/home/home.js
+import { loginPage } from "../login/login.js"
+const app = getApp()
+const networkUtil = require('../../utils/network_util.js')
+const api = require('../../utils/apiFile.js')
+var QR_Scare = 2
+
+Page(Object.assign({}, loginPage, {
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ // 1首页 2登录
+ pageType:0,
+ areaName: app.globalData.openInfo.hospitalName || '',
+ imageUrl:'',
+ info:{}
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (option) {
+ console.log('home_options:', option)
+ if (app.globalData.token) {
+ this.homePage()
+ this.requestHomeInfo()
+ } else {
+ this.loginPage()
+ }
+ },
+ onPullDownRefresh(){
+ console.log('onPullDownRefresh')
+ if (app.globalData.token) {
+ this.requestHomeInfo()
+ }
+ },
+ homePage(){
+ this.setData({
+ pageType: 1
+ })
+ wx.setNavigationBarColor({
+ frontColor: '#ffffff',
+ backgroundColor: '#477DEB'
+ })
+ wx.setNavigationBarTitle({
+ title: '基层辅助孕妇建档平台',
+ })
+ },
+ loginPage(){
+ this.setData({
+ pageType: 2
+ })
+ wx.setNavigationBarColor({
+ frontColor: '#000000',
+ backgroundColor: '#ffffff'
+ })
+ wx.setNavigationBarTitle({
+ title: '',
+ })
+ },
+ // --------------------------首页--------------------------
+ requestHomeInfo(){
+ var self = this
+ networkUtil.showLoading()
+ networkUtil._get(api.BuildCountInfo, { hospitalId: app.globalData.openInfo.hospitalId}, function (res) {
+ console.log(res)
+ self.setData({
+ info:res.data.data,
+ imageUrl: 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' + res.data.data.ticket
+ })
+ self.setQRImage()
+ }, function (res) {
+ networkUtil.showErrorToast(res.errormsg)
+ self.setQRImage()
+ })
+ },
+ logout() {
+ var self = this
+ wx.showModal({
+ title: '提示',
+ content: '是否退出登录?',
+ success: function (res) {
+ if (res.confirm) {
+ wx.setStorageSync('userToken', '')
+ wx.setStorageSync('QR_FilePath', '')
+ app.globalData.token = ''
+ self.loginPage()
+ } else if (res.cancel) {
+
+ }
+ }
+ })
+ },
+ longTapImage() {
+ var self = this
+ wx.showActionSheet({
+ itemList: ['查看大图'],
+ success: function (res) {
+ console.log('111', res)
+ if (res.tapIndex == 0) {
+ console.log('111', res.tapIndex)
+ wx.previewImage({
+ urls: [self.data.imageUrl],
+ })
+ }
+ },
+ fail: function (res) {
+ console.log(res.errMsg)
+ }
+ })
+ },
+ // 二维码相关
+ setQRImage() {
+ var fileP = wx.getStorageSync('QR_FilePath')
+ if (fileP) {
+ this.drawQR(fileP)
+ this.data.imageUrl = fileP
+ console.log('已经有了', fileP)
+ } else {
+ this.downLoadQR()
+ }
+ },
+ downLoadQR() {
+ networkUtil.showLoading('获取二维码中')
+ var self = this
+ wx.downloadFile({
+ url: self.data.imageUrl,
+ success: function (res) {
+ if (res.statusCode === 200) {
+ wx.setStorageSync('QR_FilePath', res.tempFilePath)
+ self.drawQR(res.tempFilePath)
+ // setTimeout(function () {
+ // 延迟等绘制完保存成图片
+ // wx.canvasToTempFilePath({
+ // x: 0,
+ // y: 0,
+ // width: 174,
+ // height: 174,
+ // destWidth: 696,
+ // destHeight: 696,
+ // canvasId: 'QR_canvas',
+ // quality: 1,
+ // success: function (res) {
+ // console.log('成功:', res.tempFilePath)
+ // wx.setStorageSync('QR_FilePath', res.tempFilePath)
+ // self.data.imageUrl = res.tempFilePath
+ // }
+ // })
+ // }, 3500)
+ }
+ },
+ fail: function () {
+ networkUtil.showErrorToast('未加载出二维码,请下拉刷新页面')
+ },
+ complete: function () {
+ wx.hideToast()
+ }
+ })
+ },
+ drawQR(QRImage) {
+ var ctx = wx.createCanvasContext('QR_canvas', this)
+ ctx.drawImage(QRImage, 0, 0, 174, 174)
+ // ctx.drawImage('../../utils/image/icon.png', 57, 57, 60, 60)
+ ctx.draw()
+ },
+ // --------------------------登录--------------------------
+ submitLoginData(e){
+ console.log(e)
+ var str = ''
+ if (!e.detail.value.phone) {
+ str = '请填写您的手机号'
+ } else if (e.detail.value.phone.length < 11) {
+ str = '请填写正确的手机号'
+ } else if (!e.detail.value.loginPwd) {
+ str = '请输入密码'
+ } else if (e.detail.value.loginPwd.length < 6) {
+ str = '密码必须为6位以上'
+ }
+ if (str) {
+ networkUtil.showErrorToast(str)
+ return
+ }
+ var self = this
+ var param = e.detail.value
+ if (!app.globalData.openInfo.hospitalId){
+ networkUtil.showErrorToast('未从二维码中获取到医院信息')
+ return
+ }
+ param.hospitalId = app.globalData.openInfo.hospitalId
+ networkUtil.showLoading()
+ networkUtil._get(api.login, param, function (res) {
+ console.log(res)
+ wx.showToast({
+ title: '登录成功',
+ icon: 'success',
+ duration: 2000
+ })
+ app.globalData.token = res.data.token
+ wx.setStorageSync('userToken', res.data.token)
+ self.homePage()
+ self.requestHomeInfo()
+ }, function (res) {
+ networkUtil.showErrorToast(res.errormsg)
+ })
+ }
+}))
diff --git a/jiandang/pages/home/home.json b/jiandang/pages/home/home.json
new file mode 100644
index 0000000..4b88b40
--- /dev/null
+++ b/jiandang/pages/home/home.json
@@ -0,0 +1,7 @@
+{
+ "backgroundColor": "#477DEB",
+ "navigationBarTitleText": "基层辅助孕妇建档平台",
+ "navigationBarBackgroundColor": "white",
+ "navigationBarTextStyle": "white",
+ "enablePullDownRefresh": true
+}
\ No newline at end of file
diff --git a/jiandang/pages/home/home.wxml b/jiandang/pages/home/home.wxml
new file mode 100644
index 0000000..7241b19
--- /dev/null
+++ b/jiandang/pages/home/home.wxml
@@ -0,0 +1,56 @@
+
+
+
+
+ {{info.userName}}
+ 医生
+ {{info.phone}}
+ 退出
+
+
+
+ 预约建档推广二维码
+
+
+
+
+ 汇总信息
+ {{info.month}}
+
+
+
+
+
+
+ 本月建档成功孕妇
+
+ {{info.currentMonthSuccessCount}}
+ 人
+
+
+
+
+ 历史建档成功总孕妇
+
+ {{info.allSuccessCount}}
+ 人
+
+
+
+
+ 预约建档待确认孕妇
+
+ {{info.archiveSuccessCount}}
+ 人
+
+
+
+ 查看建档信息
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jiandang/pages/home/home.wxss b/jiandang/pages/home/home.wxss
new file mode 100644
index 0000000..70389cb
--- /dev/null
+++ b/jiandang/pages/home/home.wxss
@@ -0,0 +1,114 @@
+/* pages/home/home.wxss */
+@import "../login/login.wxss";
+
+.temp_width {
+ width: calc(100% - 20px);
+ margin-left: 10px;
+ background: white;
+}
+
+.topImageBg {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ font-size: 15px;
+ color: #595959;
+ height: 308px;
+}
+
+.top_info_bar {
+ width: 100%;
+ height: 44px;
+ background: #F8FAFF;
+ font-size: 15px;
+ color: #888888;
+}
+
+.top_info_bar text:first-child{
+ color: #333333;
+ font-weight: 555;
+}
+
+.top_info_bar text {
+ margin-left: 10px;
+ height: 100%;
+ line-height: 44px;
+}
+
+.exit {
+ float: right;
+ width: 80px;
+ transform: translateX(-10px);
+ text-align: right;
+ color: #477DEB;
+}
+
+.QR_canvas {
+ width: 174px;
+ height: 174px;
+ margin-top: 30px;
+ margin-bottom: 15px;
+}
+
+.QR_canvas_screen {
+ width: 358px;
+ height: 358px;
+}
+
+.allInfo_bg {
+ margin-top: 10px;
+
+}
+
+.cell_width {
+ width: calc(100% - 40px);
+ margin-left: 20px;
+}
+
+.allInfo_title {
+ font-size: 20px;
+ color: #333333;
+ font-weight: 555;
+ height: 54px;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+}
+
+.allInfo_cell {
+ height: 25px;
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-end;
+ margin-top: 16px;
+}
+
+.allInfo_cell_title {
+ font-size: 14px;
+ color: #676B75;
+}
+
+.allInfo_cell view {
+ transform: translateY(5px);
+}
+
+.allInfo_cell_num {
+ font-size: 24px;
+ color: #333333;
+}
+
+.allInfo_cell_unit {
+ font-size: 14px;
+ color: #676B75;
+}
+
+.lookBtn {
+ height: 44px;
+ background: #477DEB;
+ border-radius: 22px;
+ color: white;
+ line-height: 44px;
+ text-align: center;
+ margin-top: 55px;
+}
diff --git a/jiandang/pages/index/index.js b/jiandang/pages/index/index.js
new file mode 100644
index 0000000..8145efd
--- /dev/null
+++ b/jiandang/pages/index/index.js
@@ -0,0 +1,12 @@
+//logs.js
+const networkUtil = require('../../utils/network_util.js')
+const api = require('../../utils/apiFile.js')
+
+Page({
+ data: {
+ logs: [],
+ qrimage:''
+ },
+ onLoad: function () {
+ }
+})
diff --git a/jiandang/pages/index/index.json b/jiandang/pages/index/index.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/jiandang/pages/index/index.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/jiandang/pages/index/index.wxml b/jiandang/pages/index/index.wxml
new file mode 100644
index 0000000..bf2c0d5
--- /dev/null
+++ b/jiandang/pages/index/index.wxml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/jiandang/pages/index/index.wxss b/jiandang/pages/index/index.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/jiandang/pages/login/login.js b/jiandang/pages/login/login.js
new file mode 100644
index 0000000..8a54472
--- /dev/null
+++ b/jiandang/pages/login/login.js
@@ -0,0 +1,4 @@
+// login page
+export let LoginPage = {
+
+};
diff --git a/jiandang/pages/login/login.json b/jiandang/pages/login/login.json
new file mode 100644
index 0000000..2303215
--- /dev/null
+++ b/jiandang/pages/login/login.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": ""
+}
\ No newline at end of file
diff --git a/jiandang/pages/login/login.wxml b/jiandang/pages/login/login.wxml
new file mode 100644
index 0000000..b847ea1
--- /dev/null
+++ b/jiandang/pages/login/login.wxml
@@ -0,0 +1,15 @@
+手机号码登录
+欢迎使用{{areaName}}基层妇幼辅助孕妇建档平台,请使用注册手机号和密码登录
+
\ No newline at end of file
diff --git a/jiandang/pages/login/login.wxss b/jiandang/pages/login/login.wxss
new file mode 100644
index 0000000..cbef297
--- /dev/null
+++ b/jiandang/pages/login/login.wxss
@@ -0,0 +1,49 @@
+/* pages/login/login.wxss */
+
+.element_width {
+ width: calc(100% - 60px);
+ margin-left: 30px;
+}
+
+.title {
+ font-size: 24px;
+ color: #141B31;
+ font-weight: 600;
+ margin-top: 30px;
+}
+
+.noti {
+ font-size: 14px;
+ color: #7B808F;
+ margin-top: 14px;
+ margin-bottom: 30px;
+}
+
+.input_box {
+ height: 48px;
+ margin-bottom: 10px;
+}
+
+input {
+ height: 100%;
+ font-size: 16px;
+ color: #141B31;
+ text-align: left;
+}
+
+.loginBtn {
+ height: 44px;
+ border-radius: 22px;
+ color: white;
+ line-height: 44px;
+ text-align: center;
+ margin-top: 30px;
+}
+
+.bottom_btn {
+ font-size: 16px;
+ color: #A1A5AA;
+ display: flex;
+ justify-content: space-around;
+ margin-top: 20px;
+}
\ No newline at end of file
diff --git a/jiandang/pages/logs/logs.js b/jiandang/pages/logs/logs.js
new file mode 100644
index 0000000..b2b967d
--- /dev/null
+++ b/jiandang/pages/logs/logs.js
@@ -0,0 +1,15 @@
+//logs.js
+const util = require('../../utils/util.js')
+
+Page({
+ data: {
+ logs: []
+ },
+ onLoad: function () {
+ this.setData({
+ logs: (wx.getStorageSync('logs') || []).map(log => {
+ return util.formatTime(new Date(log))
+ })
+ })
+ }
+})
diff --git a/jiandang/pages/logs/logs.json b/jiandang/pages/logs/logs.json
new file mode 100644
index 0000000..28379bc
--- /dev/null
+++ b/jiandang/pages/logs/logs.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "查看启动日志"
+}
\ No newline at end of file
diff --git a/jiandang/pages/logs/logs.wxml b/jiandang/pages/logs/logs.wxml
new file mode 100644
index 0000000..b5a85ac
--- /dev/null
+++ b/jiandang/pages/logs/logs.wxml
@@ -0,0 +1,6 @@
+
+
+
+ {{index + 1}}. {{log}}
+
+
diff --git a/jiandang/pages/logs/logs.wxss b/jiandang/pages/logs/logs.wxss
new file mode 100644
index 0000000..94d4b88
--- /dev/null
+++ b/jiandang/pages/logs/logs.wxss
@@ -0,0 +1,8 @@
+.log-list {
+ display: flex;
+ flex-direction: column;
+ padding: 40rpx;
+}
+.log-item {
+ margin: 10rpx;
+}
diff --git a/jiandang/pages/personDetail/personDetail.js b/jiandang/pages/personDetail/personDetail.js
new file mode 100644
index 0000000..da238af
--- /dev/null
+++ b/jiandang/pages/personDetail/personDetail.js
@@ -0,0 +1,39 @@
+// pages/personDetail/personDetail.js
+const networkUtil = require('../../utils/network_util.js')
+const api = require('../../utils/apiFile.js')
+const util = require('../../utils/util.js')
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ this.requestData(options.archiveId)
+ },
+ requestData(archiveId) {
+ networkUtil.showLoading()
+ var param = { hospitalId: getApp().globalData.openInfo.hospitalId, archiveId: archiveId}
+ var self = this
+ networkUtil._get(api.ArchiveUserInfo, param, function (res) {
+ var info = JSON.parse(res.data.data)
+ // var b = new Date(info.birthDay * 1000)
+ info.age = util.GetAge(info.idCard)
+ info.idCard
+ // info.birth_date = b.getFullYear() + '年' + (b.getMonth() + 1) + '月' + b.getDate() + '日'
+ info.birth_date = util.getBirthDayFromIdCard(info.idCard)
+ self.setData({
+ info: info
+ })
+ }, function (res) {
+ networkUtil.showErrorToast(res.errormsg)
+ })
+ }
+})
\ No newline at end of file
diff --git a/jiandang/pages/personDetail/personDetail.json b/jiandang/pages/personDetail/personDetail.json
new file mode 100644
index 0000000..9cfbb57
--- /dev/null
+++ b/jiandang/pages/personDetail/personDetail.json
@@ -0,0 +1,6 @@
+{
+ "backgroundColor": "#EFEFEF",
+ "navigationBarTitleText": "个人信息",
+ "navigationBarBackgroundColor": "#477DEB",
+ "navigationBarTextStyle": "white"
+}
\ No newline at end of file
diff --git a/jiandang/pages/personDetail/personDetail.wxml b/jiandang/pages/personDetail/personDetail.wxml
new file mode 100644
index 0000000..cbe3bdb
--- /dev/null
+++ b/jiandang/pages/personDetail/personDetail.wxml
@@ -0,0 +1,58 @@
+
+
+
+ 孕妇基本信息
+
+
+ 姓名
+ {{info.name}}
+
+
+ 证件类型
+ 身份证
+
+
+ 证件号
+ {{info.idCard}}
+
+
+ 国籍
+ {{info.nationality}}
+
+
+ 民族
+ {{info.nation}}
+
+
+ 出生日期
+ {{info.birth_date}}
+
+
+ 年龄
+ {{info.age}}
+
+
+
+
+
+
+ 孕妇联系方式
+
+
+ 联系方式
+ {{info.data || info.phone}}
+
+
+ 居住地
+ {{info.currentAddress[0].provinceName + info.currentAddress[0].districtName + info.currentAddress[0].cityName + (info.currentAddress[0].streetName || "") + info.currentAddress[0].address}}
+
+
+ 户籍地
+ {{info.permanentAddress[0].provinceName + info.permanentAddress[0].districtName + info.permanentAddress[0].cityName + (info.permanentAddress[0].streetName || "") + info.permanentAddress[0].address}}
+
+
+ 产后休养地
+ {{info.healthResort[0].provinceName + info.healthResort[0].districtName + info.healthResort[0].cityName + (info.healthResort[0].streetName || "") + info.healthResort[0].address}}
+
+
+
diff --git a/jiandang/pages/personDetail/personDetail.wxss b/jiandang/pages/personDetail/personDetail.wxss
new file mode 100644
index 0000000..fe2d199
--- /dev/null
+++ b/jiandang/pages/personDetail/personDetail.wxss
@@ -0,0 +1,53 @@
+page {
+ background: rgb(239, 239, 239)
+}
+
+.section {
+ width: 100%;
+ background: white;
+}
+
+.title_bar {
+ height: 20px;
+ font-size: 16px;
+ color: #141B31;
+ font-weight: 555;
+ margin-top: 10px;
+ padding-top: 20px;
+}
+
+.title_bar image {
+ height: 16px;
+ width: 4px;
+ background: #477DEB;
+ transform: translateY(1px);
+ margin-right: 10px;
+}
+
+.base_info_cell {
+ display: flex;
+ justify-content: space-between;
+ font-size: 15px;
+ color: #141B31;
+ height: 20px;
+ margin-top: 18px;
+ margin-left: 15px;
+ margin-right: 15px;
+}
+
+.base_info_cell text:last-child {
+ color: #777A86;
+}
+
+.detail_info_cell {
+ font-size: 15px;
+ color: #777A86;
+ margin-left: 15px;
+ min-height: 55px;
+ padding-top: 15px;
+}
+
+.detail_info_cell view:first-child {
+ color: #141B31;
+ margin-bottom: 5px;
+}
\ No newline at end of file
diff --git a/jiandang/pages/register/register.js b/jiandang/pages/register/register.js
new file mode 100644
index 0000000..077a170
--- /dev/null
+++ b/jiandang/pages/register/register.js
@@ -0,0 +1,129 @@
+// pages/register/register.js
+var networkUtil = require('../../utils/network_util.js')
+var api = require('../../utils/apiFile.js')
+var util = require('../../utils/util.js')
+
+var timeCount = 60;
+var timer;
+Page({
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ time: '获取验证码',
+ areaName: getApp().globalData.openInfo.hospitalName || ''
+ },
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function() {
+ timeCount = 60
+ clearTimeout(timer)
+ },
+
+ /*-------自定义--------*/
+ // 计时器
+ keepTime: function() {
+ var that = this
+ timeCount--
+ that.setData({
+ time: timeCount + 's'
+ })
+ if (timeCount == 0) {
+ timeCount = 60
+ clearTimeout(timer);
+ return
+ }
+ timer = setTimeout(function() {
+ that.keepTime()
+ }, 1000)
+ },
+ inputPhone(e) {
+ this.data.phone = e.detail.value
+ },
+ // 获取验证码
+ getVerifyCode: function(e) {
+ if (timeCount < 60) {
+ return
+ }
+ if (this.data.phone.length != 11 || this.data.phone[0] != '1') {
+ networkUtil.showErrorToast('请填写正确的手机号')
+ return
+ }
+ var that = this
+ networkUtil._get(api.bindDoc, {
+ phone: this.data.phone
+ }, function(res) {
+
+ }, function(res) {
+ timeCount = 60
+ clearTimeout(timer);
+ that.setData({
+ time: '0s'
+ })
+ networkUtil.showErrorToast('获取验证码失败,请稍后再试')
+ })
+ if (timeCount == 60) {
+ this.keepTime()
+ }
+ },
+ submitData(e) {
+ var str = ''
+ if (!e.detail.value.userName) {
+ str = '请填写您的姓名'
+ } else
+ if (!e.detail.value.cardNo) {
+ str = '请填写您的身份证号'
+ } else
+ if (!util.checkIdCard(e.detail.value.cardNo)) {
+ str = '请填写正确的身份证号'
+ } else
+ if (!e.detail.value.phone) {
+ str = '请填写您的手机号'
+ } else
+ if (e.detail.value.phone.length != 11) {
+ str = '请填写正确的手机号'
+ } else
+ if (!e.detail.value.code) {
+ str = '请填写验证码'
+ } else
+ if (!e.detail.value.password) {
+ str = '请输入密码'
+ } else
+ if (!e.detail.value.passwordS) {
+ str = '请再次确认密码'
+ } else
+ if (e.detail.value.password.length < 6) {
+ str = '密码必须为6位以上'
+ } else
+ if (!str && e.detail.value.password != e.detail.value.passwordS) {
+ str = '两次密码输入不一致'
+ }
+ if (str) {
+ networkUtil.showErrorToast(str)
+ return
+ }
+ networkUtil.showLoading()
+ var param = e.detail.value
+ if (!getApp().globalData.openInfo.hospitalId) {
+ networkUtil.showErrorToast('未从二维码中获取到医院信息')
+ return
+ }
+ delete param.passwordS
+ param.hospitalId = getApp().globalData.openInfo.hospitalId
+ networkUtil._post(api.register, param, function(res) {
+ console.log(res)
+ wx.showToast({
+ title: '注册成功',
+ icon: 'success',
+ duration: 2000
+ })
+ setTimeout(function() {
+ wx.navigateBack({})
+ }, 1000)
+ }, function(res) {
+
+ networkUtil.showErrorToast(res.errormsg)
+ }, 'application/json')
+ }
+})
\ No newline at end of file
diff --git a/jiandang/pages/register/register.json b/jiandang/pages/register/register.json
new file mode 100644
index 0000000..2303215
--- /dev/null
+++ b/jiandang/pages/register/register.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": ""
+}
\ No newline at end of file
diff --git a/jiandang/pages/register/register.wxml b/jiandang/pages/register/register.wxml
new file mode 100644
index 0000000..6d38eaa
--- /dev/null
+++ b/jiandang/pages/register/register.wxml
@@ -0,0 +1,32 @@
+{{areaName}}基层辅助孕妇建档平台
+欢迎使用{{areaName}}基层妇幼辅助孕妇建档平台,成为基层辅助医生需要您绑定以下个人信息
+
+
diff --git a/jiandang/pages/register/register.wxss b/jiandang/pages/register/register.wxss
new file mode 100644
index 0000000..7794bff
--- /dev/null
+++ b/jiandang/pages/register/register.wxss
@@ -0,0 +1,13 @@
+@import '../login/login.wxss';
+
+.flex_box {
+ display: flex;
+ justify-content: space-between;
+}
+
+.input_box view {
+ width: 80px;
+ font-size: 16px;
+ color: #676B75;
+ line-height: 48px;
+}
\ No newline at end of file
diff --git a/jiandang/pages/resetPassword/resetPassword.js b/jiandang/pages/resetPassword/resetPassword.js
new file mode 100644
index 0000000..3a26679
--- /dev/null
+++ b/jiandang/pages/resetPassword/resetPassword.js
@@ -0,0 +1,121 @@
+//重置密码
+var networkUtil = require('../../utils/network_util.js')
+var api = require('../../utils/apiFile.js')
+
+var timeCount = 60;
+var timer;
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ time: '获取验证码',
+ areaName: getApp().globalData.openInfo.hospitalName || ''
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function(options) {
+
+ },
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function() {
+ timeCount = 60
+ clearTimeout(timer)
+ },
+
+ /*-------自定义--------*/
+ // 计时器
+ keepTime: function() {
+ var that = this
+ timeCount--
+ that.setData({
+ time: timeCount + 's'
+ })
+ if (timeCount == 0) {
+ timeCount = 60
+ clearTimeout(timer);
+ return
+ }
+ timer = setTimeout(function() {
+ that.keepTime()
+ }, 1000)
+ },
+ inputPhone(e) {
+ this.data.phone = e.detail.value
+ },
+ // 获取验证码
+ getVerifyCode: function(e) {
+ if (timeCount < 60) {
+ return
+ }
+ if (this.data.phone.length != 11 || this.data.phone[0] != '1') {
+ networkUtil.showErrorToast('请填写正确的手机号')
+ return
+ }
+ var that = this
+ networkUtil._get(api.bindDoc, { phone: this.data.phone }, function (res) {
+
+ }, function (res) {
+ timeCount = 60
+ clearTimeout(timer);
+ that.setData({
+ time: '0s'
+ })
+ networkUtil.showErrorToast('获取验证码失败,请稍后再试')
+ })
+ if (timeCount == 60) {
+ this.keepTime()
+ }
+ },
+ submitData(e) {
+ var str = ''
+ if (!e.detail.value.phone) {
+ str = '请填写您的手机号'
+ } else
+ if (e.detail.value.phone.length < 11) {
+ str = '请填写正确的手机号'
+ } else if (!e.detail.value.code) {
+ str = '请填写验证码'
+ } else
+ if (!e.detail.value.newPwd) {
+ str = '请输入密码'
+ } else
+ if (!e.detail.value.passwordS) {
+ str = '请再次确认密码'
+ } else
+ if (e.detail.value.newPwd.length < 6) {
+ str = '密码必须为6位以上'
+ } else
+ if (!str && e.detail.value.newPwd != e.detail.value.passwordS) {
+ str = '两次密码输入不一致'
+ }
+ if (str) {
+ networkUtil.showErrorToast(str)
+ return
+ }
+ networkUtil.showLoading()
+ var param = e.detail.value
+ if (!getApp().globalData.openInfo.hospitalId) {
+ networkUtil.showErrorToast('缺少医院iD')
+ return
+ }
+ param.hospitalId = getApp().globalData.openInfo.hospitalId
+ delete param.passwordS
+ networkUtil._get(api.updatePwd, param, function(res) {
+ console.log(res)
+ wx.showToast({
+ title: '成功修改密码',
+ icon: 'success',
+ duration: 2000
+ })
+ setTimeout(function () { wx.navigateBack({}) }, 1000)
+ }, function(res) {
+ networkUtil.showErrorToast(res.errormsg)
+ })
+ }
+})
\ No newline at end of file
diff --git a/jiandang/pages/resetPassword/resetPassword.json b/jiandang/pages/resetPassword/resetPassword.json
new file mode 100644
index 0000000..2303215
--- /dev/null
+++ b/jiandang/pages/resetPassword/resetPassword.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": ""
+}
\ No newline at end of file
diff --git a/jiandang/pages/resetPassword/resetPassword.wxml b/jiandang/pages/resetPassword/resetPassword.wxml
new file mode 100644
index 0000000..3c970f2
--- /dev/null
+++ b/jiandang/pages/resetPassword/resetPassword.wxml
@@ -0,0 +1,25 @@
+重置密码
+欢迎使用{{areaName}}基层妇幼辅助孕妇建档平台,忘记密码时需要依据您注册时的手机号进行找回密码
+
+
diff --git a/jiandang/pages/resetPassword/resetPassword.wxss b/jiandang/pages/resetPassword/resetPassword.wxss
new file mode 100644
index 0000000..7794bff
--- /dev/null
+++ b/jiandang/pages/resetPassword/resetPassword.wxss
@@ -0,0 +1,13 @@
+@import '../login/login.wxss';
+
+.flex_box {
+ display: flex;
+ justify-content: space-between;
+}
+
+.input_box view {
+ width: 80px;
+ font-size: 16px;
+ color: #676B75;
+ line-height: 48px;
+}
\ No newline at end of file
diff --git a/jiandang/project.config.json b/jiandang/project.config.json
new file mode 100644
index 0000000..5985b2f
--- /dev/null
+++ b/jiandang/project.config.json
@@ -0,0 +1,36 @@
+{
+ "description": "项目配置文件。",
+ "packOptions": {
+ "ignore": []
+ },
+ "setting": {
+ "urlCheck": false,
+ "es6": true,
+ "postcss": true,
+ "minified": true,
+ "newFeature": true
+ },
+ "compileType": "miniprogram",
+ "libVersion": "2.2.2",
+ "appid": "wx721a1c6649fac410",
+ "projectname": "jiandang",
+ "isGameTourist": false,
+ "condition": {
+ "search": {
+ "current": -1,
+ "list": []
+ },
+ "conversation": {
+ "current": -1,
+ "list": []
+ },
+ "game": {
+ "currentL": -1,
+ "list": []
+ },
+ "miniprogram": {
+ "current": -1,
+ "list": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/jiandang/utils/apiFile.js b/jiandang/utils/apiFile.js
new file mode 100644
index 0000000..16390f4
--- /dev/null
+++ b/jiandang/utils/apiFile.js
@@ -0,0 +1,21 @@
+module.exports = {
+ getOpenId:'wx/getOpenId',
+ /*------建档------*/
+
+ // 校验验证码并且绑定建档
+ login: 'assist/login',
+ // 获取验证码
+ bindDoc: 'assist/getCodes',
+ // 注册
+ register: 'assist/regAssistBuildUser',
+ // 首页汇总信息
+ BuildCountInfo: 'assist/getAssisBuildCountInfo',
+ // 修改密码
+ updatePwd: 'assist/updatePwd',
+ // 预约成功列表
+ ArchiveSuccessList: 'assist/getArchiveSuccessList',
+ // 预约建档列表
+ ArchiveBuildList: 'assist/getArchiveBuildList',
+ // 预约用户信息
+ ArchiveUserInfo: 'assist/getArchiveUserInfo',
+}
\ No newline at end of file
diff --git a/jiandang/utils/image/icon.png b/jiandang/utils/image/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..b978ff1f79c4328dace31826f3ad10461535f1a0
GIT binary patch
literal 43779
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 {
+ const year = date.getFullYear()
+ const month = date.getMonth() + 1
+ const day = date.getDate()
+ const hour = date.getHours()
+ const minute = date.getMinutes()
+ const second = date.getSeconds()
+
+ return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
+}
+
+const formatNumber = n => {
+ n = n.toString()
+ return n[1] ? n : '0' + n
+}
+
+const GetAge = identityCard => {
+ var len = (identityCard + "").length;
+ if (len == 0) {
+ return 0;
+ } else {
+ if ((len != 15) && (len != 18))//身份证号码只能为15位或18位其它不合法
+ {
+ return 0;
+ }
+ }
+ var strBirthday = "";
+ if (len == 18)//处理18位的身份证号码从号码中得到生日和性别代码
+ {
+ strBirthday = identityCard.substr(6, 4) + "/" + identityCard.substr(10, 2) + "/" + identityCard.substr(12, 2);
+ }
+ if (len == 15) {
+ strBirthday = "19" + identityCard.substr(6, 2) + "/" + identityCard.substr(8, 2) + "/" + identityCard.substr(10, 2);
+ }
+ //时间字符串里,必须是“/”
+ var birthDate = new Date(strBirthday);
+ var nowDateTime = new Date();
+ var age = nowDateTime.getFullYear() - birthDate.getFullYear();
+ //再考虑月、天的因素;.getMonth()获取的是从0开始的,这里进行比较,不需要加1
+ if (nowDateTime.getMonth() < birthDate.getMonth() || (nowDateTime.getMonth() == birthDate.getMonth() && nowDateTime.getDate() < birthDate.getDate())) {
+ age--;
+ }
+ return age;
+}
+
+/**
+* 检查身份证合法
+* @param str_idCard sex为human man
+* @returns {boolean}
+*/
+function checkIdCard(str_idCard, sex) {
+ str_idCard = str_idCard || String(this);
+ var check = function () {
+ var factorArr = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
+ var parityBit = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
+ var varArray = new Array();
+ var lngProduct = 0;
+ var intCheckDigit;
+ var intStrLen = str_idCard.length;
+ var idNumber = str_idCard;
+ // initialize
+ if ((intStrLen != 15) && (intStrLen != 18)) {
+ return false;
+ }
+ // check and set value
+ for (var i = 0; i < intStrLen; i++) {
+ varArray[i] = idNumber.charAt(i);
+ if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {
+ return false;
+ } else if (i < 17) {
+ varArray[i] = varArray[i] * factorArr[i];
+ }
+ }
+
+ if (intStrLen == 18) {
+ var date8 = idNumber.substring(6, 14);
+
+ if (!/^[0-9]{8}$/.test(date8)) {
+ return false;
+ }
+ var year, month, day;
+ year = date8.substring(0, 4);
+ month = date8.substring(4, 6);
+ day = date8.substring(6, 8);
+ var iaMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
+ if (year < 1700 || year > 2500) return false;
+ if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1] = 29;
+ if (month < 1 || month > 12) return false;
+ if (day < 1 || day > iaMonthDays[month - 1]) return false;
+
+ // calculate the sum of the products
+ for (i = 0; i < 17; i++) {
+ lngProduct = lngProduct + varArray[i];
+ }
+ // calculate the check digit
+ intCheckDigit = parityBit[lngProduct % 11];
+ // check last digit
+ if (varArray[17] != intCheckDigit) {
+ return false;
+ }
+ }
+ //length is 15
+ else {
+ var date6 = idNumber.substring(6, 12);
+
+ if (!/^[0-9]{6}$/.test(date6)) {
+ return false;
+ }
+ var month, day, year;
+ year = date6.substring(0, 2);
+ month = date6.substring(2, 4);
+ day = date6.substring(4, 6);
+ if (!/^\d{2}$/.test(year)) return false;
+ if (month < 1 || month > 12) return false;
+ if (day < 1 || day > 31) return false;
+ }
+ return true;
+ }
+ if (str_idCard && check(str_idCard)) {
+ if (undefined != sex) {
+ var sexStr = undefined, tmp = 0;
+ if (15 == str_idCard.length) {
+ tmp = str_idCard.substring(str_idCard.length - 1, str_idCard.length);
+ } else if (18 == str_idCard.length) {
+ tmp = str_idCard.substr(str_idCard.length - 2, 1);
+ }
+ if (0 == tmp % 2) {
+ sexStr = 'woman';
+ } else {
+ sexStr = 'man';
+ }
+
+ if (sex != sexStr) return false;
+ }
+ return true;
+ }
+ return false;
+}
+
+function getBirthDayFromIdCard(idCard,unit){
+ var year = idCard.substring(6, 10)
+ var month = idCard.substring(10, 12)
+ var day = idCard.substring(12, 14)
+ return year + (unit || '年') + month + (unit || '月') + day + (unit || '日')
+}
+
+module.exports = {
+ formatTime: formatTime,
+ GetAge: GetAge,
+ checkIdCard: checkIdCard,
+ getBirthDayFromIdCard: getBirthDayFromIdCard
+}