作者 刘晓艳

科学队长合并

正在显示 97 个修改的文件 包含 4505 行增加0 行删除

要显示太多修改。

为保证性能只显示 97 of 97+ 个文件。

  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<module type="WEB_MODULE" version="4">
  3 + <component name="NewModuleRootManager">
  4 + <content url="file://$MODULE_DIR$">
  5 + <excludeFolder url="file://$MODULE_DIR$/.tmp" />
  6 + <excludeFolder url="file://$MODULE_DIR$/temp" />
  7 + <excludeFolder url="file://$MODULE_DIR$/tmp" />
  8 + </content>
  9 + <orderEntry type="inheritedJdk" />
  10 + <orderEntry type="sourceFolder" forTests="false" />
  11 + </component>
  12 +</module>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="JavaScriptSettings">
  4 + <option name="languageLevel" value="ES6" />
  5 + </component>
  6 +</project>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="ProjectModuleManager">
  4 + <modules>
  5 + <module fileurl="file://$PROJECT_DIR$/.idea/ScienceCaptain.iml" filepath="$PROJECT_DIR$/.idea/ScienceCaptain.iml" />
  6 + </modules>
  7 + </component>
  8 +</project>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="VcsDirectoryMappings">
  4 + <mapping directory="$PROJECT_DIR$" vcs="Git" />
  5 + </component>
  6 +</project>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="ChangeListManager">
  4 + <list default="true" id="632eecf6-91e3-4185-aea4-06d243e51935" name="Default" comment="commit" />
  5 + <ignored path="$PROJECT_DIR$/.tmp/" />
  6 + <ignored path="$PROJECT_DIR$/temp/" />
  7 + <ignored path="$PROJECT_DIR$/tmp/" />
  8 + <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
  9 + <option name="TRACKING_ENABLED" value="true" />
  10 + <option name="SHOW_DIALOG" value="false" />
  11 + <option name="HIGHLIGHT_CONFLICTS" value="true" />
  12 + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
  13 + <option name="LAST_RESOLUTION" value="IGNORE" />
  14 + </component>
  15 + <component name="FileEditorManager">
  16 + <leaf>
  17 + <file leaf-file-name="app.json" pinned="false" current-in-tab="true">
  18 + <entry file="file://$PROJECT_DIR$/app.json">
  19 + <provider selected="true" editor-type-id="text-editor">
  20 + <state relative-caret-position="270">
  21 + <caret line="19" column="36" lean-forward="true" selection-start-line="19" selection-start-column="36" selection-end-line="19" selection-end-column="36" />
  22 + </state>
  23 + </provider>
  24 + </entry>
  25 + </file>
  26 + <file leaf-file-name="myProfile.wxml" pinned="false" current-in-tab="false">
  27 + <entry file="file://$PROJECT_DIR$/pages/my/myProfile/myProfile.wxml">
  28 + <provider selected="true" editor-type-id="text-editor" />
  29 + </entry>
  30 + </file>
  31 + <file leaf-file-name="all-appointment.json" pinned="false" current-in-tab="false">
  32 + <entry file="file://$PROJECT_DIR$/pages/my/all-appointment/all-appointment.json">
  33 + <provider selected="true" editor-type-id="text-editor" />
  34 + </entry>
  35 + </file>
  36 + <file leaf-file-name="all-appointment.wxml" pinned="false" current-in-tab="false">
  37 + <entry file="file://$PROJECT_DIR$/pages/my/all-appointment/all-appointment.wxml">
  38 + <provider selected="true" editor-type-id="text-editor" />
  39 + </entry>
  40 + </file>
  41 + <file leaf-file-name="protocol.wxml" pinned="false" current-in-tab="false">
  42 + <entry file="file://$PROJECT_DIR$/pages/my/protocol/protocol.wxml">
  43 + <provider selected="true" editor-type-id="text-editor" />
  44 + </entry>
  45 + </file>
  46 + <file leaf-file-name="protocol.js" pinned="false" current-in-tab="false">
  47 + <entry file="file://$PROJECT_DIR$/pages/my/protocol/protocol.js">
  48 + <provider selected="true" editor-type-id="text-editor" />
  49 + </entry>
  50 + </file>
  51 + <file leaf-file-name="myCard.wxml" pinned="false" current-in-tab="false">
  52 + <entry file="file://$PROJECT_DIR$/pages/my/myCard/myCard.wxml">
  53 + <provider selected="true" editor-type-id="text-editor" />
  54 + </entry>
  55 + </file>
  56 + </leaf>
  57 + </component>
  58 + <component name="Git.Settings">
  59 + <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
  60 + </component>
  61 + <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
  62 + <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
  63 + <component name="JsGulpfileManager">
  64 + <detection-done>true</detection-done>
  65 + <sorting>DEFINITION_ORDER</sorting>
  66 + </component>
  67 + <component name="NodePackageJsonFileManager">
  68 + <packageJsonPaths />
  69 + </component>
  70 + <component name="ProjectFrameBounds" extendedState="6">
  71 + <option name="x" value="339" />
  72 + <option name="y" value="30" />
  73 + <option name="width" value="1936" />
  74 + <option name="height" value="1047" />
  75 + </component>
  76 + <component name="ProjectView">
  77 + <navigator proportions="" version="1">
  78 + <foldersAlwaysOnTop value="true" />
  79 + </navigator>
  80 + <panes>
  81 + <pane id="Scope" />
  82 + <pane id="ProjectPane">
  83 + <subPane>
  84 + <expand>
  85 + <path>
  86 + <item name="ScienceCaptain" type="b2602c69:ProjectViewProjectNode" />
  87 + <item name="ScienceCaptain" type="462c0819:PsiDirectoryNode" />
  88 + </path>
  89 + <path>
  90 + <item name="ScienceCaptain" type="b2602c69:ProjectViewProjectNode" />
  91 + <item name="ScienceCaptain" type="462c0819:PsiDirectoryNode" />
  92 + <item name="pages" type="462c0819:PsiDirectoryNode" />
  93 + </path>
  94 + </expand>
  95 + <select />
  96 + </subPane>
  97 + </pane>
  98 + </panes>
  99 + </component>
  100 + <component name="PropertiesComponent">
  101 + <property name="WebServerToolWindowFactoryState" value="false" />
  102 + <property name="last_opened_file_path" value="D:/git_folder" />
  103 + <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
  104 + <property name="nodejs_npm_path_reset_for_default_project" value="true" />
  105 + </component>
  106 + <component name="RunDashboard">
  107 + <option name="ruleStates">
  108 + <list>
  109 + <RuleState>
  110 + <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
  111 + </RuleState>
  112 + <RuleState>
  113 + <option name="name" value="StatusDashboardGroupingRule" />
  114 + </RuleState>
  115 + </list>
  116 + </option>
  117 + </component>
  118 + <component name="SvnConfiguration">
  119 + <configuration />
  120 + </component>
  121 + <component name="TaskManager">
  122 + <task active="true" id="Default" summary="Default task">
  123 + <changelist id="632eecf6-91e3-4185-aea4-06d243e51935" name="Default" comment="" />
  124 + <created>1542334789245</created>
  125 + <option name="number" value="Default" />
  126 + <option name="presentableId" value="Default" />
  127 + <updated>1542334789245</updated>
  128 + <workItem from="1542334792985" duration="236000" />
  129 + </task>
  130 + <servers />
  131 + </component>
  132 + <component name="TimeTrackingManager">
  133 + <option name="totallyTimeSpent" value="236000" />
  134 + </component>
  135 + <component name="ToolWindowManager">
  136 + <frame x="-8" y="-8" width="1936" height="1056" extended-state="6" />
  137 + <layout>
  138 + <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24973656" />
  139 + <window_info anchor="bottom" id="TODO" order="6" />
  140 + <window_info anchor="bottom" id="Docker" show_stripe_button="false" />
  141 + <window_info anchor="bottom" id="Event Log" side_tool="true" />
  142 + <window_info anchor="bottom" id="Version Control" visible="true" weight="0.3293348" />
  143 + <window_info anchor="bottom" id="Run" order="2" />
  144 + <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
  145 + <window_info anchor="bottom" id="Terminal" />
  146 + <window_info id="Favorites" side_tool="true" />
  147 + <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
  148 + <window_info anchor="bottom" id="Find" order="1" />
  149 + <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
  150 + <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
  151 + <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
  152 + <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
  153 + <window_info anchor="bottom" id="Message" order="0" />
  154 + <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
  155 + </layout>
  156 + </component>
  157 + <component name="TypeScriptGeneratedFilesManager">
  158 + <option name="version" value="1" />
  159 + </component>
  160 + <component name="Vcs.Log.Tabs.Properties">
  161 + <option name="TAB_STATES">
  162 + <map>
  163 + <entry key="MAIN">
  164 + <value>
  165 + <State>
  166 + <option name="RECENTLY_FILTERED_USER_GROUPS">
  167 + <collection />
  168 + </option>
  169 + <option name="RECENTLY_FILTERED_BRANCH_GROUPS">
  170 + <collection />
  171 + </option>
  172 + <option name="COLUMN_ORDER">
  173 + <list>
  174 + <option value="0" />
  175 + <option value="1" />
  176 + <option value="2" />
  177 + <option value="3" />
  178 + </list>
  179 + </option>
  180 + </State>
  181 + </value>
  182 + </entry>
  183 + </map>
  184 + </option>
  185 + </component>
  186 + <component name="VcsContentAnnotationSettings">
  187 + <option name="myLimit" value="2678400000" />
  188 + </component>
  189 + <component name="editorHistoryManager">
  190 + <entry file="file://$PROJECT_DIR$/pages/my/protocol/protocol.wxml">
  191 + <provider selected="true" editor-type-id="text-editor" />
  192 + </entry>
  193 + <entry file="file://$PROJECT_DIR$/pages/my/protocol/protocol.js">
  194 + <provider selected="true" editor-type-id="text-editor" />
  195 + </entry>
  196 + <entry file="file://$PROJECT_DIR$/pages/my/myCard/myCard.wxml">
  197 + <provider selected="true" editor-type-id="text-editor" />
  198 + </entry>
  199 + <entry file="file://$PROJECT_DIR$/pages/my/all-appointment/all-appointment.json">
  200 + <provider selected="true" editor-type-id="text-editor" />
  201 + </entry>
  202 + <entry file="file://$PROJECT_DIR$/pages/my/all-appointment/all-appointment.wxml">
  203 + <provider selected="true" editor-type-id="text-editor" />
  204 + </entry>
  205 + <entry file="file://$PROJECT_DIR$/pages/myProfile/myProfile.json">
  206 + <provider selected="true" editor-type-id="text-editor" />
  207 + </entry>
  208 + <entry file="file://$PROJECT_DIR$/pages/myProfile/myProfile.wxml">
  209 + <provider selected="true" editor-type-id="text-editor">
  210 + <state relative-caret-position="27">
  211 + <caret line="1" column="1" selection-start-line="1" selection-start-column="1" selection-end-line="1" selection-end-column="43" />
  212 + </state>
  213 + </provider>
  214 + </entry>
  215 + <entry file="file://$PROJECT_DIR$/pages/myProfile/myProfile.wxss">
  216 + <provider selected="true" editor-type-id="text-editor" />
  217 + </entry>
  218 + <entry file="file://$PROJECT_DIR$/pages/my/myProfile/myProfile.wxml">
  219 + <provider selected="true" editor-type-id="text-editor" />
  220 + </entry>
  221 + <entry file="file://$PROJECT_DIR$/app.json">
  222 + <provider selected="true" editor-type-id="text-editor">
  223 + <state relative-caret-position="270">
  224 + <caret line="19" column="36" lean-forward="true" selection-start-line="19" selection-start-column="36" selection-end-line="19" selection-end-column="36" />
  225 + </state>
  226 + </provider>
  227 + </entry>
  228 + </component>
  229 +</project>
  1 +//app.js
  2 +// import md5 from 'utils/md5.js';
  3 +App({
  4 + onLaunch: function () {
  5 + // 展示本地存储能力
  6 + var logs = wx.getStorageSync('logs') || []
  7 + logs.unshift(Date.now())
  8 + wx.setStorageSync('logs', logs)
  9 + // 登录
  10 + // wx.login({
  11 + // success: res => {
  12 + // // 发送 res.code 到后台换取 openId, sessionKey, unionId
  13 + // }
  14 + // })
  15 + // 获取用户信息
  16 + // wx.getSetting({
  17 + // success: res => {
  18 + // if (res.authSetting['scope.userInfo']) {
  19 + // // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
  20 + // wx.getUserInfo({
  21 + // success: res => {
  22 + // // 可以将 res 发送给后台解码出 unionId
  23 + // this.globalData.userInfo = res.userInfo
  24 + // // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
  25 + // // 所以此处加入 callback 以防止这种情况
  26 + // if (this.userInfoReadyCallback) {
  27 + // this.userInfoReadyCallback(res)
  28 + // }
  29 + // }
  30 + // })
  31 + // }
  32 + // }
  33 + // })
  34 + },
  35 + post: function (url,data,headerParams) {
  36 + /**
  37 + * 自定义post函数,返回Promise
  38 + * +-------------------
  39 + * @param {String} url 接口网址
  40 + * @param {arrayObject} data 要传的数组对象 like: {name: 'name', age: 32}
  41 + * +-------------------
  42 + * @return {Promise} promise 返回promise供后续操作
  43 + */
  44 + // wx.showLoading({
  45 + // title: '加载中',
  46 + // })
  47 + wx.showNavigationBarLoading()
  48 + // wx.showToast({
  49 + // title: '加载中',
  50 + // icon:'none',
  51 + // })
  52 + var promise = new Promise((resolve, reject) => {
  53 + //init
  54 + let that = this;
  55 + let postData = data;
  56 + let baseUrl = 'http://informationxcx.w.bronet.cn/api';
  57 + //网络请求
  58 + let header = {
  59 + 'content-type': 'application/x-www-form-urlencoded'
  60 + }
  61 + header = Object.assign(header, headerParams)
  62 + wx.request({
  63 + url: baseUrl + url,
  64 + data: postData,
  65 + method: 'POST',
  66 + header: header,
  67 + success: function (res) {//返回取得的数据
  68 + if (res.data.code == '20000') {
  69 + resolve(res.data.data);
  70 + } else if (res.data.code == '40001') {//返回错误提示信息
  71 + wx.showModal({
  72 + title: '提示',
  73 + content: '登录已过期请重新登录!',
  74 + showCancel: false,
  75 + success: function (res) {
  76 + if (res.confirm) {
  77 + wx.removeStorageSync('token');
  78 + wx.navigateTo({
  79 + url: '/pages/start/start',
  80 + })
  81 + }
  82 + }
  83 + })
  84 + } else if (res.data.code == '40000') {
  85 + wx.showModal({
  86 + title: '提示',
  87 + content: res.data.msg,
  88 + showCancel: false,
  89 + success: function (res) { }
  90 + })
  91 + } else {
  92 + wx.showModal({
  93 + title: '提示',
  94 + content: res.data.msg,
  95 + showCancel: false,
  96 + })
  97 + reject(res.data)
  98 + }
  99 + setTimeout(function () {
  100 + // wx.hideLoading()
  101 + // wx.hideToast()
  102 + wx.hideNavigationBarLoading()
  103 + }, 500)
  104 + },
  105 + error: function (e) {
  106 + reject('网络出错');
  107 + // wx.hideLoading()
  108 + wx.hideNavigationBarLoading()
  109 + }
  110 + })
  111 + });
  112 + return promise;
  113 + },
  114 + formCollect(id){
  115 + let url = '/sign/formid'
  116 + let params = {
  117 + formid: id,
  118 + openid: wx.getStorageSync('openId')
  119 + }
  120 + this.post(url,params).then((res)=>{
  121 + console.log(res)
  122 + }).catch((errMsg)=>{
  123 +
  124 + })
  125 + },
  126 + nowDate() {
  127 + let date = new Date();
  128 + let month = date.getMonth() + 1;
  129 + let day = date.getDate();
  130 + let hours = date.getHours();
  131 + let minutes = date.getMinutes();
  132 + let Y = date.getFullYear() + '/' + (month > 9 ? month : ('0' + month)) + '/' + (day > 9 ? day : ('0' + day));
  133 + let H = (hours>9?hours:('0'+hours)) + ':' +(minutes>9?minutes:('0'+minutes));
  134 + let time = [];
  135 + time.push(Y,H);
  136 + let new_time = time.join(' ');
  137 + return new_time;
  138 + },
  139 + initDate(a){
  140 + let date1 = new Date();
  141 + let time1 = date1.getFullYear() + "-" + (date1.getMonth() + 1) + "-" + date1.getDate();
  142 + let date2 = new Date(date1);
  143 + date2.setDate(date1.getDate() + a);
  144 + let time2 = date2.getFullYear() + "-" + (date2.getMonth() + 1) + "-" + date2.getDate();
  145 + return time2;
  146 + },
  147 + // 数组移除指定元素
  148 + arryRemove(arr, item){
  149 + return arr.filter(function (ele) {
  150 + return ele != item;
  151 + })
  152 + },
  153 + strTime(strtime){
  154 + let str = 'bronet' + strtime + 'beijing'
  155 + return md5(md5(str))
  156 + },
  157 + globalData: {
  158 + userInfo: null,
  159 + baseUrl:'https://beijing.wx.broteam.cn'
  160 + }
  161 +})
  1 +{
  2 + "pages": [
  3 + "pages/index/index",
  4 + "pages/index/confirm-appointment-info/confirm-appointment-info",
  5 + "pages/index/phone-code/phone-code",
  6 + "pages/index/activity-detail/activity-detail",
  7 + "pages/index/go-appointment/go-appointment",
  8 + "pages/index/confirm-appointment-info/add-student/add-student",
  9 + "pages/my/myProfile/myProfile",
  10 + "pages/my/serviceWeChat/serviceWeChat",
  11 + "pages/my/chargePhoneNum/chargePhoneNum",
  12 + "pages/my/myCard/myCard",
  13 + "pages/my/groupBuyDetail/groupBuyDetail",
  14 + "pages/my/buyCard/buyCard",
  15 + "pages/my/protocol/protocol",
  16 + "pages/my/groupBupShare/groupBupShare",
  17 + "pages/my/charge/charge",
  18 + "pages/my/groupBuy/groupBuy",
  19 + "pages/my/appointmentRecord/appointmentRecord",
  20 + "pages/my/cardIntroduction/cardIntroduction",
  21 + "pages/my/all-appointment/all-appointment",
  22 + "pages/my/my",
  23 + "pages/clock/punchAppealDetail2/punchAppealDetail2",
  24 + "pages/clock/punchAppealDetail/punchAppealDetail",
  25 + "pages/clock/punchAppeal/punchAppeal",
  26 + "pages/clock/clock",
  27 + "pages/start/start"
  28 + ],
  29 + "window": {
  30 + "backgroundTextStyle": "light",
  31 + "navigationBarBackgroundColor": "#3FA9F5",
  32 + "navigationBarTitleText": "科学队长实验室",
  33 + "navigationBarTextStyle": "white"
  34 + },
  35 + "tabBar": {
  36 + "color": "#6F6F6F",
  37 + "selectedColor": "#5AB7F9",
  38 + "borderStyle": "black",
  39 + "backgroundColor": "#fff",
  40 + "list": [
  41 + {
  42 + "pagePath": "pages/index/index",
  43 + "text": "首页",
  44 + "iconPath": "/images/home0.png",
  45 + "selectedIconPath": "/images/home1.png"
  46 + },
  47 + {
  48 + "pagePath": "pages/clock/clock",
  49 + "text": "打卡",
  50 + "iconPath": "/images/clock0.png",
  51 + "selectedIconPath": "/images/clock1.png"
  52 + },
  53 + {
  54 + "pagePath": "pages/my/my",
  55 + "text": "我的",
  56 + "iconPath": "/images/my0.png",
  57 + "selectedIconPath": "/images/my1.png"
  58 + }
  59 + ]
  60 + }
  61 +}
  1 +@font-face {
  2 + font-family: 'iconfont'; /* project id 912375 */
  3 + src: url('//at.alicdn.com/t/font_912375_canfpux7i3.eot');
  4 + src: url('//at.alicdn.com/t/font_912375_canfpux7i3.eot?#iefix') format('embedded-opentype'),
  5 + url('//at.alicdn.com/t/font_912375_canfpux7i3.woff') format('woff'),
  6 + url('//at.alicdn.com/t/font_912375_canfpux7i3.ttf') format('truetype'),
  7 + url('//at.alicdn.com/t/font_912375_canfpux7i3.svg#iconfont') format('svg');
  8 +}
  9 +
  10 +.iconfont {
  11 + font-family:"iconfont" !important;
  12 + font-size:16px;
  13 + font-style:normal;
  14 + -webkit-font-smoothing: antialiased;
  15 + -moz-osx-font-smoothing: grayscale;
  16 +}
  17 +
  18 +.icon-dianji:before { content: "\e600"; }
  19 +
  20 +.icon-dingwei:before { content: "\e7c4"; }
  21 +
  22 +.icon-jinggao:before { content: "\e605"; }
  23 +
  24 +.icon-yuan-copy-copy-copy-copy:before { content: "\e618"; }
  25 +
  26 +.icon-shouye:before { content: "\e6a5"; }
  27 +
  28 +.icon-quxiao:before { content: "\e60f"; }
  29 +
  30 +.icon-daosanjiao:before { content: "\e610"; }
  31 +
  32 +.icon-jia:before { content: "\e79f"; }
  33 +
  34 +.icon-zhongdian:before { content: "\e601"; }
  35 +
  36 +.icon-fenxiang:before { content: "\e696"; }
  37 +
  38 +.icon-shangwutubiao-:before { content: "\e644"; }
  39 +
  40 +.icon-xuanzhong:before { content: "\e604"; }
  41 +
  42 +.icon-jieshu:before { content: "\e602"; }
  43 +
  44 +.icon-fanhui:before { content: "\e619"; }
  45 +
  46 +.icon-bianji2:before { content: "\e656"; }
  47 +
  48 +.icon-dui:before { content: "\e648"; }
  49 +
  50 +.icon-wode:before { content: "\e67b"; }
  1 +// pages/clock/clock.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 +
  9 + },
  10 + //打卡申诉
  11 + punchApply(){
  12 + wx.navigateTo({
  13 + url: 'punchAppeal/punchAppeal',
  14 + })
  15 + },
  16 +
  17 + /**
  18 + * 生命周期函数--监听页面加载
  19 + */
  20 + onLoad: function (options) {
  21 +
  22 + },
  23 +
  24 + /**
  25 + * 生命周期函数--监听页面初次渲染完成
  26 + */
  27 + onReady: function () {
  28 +
  29 + },
  30 +
  31 + /**
  32 + * 生命周期函数--监听页面显示
  33 + */
  34 + onShow: function () {
  35 +
  36 + },
  37 +
  38 + /**
  39 + * 生命周期函数--监听页面隐藏
  40 + */
  41 + onHide: function () {
  42 +
  43 + },
  44 +
  45 + /**
  46 + * 生命周期函数--监听页面卸载
  47 + */
  48 + onUnload: function () {
  49 +
  50 + },
  51 +
  52 + /**
  53 + * 页面相关事件处理函数--监听用户下拉动作
  54 + */
  55 + onPullDownRefresh: function () {
  56 +
  57 + },
  58 +
  59 + /**
  60 + * 页面上拉触底事件的处理函数
  61 + */
  62 + onReachBottom: function () {
  63 +
  64 + },
  65 +
  66 + /**
  67 + * 用户点击右上角分享
  68 + */
  69 + onShareAppMessage: function () {
  70 +
  71 + }
  72 +})
  1 +{
  2 + "navigationBarTitleText": "打卡"
  3 +}
  1 +<!--pages/clock/clock.wxml-->
  2 +<view class='content_box'>
  3 + <view class='circle_large'>
  4 + <view class='circle_middle'>
  5 + <view class='circle_small'>
  6 + <text wx:if='{{}}'>一键打卡</text>
  7 + <text class='iconfont icon-dui'></text>
  8 + </view>
  9 + </view>
  10 + </view>
  11 + <view class='punch_info'>当前:未获取</view>
  12 + <view class='punch_btn' bindtap='punchApply'>打卡申诉</view>
  13 +</view>
  1 +/* pages/clock/clock.wxss */
  2 +
  3 +.content_box {
  4 + width: 100%;
  5 + height: 100%;
  6 + position: fixed;
  7 + left: 0;
  8 + top: 0;
  9 + background: #3899e5;
  10 + display: flex;
  11 + /* justify-content: center; */
  12 + flex-direction: column;
  13 + align-items: center;
  14 + padding-top: 115rpx;
  15 +}
  16 +
  17 +.circle_large, .circle_middle, .circle_small {
  18 + width: 327rpx;
  19 + height: 327rpx;
  20 + background: rgba(255, 255, 255, 0.3);
  21 + border-radius: 50%;
  22 + display: flex;
  23 + align-items: center;
  24 + justify-content: center;
  25 +}
  26 +
  27 +.circle_middle {
  28 + width: 286rpx;
  29 + height: 286rpx;
  30 +}
  31 +
  32 +.circle_small {
  33 + width: 251rpx;
  34 + height: 251rpx;
  35 + font-size: 36rpx;
  36 + background: #fff;
  37 + color: #fc5b63;
  38 + padding: 80rpx;
  39 + box-sizing: border-box;
  40 +}
  41 +.icon-dui{
  42 + font-size: 90rpx;
  43 +}
  44 +.punch_info{
  45 + font-size: 32rpx;
  46 + color: #FFFFFF;
  47 + margin-top: 60rpx;
  48 +}
  49 +.punch_btn {
  50 + width: 200rpx;
  51 + height: 80rpx;
  52 + background: rgba(63, 169, 245, 1);
  53 + border-radius: 10rpx;
  54 + font-size: 36rpx;
  55 + color: #fff;
  56 + display: flex;
  57 + align-items: center;
  58 + justify-content: center;
  59 + position: fixed;
  60 + bottom: 70rpx;
  61 + left: 50%;
  62 + transform: translateX(-50%);
  63 +}
  1 +// pages/punchAppeal/punchAppeal.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 + current: 0,
  9 + maxlength: 100,
  10 + minlength: 0,
  11 + currentnum: 0
  12 + },
  13 + //tab切换
  14 + tabCharge(e) {
  15 + var index = e.currentTarget.dataset.current
  16 + var current = this.data.current
  17 + if (index == current) {
  18 + return false
  19 + } else {
  20 + this.setData({
  21 + current: index
  22 + })
  23 + }
  24 + },
  25 + //申诉内容获取
  26 + appealContent(e) {
  27 + var textcontent = e.detail.value
  28 + var len = e.detail.cursor
  29 + var maxlength = this.data.maxlength
  30 + var minlength = this.data.minlength
  31 + if (len > maxlength) {
  32 + wx.showToast({
  33 + title: '超出最大限制',
  34 + icon: 'none'
  35 + })
  36 + return
  37 + } else {
  38 + this.setData({
  39 + currentnum: len
  40 + })
  41 + }
  42 + },
  43 + //上传图片
  44 + uploadImg() {
  45 + wx.chooseImage({
  46 + success: function(res) {
  47 + console.log(res)
  48 + const tempFilePaths = res.tempFilePaths
  49 + wx.uploadFile({
  50 + url: '',
  51 + filePath: 'tempFilePaths[0]',
  52 + name: 'file',
  53 + })
  54 + },
  55 + })
  56 + },
  57 +//跳转申诉详情页
  58 + listDetail(){
  59 + wx.navigateTo({
  60 + url:'../punchAppealDetail/punchAppealDetail',
  61 + })
  62 + },
  63 + /**
  64 + * 生命周期函数--监听页面加载
  65 + */
  66 + onLoad: function(options) {
  67 +
  68 + },
  69 +
  70 + /**
  71 + * 生命周期函数--监听页面初次渲染完成
  72 + */
  73 + onReady: function() {
  74 +
  75 + },
  76 +
  77 + /**
  78 + * 生命周期函数--监听页面显示
  79 + */
  80 + onShow: function() {
  81 +
  82 + },
  83 +
  84 + /**
  85 + * 生命周期函数--监听页面隐藏
  86 + */
  87 + onHide: function() {
  88 +
  89 + },
  90 +
  91 + /**
  92 + * 生命周期函数--监听页面卸载
  93 + */
  94 + onUnload: function() {
  95 +
  96 + },
  97 +
  98 + /**
  99 + * 页面相关事件处理函数--监听用户下拉动作
  100 + */
  101 + onPullDownRefresh: function() {
  102 +
  103 + },
  104 +
  105 + /**
  106 + * 页面上拉触底事件的处理函数
  107 + */
  108 + onReachBottom: function() {
  109 +
  110 + },
  111 +
  112 + /**
  113 + * 用户点击右上角分享
  114 + */
  115 + onShareAppMessage: function() {
  116 +
  117 + }
  118 +})
  1 +{
  2 + "navigationBarTitleText": "打卡申诉"
  3 +}
  1 +<!--pages/punchAppeal/punchAppeal.wxml-->
  2 +<view class='tab_box'>
  3 + <view class="tab_item {{current==0?'tab_active':''}}" data-current='0' bindtap='tabCharge'>我要申诉</view>
  4 + <view class="tab_item {{current==1?'tab_active':''}}" data-current='1' bindtap='tabCharge'>审核中</view>
  5 + <view class="tab_item {{current==2?'tab_active':''}}" data-current='2' bindtap='tabCharge'>已通过</view>
  6 + <view class="tab_item {{current==3?'tab_active':''}}" data-current='3' bindtap='tabCharge'>未通过</view>
  7 +</view>
  8 +<block wx:if='{{current==0}}'>
  9 + <view class='content_box'>
  10 + <view class='item_list'>
  11 + <view class='list_title_info'>
  12 + <view class='iconfont icon-zhongdian'> </view>
  13 + <view>
  14 + <view>如果因为环境网络问题或者其他原因导致无法打卡,请上传照 片及文字申诉内容,证明您已到场并已经参与活动。
  15 + </view>
  16 + <view class='hint_info'>注:最多可上传3张照片</view>
  17 + </view>
  18 + </view>
  19 + <view class='uoload_box'>
  20 + <view class='upload_item' bindtap='uploadImg'>
  21 + <text class='iconfont icon-jia'></text>
  22 + </view>
  23 + <view class='upload_item'>
  24 + <text class='iconfont icon-jia'></text>
  25 + </view>
  26 + <view class='upload_item'>
  27 + <text class='iconfont icon-jia'></text>
  28 + </view>
  29 + </view>
  30 + </view>
  31 + <view class='item_list'>
  32 + <view class='list_title'>申诉内容</view>
  33 + <view class='list_input'>
  34 + <textarea placeholder='请输入您的申诉内容...' bindinput='appealContent' placeholder-style='color:#C3C3C3'>
  35 + </textarea>
  36 + <view class='word_num'>{{currentnum}}/{{maxlength}}</view>
  37 + </view>
  38 + <view class='appeal_info'>
  39 + <text class='iconfont icon-yuan-copy-copy-copy-copy'></text>
  40 + <text>当前:xxx实验室</text>
  41 + </view>
  42 + <view class='null_box'></view>
  43 + <view class='submit_btn'>提 交</view>
  44 + </view>
  45 + </view>
  46 +</block>
  47 +<block wx:elif='{{current==1}}'>
  48 + <view class='review_box'>
  49 + <view class='review_item' bindtap='listDetail'>
  50 + <view>提交时间:2018.10.21</view>
  51 + <view class='review_content_box'>
  52 + <view class='review_img'>
  53 + <image src='../../../images/img1.png'></image>
  54 + </view>
  55 + <view class='review_content'>
  56 + <view class='review_info'>卡上规范咖喱饭咖喱发放啦发货;阿 富汗阿里发布啦 —— 爱因斯坦卡上规范咖喱饭咖喱发放啦发货;阿 富汗阿里发布啦 —— 爱因斯坦卡上规范咖喱饭咖喱发放啦发货;阿 富汗阿里发布啦 —— 爱因斯坦</view>
  57 + <view class='review_btn'>
  58 + <view class='cancle_btn'>取消申诉</view>
  59 + <view class='review_state'>审核中</view>
  60 + </view>
  61 + </view>
  62 + </view>
  63 + </view>
  64 + </view>
  65 +</block>
  66 +<block wx:elif='{{current==2}}'>
  67 + <view class='review_box'>
  68 + <view class='review_item' bindtap='listDetail'>
  69 + <view>提交时间:2018.10.21</view>
  70 + <view class='review_content_box'>
  71 + <view class='review_img'>
  72 + <image src='../../../images/img1.png'></image>
  73 + </view>
  74 + <view class='review_content'>
  75 + <view class='review_info'>卡上规范咖喱饭咖喱发放啦发货;阿 富汗阿里发布啦 —— 爱因斯坦卡上规范咖喱饭咖喱发放啦发货;阿 富汗阿里发布啦 —— 爱因斯坦卡上规范咖喱饭咖喱发放啦发货;阿 富汗阿里发布啦 —— 爱因斯坦</view>
  76 + <view class='review_btn'>
  77 + <view class='cancle_btn' style='border:1rpx solid #fff'></view>
  78 + <view class='review_state'>
  79 + <text class='iconfont icon-dui'></text> 已通过
  80 + </view>
  81 + </view>
  82 + </view>
  83 + </view>
  84 + </view>
  85 + </view>
  86 +</block>
  87 +<block wx:elif='{{current==3}}'>
  88 + <view class='review_box'>
  89 + <view class='review_item' bindtap='listDetail'>
  90 + <view>提交时间:2018.10.21</view>
  91 + <view class='review_content_box'>
  92 + <view class='review_img'>
  93 + <image src='../../../images/img1.png'></image>
  94 + </view>
  95 + <view class='review_content'>
  96 + <view class='review_info'>卡上规范咖喱饭咖喱发放啦发货;阿 富汗阿里发布啦 —— 爱因斯坦卡上规范咖喱饭咖喱发放啦发货;阿 富汗阿里发布啦 —— 爱因斯坦卡上规范咖喱饭咖喱发放啦发货;阿 富汗阿里发布啦 —— 爱因斯坦</view>
  97 + <view class='review_btn'>
  98 + <view class='cancle_btn view_btn'>查看原因</view>
  99 + <view class='review_state state3'>未通过</view>
  100 + </view>
  101 + </view>
  102 + </view>
  103 + </view>
  104 + </view>
  105 +</block>
  1 +/* pages/punchAppeal/punchAppeal.wxss */
  2 +
  3 +page {
  4 + background: #f5f5f5;
  5 +}
  6 +
  7 +.tab_box {
  8 + width: 100%;
  9 + height: 100rpx;
  10 + background: #fff;
  11 + display: flex;
  12 + align-items: center;
  13 + justify-content: space-between;
  14 + padding: 0 22rpx;
  15 + font-size: 30rpx;
  16 + color: #464646;
  17 + text-align: center;
  18 + box-sizing: border-box;
  19 + border-bottom: 1rpx solid rgba(0, 0, 0, 0.08);
  20 +}
  21 +
  22 +.tab_item {
  23 + width: 25%;
  24 + position: relative;
  25 +}
  26 +
  27 +.tab_active {
  28 + color: #3fa9f5;
  29 +}
  30 +
  31 +.tab_active::after {
  32 + content: '';
  33 + width: 100%;
  34 + height: 4rpx;
  35 + background: #3fa9f5;
  36 + position: absolute;
  37 + left: 0;
  38 + bottom: -30rpx;
  39 +}
  40 +
  41 +.item_list {
  42 + padding: 20rpx;
  43 + background: #fff;
  44 + margin-bottom: 20rpx;
  45 +}
  46 +
  47 +.list_input {
  48 + width: 100%;
  49 + min-height: 300rpx;
  50 + border: 1rpx solid #3fa9f5;
  51 + border-radius: 20rpx;
  52 + background: #f5f5fa;
  53 + margin-top: 30rpx;
  54 + position: relative;
  55 +}
  56 +
  57 +.list_input textarea {
  58 + width: 100%;
  59 + font-size: 28rpx;
  60 + padding: 30rpx;
  61 + color: #6e6e6e;
  62 +}
  63 +
  64 +.word_num {
  65 + position: absolute;
  66 + right: 30rpx;
  67 + bottom: 30rpx;
  68 + font-size: 28rpx;
  69 + color: #c3c3c3;
  70 +}
  71 +
  72 +.list_title_info {
  73 + font-size: 24rpx;
  74 + color: #a3a3a3;
  75 + display: flex;
  76 + align-items: flex-start;
  77 + margin-top: 23rpx;
  78 +}
  79 +
  80 +.hint_info {
  81 + color: #fc5b63;
  82 + margin-top: 26rpx;
  83 +}
  84 +
  85 +.uoload_box {
  86 + margin-top: 50rpx;
  87 + padding: 0 10rpx;
  88 + display: flex;
  89 + align-items: center;
  90 + justify-content: space-between;
  91 +}
  92 +
  93 +.upload_item {
  94 + width: 200rpx;
  95 + height: 200rpx;
  96 + border: 1rpx dashed #6f6f6f;
  97 + display: flex;
  98 + align-items: center;
  99 + justify-content: center;
  100 +}
  101 +
  102 +.icon-jia {
  103 + font-size: 40rpx;
  104 + color: #a3a3a3;
  105 +}
  106 +
  107 +.list_title {
  108 + position: relative;
  109 + padding-left: 24rpx;
  110 + font-size: 30rpx;
  111 + color: #393939;
  112 +}
  113 +
  114 +.list_title::after {
  115 + content: "";
  116 + width: 6rpx;
  117 + height: 32rpx;
  118 + background: #3fa9f5;
  119 + border-radius: 40rpx;
  120 + position: absolute;
  121 + left: 0rpx;
  122 + top: 50%;
  123 + transform: translateY(-50%);
  124 +}
  125 +
  126 +.icon-yuan-copy-copy-copy-copy {
  127 + font-size: 18rpx;
  128 + color: #fc5b63;
  129 + margin-right: 15rpx;
  130 +}
  131 +
  132 +.appeal_info {
  133 + font-size: 30rpx;
  134 + color: #fc5b63;
  135 + margin-top: 50rpx;
  136 +}
  137 +
  138 +.submit_btn {
  139 + width: 100%;
  140 + height: 98rpx;
  141 + background: #3fa9f5;
  142 + font-size: 36rpx;
  143 + color: #fff;
  144 + display: flex;
  145 + align-items: center;
  146 + justify-content: center;
  147 + position: fixed;
  148 + bottom: 0;
  149 + left: 0;
  150 +}
  151 +
  152 +.null_box {
  153 + width: 100%;
  154 + height: 110rpx;
  155 +}
  156 +
  157 +/* 审核中 */
  158 +
  159 +.review_box {
  160 + padding: 20rpx;
  161 +}
  162 +
  163 +.review_item {
  164 + width: 100%;
  165 + background: #fff;
  166 + border-radius: 20rpx;
  167 + padding: 20rpx;
  168 + box-sizing: border-box;
  169 + margin-bottom: 20rpx;
  170 + font-size: 28rpx;
  171 + color: #393939;
  172 +}
  173 +
  174 +.review_item:last-child {
  175 + margin-bottom: 0;
  176 +}
  177 +
  178 +.review_img {
  179 + width: 200rpx;
  180 + height: 200rpx;
  181 +}
  182 +
  183 +.review_img image {
  184 + width: 100%;
  185 + height: 100%;
  186 +}
  187 +
  188 +.review_content_box {
  189 + display: flex;
  190 + align-items: center;
  191 + margin-top: 30rpx;
  192 +}
  193 +
  194 +.review_content {
  195 + width: 65%;
  196 + margin-left: 20rpx;
  197 +}
  198 +
  199 +.review_info {
  200 + color: #6f6f6f;
  201 + display: -webkit-box;
  202 + -webkit-box-orient: vertical;
  203 + -webkit-line-clamp: 2;
  204 + overflow: hidden;
  205 +}
  206 +
  207 +.review_btn {
  208 + display: flex;
  209 + align-items: center;
  210 + justify-content: space-between;
  211 + margin-top: 43rpx;
  212 +}
  213 +
  214 +.cancle_btn {
  215 + width: 150rpx;
  216 + height: 50rpx;
  217 + border: 1rpx solid #fc5b63;
  218 + border-radius: 20rpx;
  219 + text-align: center;
  220 + line-height: 50rpx;
  221 + color: #fc5b63;
  222 +}
  223 +
  224 +.review_state {
  225 + font-size: 24rpx;
  226 + color: #fc5b63;
  227 +}
  228 +.view_btn{
  229 + color: #3FA9F5;
  230 + border: 1rpx solid #3FA9F5;
  231 +}
  232 +.state3{
  233 + color: #C3C3C3
  234 +}
  235 +.icon-dui{
  236 + color: #FC5B63;
  237 +}
  1 +// pages/punchAppealDetail/punchAppealDetail.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 +
  9 + },
  10 +//补充提交申诉
  11 + againSubmit(){
  12 + wx.navigateTo({
  13 + url: '../punchAppealDetail2/punchAppealDetail2',
  14 + })
  15 + },
  16 + /**
  17 + * 生命周期函数--监听页面加载
  18 + */
  19 + onLoad: function (options) {
  20 +
  21 + },
  22 +
  23 + /**
  24 + * 生命周期函数--监听页面初次渲染完成
  25 + */
  26 + onReady: function () {
  27 +
  28 + },
  29 +
  30 + /**
  31 + * 生命周期函数--监听页面显示
  32 + */
  33 + onShow: function () {
  34 +
  35 + },
  36 +
  37 + /**
  38 + * 生命周期函数--监听页面隐藏
  39 + */
  40 + onHide: function () {
  41 +
  42 + },
  43 +
  44 + /**
  45 + * 生命周期函数--监听页面卸载
  46 + */
  47 + onUnload: function () {
  48 +
  49 + },
  50 +
  51 + /**
  52 + * 页面相关事件处理函数--监听用户下拉动作
  53 + */
  54 + onPullDownRefresh: function () {
  55 +
  56 + },
  57 +
  58 + /**
  59 + * 页面上拉触底事件的处理函数
  60 + */
  61 + onReachBottom: function () {
  62 +
  63 + },
  64 +
  65 + /**
  66 + * 用户点击右上角分享
  67 + */
  68 + onShareAppMessage: function () {
  69 +
  70 + }
  71 +})
  1 +{
  2 + "navigationBarTitleText": "申诉详情"
  3 +}
  1 +<!--pages/punchAppealDetail/punchAppealDetail.wxml-->
  2 +<view class='content_box'>
  3 + <view class='item_list'>
  4 + <view class='uoload_box'>
  5 + <view class='upload_item' bindtap='uploadImg'>
  6 + <text class='iconfont icon-jia'></text>
  7 + </view>
  8 + <view class='upload_item'>
  9 + <text class='iconfont icon-jia'></text>
  10 + </view>
  11 + <view class='upload_item'>
  12 + <text class='iconfont icon-jia'></text>
  13 + </view>
  14 + </view>
  15 + </view>
  16 + <view class='item_list'>
  17 + <view class='list_title'>申诉理由</view>
  18 + <view class='list_input'>
  19 + <view>朝阳区万寿路5号楼马兰大厦B座301念读书馆内朝阳区万寿路5号楼马兰大厦B座301念读书馆内朝阳</view>
  20 + <view class='word_num'>2018.10.10</view>
  21 + </view>
  22 + </view>
  23 + <view class='item_list'>
  24 + <view class='list_title'>未通过原因</view>
  25 + <view class='list_input'>
  26 + <view>朝阳区万寿路5号楼马兰大厦B座301念读书馆内朝阳区万寿路5号楼马兰大厦B座301念读书馆内朝阳</view>
  27 + <view class='word_num'>2018.10.10</view>
  28 + </view>
  29 + </view>
  30 + <view class='null_box'></view>
  31 + <view class='submit_btn' bindtap='againSubmit'>补充提交</view>
  32 +</view>
  33 +
  1 +/* pages/punchAppealDetail/punchAppealDetail.wxss */
  2 +@import '../punchAppeal/punchAppeal.wxss';
  3 +
  4 +.uoload_box {
  5 + margin-top: 0;
  6 +}
  7 +
  8 +.list_input {
  9 + background: none;
  10 + border: none;
  11 + font-size: 28rpx;
  12 + color: #6F6F6F;
  13 + padding:0 20rpx;
  14 + box-sizing: border-box;
  15 +}
  16 +.word_num{
  17 + font-size: 28rpx;
  18 + color: #6F6F6F;
  19 +}
  1 +// pages/punchAppealDetail2/punchAppealDetail2.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 +
  9 + },
  10 +
  11 + /**
  12 + * 生命周期函数--监听页面加载
  13 + */
  14 + onLoad: function (options) {
  15 +
  16 + },
  17 +
  18 + /**
  19 + * 生命周期函数--监听页面初次渲染完成
  20 + */
  21 + onReady: function () {
  22 +
  23 + },
  24 +
  25 + /**
  26 + * 生命周期函数--监听页面显示
  27 + */
  28 + onShow: function () {
  29 +
  30 + },
  31 +
  32 + /**
  33 + * 生命周期函数--监听页面隐藏
  34 + */
  35 + onHide: function () {
  36 +
  37 + },
  38 +
  39 + /**
  40 + * 生命周期函数--监听页面卸载
  41 + */
  42 + onUnload: function () {
  43 +
  44 + },
  45 +
  46 + /**
  47 + * 页面相关事件处理函数--监听用户下拉动作
  48 + */
  49 + onPullDownRefresh: function () {
  50 +
  51 + },
  52 +
  53 + /**
  54 + * 页面上拉触底事件的处理函数
  55 + */
  56 + onReachBottom: function () {
  57 +
  58 + },
  59 +
  60 + /**
  61 + * 用户点击右上角分享
  62 + */
  63 + onShareAppMessage: function () {
  64 +
  65 + }
  66 +})
  1 +{
  2 + "navigationBarTitleText": "申诉详情"
  3 +}
  1 +<!--pages/punchAppealDetail/punchAppealDetail.wxml-->
  2 +
  3 +<view class='content_box'>
  4 + <view class='item_list'>
  5 + <view class='uoload_box'>
  6 + <view class='upload_item' bindtap='uploadImg'>
  7 + <text class='iconfont icon-jia'></text>
  8 + </view>
  9 + <view class='upload_item'>
  10 + <text class='iconfont icon-jia'></text>
  11 + </view>
  12 + <view class='upload_item'>
  13 + <text class='iconfont icon-jia'></text>
  14 + </view>
  15 + </view>
  16 + </view>
  17 + <view class='item_list'>
  18 + <view class='list_title'>未通过原因</view>
  19 + <view class='list_input'>
  20 + <view>朝阳区万寿路5号楼马兰大厦B座301念读书馆内朝阳区万寿路5号楼马兰大厦B座301念读书馆内朝阳</view>
  21 + <view class='word_num'>2018.10.10</view>
  22 + </view>
  23 + <view class='appeal_info'>
  24 + <text class='iconfont icon-yuan-copy-copy-copy-copy'></text>
  25 + <text>当前:xxx实验室</text>
  26 + </view>
  27 + </view>
  28 +</view>
  1 +/* pages/punchAppealDetail2/punchAppealDetail2.wxss */
  2 +@import '../punchAppeal/punchAppeal.wxss';
  3 +page{
  4 + background: #fff;
  5 +}
  6 +.content_box{
  7 + background: #f5f5f5;
  8 +}
  9 +.uoload_box {
  10 + margin-top: 0;
  11 +}
  12 +
  13 +.list_input {
  14 + background: none;
  15 + border: none;
  16 + font-size: 28rpx;
  17 + color: #6f6f6f;
  18 + padding: 0 20rpx;
  19 + box-sizing: border-box;
  20 +}
  21 +
  22 +.word_num {
  23 + font-size: 28rpx;
  24 + color: #6f6f6f;
  25 +}
  1 +// pages/index/activity-detail/activity-detail.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 + is_agree: true,
  9 + },
  10 + clickAgreeBtn() {
  11 + this.setData({is_agree: !this.data.is_agree});
  12 + console.log(this.data.is_agree);
  13 + },
  14 + /**
  15 + * 生命周期函数--监听页面加载
  16 + */
  17 + onLoad: function (options) {
  18 +
  19 + },
  20 +
  21 + /**
  22 + * 生命周期函数--监听页面初次渲染完成
  23 + */
  24 + onReady: function () {
  25 +
  26 + },
  27 +
  28 + /**
  29 + * 生命周期函数--监听页面显示
  30 + */
  31 + onShow: function () {
  32 +
  33 + },
  34 +
  35 + /**
  36 + * 生命周期函数--监听页面隐藏
  37 + */
  38 + onHide: function () {
  39 +
  40 + },
  41 +
  42 + /**
  43 + * 生命周期函数--监听页面卸载
  44 + */
  45 + onUnload: function () {
  46 +
  47 + },
  48 +
  49 + /**
  50 + * 页面相关事件处理函数--监听用户下拉动作
  51 + */
  52 + onPullDownRefresh: function () {
  53 +
  54 + },
  55 +
  56 + /**
  57 + * 页面上拉触底事件的处理函数
  58 + */
  59 + onReachBottom: function () {
  60 +
  61 + },
  62 +
  63 + /**
  64 + * 用户点击右上角分享
  65 + */
  66 + onShareAppMessage: function () {
  67 +
  68 + }
  69 +})
  1 +{
  2 + "navigationBarTitleText": "活动详情"
  3 +}
  1 +<!--pages/index/activity-detail/activity-detail.wxml-->
  2 +<view class="content">
  3 + <view class="head">
  4 + <view class="img_box">
  5 + <image src="../../../images/test_img.jpg" class="activity_img"></image>
  6 + </view>
  7 + <view class="title">
  8 + <view class="line"></view>
  9 + <view class="test_detail">
  10 + <text>科学队长实验室:雷电的产生!</text>
  11 + <view class="describe">云和云摩擦碰撞发出的声音是雷声产生火花是闪电。</view>
  12 + </view>
  13 + </view>
  14 + </view>
  15 +
  16 + <view class="jiexi">解析长图</view>
  17 + <view class="footer">
  18 + <view class="service" bindtap="clickAgreeBtn">
  19 + <view class="agree_box">
  20 + <view class="agree_btn" wx:if="{{is_agree}}"></view>
  21 + </view>
  22 + <text>服务协议</text>
  23 + </view>
  24 + <view class="order_btn">去预约</view>
  25 + </view>
  26 +</view>
  1 +/* pages/index/activity-detail/activity-detail.wxss */
  2 +.content {
  3 + width: 100%;
  4 + height: 100%;
  5 + display: flex;
  6 + flex-direction: column;
  7 + justify-content: space-between;
  8 +}
  9 +.head {
  10 + width: 100%;
  11 + padding: 20rpx;
  12 + -webkit-box-sizing: border-box;
  13 + -moz-box-sizing: border-box;
  14 + box-sizing: border-box;
  15 + flex: 1;
  16 +}
  17 +.img_box {
  18 + width: 100%;
  19 + height: 400rpx;
  20 +}
  21 +.activity_img {
  22 + width: 100%;
  23 + height: 100%;
  24 + border-radius: 20rpx;
  25 +}
  26 +.title {
  27 + display: flex;
  28 + justify-content: flex-start;
  29 + align-items: flex-start;
  30 + margin-top: 24rpx;
  31 + position: relative;
  32 +}
  33 +.line {
  34 + width: 6rpx;
  35 + height: 32rpx;
  36 + background-color: #3FA9F5;
  37 + margin-right: 18rpx;
  38 + position: absolute;
  39 + top: 14rpx;
  40 + left: 0;
  41 +}
  42 +.test_detail {
  43 + margin-left: 24rpx;
  44 +}
  45 +.test_detail text {
  46 + color: #464646;
  47 + font-size: 32rpx;
  48 +}
  49 +.describe {
  50 + font-size: 24rpx;
  51 +}
  52 +.jiexi {
  53 + height: 800px;
  54 +}
  55 +.footer {
  56 + width: 100%;
  57 + display: flex;
  58 + flex-direction: column;
  59 + align-items: center;
  60 + justify-content: center;
  61 + position: fixed;
  62 + bottom: 0;
  63 + left: 0;
  64 +}
  65 +.service {
  66 + width: 100%;
  67 + height: 50rpx;
  68 + background-color: #FDEFB5;
  69 + font-size: 24rpx;
  70 + color: #FC5B63;
  71 + display: flex;
  72 + align-items: center;
  73 +}
  74 +.agree_box {
  75 + width: 24rpx;
  76 + height: 24rpx;
  77 + border: 1rpx solid #FC5B63;
  78 + margin-right: 18rpx;
  79 + margin-left: 20rpx;
  80 + border-radius: 50%;
  81 + display: flex;
  82 + align-items: center;
  83 + justify-content: center;
  84 +}
  85 +.agree_btn {
  86 + width: 16rpx;
  87 + height: 16rpx;
  88 + border-radius: 50%;
  89 + background-color: #FC5B63;
  90 +}
  91 +.order_btn {
  92 + width: 100%;
  93 + height: 98rpx;
  94 + line-height: 98rpx;
  95 + background-color: #3FA9F5;
  96 + color: #ffffff;
  97 + text-align: center;
  98 + font-size: 36RPX;
  99 +}
  1 +// pages/index/confirm-appointment-info/add-student/add-student.js
  2 +const date = new Date()
  3 +const years = []
  4 +const months = []
  5 +const days = []
  6 +
  7 +for (let i = 1990; i <= date.getFullYear(); i++) {
  8 + years.push(i)
  9 +}
  10 +
  11 +for (let i = 1 ; i <= 12; i++) {
  12 + months.push(i)
  13 +}
  14 +
  15 +for (let i = 1 ; i <= 31; i++) {
  16 + days.push(i)
  17 +}
  18 +
  19 +Page({
  20 +
  21 + /**
  22 + * 页面的初始数据
  23 + */
  24 + data: {
  25 + name: '',
  26 + sex: ['男','女'],
  27 + city: ['北京市','天津市','河北省'],
  28 + years: years,
  29 + year: date.getFullYear(),
  30 + months: months,
  31 + month: 2,
  32 + days: days,
  33 + day: 2,
  34 + value: [9999, 1, 1],
  35 + },
  36 + inputName(e) {
  37 + this.setData({name: e.detail.value});
  38 + },
  39 + //选择性别
  40 + sexPickerChange: function(e) {
  41 + console.log('picker发送选择改变,携带值为', e.detail.value)
  42 + this.setData({
  43 + sex_index: e.detail.value,
  44 + is_sex_change: true,
  45 + })
  46 + },
  47 + //选择生日
  48 + birthPickerChange: function(e) {
  49 + console.log('picker发送选择改变,携带值为', e.detail.value)
  50 + this.setData({
  51 + birth_date: e.detail.value,
  52 + is_birth_change: true,
  53 + })
  54 + // const val = e.detail.value;
  55 + // this.setData({
  56 + // year: this.data.years[val[0]],
  57 + // month: this.data.months[val[1]],
  58 + // day: this.data.days[val[2]]
  59 + // })
  60 + },
  61 + //选择城市
  62 + cityPickerChange: function(e) {
  63 + console.log('picker发送选择改变,携带值为', e.detail.value)
  64 + this.setData({
  65 + city_index: e.detail.value,
  66 + is_city_change: true,
  67 + })
  68 + },
  69 + //保存
  70 + clickSave() {
  71 + if(this.data.name === '') {
  72 + wx.showToast({
  73 + title: '请填写学员姓名',
  74 + icon: 'none'
  75 + })
  76 + }else {
  77 + wx.navigateBack({delta: 1})
  78 + }
  79 + },
  80 + /**
  81 + * 生命周期函数--监听页面加载
  82 + */
  83 + onLoad: function (options) {
  84 +
  85 + },
  86 +
  87 + /**
  88 + * 生命周期函数--监听页面初次渲染完成
  89 + */
  90 + onReady: function () {
  91 +
  92 + },
  93 +
  94 + /**
  95 + * 生命周期函数--监听页面显示
  96 + */
  97 + onShow: function () {
  98 +
  99 + },
  100 +
  101 + /**
  102 + * 生命周期函数--监听页面隐藏
  103 + */
  104 + onHide: function () {
  105 +
  106 + },
  107 +
  108 + /**
  109 + * 生命周期函数--监听页面卸载
  110 + */
  111 + onUnload: function () {
  112 +
  113 + },
  114 +
  115 + /**
  116 + * 页面相关事件处理函数--监听用户下拉动作
  117 + */
  118 + onPullDownRefresh: function () {
  119 +
  120 + },
  121 +
  122 + /**
  123 + * 页面上拉触底事件的处理函数
  124 + */
  125 + onReachBottom: function () {
  126 +
  127 + },
  128 +
  129 + /**
  130 + * 用户点击右上角分享
  131 + */
  132 + onShareAppMessage: function () {
  133 +
  134 + }
  135 +})
  1 +{
  2 + "navigationBarTitleText": "添加学员"
  3 +}
  1 +<!--pages/index/confirm-appointment-info/add-student/add-student.wxml-->
  2 +<view class="content">
  3 + <view class="input-box">
  4 + <view class="name-box">
  5 + <text>姓 名:</text>
  6 + <input type="text" placeholder="张三" cursor="100" placeholder-class="placeholder-style"
  7 + value="{{name}}" bindinput="inputName"/>
  8 + </view>
  9 + <picker bindchange="sexPickerChange" value="{{sex_index}}" range="{{sex}}">
  10 + <view class="select-box">
  11 + <view class="select-picker">
  12 + <view class="sex">性 别:</view>
  13 + <view class="picker" wx:if="{{is_sex_change}}">
  14 + {{sex[sex_index]}}
  15 + </view>
  16 + <view wx:else>男</view>
  17 + </view>
  18 + <view class="iconfont icon-daosanjiao"></view>
  19 + </view>
  20 + </picker>
  21 + <picker bindchange="birthPickerChange" value="{{birth_date}}" mode="date">
  22 + <view class="select-box">
  23 + <view class="select-picker">
  24 + <view class="sex">生 日:</view>
  25 + <view class="picker" wx:if="{{is_birth_change}}">
  26 + {{birth_date}}
  27 + </view>
  28 + <view wx:else>2008-11-11</view>
  29 + </view>
  30 + <view class="iconfont icon-daosanjiao"></view>
  31 + </view>
  32 + </picker>
  33 + <picker bindchange="cityPickerChange" value="{{city_index}}" range="{{city}}">
  34 + <view class="select-box">
  35 + <view class="select-picker">
  36 + <view class="sex">城 市:</view>
  37 + <view class="picker" wx:if="{{is_city_change}}">
  38 + {{city[city_index]}}
  39 + </view>
  40 + <view wx:else>北京市</view>
  41 + </view>
  42 + <view class="iconfont icon-daosanjiao"></view>
  43 + </view>
  44 + </picker>
  45 + </view>
  46 + <view class="save-btn" bindtap="clickSave">
  47 + <view class="save-box">
  48 + <text>保 存</text>
  49 + </view>
  50 + </view>
  51 +</view>
  1 +/* pages/index/confirm-appointment-info/add-student/add-student.wxss */
  2 +.input-box {
  3 + width: 100%;
  4 + padding: 30rpx 32rpx 70rpx 32rpx;
  5 + -webkit-box-sizing: border-box;
  6 + -moz-box-sizing: border-box;
  7 + box-sizing: border-box;
  8 + display: flex;
  9 + flex-direction: column;
  10 + align-items: center;
  11 +}
  12 +.name-box {
  13 + width: 100%;
  14 + height: 88rpx;
  15 + display: flex;
  16 + align-items: center;
  17 + border-bottom: 1rpx solid #C3C3C3;
  18 + font-size: 32rpx;
  19 + color: #c3c3c3;
  20 + margin-bottom: 30rpx;
  21 +}
  22 +.name-box input {
  23 + padding: 20rpx 20rpx;
  24 +}
  25 +.placeholder-style {
  26 + color: #c3c3c3;
  27 +}
  28 +picker {
  29 + width: 100%;
  30 + height: 88rpx;
  31 + border-bottom: 1rpx solid #C3C3C3;
  32 + margin-bottom: 30rpx;
  33 +}
  34 +.select-box {
  35 + width: 100%;
  36 + line-height: 88rpx;
  37 + display: flex;
  38 + align-items: center;
  39 + justify-content: space-between;
  40 + color: #c3c3c3;
  41 + font-size: 32rpx;
  42 +}
  43 +.select-picker {
  44 + display: flex;
  45 + align-items: center;
  46 +}
  47 +.sex {
  48 + margin-right: 20rpx;
  49 +}
  50 +.icon-daosanjiao {
  51 + font-size: 26rpx;
  52 + color: #6F6F6F;
  53 +}
  54 +.save-btn {
  55 + width: 100%;
  56 + height: 80rpx;
  57 + text-align: center;
  58 + padding: 0 32rpx;
  59 + -webkit-box-sizing: border-box;
  60 + -moz-box-sizing: border-box;
  61 + box-sizing: border-box;
  62 +}
  63 +.save-box text {
  64 + color: #ffffff;
  65 + font-size: 36rpx;
  66 + line-height: 80rpx;
  67 +}
  68 +.save-box {
  69 + width: 100%;
  70 + background-color: #3FA9F5;
  71 + border-radius: 10rpx;
  72 +}
  1 +// pages/index/confirm-appointment-info/confirm-appointment-info.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 + show: false,
  9 + is_showModal: false,
  10 + is_showSuccessModal: false,
  11 + children: [{name:'张三',is_choose: true},
  12 + {name:'李思思', is_choose: false},
  13 + {name:'迪丽热巴-迪力木拉提',is_choose: false}],
  14 + is_choose: false,
  15 + },
  16 + chooseChildren(e) {
  17 + const current = e.currentTarget.dataset.index;
  18 + this.setData({
  19 + currentChild: current,
  20 + [`children[${current}].is_choose`]: !this.data.children[current].is_choose
  21 + })
  22 + },
  23 + submit() {
  24 + this.setData({is_showModal: true})
  25 + },
  26 + chooseNo(e) {
  27 + this.setData({currentBtn: e.currentTarget.dataset.index,is_showModal: false})
  28 + wx.switchTab({url: '/pages/index/index'})
  29 + },
  30 + chooseYes(e) {
  31 + this.setData({
  32 + currentBtn: e.currentTarget.dataset.index,
  33 + is_showModal: false,
  34 + is_showSuccessModal: true
  35 + })
  36 + },
  37 + modalConfirm() {
  38 + this.setData({is_showSuccessModal: false})
  39 + },
  40 + disableScroll() {},
  41 + addStudent() {
  42 + wx.navigateTo({url: './add-student/add-student'})
  43 + },
  44 + /**
  45 + * 生命周期函数--监听页面加载
  46 + */
  47 + onLoad: function (options) {
  48 +
  49 + },
  50 +
  51 + /**
  52 + * 生命周期函数--监听页面初次渲染完成
  53 + */
  54 + onReady: function () {
  55 +
  56 + },
  57 +
  58 + /**
  59 + * 生命周期函数--监听页面显示
  60 + */
  61 + onShow: function () {
  62 + const self = this;
  63 + setTimeout(function () {
  64 + self.setData({show: true})
  65 + },500)
  66 + },
  67 +
  68 + /**
  69 + * 生命周期函数--监听页面隐藏
  70 + */
  71 + onHide: function () {
  72 +
  73 + },
  74 +
  75 + /**
  76 + * 生命周期函数--监听页面卸载
  77 + */
  78 + onUnload: function () {
  79 +
  80 + },
  81 +
  82 + /**
  83 + * 页面相关事件处理函数--监听用户下拉动作
  84 + */
  85 + onPullDownRefresh: function () {
  86 +
  87 + },
  88 +
  89 + /**
  90 + * 页面上拉触底事件的处理函数
  91 + */
  92 + onReachBottom: function () {
  93 +
  94 + },
  95 +
  96 + /**
  97 + * 用户点击右上角分享
  98 + */
  99 + onShareAppMessage: function () {
  100 +
  101 + }
  102 +})
  1 +{
  2 + "navigationBarTitleText": "确认预约信息"
  3 +}
  1 +<!--pages/index/confirm-appointment-info/confirm-appointment-info.wxml-->
  2 +<view class="content">
  3 + <view class="tips {{show?'active':''}}">
  4 + <!--<view>-->
  5 + <view class="iconfont icon-jinggao"></view>
  6 + <text>请在15分钟内确认预约,超时系统将自动取消!</text>
  7 + <!--</view>-->
  8 + </view>
  9 + <view class="time">
  10 + <view class="line"></view>
  11 + <text>预约时间 : </text>
  12 + <text class="date-time">2018年10月10号 10:00-11:30</text>
  13 + </view>
  14 +
  15 + <view class="address">
  16 + <view class="time">
  17 + <view class="line"></view>
  18 + <text>预约地址 :</text>
  19 + </view>
  20 + <view class="address-detail">
  21 + <!--<text>-->
  22 + 朝阳区万寿路5号楼马兰大厦B座301念读书馆内朝阳区读书馆内朝阳区万寿路5号楼马兰大厦B座301念读书万寿路5号楼马兰大厦B座301念读书
  23 + <!--</text>-->
  24 + </view>
  25 + </view>
  26 + <view class="phone-num">
  27 + <view class="line"></view>
  28 + <text>预约电话 :</text>
  29 + <text class="phone">188****8888</text>
  30 + </view>
  31 + <view class="children-name">
  32 + <view class="left-name">
  33 + <view class="line"></view>
  34 + <text>学员姓名</text>
  35 + </view>
  36 + <image src="../../../images/add_btn.png" bindtap="addStudent"></image>
  37 + </view>
  38 + <view class="name-box">
  39 + <view class="check-box" wx:for="{{children}}" wx:key="index" bindtap="chooseChildren"
  40 + data-index="{{index}}">
  41 + <view class="name {{item.is_choose?'change-color':''}}">{{item.name}}</view>
  42 + <image src="../../../images/choose_icon.png" wx:if="{{item.is_choose}}" class="check-icon"></image>
  43 + </view>
  44 + </view>
  45 +
  46 + <view class="footer">
  47 + <view class="confirm_btn" bindtap="submit">
  48 + <text>确认预约</text>
  49 + </view>
  50 + </view>
  51 + <!--是否购买畅玩卡弹窗-->
  52 + <view class="modal_box" wx:if="{{is_showModal}}" catchtouchmove="disableScroll">
  53 + <view class="background"
  54 + bindtap="handleBackground"
  55 + wx:if="{{is_showModal}}"
  56 + catchtouchmove="disableScroll">
  57 + </view>
  58 + <view class="modalBackground Augly-bouncein">
  59 + <view class="modal">
  60 + <view class="tips-word">当前学员还没有购买/兑换畅玩卡,暂不能预约实验活动,是否马上购买/兑换?</view>
  61 + <view class="yes-no-btn">
  62 + <text bindtap="chooseNo" class="{{currentBtn == 0?'change-color':''}}" data-index="{{0}}">否</text>
  63 + <text bindtap="chooseYes" class="{{currentBtn == 1?'change-color':''}}" data-index="{{1}}">是</text>
  64 + </view>
  65 + </view>
  66 + </view>
  67 + </view>
  68 + <!--预约成功弹窗-->
  69 + <view class="modal_box" wx:if="{{is_showSuccessModal}}" catchtouchmove="disableScroll">
  70 + <view class="background"
  71 + bindtap="handleBackground"
  72 + wx:if="{{is_showSuccessModal}}"
  73 + catchtouchmove="disableScroll">
  74 + </view>
  75 + <view class="modalBackground Augly-bouncein">
  76 + <view class="success-modal">
  77 + <image src="../../../images/success.jpg"></image>
  78 + <view class="congratulations">恭喜您</view>
  79 + <view class="appointment-success">您已经预约成功!</view>
  80 + <view class="confirm-btn" bindtap="modalConfirm">确定</view>
  81 + </view>
  82 + </view>
  83 + </view>
  84 +</view>
  1 +/* pages/index/confirm-appointment-info/confirm-appointment-info.wxss */
  2 +page {
  3 + background-color: #f2f2f2;
  4 +}
  5 +.content {
  6 + width: 100%;
  7 + display: flex;
  8 + flex-direction: column;
  9 +}
  10 +.tips {
  11 + width: 100%;
  12 + height: 50rpx;
  13 + display: flex;
  14 + align-items: center;
  15 + justify-content: center;
  16 + line-height: 50rpx;
  17 + background-color: #FFFC5A63;
  18 + position: absolute;
  19 + top: -50rpx;
  20 + left: 0;
  21 + z-index: 3;
  22 +}
  23 +.active {
  24 + position: absolute;
  25 + top: 0rpx;
  26 + left: 0;
  27 + transition: top 1s;
  28 +}
  29 +.icon-jinggao {
  30 + font-size: 24rpx;
  31 + margin-right: 10rpx;
  32 + color: #FC5A63;
  33 +}
  34 +.tips text {
  35 + color: #FC5A63;
  36 + font-size: 24rpx;
  37 +}
  38 +.time, .phone-num, .children-name {
  39 + width: 100%;
  40 + height: 94rpx;
  41 + margin-top: 20rpx;
  42 + background-color: #fff;
  43 + display: flex;
  44 + align-items: center;
  45 + padding: 0 32rpx;
  46 + -webkit-box-sizing: border-box;
  47 + -moz-box-sizing: border-box;
  48 + box-sizing: border-box;
  49 +}
  50 +.line {
  51 + width: 6rpx;
  52 + height: 32rpx;
  53 + background-color: #3FA9F5;
  54 + margin-right: 16rpx;
  55 +}
  56 +.time text, .phone-num text, .children-name text {
  57 + color: #464646;
  58 + font-size: 32rpx;
  59 + /*line-height: ;*/
  60 +}
  61 +.time .date-time, .phone-num .phone {
  62 + color:#A3A3A3;
  63 + margin-left: 26rpx;
  64 +}
  65 +.address {
  66 + width: 100%;
  67 + color: #A3A3A3;
  68 + font-size: 28rpx;
  69 + display: flex;
  70 + flex-direction: column;
  71 + align-items: center;
  72 +
  73 +}
  74 +.address-detail {
  75 + padding: 0 40rpx 50rpx 50rpx;
  76 + -webkit-box-sizing: border-box;
  77 + -moz-box-sizing: border-box;
  78 + box-sizing: border-box;
  79 + background: #ffffff;
  80 +}
  81 +.address-detail text {
  82 + overflow : hidden;
  83 + display: -webkit-box;
  84 + -webkit-line-clamp: 3;
  85 + -webkit-box-orient: vertical;
  86 +}
  87 +.children-name {
  88 + justify-content: space-between;
  89 +}
  90 +.left-name {
  91 + display: flex;
  92 + align-items: center;
  93 +}
  94 +.children-name image{
  95 + width: 144rpx;
  96 + height: 34rpx;
  97 +}
  98 +.name-box {
  99 + width: 100%;
  100 + padding: 20rpx 40rpx 50rpx 50rpx;
  101 + -webkit-box-sizing: border-box;
  102 + -moz-box-sizing: border-box;
  103 + box-sizing: border-box;
  104 + color: #A3A3A3;
  105 + font-size: 28rpx;
  106 + background-color: #fff;
  107 + display: flex;
  108 + flex-direction: column;
  109 +}
  110 +.name-box view {
  111 + /*margin-bottom: 42rpx;*/
  112 +}
  113 +.check-box {
  114 + width: 50%;
  115 + display: flex;
  116 + justify-content: space-between;
  117 + margin-bottom: 42rpx;
  118 +}
  119 +.check-icon {
  120 + width: 30rpx;
  121 + height: 24rpx;
  122 +}
  123 +.footer {
  124 + width: 100%;
  125 + position: fixed;
  126 + bottom: 0;
  127 + left: 0;
  128 +}
  129 +.confirm_btn {
  130 + width: 100%;
  131 + height: 98rpx;
  132 + background-color: #3FA9F5;
  133 + text-align: center;
  134 +}
  135 +.confirm_btn text {
  136 + color: #ffffff;
  137 + line-height: 98rpx;
  138 + font-size: 36rpx;
  139 +}.modal_box {
  140 + width: 100%;
  141 + height: 100%;
  142 + position: fixed;
  143 + top: 0;
  144 + left: 0;
  145 + z-index: 999;
  146 + }
  147 +.background {
  148 + width: 100%;
  149 + height: 100%;
  150 + background: rgba(0,0,0,0.3);
  151 + position: absolute;
  152 + top: 0;
  153 + left: 0;
  154 + z-index: 999;
  155 +}
  156 +.modalBackground {
  157 + width: 100%;
  158 + height: 100%;
  159 + position: absolute;
  160 + top: 0;
  161 + left: 0;
  162 + z-index: 999;
  163 + display: -webkit-box;
  164 + display: -ms-flexbox;
  165 + display: flex;
  166 + align-items: center;
  167 + justify-content: center;
  168 + color: #666666;
  169 +}
  170 +.modal {
  171 + width: 500rpx;
  172 + height: 260rpx;
  173 + /* height: 1100rpx; */
  174 + background: #ffffff;
  175 + border-radius: 10rpx;
  176 + box-sizing: border-box;
  177 + /*padding: 70rpx 0 0 0;*/
  178 + overflow: hidden;
  179 + position: relative;
  180 +}
  181 +.success-modal {
  182 + width: 400rpx;
  183 + height: 450rpx;
  184 + display: flex;
  185 + flex-direction: column;
  186 + align-items: center;
  187 + justify-content: center;
  188 + background: #ffffff;
  189 + border-radius: 22rpx;
  190 +}
  191 +.success-modal image {
  192 + width: 236rpx;
  193 + height: 170rpx;
  194 +}
  195 +.congratulations {
  196 + font-size: 28rpx;
  197 + color: #3FA9F5;
  198 + margin-bottom: 14rpx;
  199 +}
  200 +.appointment-success {
  201 + font-size: 24rpx;
  202 + margin-bottom: 60rpx;
  203 +}
  204 +.confirm-btn {
  205 + width: 80%;
  206 + height: 54rpx;
  207 + line-height: 54rpx;
  208 + border-radius: 30rpx;
  209 + text-align: center;
  210 + color: #ffffff;
  211 + font-size: 30rpx;
  212 + background-color: #3FA9F5;
  213 +}
  214 +.tips-word {
  215 + font-size: 26rpx;
  216 + width: 100%;
  217 + padding: 30rpx 40rpx 30rpx 50rpx;
  218 + -webkit-box-sizing: border-box;
  219 + -moz-box-sizing: border-box;
  220 + box-sizing: border-box;
  221 + border-bottom: 1rpx solid #d3d3d3;
  222 + line-height: 38rpx;
  223 +}
  224 +.yes-no-btn {
  225 + width: 100%;
  226 + height: 84rpx;
  227 + display: flex;
  228 + align-items: center;
  229 + font-size: 30rpx;
  230 +}
  231 +.yes-no-btn text {
  232 + width: 50%;
  233 + text-align: center;
  234 + line-height: 68rpx;
  235 +}
  236 +.yes-no-btn text:nth-child(1) {
  237 + border-right: 1rpx solid #d3d3d3;
  238 +}
  239 +.change-color {
  240 + color: #3FA9F5;
  241 +}
  1 +// pages/index/go-appointment/go-appointment.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 + array: ['北京市', '天津市', '上海市', '河北省'],
  9 + currentCity: '北京市',
  10 + is_change: false,
  11 + show_submit_btn: false,
  12 + areaTest: [
  13 + {area: '朝阳区', list: [{id: 1,name: '798实验室'},{id: 2,name:'木鱼湖实验室'},{id: 3,name:'南锣鼓巷实验室'}]},
  14 + {area: '东城区', list: [{id: 4,name: '798实验室'},{id: 5,name:'木鱼湖实验室'},{id: 6,name:'南锣鼓巷实验室'}]},
  15 + {area: '西城区', list: [{id: 7,name: '798实验室'},{id: 11,name:'木鱼湖实验室'},{id: 8,name:'南锣鼓巷实验室'}]},
  16 + {area: '昌平区', list: [{id: 9,name: '798实验室'},{id: 12,name:'木鱼湖实验室'},{id: 10,name:'南锣鼓巷实验室'}]},
  17 + ],
  18 + test: {title: '798实验室,本实验室分为三个阶段,第一阶段由家长和孩子共同完成,第二阶段由孩子独立完成。家长在旁边指导,第三阶段巴拉巴拉',
  19 + list:[{week:'周六',date: '10月20日',time:'10:00 — 11:30',rest: 6},
  20 + {week:'周日',date: '10月21日',time:'15:00 — 16:30',rest: 0},
  21 + {week:'周日',date: '10月21日',time:'15:00 — 16:30',rest: 6},
  22 + {week:'周日',date: '10月21日',time:'15:00 — 16:30',rest: 0},
  23 + // {week:'周日',date: '10月21日',time:'15:00 — 16:30',rest: 6},
  24 + // {week:'周日',date: '10月21日',time:'15:00 — 16:30',rest: 6},
  25 + // {week:'周日',date: '10月21日',time:'15:00 — 16:30',rest: 6},
  26 + // {week:'周日',date: '10月21日',time:'15:00 — 16:30',rest: 6},
  27 + // {week:'周日',date: '10月21日',time:'15:00 — 16:30',rest: 6},
  28 + // {week:'周日',date: '10月21日',time:'15:00 — 16:30',rest: 6},
  29 + // {week:'周日',date: '10月21日',time:'15:00 — 16:30',rest: 6},
  30 + // {week:'周六',date: '10月20日',time:'10:00 — 11:30',rest: 6}
  31 + ]},
  32 + },
  33 + //选择城市
  34 + bindPickerChange: function(e) {
  35 + console.log('picker发送选择改变,携带值为', e.detail.value)
  36 + this.setData({
  37 + index: e.detail.value,
  38 + is_change: true,
  39 + })
  40 + },
  41 + //选择实验室
  42 + chooseTest(e) {
  43 + console.log(e.currentTarget.dataset.index);
  44 + const current = e.currentTarget.dataset.index;
  45 + const current_id = e.currentTarget.dataset.id;
  46 + this.setData({currentTest: current,currentId: current_id})
  47 + },
  48 + //选择时段
  49 + chooseTime(e) {
  50 + console.log(e.currentTarget.dataset.index);
  51 + const current = e.currentTarget.dataset.index;
  52 + this.setData({currentTime: current})
  53 + },
  54 + //点击单人预约
  55 + singleAppointment() {
  56 + this.setData({show_submit_btn: true})
  57 + },
  58 + //点击双人预约
  59 + doubleAppointment() {
  60 + this.setData({show_submit_btn: true})
  61 + },
  62 + submit() {
  63 + wx.navigateTo({url: '/pages/index/confirm-appointment-info/confirm-appointment-info'})
  64 + },
  65 + /**
  66 + * 生命周期函数--监听页面加载
  67 + */
  68 + onLoad: function (options) {
  69 + this.data.areaTest.forEach((v,i)=>{
  70 + Object.keys(v).forEach(v=>{
  71 + console.log(v)//取到了key
  72 + console.log(this.data.areaTest[i][v])//取到了值
  73 + })
  74 + })
  75 + // console.log(this.data.areaTest);
  76 + },
  77 +
  78 + /**
  79 + * 生命周期函数--监听页面初次渲染完成
  80 + */
  81 + onReady: function () {
  82 +
  83 + },
  84 +
  85 + /**
  86 + * 生命周期函数--监听页面显示
  87 + */
  88 + onShow: function () {
  89 +
  90 + },
  91 +
  92 + /**
  93 + * 生命周期函数--监听页面隐藏
  94 + */
  95 + onHide: function () {
  96 +
  97 + },
  98 +
  99 + /**
  100 + * 生命周期函数--监听页面卸载
  101 + */
  102 + onUnload: function () {
  103 +
  104 + },
  105 +
  106 + /**
  107 + * 页面相关事件处理函数--监听用户下拉动作
  108 + */
  109 + onPullDownRefresh: function () {
  110 +
  111 + },
  112 +
  113 + /**
  114 + * 页面上拉触底事件的处理函数
  115 + */
  116 + onReachBottom: function () {
  117 +
  118 + },
  119 +
  120 + /**
  121 + * 用户点击右上角分享
  122 + */
  123 + onShareAppMessage: function () {
  124 +
  125 + }
  126 +})
  1 +{
  2 + "navigationBarTitleText": "选择场次",
  3 + "disableScroll": true
  4 +}
  1 +<!--pages/index/go-appointment/go-appointment.wxml-->
  2 +<view class="content">
  3 + <view class="city_box">
  4 + <picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}">
  5 + <view class="select">
  6 + <view class="picker" wx:if="{{is_change}}">
  7 + {{array[index]}}
  8 + </view>
  9 + <view wx:else>北京市</view>
  10 + <view class="iconfont icon-daosanjiao"></view>
  11 + </view>
  12 + </picker>
  13 + </view>
  14 +
  15 + <view class="section">
  16 + <scroll-view class="area_box" scroll-y>
  17 + <block wx:for="{{areaTest}}" wx:key="index">
  18 + <view class="area-test">
  19 + <view class="area">{{item.area}}</view>
  20 + <view class="test-list">
  21 + <view class="list-item-box">
  22 + <block wx:for="{{item.list}}" wx:key="index">
  23 + <view class="list-item" bindtap="chooseTest" data-index="{{index}}"
  24 + data-id="{{item.id}}">
  25 + <image src="../../../images/blue_line.png" wx:if="{{currentId === item.id}}"
  26 + class="blue-line"></image>
  27 + <view class="test {{currentId === item.id?'change-color':''}}">{{item.name}}</view>
  28 + </view>
  29 + </block>
  30 + </view>
  31 + </view>
  32 + </view>
  33 + </block>
  34 + </scroll-view>
  35 +
  36 + <view class="test_box">
  37 + <scroll-view scroll-y class="test_describe">
  38 + {{test.title}}
  39 + </scroll-view>
  40 + <scroll-view class="time-list-box" scroll-y>
  41 + <view wx:for="{{test.list}}" wx:key="index" class="time-list" bindtap="chooseTime" data-index="{{index}}">
  42 + <image src="../../../images/blue_line.png" wx:if="{{currentTime === index && item.rest !== 0}}"
  43 + class="blue-line"></image>
  44 + <view class="right-content {{item.rest === 0? 'change-gray':''}}">
  45 + <view class="{{currentTime === index && item.rest !== 0? 'change-color':''}}">{{item.week}} {{item.date}}</view>
  46 + <view class="bottom-time-box">
  47 + <text class="time {{currentTime === index && item.rest !== 0? 'change-color':''}}">{{item.time}}</text>
  48 + <text class="rest {{item.rest === 0? 'change-gray':''}}">剩余: {{item.rest}}</text>
  49 + </view>
  50 + </view>
  51 + </view>
  52 + </scroll-view>
  53 + </view>
  54 + </view>
  55 +
  56 + <view class="footer">
  57 + <view class="confirm_btn" bindtap="submit" wx:if="{{show_submit_btn}}">
  58 + <text>提 交</text>
  59 + </view>
  60 + <view class="appointment-box" wx:else>
  61 + <text class="single" bindtap="singleAppointment">单人预约</text>
  62 + <text class="double" bindtap="doubleAppointment">双人预约</text>
  63 + </view>
  64 + <!--<view>提 交</view>-->
  65 + </view>
  66 +</view>
  1 +/* pages/index/go-appointment/go-appointment.wxss */
  2 +page {
  3 + background-color: #f2f2f2;
  4 +}
  5 +.city_box {
  6 + width: 100%;
  7 + /*display: flex;*/
  8 + /*align-items: center;*/
  9 + /*justify-content: center;*/
  10 + /* height: 98rpx; */
  11 + color: #393939;
  12 + font-size: 32rpx;
  13 + position: fixed;
  14 + top: 0;
  15 + left: 0;
  16 + background-color: #fff;
  17 +}
  18 +.select {
  19 + width: 100%;
  20 + height: 98rpx;
  21 + display: flex;
  22 + align-items: center;
  23 + justify-content: center;
  24 +}
  25 +picker {
  26 + width: 100%;
  27 + display: flex;
  28 + align-items: center;
  29 + justify-content: center;
  30 +}
  31 +.icon-daosanjiao {
  32 + font-size: 26rpx;
  33 + color: #6F6F6F;
  34 + margin-left: 24rpx;
  35 +}
  36 +.section {
  37 + margin-top: 118rpx;
  38 + display: flex;
  39 +}
  40 +.area_box {
  41 + width: 270rpx;
  42 + height: 900rpx;
  43 + background-color: #fff;
  44 +}
  45 +.area-test {
  46 + display: flex;
  47 + flex-direction: column;
  48 + align-items: center;
  49 + justify-content: center;
  50 +}
  51 +.area {
  52 + width: 100%;
  53 + height: 60rpx;
  54 + line-height: 60rpx;
  55 + background-color: #D5F0FF;
  56 + font-size: 32rpx;
  57 + color: #000000;
  58 + text-align: center;
  59 +}
  60 +.test-list {
  61 + width: 100%;
  62 + /* padding: 0 24rpx; */
  63 + -webkit-box-sizing: border-box;
  64 + -moz-box-sizing: border-box;
  65 + box-sizing: border-box;
  66 +}
  67 +/*.test-list .test:last-child{*/
  68 + /*border: none;*/
  69 +/*}*/
  70 +.list-item-box {
  71 + display: flex;
  72 + align-items: center;
  73 + padding:0 24rpx;
  74 + flex-direction: column;
  75 +}
  76 +.list-item {
  77 + width: 100%;
  78 + border-bottom: 1rpx solid #DEDEDE;
  79 + display: flex;
  80 + position: relative;
  81 +}
  82 +.list-item-box .list-item:last-child {
  83 + border: none;
  84 +}
  85 +.reduce-padding {
  86 + padding: 0 24rpx 0 0;
  87 +}
  88 +.list-item .blue-line {
  89 + width: 10rpx;
  90 + height: 100rpx;
  91 + margin-right: 12rpx;
  92 + position: absolute;
  93 + top:0;
  94 + left: -22rpx;
  95 +}
  96 +.test {
  97 + width: 100%;
  98 + height: 100rpx;
  99 + line-height: 100rpx;
  100 + color: #6F6F6F;
  101 + font-size: 28rpx;
  102 + /*border-bottom: 1rpx solid #DEDEDE;*/
  103 +}
  104 +.change-color {
  105 + color:#006BF1;
  106 +}
  107 +.test_box {
  108 + flex: 1;
  109 + margin-left: 20rpx;
  110 +}
  111 +.test_describe {
  112 + width: 100%;
  113 + height: 200rpx;
  114 + background-color: #fff;
  115 + margin-bottom: 20rpx;
  116 + padding: 38rpx 20rpx;
  117 + -webkit-box-sizing: border-box;
  118 + -moz-box-sizing: border-box;
  119 + box-sizing: border-box;
  120 + color: #6F6F6F;
  121 + font-size: 28rpx;
  122 +}
  123 +.time-list-box {
  124 + width: 100%;
  125 + margin-bottom: 10rpx;
  126 + height: 680rpx;
  127 +}
  128 +.time-list {
  129 + width: 100%;
  130 + height: 140rpx;
  131 + background-color: #fff;
  132 + margin-bottom: 10rpx;
  133 + padding: 30rpx 40rpx;
  134 + color: #6F6F6F;
  135 + font-size: 28rpx;
  136 + -webkit-box-sizing: border-box;
  137 + -moz-box-sizing: border-box;
  138 + box-sizing: border-box;
  139 + display: flex;
  140 + justify-content: space-between;
  141 + position: relative;
  142 +}
  143 +.time-list .blue-line {
  144 + width: 10rpx;
  145 + height: 100rpx;
  146 + margin-right: 12rpx;
  147 + position: absolute;
  148 + top: 20rpx;
  149 + left: 0rpx;
  150 +}
  151 +.right-content {
  152 + width: 100%;
  153 + display: flex;
  154 + flex-direction: column;
  155 + justify-content: space-between;
  156 +}
  157 +.bottom-time-box {
  158 + width: 100%;
  159 + display: flex;
  160 + justify-content: space-between;
  161 + align-items: center;
  162 +}
  163 +.time {
  164 + font-size: 24rpx;
  165 +}
  166 +.rest {
  167 + font-size: 24rpx;
  168 + color: #FC5B63;
  169 +}
  170 +.change-gray {
  171 + color: #C3C3C3;
  172 +}
  173 +.confirm_box {
  174 + width: 100%;
  175 + padding: 0 32rpx;
  176 + -webkit-box-sizing: border-box;
  177 + -moz-box-sizing: border-box;
  178 + box-sizing: border-box;
  179 +}
  180 +.confirm_btn {
  181 + width: 100%;
  182 + height: 98rpx;
  183 + background-color: #3FA9F5;
  184 + text-align: center;
  185 +}
  186 +.confirm_btn text {
  187 + color: #ffffff;
  188 + line-height: 98rpx;
  189 + font-size: 36rpx;
  190 +}
  191 +.appointment-box {
  192 + width: 100%;
  193 + height: 98rpx;
  194 + display: flex;
  195 + align-items: center;
  196 + color: #ffffff;
  197 +}
  198 +.appointment-box text {
  199 + width: 50%;
  200 + text-align: center;
  201 + font-size: 36rpx;
  202 + line-height: 98rpx;
  203 +}
  204 +.single {
  205 + background: -webkit-linear-gradient(left, RGBA(255, 179, 4, 1), RGBA(251, 150, 0, 1)); /* Safari 5.1 - 6.0 */
  206 + background: -o-linear-gradient(right, RGBA(255, 179, 4, 1), RGBA(251, 150, 0, 1)); /* Opera 11.1 - 12.0 */
  207 + background: -moz-linear-gradient(right, RGBA(255, 179, 4, 1), RGBA(251, 150, 0, 1)); /* Firefox 3.6 - 15 */
  208 + background: linear-gradient(to right, RGBA(255, 179, 4, 1), RGBA(251, 150, 0, 1)); /* 标准的语法 */
  209 +}
  210 +.double {
  211 + background: -webkit-linear-gradient(left, RGBA(252, 116, 0, 1), RGBA(255, 83, 2, 1)); /* Safari 5.1 - 6.0 */
  212 + background: -o-linear-gradient(right, RGBA(252, 116, 0, 1), RGBA(255, 83, 2, 1)); /* Opera 11.1 - 12.0 */
  213 + background: -moz-linear-gradient(right, RGBA(252, 116, 0, 1), RGBA(255, 83, 2, 1)); /* Firefox 3.6 - 15 */
  214 + background: linear-gradient(to right, RGBA(252, 116, 0, 1), RGBA(255, 83, 2, 1)); /* 标准的语法 */
  215 +}
  216 +.footer {
  217 + width: 100%;
  218 + position: fixed;
  219 + bottom: 0;
  220 + left: 0;
  221 +}
  1 +//index.js
  2 +//获取应用实例
  3 +const app = getApp()
  4 +
  5 +Page({
  6 + data: {
  7 + hasPhone: true,
  8 + imgUrls:[
  9 + {'url': '../../images/banner.jpg'},
  10 + {'url': '../../images/banner.jpg'},
  11 + {'url': '../../images/banner.jpg'},],
  12 + autoplay: true, //是否自动轮播
  13 + interval: 2000, //间隔时间
  14 + duration: 500, //滑动时间
  15 + this_week_test_info: {
  16 + info: [
  17 + {time: '11月01号-11月07号',url: '../../images/test_img.jpg',},
  18 + {time: '11月08号-11月14号',url: '../../images/test_img.jpg'},
  19 + ],
  20 + is_this_week: true,
  21 + ordered: false,
  22 + is_past: false,
  23 + },
  24 + past_test_info: {
  25 + info: [
  26 + {time: '10月01号-10月07号',url: '../../images/test_img.jpg',},
  27 + {time: '10月08号-10月14号',url: '../../images/test_img.jpg'},
  28 + {time: '10月15号-10月21号',url: '../../images/test_img.jpg'},
  29 + ],
  30 + is_this_week: false,
  31 + ordered: false,
  32 + is_past: true,
  33 + },
  34 + },
  35 + swiperChange: function (e) { //切换轮播图
  36 + this.setData({
  37 + currentSwiper: e.detail.current
  38 + })
  39 + },
  40 + goPhoneCode() {
  41 + wx.navigateTo({url: '/pages/index/phone-code/phone-code'})
  42 + },
  43 + //点击购买畅玩卡
  44 + goBuyCard() {
  45 + wx.navigateTo({url: './activity-detail/activity-detail'})
  46 + },
  47 + //点击进入活动详情
  48 + goTestDetail(e) {
  49 + // console.log(e);
  50 + const current = e.currentTarget.dataset.index;
  51 + wx.navigateTo({url: './activity-detail/activity-detail'})
  52 + },
  53 + //前往预约
  54 + goAppointment (e) {
  55 + const current = e.currentTarget.dataset.index;
  56 + wx.navigateTo({url: './go-appointment/go-appointment'})
  57 + },
  58 + onLoad: function () {
  59 + if (app.globalData.userInfo) {
  60 + this.setData({
  61 + userInfo: app.globalData.userInfo,
  62 + hasUserInfo: true
  63 + })
  64 + } else if (this.data.canIUse){
  65 + // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
  66 + // 所以此处加入 callback 以防止这种情况
  67 + app.userInfoReadyCallback = res => {
  68 + this.setData({
  69 + userInfo: res.userInfo,
  70 + hasUserInfo: true
  71 + })
  72 + }
  73 + } else {
  74 + // 在没有 open-type=getUserInfo 版本的兼容处理
  75 + wx.getUserInfo({
  76 + success: res => {
  77 + app.globalData.userInfo = res.userInfo
  78 + this.setData({
  79 + userInfo: res.userInfo,
  80 + hasUserInfo: true
  81 + })
  82 + }
  83 + })
  84 + }
  85 + },
  86 + getUserInfo: function(e) {
  87 + console.log(e)
  88 + app.globalData.userInfo = e.detail.userInfo
  89 + this.setData({
  90 + userInfo: e.detail.userInfo,
  91 + hasUserInfo: true
  92 + })
  93 + }
  94 +})
  1 +<!--index.wxml-->
  2 +<view class="container">
  3 + <!--蒙层-->
  4 + <view class="modal" wx:if="{{!hasPhone}}" bindtap="goPhoneCode"></view>
  5 +
  6 + <!--轮播图-->
  7 + <view class="wrap">
  8 + <swiper autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}" circular="true"
  9 + bindchange="swiperChange">
  10 + <block wx:for="{{imgUrls}}" wx:key="index">
  11 + <swiper-item>
  12 + <navigator url="{{item.url}}" hover-class="navigator-hover">
  13 + <view class="index_top">
  14 + <image src="{{item.url}}" class="slide-image" mode="aspectFill"/>
  15 + </view>
  16 + </navigator>
  17 + </swiper-item>
  18 + </block>
  19 + </swiper>
  20 + <view class="dots">
  21 + <block wx:for="{{ imgUrls}}" wx:key>
  22 + <view class="dot{{index == currentSwiper ? ' active' : ''}}"></view>
  23 + </block>
  24 + </view>
  25 + </view>
  26 +
  27 + <!--购买-->
  28 + <view class="btn-box" bindtap="goBuyCard">
  29 + <view class="buy-btn">
  30 + <text>点击图片可跳转到购买页</text>
  31 + </view>
  32 + </view>
  33 +
  34 + <!--实验列表-->
  35 + <import src="/templates/templates.wxml" />
  36 + <view class="past_template">
  37 + <template is="experiment" data="{{...this_week_test_info}}"></template>
  38 + <template is="experiment" data="{{...past_test_info}}"></template>
  39 + </view>
  40 +</view>
  1 +/**index.wxss**/
  2 +@import "../../templates/templates.wxss";
  3 +
  4 +page {
  5 + background-color: #f2f2f2;
  6 +}
  7 +.container {
  8 + position: relative;
  9 +}
  10 +.modal {
  11 + width: 100%;
  12 + height: 100%;
  13 + position: absolute;
  14 + left: 0;
  15 + top: 0;
  16 + background-color: #000000;
  17 + opacity: 0;
  18 + z-index: 10;
  19 +}
  20 +
  21 +.wrap {
  22 + height: auto;
  23 + position: relative;
  24 +}
  25 +
  26 +swiper {
  27 + display: block;
  28 + height: 450rpx;
  29 +}
  30 +
  31 +/*用来包裹所有的小圆点 */
  32 +
  33 +.dots {
  34 + width: 156rpx;
  35 + height: 36rpx;
  36 + display: flex;
  37 + flex-direction: row;
  38 + position: absolute;
  39 + left: 320rpx;
  40 + bottom: 20rpx;
  41 + z-index: 10;
  42 +}
  43 +
  44 +/*未选中时的小圆点样式 */
  45 +
  46 +.dot {
  47 + width: 16rpx;
  48 + height: 16rpx;
  49 + border-radius: 50%;
  50 + margin-right: 26rpx;
  51 + background-color: white;
  52 + opacity: 0.6;
  53 +}
  54 +
  55 +/*选中以后的小圆点样式 */
  56 +
  57 +.active {
  58 + width: 30rpx;
  59 + height: 16rpx;
  60 + border-radius: 8rpx;
  61 + opacity: 1;
  62 +}
  63 +
  64 +.index_top {
  65 + width: 100%;
  66 + height: 450rpx;
  67 + overflow: hidden;
  68 +}
  69 +
  70 +.index_top image {
  71 + width: 100%;
  72 + height: 100%;
  73 +}
  74 +
  75 +.btn-box {
  76 + padding: 22rpx 20rpx;
  77 + box-sizing: border-box;
  78 + background: #f2f2f2;
  79 +}
  80 +
  81 +.buy-btn {
  82 + width: 100%;
  83 + height: 150rpx;
  84 + /*padding: 22rpx 20rpx;*/
  85 + /*margin-top: 22rpx;*/
  86 + /*margin-bottom: 22rpx;*/
  87 + /*margin-left: 20rpx;*/
  88 + /*margin-right: 20rpx;*/
  89 + box-sizing: border-box;
  90 + background: #5AB7F9;
  91 + border-radius: 20rpx;
  92 + display: flex;
  93 + align-items: center;
  94 + justify-content: center;
  95 +}
  96 +.buy-btn text {
  97 + color: #ffffff;
  98 + font-size: 24rpx;
  99 +}
  100 +.experiment_box:nth-child(2) {
  101 + margin-bottom: 0;
  102 +}
  1 +// pages/index/phone-code/phone-code.js
  2 +var interval = null //倒计时函数
  3 +Page({
  4 +
  5 + /**
  6 + * 页面的初始数据
  7 + */
  8 + data: {
  9 + fun_id: 2,
  10 + time: '获取验证码', //倒计时
  11 + currentTime: 61
  12 + },
  13 + getCode: function (options) {
  14 + var that = this;
  15 + var currentTime = that.data.currentTime;
  16 + interval = setInterval(function () {
  17 + currentTime--;
  18 + that.setData({
  19 + time: currentTime + '秒'
  20 + })
  21 + if (currentTime <= 0) {
  22 + clearInterval(interval);
  23 + that.setData({
  24 + time: '重新发送',
  25 + currentTime: 61,
  26 + disabled: false
  27 + })
  28 + }
  29 + }, 1000)
  30 + },
  31 + getVerificationCode() {
  32 + this.getCode();
  33 + var that = this;
  34 + that.setData({
  35 + disabled: true
  36 + })
  37 + },
  38 + /**
  39 + * 生命周期函数--监听页面加载
  40 + */
  41 + onLoad: function (options) {
  42 +
  43 + },
  44 +
  45 + /**
  46 + * 生命周期函数--监听页面初次渲染完成
  47 + */
  48 + onReady: function () {
  49 +
  50 + },
  51 +
  52 + /**
  53 + * 生命周期函数--监听页面显示
  54 + */
  55 + onShow: function () {
  56 +
  57 + },
  58 +
  59 + /**
  60 + * 生命周期函数--监听页面隐藏
  61 + */
  62 + onHide: function () {
  63 +
  64 + },
  65 +
  66 + /**
  67 + * 生命周期函数--监听页面卸载
  68 + */
  69 + onUnload: function () {
  70 +
  71 + },
  72 +
  73 + /**
  74 + * 页面相关事件处理函数--监听用户下拉动作
  75 + */
  76 + onPullDownRefresh: function () {
  77 +
  78 + },
  79 +
  80 + /**
  81 + * 页面上拉触底事件的处理函数
  82 + */
  83 + onReachBottom: function () {
  84 +
  85 + },
  86 +
  87 + /**
  88 + * 用户点击右上角分享
  89 + */
  90 + onShareAppMessage: function () {
  91 +
  92 + }
  93 +})
  1 +{
  2 + "navigationBarTitleText": "手机认证"
  3 +}
  1 +<!--pages/index/phone-code/phone-code.wxml-->
  2 +<view class="content_box">
  3 + <view class="img_box">
  4 + <image src="../../../images/logo.png"></image>
  5 + </view>
  6 +
  7 + <view class="phone_box">
  8 + <input type="number" placeholder="请输入您的手机号" placeholder-class="placeholder" class="phone_num"/>
  9 + <view class="code_box">
  10 + <input type="number" placeholder="输入验证码" placeholder-class="placeholder"/>
  11 + <button class="button" disabled="{{disabled}}" data-id="2" bindtap="getVerificationCode" >
  12 + {{time}}
  13 + </button>
  14 + </view>
  15 + </view>
  16 +
  17 + <view class="confirm_box">
  18 + <view class="confirm_btn">
  19 + <text>确 定</text>
  20 + </view>
  21 + </view>
  22 +</view>
  1 +/* pages/index/phone-code/phone-code.wxss */
  2 +page {
  3 + background-color: #fff;
  4 +}
  5 +.content_box {
  6 + display: flex;
  7 + flex-direction: column;
  8 + align-items: center;
  9 +}
  10 +.img_box {
  11 + width: 366rpx;
  12 + height: 366rpx;
  13 + margin-top: 106rpx;
  14 +}
  15 +.img_box image {
  16 + width: 100%;
  17 + height: 100%;
  18 +}
  19 +.phone_box {
  20 + width: 100%;
  21 + padding: 32rpx;
  22 + -webkit-box-sizing: border-box;
  23 + -moz-box-sizing: border-box;
  24 + box-sizing: border-box;
  25 +}
  26 +.phone_box .phone_num {
  27 + border-bottom: 1rpx solid #C3C3C3;
  28 + margin-bottom: 42rpx;
  29 + height: 100rpx;
  30 +}
  31 +.placeholder {
  32 + color: #c3c3c3;
  33 + font-size: 32rpx;
  34 +}
  35 +.code_box {
  36 + display: flex;
  37 + align-items: center;
  38 + justify-content: space-between;
  39 + margin-bottom: 0;
  40 + border-bottom: 1rpx solid #C3C3C3;
  41 + height: 100rpx;
  42 +}
  43 +.button {
  44 + background-color: #fff;
  45 + display: inline-block;
  46 + font-size: 26rpx;
  47 + color: #3FA9F5;
  48 + /* border: 1px solid #888; */
  49 + border-radius: 10rpx;
  50 + width: 160rpx;
  51 + height: 70rpx;
  52 + line-height: 70rpx;
  53 + z-index: 2;
  54 + padding-right: 0;
  55 + padding-left: 0;
  56 + margin: 0;
  57 +}
  58 +.button:after {
  59 + border: none;
  60 +}
  61 +.confirm_box {
  62 + width: 100%;
  63 + padding: 0 32rpx;
  64 + -webkit-box-sizing: border-box;
  65 + -moz-box-sizing: border-box;
  66 + box-sizing: border-box;
  67 +}
  68 +.confirm_btn {
  69 + width: 100%;
  70 + height: 80rpx;
  71 + background-color: #3FA9F5;
  72 + /* margin-top: 68rpx; */
  73 + margin: 68rpx 0;
  74 + /* padding: 32rpx; */
  75 + /*-webkit-box-sizing: border-box;*/
  76 + /*-moz-box-sizing: border-box;*/
  77 + /*box-sizing: border-box;*/
  78 + text-align: center;
  79 + border-radius: 10rpx;
  80 +}
  81 +.confirm_btn text {
  82 + color: #ffffff;
  83 + line-height: 80rpx;
  84 + font-size: 36rpx;
  85 +}
  1 +// pages/my/all-appointment/all-appointment.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 + tab: ['全部', '待确认', '已预约', '已取消', '已结束'],
  9 + currentTab: 0,
  10 + },
  11 + changeTab(e) {
  12 + const current = e.currentTarget.dataset.index;
  13 + this.setData({currentTab: current});
  14 + wx.setNavigationBarTitle({
  15 + title: this.data.tab[current]
  16 + })
  17 + },
  18 + /**
  19 + * 生命周期函数--监听页面加载
  20 + */
  21 + onLoad: function (options) {
  22 +
  23 + },
  24 +
  25 + /**
  26 + * 生命周期函数--监听页面初次渲染完成
  27 + */
  28 + onReady: function () {
  29 +
  30 + },
  31 +
  32 + /**
  33 + * 生命周期函数--监听页面显示
  34 + */
  35 + onShow: function () {
  36 +
  37 + },
  38 +
  39 + /**
  40 + * 生命周期函数--监听页面隐藏
  41 + */
  42 + onHide: function () {
  43 +
  44 + },
  45 +
  46 + /**
  47 + * 生命周期函数--监听页面卸载
  48 + */
  49 + onUnload: function () {
  50 +
  51 + },
  52 +
  53 + /**
  54 + * 页面相关事件处理函数--监听用户下拉动作
  55 + */
  56 + onPullDownRefresh: function () {
  57 +
  58 + },
  59 +
  60 + /**
  61 + * 页面上拉触底事件的处理函数
  62 + */
  63 + onReachBottom: function () {
  64 +
  65 + },
  66 +
  67 + /**
  68 + * 用户点击右上角分享
  69 + */
  70 + onShareAppMessage: function () {
  71 +
  72 + }
  73 +})
  1 +{
  2 + "navigationBarTitleText": "全部"
  3 +}
  1 +<!--pages/my/all-appointment/all-appointment.wxml-->
  2 +<view class="content">
  3 + <!--tab-->
  4 + <view class="tab-box">
  5 + <view wx:for="{{tab}}" wx:key="index" bindtap="changeTab" data-index="{{index}}"
  6 + class="{{currentTab == index?'change-color':''}}">{{item}}</view>
  7 + </view>
  8 +
  9 + <!--预约列表-->
  10 + <view class="list-box">
  11 + <view class="order-box">
  12 +
  13 + <view class="head">
  14 + <text class="number">预约单号:000120180208</text>
  15 + <text class="appointment-state" wx:if="{{currentTab === 1}}" style="color: #FC5B63;">待确认</text>
  16 + <text class="appointment-state" wx:if="{{currentTab === 2}}">已预约</text>
  17 + <text class="appointment-state" wx:if="{{currentTab === 3}}" style="color: #464646;">已取消</text>
  18 + <text class="appointment-state" wx:if="{{currentTab === 4}}" style="color: #C3C3C3;">已结束</text>
  19 + </view>
  20 +
  21 + <view class="section">
  22 + <image src="../../../images/red_line.png" wx:if="{{currentTab === 1}}" class="blue-line"></image>
  23 + <image src="../../../images/blue_line.png" wx:if="{{currentTab === 2}}" class="blue-line"></image>
  24 + <image src="../../../images/deep_grey_line.png" wx:if="{{currentTab === 3}}" class="blue-line"></image>
  25 + <image src="../../../images/grey_line.png" wx:if="{{currentTab === 4}}" class="blue-line"></image>
  26 +
  27 + <view class="right-box">
  28 + <view class="right-top-box">
  29 + <view class="iconfont icon-dingwei"></view>
  30 + <view class="address">北京市朝阳区万寿路马兰大厦B座北京市朝阳区万寿路马兰大厦B座</view>
  31 + </view>
  32 +
  33 + <view class="right-bottom-box">
  34 + <view class="iconfont icon-shangwutubiao"></view>
  35 + <view class="date-box">
  36 + <view class="date">预约日期:2018.09.02 10:00-11:30</view>
  37 +
  38 + <view class="not_confirm" wx:if="{{currentTab === 1}}">
  39 + <view class="go-cancel">取消</view>
  40 + <view class="go-confirm">去确认</view>
  41 + </view>
  42 + <view class="cancel" wx:if="{{currentTab === 2}}">取消</view>
  43 + <view class="iconfont icon-quxiao" wx:if="{{currentTab === 3}}"></view>
  44 + <view class="iconfont icon-jieshu" wx:if="{{currentTab === 4}}"></view>
  45 + </view>
  46 + </view>
  47 + </view>
  48 + </view>
  49 +
  50 +
  51 + </view>
  52 + </view>
  53 +</view>
  1 +/* pages/my/all-appointment/all-appointment.wxss */
  2 +page {
  3 + background-color: #f2f2f2;
  4 +}
  5 +.tab-box {
  6 + width: 100%;
  7 + height: 88rpx;
  8 + display: flex;
  9 + align-items: center;
  10 + justify-content: space-between;
  11 + color: #464646;
  12 + font-size: 30rpx;
  13 + padding: 0 40rpx;
  14 + -webkit-box-sizing: border-box;
  15 + -moz-box-sizing: border-box;
  16 + box-sizing: border-box;
  17 + background-color: #fff;
  18 + /*border-bottom: 4rpx solid #3FA9F5;*/
  19 +}
  20 +.tab-box view {
  21 + line-height: 80rpx;
  22 + /*position: relative;*/
  23 +}
  24 +.change-color {
  25 + color: #3FA9F5;
  26 + border-bottom: 4rpx solid #3FA9F5;
  27 +}
  28 +.list-box {
  29 + width: 100%;
  30 + padding: 22rpx 20rpx;
  31 + -webkit-box-sizing: border-box;
  32 + -moz-box-sizing: border-box;
  33 + box-sizing: border-box;
  34 +}
  35 +.order-box {
  36 + /* height: 274rpx; */
  37 + border-radius: 20rpx;
  38 + background-color: #fff;
  39 + margin-bottom: 20rpx;
  40 + padding: 20rpx 22rpx 28rpx 34rpx;
  41 + -webkit-box-sizing: border-box;
  42 + -moz-box-sizing: border-box;
  43 + box-sizing: border-box;
  44 + display: flex;
  45 + flex-direction: column;
  46 +}
  47 +.head {
  48 + width: 100%;
  49 + height: 60rpx;
  50 + display: flex;
  51 + justify-content: space-between;
  52 + align-items: center;
  53 + color: #464646;
  54 + font-size: 28rpx;
  55 + border-bottom: 1rpx solid #f2f2f2;
  56 +}
  57 +.appointment-state {
  58 + color: #3FA9F5;
  59 +}
  60 +.section {
  61 + width: 100%;
  62 + display: flex;
  63 + position: relative;
  64 +}
  65 +.blue-line {
  66 + width: 12rpx;
  67 + height: 147rpx;
  68 + position: absolute;
  69 + top: 0;
  70 + left: 0;
  71 +}
  72 +.right-box {
  73 + margin-left: 20rpx;
  74 + padding-top: 16rpx;
  75 +}
  76 +.right-top-box, .right-bottom-box {
  77 + display: flex;
  78 + align-items: center;
  79 +}
  80 +.right-top-box {
  81 + align-items: baseline;
  82 +}
  83 +.right-bottom-box {
  84 + margin-top: 24rpx;
  85 + /* justify-content: space-between; */
  86 +}
  87 +.icon-dingwei, .icon-shangwutubiao {
  88 + color: #6E6E6E;
  89 + margin-right: 18rpx;
  90 +}
  91 +.icon-shangwutubiao {
  92 + /*margin-right: 0;*/
  93 +}
  94 +.address {
  95 + width: 82%;
  96 + color: #6E6E6E;
  97 + font-size: 26rpx;
  98 + line-height: 54rpx;
  99 +}
  100 +.date-box {
  101 + width: 100%;
  102 + display: flex;
  103 + align-items: center;
  104 + justify-content: space-between;
  105 +}
  106 +.date {
  107 + color: #6E6E6E;
  108 + font-size: 26rpx;
  109 + /* margin-right: 20rpx; */
  110 +}
  111 +.cancel {
  112 + /*width: 130rpx;*/
  113 + /*height: 50rpx;*/
  114 + /*line-height: 50rpx;*/
  115 + padding: 0rpx 44rpx;
  116 + border-radius: 20rpx;
  117 + background-color: #3FA9F5;
  118 + color: #ffffff;
  119 + font-size: 28rpx;
  120 + line-height: 50rpx;
  121 +}
  122 +.icon-quxiao, .icon-jieshu {
  123 + color: #f2f2f2;
  124 + font-size: 126rpx;
  125 + position: absolute;
  126 + right: -34rpx;
  127 + bottom: -57rpx;
  128 +}
  129 +.not_confirm {
  130 + width: 130rpx;
  131 + position: absolute;
  132 + right: -8rpx;
  133 + bottom: -6rpx;
  134 + display: flex;
  135 + flex-direction: column;
  136 + align-items: center;
  137 +}
  138 +.go-cancel {
  139 + padding: 0rpx 30rpx;
  140 + border-radius: 20rpx;
  141 + background-color: #ffffff;
  142 + color: #FC5B63;
  143 + font-size: 28rpx;
  144 + border: 4rpx solid #FC5B63;
  145 + margin-bottom: 10rpx;
  146 + line-height: 42rpx;
  147 +}
  148 +.go-confirm {
  149 + padding: 0rpx 20rpx;
  150 + border-radius: 20rpx;
  151 + background-color: #FC5B63;
  152 + color: #ffffff;
  153 + font-size: 28rpx;
  154 + height: 50rpx;
  155 + line-height: 50rpx;
  156 +}
  157 +.reduce-margin {
  158 + margin-top: 16rpx;
  159 +}
  1 +// pages/appointmentRecord/appointmentRecord.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 +
  9 + },
  10 +
  11 + /**
  12 + * 生命周期函数--监听页面加载
  13 + */
  14 + onLoad: function (options) {
  15 +
  16 + },
  17 +
  18 + /**
  19 + * 生命周期函数--监听页面初次渲染完成
  20 + */
  21 + onReady: function () {
  22 +
  23 + },
  24 +
  25 + /**
  26 + * 生命周期函数--监听页面显示
  27 + */
  28 + onShow: function () {
  29 +
  30 + },
  31 +
  32 + /**
  33 + * 生命周期函数--监听页面隐藏
  34 + */
  35 + onHide: function () {
  36 +
  37 + },
  38 +
  39 + /**
  40 + * 生命周期函数--监听页面卸载
  41 + */
  42 + onUnload: function () {
  43 +
  44 + },
  45 +
  46 + /**
  47 + * 页面相关事件处理函数--监听用户下拉动作
  48 + */
  49 + onPullDownRefresh: function () {
  50 +
  51 + },
  52 +
  53 + /**
  54 + * 页面上拉触底事件的处理函数
  55 + */
  56 + onReachBottom: function () {
  57 +
  58 + },
  59 +
  60 + /**
  61 + * 用户点击右上角分享
  62 + */
  63 + onShareAppMessage: function () {
  64 +
  65 + }
  66 +})
  1 +{
  2 + "navigationBarTitleText": "预约记录"
  3 +}
  1 +<!--pages/appointmentRecord/appointmentRecord.wxml-->
  2 +<view class='content_box'>
  3 + <view class='item_list'>
  4 + <view class='list_tab'>
  5 + <view class='list_tab_item'>预约记录</view>
  6 + <view class='list_tab_item'>时间</view>
  7 + </view>
  8 + <view class='list_tab list_content' wx:for='{{[1,2,3]}}' wx:key=''>
  9 + <view class='list_tab_item'>活动报名</view>
  10 + <view class='list_tab_item'>2018.10.10</view>
  11 + </view>
  12 + </view>
  13 +</view>
  1 +/* pages/appointmentRecord/appointmentRecord.wxss */
  2 +
  3 +/* 团购成交记录 */
  4 +
  5 +.list_tab {
  6 + display: flex;
  7 + align-items: center;
  8 + justify-content: space-between;
  9 + border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
  10 + padding: 30rpx 0;
  11 + box-sizing: border-box;
  12 + text-align: center;
  13 +}
  14 +
  15 +.list_tab_item {
  16 + width: 50%;
  17 + font-size: 28rpx;
  18 + color: #464646;
  19 + position: relative;
  20 +}
  21 +
  22 +.list_label {
  23 + width: 180rpx;
  24 + height: 22rpx;
  25 + position: absolute;
  26 + bottom: -28rpx;
  27 + left: 50%;
  28 + transform: translateX(-50%);
  29 + background: rgba(252, 91, 99, 1);
  30 + border-radius: 10rpx;
  31 + font-size: 18rpx;
  32 + color: #fff;
  33 + display: flex;
  34 + align-items: center;
  35 + justify-content: center;
  36 +}
  37 +
  38 +.list_content {
  39 + border: 0;
  40 + padding: 15rpx 0;
  41 +}
  42 +
  43 +.list_content .list_tab_item {
  44 + font-size: 24rpx;
  45 + color: #a3a3a3;
  46 +}
  1 +// pages/buyCard/buyCard.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 + userlist: ['张三', '里斯'],
  9 + index: -1,
  10 + },
  11 + //选择成员
  12 + userList(e) {
  13 + this.setData({
  14 + index: e.detail.value
  15 + })
  16 +
  17 + },
  18 + /**
  19 + * 生命周期函数--监听页面加载
  20 + */
  21 + onLoad: function (options) {
  22 +
  23 + },
  24 +
  25 + /**
  26 + * 生命周期函数--监听页面初次渲染完成
  27 + */
  28 + onReady: function () {
  29 +
  30 + },
  31 +
  32 + /**
  33 + * 生命周期函数--监听页面显示
  34 + */
  35 + onShow: function () {
  36 +
  37 + },
  38 +
  39 + /**
  40 + * 生命周期函数--监听页面隐藏
  41 + */
  42 + onHide: function () {
  43 +
  44 + },
  45 +
  46 + /**
  47 + * 生命周期函数--监听页面卸载
  48 + */
  49 + onUnload: function () {
  50 +
  51 + },
  52 +
  53 + /**
  54 + * 页面相关事件处理函数--监听用户下拉动作
  55 + */
  56 + onPullDownRefresh: function () {
  57 +
  58 + },
  59 +
  60 + /**
  61 + * 页面上拉触底事件的处理函数
  62 + */
  63 + onReachBottom: function () {
  64 +
  65 + },
  66 +
  67 + /**
  68 + * 用户点击右上角分享
  69 + */
  70 + onShareAppMessage: function () {
  71 +
  72 + }
  73 +})
  1 +{
  2 + "navigationBarTitleText": "购买畅玩卡"
  3 +}
  1 +<!--pages/buyCard/buyCard.wxml-->
  2 +<view class='long_img'>这是一个可以滑动的长图</view>
  3 +<view class='service_box'>
  4 + <view class='add_person_box'>
  5 + <view class='list_input'>
  6 + <view>绑定学员:</view>
  7 + <picker value='{{index}}' range='{{userlist}}' bindchange='userList'>
  8 + <block wx:if='{{index==-1}}'>
  9 + <input placeholder='点击右侧添加学员' placeholder-class='input_style' disabled='true'></input>
  10 + </block>
  11 + <block wx:else>
  12 + <text>{{userlist[index]}}</text>
  13 + </block>
  14 + </picker>
  15 + <view class='iconfont icon-daosanjiao'></view>
  16 + </view>
  17 + <view class='add_box'>
  18 + <text class='iconfont icon-jia'></text>
  19 + <text>添加学员</text>
  20 + </view>
  21 + </view>
  22 + <view class='service_info_box'>
  23 + <text class='iconfont icon-xuanzhong'></text>
  24 + <text>我已阅读并同意畅玩卡</text>
  25 + <text class='service_info'>服务协议</text>
  26 + </view>
  27 + <view class='service_btn_box'>
  28 + <view>需支付:¥288.00</view>
  29 + <view class='pay_btn'>确定</view>
  30 + </view>
  31 +</view>
  1 +/* pages/buyCard/buyCard.wxss */
  2 +@import '../groupBuy/groupBuy.wxss';
  3 +@import '../charge/charge.wxss';
  4 +.add_person_box {
  5 + display: flex;
  6 + align-items: center;
  7 + justify-content: space-between;
  8 + padding: 20rpx;
  9 + background: #fff;
  10 +}
  11 +.service_btn_box{
  12 + font-size: 30rpx;
  13 + color: #6E6E6E;
  14 +}
  15 +
  1 +// pages/cardIntroduction/cardIntroduction.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 +
  9 + },
  10 +
  11 + /**
  12 + * 生命周期函数--监听页面加载
  13 + */
  14 + onLoad: function (options) {
  15 +
  16 + },
  17 +
  18 + /**
  19 + * 生命周期函数--监听页面初次渲染完成
  20 + */
  21 + onReady: function () {
  22 +
  23 + },
  24 +
  25 + /**
  26 + * 生命周期函数--监听页面显示
  27 + */
  28 + onShow: function () {
  29 +
  30 + },
  31 +
  32 + /**
  33 + * 生命周期函数--监听页面隐藏
  34 + */
  35 + onHide: function () {
  36 +
  37 + },
  38 +
  39 + /**
  40 + * 生命周期函数--监听页面卸载
  41 + */
  42 + onUnload: function () {
  43 +
  44 + },
  45 +
  46 + /**
  47 + * 页面相关事件处理函数--监听用户下拉动作
  48 + */
  49 + onPullDownRefresh: function () {
  50 +
  51 + },
  52 +
  53 + /**
  54 + * 页面上拉触底事件的处理函数
  55 + */
  56 + onReachBottom: function () {
  57 +
  58 + },
  59 +
  60 + /**
  61 + * 用户点击右上角分享
  62 + */
  63 + onShareAppMessage: function () {
  64 +
  65 + }
  66 +})
  1 +<!--pages/cardIntroduction/cardIntroduction.wxml-->
  2 +<view class='content_box'>
  3 + 这是一个可以滑动的长图
  4 +</view>
  5 +<view class='bottom_box'>
  6 + <view class='share_btn'>分享好友</view>
  7 + <view class='groupBuy_btn'>前往团购</view>
  8 +</view>
  1 +/* pages/cardIntroduction/cardIntroduction.wxss */
  2 +
  3 +.content_box {
  4 + width: 100%;
  5 + height: 100%;
  6 + background: #e0e0e0;
  7 + font-size: 32rpx;
  8 + color: #000;
  9 + padding: 30rpx;
  10 + position: fixed;
  11 + top: 0;
  12 + left: 0;
  13 + text-align: center;
  14 + /* display: flex;
  15 + align-items: center;
  16 + justify-content: center;
  17 + overflow: scroll; */
  18 +}
  19 +
  20 +.bottom_box {
  21 + width: 100%;
  22 + display: flex;
  23 + align-items: center;
  24 + justify-content: space-between;
  25 + position: fixed;
  26 + bottom: 0;
  27 + left: 0;
  28 +}
  29 +
  30 +.share_btn, .groupBuy_btn {
  31 + width: 50%;
  32 + height: 98rpx;
  33 + background: linear-gradient(-84deg, rgba(251, 150, 0, 1), rgba(255, 198, 4, 1));
  34 + display: flex;
  35 + align-items: center;
  36 + justify-content: center;
  37 + font-size: 36rpx;
  38 + color: #fff;
  39 +}
  40 +
  41 +.groupBuy_btn {
  42 + background: linear-gradient(-78deg, rgba(255, 83, 2, 1), rgba(252, 116, 0, 1));
  43 +}
  1 +// pages/charge/charge.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 + userlist: ['张三', '里斯'],
  9 + index: -1,
  10 + },
  11 + //选择成员
  12 + userList(e) {
  13 + this.setData({
  14 + index:e.detail.value
  15 + })
  16 +
  17 + },
  18 + //兑换并绑定按钮
  19 + chargeBtn() {
  20 + wx.showModal({
  21 + title: '',
  22 + content: '绑定后无法更改,确定绑定张三吗?',
  23 + cancelText: '取消',
  24 + confirmText: '确认',
  25 + })
  26 + },
  27 +
  28 + /**
  29 + * 生命周期函数--监听页面加载
  30 + */
  31 + onLoad: function(options) {
  32 +
  33 + },
  34 +
  35 + /**
  36 + * 生命周期函数--监听页面初次渲染完成
  37 + */
  38 + onReady: function() {
  39 +
  40 + },
  41 +
  42 + /**
  43 + * 生命周期函数--监听页面显示
  44 + */
  45 + onShow: function() {
  46 +
  47 + },
  48 +
  49 + /**
  50 + * 生命周期函数--监听页面隐藏
  51 + */
  52 + onHide: function() {
  53 +
  54 + },
  55 +
  56 + /**
  57 + * 生命周期函数--监听页面卸载
  58 + */
  59 + onUnload: function() {
  60 +
  61 + },
  62 +
  63 + /**
  64 + * 页面相关事件处理函数--监听用户下拉动作
  65 + */
  66 + onPullDownRefresh: function() {
  67 +
  68 + },
  69 +
  70 + /**
  71 + * 页面上拉触底事件的处理函数
  72 + */
  73 + onReachBottom: function() {
  74 +
  75 + },
  76 +
  77 + /**
  78 + * 用户点击右上角分享
  79 + */
  80 + onShareAppMessage: function() {
  81 +
  82 + }
  83 +})
  1 +<!--pages/charge/charge.wxml-->
  2 +<view class='content_box'>
  3 + <view class='item_list_box'>
  4 + <view class='item_list'>
  5 + <view class='list_input'>
  6 + <view>兑换码:</view>
  7 + <input placeholder='请输入您的畅玩卡兑换码' placeholder-class='input_style'></input>
  8 + </view>
  9 + <view></view>
  10 + </view>
  11 + <view class='item_list'>
  12 + <view class='list_input'>
  13 + <view>绑定学员:</view>
  14 + <picker value='{{index}}' range='{{userlist}}' bindchange='userList'>
  15 + <block wx:if='{{index==-1}}'>
  16 + <input placeholder='点击右侧添加学员' placeholder-class='input_style' disabled='true'></input>
  17 + </block>
  18 + <block wx:else>
  19 + <text>{{userlist[index]}}</text>
  20 + </block>
  21 + </picker>
  22 + <view class='iconfont icon-daosanjiao'></view>
  23 + </view>
  24 + <view class='add_box'>
  25 + <text class='iconfont icon-jia'></text>
  26 + <text>添加学员</text>
  27 + </view>
  28 + </view>
  29 + </view>
  30 +</view>
  31 +<view class='service_box'>
  32 + <view class='service_info_box'>
  33 + <text>注:如果还未添加学员,点击添加学员添加吧!</text>
  34 + </view>
  35 + <view class='service_btn_box' bindtap='chargeBtn'>
  36 + 兑换并绑定
  37 + </view>
  38 +</view>
  1 +/* pages/charge/charge.wxss */
  2 +
  3 +page {
  4 + background: #f5f5fa;
  5 +}
  6 +
  7 +.item_list_box {
  8 + padding: 0 30rpx;
  9 + background: #fff;
  10 +}
  11 +
  12 +.item_list {
  13 + display: flex;
  14 + align-items: center;
  15 + justify-content: space-between;
  16 + border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
  17 + padding: 30rpx 0;
  18 +}
  19 +
  20 +.item_list:last-child {
  21 + border: 0;
  22 +}
  23 +
  24 +.list_input {
  25 + width: 80%;
  26 + display: flex;
  27 + align-items: center;
  28 + font-size: 32rpx;
  29 + color: #464646;
  30 +}
  31 +
  32 +.list_input input {
  33 + font-size: 32rpx;
  34 + border: 0;
  35 + outline: none;
  36 +}
  37 +
  38 +.list_input picker {
  39 + width: 65%;
  40 +}
  41 +
  42 +.input_style {
  43 + color: #c3c3c3;
  44 +}
  45 +
  46 +.icon-daosanjiao {
  47 + font-size: 20rpx;
  48 + color: #6f6f6f;
  49 +}
  50 +
  51 +.icon-jia {
  52 + display: inline-block;
  53 + width: 34rpx;
  54 + height: 34rpx;
  55 + background: #3fa9f5;
  56 + border-radius: 10rpx;
  57 + color: #fff;
  58 + padding: 5rpx;
  59 + box-sizing: border-box;
  60 + margin-right: 8rpx;
  61 +}
  62 +
  63 +.add_box {
  64 + font-size: 24rpx;
  65 + color: #3fa9f5;
  66 + text-align: center;
  67 + display: flex;
  68 + align-items: center;
  69 +}
  70 +
  71 +.service_info_box {
  72 + width: 100%;
  73 + height: 50rpx;
  74 + background: #fdefb5;
  75 + font-size: 24rpx;
  76 + color: #fc5b63;
  77 + padding: 10rpx 20rpx;
  78 + box-sizing: border-box;
  79 +}
  80 +
  81 +.service_box {
  82 + width: 100%;
  83 + position: fixed;
  84 + left: 0;
  85 + bottom: 0;
  86 +}
  87 +
  88 +.service_btn_box {
  89 + width: 100%;
  90 + height: 98rpx;
  91 + font-size: 36rpx;
  92 + background: #3fa9f5;
  93 + color: #fff;
  94 + display: flex;
  95 + align-items: center;
  96 + justify-content: center;
  97 +}
  1 +// pages/chargePhoneNum/chargePhoneNum.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 +
  9 + },
  10 +
  11 + /**
  12 + * 生命周期函数--监听页面加载
  13 + */
  14 + onLoad: function (options) {
  15 +
  16 + },
  17 +
  18 + /**
  19 + * 生命周期函数--监听页面初次渲染完成
  20 + */
  21 + onReady: function () {
  22 +
  23 + },
  24 +
  25 + /**
  26 + * 生命周期函数--监听页面显示
  27 + */
  28 + onShow: function () {
  29 +
  30 + },
  31 +
  32 + /**
  33 + * 生命周期函数--监听页面隐藏
  34 + */
  35 + onHide: function () {
  36 +
  37 + },
  38 +
  39 + /**
  40 + * 生命周期函数--监听页面卸载
  41 + */
  42 + onUnload: function () {
  43 +
  44 + },
  45 +
  46 + /**
  47 + * 页面相关事件处理函数--监听用户下拉动作
  48 + */
  49 + onPullDownRefresh: function () {
  50 +
  51 + },
  52 +
  53 + /**
  54 + * 页面上拉触底事件的处理函数
  55 + */
  56 + onReachBottom: function () {
  57 +
  58 + },
  59 +
  60 + /**
  61 + * 用户点击右上角分享
  62 + */
  63 + onShareAppMessage: function () {
  64 +
  65 + }
  66 +})
  1 +<!--pages/chargePhoneNum/chargePhoneNum.wxml-->
  2 +<view class='content_box'>
  3 + <view class='banner_box'>
  4 + <view class='head_img'>
  5 + <image src='../../images/head.png'></image>
  6 + </view>
  7 + <view>微信昵称</view>
  8 + </view>
  9 + <view class='list_box'>
  10 + <view class='item_list'>
  11 + <view class='info_box'>
  12 + <view>新手机号: </view>
  13 + <view class='list_input'>
  14 + <input placeholder='188****888' value=''></input>
  15 + </view>
  16 + </view>
  17 + </view>
  18 + <view class='item_list'>
  19 + <view class='info_box'>
  20 + <text>验证码: </text>
  21 + <view class='list_input'>
  22 + <input placeholder='输入验证码' value=''></input>
  23 + </view>
  24 + </view>
  25 + <button class='get_code'>获取验证码</button>
  26 + </view>
  27 + </view>
  28 + <view class='save_btn'>保 存</view>
  29 +</view>
  1 +/* pages/chargePhoneNum/chargePhoneNum.wxss */
  2 +
  3 +.content_box {
  4 + padding: 0 20rpx;
  5 +}
  6 +
  7 +.banner_box {
  8 + width: 100%;
  9 + height: 200rpx;
  10 + background: #3fa9f5;
  11 + border-radius: 10rpx;
  12 + margin-top: 46rpx;
  13 + display: flex;
  14 + align-items: center;
  15 + justify-content: center;
  16 + flex-direction: column;
  17 + font-size: 28rpx;
  18 + color: #fff;
  19 +}
  20 +
  21 +.head_img {
  22 + width: 157rpx;
  23 + height: 157rpx;
  24 + border-radius: 50%;
  25 + display: flex;
  26 + align-items: center;
  27 + justify-content: center;
  28 + overflow: hidden;
  29 + margin-top: -30rpx;
  30 + margin-bottom: 10rpx;
  31 +}
  32 +
  33 +.head_img image {
  34 + width: 100%;
  35 + height: 100%;
  36 +}
  37 +
  38 +.item_list {
  39 + display: flex;
  40 + align-items: center;
  41 + justify-content: space-between;
  42 + font-size: 32rpx;
  43 + color: #c3c3c3;
  44 + padding: 63rpx 0 25rpx 0;
  45 + border-bottom: 1rpx solid #C3C3C3;
  46 +}
  47 +.info_box{
  48 + width: 80%;
  49 + display: flex;
  50 +}
  51 +.get_code {
  52 + text-align: right!important;
  53 + font-size: 28rpx;
  54 + color: #3fa9f5 !important;
  55 + background: none;
  56 + padding: 0rpx !important;
  57 + line-height: normal!important;
  58 +}
  59 +
  60 +.get_code::after {
  61 + border: 0;
  62 +}
  63 +.save_btn{
  64 + width: 100%;
  65 + height: 80rpx;
  66 + border-radius: 10rpx;
  67 + background: #3fa9f5;
  68 + text-align: center;
  69 + line-height: 80rpx;
  70 + color: #fff;
  71 + font-size: 36rpx;
  72 + margin-top: 100rpx;
  73 +}
  1 +// pages/groupBupShare/groupBupShare.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 +
  9 + },
  10 +
  11 + /**
  12 + * 生命周期函数--监听页面加载
  13 + */
  14 + onLoad: function (options) {
  15 +
  16 + },
  17 +
  18 + /**
  19 + * 生命周期函数--监听页面初次渲染完成
  20 + */
  21 + onReady: function () {
  22 +
  23 + },
  24 +
  25 + /**
  26 + * 生命周期函数--监听页面显示
  27 + */
  28 + onShow: function () {
  29 +
  30 + },
  31 +
  32 + /**
  33 + * 生命周期函数--监听页面隐藏
  34 + */
  35 + onHide: function () {
  36 +
  37 + },
  38 +
  39 + /**
  40 + * 生命周期函数--监听页面卸载
  41 + */
  42 + onUnload: function () {
  43 +
  44 + },
  45 +
  46 + /**
  47 + * 页面相关事件处理函数--监听用户下拉动作
  48 + */
  49 + onPullDownRefresh: function () {
  50 +
  51 + },
  52 +
  53 + /**
  54 + * 页面上拉触底事件的处理函数
  55 + */
  56 + onReachBottom: function () {
  57 +
  58 + },
  59 +
  60 + /**
  61 + * 用户点击右上角分享
  62 + */
  63 + onShareAppMessage: function () {
  64 +
  65 + }
  66 +})
  1 +<!--pages/groupBupShare/groupBupShare.wxml-->
  2 +<view class='content_box'>
  3 + <view class='list_label_box'>
  4 + <view class='group_num'>团购人数:最低
  5 + <text>3人</text>
  6 + </view>
  7 + <view class='group_time'>发布倒计时:
  8 + <text>3小时</text>
  9 + </view>
  10 + </view>
  11 +</view>
  12 +<view class='long_img'>这是一个可以滑动的长图</view>
  13 +<view class='service_box'>
  14 + <view class='service_info_box'>
  15 + <text class='iconfont icon-fenxiang'></text> 分享的文案,50汉字以内提示分享的文案,50汉字以内提示分 享的文案,50汉字以内
  16 + </view>
  17 + <view class='service_btn_box'>分享好友</view>
  18 +</view>
  1 +/* pages/groupBupShare/groupBupShare.wxss */
  2 +@import '../groupBuy/groupBuy.wxss';
  3 +.content_box{
  4 + padding: 0 20rpx;
  5 +}
  6 +.long_img{
  7 + width: 100%;
  8 + margin-top: 20rpx;
  9 + background: #E0E0E0;
  10 + font-size: 32rpx;
  11 + color: #000000;
  12 + text-align: center;
  13 + display: flex;
  14 + align-items: center;
  15 + justify-content: center;
  16 +}
  17 +.service_btn_box{
  18 + background:linear-gradient(-78deg,rgba(255,83,2,1),rgba(252,116,0,1));
  19 + display: flex;
  20 + align-items: center;
  21 + justify-content: center;
  22 + font-size: 36rpx;
  23 + color: #FFFFFF;
  24 +}
  1 +// pages/groupBuy/groupBuy.js
  2 +Page({
  3 +
  4 + /**
  5 + * 页面的初始数据
  6 + */
  7 + data: {
  8 + current:0
  9 + },
  10 +//tab切换
  11 + tabCharge(e){
  12 + var index=e.currentTarget.dataset.current
  13 + var current=this.data.current
  14 + if(index==current){
  15 + return false
  16 + }else{
  17 + this.setData({
  18 + current:index
  19 + })
  20 + }
  21 + },
  22 +
  23 + /**
  24 + * 生命周期函数--监听页面加载
  25 + */
  26 + onLoad: function (options) {
  27 +
  28 + },
  29 +
  30 + /**
  31 + * 生命周期函数--监听页面初次渲染完成
  32 + */
  33 + onReady: function () {
  34 +
  35 + },
  36 +
  37 + /**
  38 + * 生命周期函数--监听页面显示
  39 + */
  40 + onShow: function () {
  41 +
  42 + },
  43 +
  44 + /**
  45 + * 生命周期函数--监听页面隐藏
  46 + */
  47 + onHide: function () {
  48 +
  49 + },
  50 +
  51 + /**
  52 + * 生命周期函数--监听页面卸载
  53 + */
  54 + onUnload: function () {
  55 +
  56 + },
  57 +
  58 + /**
  59 + * 页面相关事件处理函数--监听用户下拉动作
  60 + */
  61 + onPullDownRefresh: function () {
  62 +
  63 + },
  64 +
  65 + /**
  66 + * 页面上拉触底事件的处理函数
  67 + */
  68 + onReachBottom: function () {
  69 +
  70 + },
  71 +
  72 + /**
  73 + * 用户点击右上角分享
  74 + */
  75 + onShareAppMessage: function () {
  76 +
  77 + }
  78 +})
  1 +{
  2 + "navigationBarTitleText": "畅玩卡团购"
  3 +}
  1 +<!--pages/groupBuy/groupBuy.wxml-->
  2 +<view class='banner_img'>
  3 + <image src='../../../images/banner.jpg'></image>
  4 +</view>
  5 +<view class='title_box'>
  6 + <view class='title_content'>畅玩卡介绍</view>
  7 +</view>
  8 +<view class='tab_box'>
  9 + <view class="tab_item {{current==0?'tab_active':''}}" data-current='0' bindtap='tabCharge'>参与的组团</view>
  10 + <view class="tab_item {{current==1?'tab_active':''}}" data-current='1' bindtap='tabCharge'>团购成交记录</view>
  11 + <view class="tab_item {{current==2?'tab_active':''}}" data-current='2' bindtap='tabCharge'>发起团购</view>
  12 +</view>
  13 +<block wx:if='{{current==0}}'>
  14 + <view class='content_box'>
  15 + <view class='item_list' wx:for='{{[1,2,3]}}' wx:key=''>
  16 + <view class='list_title_box'>
  17 + <view>查看详情</view>
  18 + <view class='iconfont icon-fanhui'></view>
  19 + </view>
  20 + <view class='list_info_box'>
  21 + <view class='info_item'>
  22 + <view class='info_box'>
  23 + <image src='../../../images/start-logo.png'></image>
  24 + <view class='info_label'>发起人</view>
  25 + </view>
  26 + <view class='info_time'>
  27 + <view>2018.10.10</view>
  28 + <view> 00:00:00</view>
  29 + </view>
  30 + </view>
  31 + <view class='info_item'>
  32 + <view class='info_box'>
  33 + <image src='../../../images/start-logo.png'></image>
  34 + <view class='info_label'>发起人</view>
  35 + </view>
  36 + <view class='info_time'>
  37 + <view>2018.10.10</view>
  38 + <view> 00:00:00</view>
  39 + </view>
  40 + </view>
  41 + <view class='info_item'>
  42 + <view class='info_box'>
  43 + </view>
  44 + </view>
  45 + <view class='info_item'>
  46 + <view class='info_box'>
  47 + </view>
  48 + </view>
  49 + <view class='info_item'>
  50 + <view class='info_box'>
  51 + </view>
  52 + </view>
  53 + </view>
  54 + <view class='list_info'>成团人数:最低
  55 + <text>3</text>人,已参与:
  56 + <text>2</text> 人,快呼唤伙伴参与吧!</view>
  57 + <view class='list_info'>
  58 + <view class='list_info_item'>剩余
  59 + <text>00:02:00 </text> 结束</view>
  60 + </view>
  61 + <view>
  62 + <view class='user_info_box'>
  63 + <view class='user_info'>
  64 + <view class='info_box'>
  65 + <image src='../../../images/start-logo.png'></image>
  66 + <view class='info_label'>发起人</view>
  67 + </view>
  68 + <view>发起人姓名</view>
  69 + </view>
  70 + <view class='state_box'>
  71 + <view>2018.10.10 00:00:00开团</view>
  72 + <view class='info_state'>团购中</view>
  73 + </view>
  74 + </view>
  75 + </view>
  76 + </view>
  77 + </view>
  78 + <view class='null_box'></view>
  79 + <view class='bottom_box'>
  80 + <text class='iconfont icon-fenxiang'></text> 分享的文案,50汉字以内提示分享的文案,50汉字以内提示分 享的文案,50汉字以内
  81 + </view>
  82 +</block>
  83 +<block wx:elif='{{current==1}}'>
  84 + <view class='content_box'>
  85 + <view class='item_list'>
  86 + <view class='list_tab'>
  87 + <view class='list_tab_item'>日期</view>
  88 + <view class='list_tab_item'>兑换状态</view>
  89 + <view class='list_tab_item'>
  90 + <text>兑换码</text>
  91 + <view class='list_label'>长按兑换码即可复制</view>
  92 + </view>
  93 + </view>
  94 + <view class='list_tab list_content' wx:for='{{[1,2,3]}}' wx:key=''>
  95 + <view class='list_tab_item'>2018.10.10</view>
  96 + <view class='list_tab_item'>未兑换</view>
  97 + <view class='list_tab_item'>2059788797</view>
  98 + </view>
  99 + </view>
  100 + </view>
  101 +</block>
  102 +<block wx:if='{{current==2}}'>
  103 + <view class='content_box' style='padding:0 20rpx;'>
  104 + <view class='list_label_box'>
  105 + <view class='group_num'>团购人数:最低
  106 + <text>3人</text>
  107 + </view>
  108 + <view class='group_time'>发布倒计时:
  109 + <text>3小时</text>
  110 + </view>
  111 + </view>
  112 + <view class='list_title_info'>
  113 + <view class='iconfont icon-zhongdian'> </view>
  114 + <view>
  115 + <view>团购规则说明</view>
  116 + <view class='content_info'>如果因为环境网络问题或者其他原因导致无法打卡,请上传照 片及文字申诉内容,证明您已到场并已经参与活动。</view>
  117 + </view>
  118 + </view>
  119 + <view class='service_box'>
  120 + <view class='service_info_box'>
  121 + <text class='iconfont icon-xuanzhong'></text>
  122 + <text>我已阅读并同意畅玩卡</text>
  123 + <text class='service_info'>服务协议</text>
  124 + </view>
  125 + <view class='service_btn_box'>
  126 + <view>单价:¥188.00</view>
  127 + <view class='pay_btn'>支付</view>
  128 + </view>
  129 + </view>
  130 + </view>
  131 +</block>