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}}基层妇幼辅助孕妇建档平台,成为基层辅助医生需要您绑定以下个人信息 + +
+ + + + + + + + + + + {{time == '0s' ? '再次获取' : time}} + + + + + + + + + + + + + + + + +
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}}基层妇幼辅助孕妇建档平台,忘记密码时需要依据您注册时的手机号进行找回密码 + +
+ + + + {{time == '0s' ? '再次获取' : time}} + + + + + + + + + + + + + + + + +
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 zcmeFZ2|Uzm`#=7X99ktr$jDAH_ASg&p&?{!*^gx~#8@*$=9Ey@8e3TtnvfjXS}<7) zA!{MajD0CHvJ7VVebjT#d7kHYzQ5n||Nfuzdi|g8|BUUPd+zPJ?)$p#>v~_;2lFFy z0yt!305hQ|R8d|53TVSH z{w{7l$Y2pyq$kQxM|AlWK~x0gt|MxrYNBA`e+KD=I(Ib?X>rxm((S5`o2I)cOjkr3 zqlNMH_eBP~h+up#`2}fVbVR=mt_7BNs-dDH-C*wIk1IX&=tR67mS==kl3#y zoJ9t?1)}_eQD{Groe^DJ(ILS)qTtNmmgN5{tA88(A2{&a$KUwyYbTJZKW_dj!+ve( z?)F;gTO%*cX;rfIllfTCcicRhgJMKtgr8Ht%HK~FN0+K zpLQ+C@`^taia-XTLjv89`j^2O#eSVEC>VkKou7X=**|s%n}eNyV}};}%$W;;Xb;pS zq>kwKLyIsxEg}tWhlb4Gw>yKrgbp-8yMxV?cP97OG66T<-6h!NtV=LhxpN%l6g1=% zl`Vfg%qPIJt)TF|@tHs**zAv*eml8;-xQn#<#FYYntl_Jzi;|&RCJ&v8hz>4)&Czw zPE^F*P0Irv=<5Qq9OdiciG+IlBR#(@(Zoc{ED!|>h0CS0Xt$7^eTARZ5d|rgcSpHv zxhiQWD7h(l$f>HjxXY=yX)4HRs4J+;xge3M8cMDjZmKHCU&n#_1qHkKxgme;j{^H^ zD7d&OxGO5jxv485q`HF3N72uI}Gi1+L@o=l?Ee?r1k~jNf-n zLrG0ZK?CV7=k5V6Nl{VVRnEoDU0KduT~STdLqk(j38}FoIN<8R@y?-wg3*Cj{w9hR z$bi3ch>(m*8Mt>J2DWpvywlU=C?J7 z{5vN6@1M4R>t6k968Vqk@Atie?%YA&MG5-PQuh7*+3)-`*x90QYFZ2Z|60F%ALoyx z>0dp0p#IkawaIV#?T_^fQUN@yNM)BD{o?jt>6e|8^oW~N#or7EU6H?D ze{tY14*bP|zc}z02ma!~|Nl7fJM@6`1Fh{)5Lf`1p8@yZ9X4fo1wi98++_C-vH}1n zg;?wWRzV3vArOJt1?&>qr3-NEcp3^CipoN}V8A{_1w~~QMbIHsQ25qQ;#J044iUt3-Z^yaN+#Un0{zKAEY>x@(v0Pxg3hQay9a1RCLU(+p)Ohl+?8Jd-pRQ z<`)z`!apu5epXRgRbBJ^#mmN~=9bnsZ`;~?`}zk4KYSb-CXyznre|j7<`*a{Usu=G zH>jIiJ9O>P`RnUDW&cDM$OM*MyLYqhX5XQUWmhQp!^*Xr?YQC(hxN?aT>`j8m9BH} zoW7e^-mphZ8A0ZC4eZ%_L|la^LD?bg8)g3*VK@F;l>J87?{tj-XF$pSmtVVnf3g1d zVuFMG-3YrtF6{d4!+*8F90h?~5#}(kpOpnXOsrf03}7&%fd{*O-V6Lc{=nr6ULg3vG{Uq^;_^7o20bNX zq-csj>H7^$+9iF4ZfkjMATBP93)de&)%;R!TMCVkq{O-VdqE@ z>`Z_-KsICo@?K2fmLtiTF1WPJ1USlJw8yZ)L;)u7Fp`Z4M9wpT6+I?!z-C*43G_76 zIGI3G$wU&vp@#_^deuzWQXd*;aJgbPFJMcBRGEPO5Brz^dmj^+iew0st-COR{M%Fr z6Ns^CfY4s#GmeMe#;&3(2sF`VaO4L}z)r)55xbv{!HH)AZR|8v=cOhlV8~5|F@b|+ zH(;AVhW|{J9;4F#1D%H-N`sg&0URgQn=ll^NR*nuGLAX##;(jHQKQBrz}41wfxL<1 zW&-VzbT4Armb8L1RX3Ljh(pK&*a}X%klAY{K+~${09n-uq3o+Q23LD68|2IpDJGE0 zzSYy@yn5j$0{I$@aSlc-W&$3NEsfmkOn@2^&cy^eGGHV=Oga-V*gnMs8c%|&k>y;= zk0#7LXuwWvVQF{%V3$;|&GHl|BVj$13EaGx%dmv}wMT#L(SN2KIrkAz*rC3QFB9Lu zscU2(MBV)xO(-Nqy&+WnaQR$$%aLd9mvw(WjLqRsI;efR(IWMd^R8K*$EDLJg^x=t zjGhuekaUGhRZSDGL}nX4vnr})IJ|i_;yB{ez}s0s{xo8G;Zb zhX*x1@33sg+;HOXtXK35De8Gb4nGm;k9p^oq!gq2$*U(Wz$!o$kuIT&!r~-9 z5z@kdcYrX;f-5G&XJKKL9IIrGxX~n|VHr355)Pz%e&3v&nuS5dltA1VG!QW+SS1|2g(o@VKp*pbo)!2?HZTVgtMfHLR2EtG`?}lw|LhCXD&oHjN`Jy+i&jhr8Vgdy4R-wGqoMi$q ziH%>TVrbh*pCa4i7?=ho5CL8ulfgmVj0odpmp0DL4af`jR6ZIdl0gHnh}OB;TpBHX ztO*DC`UMuqDGS}4WT$V&FoA@g?{me7!)8B4ObJ^$e{JR5{tDh)g84bvuPe@B2hU-< zpVQxJ|Gqp!Z6+`~RlhEDhY92cY~Q(Jj_u}$Ex&`&{1UG)f$p|zOPa@-fbQgm$jU<| zkfVSdzlWuc3Vj8e@Ow!)42^iK$i~a6Ubc;ul?h`4}6Nf2*-C`{)UccCHk=YXYc8wHdncRMu_F@GJED zs&OX96U)syZcSSbhtK-a_B`$gC<|8^lzRxjVC${RR`=3GzDw$GR(D}_X2jm7@&G?9 zCtx{RXdlVx@KZ><#??eIUh&O<3r1;bS=qTNiso@yIk{{hc4=iBq5WIBf}p?=1^SEq zzo0BQV{XK5y{bDep3f`6udR%W(s=4q6B8_}&W|^5)h^p=rbmN%3eCb8s%Ni#QBe`s zFwR>GIdBupRWH~X0WIh=S(kP>ary^|7Bk*(4zMJq$?30`;!V{W*{*S?v66bElaN}hQ4;_^Y-*$(Ok zi)}H?y8D;*6Wq~(GyZ`DIXlF&_2*Y>pRHS6aa}%YQ6vzOhse^MD{JcRIsG$?*$Zmb zU1|APRN+OZg{x7Gb|2^0)73xJAhOFxY=;^oItQ9#o}Jl!{>?}0k5_pEROg6u7C~hQ zBgNP;M6!|0)#~)Mg02Akp8m{A(MJIzG9aVAuH$H%zUtRG_N0 zWd_^vHC>amzo*TXH_Xao!UNAYSzo*f+OW+X7hZ*D)3DDYg#0Brn@sn<#X$F%$UZl+ zX*Tw>IBKp>DmJ#xT#p;lD~Xs%kU(Evrcp`4qD3v6Uyv=lvN9GeZDB{A^!wkL*?Qu- z=_YTpN9&8y%yg;KGeiIiy0@%G`{%#+7#?p$=knmr$mii(R8AJDD2>}0o|J!!D>mkS z_spP^C-$|%?h@Abk@jy6#HP4uxD;!^9aWF241CV7$|))p9Jn}x`NZRGS$Go3Ykjac zE{o^kFv1A_>Jh0Qhw|zhdNe}EKf=DZI1k$B37{_lq^6G-a$tKEMFUzE;4FFh^5l%g*^eRTVXtxNT*>gQ?FS*dXM z*rV<^jr-SGZtXqS8g$3CaPMmV(ZM_oy;oAwm6?v*C`no>6X+^(C8sW!rtWu?8H_b) zRgN!6erZxL0x}Uz_nBUFT8*voyr?h1fFw zH|ZHwdu7@THW-VQqo@0<`j$d;bcym$R0WNF7Ee4*ocnTeStN00FxW53aqej?IF2|-#+m5OFT_>dHe~jJx`!1s3%qR~ z)zI%V0WafQ;uw#ZiS!mt(KIy~@j&Pe)n`u=pCgfCH#m7Wbom>3wa-oL4G}G5&;BXd z%%i@-%#eOdusO8bCY5sVTvdby@xx^9EK8O|l#Qp`QGv(RuIK2I0^CWEqhBTVT+rh_+ z3yLYi^Mk#=qSRTaK1bY>uX^S@CqAz&SS8dQngk{#r+38c0>X)Ko zXXE>ReqV&`{AMe|#U8x=fb^ZZ+PuAfH1&>=*p* zJdQ&C0vxPT>0SDXwqGWej#GIFK_KDVFK4dRf*$78Z)jLesP}qr^TiG{o4Lo+8=T44ahYN z`)9swDVhMiP*>PTn4QucxhheY)3wOpO5(pbuXU{~Hk|KiRb>xqYdNOsR;m8zlfjC& z+8>Qo>pn^3WsBb)G8>~_A>sKk0nPm9m&H0uwxv76E@>B=yl+Ol3@WtCOpZ^%^*SHZ zwDV7KPj*&s{&f5<#mU|V`i^`ds3Lel`pvL;?upnUQ-_-P)X^;?d2?Kfdmlpx{lu@b zgnkBIj}a&ItjU?__q$iw7~87Kaht#FRXr+)Fu`>_4550irGT-QdtZq&F2>@@TjSjxWa1 zdUy|~%9i759mEMgU_*1C_4j^?c*g`P`oDIF_nDB5iSD?L6X`g(V1vMM&rtOJp(F$x zy#L7`n&(dE-WI}|W+83{J@JNn;kG(W4u7U!#Xg`Z%NR$m?19%v-N?Jl1QtJ;ValR) znwb4Nx)B7kya}6X&|xXYTWpINU2m;@o3M{CHBG(71l(%*7zKUW^3tF<_}s!S?IkcW z?$X5d8O4w-B0D42hzSJDQu>(yH?8~Y0)!1lE_-_ouJJg_s*PcBHlvcDPt?6@L^2udUE&YLZ-Z{DhO9eKuQnqrd9jGHKpN*=j z>SiZ(RWO}*F|a!)ttAzjDY~+Uw{i}yuP3PUIaSroxuDuqrm~Pu0l_Gh0lO6457#kb zij(oZ7addzjb-yB*0S`|zkEqal?|;$-paD`mec6DnQB)AYDnyo4bi5tjD^NS=8Mr4 z2v;Sq z5`@_JhZSui{1AR$ERy{!vNBVqJ{64k)_2$ptk$s__lMM>&7bwEToY|wwipO8F5>OE=0Rk}tz0E{|LlPbV?ZSKlcdf5tgSd$0W`wlb35kF;u4 zN?SjE7HcKN(bkuv7}U@%vtnX!I5rF2p;FL`^WH*HX|*8}s#r)v#ja!Mo=sh(d$#Ld+oJ4QzEEbsPl0han6v z5bwUN1cC_IDFXE(2#R08Hea4VPrrkaGq5ud^49prS;lp&Ajs5_GfbfK0E8mxq=4#l=e4D{ValUzPDIZFDK|B_IS-@(Z z?o?KlB<|f6Hxpi7F?+M}gMI{lgq$Sk9_}0SPEk{+L8wXu!jjet~C3a z&dUVE_D?ce`Mc@HPl8hC?nQy>tqnV1!UP{jGl2tx>y&jh5P&5-S5lh`%MJjM+&ftKu`!vub^gst|Qg_qsb>0=K3 zxf+>$2vQ!p+L|H?aMjwbHri;p`NF3Njkqa;a-)&Z48 zL>ahUkcnw!U!Go(Y?aqFn;-l=eBWHDT=`TTn3sM5w>5YoRaH-=pa_95RaFcT?JsIH zvYb0@%yldN;oOB5tlKz81Xs8&m6yEHl)I0?N4@-^N%tVR?tWEY<@RM9YBs}0d3@nz zb)J8()1tta@-VSaV`HDR)A>S`RB)%1Z8lk3YVDha0-BE|aZ_|%PMQY9=Bmsr;ox=( zcs8%TLQ|R3*&5P~S%>2h=NRK}pPej;e)dGz7)Rt4dU?~Af3&T71XQDv(};qpPYae= zg<8oecuh@s&74hW+RJODooj2Ib=j#|+>VZ;qn*d9N=r*CeN|gJJDcB?+mAFH<_mS@ zLJ_kg&HRCgYLeCzF|i9Rk=A6bhBEiI5*92V9Ddav5(tjkj6T-8HM#j!Xa&` ze$x;)`;g~Mz#<|MYZ&V!Nc0LwI_e?@J>+wGb>65GSvgge@q(E;EH`#l+jgPQHD=TCzxawjZ2VggUO!8j(qIOdHR&G@S% zmd%Vzc+2?A1dwK+fipA$8aRyvy56c57$np-X9CITBu;uFg|L-;feGkgoEh+^!c5>7 zS;&^RRJ~23@H}(y&y+`&b@nCCZNc!f^k=$aHPPW}AA|*|*N7!?nh{bo)39@2PSRvt z{ELDP#^mV-CLy2D&U`r8wJ0dXc_8Z`6m8kC9u_v<7XA|@GNu+n9JoJYo+t%tZZ&4R zfv7BLmund)CiQ=l#nQ9=#c(Yi2&}T`%))c!$RIzhPJ9|NIoO}aA)+dF+Qem2yr8J> zS7GeKrARk|!Wb8sZ^%o(6D~+qCofMxn#vA_%Teu#Bj^JdSd&`mfz+(?8+_?Cp$9$t ztLo5*tg4wR(lNiaG1B@vaVlqqI5c`&8+%8{tyTNXo2)bUC@}6BrREvxeJ2D;x>d%G zXTBkN98Y|z{p>Yn5>h8Pf(BVR1ZP~ii0wbcwhuaZoPE@*dC?qOPo$Kx? zsIb_5HC%AZ2`nRvE)bDqJ`sBnc1Ys`TZBpx?@5V0Wg8rAj@DV&IW741Z6@%dWt={b zk7gKB(9NFBUrQS|C67Nn8t22MLD*=mDa3BE#xX>#w?-V2=&7dsxvhsm0Rz85`4Z0! z^x5X2A*)BwL37SSBkQ)*(QOM%#$uB*yEa6!;z+VirIQrJqcm_>>U#L`^~Vu?dogj% zy>_Dyy_M}!aXPwPf}QZm;N-U#9gK8Yo1xrPXd~@e8nX51vwYc}-Vw@PgJa1 zT0Y$5DdV#)DC#jW((UPz=NuzG=DdHxoKjF-JH?fR%sH9PC-8vn{AE85ib#Y+5ytcQVpBmIOc7(iosXO&HlxB~b z)QO-xG)wQYt~?CMY(F0bX%#YDC3bpSmm1&H;AA)46VhQJXjgT044uw-Qb&4pvAzFu zjY?_g_EU@1YfUZYCAk6CqJ<%yo%>Z~Exjs7C$T<4`aZ2{aVg#n@G*zGFXO`qN3ae1 z8M_wLo|Dn7X7LPOg5JHU0W6V~;+J{i^Muo|8PP=S0%o6^|BaPVN>7X(Ik4=}@-bqu zdX|5LaomF~J=e!3*l43#B39D^_a)~I{vL*<>0^}Hg3y_J#6rF>Y{fu)?W5ugfz#Kn zNbNxt+}%8}Z2=+=Dg-aW5Zbg~+a=8R5zUfnkB?N{Xodh67Zf{*BWF%Leo3jhQ6|x^ ziam&WZ(#ARU+zoD369ozd5NloAm;%FA6;Bqn*!sCX_vMvN)6CA5sPXuI$)ie{wlh; z<#aZxCc@4lN}y~sL1Q2p#!njGk12_KJn+Uf-%JqKQbJN7X9V{b3@o~g6ln!dyx=J@ zD7@&Sm1-@VVh_`~iq+NJEv&cO{gB?oM%lPo_cxgDdn(KSU_JfePt?=b0=9)1Z=AUZ zm$0{`8l8BRsiCjOj%Bn@lCaG~mj-9e$bR>OOSHADQ+XS!9#v6T9jj(dfBC7$zPWLo z646!O61r&^HwN`zj-+W+TpBRs$|i|P+-Q&q?B>##Td?#Q!{01~k_N0(rs|^jJ`2qn z&QniCR`{LjoK8gs1^cUf)6u3Hm^K+%e*_}oyyLmb`97R~;Sc4!eV~fwrsKkoQ02(8 z>k-rd;&>ExpSBKrjP`Njt5D;xkjpRnRdr5J(>_}?3o!8Verp7-#q{_Od^O1x#@bzQ zjn|M#CUBIJ%N4M}<)LlSa`a}oX1%0M%9DJ4ebipd2X({2D1-NSQyBwAI287oAxvD# zk9rm_X?Pd3mg-|K+XSW*N=|E~N`dB5DO_DE6?~H%m{KruX-z4>S?LdNErJJO2n@ss)^hsjjKxqqNosK+E133`VVkOc283#CUUP{Mb@Gdtmue<8Qy{*0 z(7$GAkXQhk4UBm3m*L$r@)StYFGsqj`3GJTWepv)?Pj9oYXunE$%v+29KGMJOtowN zF_@l&!IM&yHC?IB(TX-5L>Y_b50SkE4?lUv6pF9i6wmVMM2pY0jHwD?K^tF0V<)H1 zf9DxvcEFzv>z{iaVi3{pToD5*b#FofgNF(uj+7(__aXSSX5(pAY!4klw+u32a>U+@ zdM@NGE;vj^^@_=onw`7F4{+6e&+kv-IPk1r$9Zbcc7)4KJoym!RY0-SI=jeaPE&*K z#%pf;vG?*us%nR9YN4R2QC9v@gM#^rISu=0#ZPWI6I3j#lcl4+%)pbp?j+2^6 zqwtQ;&NlUT>ITcoyf@DGfoAflPYzv6Uz#((UB}eK1u-1Bau<3GK}Kt`f$!wHTF8C3{-4%cMOh zIS@oLGJR|2t-g8|^RNiLZwcVJ(7eNHjaUXt8pt zrh$Jl!gRh=z{f)}B{|Mcc@uP}Zj?kcWq2-qo;(1Zgf-Sl>YM^&t);Hlpf=>sQME-b z>?O(5o)gCr`sqF$6EMn zEaH`hWrG*tPcM0Jsj|yd_oa#L|HKQoeOc*V+}>M=2!Y+Hb)Goq-|80KwGywD#OWqU zl-4(<=N?)XPfd=^bCd}jZLlciHPvQ}ap5=jIS+bH=KTh7_1e%5g)!ivpJhNhv!uy+ z>oHBxdDgHmmtllHKv*)iX9Cvz$y=~FB8XRm*>A9=5HluV^_+VnWtC?5wTu|@f-Z{9 z&5b8ag;2)nDUe&(tt@IRVQeXrarOltJ&v5a6?c{iXa+d1D0IP=TtG?afB8n!>GmxU zVcVZhw;W$<#L{`zE>Pz|j3UCld!mTJw+R^~EEO>U$(HR?*db1;4d}}1#yAt-#KKkr zX?jecddQ9iO#qZdCe2%N=`^yT5JS5&cH1-~4%>3dv3d7L zm0ClZJwQFvgzHic6*35NG}6#MoQl8wxF%(IqsRqyD$M((CU$T7vS5mC?#<`wT9fgE znoc&IXV~^>o659kypP;g=}%5@u+qmOO^Qxu(AR<|ih7!{?zy{lIcVzi99=<77zhs5 z?SgVr&6?iVH_Q7~nYdZL)b%SN!MGN1oK-#%;veKIR7XFxZ*`U*a2!eFAs#z!5YP9@C_#EyWxhp%=VkQ>W0cr+tX;!Ky3zfLFqe79 z93B}eV}$UtC_)6*7F!ib&LRp%vSxO0L4utW2ovQlc81^o0_n=7@v<}an#<=&-Nt%A zhCVbS&Uo%muZK{(DHeKlUWI8Fhd!%fqZqpeE=_$EO;fk2p&Tq@jjlPhx^1{^HvH%r z2)!`k#|`;iCetvPq$5s+wvPuoeo=J`POdDP46vNaK+T_&6!sb42;j|Ms!KV+1fZC5 zQWmAJl^nXqO+x6Tge>Nrqo&HI*^`BB?K zP=3R2Vrf?jX{UOZtFZ<8L@X;N;*H(&sxh;6DT+;8*-=Uphg6#+o=y zm8O&HtDCKxRed!bLcQq3GGgQw|F@8yE`t8No@a>WMNf{<#vGiH7Fby%j@3P-UM6{o zW>+!+K8)^Atu0Z2T1)8AZ+@{%KM&edrFpNUADK+@P*=(WK+w9M(%_UEj-=C zv9XyGBVl19*fqXtvXkEU2H%CkW=9Qh1d+1!#zL9*CDu`9q|>I*LHTZqA=wGSWy}|o z7ngV9eF;YwwALf#A!FvY_kkT(8l;MI{se;qgr>w_t*0=7X9L7Cx@E+Hvak8`-5_MD z9zDJ;QOX2L_QUCrRe#VQ$KHahYvGwd@uxl8?N=kjHb0PGeq!8(b$7QquV_)18SR|S zFuG~DzVq^BP|J%t#4%c^W_10B*sSMeoBW=Tb%j>!f}>kj+1X}r`X7uL#po>}j1hbF zad4x>X@Ul8E7aHZ zUMaN$1F6|YeQ29d_fmeje2!MGN>?0RS{n=IE<0j1a`8JU$Ye`Ss?0vB1156ai=JD1 znt~}Byapk4H(xuvR8Y?yZK*g$K1YfHKtKa_HoeiUPZy}xg@$(<_yznzIMk6OV-LZlko># zGg?o*;dVOMmEmKjQcz`O7eO1WeE9iDag{8#bER0cAmE{)kQb;Uyg~h;S0$Ff&T%Ur zIQX;8mgGoEp$z@d6>o~>a}?xxI}hl+m3hgmn|eqLdxjPHj6#BF&8!h6nIQFHvjO zB|fF{g~v$ULkkQISipCw;iu+1Qu<$hUatms5XTjbS2?ow3IPH?8mek#uG)URcucaL!Tjn{kV|JDDjtCmYJs}%{n(O z25o^B3Ji7>`*v}Xuq_Qc#01tfDZJRaA$8jAK>ZHY1Qkm~zR&er!4lN@+-9 zU>)}%FlFi}bgPK42;zHNG7EW>J}~Y;Ys+o0pg~t)udqWF43oHZFlzY>LM~$h7p@&7 zG$rw1!SH0{PIwZ{DCmd1cjDWLPsR|I_Qo(WZZD^jV_ssvWu5&Q!hR-sxoo?GHm`GU zaIv4!2Idri={74a1Qyt0Q!8PsoaW*@xzQWLFvA~X0w3PN7!NPNs%c=HAUUkbd2Io^ zb=h-(2?$pS(#0mwt-kg~buaruOrS)wW}P!8{g*s(gX@iq?nbSamh8{j@AQ#1FRPv> zIH@C!9@E>+l|d`J?!T%S?%O~;Z^hr=WYwu~CrdmfU%I_cRk}?_$h{IZ*H`gkZS%8H zO5pjiQkmxiiAPFIPO0=uc;p)7JZ5mn*^c%0OyO+Zaf4&F5;?X~IjBcb9ywRONTQ^k zKhHrOox&NQ#P8m}fB&`=edGzQ%+^3g9}FhK#j|(Ns^7kuz$yRYj}A&R$q`*z?cljA z7)dGkR46$Tn34$=KI(u6s;yqy~N2MQI!8k%gmiK9MlR8h6 z4D31gQ4?FYNRzLf6l%wVgw%$Sb?f+$M+@A$UGI2vnH|38Lt8VaDw~LO|jD@ zzAL>&M~yCC?bLkS%9k}akm4dkKp7wc3JnlR>w6QQ=A}ei12;HCZYXhxfkAm;65;J& zhOhFr`Kf}zrlS2j*J2}#vj0qyoF(dOJWwRQBvosUtB&h(=dY#pdZwhYj*p(z>x9y=qXeJ6eAjf^oOhE z1Ez|s-XzIB(@?MmVJ}j(7%|*Klud+oYl?uc9@sPFn@p$*=LeeVJP$ zO#Mjy)xEVT{V6 zVkbW^fif`s-Fu&bAreM^8DIMX+cG+7ZO{O2>T#Cq)>cR)(mlk+&_K}knBa79i1;Cl z$V8vXqYPiwjWX4t^=rF(aRE3}Ia_>%S?~wT?jhL6NXFg{Qtr=N265z)$-(TW;peDU z1tTqZOi;_PL*xZ&!i0_*r|c<5*@fO6BkShZ#=#?-7x}tPoVvs>=5KqaBtk*3NT5FU zzRfXLN|yQSd$C8+JOjzum$W}fa`LK&%Cwq0FI7#grN1Pv2?i!V=u2S&s0nBO@>)$} z&J+r-!1G#MmYhJ3A0|V_K283BGna{BMyK&2*L1w)i5Hq@HnxfA&-m>V;mBvkWid?P zSiRsvI@@ud1Wt2`L{fCE1-?ziN2I!+CP%VW$;O(!yfC3;?8l*-&r9QL5k7#)Zy3my z7n!)!nsDlsRl-s0JeBOSy{lG67ES@lbk4bV>50!_x7?&s0*)N6x;T;{+^bmfL$9~0 zj7e*urY*ih13wj7uRzbMXQjbd#P9)*skvWFRHnm!472t#NVn2ig!f9hQi`cb#n>`Q~1b3m^*;Y-ESMfJjnfg*1k zdoh~~{RFYI31TallpQcqdE8SdY!_VAO8e!e z-)NO@^(VZPOn*wT5d!-zIoo@nT%*=WvM@a4YGR>Xl|ZUdl{hXa(@1vRJk~tk#gr>b z_5$AM(9M9wC%@+v{m%ql{;Yhg{{WT7!?JF(WVn3{lf2$Z%`L$|O(`s7^i3M%;SeU~ zO}(O{W{7be)NG*4uaeGf{Qi=>u%O^LmrspW$OoLKM|D-~ApDUb{gW~SHfa_&6dIYO ze6uUyDE32;0}_R3ByN5Z)3k{9M1;5}r+D>R#Hd3Fnx=|3^OsE_p08_<-kN+e&X?NL zYJ4E3sVBi`AVo7v3}F$aY61__v`ogEKlQ`(U6?7_BXe4bUX;n;FyGd2ve)-1qS;f4 z#i9nWi{XSlPenubvclJ|L>#TkfkS=IuF{n4bUBGap36-mysk)-h^2oD&t z$etwJ1RogV(6%CPH`@pw8;oe}ZNrbAOB>8c%PpD@>J%~yC|tBtEA+YI*UWwqzemKD zw+H)Pmxts~5&zs%lvJA*c*V&j#tQY-*7QWig)GUm*x-fJ!P7m@Ul>qOgxUS$a?MjO z>V0r-R^`vN#=0(>rPiObjDIk^k*^hU9DLNG^X<5{dwPyd{T1T>a5(qR$}9Sh&@6Ni z>25esFI1gGhLJwBoJx&vqi~Y^$ur5)=i&70**Jy|AEsQn9qa zNrURQKCHvoYT7}aUD)vrCQgWaVCwaNaZQNxzi7eB_W&^T;oh*SNgtJ_h0)(-st8Qv-W-RLUn zr1J+n>3{l3|Fbf7{sT_B5$PZv!i_l*Zt_x^#__J zOXyOKX*ox!=IqVTTQ9rvwe2pa7kCScSHGk%f%qyN(}hsW>KpBgHuv6sF&Honyb9Jb zlxFS`xN7|-_e@>9`my-llOdu)%0$*Ig2%!Cxz}mgFQ(>rUY;6s9=+o=M%q6&=02M? zsY*bpX~OE#`QMF+!J2e^gf7 zl#g=KqS#yyIl$e($Cqw#EvL(Pu??SWPyUj9<&3WH2}NG7-Vmwiyx1rQqgWeUJYqcr&wF{krwHNKooduICcLk;o~?C~{E?p&V3}|C z@TP2k(?FDzR9KLvytlcpt!X8yp@z5fiUBC33k^RbMQ*U{7P`SHazjHTF{g^w+-LfZ z?q&BQ2Kr`vD1D;lvt}L@-9!+m1(SjITuvpzxF9@p3XiJFyp(NypatG`JQe%KIlb*1 zmj*WkoJv#ze_T<4rg|XW-n=%>LQQRr5OAvyYKm0G7Q2>Xur5~HT2_`t+vlu|)1FB2 z^v|~%!DZwSmwjPbB-6u0hFt#7dCf^r0Q)}!CkDM}z%G1!8z%!86P zZdn{Ot2Oq%1cr z#MI5gZY|y?ps$=!8m9L_Tkffk6F)^Q=`l5|IY(%q>KJ>oz`-)0rhnBDeeP9SlSLo& zp*8M!faev~r_`}?$P41Pr*8L*(2q5^{bHN5kNrOKUOOiK6}J&D%IeYb-joG>Bks6o zms9L6qm1M!S#ByM!aXU|I)T*3uH-6d*ZHmsMWzp@vo#w{m2ajMRf+eeIOM6K`m*NR zm9MDwp8JNZVByYWz2!}b@k%^Bt?U4HA)oAv&4!p_H)U$o!1$^hntsvMY!3Y2AThK! z+K*t(0E})uVK!#bM}c$^q6TMIZ!;nyK-=o>hd0>u3lX48w-7{v>OorXSQ=O-< zJ76iEmdUsDnF+YVh|Y`$TgR|5!qQ-zw}ZmYc!L?I!yjWG)Iz}k&j(KIM_x|4D);ya zB4;r3&&s3u573@hr5ZV7DnN_Aiu{U*tX2G^-i*Fgzn>h^e>lD%L#?80NS_pFNVy`+ zV?2M=jVp_iLDs0aB}2~LOEKi>&wBW5=@pnWX*)PY zdpV5v^YCHmtW?gSwi*@Q4qldVtL7>Pi zlXZ;?;j>l*-mksMKOn$U z`}`Bmv4fD^!c~mspJtcJHMDMz;0hpx1-WzBgC0EAV(j-^W(8Xd1@5AjHuEGr7q6Ku zhfN$T2+6(f%(fPt{Uz6mYDQkXfFl_y!L`#PID2NUfR6~O;Ld%4y9UC`$jOQ14)#`> zTjT}vgp(imcH^EoJdcfS3$7kyq;JXG9o%X)PO+)mBv%$jY}~Y63|WbJ%mZ-coD!C1 z-2_89H|oQ8Q);3KsAYbdM-M}Q`VbP8qd>;~yyl1{{g6o<|< zuycHqXO!_nRKb-Rf!N`ZQ$LA6oxTA^Cn0BZPPGL=_pc-#XrV|RaWIc;bR@e4G2GF4vZ+M)OCK(d z!35M`(LuCF>fVc(m#L{*sMCs8g5f1A%8z#+vPx0NL_A zahyDJU%Wyl*P*v`)!v?nzAn*H)lsR}Qab{R(#;eS%=Wq9WH}Fr+jhOj*=;{X_!Rrhf40$=Z)YllN>pBYMyXt7><5q1+9# z1JQ|``))Rz#%oKPaX(cIsVLO^v*vD`~PTw>d!{7BXY3~$8`lDkceUMVrT2bIij!} zG~P+rEsOKCIFrjOgCnnV_$TiO2UDE#MTH_W-4au2J*!nDvnA*c725ULp8HLG6Pk#J z8Q$i}E!NxFdu71?ZGd;~4;N^6@_a+xf1XUv5oC!jy)}d7IRQVZb0mGEXrQ@do;>n2 zw^!3VMa9$%7DB+2+7R z^cBMxZD;bhRtxr(d6$1J81u`vGQGM!oe6tHGiWbAItx(JEN)lWV4l~`IvZjiW56I(E~jdn z*iY{=Hky21mF@Pv+i~OcThAW#$wVO=>ga0H+u1vqA<_}Sk6M^;1Ko=+!HkmbC+=>y zAALxdGrpR?9ol%QVaDm0e=3}mZ_jPGM@Yw3F8h+|ob{@Ap{C?ZRkZVq5(?|;kDw1L zn!(}cnzrv&e#V|jjAyi^t!ReKp@O?6+&6HobIrUzSw_Z(ltjV%QatylYE<@_cB&Sm zzGQFZsbru^9z}4060Apc23#%1w$_cG`4A2Rzby2c7D~S~`(N$7cT|&WyC;m>3W|vIB2fWp3QCb8lGg%A zkN~0A2nYxWNDopTMVi!2SEQ&AVn9IYJyP8?=^!-(q=O`Y5J-q~>zVU?XU;im&9~M! zd)BOZ&tEJJd3f4=-B``gW}kQ= zeOJMIU{Zd}x%+Bn&wT9aD#Ho4sdFLQ8^rd0r`%*Fy+81heKm>2CweWL&zFk)X*rH4 z9k*MO;4xi_y)EGj$ zL*H3HF#xZjg^)G&NYs(zz}(X+ZdnR1L95cwr_q_shg(Q!fI(r8&W z6;WPz&&gf1u2A3=bg}NC(Q|7yq2tmW8^nhtbvcKhZ4+QaAHD`EmJPwD0$2?9vFSPz zn<78Vm+$5n7vL@$U*miJ$S-2pLn*^VcrMu=zwc0vc9?J!Zy%WRjP~#|=S}%)`aAvo zThh;8@>~C;5fRcPkZ%&gAv?0;XF`lgs*vTB2*od4jeoJSJDi4$osMO%)54c&3W`(M z;_g5Fyi@4E7QabYYHn#5QJPj`%dsXm+eq0-Ht#yyItTEg8PlX3g*mv~p26a7@`g=S zv06dc9NvOmn-%FtD8okJ*4*bh(Hz#9m31DWfcu&)g^Ud(wC&y<|}GK^lOw0 zi_T-*&in9nv>z`?SahKxW6hJD2MQ5L1v`6Rnek9IRq zXfT*5(2bfycGs^6@TNkuXG}Evc*i^4S&7ez%oO7PAe!&y?2s*~a;T52=M%$8qDYp@ z=$&g%Fa);G6I{)Lb`kil%@cx>hC_;ix7~HQ_$(YgUM{%5x+^G@uSM7#QT=QAQJY`J zqtzvGgGO6XWV+s?h!4J50$^HtI!?&@jfDCJ?ap9SX>`=SCrBP;f`?SlA$0~b?xRrK z*!!#e?k!d}bvESm<-KL`OPX;Sug+9PtFp7bc$YANNxR!m8eHWFP-vatDcH#pg}$xl zX@*hXuUza5)MIrInM!ke7KS*9 zavK~LI!+p)j<>0CMX-6;c72fd_pIyZ$nV!p<;{1KEE)EVD&}h{vpFWZcJ6tBgt8%A z!e#GI`fHF4{qe8#zkfc|&fl99vDA7h{)x}16^hD9wHr8KBGS9=%Jp@qs5&!eq?hr9 zF#QsKqNi#7Yy7nFD-W9suL`J@&1q;(g%u~HeY^=ZJAaBgY--&u&o@(Vy%^bkffy3&)MblF)Jsv;YPf@H1HuKKWj5BC5(qt< zWFqqR;8cMoQ z;q1L^fIpI9&z*xxF$LSUex|a7s3Y-shz_d)Eo$e(bTDmder*7C5nZad7wJE z@OwfoUE^xsu3k6=8C_8Ek_2&C-Z-5auqa)&@{$n6oZA&oH=5Dy9go%=)Myf5Bobl!RpyYs&RIkn=9+7FPiM^xI7r$RWB!GCa}goOnjr&BzLKq z-6eO@+{^pj;G9WvzCnh_NXSlJg=UbLdp~~s44##@j3V+`Al0Z zNkBWgI`oQmVfNbb_*2w?yRj4gBb61W#w;$}e>od#Hsk=mMdbCQc;`r{ zUOHjuY%B7%XbA43UwE~F-*CAjcQWU&gaS`r7^UaQN2MsvISW2bR+K)X&{DztQFK!I zvV}I3iML( zj?>8((i451z6Up@JIQa^Eo%gWK3t=FofOVFyJX=B-OPhmB_f2ONVR$|`b}1IrspKJ zpvmv!x1evy&R0GjotubygouG`gIK)oYVfqIZc5^0wgcU?taSXmC3{=ccP$bMwq1Qb zQr+XLg9X@|%#7`<6$_qqEg?>>YZ-^#mHJ^>J{7m(=#mRv{K3eAb^L1n{Z?1`_2X|* zA^5GC_33}TF3kV&UBEN2XLNx8ia;xao$7~ER~;do0?7UN0~Uo9w<+2DE@OV-_BAmf z$7rk#?{*G_u)M#$U36kxDW|y_>Dr<&$E7LLWYVhUnmvR^mPG$#5`6u-xHi#B8=Kat zR2DHB`w62 zN7qg|wxC(d-&~JxhPa(aTrRcF=e)6A8s0I1o&3>_qV86z85K^Y`N-83y0W&EOek&> zp24*Po5L?x3Gq@S!-cQ>wb&%TI4dz`+QB(%&ubVn#}$J;M*D!mBkPskwHl=;X{6H+ z#szY`c{$v=Ab189$0J*yJctLW-iM)lt*dj)nlDL?Dyf-TH!~3iNqA*FpL|3<{Rp*~ zb~(5Yc1VHwp_&B148)QQqg*1BEYPe(Oj47{mGN4M+GlOn>^e}>l8bC?-|mjyT|;_b zfxYHV8Vfazv@W0*8_YASTFWKIx&Nw=Utu6^6ceafQuM7NO+=J)JINeK%@V__UY%{Z zsOHg(S!V5UmNT?BPtv2gRlvqkIOa<>YdECqH6;y`sND`%sCj#%jz{Qhuj@i=MLR2C zb&q!ou#qqhHD>Jfk=?-&Cu(KEtOJ*3E2^_PBvH1{9~=K?VfKAf=h8QkJ(u+gc^vsn zuzX?*Jn|!5KV*RPTChl9(1>dt580(Ly|^XQ&-_A@_||bV89LmyvbGSAC8FxI{?K`Y zasNlfN$dIfjR&8?cr_9`P-44TVlzc&rZ1kkyAV?vW#+~b(XjtM*|{@qYVM7CxpBFf zd2g5!!5=4f%-UtFV`CNK5`9L>INs$vf@I&e-e>dotTZq4$D?wS+&q(uW^(aOSWSLU z#u|f*iro2xKGAT7Du5b{D}6^*{4~WuE@Tv$YcK}u$&6<BuIh@HTNn++ooIX_s zd7O>c5SmJr$zl(vL89+5{(AE1U=b7Fk5(vt-FS4r;nG<^k2rwkdV1&&-cy})5y1t| zjrYf{H}-5e>zJN2Uip;8-0)(;8t66dczx{D^&(C3&ls!anZ1A6zL#X3d2v(u&0%Dm z%kwaWeg$XI9SOm8=CGvsRQ^}N9$#@3%Uo>NWLi zD?WVqP+nEv&`_TxWpPdF+MTR`g4)`bqc#=g6(LvsMLfCKwZxca%{irPT~N)WC4|p{ zC~uoYH3H=uW1HyOUXiGEb(}Wu6{dv5YKad-xmLc_avNWbpCK|>m}#g+nkl2td?Z#C z?m0l0Bl`kG_c5`i5X2gR++8@1b`g>_+^|dJq0CpPcStx+=8b(l&8>UIWIvJ2*36Q{ zNey_`?!{tRrxSz!@!k((>@kOnn8f`sx1RMiE;KlmGTT8U7e`u}>BeI6D%`{HeBTBo z0t5wt%pd+L4pnC!<+38D?0!!RT3QBqc!ZHnr}I>QhJQ7exfdgp z0Z40&V4Q0QLc7qx>_!jzY4XwLmD(U#ZNP)*BoV^A-H%~Pn|K5aR@2fQusLI+uf{PK zV)-qk8n0(gINPNw8bmSvAfa=0qcg5#H7lp_&+~;z7#S2sw3*-|-$bIF70#hhbFNo& zP=e(WmEFv(g;35W#6smz=)})aNL|w0hWHKrf(R^&!UGxKsSdrUGI!oh13#R;G~&-> z3r$M(ESh<_;SWl7OdWHPysV4$Q3@1Q$5Wu|94@6@ui0dMcChZcALPiP{fIp3EW4C9 z!|CXE2W#YTkr}?i&`l?KO=OGpT$a>69M{;}GJx_+wy{o@(m3rKDwpCh*eq9zS8VZgap>5scD_^Lr2yNr@LZ(aHs}1D>aE<*5{E*Dr+v&B zhxa@@&HxlfC54Gj((xJF?buYUYh&0p{$+md-2G60EdYeQB^y-y5 zIh30TDlG${V>NDxaTLcbb@W2}zU==~!ssy}k3f6GmuoitX|enO16BRmz-}Wtn}qo{w%M} z9A5yJWJU`9C(}79;qz{4z>E1hj)-T?_f5@~CPExP$S<>$S z1_gt84|FDLFpfW&&~j}1Vn-m2AXwTu_2W+_uj4>RsAuu@Z)t$dQ8x$yYf@YT3>z^S z8lc#X`ci8Fb&f$mf7c90Z@AV0lI};LgFl({C149XTu{4y3t{_8E3~wf#esIi9QeC% zBLAc)yXFM#lGn>!oI$2DNxnL9QZL{Ac*p>zJ&9Qdo;AWhEHoABoUyN=W_rv(Q9E9T z_12HZl#f>j!a2kIWgJNs*LW{K>JT3DKSKEHCll5;NOh&{yJWLcRevX!;0Y6L5?E!w9F+OJj7Sq}yvupHLGV6rjZfyC*`d3(NydRM(i001GVUQU_(rsaI@*G`l}E^6 z8w&Z?rYy)-4({FqFWqq9x#-61viN5Wl1qL0rhyJ*4)ucbL77~tR^%_=KWo&~V@6zC z5?9ptC?{Wp{Ur%6{cuOb4e%=)!YwT>&NgSvhJ8HwVuC(~-i=IL(5E3*_^ zZp6y3`e|c%1x7(X#ZTJQ``;~LTHEg^sXc7N}5AI6pbF4 z=_xmddM0sB(!; z-`6Egzm31je$G3=PIPSWiXWLqcnGGfPWU&TsUY=CgeiQ__RReq17I#q`#jW`q z(Pfuw<@aW;LFnQw)8Fj%-Ni~cHlB2FJEyt=R`z*~lYe>0EchDT+Ss@%R5pQfu!Sj{ zRr1eIaT-UY_B+WPnI@#lh*ZYaF8ZRiIo4x5{d zy7*%>BOHBy44S?RqX#$4jv9jxIDlwBdKU&?djQ6>RA^e8-ky+pdsFy+qUzeFu)X&L zJi=41Xw~BQe8efLia1#1eqap=*FztkeOUUO8` z>ki9&EoHFaXW2#_No&PTGCcHaa4t321J7kS>QyVnmOrUptyx?V`t?CKA+|SztM1-G zF3p`mUaA#MTCR>CO*WD{c~U`Km%?;zS$3%E&9G!xBzv%JTSHbiY&jQe%A~3^6O4kt zc;J!67j1D524jt@i6Ye*fU-Xg@pw#}OC4yx^72;OoMCmQB1=M;vtOcfddwQqd%)Af z4Xdal-gG6ywSAjFhetF*TMx5O5y&JAc%foPW?>Xz<(_@P_h7?dzJi_)>Y?AgdXN#> z)ePh%N$_0^)JzQoylIVg3fOZ_@;rr8C;#17V3f;W+4h9x*ysX)ojpeaBC#YguzVA1 zk)bPD9|ApfZ>S|^0lwu~vQ8Iig}gRHnpmthSfGhkqq_muR)sCTFVe*`#%TA8 z7XXS=s$=9w$)?4xlRdD+$eSH0w7k^d`<^)QYGa)`N4pn1%(%Y)F<8tT9J1}P!%I@3 zRCBscPlPJ-bUpvP>&@n-J<+vqJbO9a1(W8ZRxT>*kut7lQ}@0#y7O5)I3Fcys@=IC zM1qC!@q`M>S)6VEsNkXWUgyDZtF5H^O`~NE>C1==d!+#^LN>#x5rL{(MjE&|-J+<; z%}g}Mmgf66*xk$&@54zNO5E6#G+Yqxfa*MAa4IEX%7(r%C>-)ie67Ub*#0xP!@lq~ zeji&WMlNmHNgK9iDeqI&ob3_3`ciJp*&OgP#rLk~U;>bXHdz9(lI!T+z>)}UE`3YELtd=;UFGW-L zReH9nXfYFcNKIyDwN|**Fhh3T&bZ!B0FOw4IkMUF;oA%sP(FAX1?8L}`L4>)ds%aD zmb|cZed zq4uuNtq=!bh&>Fx)^cJVlOMMMSrj!awt2*$Ml~cv%FNA)qhHn7NOzA2WpNyC#sGqc zD{pUJ;xgmQ+AqNxtI_J8OeaQYKu@&q5cLXBiY7F|>3Kym)JVoTsLv0)=p+XKTTjh| zFB93I-soTHAeftMh&fGzUq-VsgeqP$4uFtfd`K<7qB9>J8hGg~#Pt=-6=3OQqu6( zTI1YHU+ZPnBY(smz2+65q`_0Z7HnATQj2zJSa7$N7{f5$0R78@L&fVpIwsTcP1m&z z28+J?uxjcPs2d=W zw{&F3TdcW<9Ca_u9}n{jyT4gDCDA7Wdr#He3ZG>hpNYv=Ca~Lisc{!ZhF(#6sO~h3 z%=nfgnJjA5-B)~Q_l=U%g=%2^1LSeUV(C{%U(R=UBz~Iv8Yl#@puDeeF1;%k$(?1% z7t9)tevHh>t(*^igSwmn#dTUd^>cFa{a7dE=j7shE*YQ7?sLd1^1e8N@BC?3TjoP? zO2t2B$`v)rouv^-j%2rrz`}w8Fy$%8ZdGz#;RtWGHB!D|gyY-j7>SoRthOpDDt2@j z8jda0`nPoYyZ=I`&;9=`JpE6MMf`sY(O=~f=YcJ;)sM8Bpb{-1ewH~(cO-AWI$5>H zX`TmwYizn++aeUPXMq~2A2HFlwAZCQZ2YB6Ev(GH=%-3`DpfvX{}c9<0)KK@NQ|uE z-uN0(09^jgOeSzXtI}Q{WAgP$11dqpEhss6ayw zCtm5O!j*Bx+-W(h0P6$OOQD$=-in>^*)h)545eK&nSPI3Li>O`HBT z!pT%4CETs(cMj$n@abVA@@6E=n@@Ig*qz;mEoewBy3gtesyk!u3IV|z2?hRyu1Cp( zBU<7nc*J|R^0`cnX7mPuj+l3oM zm+G$NkYU^9*=>Lyak#vg!{s#Q^rb)C*}=q@qjidfn?g;*0RgL5;eD|uPZsJrw_k5)S@zSnU z!^kuGO;VOhs*TW@!lnrVxZsY#gedq6Jz%L!t2QVIbFIx z6w7zX?m{LJ@EF-r_QT+dUQ{6I5iU0~x(_FDaxFps;r1&LX71G~0MCOuAlSuf1{$@p z*;j&xAhMZE=;O~#1P;u#ZRZL~Uj1w~&x5`Ah*?V7^Ey}oRrn@Zy$Jts*d%?ZK0eBI z^+)k3mtJ#Sv9E8!2hFf;BU$(Ig`xgH={+He16!2m1hFN(N|I0LbeUw`bwPDi9m~6~ zcXM<)LUG6xF_HTBSoi~y&#|k!Iny5SxKVD!3#}x~%`9pEum=d1!iNeE4b8G)F z3EI6-6~OrP4qAGbwTnI$fcx9@#Qvv)a`gXHVrZP9M8>AY(RpTo_=~fNqVHqBm^zta zsxjmHr%y7459@AWt(Fu`xHaabqHX+6@I35$DV%WdX|?HnSgWjMe}!hooboV#hG=Bt zjFU->eXxn7LCg%+AzR9$v=lim-&4~@vWaV)AsdMdsSIL|3>786of)ffUf#1(m?Kj9 zVbpWb>fDLTH`Qe50Un1ge>$_?z_adg!im>!lsqLr)hPQYU#|B+D})~0bH_xWu!#6j zPtLgut2wbHwGC-)==Ivofb2-r9-KTRX^4m3^W|2b&+#Rv`5M<&a7ooqCYp?jz7eA< z4Qzu}+S^*n!cV4y4IrD?ta%4iFvlrujOVJ+Kbe@o)7!Mc(f^^w|C8y>cgG#@6qDhk zw(QcheJ)}=oO*`*`6pB65R7sy7(D$xu>@$Em&ka?Mtu?p*3Yepo^|k!Yy#u#Sh%Ci zo)kd{B3~oL1M#DL_>Au_mHM~3=Ry5`g+TubqcBlj7!lRk#4upE0kmo&_=CTow@iXn zL2U7BhB5pMp_a8@HWRnA)PFKPv4eI$z-JDSNA}sg-~>>Fb-e-MQ+_{#uvkR*2M1jb zhtt3R$IH0~wHyS#)I#%6Fwak>m$w*#PBdkx&x*PUjH`$zpxsG*P*zpW!1ho3^Dqto z6`lD{z(D0Fu%*7<#h?S)mu$p;cH?pwV(u;QJ&_F=`avM0*ZmZzm9ha_>VTK~R5Zh$ zjp~70odXNcZ?=bVG!Ue_3qG23Bry`&()xy`9s$wm)j`Ht7%SAfBS!=779CyfP6<+V<;fsx=vzp;O61G7_7!yc_#wTD&C^qg-5wjn`-~?EY(eeI`p_s{CmtJR z;;|6NkG;CuZzRmmIZyI^we927qb-p;39MJ+!OOr>X9pPI?y+hdn7y`ZY}^;ue-F3$4nV9TYjEm?@U3e`% zdG;Ocj&+BJGb(gxFv>j@tMX^^g`%O^Zf=q|Xl5xb@EI$f?=BU5bvbu7wrS{FYJ93m zj3Zx@jx+|z5tE$yypq{GSB!VJK8Srj>|fA4uwFR*)HB9SV%hrsvj#S3Nw?+kf6^%4 zhY@01v!}sJ`Q2+z{I@<6ecK|t-;o?k(}&tS8GZ0=s|HXhFGIy6v;_LR)?tUwJ!+;{QAM+8t_t-IXWIXGaPt)I}BKynu^I#+79Oe&q&>cI&&Ns<87HDX6 z+t|TD?bryDkx{!y6559ppidEN-qp%Y^$8&|nw+v=9C=ii$kXQgh~IWo!s=a@PkFM| z9b)f&#&R#Njvf6Sw8Ebo&~-QAJuje>*;JEnYPoN2G#;%|roTJ5mk3@uwcr8bN!434 zwMBI4RN>4S;hWSt!inO*gRksfimkiR%0pQV_px9hbSPVH~)g=F9B7OzxcR%R-*PxF zo)#e~a!;6i0Eioy>=qTV2=D9CV=mpAW+MtNtWw$^%AcM{vYbK_bq|-V9(A z_nz$gPWjf}Pxe(TUt@gC#G5izyfWs*-hyg!+`R-%zS3g*;VVMn3h(>d61^dAsN`hZ z#L0>=EomIZkrqhzBoo%SXeNP3YWB3J1NnX*)ujR7bdDcteXh2l%IEkBtYv&1h{ zMpz6<7iE1_y132kw%}wN&FH{zG%DjF8n_>goLF#4Q$|*tuagh%$h+Wd{rTn9SGZ%1 z$T7*HT%$q5Y%(FzY@6dbwMXg8hm+K!{Dw}5??dO*wRb8!;$^NQQaJrkIDRieeMiH! z;t}1rf0a~x?M^*+lnyonr#{eGCq4r^&4mUL-xYKt9Esl1JpruP=52m5p_M(0=d8&f+ zI?0{1z90Dkw)gxFKzUUaGZ4X|U?>zP^^-~WE;*m(_30OcA@R?18A(shW+Xm7@Qomb zL%f4d|8gvPo=sl<&3#L6xA3E>{R;3#WE2;H|f=XLQY~Ll*T(1xT z7^n5h>Up(!Kqm7bRSkH>8(8mWG+Y54v+1087uR?Z&4pA^ilraA8n>4Q@a=07ZI&gd*#5v03oWZ_THcAJR(udm8|>e&<8VKjp6O@< ziN2NW<*(4*5iCdLR7LD ztO_y=?VSJN1lZosz!xt7Yfd=h4!o=!ws&k9qRI~vcBSJB!0WuopT;=A#<;EafA?ud zjiA~CpL1;`64eF!EH%04o9I?SauvogPHI#vPMP%Q5ly`_ruPMb(Cvo}uVyULRes|1 zGoa4tq3^1YgIxNdp|BPeV-saP%$}GCI@Duc#eO1}Y$VKU zgf&xFrb&Jbl@Z4yGM3u(LzB`WSFj85={_y((y;$wHqvPOpeg0CMPJzPF2C=(c5{=O4uQQpRywxbg*XP4$ zlX9pA!PRiD%`eK7@er)Jnq;wh;G%ma^b`?PxivxUSWcwgAM z7=}1ga*&z3Vxn(Tg-6A|54a>SW?y3Vn~D!VH#@>15ZNvKHrDd`Lk029sWPl_**)B$ z;fCh%tLaXj4fgcUEBqDM8CE+p%8_z^>6}7pwE1wLW|6ZTMLMSl6Jc08{G;$jFSlvz zb^#>cU`|hn_*!Me1Yu3@N(&qaZJeV@N@g8r)5zq1WN|ZvS0hDfC$NmfJGmldwLD5M zRW`(%uv?dFssQ9!f$}xlkmO*BdE!v51k%%4Voc&)t2oGS+|B|5&2_(NnMNJI?O1B- zG+T(8P>7jZ@L3lRr<&HTn~!S5LR>p6F`F$Tvg4nn#w-?tc{j(DO(hk!Dtg`6RQ-36 z%CmRbA_C84dsNuyOZo@#s5p)9yh!s2dz<8>HCWh*SsoG}!n>J!RtD=Q7|pz&y+m?8 zHII+a78&|h{iuUzoipP`ndbvz&Y>W79G76+qzYxbaw~vxX)}l#PaMM1S)w*+(g2q%oZpKN9 z>%?iT+!b@feuXXuGbPveuN^N;@cin_Lbo@pK3J=yi!K*sEypdPn;6#F27A&;r^v?H zN1JVr9Auql#MQB=jQ)}q()f;%>F3D|(FZ2D?^;bBSYuc^CYm%Q5KDgXnEH5yEsM0i zx~zafvd!d}U9uF|$x&)}Y=F>CKZyl7QgIs;0^^1|#-Hvc!DH2q3^%}>qdkX*O&)h4 zrg%qwGC>zlO<)Y#F1wS7&t1RM6Dft|pT`ofqScOxTmW^V5$0N~l1YnT1z+*ug=DW2 zQt|RRI*h&4=jG^=KbeBm+qT_2wq0?n%Z5?&&}ZfEM(K|#M5n1~2UJ^YY$z7BdO z=djsDqH7Ai%wn2kw>zZOhGUhr6Z|z_@zA%QF+eE_#^6%R{$f9w)aG{NzAQx0>G4y~ zx}zBZH^Aw=0mHatPhCb(=XaYPw%uJ={n3B>Me%RhbXwX(a~5oK1OAxps?6@%(R~Kk zDB|?n;k!FB)e)-jg>S)ILJ!fKV{Ej2HUMYKNrX1PqrFaIpq{_>7gfI!7Rq2ddoYHw zrU)qgCK~1iLE@U7K zfnWEez3^&g1Z%F}m~RF7?Q4+V_5!i)4&{HjuFL;*S>Q4MpZByh3+TL5VT#>$I7MEK zgL-M&)qRHh-Ol;3?RAakCe8du*Jnap;<>18L0SCdp?X|~ka~3$&ERci!l8`=0)dsh zlx!AiP->6Dtm;M_I!u2)#u-jD>MMI^GqPTwY~J3a)_t`ei|`2S?E9DZ=NQb`cG5kj$S2ii45RTu4XeHtZF7kpC?0wF?x9u=jW7-@CGyiV1-AX zU=M9EX)!U4*Y^@S|C zOKro=v**ZzSY?Cstz`a08p!AD&BIRUDC@WAhaq%^%*#v~H7JZ5gBkrUhs2-}a8NbHO%ax$?=z~86BX>@aLW1ls+;IN|v^d#t6ih7h z$(lczBtY9KGG_+8FDSSUj2ArM^fLHRFzBJZg${%AS^^yW9GHFLX_vu~Y6C&MXf~RT zXBdFYm0h!iu&1O1~CwgIY0zEl|ay9JFfdR`9W zeEf50>ya0MehHLo8z3SWflk_UIuGL*4!FTb&}DI}%>b&fMuvm?XA%P6)zPG@!%l-_ zb9w=yT095ngg1-=&`ATvcXW1LkR`MI4>#iww2>Z9jZy=ZQD5U1Fi@=I_{r3HYu^O) z(Zt9A(hoZ1=V9cI>{7OUflAOVqbpb+0|!-rQ8)uZ4xaNY6Wkd$5TsHg_KHCxO?R3= zRtG~#I4K400NYb^2RD=IT*nTqgq`6t;?y*NS2%hNOfo0H$y{Rlfd+lFY=9Jtg6NS@ zvt)1=e9Mgp9uav6Bm9#oc@X+{PYJe6V1@eNA^-J={_7F_)2$*9O*#zzvjzUB2P|;d zzbx?U(f=S5BkH8`EEXGhd&{7c4~Cy{*C504%pUC7myoYE+TfbqT}~a)yuF4#7Y9OV z-i16l*|y;pJ247K&<$VxNFGo66-sHG5A>Q1Vg;}B8st{QprWjwi^S&7D*S>{{`P { + 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 +}