├── .gitignore
├── LICENSE
├── README.md
├── cloudfunctionTemplate
└── cloud.json
├── cloudfunctions
└── cloud
│ ├── config.json
│ ├── config
│ ├── biz_config.js
│ ├── config.js
│ ├── msg_config.js
│ └── route.js
│ ├── framework
│ ├── client
│ │ └── controller.js
│ ├── cloud
│ │ ├── cloud_base.js
│ │ └── cloud_util.js
│ ├── core
│ │ ├── app_code.js
│ │ ├── app_error.js
│ │ ├── app_job.js
│ │ ├── app_other.js
│ │ ├── app_util.js
│ │ └── application.js
│ ├── database
│ │ ├── db_util.js
│ │ ├── model.js
│ │ └── mysql_util.js
│ ├── lib
│ │ ├── faker_lib.js
│ │ ├── http_lib.js
│ │ ├── md5_lib.js
│ │ └── mini_lib.js
│ ├── utils
│ │ ├── cache_util.js
│ │ ├── constant.js
│ │ ├── data_util.js
│ │ ├── log_util.js
│ │ ├── math_util.js
│ │ ├── time_util.js
│ │ └── util.js
│ └── validate
│ │ ├── content_check.js
│ │ └── data_check.js
│ ├── index.js
│ ├── package-lock.json
│ ├── package.json
│ └── project
│ ├── controller
│ ├── admin
│ │ ├── admin_export_controller.js
│ │ ├── admin_home_controller.js
│ │ ├── admin_meet_controller.js
│ │ ├── admin_mgr_controller.js
│ │ ├── admin_news_controller.js
│ │ ├── admin_order_controller.js
│ │ ├── admin_setup_controller.js
│ │ ├── admin_user_controller.js
│ │ └── base_admin_controller.js
│ ├── base_controller.js
│ ├── check_controller.js
│ ├── home_controller.js
│ ├── meet_controller.js
│ ├── my_controller.js
│ ├── news_controller.js
│ ├── passport_controller.js
│ └── test
│ │ ├── test_controller.js
│ │ └── test_meet_controller.js
│ ├── model
│ ├── admin_model.js
│ ├── base_model.js
│ ├── cache_model.js
│ ├── day_model.js
│ ├── export_model.js
│ ├── join_model.js
│ ├── log_model.js
│ ├── meet_model.js
│ ├── news_model.js
│ ├── setup_model.js
│ ├── temp_model.js
│ └── user_model.js
│ └── service
│ ├── admin
│ ├── admin_export_service.js
│ ├── admin_home_service.js
│ ├── admin_meet_service.js
│ ├── admin_mgr_service.js
│ ├── admin_news_service.js
│ ├── admin_setup_service.js
│ ├── admin_temp_service.js
│ ├── admin_user_service.js
│ └── base_admin_service.js
│ ├── base_service.js
│ ├── data_service.js
│ ├── home_service.js
│ ├── meet_service.js
│ ├── news_service.js
│ └── passport_service.js
├── demo
├── 二维码.png
├── 储物柜预约.png
├── 填报预约.png
├── 工单.png
├── 我的.png
├── 日历.png
├── 自习室预约.png
├── 菜单.png
├── 预约成.png
├── 预约添加.png
├── 预约管理.png
├── 预约规则.png
├── 预约详情.png
└── 首页.png
├── miniprogram
├── app.js
├── app.json
├── app.wxss
├── behavior
│ ├── about_contact_bh.js
│ ├── about_index_bh.js
│ ├── calendar_index_bh.js
│ ├── default_index_bh.js
│ ├── meet_detail_bh.js
│ ├── meet_index_bh.js
│ ├── meet_join_bh.js
│ ├── meet_self_bh.js
│ ├── my_edit_bh.js
│ ├── my_index_bh.js
│ ├── my_join_bh.js
│ ├── my_join_detail_bh.js
│ ├── news_detail_bh.js
│ ├── news_index_bh.js
│ ├── public_hint_bh.js
│ └── search_bh.js
├── biz
│ ├── admin_biz.js
│ ├── admin_meet_biz.js
│ ├── admin_news_biz.js
│ ├── base_biz.js
│ ├── biz_helper.js
│ ├── constants.js
│ ├── meet_biz.js
│ ├── news_biz.js
│ ├── passport_biz.js
│ └── search_biz.js
├── cmpts
│ ├── biz
│ │ ├── foot
│ │ │ ├── foot_cmpt.js
│ │ │ ├── foot_cmpt.json
│ │ │ ├── foot_cmpt.wxml
│ │ │ └── foot_cmpt.wxss
│ │ └── test
│ │ │ ├── test_cmpt.js
│ │ │ ├── test_cmpt.json
│ │ │ ├── test_cmpt.wxml
│ │ │ └── test_cmpt.wxss
│ ├── lib
│ │ └── wxa-plugin-canvas
│ │ │ ├── index
│ │ │ ├── index.js
│ │ │ ├── index.json
│ │ │ ├── index.wxml
│ │ │ └── index.wxss
│ │ │ └── poster
│ │ │ ├── index.js
│ │ │ ├── index.json
│ │ │ ├── index.wxml
│ │ │ ├── index.wxss
│ │ │ └── poster.js
│ └── public
│ │ ├── calendar
│ │ ├── calendar_comm
│ │ │ ├── calendar_comm_cmpt.js
│ │ │ ├── calendar_comm_cmpt.json
│ │ │ ├── calendar_comm_cmpt.wxml
│ │ │ ├── calendar_comm_cmpt.wxss
│ │ │ └── din.wxss
│ │ ├── calendar_lib.js
│ │ └── calendar_meet
│ │ │ ├── calendar_meet_cmpt.js
│ │ │ ├── calendar_meet_cmpt.json
│ │ │ ├── calendar_meet_cmpt.wxml
│ │ │ └── calendar_meet_cmpt.wxss
│ │ ├── checkbox
│ │ ├── checkbox_cmpt.js
│ │ ├── checkbox_cmpt.json
│ │ ├── checkbox_cmpt.wxml
│ │ └── checkbox_cmpt.wxss
│ │ ├── editor
│ │ ├── editor_cmpt.js
│ │ ├── editor_cmpt.json
│ │ ├── editor_cmpt.wxml
│ │ └── editor_cmpt.wxss
│ │ ├── form
│ │ ├── form_set
│ │ │ ├── field
│ │ │ │ ├── form_set_field.js
│ │ │ │ ├── form_set_field.json
│ │ │ │ ├── form_set_field.wxml
│ │ │ │ └── form_set_field.wxss
│ │ │ ├── form_set_cmpt.js
│ │ │ ├── form_set_cmpt.json
│ │ │ ├── form_set_cmpt.wxml
│ │ │ └── form_set_cmpt.wxss
│ │ ├── form_set_helper.js
│ │ └── form_show
│ │ │ ├── form_show_cmpt.js
│ │ │ ├── form_show_cmpt.json
│ │ │ ├── form_show_cmpt.wxml
│ │ │ └── form_show_cmpt.wxss
│ │ ├── img
│ │ ├── img_upload_cmpt.js
│ │ ├── img_upload_cmpt.json
│ │ ├── img_upload_cmpt.wxml
│ │ └── img_upload_cmpt.wxss
│ │ ├── list
│ │ ├── comm_list_cmpt.js
│ │ ├── comm_list_cmpt.json
│ │ ├── comm_list_cmpt.wxml
│ │ └── comm_list_cmpt.wxss
│ │ ├── modal
│ │ ├── modal_cmpt.js
│ │ ├── modal_cmpt.json
│ │ ├── modal_cmpt.wxml
│ │ └── modal_cmpt.wxss
│ │ ├── picker
│ │ ├── picker_cmpt.js
│ │ ├── picker_cmpt.json
│ │ ├── picker_cmpt.wxml
│ │ └── picker_cmpt.wxss
│ │ ├── picker_multi
│ │ ├── picker_multi_cmpt.js
│ │ ├── picker_multi_cmpt.json
│ │ ├── picker_multi_cmpt.wxml
│ │ └── picker_multi_cmpt.wxss
│ │ ├── picker_time
│ │ ├── datetime_picker.js
│ │ ├── picker_time_cmpt.js
│ │ ├── picker_time_cmpt.json
│ │ ├── picker_time_cmpt.wxml
│ │ └── picker_time_cmpt.wxss
│ │ ├── poster
│ │ ├── images
│ │ │ ├── friend.png
│ │ │ └── wechat.png
│ │ ├── poster_cmpt.js
│ │ ├── poster_cmpt.json
│ │ ├── poster_cmpt.wxml
│ │ ├── poster_cmpt.wxss
│ │ └── wxa-plugin-canvas
│ │ │ ├── index
│ │ │ ├── index.js
│ │ │ ├── index.json
│ │ │ ├── index.wxml
│ │ │ └── index.wxss
│ │ │ └── poster
│ │ │ ├── index.js
│ │ │ ├── index.json
│ │ │ ├── index.wxml
│ │ │ ├── index.wxss
│ │ │ └── poster.js
│ │ └── table
│ │ ├── table_cmpt.js
│ │ ├── table_cmpt.json
│ │ ├── table_cmpt.wxml
│ │ └── table_cmpt.wxss
├── helper
│ ├── cache_helper.js
│ ├── cloud_helper.js
│ ├── content_check_helper.js
│ ├── data_helper.js
│ ├── file_helper.js
│ ├── form_helper.js
│ ├── helper.js
│ ├── page_helper.js
│ ├── pic_helper.js
│ ├── sys_helper.js
│ ├── time_helper.js
│ └── validate.js
├── images
│ └── default_cover_pic.gif
├── lib
│ └── tools
│ │ ├── base64_lib.js
│ │ ├── lunar_lib.js
│ │ └── qrcode_lib.js
├── pages
│ └── admin
│ │ ├── content
│ │ ├── admin_content.js
│ │ ├── admin_content.json
│ │ ├── admin_content.wxml
│ │ └── admin_content.wxss
│ │ ├── index
│ │ ├── home
│ │ │ ├── admin_home.js
│ │ │ ├── admin_home.json
│ │ │ ├── admin_home.wxml
│ │ │ └── admin_home.wxss
│ │ └── login
│ │ │ ├── admin_login.js
│ │ │ ├── admin_login.json
│ │ │ ├── admin_login.wxml
│ │ │ └── admin_login.wxss
│ │ ├── meet
│ │ ├── content
│ │ │ ├── admin_meet_content.js
│ │ │ ├── admin_meet_content.json
│ │ │ ├── admin_meet_content.wxml
│ │ │ └── admin_meet_content.wxss
│ │ ├── cover
│ │ │ ├── admin_meet_cover.js
│ │ │ ├── admin_meet_cover.json
│ │ │ ├── admin_meet_cover.wxml
│ │ │ └── admin_meet_cover.wxss
│ │ ├── edit
│ │ │ ├── admin_meet_edit.js
│ │ │ ├── admin_meet_edit.json
│ │ │ ├── admin_meet_edit.wxml
│ │ │ └── admin_meet_edit.wxss
│ │ ├── export
│ │ │ ├── admin_join_export.js
│ │ │ ├── admin_join_export.json
│ │ │ ├── admin_join_export.wxml
│ │ │ └── admin_join_export.wxss
│ │ ├── join
│ │ │ ├── admin_meet_join.js
│ │ │ ├── admin_meet_join.json
│ │ │ ├── admin_meet_join.wxml
│ │ │ └── admin_meet_join.wxss
│ │ ├── list
│ │ │ ├── admin_meet_list.js
│ │ │ ├── admin_meet_list.json
│ │ │ ├── admin_meet_list.wxml
│ │ │ └── admin_meet_list.wxss
│ │ ├── record
│ │ │ ├── admin_record_list.js
│ │ │ ├── admin_record_list.json
│ │ │ ├── admin_record_list.wxml
│ │ │ └── admin_record_list.wxss
│ │ ├── scan
│ │ │ ├── admin_meet_scan.js
│ │ │ ├── admin_meet_scan.json
│ │ │ ├── admin_meet_scan.wxml
│ │ │ └── admin_meet_scan.wxss
│ │ ├── self
│ │ │ ├── admin_meet_self.js
│ │ │ ├── admin_meet_self.json
│ │ │ ├── admin_meet_self.wxml
│ │ │ └── admin_meet_self.wxss
│ │ ├── temp
│ │ │ ├── admin_temp_select.js
│ │ │ ├── admin_temp_select.json
│ │ │ ├── admin_temp_select.wxml
│ │ │ └── admin_temp_select.wxss
│ │ └── time
│ │ │ ├── admin_meet_time.js
│ │ │ ├── admin_meet_time.json
│ │ │ ├── admin_meet_time.wxml
│ │ │ └── admin_meet_time.wxss
│ │ ├── mgr
│ │ └── log
│ │ │ ├── admin_log_list.js
│ │ │ ├── admin_log_list.json
│ │ │ ├── admin_log_list.wxml
│ │ │ └── admin_log_list.wxss
│ │ ├── news
│ │ ├── add
│ │ │ ├── admin_news_add.js
│ │ │ ├── admin_news_add.json
│ │ │ ├── admin_news_add.wxml
│ │ │ └── admin_news_add.wxss
│ │ ├── admin_news_form_tpl.wxml
│ │ ├── content
│ │ │ ├── admin_news_content.js
│ │ │ ├── admin_news_content.json
│ │ │ ├── admin_news_content.wxml
│ │ │ └── admin_news_content.wxss
│ │ ├── edit
│ │ │ ├── admin_news_edit.js
│ │ │ ├── admin_news_edit.json
│ │ │ ├── admin_news_edit.wxml
│ │ │ └── admin_news_edit.wxss
│ │ └── list
│ │ │ ├── admin_news_list.js
│ │ │ ├── admin_news_list.json
│ │ │ ├── admin_news_list.wxml
│ │ │ └── admin_news_list.wxss
│ │ ├── setup
│ │ ├── about
│ │ │ ├── admin_setup_about.js
│ │ │ ├── admin_setup_about.json
│ │ │ ├── admin_setup_about.wxml
│ │ │ └── admin_setup_about.wxss
│ │ ├── contact
│ │ │ ├── admin_setup_contact.js
│ │ │ ├── admin_setup_contact.json
│ │ │ ├── admin_setup_contact.wxml
│ │ │ └── admin_setup_contact.wxss
│ │ └── qr
│ │ │ ├── admin_setup_qr.js
│ │ │ ├── admin_setup_qr.json
│ │ │ ├── admin_setup_qr.wxml
│ │ │ └── admin_setup_qr.wxss
│ │ └── user
│ │ ├── export
│ │ ├── admin_user_export.js
│ │ ├── admin_user_export.json
│ │ ├── admin_user_export.wxml
│ │ └── admin_user_export.wxss
│ │ └── list
│ │ ├── admin_user_list.js
│ │ ├── admin_user_list.json
│ │ ├── admin_user_list.wxml
│ │ └── admin_user_list.wxss
├── projects
│ └── A00
│ │ ├── about
│ │ ├── contact
│ │ │ ├── about_contact.js
│ │ │ ├── about_contact.json
│ │ │ ├── about_contact.wxml
│ │ │ └── about_contact.wxss
│ │ └── index
│ │ │ ├── about_index.js
│ │ │ ├── about_index.json
│ │ │ ├── about_index.wxml
│ │ │ └── about_index.wxss
│ │ ├── calendar
│ │ └── index
│ │ │ ├── calendar_index.js
│ │ │ ├── calendar_index.json
│ │ │ ├── calendar_index.wxml
│ │ │ └── calendar_index.wxss
│ │ ├── default
│ │ └── index
│ │ │ ├── default_index.js
│ │ │ ├── default_index.json
│ │ │ ├── default_index.wxml
│ │ │ └── default_index.wxss
│ │ ├── meet
│ │ ├── detail
│ │ │ ├── meet_detail.js
│ │ │ ├── meet_detail.json
│ │ │ ├── meet_detail.wxml
│ │ │ └── meet_detail.wxss
│ │ ├── index
│ │ │ ├── meet_index.js
│ │ │ ├── meet_index.json
│ │ │ ├── meet_index.wxml
│ │ │ └── meet_index.wxss
│ │ ├── join
│ │ │ ├── meet_join.js
│ │ │ ├── meet_join.json
│ │ │ ├── meet_join.wxml
│ │ │ └── meet_join.wxss
│ │ └── self
│ │ │ ├── meet_self.js
│ │ │ ├── meet_self.json
│ │ │ ├── meet_self.wxml
│ │ │ └── meet_self.wxss
│ │ ├── my
│ │ ├── edit
│ │ │ ├── my_edit.js
│ │ │ ├── my_edit.json
│ │ │ ├── my_edit.wxml
│ │ │ └── my_edit.wxss
│ │ ├── index
│ │ │ ├── my_index.js
│ │ │ ├── my_index.json
│ │ │ ├── my_index.wxml
│ │ │ └── my_index.wxss
│ │ ├── join
│ │ │ ├── my_join.js
│ │ │ ├── my_join.json
│ │ │ ├── my_join.wxml
│ │ │ └── my_join.wxss
│ │ └── join_detail
│ │ │ ├── my_join_detail.js
│ │ │ ├── my_join_detail.json
│ │ │ ├── my_join_detail.wxml
│ │ │ └── my_join_detail.wxss
│ │ ├── news
│ │ ├── cate1
│ │ │ ├── news_cate1.js
│ │ │ ├── news_cate1.json
│ │ │ ├── news_cate1.wxml
│ │ │ └── news_cate1.wxss
│ │ ├── cate2
│ │ │ ├── news_cate2.js
│ │ │ ├── news_cate2.json
│ │ │ ├── news_cate2.wxml
│ │ │ └── news_cate2.wxss
│ │ ├── detail
│ │ │ ├── news_detail.js
│ │ │ ├── news_detail.json
│ │ │ ├── news_detail.wxml
│ │ │ └── news_detail.wxss
│ │ └── index
│ │ │ ├── news_index.js
│ │ │ ├── news_index.json
│ │ │ ├── news_index.wxml
│ │ │ └── news_index.wxss
│ │ ├── search
│ │ ├── search.js
│ │ ├── search.json
│ │ ├── search.wxml
│ │ └── search.wxss
│ │ └── skin
│ │ ├── images
│ │ ├── default_index_bg.jpg
│ │ ├── menu
│ │ │ ├── meet_1.png
│ │ │ ├── meet_2.png
│ │ │ └── news_1.png
│ │ └── tabbar
│ │ │ ├── cate1.png
│ │ │ ├── cate1_cur.png
│ │ │ ├── day.png
│ │ │ ├── day_cur.png
│ │ │ ├── home.png
│ │ │ ├── home_cur.png
│ │ │ ├── my.png
│ │ │ └── my_cur.png
│ │ ├── skin.js
│ │ └── skin.wxss
├── setting
│ └── setting.js
├── sitemap.json
├── style
│ ├── comm
│ │ ├── animation.wxss
│ │ ├── avatar.wxss
│ │ ├── background.wxss
│ │ ├── bar.wxss
│ │ ├── base.wxss
│ │ ├── border.wxss
│ │ ├── button.wxss
│ │ ├── comm.wxss
│ │ ├── form.wxss
│ │ ├── icon.wxss
│ │ ├── image.wxss
│ │ ├── layout.wxss
│ │ ├── list.wxss
│ │ ├── load.wxss
│ │ ├── modal.wxss
│ │ ├── nav.wxss
│ │ ├── shadow.wxss
│ │ ├── table.wxss
│ │ ├── tag.wxss
│ │ └── text.wxss
│ └── project
│ │ ├── about_contact_base.wxss
│ │ ├── about_index_base.wxss
│ │ ├── base
│ │ ├── admin.wxss
│ │ ├── appt.wxss
│ │ ├── article_list.wxss
│ │ ├── detail.wxss
│ │ └── project.wxss
│ │ ├── calendar_index_base.wxss
│ │ ├── default_index_base.wxss
│ │ ├── meet_detail_base.wxss
│ │ ├── meet_index_base.wxss
│ │ ├── meet_join_base.wxss
│ │ ├── meet_self_base.wxss
│ │ ├── my_edit_base.wxss
│ │ ├── my_index_base.wxss
│ │ ├── my_join_base.wxss
│ │ ├── my_join_detail_base.wxss
│ │ ├── news_detail_base.wxss
│ │ ├── news_index_base.wxss
│ │ └── search_base.wxss
└── tpls
│ ├── project
│ ├── about_contact_tpl.wxml
│ ├── about_index_tpl.wxml
│ ├── calendar_index_tpl.wxml
│ ├── default_index_tpl.wxml
│ ├── meet_detail_tpl.wxml
│ ├── meet_index_tpl.wxml
│ ├── meet_join_tpl.wxml
│ ├── meet_self_tpl.wxml
│ ├── my_edit_tpl.wxml
│ ├── my_index_tpl.wxml
│ ├── my_join_detail_tpl.wxml
│ ├── my_join_tpl.wxml
│ ├── news_detail_tpl.wxml
│ ├── news_index_tpl.wxml
│ └── search_tpl.wxml
│ ├── public
│ ├── base_list_tpl.wxml
│ ├── list_load_tpl.wxml
│ ├── menu_tpl.wxml
│ └── top_tpl.wxml
│ └── wxs
│ └── tools.wxs
├── project.config.json
├── project.private.config.json
└── 自习室小程序安装使用手册.docx
/.gitignore:
--------------------------------------------------------------------------------
1 | # Windows
2 | [Dd]esktop.ini
3 | Thumbs.db
4 | $RECYCLE.BIN/
5 |
6 | # macOS
7 | .DS_Store
8 | .fseventsd
9 | .Spotlight-V100
10 | .TemporaryItems
11 | .Trashes
12 |
13 | # Node.js
14 | node_modules/
15 | init/
--------------------------------------------------------------------------------
/cloudfunctionTemplate/cloud.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "name": "测试",
4 | "value": {
5 | "route": "test/test",
6 | "pid": "DEMO2"
7 | }
8 | },
9 | {
10 | "name": "OA模拟",
11 | "value": {
12 | "CreateTime": 0,
13 | "Event": "subscribe",
14 | "EventKey": "",
15 | "FromUserName": "os85tuO2OaiWSHPi2UECnU5TlDrk",
16 | "MsgType": "event",
17 | "ToUserName": "gh_12824cfe1b7b",
18 | "userInfo": {
19 | "appId": "wx1a3ad7903d85f33a",
20 | "openId": "os85tuO2OaiWSHPi2UECnU5TlDrk"
21 | }
22 | }
23 | },
24 | {
25 | "name": "支付回调",
26 | "value": {
27 | "outTradeNo": "X20211128170943-T0-M999900-pb95y",
28 | "transactionId": "transactionId1",
29 | "userInfo": {
30 | "openId": "userid3243l4l3j24324324"
31 | }
32 | }
33 | },
34 | {
35 | "name": "MEET JOIN 测试",
36 | "value": {
37 | "route": "test/meet_test_join",
38 | "pid": "DEMO2"
39 | }
40 | }
41 | ]
--------------------------------------------------------------------------------
/cloudfunctions/cloud/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "permissions": {
3 | "openapi": ["wxacode.getUnlimited", "security.imgSecCheck", "security.msgSecCheck","serviceMarket.invokeService"]
4 | }
5 | }
--------------------------------------------------------------------------------
/cloudfunctions/cloud/config/biz_config.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 本模块业务相关公用
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2022-01-23 19:20:00
5 | */
6 |
7 |
8 | module.exports = {
9 |
10 | }
--------------------------------------------------------------------------------
/cloudfunctions/cloud/config/config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 |
3 | //### 环境相关
4 | CLOUD_ID: 'dev-5gf0o85o226fad1d', //你的云环境id
5 |
6 | ADMIN_NAME: 'admin', // 管理员账号(5-30位)
7 | ADMIN_PWD: '123456', // 管理员密码(5-30位)
8 |
9 |
10 | // ##################################################################
11 | PID: 'A00',
12 | IS_DEMO: false,
13 |
14 | NEWS_CATE: '1=预约规则',
15 | MEET_TYPE: '1=自习室预约,2=储物柜预约',
16 | // ##################################################################
17 | // #### 调试相关
18 | TEST_MODE: false,
19 | TEST_TOKEN_ID: '',
20 |
21 | COLLECTION_NAME: 'ax_admin|ax_cache|ax_day|ax_export|ax_join|ax_log|ax_meet|ax_news|ax_setup|ax_temp|ax_user',
22 |
23 | DATA_EXPORT_PATH: 'export/', //数据导出路径
24 | MEET_TIMEMARK_QR_PATH: 'meet/usercheckin/', //用户签到码路径
25 | SETUP_PATH: 'setup/',
26 |
27 | // ## 缓存相关
28 | IS_CACHE: true, //是否开启缓存
29 | CACHE_CALENDAR_TIME: 60 * 30, //日历缓存
30 |
31 | // #### 内容安全
32 | CLIENT_CHECK_CONTENT: false, //前台图片文字是否校验
33 | ADMIN_CHECK_CONTENT: false, //后台图片文字是否校验
34 |
35 | // #### 预约相关
36 | MEET_LOG_LEVEL: 'debug',
37 |
38 | // ### 后台业务相关
39 | ADMIN_LOGIN_EXPIRE: 86400, //管理员token过期时间 (秒)
40 | }
--------------------------------------------------------------------------------
/cloudfunctions/cloud/config/msg_config.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 消息提醒配置
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2021-11-11 14:00:00
5 | */
6 |
7 | module.exports = {
8 |
9 | /**
10 | * 打卡提醒 (20647 工具>>备忘录)
11 | * 计划名称 {{thing1.DATA}}
12 | * 完成进度 {{thing2.DATA}}
13 | * 备注 {{thing3.DATA}}
14 | * 上次打卡时间 {{time4.DATA}}
15 | *
16 | */
17 | MINI_TEMP_CARD_HAS_TIME: 'VCb4GZ-3yK5j66iVxOH5U1MClzXd2f97vFTYlN-K5JU', //有打卡时间
18 | MINI_TEMP_CARD_NO_TIME: 'VCb4GZ-3yK5j66iVxOH5U3wurLqu2QjwYCSyDgn5CTw', //无打卡时间
19 |
20 | }
--------------------------------------------------------------------------------
/cloudfunctions/cloud/framework/client/controller.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 基础控制器
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux0730 (wechat)
4 | * Date: 2020-09-05 04:00:00
5 | */
6 | class Controller {
7 |
8 | constructor(route, openId, event) {
9 | this._route = route; // 路由
10 | this._openId = openId; //用户身份
11 | this._event = event; // 所有参数
12 | this._request = event.params; //数据参数
13 |
14 | }
15 | }
16 |
17 | module.exports = Controller;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/framework/cloud/cloud_base.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 云初始化实例
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux0730 (wechat)
4 | * Date: 2020-09-05 04:00:00
5 | */
6 |
7 | const config = require('../../config/config.js');
8 |
9 | /**
10 | * 获得云实例
11 | */
12 | function getCloud() {
13 | const cloud = require('wx-server-sdk');
14 | cloud.init({
15 | env: config.CLOUD_ID
16 | });
17 | return cloud;
18 | }
19 |
20 | module.exports = {
21 | getCloud
22 | }
--------------------------------------------------------------------------------
/cloudfunctions/cloud/framework/core/app_code.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 错误代码定义
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-09-05 04:00:00
5 | */
6 | module.exports = {
7 | SUCC: 200,
8 | SVR: 500, // 服务器错误
9 | LOGIC: 1600, //逻辑错误
10 | DATA: 1301, // 数据校验错误
11 | HEADER: 1302, // header 校验错误
12 |
13 |
14 | //2000开始为业务错误代码,
15 |
16 | ADMIN_ERROR: 2401 //管理员错误
17 | }
--------------------------------------------------------------------------------
/cloudfunctions/cloud/framework/core/app_error.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 应用异常处理类
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-09-05 04:00:00
5 | */
6 |
7 |
8 | const appCode = require('./app_code.js');
9 |
10 | class AppError extends Error {
11 | constructor(message, code = appCode.LOGIC) {
12 | super(message);
13 | this.name = 'AppError';
14 | this.code = code;
15 | }
16 | }
17 |
18 | module.exports = AppError;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/framework/core/app_other.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 云函数非标业务处理
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2021-10-21 04:00:00
5 | */
6 |
7 | function handlerOther(event) {
8 | let isOther = false;
9 |
10 | if (!event) return {
11 | isOther,
12 | eventX
13 | };
14 |
15 | // 公众号事件处理
16 | if (event['FromUserName'] && event['MsgType']) {
17 | console.log('公众号事件处理');
18 | let ret = {
19 | route: 'oa/serve',
20 | params: event
21 | }
22 | return {
23 | isOther: true,
24 | eventX: ret
25 | };
26 | }
27 |
28 | return {
29 | isOther,
30 | eventX: event
31 | };
32 | }
33 |
34 |
35 | module.exports = {
36 | handlerOther,
37 | }
--------------------------------------------------------------------------------
/cloudfunctions/cloud/framework/core/app_util.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 云函数业务主逻辑函数
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2021-02-09 04:00:00
5 | */
6 |
7 | const appCode = require('./app_code.js');
8 |
9 | function handlerBasic(code, msg = '', data = {}) {
10 |
11 | switch (code) {
12 | case appCode.SUCC:
13 | msg = (msg) ? msg + ':ok' : 'ok';
14 | break;
15 | case appCode.SVR:
16 | msg = '服务器繁忙,请稍后再试';
17 | break;
18 | case appCode.LOGIC:
19 | break;
20 | case appCode.DATA:
21 | break;
22 |
23 | /*
24 | default:
25 | msg = '服务器开小差了,请稍后再试';
26 | break;*/
27 | }
28 |
29 | return {
30 | code: code,
31 | msg: msg,
32 | data: data
33 | }
34 |
35 | }
36 |
37 | function handlerSvrErr(msg = '') {
38 | return handlerBasic(appCode.SVR, msg);
39 | }
40 |
41 | function handlerSucc(msg = '') {
42 | return handlerBasic(appCode.SUCC, msg);
43 | }
44 |
45 | function handlerAppErr(msg = '', code = appCode.LOGIC) {
46 | return handlerBasic(code, msg);
47 | }
48 |
49 |
50 | function handlerData(data, msg = '') {
51 | return handlerBasic(appCode.SUCC, msg, data);
52 | }
53 |
54 | module.exports = {
55 | handlerBasic,
56 | handlerData,
57 | handlerSucc,
58 | handlerSvrErr,
59 | handlerAppErr
60 | }
--------------------------------------------------------------------------------
/cloudfunctions/cloud/framework/lib/mini_lib.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 小程序封装类库
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-09-06 14:00:00
5 | */
6 | const cloudBase = require('../cloud/cloud_base.js');
7 | const cloudUtil = require('../cloud/cloud_util.js');
8 | const config = require('../../config/config');
9 |
10 |
11 | // 消息长度截取
12 | function fmtThing(str) { //20个以内字符,可汉字、数字、字母或符号组合
13 | return str.substr(0, 20);
14 | }
15 |
16 | function fmtCharacterString(str) { //32位以内数字、字母或符号
17 | return str.substr(0, 32);
18 | }
19 |
20 | function fmtPhrase(str) { //5个以内汉字
21 | return str.substr(0, 5);
22 | }
23 |
24 |
25 |
26 | /**
27 | * 发送一次性消息
28 | * @param {*} body
29 | * @param {*} key
30 | */
31 | async function sendMiniOnceTempMsg(body, key = '') {
32 | // console.log('##sendOnceTempMsg[' + key + ']', body);
33 | let cloud = cloudBase.getCloud();
34 | try {
35 | // 默认参数
36 | body.lang = 'zh_CN';
37 | body.miniprogramState = 'formal';
38 |
39 | await cloud.openapi.subscribeMessage.send(body);
40 | } catch (err) {
41 | cloudUtil.log('##sendOnceTempMsg[' + key + ']', err);
42 | }
43 | }
44 | module.exports = {
45 | sendMiniOnceTempMsg,
46 |
47 | fmtThing,
48 | fmtCharacterString,
49 | fmtPhrase
50 | }
--------------------------------------------------------------------------------
/cloudfunctions/cloud/framework/utils/constant.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 通用常量定义
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-09-05 04:00:00
5 | */
6 | module.exports = {
7 |
8 | }
--------------------------------------------------------------------------------
/cloudfunctions/cloud/framework/utils/math_util.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 数学计算相关操作函数
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2021-10-04 04:00:00
5 | */
6 |
7 |
8 | /** 获取百分比, 保留2位小数 */
9 | function percent(num1, num2) {
10 | return Math.round(num1 / num2 * 10000) / 100.00;
11 | }
12 |
13 | /** 数组对象排序 */
14 | function arrayObjecSortAsc(property){
15 | return function(a,b){
16 | var value1 = a[property];
17 | var value2 = b[property];
18 | return value1 - value2;
19 | }
20 | }
21 |
22 | /** 数组对象排序 */
23 | function arrayObjecSortDesc(property){
24 | return function(a,b){
25 | var value1 = a[property];
26 | var value2 = b[property];
27 | return value2 - value1;
28 | }
29 | }
30 |
31 | module.exports = {
32 | percent, // 百分比,保留2位小数
33 | arrayObjecSortAsc, // 数组对象排序
34 | arrayObjecSortDesc, // 数组对象排序
35 | }
--------------------------------------------------------------------------------
/cloudfunctions/cloud/framework/utils/util.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 通用工具函数
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-09-05 04:00:00
5 | */
6 |
7 | /**
8 | * 判断变量,参数,对象属性是否定义
9 | * @param {*} val
10 | */
11 | function isDefined(val) {
12 | // == 不能判断是否为null
13 | if (val === undefined)
14 | return false;
15 | else
16 | return true;
17 | }
18 |
19 | /**
20 | * 判断对象是否为空
21 | * @param {*} obj
22 | */
23 | function isObjectNull(obj) {
24 | return (Object.keys(obj).length == 0);
25 | }
26 |
27 |
28 |
29 | /**
30 | * 休眠时间,配合await使用
31 | * @param {*} time 毫秒
32 | */
33 | function sleep(time) {
34 | return new Promise((resolve) => setTimeout(resolve, time));
35 | };
36 |
37 |
38 |
39 |
40 | module.exports = {
41 | isDefined, //判断变量,参数,对象属性是否定义
42 | sleep,
43 | isObjectNull,
44 |
45 | }
--------------------------------------------------------------------------------
/cloudfunctions/cloud/index.js:
--------------------------------------------------------------------------------
1 | const application = require('./framework/core/application.js');
2 |
3 | // 云函数入口函数
4 | exports.main = async (event, context) => {
5 | return await application.app(event, context);
6 | }
--------------------------------------------------------------------------------
/cloudfunctions/cloud/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "cloud",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "dependencies": {
12 | "date-utils": "^1.2.21",
13 | "mysql": "^2.18.1",
14 | "node-xlsx": "^0.16.1",
15 | "wx-server-sdk": "~2.1.2"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/controller/admin/admin_home_controller.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 后台登录与首页模块
3 | * Date: 2021-03-15 19:20:00
4 | */
5 |
6 | const BaseAdminController = require('./base_admin_controller.js');
7 | const AdminHomeService = require('../../service/admin/admin_home_service.js');
8 |
9 | class AdminHomeController extends BaseAdminController {
10 |
11 |
12 | // 管理首页
13 | async adminHome() {
14 | await this.isAdmin();
15 |
16 | // 数据校验
17 | let rules = {
18 |
19 | };
20 |
21 | // 取得数据
22 | let input = this.validateData(rules);
23 |
24 | let service = new AdminHomeService();
25 | return await service.adminHome();
26 | }
27 |
28 | // 清除缓存
29 | async clearCache() {
30 | let service = new AdminHomeService();
31 | await service.clearCache();
32 | }
33 |
34 | // 管理员登录
35 | async adminLogin() {
36 |
37 | // 数据校验
38 | let rules = {
39 | name: 'required|string|min:5|max:30|name=管理员名',
40 | pwd: 'required|string|min:5|max:30|name=密码',
41 | };
42 |
43 | // 取得数据
44 | let input = this.validateData(rules);
45 |
46 | let service = new AdminHomeService();
47 | return await service.adminLogin(input.name, input.pwd);
48 | }
49 |
50 | }
51 |
52 | module.exports = AdminHomeController;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/controller/admin/admin_mgr_controller.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 管理员控制模块
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2021-07-11 10:20:00
5 | */
6 |
7 | const BaseAdminController = require('./base_admin_controller.js');
8 | const LogModel = require('../../model/log_model.js');
9 |
10 | const AdminMgrService = require('../../service/admin/admin_mgr_service.js');
11 | const timeUtil = require('../../../framework/utils/time_util.js');
12 | const contentCheck = require('../../../framework/validate/content_check.js');
13 |
14 | class AdminMgrController extends BaseAdminController {
15 |
16 |
17 | async getLogList() {
18 | await this.isAdmin();
19 |
20 | // 数据校验
21 | let rules = {
22 | search: 'string|min:1|max:30|name=搜索条件',
23 | sortType: 'string|name=搜索类型',
24 | sortVal: 'name=搜索类型值',
25 | orderBy: 'object|name=排序',
26 | whereEx: 'object|name=附加查询条件',
27 | page: 'must|int|default=1',
28 | size: 'int',
29 | isTotal: 'bool',
30 | oldTotal: 'int',
31 | };
32 |
33 | // 取得数据
34 | let input = this.validateData(rules);
35 |
36 | let service = new AdminMgrService();
37 | let result = await service.getLogList(input);
38 |
39 | // 数据格式化
40 | let list = result.list;
41 | for (let k in list) {
42 | list[k].LOG_TYPE_DESC = LogModel.getDesc('TYPE', list[k].LOG_TYPE);
43 | list[k].LOG_ADD_TIME = timeUtil.timestamp2Time(list[k].LOG_ADD_TIME);
44 | }
45 | result.list = list;
46 |
47 | return result;
48 |
49 | }
50 | }
51 |
52 | module.exports = AdminMgrController;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/controller/admin/admin_setup_controller.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 设置控制模块
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2021-07-11 10:20:00
5 | */
6 |
7 | const BaseAdminController = require('./base_admin_controller.js');
8 | const AdminSetupService = require('../../service/admin/admin_setup_service.js');
9 |
10 | const contentCheck = require('../../../framework/validate/content_check.js');
11 |
12 | class AdminSetupController extends BaseAdminController {
13 |
14 |
15 | /** 关于我们 */
16 | async setupAbout() {
17 | await this.isAdmin();
18 |
19 | // 数据校验
20 | let rules = {
21 | about: 'must|string|min:10|max:50000|name=关于我们',
22 | aboutPic: 'array|name=介绍图片',
23 | };
24 |
25 | // 取得数据
26 | let input = this.validateData(rules);
27 | let service = new AdminSetupService();
28 | await service.setupAbout(input);
29 |
30 | }
31 |
32 | /** 联系我们 */
33 | async setupContact() {
34 | await this.isAdmin();
35 |
36 | // 数据校验
37 | let rules = {
38 | phone: 'string|name=电话',
39 | address: 'string|name=地址',
40 | servicePic: 'array|name=客服二维码图片',
41 | officePic: 'array|name=官微二维码图片',
42 | };
43 |
44 | // 取得数据
45 | let input = this.validateData(rules);
46 | let service = new AdminSetupService();
47 | await service.setupContact(input);
48 |
49 | }
50 |
51 | async genMiniQr() {
52 | await this.isAdmin();
53 | let service = new AdminSetupService();
54 | return await service.genMiniQr();
55 | }
56 | }
57 |
58 | module.exports = AdminSetupController;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/controller/admin/base_admin_controller.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 后台管理控制模块
3 | * Date: 2021-03-15 19:20:00
4 | */
5 |
6 | const BaseController = require('../base_controller.js');
7 | const BaseAdminService = require('../../service/admin/base_admin_service.js');
8 |
9 | const timeUtil = require('../../../framework/utils/time_util.js');
10 |
11 | class AdminController extends BaseController {
12 |
13 | constructor(route, openId, event) {
14 | super(route, openId, event);
15 |
16 | // 当前时间戳
17 | this._timestamp = timeUtil.time();
18 |
19 | this._admin = null;
20 | this._adminId = '0';
21 |
22 | }
23 |
24 | /** 是否管理员 */
25 | async isAdmin() {
26 | // 判断是否管理员
27 | let service = new BaseAdminService();
28 | let admin = await service.isAdmin(this._token);
29 | this._admin = admin;
30 | this._adminId = admin.ADMIN_ID;
31 | }
32 |
33 | /** 是否超级管理员 */
34 | async isSuperAdmin() {
35 | // 判断是否管理员
36 | let service = new BaseAdminService();
37 | let admin = await service.isSuperAdmin(this._token);
38 | this._admin = admin;
39 | this._adminId = admin.ADMIN_ID;
40 | }
41 |
42 | /** 记录日志 */
43 | async log(content, type) {
44 | let service = new BaseAdminService();
45 | await service.insertLog(content, this._admin, type);
46 | }
47 |
48 | /**日志除前获取名称 */
49 | async getNameBeforeLog(type, oid) {
50 | let service = new BaseAdminService();
51 | return await service.getNameBeforeLog(type, oid);
52 | }
53 |
54 | }
55 |
56 | module.exports = AdminController;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/controller/check_controller.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 内容检测控制器
3 | * Date: 2021-03-15 19:20:00
4 | */
5 |
6 | const BaseController = require('./base_controller.js');
7 | const contentCheck = require('../../framework/validate/content_check.js');
8 |
9 | class CheckController extends BaseController {
10 |
11 | /**
12 | * 图片校验
13 | */
14 | async checkImg() {
15 |
16 | // 数据校验
17 | let rules = {
18 | img: 'name=img',
19 | mine: 'must|default=jpg',
20 | };
21 |
22 | // 取得数据
23 | let input = this.validateData(rules);
24 |
25 | return await contentCheck.checkImg(input.img, 'jpg');
26 |
27 | }
28 |
29 | }
30 |
31 | module.exports = CheckController;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/controller/home_controller.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 全局或者主页模块控制器
3 | * Date: 2020-11-05 10:20:00
4 | */
5 |
6 | const BaseController = require('./base_controller.js');
7 | const HomeService = require('../service/home_service.js');
8 | const timeUtil = require('../../framework/utils/time_util.js');
9 | const config = require('../../config/config.js');
10 |
11 | class HomeController extends BaseController {
12 |
13 | /** 获取所有配置 */
14 | async getSetupAll() {
15 |
16 | // 数据校验
17 | let rules = {};
18 |
19 | // 取得数据
20 | let input = this.validateData(rules);
21 |
22 | let service = new HomeService();
23 | let result = await service.getSetup('SETUP_ABOUT,SETUP_ABOUT_PIC,SETUP_ADDRESS,SETUP_OFFICE_PIC,SETUP_PHONE,SETUP_SERVICE_PIC');
24 |
25 | return result;
26 |
27 | }
28 | }
29 |
30 | module.exports = HomeController;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/controller/my_controller.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 用户中心模块控制器
3 | * Date: 2021-03-15 19:20:00
4 | */
5 |
6 | const BaseController = require('./base_controller.js');
7 | class MyController extends BaseController {
8 |
9 |
10 |
11 |
12 | }
13 |
14 | module.exports = MyController;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/controller/passport_controller.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: passport模块控制器
3 | * Date: 2021-03-15 19:20:00
4 | */
5 |
6 | const BaseController = require('./base_controller.js');
7 | const PassportService = require('../service/passport_service.js');
8 | const contentCheck = require('../../framework/validate/content_check.js');
9 | const timeUtil = require('../../framework/utils/time_util.js');
10 | const util = require('../../framework/utils/util.js');
11 | const config = require('../../config/config.js');
12 |
13 | class PassportController extends BaseController {
14 |
15 | /** 取得我的用户信息 */
16 | async getMyDetail() {
17 | let service = new PassportService();
18 | return await service.getMyDetail(this._userId);
19 | }
20 |
21 | /** 获取手机号码 */
22 | async getPhone() {
23 |
24 | // 数据校验
25 | let rules = {
26 | cloudID: 'must|string|min:1|max:200|name=cloudID',
27 | };
28 |
29 | // 取得数据
30 | let input = this.validateData(rules);
31 |
32 |
33 | let service = new PassportService();
34 | return await service.getPhone(input.cloudID);
35 | }
36 |
37 |
38 |
39 |
40 | /** 修改用户资料 */
41 | async editBase() {
42 | // 数据校验
43 | let rules = {
44 | name: 'must|string|min:1|max:20',
45 | mobile: 'must|mobile|name=手机',
46 | city: 'string|max:100|name=所在城市',
47 | work: 'string|max:100|name=所在单位',
48 | trade: 'string|max:100|name=行业领域',
49 | };
50 |
51 | // 取得数据
52 | let input = this.validateData(rules);
53 |
54 | // 内容审核
55 | await contentCheck.checkTextMultiClient(input);
56 |
57 | let service = new PassportService();
58 | return await service.editBase(this._userId, input);
59 | }
60 |
61 | }
62 |
63 | module.exports = PassportController;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/controller/test/test_controller.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 测试模块控制器
3 | * Date: 2021-03-15 19:20:00
4 | */
5 |
6 | const BaseController = require('../base_controller.js');
7 | const config = require('../../../config/config.js');
8 | class TestController {
9 |
10 | async test() {
11 | console.log('1111')
12 |
13 | let userId = 'userid3243l4l3j24324324';
14 |
15 | console.log(__filename);
16 | }
17 |
18 | }
19 |
20 | module.exports = TestController;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/model/admin_model.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 系统管理员实体
3 | * Date: 2021-03-15 19:20:00
4 | */
5 |
6 |
7 | const BaseModel = require('./base_model.js');
8 |
9 | class AdminModel extends BaseModel {
10 |
11 | }
12 |
13 | // 集合名
14 | AdminModel.CL = "ax_admin";
15 |
16 | AdminModel.DB_STRUCTURE = {
17 | _pid: 'string|true',
18 | ADMIN_ID: 'string|true',
19 | ADMIN_NAME: 'string|true',
20 | ADMIN_PHONE: 'string|true|comment=登录电话',
21 | ADMIN_STATUS: 'int|true|default=1|comment=状态:0=禁用 1=启用',
22 |
23 | ADMIN_LOGIN_CNT: 'int|true|default=0|comment=登录次数',
24 | ADMIN_LOGIN_TIME: 'int|true|default=0|comment=最后登录时间',
25 | ADMIN_TYPE: 'int|true|default=0|comment=类型 0=普通管理员 1=超级管理员',
26 |
27 | ADMIN_TOKEN: 'string|false|comment=当前登录token',
28 | ADMIN_TOKEN_TIME: 'int|true|default=0|comment=当前登录token time',
29 |
30 | ADMIN_ADD_TIME: 'int|true',
31 | ADMIN_EDIT_TIME: 'int|true',
32 | ADMIN_ADD_IP: 'string|false',
33 | ADMIN_EDIT_IP: 'string|false',
34 | };
35 |
36 | // 字段前缀
37 | AdminModel.FIELD_PREFIX = "ADMIN_";
38 |
39 |
40 |
41 |
42 |
43 |
44 | module.exports = AdminModel;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/model/cache_model.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 缓存实体
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2022-01-26 19:20:00
5 | */
6 |
7 |
8 | const BaseModel = require('./base_model.js');
9 |
10 | class CacheModel extends BaseModel {
11 |
12 | }
13 |
14 | // 集合名
15 | CacheModel.CL = "ax_cache";
16 |
17 | CacheModel.DB_STRUCTURE = {
18 | _pid: 'string|true',
19 | CACHE_ID: 'string|true',
20 |
21 | CACHE_KEY: 'string|true',
22 | CACHE_VALUE: 'object|true',
23 |
24 | CACHE_TIMEOUT: 'int|true|comment=超时时间,毫秒',
25 |
26 | CACHE_ADD_TIME: 'int|true',
27 | CACHE_EDIT_TIME: 'int|true',
28 | CACHE_ADD_IP: 'string|false',
29 | CACHE_EDIT_IP: 'string|false',
30 | };
31 |
32 | // 字段前缀
33 | CacheModel.FIELD_PREFIX = "CACHE_";
34 |
35 | module.exports = CacheModel;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/model/day_model.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 预约日期设置实体
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2021-01-25 19:20:00
5 | */
6 |
7 |
8 | const BaseModel = require('./base_model.js');
9 |
10 | class DayModel extends BaseModel {
11 |
12 | }
13 |
14 | // 集合名
15 | DayModel.CL = "ax_day";
16 |
17 | DayModel.DB_STRUCTURE = {
18 | _pid: 'string|true',
19 | DAY_ID: 'string|true',
20 | DAY_MEET_ID: 'string|true',
21 |
22 | day: 'string|true|comment=日期 yyyy-mm-dd',
23 | dayDesc: 'string|true|comment=描述',
24 | times: 'array|true|comment=具体时间段',
25 | /*
26 | {
27 | 1. mark=唯一性标识,
28 | 2. start=开始时间点hh:mm ~,
29 | 3. end=结束时间点hh:mm,
30 | 4. isLimit=是否人数限制,
31 | 5. limit=报名上限,
32 | 6. status=状态 0/1
33 | 7. stat:{ //统计数据
34 | succCnt=1预约成功*,
35 | cancelCnt=10已取消,
36 | adminCancelCnt=99后台取消
37 | }
38 | }',
39 | */
40 |
41 | DAY_ADD_TIME: 'int|true',
42 | DAY_EDIT_TIME: 'int|true',
43 | DAY_ADD_IP: 'string|false',
44 | DAY_EDIT_IP: 'string|false',
45 | };
46 |
47 | // 字段前缀
48 | DayModel.FIELD_PREFIX = "DAY_";
49 |
50 |
51 |
52 | module.exports = DayModel;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/model/export_model.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 导出数据表
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2021-03-01 19:20:00
5 | */
6 |
7 |
8 | const BaseModel = require('./base_model.js');
9 |
10 | class ExportModel extends BaseModel {
11 |
12 | }
13 |
14 | // 集合名
15 | ExportModel.CL = "ax_export";
16 |
17 | ExportModel.DB_STRUCTURE = {
18 | _pid: 'string|true',
19 | EXPORT_ID: 'string|true',
20 | EXPORT_KEY: 'string|true',
21 | EXPORT_CLOUD_ID: 'string|true|comment=cloudID',
22 |
23 | EXPORT_ADD_TIME: 'int|true',
24 | EXPORT_EDIT_TIME: 'int|true',
25 | EXPORT_ADD_IP: 'string|false',
26 | EXPORT_EDIT_IP: 'string|false',
27 | };
28 |
29 | // 字段前缀
30 | ExportModel.FIELD_PREFIX = "EXPORT_";
31 |
32 |
33 | module.exports = ExportModel;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/model/log_model.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 后台操作日志实体
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-10-16 19:20:00
5 | */
6 |
7 |
8 | const BaseModel = require('./base_model.js');
9 |
10 | class LogModel extends BaseModel {
11 |
12 | }
13 |
14 | // 集合名
15 | LogModel.CL = "ax_log";
16 |
17 | LogModel.DB_STRUCTURE = {
18 | _pid: 'string|true',
19 | LOG_ID: 'string|true',
20 |
21 | LOG_ADMIN_ID: 'string|true|comment=管理员',
22 | LOG_ADMIN_PHONE: 'string|false',
23 | LOG_ADMIN_NAME: 'string|true',
24 |
25 | LOG_CONTENT: 'string|true',
26 |
27 | LOG_TYPE: 'int|true|comment=日志类型 ',
28 |
29 | LOG_ADD_TIME: 'int|true',
30 | LOG_EDIT_TIME: 'int|true',
31 | LOG_ADD_IP: 'string|false',
32 | LOG_EDIT_IP: 'string|false',
33 | };
34 |
35 | // 字段前缀
36 | LogModel.FIELD_PREFIX = "LOG_";
37 |
38 | LogModel.TYPE = {
39 | USER: 0,
40 | MEET: 1,
41 | NEWS: 2,
42 | SYS: 99
43 | }
44 | LogModel.TYPE_DESC = {
45 | USER: '用户',
46 | MEET: '预约/活动',
47 | NEWS: '内容/文章',
48 | SYS: '系统'
49 | }
50 |
51 | module.exports = LogModel;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/model/meet_model.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 预约实体
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-12-07 19:20:00
5 | * Version : CCMiniCloud Framework Ver 2.0.1 ALL RIGHTS RESERVED BY 明章科技
6 | */
7 |
8 |
9 | const BaseModel = require('./base_model.js');
10 |
11 | class MeetModel extends BaseModel {
12 |
13 | }
14 |
15 | // 集合名
16 | MeetModel.CL = "ax_meet";
17 |
18 | MeetModel.DB_STRUCTURE = {
19 | _pid: 'string|true',
20 | MEET_ID: 'string|true',
21 | MEET_ADMIN_ID: 'string|true|comment=添加的管理员',
22 | MEET_TITLE: 'string|true|comment=标题',
23 |
24 | MEET_CONTENT: 'array|true|default=[]|comment=详细介绍',
25 | /* img=cloudID, text=文本
26 | [{type:'text/img',val:''}]
27 | */
28 |
29 | // MEET_DAYS_SET: //**** 映射到day表
30 | MEET_DAYS: 'array|true|default=[]|comment=最近一次修改保存的可用日期',
31 |
32 | MEET_TYPE_ID: 'string|true|comment=分类编号',
33 | MEET_TYPE_NAME: 'string|true|comment=分类冗余',
34 |
35 | MEET_IS_SHOW_LIMIT: 'int|true|default=1|comment=是否显示可预约人数',
36 |
37 | MEET_STYLE_SET: 'object|true|default={}|comment=样式设置',
38 | /*{
39 | desc: 'string|false|comment=简介',
40 | pic:' string|false|default=[]|comment=封面图cloudId]'
41 | }
42 | */
43 |
44 | MEET_FORM_SET: 'array|true|default=[]|comment=表单字段设置',
45 |
46 |
47 | MEET_STATUS: 'int|true|default=1|comment=状态 0=未启用,1=使用中,9=停止预约,10=已关闭',
48 | MEET_ORDER: 'int|true|default=9999',
49 |
50 | MEET_ADD_TIME: 'int|true',
51 | MEET_EDIT_TIME: 'int|true',
52 | MEET_ADD_IP: 'string|false',
53 | MEET_EDIT_IP: 'string|false',
54 | };
55 |
56 | // 字段前缀
57 | MeetModel.FIELD_PREFIX = "MEET_";
58 |
59 | /**
60 | * 状态 0=未启用,1=使用中,9=停止预约,10=已关闭
61 | */
62 | MeetModel.STATUS = {
63 | UNUSE: 0,
64 | COMM: 1,
65 | OVER: 9,
66 | CLOSE: 10
67 | };
68 |
69 | MeetModel.STATUS_DESC = {
70 | UNUSE: '未启用',
71 | COMM: '使用中',
72 | OVER: '停止预约(可见)',
73 | CLOSE: '已关闭(不可见)'
74 | };
75 |
76 |
77 |
78 | module.exports = MeetModel;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/model/news_model.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 资讯实体
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-10-28 19:20:00
5 | */
6 |
7 |
8 | const BaseModel = require('./base_model.js');
9 |
10 | class NewsModel extends BaseModel {
11 |
12 | }
13 |
14 | // 集合名
15 | NewsModel.CL = "ax_news";
16 |
17 | NewsModel.DB_STRUCTURE = {
18 | _pid: 'string|true',
19 | NEWS_ID: 'string|true',
20 | NEWS_ADMIN_ID: 'string|true',
21 |
22 | NEWS_TYPE: 'int|true|default=0|comment=类型 0=本地文章,1=外部链接',
23 | NEWS_TITLE: 'string|false|comment=标题',
24 | NEWS_DESC: 'string|false|comment=描述',
25 | NEWS_URL: 'string|false|comment=外部链接URL',
26 | NEWS_STATUS: 'int|true|default=1|comment=状态 0/1',
27 |
28 | NEWS_CATE_ID: 'string|true|comment=分类编号',
29 | NEWS_CATE_NAME: 'string|true|comment=分类冗余',
30 |
31 | NEWS_ORDER: 'int|true|default=9999',
32 |
33 | NEWS_HOME: 'int|true|default=9999|comment=推荐到首页',
34 |
35 | NEWS_CONTENT: 'array|true|default=[]|comment=内容',
36 |
37 | NEWS_VIEW_CNT: 'int|true|default=0|comment=访问次数',
38 | NEWS_FAV_CNT: 'int|true|default=0|comment=收藏人数',
39 | NEWS_COMMENT_CNT: 'int|true|default=0|comment=评论数',
40 | NEWS_LIKE_CNT: 'int|true|default=0|comment=点赞数',
41 |
42 |
43 | NEWS_PIC: 'array|false|default=[]|comment=附加图片 [cloudId1,cloudId2,cloudId3...]',
44 |
45 | NEWS_ADD_TIME: 'int|true',
46 | NEWS_EDIT_TIME: 'int|true',
47 | NEWS_ADD_IP: 'string|false',
48 | NEWS_EDIT_IP: 'string|false',
49 | };
50 |
51 | // 字段前缀
52 | NewsModel.FIELD_PREFIX = "NEWS_";
53 |
54 |
55 | module.exports = NewsModel;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/model/setup_model.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 系统设置实体
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-11-05 19:20:00
5 | * Version : CCMiniCloud Framework Ver 2.0.1 ALL RIGHTS RESERVED BY 明章科技
6 | */
7 |
8 |
9 | const BaseAlumniModel = require('./base_model.js');
10 |
11 | class SetupModel extends BaseAlumniModel {
12 |
13 | }
14 |
15 | // 集合名
16 | SetupModel.CL = "ax_setup";
17 |
18 | SetupModel.DB_STRUCTURE = {
19 | _pid: 'string|true',
20 | SETUP_ID: 'string|true',
21 |
22 | SETUP_NAME: 'string|false',
23 |
24 | SETUP_ABOUT: 'string|false|comment=关于我们',
25 | SETUP_ABOUT_PIC: 'array|false|default=[]|comment=关于我们的图片cloudId',
26 |
27 | SETUP_SERVICE_PIC: 'array|false|default=[]|comment=客服图片cloudId',
28 | SETUP_OFFICE_PIC: 'array|false|default=[]|comment=官微图片cloudId',
29 |
30 | SETUP_ADDRESS: 'string|false|comment=地址',
31 | SETUP_PHONE: 'string|false|comment=电话',
32 |
33 | SETUP_ADD_TIME: 'int|true',
34 | SETUP_EDIT_TIME: 'int|true',
35 | SETUP_ADD_IP: 'string|false',
36 | SETUP_EDIT_IP: 'string|false',
37 | };
38 |
39 | // 字段前缀
40 | SetupModel.FIELD_PREFIX = "SETUP_";
41 |
42 |
43 |
44 | module.exports = SetupModel;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/model/temp_model.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 模板实体
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2022-01-02 19:20:00
5 | * Version : CCMiniCloud Framework Ver 2.0.1 ALL RIGHTS RESERVED BY 明章科技
6 | */
7 |
8 |
9 | const BaseModel = require('./base_model.js');
10 |
11 | class TempModel extends BaseModel {
12 |
13 | }
14 |
15 | // 集合名
16 | TempModel.CL = "ax_temp";
17 |
18 | TempModel.DB_STRUCTURE = {
19 | _pid: 'string|true',
20 | TEMP_ID: 'string|true',
21 | TEMP_NAME: 'string|true|comment=名字',
22 |
23 | TEMP_TIMES: 'array|true|comment=时间段',
24 |
25 |
26 | TEMP_ADD_TIME: 'int|true',
27 | TEMP_EDIT_TIME: 'int|true',
28 | TEMP_ADD_IP: 'string|false',
29 | TEMP_EDIT_IP: 'string|false',
30 | };
31 |
32 | // 字段前缀
33 | TempModel.FIELD_PREFIX = "TEMP_";
34 |
35 | module.exports = TempModel;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/model/user_model.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 用户实体
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-10-14 19:20:00
5 | */
6 |
7 |
8 | const BaseModel = require('./base_model.js');
9 | class UserModel extends BaseModel {}
10 |
11 | // 集合名
12 | UserModel.CL = "ax_user";
13 |
14 | UserModel.DB_STRUCTURE = {
15 | _pid: 'string|true',
16 | USER_ID: 'string|true',
17 |
18 | USER_MINI_OPENID: 'string|true|comment=小程序openid',
19 | USER_STATUS: 'int|true|default=1|comment=状态 0=待审核,1=正常',
20 |
21 | USER_NAME: 'string|false|comment=用户姓名',
22 | USER_MOBILE: 'string|false|comment=联系电话',
23 |
24 | USER_WORK: 'string|false|comment=所在单位',
25 | USER_CITY: 'string|false|comment=所在城市',
26 | USER_TRADE: 'string|false|comment=职业领域',
27 |
28 |
29 | USER_LOGIN_CNT: 'int|true|default=0|comment=登陆次数',
30 | USER_LOGIN_TIME: 'int|false|comment=最近登录时间',
31 |
32 |
33 | USER_ADD_TIME: 'int|true',
34 | USER_ADD_IP: 'string|false',
35 |
36 | USER_EDIT_TIME: 'int|true',
37 | USER_EDIT_IP: 'string|false',
38 | }
39 |
40 | // 字段前缀
41 | UserModel.FIELD_PREFIX = "USER_";
42 |
43 | /**
44 | * 状态 0=待审核,1=正常
45 | */
46 | UserModel.STATUS = {
47 | UNUSE: 0,
48 | COMM: 1
49 | };
50 |
51 | UserModel.STATUS_DESC = {
52 | UNUSE: '待审核',
53 | COMM: '正常'
54 | };
55 |
56 |
57 | module.exports = UserModel;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/service/admin/admin_mgr_service.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 管理员管理
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2021-07-11 07:48:00
5 | */
6 |
7 | const BaseAdminService = require('./base_admin_service.js');
8 |
9 | const util = require('../../../framework/utils/util.js');
10 | const AdminModel = require('../../model/admin_model.js');
11 | const LogModel = require('../../model/log_model.js');
12 |
13 |
14 | class AdminMgrService extends BaseAdminService {
15 |
16 |
17 | /** 取得日志分页列表 */
18 | async getLogList({
19 | search, // 搜索条件
20 | sortType, // 搜索菜单
21 | sortVal, // 搜索菜单
22 | orderBy, // 排序
23 | whereEx, //附加查询条件
24 | page,
25 | size,
26 | oldTotal = 0
27 | }) {
28 |
29 | orderBy = orderBy || {
30 | LOG_ADD_TIME: 'desc'
31 | };
32 | let fields = '*';
33 | let where = {};
34 |
35 | if (util.isDefined(search) && search) {
36 | where.or = [{
37 | LOG_CONTENT: ['like', search]
38 | }, {
39 | LOG_ADMIN_NAME: ['like', search]
40 | }, {
41 | LOG_ADD_IP: ['like', search]
42 | }];
43 |
44 | } else if (sortType && util.isDefined(sortVal)) {
45 | // 搜索菜单
46 | switch (sortType) {
47 | case 'type':
48 | // 按类型
49 | where.LOG_TYPE = Number(sortVal);
50 | break;
51 | }
52 | }
53 | let result = await LogModel.getList(where, fields, orderBy, page, size, true, oldTotal);
54 |
55 |
56 | return result;
57 | }
58 |
59 | }
60 |
61 | module.exports = AdminMgrService;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/service/admin/admin_setup_service.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 设置管理
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2021-07-11 07:48:00
5 | */
6 |
7 | const BaseAdminService = require('./base_admin_service.js');
8 | const cloudBase = require('../../../framework/cloud/cloud_base.js');
9 | const cloudUtil = require('../../../framework/cloud/cloud_util.js');
10 | const SetupModel = require('../../model/setup_model.js');
11 | const config = require('../../../config/config.js');
12 |
13 | class AdminSetupService extends BaseAdminService {
14 |
15 |
16 | /** 关于我们 */
17 | async setupAbout({
18 | about,
19 | aboutPic
20 | }) {
21 |
22 | this.AppError('此功能暂不开放,如有需要请加作者微信:cclinux0730');
23 | }
24 |
25 | /** 联系我们设置 */
26 | async setupContact({
27 | address,
28 | phone,
29 | officePic,
30 | servicePic,
31 | }) {
32 |
33 | this.AppError('此功能暂不开放,如有需要请加作者微信:cclinux0730');
34 | }
35 |
36 | /** 小程序码 */
37 | async genMiniQr() {
38 | //生成小程序qr buffer
39 | let cloud = cloudBase.getCloud();
40 |
41 | let page = "projects/" + this.getProjectId() + "/default/index/default_index";
42 | console.log(page);
43 |
44 | let result = await cloud.openapi.wxacode.getUnlimited({
45 | scene: 'qr',
46 | width: 280,
47 | check_path: false,
48 | env_version: 'release', //trial,develop
49 | page
50 | });
51 |
52 | let upload = await cloud.uploadFile({
53 | cloudPath: config.SETUP_PATH + 'qr.png',
54 | fileContent: result.buffer,
55 | });
56 |
57 | if (!upload || !upload.fileID) return;
58 |
59 | return upload.fileID;
60 | }
61 |
62 | }
63 |
64 | module.exports = AdminSetupService;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/service/admin/admin_temp_service.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 预约后台管理
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2021-12-08 07:48:00
5 | */
6 |
7 | const BaseAdminService = require('./base_admin_service.js');
8 | const TempModel = require('../../model/temp_model.js');
9 |
10 | class AdminTempService extends BaseAdminService {
11 |
12 | /**添加模板 */
13 | async insertTemp({
14 | name,
15 | times,
16 | }) {
17 | this.AppError('此功能暂不开放,如有需要请加作者微信:cclinux0730');
18 | }
19 |
20 | /**更新数据 */
21 | async editTemp({
22 | id,
23 | limit,
24 | isLimit
25 | }) {
26 | this.AppError('此功能暂不开放,如有需要请加作者微信:cclinux0730');
27 | }
28 |
29 |
30 | /**删除数据 */
31 | async delTemp(id) {
32 | this.AppError('此功能暂不开放,如有需要请加作者微信:cclinux0730');
33 | }
34 |
35 |
36 | /**分页列表 */
37 | async getTempList() {
38 | let orderBy = {
39 | 'TEMP_ADD_TIME': 'desc'
40 | };
41 | let fields = 'TEMP_NAME,TEMP_TIMES';
42 |
43 | let where = {};
44 | return await TempModel.getAll(where, fields, orderBy);
45 | }
46 | }
47 |
48 | module.exports = AdminTempService;
--------------------------------------------------------------------------------
/cloudfunctions/cloud/project/service/home_service.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 全局/首页模块业务逻辑
3 | * Date: 2021-03-15 04:00:00
4 | */
5 |
6 | const BaseService = require('./base_service.js');
7 |
8 | const SetupModel = require('../model/setup_model.js');
9 | const dataUtil = require('../../framework/utils/data_util.js');
10 | const config = require('../../config/config.js');
11 |
12 | class HomeService extends BaseService {
13 | /**
14 | * 取得系统设置
15 | * @param {*} param0
16 | */
17 | async getSetup(fields = '*') {
18 | let where = {}
19 | let setup = await SetupModel.getOne(where, fields);
20 |
21 | if (!setup) {
22 | let data = {
23 | SETUP_ABOUT: '关于我们'
24 | };
25 | await SetupModel.insert(data);
26 | setup = await SetupModel.getOne(where, fields);
27 | }
28 | return setup;
29 |
30 | }
31 | }
32 |
33 | module.exports = HomeService;
--------------------------------------------------------------------------------
/demo/二维码.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/二维码.png
--------------------------------------------------------------------------------
/demo/储物柜预约.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/储物柜预约.png
--------------------------------------------------------------------------------
/demo/填报预约.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/填报预约.png
--------------------------------------------------------------------------------
/demo/工单.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/工单.png
--------------------------------------------------------------------------------
/demo/我的.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/我的.png
--------------------------------------------------------------------------------
/demo/日历.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/日历.png
--------------------------------------------------------------------------------
/demo/自习室预约.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/自习室预约.png
--------------------------------------------------------------------------------
/demo/菜单.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/菜单.png
--------------------------------------------------------------------------------
/demo/预约成.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/预约成.png
--------------------------------------------------------------------------------
/demo/预约添加.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/预约添加.png
--------------------------------------------------------------------------------
/demo/预约管理.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/预约管理.png
--------------------------------------------------------------------------------
/demo/预约规则.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/预约规则.png
--------------------------------------------------------------------------------
/demo/预约详情.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/预约详情.png
--------------------------------------------------------------------------------
/demo/首页.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/demo/首页.png
--------------------------------------------------------------------------------
/miniprogram/app.js:
--------------------------------------------------------------------------------
1 | const setting = require('./setting/setting.js');
2 |
3 | App({
4 | onLaunch: function (options) {
5 |
6 | if (!wx.cloud) {
7 | console.error('请使用 2.2.3 或以上的基础库以使用云能力')
8 | } else {
9 | wx.cloud.init({
10 | // env 参数说明:
11 | // env 参数决定接下来小程序发起的云开发调用(wx.cloud.xxx)会默认请求到哪个云环境的资源
12 | // 此处请填入环境 ID, 环境 ID 可打开云控制台查看
13 | // 如不填则使用默认环境(第一个创建的环境)
14 | // env: 'my-env-id',
15 | env: setting.CLOUD_ID,
16 | traceUser: true,
17 | })
18 | }
19 |
20 | this.globalData = {};
21 |
22 | // 用于自定义导航栏
23 | wx.getSystemInfo({
24 | success: e => {
25 | this.globalData.statusBar = e.statusBarHeight;
26 | let capsule = wx.getMenuButtonBoundingClientRect();
27 | if (capsule) {
28 | this.globalData.custom = capsule;
29 | this.globalData.customBar = capsule.bottom + capsule.top - e.statusBarHeight;
30 | } else {
31 | this.globalData.customBar = e.statusBarHeight + 50;
32 | }
33 | }
34 | });
35 | },
36 |
37 |
38 | /*
39 | onShow: function (options) {
40 | // 启动,或者从后台进入前台
41 | //GroupBiz.initGroupShareTicket(options);
42 | },
43 | onHide: function () {
44 | // 小程序从前台进入后台
45 | //GroupBiz.clearGroupShareTicket();
46 | }*/
47 | })
--------------------------------------------------------------------------------
/miniprogram/app.wxss:
--------------------------------------------------------------------------------
1 | @import "style/comm/comm.wxss";
2 | @import "style/project/base/project.wxss";
3 |
--------------------------------------------------------------------------------
/miniprogram/behavior/about_contact_bh.js:
--------------------------------------------------------------------------------
1 | const cloudHelper = require('../helper/cloud_helper.js');
2 | const pageHelper = require('../helper/page_helper.js');
3 |
4 | module.exports = Behavior({
5 |
6 | /**
7 | * 页面的初始数据
8 | */
9 | data: {
10 | isLoad: false
11 | },
12 |
13 | methods: {
14 | /**
15 | * 生命周期函数--监听页面加载
16 | */
17 | onLoad: async function (options) {
18 | const accountInfo = wx.getAccountInfoSync();
19 | this.setData({
20 | accountInfo
21 | });
22 |
23 | this._loadDetail();
24 | },
25 |
26 | _loadDetail: async function () {
27 | let opts = {
28 | title: 'bar'
29 | }
30 | let about = await cloudHelper.callCloudData('home/setup_all', {}, opts);
31 | if (!about) {
32 | this.setData({
33 | isLoad: null
34 | });
35 | return;
36 | }
37 |
38 | if (about) this.setData({
39 | about,
40 | isLoad: true
41 | });
42 | },
43 |
44 | /**
45 | * 生命周期函数--监听页面初次渲染完成
46 | */
47 | onReady: function () {
48 |
49 | },
50 |
51 | /**
52 | * 生命周期函数--监听页面显示
53 | */
54 | onShow: function () {
55 |
56 | },
57 |
58 | /**
59 | * 生命周期函数--监听页面隐藏
60 | */
61 | onHide: function () {
62 |
63 | },
64 |
65 | /**
66 | * 生命周期函数--监听页面卸载
67 | */
68 | onUnload: function () {
69 |
70 | },
71 |
72 | /**
73 | * 页面相关事件处理函数--监听用户下拉动作
74 | */
75 | onPullDownRefresh: function () {
76 | this._loadDetail();
77 | wx.stopPullDownRefresh();
78 | },
79 |
80 |
81 | /**
82 | * 用户点击右上角分享
83 | */
84 | onShareAppMessage: function () {
85 |
86 | },
87 |
88 | url: function (e) {
89 | pageHelper.url(e, this);
90 | }
91 | }
92 | })
--------------------------------------------------------------------------------
/miniprogram/behavior/about_index_bh.js:
--------------------------------------------------------------------------------
1 | const cloudHelper = require('../helper/cloud_helper.js');
2 | const pageHelper = require('../helper/page_helper.js');
3 |
4 | module.exports = Behavior({
5 |
6 | /**
7 | * 页面的初始数据
8 | */
9 | data: {
10 | isLoad: false
11 | },
12 |
13 | methods: {
14 | /**
15 | * 生命周期函数--监听页面加载
16 | */
17 | onLoad: async function (options) {
18 | const accountInfo = wx.getAccountInfoSync();
19 | this.setData({
20 | accountInfo
21 | });
22 |
23 | this._loadDetail();
24 | },
25 |
26 | _loadDetail: async function () {
27 | let opts = {
28 | title: 'bar'
29 | }
30 | let about = await cloudHelper.callCloudData('home/setup_all', {}, opts);
31 | if (!about) {
32 | this.setData({
33 | isLoad: null
34 | });
35 | return;
36 | }
37 |
38 | if (about) this.setData({
39 | about,
40 | isLoad: true
41 | });
42 | },
43 |
44 | /**
45 | * 生命周期函数--监听页面初次渲染完成
46 | */
47 | onReady: function () {
48 |
49 | },
50 |
51 | /**
52 | * 生命周期函数--监听页面显示
53 | */
54 | onShow: function () {
55 |
56 | },
57 |
58 | /**
59 | * 生命周期函数--监听页面隐藏
60 | */
61 | onHide: function () {
62 |
63 | },
64 |
65 | /**
66 | * 生命周期函数--监听页面卸载
67 | */
68 | onUnload: function () {
69 |
70 | },
71 |
72 | /**
73 | * 页面相关事件处理函数--监听用户下拉动作
74 | */
75 | onPullDownRefresh: function () {
76 | this._loadDetail();
77 | wx.stopPullDownRefresh();
78 | },
79 |
80 |
81 | /**
82 | * 用户点击右上角分享
83 | */
84 | onShareAppMessage: function () {
85 |
86 | },
87 |
88 | url: function (e) {
89 | pageHelper.url(e, this);
90 | }
91 | }
92 | })
--------------------------------------------------------------------------------
/miniprogram/behavior/default_index_bh.js:
--------------------------------------------------------------------------------
1 | const pageHelper = require('../helper/page_helper.js');
2 | const cloudHelper = require('../helper/cloud_helper.js');
3 | const setting = require('../setting/setting.js');
4 |
5 | module.exports = Behavior({
6 |
7 | /**
8 | * 页面的初始数据
9 | */
10 | data: {
11 |
12 | },
13 |
14 | methods: {
15 | /**
16 | * 生命周期函数--监听页面加载
17 | */
18 | onLoad: async function (options) {
19 | if (setting.IS_SUB) wx.hideHomeButton();
20 | },
21 |
22 | _loadList: async function () {
23 | let opts = {
24 | title: 'bar'
25 | }
26 | await cloudHelper.callCloudSumbit('news/home_list', {}, opts).then(res => {
27 | this.setData({
28 | dataList: res.data
29 | });
30 | })
31 | },
32 |
33 | /**
34 | * 生命周期函数--监听页面初次渲染完成
35 | */
36 | onReady: function () {},
37 |
38 | /**
39 | * 生命周期函数--监听页面显示
40 | */
41 | onShow: async function () {
42 | this._loadList();
43 | },
44 |
45 | onPullDownRefresh: async function () {
46 | await this._loadList();
47 | wx.stopPullDownRefresh();
48 | },
49 |
50 | /**
51 | * 生命周期函数--监听页面隐藏
52 | */
53 | onHide: function () {
54 |
55 | },
56 |
57 | /**
58 | * 生命周期函数--监听页面卸载
59 | */
60 | onUnload: function () {
61 |
62 | },
63 |
64 | url: async function (e) {
65 | pageHelper.url(e, this);
66 | },
67 |
68 |
69 | /**
70 | * 用户点击右上角分享
71 | */
72 | onShareAppMessage: function () {
73 |
74 | },
75 | }
76 | })
--------------------------------------------------------------------------------
/miniprogram/behavior/meet_self_bh.js:
--------------------------------------------------------------------------------
1 | const pageHelper = require('../helper/page_helper.js');
2 | const cloudHelper = require('../helper/cloud_helper.js');
3 |
4 | module.exports = Behavior({
5 |
6 | /**
7 | * 页面的初始数据
8 | */
9 | data: {
10 |
11 | },
12 |
13 | methods: {
14 | /**
15 | * 生命周期函数--监听页面加载
16 | */
17 | onLoad: async function (options) {
18 | if (options && options.scene) {
19 | let params = {
20 | timeMark: options.scene
21 | };
22 | let opts = {
23 | title: 'bar'
24 | }
25 | try {
26 | await cloudHelper.callCloudSumbit('my/my_join_checkin', params, opts).then(res => {
27 | let cb = () => {
28 | wx.reLaunch({
29 | url: pageHelper.fmtURLByPID('/pages/my/index/my_index'),
30 | });
31 | }
32 | pageHelper.showModal(res.data.ret, '温馨提示', cb);
33 | });
34 | } catch (err) {
35 | console.error(err);
36 | }
37 | } else {
38 | pageHelper.showModal('签到码扫描错误,请关闭本小程序,使用「微信›扫一扫」重新扫码');
39 | }
40 | },
41 |
42 | /**
43 | * 生命周期函数--监听页面初次渲染完成
44 | */
45 | onReady: function () {
46 |
47 | },
48 |
49 | /**
50 | * 生命周期函数--监听页面显示
51 | */
52 | onShow: function () {
53 |
54 | },
55 |
56 | /**
57 | * 生命周期函数--监听页面隐藏
58 | */
59 | onHide: function () {
60 |
61 | },
62 |
63 | /**
64 | * 生命周期函数--监听页面卸载
65 | */
66 | onUnload: function () {
67 |
68 | },
69 |
70 | /**
71 | * 页面相关事件处理函数--监听用户下拉动作
72 | */
73 | onPullDownRefresh: function () {
74 |
75 | },
76 |
77 | /**
78 | * 页面上拉触底事件的处理函数
79 | */
80 | onReachBottom: function () {
81 |
82 | },
83 |
84 | /**
85 | * 用户点击右上角分享
86 | */
87 | onShareAppMessage: function () {
88 |
89 | }
90 | }
91 | })
--------------------------------------------------------------------------------
/miniprogram/behavior/public_hint_bh.js:
--------------------------------------------------------------------------------
1 | const pageHelper = require('../helper/page_helper.js');
2 | const PassportBiz = require('../biz/passport_biz.js');
3 |
4 | module.exports = Behavior({
5 |
6 | /**
7 | * 页面的初始数据
8 | */
9 | data: {
10 | type: -1, //0-需要注册提示 1=用户异常提示 2=认证中提示 9=自定义错误
11 | msg: ''
12 | },
13 |
14 | methods: {
15 | /**
16 | * 生命周期函数--监听页面加载
17 | */
18 | onLoad: async function (options) {
19 |
20 | let type = -1;
21 | let msg = (options && options.msg) ? decodeURIComponent(options.msg) : '';
22 |
23 | if (options && options.type) type = options.type;
24 |
25 | this.setData({
26 | type,
27 | msg
28 | });
29 | },
30 |
31 | /**
32 | * 生命周期函数--监听页面初次渲染完成
33 | */
34 | onReady: function () {
35 |
36 | },
37 |
38 | /**
39 | * 生命周期函数--监听页面显示
40 | */
41 | onShow: function () {
42 |
43 | },
44 |
45 | /**
46 | * 生命周期函数--监听页面隐藏
47 | */
48 | onHide: function () {
49 |
50 | },
51 |
52 | /**
53 | * 生命周期函数--监听页面卸载
54 | */
55 | onUnload: function () {
56 |
57 | },
58 |
59 | url: function (e) {
60 | pageHelper.url(e, this);
61 | }
62 | }
63 |
64 | })
--------------------------------------------------------------------------------
/miniprogram/biz/base_biz.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 基础模块业务逻辑
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-11-14 07:48:00
5 | */
6 | const dataHelper = require('../helper/data_helper.js');
7 |
8 | class BaseBiz {
9 |
10 | }
11 |
12 | module.exports = BaseBiz;
--------------------------------------------------------------------------------
/miniprogram/biz/biz_helper.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 业务通用
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-11-14 07:48:00
5 | */
6 |
7 | const cacheHelper = require('../helper/cache_helper.js');
8 | const setting = require('../setting/setting.js');
9 |
10 |
11 | function isCacheList(key) {
12 | key = key.toUpperCase();
13 | if (setting.CACHE_IS_LIST)
14 | return cacheHelper.get(key + '_LIST');
15 | else
16 | return false;
17 | }
18 |
19 | function removeCacheList(key) {
20 | key = key.toUpperCase();
21 | if (setting.CACHE_IS_LIST)
22 | cacheHelper.remove(key + '_LIST');
23 | }
24 |
25 | function setCacheList(key, time = setting.CACHE_LIST_TIME) {
26 | key = key.toUpperCase();
27 | if (setting.CACHE_IS_LIST)
28 | cacheHelper.set(key + '_LIST', 'TRUE', time);
29 | }
30 |
31 |
32 | module.exports = {
33 | isCacheList,
34 | removeCacheList,
35 | setCacheList,
36 | }
--------------------------------------------------------------------------------
/miniprogram/biz/constants.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 通用常量
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-11-14 07:48:00
5 | */
6 |
7 | module.exports = {
8 | CACHE_TOKEN: 'CACHE_TOKEN', // 登录
9 | CACHE_ADMIN: 'ADMIN_TOKEN', // 管理员登录
10 | }
--------------------------------------------------------------------------------
/miniprogram/biz/meet_biz.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 预约模块业务逻辑
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2021-12-10 07:48:00
5 | */
6 |
7 | const BaseBiz = require('./base_biz.js');
8 | const setting = require('../setting/setting.js');
9 | const pageHelper = require('../helper/page_helper.js');
10 |
11 | class MeetBiz extends BaseBiz {
12 |
13 | static async subscribeMessageMeet(callback) {
14 | callback && await callback();
15 | }
16 |
17 | static addMeetPhoneCalendar(title, startTime, endTime, alarmOffset = 3600) {
18 | wx.addPhoneCalendar({
19 | title,
20 | startTime,
21 | endTime,
22 | // description: "这是日程内容",
23 | alarm: 'true',
24 | alarmOffset, //提前时间,秒
25 | success: () => {
26 | pageHelper.showSuccToast('添加成功');
27 | },
28 | fail: (res) => {
29 | if (res && res.errMsg && res.errMsg.includes('refuesed')) {
30 | pageHelper.showModal('请在手机的"设置›微信" 选项中,允许微信访问你的日历', '日历权限未开启')
31 | }
32 | },
33 | complete: (res) => {
34 | console.log(res)
35 | }
36 |
37 | })
38 | }
39 |
40 | }
41 |
42 | module.exports = MeetBiz;
--------------------------------------------------------------------------------
/miniprogram/biz/news_biz.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 资讯模块业务逻辑
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-11-14 07:48:00
5 | */
6 |
7 | const BaseBiz = require('./base_biz.js'); ;
8 |
9 | class NewsBiz extends BaseBiz {
10 |
11 | /** 搜索菜单设置 */
12 | static async getSearchMenu() {
13 | let sortMenus = [{
14 | label: '全部',
15 | type: '',
16 | value: ''
17 | }];
18 | let sortMenusAfter = [{
19 | label: '最新',
20 | type: 'sort',
21 | value: 'new'
22 | }, ];
23 | let sortItems = [];
24 |
25 | sortMenus = sortMenus.concat(sortMenusAfter);
26 |
27 | return {
28 | sortItems,
29 | sortMenus
30 | }
31 | }
32 | }
33 |
34 | module.exports = NewsBiz;
--------------------------------------------------------------------------------
/miniprogram/biz/search_biz.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 搜索模块业务逻辑
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-11-14 07:48:00
5 | */
6 |
7 | const BaseBiz = require('./base_biz.js');
8 | const cacheHelper = require('../helper/cache_helper.js');
9 |
10 | /**
11 | *
12 | */
13 | class SearchBiz extends BaseBiz {
14 |
15 | static clearHistory(key){
16 | cacheHelper.remove(key);
17 | }
18 |
19 | static getHistory(key)
20 | {
21 | return cacheHelper.get(key, []);
22 |
23 | }
24 |
25 | /**添加关键字缓存
26 | *
27 | * @param {*} key
28 | * @param {*} val
29 | * @param {*} size 个数
30 | * @param {*} expire 过期时间
31 | */
32 | static addHistory(key, val, size = 20, expire = 86400 * 30) {
33 | if (!val || val.length == 0) return [];
34 |
35 | let his = cacheHelper.get(key, []);
36 |
37 | //查询是否存在 并删除
38 | let pos = his.indexOf(val);
39 | if (pos > -1) his.splice(pos, 1);
40 |
41 | // 加到头部
42 | his.unshift(val);
43 |
44 | // 判断个数, 多的删除
45 | if (his.length > size)
46 | his.splice(his.length - 1, 1);
47 |
48 | // 存缓存
49 | cacheHelper.set(key, his, expire);
50 |
51 | return his;
52 | }
53 |
54 | }
55 |
56 | module.exports = SearchBiz;
--------------------------------------------------------------------------------
/miniprogram/cmpts/biz/foot/foot_cmpt.js:
--------------------------------------------------------------------------------
1 | const pageHelper = require('../../../helper/page_helper');
2 | const setting = require('../../../setting/setting.js');
3 |
4 | Component({
5 | options: {
6 | addGlobalClass: true
7 | },
8 |
9 | /**
10 | * 组件的属性列表
11 | */
12 | properties: {
13 | color: {
14 | type: String,
15 | value: ''
16 | },
17 | },
18 |
19 | /**
20 | * 组件的初始数据
21 | */
22 | data: {
23 |
24 | },
25 |
26 | lifetimes: {
27 | created: function () {
28 | // 组件实例化,但节点树还未导入,因此这时不能用setData
29 | },
30 | attached: function () {
31 | // 在组件实例进入页面节点树时执行
32 | // 节点树完成,可以用setData渲染节点,但无法操作节点
33 | },
34 | ready: async function () {
35 | // 组件布局完成,这时可以获取节点信息,也可以操作节点
36 | // 当前用户,用于评论删除
37 | this._loadDetail();
38 | },
39 | move: function () {
40 | // 组件实例被移动到树的另一个位置
41 | },
42 | detached: function () {
43 | // 在组件实例被从页面节点树移除时执行
44 | },
45 | },
46 |
47 | /**
48 | * 组件的方法列表
49 | */
50 | methods: {
51 | _loadDetail: async function () {
52 | this.setData({
53 | company: setting.COMPANY,
54 | ver: setting.VER
55 | });
56 | },
57 | url: function (e) {
58 | pageHelper.url(e, this);
59 | }
60 | }
61 | })
--------------------------------------------------------------------------------
/miniprogram/cmpts/biz/foot/foot_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/biz/foot/foot_cmpt.wxml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/biz/foot/foot_cmpt.wxss:
--------------------------------------------------------------------------------
1 | @import "../../../style/project/base/project.wxss";
2 |
3 | .site-footer {
4 | width: 100%;
5 | display: flex;
6 | flex-direction: column;
7 | justify-content: center;
8 | align-items: center;
9 | font-size: 24rpx;
10 | color: #aaa;
11 | margin-top: 20rpx;
12 | margin-bottom: 20rpx;
13 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/biz/test/test_cmpt.js:
--------------------------------------------------------------------------------
1 | // cmpts/biz/test/test_cmpt.js
2 | Component({
3 | options: {
4 | addGlobalClass: true
5 | },
6 |
7 | /**
8 | * 组件的属性列表
9 | */
10 | properties: {
11 |
12 | },
13 |
14 | /**
15 | * 组件的初始数据
16 | */
17 | data: {
18 |
19 | },
20 |
21 | /**
22 | * 组件的方法列表
23 | */
24 | methods: {
25 |
26 | }
27 | })
28 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/biz/test/test_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/biz/test/test_cmpt.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Modal标题
5 |
6 |
7 |
8 |
9 |
10 | Modal 内容。{{index}}
11 |
12 |
13 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/biz/test/test_cmpt.wxss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/cmpts/biz/test/test_cmpt.wxss
--------------------------------------------------------------------------------
/miniprogram/cmpts/lib/wxa-plugin-canvas/index/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true
3 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/lib/wxa-plugin-canvas/index/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/lib/wxa-plugin-canvas/index/index.wxss:
--------------------------------------------------------------------------------
1 | .canvas {
2 | width: 750rpx;
3 | height: 750rpx;
4 | }
5 | .canvas.pro {
6 | position: absolute;
7 | bottom: 0;
8 | left: 0;
9 | transform: translate3d(-9999rpx, 0, 0);
10 | }
11 | .canvas.debug {
12 | position: absolute;
13 | bottom: 0;
14 | left: 0;
15 | border: 1rpx solid #ccc;
16 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/lib/wxa-plugin-canvas/poster/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {
4 | "we-canvas": "../index/index"
5 | }
6 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/lib/wxa-plugin-canvas/poster/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/lib/wxa-plugin-canvas/poster/index.wxss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/cmpts/lib/wxa-plugin-canvas/poster/index.wxss
--------------------------------------------------------------------------------
/miniprogram/cmpts/lib/wxa-plugin-canvas/poster/poster.js:
--------------------------------------------------------------------------------
1 | const defaultOptions = {
2 | selector: '#poster'
3 | };
4 |
5 | function Poster(options = {}, that) {
6 | options = {
7 | ...defaultOptions,
8 | ...options,
9 | };
10 |
11 | const pages = getCurrentPages();
12 | let ctx = pages[pages.length - 1];
13 | if (that) ctx = that
14 | const poster = ctx.selectComponent(options.selector);
15 | delete options.selector;
16 |
17 | return poster;
18 | };
19 |
20 | Poster.create = (reset = false, that) => {
21 | const poster = Poster({}, that);
22 | if (!poster) {
23 | console.error('请设置组件的id="poster"!!!');
24 | } else {
25 | return Poster({}, that).onCreate(reset);
26 | }
27 | }
28 |
29 | export default Poster;
30 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/calendar/calendar_comm/calendar_comm_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/calendar/calendar_meet/calendar_meet_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/checkbox/checkbox_cmpt.js:
--------------------------------------------------------------------------------
1 | Component({
2 | externalClasses: ['outside-picker-multi-class'],
3 |
4 | /**
5 | * 组件的属性列表
6 | */
7 | properties: {
8 | sourceData: { //源数组
9 | type: Array,
10 | value: [],
11 | },
12 | // 默认选中项的值数组
13 | itemMulti: {
14 | type: Array,
15 | value: [],
16 | observer: function (newVal, oldVal) {
17 | if (JSON.stringify(newVal) != JSON.stringify(oldVal)) {
18 | console.log('checkbox observer');
19 | this._fixDefaultVal();
20 | }
21 | }
22 | },
23 | disabled: { // 是否禁用
24 | type: Boolean,
25 | value: false,
26 | },
27 | },
28 |
29 | /**
30 | * 生命周期方法
31 | */
32 | lifetimes: {
33 | attached: function () {},
34 |
35 | ready: function () {
36 | this._fixDefaultVal();
37 | },
38 |
39 | detached: function () {
40 | // 在组件实例被从页面节点树移除时执行
41 | },
42 |
43 | },
44 |
45 | /**
46 | * 组件的初始数据
47 | */
48 | data: {
49 |
50 | },
51 |
52 | /**
53 | * 组件的方法列表
54 | */
55 | methods: {
56 | bindChange: function (e) {
57 | this.triggerEvent('select', e.detail.value);
58 | },
59 |
60 | _fixDefaultVal() { //传入数据不匹配的时候,修正父页面传入的的数组默认值
61 | if (!Array.isArray(this.data.itemMulti)) {
62 | this.triggerEvent('select', []);
63 | }
64 |
65 | if (this.data.itemMulti.length == 0) return;
66 |
67 | let ret = [];
68 | let sourceData = this.data.sourceData;
69 | let itemMulti = this.data.itemMulti;
70 | for (let k in sourceData) {
71 | for (let j in itemMulti) {
72 | if (sourceData[k] == itemMulti[j])
73 | ret.push(itemMulti[j]);
74 | }
75 | }
76 |
77 | this.triggerEvent('select', ret);
78 | }
79 | }
80 | })
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/checkbox/checkbox_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/checkbox/checkbox_cmpt.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/checkbox/checkbox_cmpt.wxss:
--------------------------------------------------------------------------------
1 | .checkbox-group {
2 | width: 100%;
3 | display: flex;
4 | justify-content: center;
5 | flex-direction: column;
6 | align-items: center;
7 | padding: 0rpx 10rpx;
8 | }
9 |
10 | .checkbox-group .item {
11 | width: 100%;
12 | display: flex;
13 | flex-direction: row;
14 | justify-content: flex-start;
15 | align-items: center;
16 | line-height: 2.1;
17 | min-height: 70rpx;
18 | border-bottom: 1rpx solid #eee;
19 | font-size: 28rpx;
20 | }
21 |
22 | .checkbox-group .item label{
23 | width: 100%;
24 | display: flex;
25 | flex-direction: row;
26 | justify-content: flex-start;
27 | align-items: center;
28 | }
29 |
30 |
31 | .checkbox-group .item:last-child {
32 | border-bottom: 0;
33 | }
34 |
35 | .checkbox-group .item:nth-child(odd) {
36 | background-color: #fcfcfc;
37 | }
38 |
39 |
40 | .checkbox-group .item checkbox {
41 | margin-right: 20rpx;
42 | padding-left: 10rpx;
43 | }
44 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/editor/editor_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/form/form_set/field/form_set_field.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-picker-multi": "../../../picker_multi/picker_multi_cmpt"
4 | },
5 | "navigationBarBackgroundColor": "#ffffff",
6 | "navigationBarTextStyle": "black",
7 | "enablePullDownRefresh": true,
8 | "backgroundTextStyle": "dark",
9 | "navigationBarTitleText": "后台-字段添加"
10 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/form/form_set/field/form_set_field.wxss:
--------------------------------------------------------------------------------
1 | .main {
2 | margin-bottom: 150rpx;
3 | }
4 |
5 | .oprt {
6 | display: flex;
7 | width: 100%;
8 | justify-content: space-around;
9 | }
10 |
11 | .oprt button {
12 | width: 45%;
13 | }
14 |
15 | .select-close {
16 | width: 60rpx;
17 | font-size: 40rpx !important;
18 | font-weight: bold;
19 | text-align: right;
20 | }
21 |
22 | .title-desc {
23 | padding-left: 24rpx;
24 | color: #aaa;
25 | padding-bottom: 30rpx;
26 | border-bottom: 1rpx solid #eee;
27 | }
28 |
29 | .title-info {
30 | margin-left: 4rpx;
31 | color: #aaa;
32 | font-weight: normal;
33 | font-size: 24rpx;
34 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/form/form_set/form_set_cmpt.js:
--------------------------------------------------------------------------------
1 | const pageHelper = require('../../../../helper/page_helper.js');
2 | const dataHelper = require('../../../../helper/data_helper.js');
3 |
4 | Component({
5 | options: {
6 | addGlobalClass: true
7 | },
8 |
9 | /**
10 | * 组件的属性列表
11 | */
12 | properties: {
13 | fields: {
14 | type: Array,
15 | value: [],
16 | },
17 | },
18 |
19 | /**
20 | * 组件的初始数据
21 | */
22 | data: {
23 | cur: -1,
24 | },
25 |
26 | /**
27 | * 生命周期方法
28 | */
29 | lifetimes: {
30 | attached: function () {
31 |
32 | },
33 |
34 | ready: function () {
35 |
36 |
37 | },
38 |
39 | detached: function () {
40 | // 在组件实例被从页面节点树移除时执行
41 | },
42 | },
43 |
44 | /**
45 | * 组件的方法列表
46 | */
47 | methods: {
48 | setGlow(cur) {
49 | this.setData({
50 | cur
51 | });
52 | setTimeout(() => {
53 | this.setData({
54 | cur: -1
55 | });
56 | }, 800);
57 | },
58 |
59 | url: function (e) {
60 | pageHelper.url(e, this);
61 | },
62 |
63 | set: function (fields) {
64 | this.setData({
65 | fields
66 | });
67 | this.triggerEvent('formset', fields);
68 | },
69 |
70 | get: function () {
71 | return this.data.fields;
72 | },
73 |
74 | bindUpTap: function (e) {
75 | let idx = pageHelper.dataset(e, 'idx');
76 | let fields = this.data.fields;
77 | dataHelper.arraySwap(fields, idx, idx - 1);
78 | this.setData({
79 | fields
80 | });
81 | this.setGlow(idx - 1);
82 | this.triggerEvent('formset', fields);
83 | },
84 | bindDownTap: function (e) {
85 | let idx = pageHelper.dataset(e, 'idx');
86 | let fields = this.data.fields;
87 | dataHelper.arraySwap(fields, idx, idx + 1);
88 | this.setData({
89 | fields
90 | });
91 | this.setGlow(idx + 1);
92 | this.triggerEvent('formset', fields);
93 | }
94 | }
95 | })
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/form/form_set/form_set_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/form/form_set/form_set_cmpt.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {{item.title}}
9 |
10 |
11 |
12 | 单行文本,
13 | 日期,
14 | 时间点,
15 | 单项选择,
16 | 多项选择,
17 | 开关选择,
18 | 省市区,
19 | 多行文本,
20 | 年份,
21 | 月份,
22 | 整数数字,
23 | 小数数字,
24 | 身份证,
25 | 手机,
26 |
27 | 必填
28 | 选填
29 |
30 |
31 |
32 |
33 |
34 | 添加新字段
35 |
36 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/form/form_set/form_set_cmpt.wxss:
--------------------------------------------------------------------------------
1 | .picker-set {
2 | line-height: 100rpx;
3 | font-size: 24rpx;
4 | width: 100%;
5 | text-align: right;
6 | color: #999;
7 | width: 210rpx;
8 | }
9 |
10 | .form-group .picker-set {
11 | padding-right: 40rpx;
12 | overflow: hidden;
13 | position: relative;
14 | }
15 |
16 | .form-group.cur {
17 | animation: glow 800ms linear 1 alternate;
18 | }
19 |
20 | @keyframes glow {
21 | 0% {
22 | background-color: #ececec;
23 | }
24 | 100% {
25 | background-color: #fff;
26 | }
27 | }
28 |
29 | .form-group-active{
30 | background-color: #ececec;
31 | }
32 |
33 | .form-group .title {
34 | font-weight: normal;
35 | color: #333;
36 | flex: 1;
37 | padding-right: 10rpx;
38 | }
39 |
40 | .form-group .field-oprt {
41 | color: #777;
42 | background: hsla(0, 0%, 100%, .95);
43 | border-radius: 5rpx;
44 | box-shadow: 0 0 5px rgba(0, 0, 0, .1);
45 | display: flex;
46 | text-align: center;
47 | align-items: center;
48 | justify-content: center;
49 | margin-right: 15rpx;
50 | }
51 |
52 | .form-group .field-oprt>view{
53 | width:70rpx;
54 | height:55rpx;
55 | display: flex;
56 | text-align: center;
57 | align-items: center;
58 | justify-content: center;
59 | font-size:36rpx;
60 | }
61 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/form/form_show/form_show_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {
4 | "cmpt-checkbox": "/cmpts/public/checkbox/checkbox_cmpt"
5 | }
6 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/form/form_show/form_show_cmpt.wxss:
--------------------------------------------------------------------------------
1 | .form-group .picker-base {
2 | flex:1;
3 | text-align: right;
4 | height: 60rpx;
5 | line-height: 60rpx;
6 | }
7 |
8 | .form-group .picker-select {
9 | padding-right: 40rpx;
10 | overflow: hidden;
11 | position: relative;
12 | }
13 |
14 | .form-group .title {
15 | height:unset!important;
16 | min-height: 60rpx;
17 | }
18 |
19 |
20 | /* 核对信息窗口 */
21 | .modal-check-info {
22 | width:100%;
23 | }
24 |
25 | .slot-class {
26 | padding:0 20rpx 30rpx;
27 | }
28 |
29 | .modal-check-info .item{
30 | width:100%;
31 | display: flex;
32 | justify-content: flex-start;
33 | align-items: flex-start;
34 | line-height: 1.8;
35 | font-size: 30rpx;
36 | border-bottom: 1rpx dotted #ddd;
37 | color:#000;
38 | padding:10rpx 10rpx;
39 | }
40 |
41 | .modal-check-info .item:nth-child(odd){
42 | background-color: #f8f8f8;
43 | }
44 | .modal-check-info .item:last-child{
45 | border-bottom: 0rpx;
46 | }
47 |
48 | .modal-check-info .item .title{
49 | font-weight: bold;
50 | max-width: 150rpx;
51 | margin-right: 20rpx;
52 | text-align: left;
53 | }
54 |
55 | .modal-check-info .item .content{
56 | flex:1;
57 | color:#333;
58 | display: flex;
59 | justify-content: flex-start;
60 | align-items: flex-start;
61 | text-align: left;
62 | }
63 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/img/img_upload_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/img/img_upload_cmpt.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{title}} (每张大小不超过{{imgUploadSize}}M)
4 |
5 |
6 | {{imgList.length}}/{{imgMax}}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | #{{index}}
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/img/img_upload_cmpt.wxss:
--------------------------------------------------------------------------------
1 | @import "../../../style/comm/comm.wxss";
2 | @import "../../../style/project/base/project.wxss";
3 |
4 | .form-group .upload-img .img-no {
5 | position: absolute;
6 | right: 0;
7 | bottom: 0;
8 | border-top-left-radius: 6rpx;
9 | padding: 6rpx 12rpx;
10 | height: 35rpx;
11 | opacity: .9;
12 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/list/comm_list_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/modal/modal_cmpt.js:
--------------------------------------------------------------------------------
1 | // cmpts/public/modal/modal.js
2 | Component({
3 | options: {
4 | addGlobalClass: true,
5 | multipleSlots: true
6 | },
7 |
8 | externalClasses: ['slot-class'],
9 |
10 | /**
11 | * 组件的属性列表
12 | */
13 | properties: {
14 | type: { // 类型 comm/bottom/dialog/image
15 | type: String,
16 | value: 'comm'
17 | },
18 | title: {
19 | type: String,
20 | value: '温馨提示'
21 | },
22 | subtitle: {
23 | type: String,
24 | value: ''
25 | },
26 | subtitleAlign: {
27 | type: String,
28 | value: 'center'
29 | },
30 | show: {
31 | type: Boolean,
32 | value: true
33 | },
34 | cancelText: {
35 | type: String,
36 | value: '取消'
37 | },
38 | confirmText: {
39 | type: String,
40 | value: '确定'
41 | },
42 | showConfirm: {
43 | type: Boolean,
44 | value: true
45 | },
46 | imgURL: {
47 | type: String,
48 | value: ''
49 | },
50 |
51 | height: {
52 | type: Number,
53 | value: 600
54 | },
55 | },
56 |
57 | /**
58 | * 组件的初始数据
59 | */
60 | data: {
61 |
62 | },
63 |
64 | /**
65 | * 组件的方法列表
66 | */
67 | methods: {
68 | bindHideModalTap: function (e) {
69 | this.setData({
70 | show: ''
71 | })
72 | },
73 |
74 | nomove: function () {},
75 |
76 | bindComfirmTap: function (e) {
77 | this.triggerEvent('click', {});
78 | }
79 | }
80 | })
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/modal/modal_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/modal/modal_cmpt.wxss:
--------------------------------------------------------------------------------
1 | .bg-img {
2 | width: 100%;
3 | height: 100%;
4 | position: relative;
5 | }
6 |
7 | .bg-img>image {
8 | top: 0;
9 | left: 0;
10 | position: absolute;
11 | width: 100%;
12 | height: 100%;
13 | }
14 |
15 | .bg-img .action .icon-close {
16 | font-size: 50rpx !important;
17 | font-weight: bold;
18 | }
19 |
20 | .modal .dialog {
21 | padding: 20rpx 0rpx;
22 | margin-top:30rpx;
23 | margin-bottom:30rpx;
24 | }
25 |
26 | .modal .dialog .bar {
27 | background-color: #f8f8f8;
28 | }
29 |
30 | .modal .dialog .bar .content {
31 | color: #333;
32 | font-size: 36rpx;
33 | }
34 |
35 | .modal-bar {
36 | width: 100%;
37 | display: flex;
38 | align-items: center;
39 | justify-content: center;
40 | border-top: 1rpx solid #ccc;
41 | line-height: 3;
42 | }
43 |
44 | .modal-bar>view {
45 | width: 50%;
46 | font-size: 36rpx;
47 | font-weight: bold;
48 | }
49 |
50 | .modal-bar .modal-bar-comfirm {
51 | color: #576B95;
52 | border-left: 1rpx solid #ccc;
53 | }
54 |
55 | .modal .modal-dialog {
56 | padding: 10rpx 0rpx 0;
57 | }
58 |
59 | .modal .modal-dialog .subtitle {
60 | width:100%;
61 | text-align: center;
62 | font-size:30rpx;
63 | color:#777;
64 | padding:0 60rpx;
65 | margin-top:10rpx;
66 | margin-bottom:20rpx;
67 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/picker/picker_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/picker/picker_cmpt.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{options[idx].label || noDataHint}}
4 | {{options[idx] || noDataHint}}
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{multiDesc || noDataHint}}
12 |
13 |
14 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/picker/picker_cmpt.wxss:
--------------------------------------------------------------------------------
1 | .picker-cmpt {
2 | line-height: 100rpx;
3 | font-size: 28rpx;
4 | text-overflow: ellipsis;
5 | white-space: nowrap;
6 | overflow: hidden;
7 | width: 100%;
8 | text-align: right;
9 | padding-right: 40rpx;
10 | }
11 |
12 | .disabled {
13 | background-color: #eee;
14 | color:#999;
15 | }
16 |
17 | .picker-cmpt::before {
18 | position: absolute;
19 | top: 0;
20 | right: 30rpx;
21 | bottom: 0;
22 | display: block;
23 | margin: auto;
24 | width: 30rpx;
25 | height: 30rpx;
26 | color: var(--grey);
27 | content: "\e6a3";
28 | text-align: center;
29 | font-size: 34rpx;
30 | font-family: "icon";
31 | line-height: 30rpx;
32 | margin-top: auto;
33 | margin-right: auto;
34 | margin-bottom: auto;
35 | margin-left: auto;
36 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/picker_multi/picker_multi_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/picker_multi/picker_multi_cmpt.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}}
6 |
7 |
8 | {{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}}
9 |
10 |
11 | {{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}},{{multiArray[3][multiIndex[3]]}}
12 |
13 |
14 | {{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}},{{multiArray[3][multiIndex[3]]}},{{multiArray[4][multiIndex[4]]}}
15 |
16 |
17 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/picker_multi/picker_multi_cmpt.wxss:
--------------------------------------------------------------------------------
1 | .picker-cmpt {
2 | line-height: 100rpx;
3 | font-size: 28rpx;
4 | text-overflow: ellipsis;
5 | white-space: nowrap;
6 | overflow: hidden;
7 | width: 100%;
8 | text-align: right;
9 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/picker_time/picker_time_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/picker_time/picker_time_cmpt.wxml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/picker_time/picker_time_cmpt.wxss:
--------------------------------------------------------------------------------
1 | /* cmpts/public/picker_time/picker_time_cmpt.wxss */
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/poster/images/friend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/cmpts/public/poster/images/friend.png
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/poster/images/wechat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/cmpts/public/poster/images/wechat.png
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/poster/poster_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {
4 | "poster": "./wxa-plugin-canvas/poster"
5 | }
6 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/poster/poster_cmpt.wxml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 | 关闭
9 |
10 |
11 |
13 |
14 |
15 |
16 |
17 |
18 |
24 |
25 |
26 |
27 |
28 |
29 | 保存后发朋友圈
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/poster/poster_cmpt.wxss:
--------------------------------------------------------------------------------
1 | .main-poster .poster-share {
2 | width: 100%;
3 | display: flex;
4 | justify-content: space-around;
5 | align-items: center;
6 | padding: 0rpx 50rpx 20rpx;
7 | }
8 |
9 | .main-poster .poster-share .item {
10 | display: flex;
11 | flex-direction: column;
12 | justify-content: flex-start;
13 | align-items: center;
14 | color: #333;
15 | }
16 |
17 | .main-poster .poster-share .item .pic {
18 | height: 100rpx;
19 | width: 100rpx;
20 | background-color: #f2f2f2;
21 | border-radius: 50%;
22 | display: flex;
23 | justify-content: center;
24 | align-items: center;
25 | }
26 |
27 | .main-poster .poster-share .item-share {
28 | margin-top: 15rpx;
29 | }
30 |
31 | .main-poster .poster-share .item-share>text {
32 | margin-top: -5rpx !important;
33 | }
34 |
35 | .main-poster .poster-share .item .pic image {
36 | height: 50rpx;
37 | width: 50rpx;
38 | }
39 |
40 | .main-poster .poster-share .item .pic .friend {
41 | height: 60rpx;
42 | width: 60rpx;
43 | }
44 |
45 | .main-poster .poster-share .item>text {
46 | margin-top: 10rpx;
47 | font-size: 30rpx;
48 | text-align: center;
49 | }
50 |
51 | .main-poster .poster-img {
52 | display: flex;
53 | justify-content: center;
54 | align-items: center;
55 | padding-top: 0rpx;
56 | padding-bottom: 20rpx;
57 | min-height: 700rpx;
58 | }
59 |
60 | .load.loading::after {
61 | content: "生成中...";
62 | }
63 |
64 | .main-poster .poster-img image {
65 | width: 375rpx;
66 | border-radius: 15rpx;
67 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/poster/wxa-plugin-canvas/index/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true
3 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/poster/wxa-plugin-canvas/index/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/poster/wxa-plugin-canvas/index/index.wxss:
--------------------------------------------------------------------------------
1 | .canvas {
2 | width: 750rpx;
3 | height: 750rpx;
4 | }
5 | .canvas.pro {
6 | position: absolute;
7 | bottom: 0;
8 | left: 0;
9 | transform: translate3d(-9999rpx, 0, 0);
10 | }
11 | .canvas.debug {
12 | position: absolute;
13 | bottom: 0;
14 | left: 0;
15 | border: 1rpx solid #ccc;
16 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/poster/wxa-plugin-canvas/poster/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {
4 | "we-canvas": "../index/index"
5 | }
6 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/poster/wxa-plugin-canvas/poster/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/poster/wxa-plugin-canvas/poster/index.wxss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/cmpts/public/poster/wxa-plugin-canvas/poster/index.wxss
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/poster/wxa-plugin-canvas/poster/poster.js:
--------------------------------------------------------------------------------
1 | const defaultOptions = {
2 | selector: '#poster'
3 | };
4 |
5 | function Poster(options = {}, that) {
6 | options = {
7 | ...defaultOptions,
8 | ...options,
9 | };
10 |
11 | const pages = getCurrentPages();
12 | let ctx = pages[pages.length - 1];
13 | if (that) ctx = that
14 | const poster = ctx.selectComponent(options.selector);
15 | delete options.selector;
16 |
17 | return poster;
18 | };
19 |
20 | Poster.create = (reset = false, that) => {
21 | const poster = Poster({}, that);
22 | if (!poster) {
23 | console.error('请设置组件的id="poster"!!!');
24 | } else {
25 | return Poster({}, that).onCreate(reset);
26 | }
27 | }
28 |
29 | export default Poster;
30 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/table/table_cmpt.js:
--------------------------------------------------------------------------------
1 | /**
2 | *
3 | */
4 | Component({
5 | /**
6 | * 外部样式类
7 | */
8 | externalClasses: ['header-row-class-name', 'row-class-name', 'cell-class-name'],
9 |
10 | /**
11 | * 组件样式隔离
12 | */
13 | options: {
14 | styleIsolation: "isolated",
15 | multipleSlots: true // 支持多个slot
16 | },
17 |
18 | /**
19 | * 组件的属性列表
20 | */
21 | properties: {
22 | data: {
23 | type: Array,
24 | value: []
25 | },
26 | headers: {
27 | type: Array,
28 | value: []
29 | },
30 | // table的高度, 溢出可滚动
31 | height: {
32 | type: String,
33 | value: 'auto'
34 | },
35 | width: {
36 | type: Number || String,
37 | value: '100%'
38 | },
39 | // 单元格的宽度
40 | tdWidth: {
41 | type: Number,
42 | value: 35
43 | },
44 | // 固定表头 thead达到Header的位置时就应该被fixed了
45 | offsetTop: {
46 | type: Number,
47 | value: 150
48 | },
49 | // 是否带有纵向边框
50 | stripe: {
51 | type: Boolean,
52 | value: false
53 | },
54 | // 是否带有纵向边框
55 | border: {
56 | type: Boolean,
57 | value: false
58 | },
59 | msg: {
60 | type: String,
61 | value: '暂无数据~'
62 | }
63 | },
64 |
65 | /**
66 | * 组件的初始数据
67 | */
68 | data: {
69 | scrolWidth: '20%'
70 | },
71 |
72 | lifetimes: {
73 | attached: function () {
74 |
75 | },
76 | ready: function () {
77 |
78 | },
79 | detached: function () {
80 | // 在组件实例被从页面节点树移除时执行
81 | },
82 | },
83 |
84 | /**
85 | * 组件的方法列表
86 | */
87 | methods: {
88 |
89 | }
90 | })
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/table/table_cmpt.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/table/table_cmpt.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{ item.label }}
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | {{it[head["prop"]]}}
16 |
17 |
18 |
19 |
20 |
21 | {{ msg }}
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/miniprogram/cmpts/public/table/table_cmpt.wxss:
--------------------------------------------------------------------------------
1 | .reset {
2 | background: white;
3 | }
4 |
5 | .other {
6 | font-size: 20px;
7 | }
8 |
9 | .table {
10 | position: relative;
11 | font-size: 28rpx;
12 | background: #fff;
13 | border-right:none;
14 | border-radius: 8rpx;
15 | overflow: hidden;
16 | }
17 | .thead{
18 | border-bottom: none;
19 | display: flex;
20 | justify-content: flex-start;
21 | border-top-right-radius: 8rpx;
22 | border-top-left-radius: 8rpx;
23 | overflow: visible;
24 | color: #909399;
25 | border: 1px solid #ebeef5;
26 | box-sizing: border-box;
27 | }
28 | .thead .td {
29 | padding: 20rpx 10rpx;
30 | font-weight: bold;
31 | display: inline-block;
32 | white-space:nowrap;
33 | text-align: center;
34 | border-right: 1rpx solid #fff;
35 | }
36 | .thead .td:last-child {
37 | border-right: none;
38 | }
39 | .thead-border .td {
40 | border-right: 1rpx solid #ebeef5;
41 | }
42 | .thead-border .td:last-child {
43 | border-right: none;
44 | }
45 | /* .tr{
46 | display: flex;
47 | white-space:nowrap;
48 | } */
49 | .tbody {
50 | box-sizing: border-box;
51 | font-size: 28rpx;
52 | color: #666;
53 | border: 1px solid #ebeef5;
54 | border-top: none;
55 | border-bottom-left-radius: 8rpx;
56 | border-bottom-right-radius: 8rpx;
57 | }
58 | .tbody-tr {
59 | display: flex;
60 | border-bottom: 1px solid #ebeef5;
61 | }
62 | .tbody-tr:last-child {
63 | border-bottom-left-radius: 8rpx;
64 | border-bottom-right-radius: 8rpx;
65 | }
66 |
67 | .tbody-tr-stripe {
68 | background: #fff;
69 | border-bottom: none;
70 | }
71 | .tbody-tr-stripe:nth-child(2n) {
72 | background: #F6F6F6;
73 | }
74 | .tbody-tr .td {
75 | white-space: wrap;
76 | padding:20rpx 10rpx;
77 | text-align: center;
78 | }
79 |
80 | .tbody-tr-border .td {
81 | border-right: 1rpx solid #F6F6F6;
82 | }
83 | .tbody-tr-border .td:last-child {
84 | border-right: none;
85 | }
86 | .no-data {
87 | display: flex;
88 | padding: 50rpx;
89 | color: #666;
90 | justify-content: center;
91 | }
--------------------------------------------------------------------------------
/miniprogram/helper/cache_helper.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 微信缓存二次封装,有设置时效性的封装
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-11-14 07:48:00
5 | */
6 | const helper = require('./helper.js');
7 |
8 | const TIME_SUFFIX = "_deadtime"
9 |
10 | /**
11 | * 设置
12 | * k 键key
13 | * v 值value
14 | * t 秒
15 | */
16 | function set(k, v, t = 86400 * 30) {
17 | if (!k) return null;
18 |
19 | wx.setStorageSync(k, v);
20 | let seconds = parseInt(t);
21 | if (seconds > 0) {
22 | let newtime = Date.parse(new Date());
23 | newtime = newtime / 1000 + seconds;
24 | wx.setStorageSync(k + TIME_SUFFIX, newtime + "");
25 | } else {
26 | wx.removeStorageSync(k + TIME_SUFFIX);
27 | }
28 | }
29 |
30 |
31 | /**
32 | * 获取
33 | * k 键key
34 | * def 默认值
35 | */
36 | function get(k, def = null) {
37 | if (!k) return null;
38 |
39 | let deadtime = wx.getStorageSync(k + TIME_SUFFIX);
40 | if (!deadtime) return def;
41 |
42 | deadtime = parseInt(deadtime);
43 | if (!deadtime) return def;
44 |
45 | if (deadtime) {
46 | if (parseInt(deadtime) < Date.parse(new Date()) / 1000) {
47 | wx.removeStorageSync(k);
48 | wx.removeStorageSync(k + TIME_SUFFIX);
49 | return def;
50 | }
51 | }
52 |
53 | let res = wx.getStorageSync(k);
54 |
55 | if (helper.isDefined(res)) {
56 | return res;
57 | } else {
58 | return def;
59 | }
60 | }
61 |
62 | /**
63 | * 删除
64 | */
65 | function remove(k) {
66 | if (!k) return null;
67 |
68 | wx.removeStorageSync(k);
69 | wx.removeStorageSync(k + TIME_SUFFIX);
70 | }
71 |
72 | /**
73 | * 清除所有key
74 | */
75 | function clear() {
76 | wx.clearStorageSync();
77 | }
78 |
79 | module.exports = {
80 | set,
81 | get,
82 | remove,
83 | clear
84 | }
--------------------------------------------------------------------------------
/miniprogram/helper/file_helper.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 文件处理相关函数
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2022-02-05 04:00:00
5 | */
6 | const pageHelper = require('./page_helper.js');
7 | const timeHelper = require('./time_helper.js');
8 |
9 | function openDoc(name, url, ext = '.xlsx') {
10 |
11 | wx.showLoading({
12 | title: '文件下载中',
13 | });
14 |
15 | wx.downloadFile({
16 | url,
17 | //fileID:' ',
18 | filePath: wx.env.USER_DATA_PATH + '/' + name + timeHelper.time('YMDhms') + ext,
19 | success: function (res) {
20 | wx.hideLoading();
21 | console.log(res);
22 | if (res.statusCode != 200)
23 | return pageHelper.showModal('打开文件失败,请重试或者采取别的下载方式');
24 |
25 | const filePath = res.filePath;
26 | wx.openDocument({
27 | showMenu: true,
28 | filePath: filePath,
29 | success: function (res) {
30 | console.log('打开文档成功');
31 | }
32 | })
33 | },
34 | fail: function (err) {
35 | wx.hideLoading();
36 | console.log(err);
37 | pageHelper.showModal('打开文件失败,请重试或者采取别的下载方式');
38 | }
39 | })
40 | }
41 |
42 | module.exports = {
43 | openDoc
44 | }
--------------------------------------------------------------------------------
/miniprogram/helper/form_helper.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 表单通用类库
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2021-02-28 07:48:00
5 | */
6 |
7 |
8 | /**
9 | * model变表单
10 | * @param {*} model
11 | */
12 | function model2Form(model) {
13 | let newModel = {};
14 | for (let k in model) {
15 | let arr = k.split('_');
16 | let result = '';
17 | for (let i = 1; i < arr.length; i++) {
18 | let name = arr[i].toLowerCase();
19 | name = name.charAt(0).toUpperCase() + name.slice(1);
20 | result = result + name;
21 | }
22 |
23 | newModel['form' + result] = model[k];
24 | }
25 | return newModel;
26 | }
27 |
28 | // picker表单赋值到页面data
29 | function setOptions(that, options, name, val) {
30 | let idx = options.indexOf(val);
31 | idx = (idx < 0) ? 0 : idx;
32 | that.setData({
33 | [name]: idx
34 | })
35 | }
36 |
37 | module.exports = {
38 | model2Form,
39 | setOptions
40 | }
--------------------------------------------------------------------------------
/miniprogram/helper/helper.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Notes: 通用类库
3 | * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux@qq.com
4 | * Date: 2020-11-14 07:48:00
5 | */
6 |
7 | /**
8 | * 判断变量,参数,对象属性是否定义
9 | * @param {*} val
10 | */
11 | function isDefined(val) {
12 | // == 不能判断是否为null
13 | if (val === undefined)
14 | return false;
15 | else
16 | return true;
17 | }
18 |
19 | /**
20 | * 判断对象是否为空
21 | * @param {*} obj
22 | */
23 | function isObjectNull(obj) {
24 | return (Object.keys(obj).length == 0);
25 | }
26 |
27 |
28 | function sleep(time) {
29 | return new Promise((resolve) => setTimeout(resolve, time));
30 | };
31 |
32 |
33 | function formatNumber(n) {
34 | n = n.toString()
35 | return n[1] ? n : '0' + n
36 | }
37 |
38 | /**
39 | * 从picker options中 获取索引值
40 | * @param {*} options
41 | * [{
42 | value: 0,
43 | label: '猎头'
44 | }]
45 | * @param {*} val
46 | */
47 | function getOptionsIdx(options, val) {
48 | for (let i = 0; i < options.length; i++) {
49 | if (options[i].value === val)
50 | return i;
51 | }
52 | return 0;
53 | }
54 |
55 |
56 |
57 | module.exports = {
58 | isDefined,
59 | isObjectNull,
60 | sleep,
61 |
62 |
63 | getOptionsIdx,
64 |
65 | }
--------------------------------------------------------------------------------
/miniprogram/images/default_cover_pic.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/images/default_cover_pic.gif
--------------------------------------------------------------------------------
/miniprogram/pages/admin/content/admin_content.js:
--------------------------------------------------------------------------------
1 | const AdminBiz = require('../../../biz/admin_biz.js');
2 | const pageHelper = require('../../../helper/page_helper.js');
3 |
4 | Page({
5 |
6 | /**
7 | * 页面的初始数据
8 | */
9 | data: {
10 | formContent: [{
11 | type: 'text',
12 | val: '',
13 | }]
14 | },
15 |
16 | /**
17 | * 生命周期函数--监听页面加载
18 | */
19 | onLoad: async function (options) {
20 | if (!AdminBiz.isAdmin(this)) return;
21 |
22 | let parent = pageHelper.getPrevPage(2);
23 | if (!parent) return;
24 |
25 | let formContent = parent.data.formContent;
26 | if (formContent && formContent.length > 0)
27 | this.setData({
28 | formContent
29 | });
30 | },
31 |
32 |
33 |
34 |
35 | /**
36 | * 生命周期函数--监听页面初次渲染完成
37 | */
38 | onReady: function () {
39 |
40 | },
41 |
42 | /**
43 | * 生命周期函数--监听页面显示
44 | */
45 | onShow: function () {},
46 |
47 | /**
48 | * 生命周期函数--监听页面隐藏
49 | */
50 | onHide: function () {
51 |
52 | },
53 |
54 | /**
55 | * 生命周期函数--监听页面卸载
56 | */
57 | onUnload: function () {
58 |
59 | },
60 |
61 | /**
62 | * 页面相关事件处理函数--监听用户下拉动作
63 | */
64 | onPullDownRefresh: async function () {
65 |
66 | },
67 |
68 | model: function (e) {
69 | pageHelper.model(this, e);
70 | },
71 |
72 | bindSaveTap: function (e) {
73 | let parent = pageHelper.getPrevPage(2);
74 | if (!parent) return;
75 | parent.setData({
76 | formContent: this.data.formContent
77 | });
78 | },
79 |
80 | url: function (e) {
81 | pageHelper.url(e, this);
82 | },
83 |
84 | bindSaveTap: function (e) {
85 | let formContent = this.selectComponent("#contentEditor").getNodeList();
86 |
87 | let parent = pageHelper.getPrevPage(2);
88 | if (!parent) return;
89 |
90 | parent.setData({
91 | formContent
92 | }, () => {
93 | parent._setContentDesc();
94 | });
95 |
96 | wx.navigateBack({
97 | delta: 0,
98 | });
99 | }
100 | })
--------------------------------------------------------------------------------
/miniprogram/pages/admin/content/admin_content.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-editor": "../../../cmpts/public/editor/editor_cmpt"
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "navigationBarTitleText": "详细内容"
8 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/content/admin_content.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | 不保存,返回
12 | 保存
13 |
14 |
15 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/content/admin_content.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../style/project/base/admin.wxss';
2 |
3 | .main-admin {
4 | width: 100%;
5 | box-sizing: border-box;
6 | padding: 30rpx 20rpx;
7 | padding-bottom: 200rpx;
8 | }
9 |
10 | .form-group {
11 | padding: 1rpx 1rpx;
12 | overflow: hidden;
13 | }
14 |
15 | .oprt {
16 | display: flex;
17 | width: 100%;
18 | justify-content: space-around;
19 | }
20 |
21 | .oprt button {
22 | width: 45%;
23 | }
24 |
25 | .bottom-oprt {
26 | position: fixed;
27 | bottom: 0;
28 | height: 130rpx;
29 | background-color: #f8f8f8;
30 | display: flex;
31 | justify-content: space-around;
32 | align-items: center;
33 | border-top: 1rpx solid #ccc;
34 | z-index: 99999;
35 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/index/home/admin_home.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-foot": "../../../../cmpts/biz/foot/foot_cmpt"
4 | },
5 | "enablePullDownRefresh": true,
6 | "navigationBarBackgroundColor": "#2499f2",
7 | "navigationBarTextStyle": "white",
8 | "navigationBarTitleText": "后台管理"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/index/home/admin_home.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | .main-admin {
4 | padding: 0;
5 | }
6 |
7 | .admin-info {
8 | height: 200rpx;
9 | width: 100%;
10 | color: #fff;
11 | display: flex;
12 | justify-content: flex-start;
13 | align-items: center;
14 | position: relative;
15 | }
16 |
17 | .admin-info .pic {
18 | width: 100rpx;
19 | height: 100rpx;
20 | font-size: 70rpx;
21 | display: flex;
22 | justify-content: center;
23 | align-items: center;
24 | margin-right: 20rpx;
25 | }
26 |
27 | .admin-info .right {
28 | flex: 1;
29 | display: flex;
30 | flex-direction: column;
31 | }
32 |
33 | .admin-info .right .name {
34 | font-size: 32rpx;
35 | line-height: 1.8;
36 | }
37 |
38 | .admin-info .right .desc {
39 | font-size: 24rpx;
40 | line-height: 1.3;
41 | }
42 |
43 | .admin-info .exit-admin {
44 | position: absolute;
45 | top: 12rpx;
46 | right: 12rpx;
47 | font-size: 45rpx;
48 | }
49 |
50 |
51 | .main-admin .comm-list,
52 | .main-admin .bar {
53 | background-color: #fff;
54 | width: 100%;
55 | }
56 |
57 | .main-admin .exit {
58 | width: 100%;
59 | padding: 0 20rpx;
60 | margin-bottom: 50rpx;
61 | }
62 |
63 | .main-admin .exit button {
64 | width: 100%;
65 | color: #fff;
66 | height: 70rpx;
67 | }
68 |
69 | .grid.col-6>view {
70 | width: 16.66%;
71 | }
72 |
73 | .foot-bottom {
74 | width: 100%;
75 | display: flex;
76 | justify-content: center;
77 | align-items: center;
78 | bottom: 50rpx;
79 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/index/login/admin_login.js:
--------------------------------------------------------------------------------
1 | const AdminBiz = require('../../../../biz/admin_biz.js');
2 | const pageHelper = require('../../../../helper/page_helper.js');
3 | const PassportBiz = require('../../../../biz/passport_biz.js');
4 |
5 | Page({
6 |
7 | /**
8 | * 页面的初始数据
9 | */
10 | data: {
11 | name: '',
12 | pwd: '',
13 | },
14 |
15 | /**
16 | * 生命周期函数--监听页面加载
17 | */
18 | onLoad: function (options) {
19 | AdminBiz.clearAdminToken();
20 | },
21 |
22 | /**
23 | * 生命周期函数--监听页面初次渲染完成
24 | */
25 | onReady: function () {
26 |
27 | },
28 |
29 | /**
30 | * 生命周期函数--监听页面显示
31 | */
32 | onShow: function () {},
33 |
34 | /**
35 | * 生命周期函数--监听页面隐藏
36 | */
37 | onHide: function () {
38 |
39 | },
40 |
41 | /**
42 | * 生命周期函数--监听页面卸载
43 | */
44 | onUnload: function () {
45 |
46 | },
47 |
48 | url: function (e) {
49 | pageHelper.url(e, this);
50 | },
51 |
52 | bindBackTap: function (e) {
53 | wx.reLaunch({
54 | url: pageHelper.fmtURLByPID('/pages/my/index/my_index'),
55 | });
56 | },
57 |
58 | bindLoginTap: async function (e) {
59 | return PassportBiz.adminLogin(this.data.name, this.data.pwd, this);
60 | }
61 |
62 | })
--------------------------------------------------------------------------------
/miniprogram/pages/admin/index/login/admin_login.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-foot": "../../../../cmpts/biz/foot/foot_cmpt"
4 | },
5 | "disableScroll": true,
6 | "navigationBarBackgroundColor": "#ffffff",
7 | "navigationBarTextStyle": "black"
8 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/index/login/admin_login.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 后台管理系统
7 |
8 |
9 | 账号:
10 |
11 |
12 |
13 |
14 | 密码:
15 |
16 |
17 |
18 |
19 | 返回
20 |
21 |
22 |
23 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/index/login/admin_login.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | .main-admin {
4 | width: 100%;
5 | min-height: 100vh;
6 | display: flex;
7 | flex-direction: column;
8 | align-items: center;
9 | justify-content: center;
10 | position: relative;
11 | }
12 |
13 | .login {
14 | width: 500rpx;
15 | background-color: #fff;
16 | min-height: 550rpx;
17 | border-radius: 20rpx;
18 | display: flex;
19 | flex-direction: column;
20 | justify-content: space-between;
21 | align-items: center;
22 | padding: 50rpx 20rpx;
23 | margin-top: -100rpx;
24 | }
25 |
26 | .login button {
27 | width: 85%;
28 | color: #fff;
29 | font-size: 32rpx;
30 | }
31 |
32 | .login .hint {
33 | width: 100%;
34 | color: #000;
35 | font-weight: bold;
36 | font-size: 36rpx;
37 | text-align: center;
38 | }
39 |
40 | .login .return {
41 | width: 100%;
42 | font-size: 30rpx;
43 | text-align: center;
44 | font-size: 26rpx;
45 | }
46 |
47 | .pic {
48 | width: 180rpx;
49 | height: 180rpx;
50 | font-size: 130rpx;
51 | display: flex;
52 | justify-content: center;
53 | align-items: center;
54 | }
55 |
56 | .foot-bottom {
57 | width: 100%;
58 | display: flex;
59 | justify-content: center;
60 | align-items: center;
61 | position: absolute;
62 | bottom: 50rpx;
63 | }
64 |
65 | .site-footer {
66 | color: #fff !important;
67 | }
68 |
69 | .form-group .title {
70 | color:#333;
71 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/content/admin_meet_content.js:
--------------------------------------------------------------------------------
1 | const AdminBiz = require('../../../../biz/admin_biz.js');
2 | const pageHelper = require('../../../../helper/page_helper.js');
3 | Page({
4 |
5 | /**
6 | * 页面的初始数据
7 | */
8 | data: {
9 | formContent: [{
10 | type: 'text',
11 | val: '',
12 | }]
13 | },
14 |
15 | /**
16 | * 生命周期函数--监听页面加载
17 | */
18 | onLoad: async function (options) {
19 | if (!AdminBiz.isAdmin(this)) return;
20 |
21 | let parent = pageHelper.getPrevPage(2);
22 | if (!parent) return;
23 |
24 | let formContent = parent.data.formContent;
25 | if (formContent && formContent.length > 0)
26 | this.setData({
27 | formContent
28 | });
29 | },
30 |
31 |
32 |
33 |
34 | /**
35 | * 生命周期函数--监听页面初次渲染完成
36 | */
37 | onReady: function () {
38 |
39 | },
40 |
41 | /**
42 | * 生命周期函数--监听页面显示
43 | */
44 | onShow: function () {},
45 |
46 | /**
47 | * 生命周期函数--监听页面隐藏
48 | */
49 | onHide: function () {
50 |
51 | },
52 |
53 | /**
54 | * 生命周期函数--监听页面卸载
55 | */
56 | onUnload: function () {
57 |
58 | },
59 |
60 | /**
61 | * 页面相关事件处理函数--监听用户下拉动作
62 | */
63 | onPullDownRefresh: async function () {
64 |
65 | },
66 |
67 | model: function (e) {
68 | pageHelper.model(this, e);
69 | },
70 |
71 | bindSaveTap: function (e) {
72 | let parent = pageHelper.getPrevPage(2);
73 | if (!parent) return;
74 | parent.setData({
75 | formContent: this.data.formContent
76 | });
77 | },
78 |
79 | bindSaveTap: function (e) {
80 | let formContent = this.selectComponent("#contentEditor").getNodeList();
81 |
82 | let parent = pageHelper.getPrevPage(2);
83 | if (!parent) return;
84 |
85 | parent.setData({
86 | formContent
87 | }, () => {
88 | parent._setContentDesc();
89 | });
90 |
91 | wx.navigateBack({
92 | delta: 0,
93 | });
94 | }
95 | })
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/content/admin_meet_content.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-editor": "../../../../cmpts/public/editor/editor_cmpt"
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "navigationBarTitleText": "后台-预约详细介绍"
8 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/content/admin_meet_content.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | 不保存,返回
12 | 保存
13 |
14 |
15 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/content/admin_meet_content.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | .main-admin {
4 | width: 100%;
5 | box-sizing: border-box;
6 | padding: 30rpx 20rpx;
7 | padding-bottom: 200rpx;
8 | }
9 |
10 | .form-group {
11 | padding: 1rpx 1rpx;
12 | overflow: hidden;
13 | }
14 |
15 | .oprt {
16 | display: flex;
17 | width: 100%;
18 | justify-content: space-around;
19 | }
20 |
21 | .oprt button {
22 | width: 45%;
23 | }
24 |
25 | .bottom-oprt {
26 | position: fixed;
27 | bottom: 0;
28 | height: 130rpx;
29 | background-color: #f8f8f8;
30 | display: flex;
31 | justify-content: space-around;
32 | align-items: center;
33 | border-top: 1rpx solid #ccc;
34 | z-index: 99999;
35 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/cover/admin_meet_cover.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "navigationBarBackgroundColor": "#2499f2",
5 | "navigationBarTextStyle": "white",
6 | "navigationBarTitleText": "后台-预约封面设置"
7 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/cover/admin_meet_cover.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 | @import '../../../../style/project/base/appt.wxss';
3 |
4 | .form-box-main {
5 | width: 100%;
6 | box-sizing: border-box;
7 | padding: 0rpx 20rpx;
8 | }
9 |
10 | .demo {
11 | background-color: #ffff;
12 | width: 100%;
13 | display: flex;
14 | flex-direction: row;
15 | justify-content: flex-start;
16 | align-items: center;
17 | }
18 |
19 | .demo {
20 | background-color: #f2f2f2;
21 | width: 100%;
22 | display: flex;
23 | flex-direction: column;
24 | justify-content: flex-start;
25 | align-items: center;
26 | padding: 0 20rpx;
27 | }
28 |
29 | .demo .demo-title {
30 | width: 100%;
31 | background-color: #fff;
32 | padding: 10rpx 20rpx;
33 | font-size: 32rpx;
34 | color: #333;
35 | text-align: center;
36 | }
37 |
38 |
39 | .form-group .upload-img {
40 | display: flex;
41 | flex-wrap: wrap;
42 | overflow: hidden;
43 | flex: 1;
44 | }
45 |
46 | .form-group .cover-img {
47 | flex: 1;
48 | width: 100%;
49 | display: flex;
50 | align-items: center;
51 | justify-content: flex-end;
52 | }
53 |
54 | .form-group .cover-img image {
55 | width: 60rpx;
56 | height: 60rpx;
57 | border-radius: 5rpx;
58 | }
59 |
60 | .form-group .cover-img .close-img,
61 | .form-group .cover-img .upload-img {
62 | height: 60rpx;
63 | border-radius: 5rpx;
64 | text-align: center;
65 | display: flex;
66 | justify-content: flex-end;
67 | align-items: center;
68 | font-size: 50rpx;
69 | color: orange;
70 | min-width: 80rpx;
71 | }
72 |
73 | .form-group .cover-img .upload-img {
74 | color: #999;
75 | font-weight: normal;
76 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/edit/admin_meet_edit.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-form-set": "../../../../cmpts/public/form/form_set/form_set_cmpt",
4 | "cmpt-picker-time": "../../../../cmpts/public/picker_time/picker_time_cmpt",
5 | "cmpt-picker-multi": "../../../../cmpts/public/picker_multi/picker_multi_cmpt"
6 | },
7 | "navigationBarBackgroundColor": "#2499f2",
8 | "navigationBarTextStyle": "white",
9 | "enablePullDownRefresh": true,
10 | "navigationBarTitleText": "后台-活动/预约添加"
11 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/edit/admin_meet_edit.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 |
4 | .main-admin {
5 | padding: 20rpx 0rpx;
6 |
7 | }
8 |
9 | .form-box {
10 | border-radius: 0;
11 | }
12 |
13 | .modal-rules {
14 | display: flex;
15 | flex-direction: column;
16 | align-items: center;
17 | justify-content: center;
18 | padding: 0;
19 | }
20 |
21 | .modal-rules .padding-xl {
22 | padding: 0;
23 | }
24 |
25 | .modal-rules .item {
26 | width: 100%;
27 | display: flex;
28 | flex-direction: column;
29 | align-items: center;
30 | justify-content: center;
31 | border-bottom: 2rpx solid #ddd;
32 | padding: 20rpx 0;
33 | position: relative;
34 | }
35 |
36 | .modal-rules .item.cur {
37 | background-color: #f2f2f2;
38 | font-weight: bold;
39 | }
40 |
41 | .modal-rules .item.cur .icon-right {
42 | color: var(--adminColor)!important;
43 | }
44 |
45 | .modal-rules .item .icon-right {
46 | right: 10rpx;
47 | position: absolute;
48 | top: 50rpx;
49 | }
50 |
51 | .modal-rules .item.item-last {
52 | border-bottom: 0;
53 | }
54 |
55 | .modal-rules .item .title {
56 | font-size: 36rpx;
57 | color: #111;
58 | }
59 |
60 | .modal-rules .item .desc {
61 | font-size: 28rpx;
62 | color: #777;
63 | margin-top: 10rpx;
64 | }
65 |
66 | cmpt-picker-multi {
67 | flex: 1;
68 | }
69 |
70 | .form-group .desc-textarea {
71 | height: 100rpx;
72 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/export/admin_join_export.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-picker-time": "../../../../cmpts/public/picker_time/picker_time_cmpt"
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "enablePullDownRefresh": true,
8 | "navigationBarTitleText": "预约名单导出"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/export/admin_join_export.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | .form-box .title-desc {
4 | padding-bottom: 10rpx;
5 | border: 0;
6 | font-size: 29rpx;
7 | color: #888;
8 | }
9 |
10 | .btn-admin{
11 | margin-bottom: 20rpx;
12 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/join/admin_meet_join.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 |
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "navigationBarTitleText": "分时段预约名单"
8 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/list/admin_meet_list.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 |
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "disableScroll": true,
8 | "navigationBarTitleText": "活动/预约管理"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/list/admin_meet_list.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | page {
4 | background-color: #f8f8f8;
5 | }
6 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/record/admin_record_list.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-picker-time": "../../../../cmpts/public/picker_time/picker_time_cmpt"
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "enablePullDownRefresh": true,
8 | "navigationBarTitleText": "预约名单统计"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/record/admin_record_list.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 | @import '../../../../style/comm/table.wxss';
3 |
4 | .main-admin {
5 | width: 100%;
6 | box-sizing: border-box;
7 | padding: 0rpx 0rpx 30rpx;
8 | }
9 |
10 | .table .table-form .oprt .min-btn {
11 | padding: 5rpx 30rpx;
12 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/scan/admin_meet_scan.js:
--------------------------------------------------------------------------------
1 | const AdminBiz = require('../../../../biz/admin_biz.js');
2 | const pageHelper = require('../../../../helper/page_helper.js');
3 | const cloudHelper = require('../../../../helper/cloud_helper.js');
4 |
5 |
6 | Page({
7 |
8 | /**
9 | * 页面的初始数据
10 | */
11 | data: {
12 | isLoad: true,
13 | title: '',
14 | },
15 |
16 | /**
17 | * 生命周期函数--监听页面加载
18 | */
19 | onLoad: function (options) {
20 | if (!AdminBiz.isAdmin(this)) return;
21 |
22 | if (!pageHelper.getOptions(this, options, 'meetId')) return;
23 |
24 | if (options && options.title) {
25 | let title = decodeURIComponent(options.title);
26 | this.setData({
27 | title
28 | });
29 | }
30 | },
31 |
32 | /**
33 | * 生命周期函数--监听页面初次渲染完成
34 | */
35 | onReady: function () {
36 |
37 | },
38 |
39 | /**
40 | * 生命周期函数--监听页面显示
41 | */
42 | onShow: function () {
43 |
44 | },
45 |
46 | /**
47 | * 生命周期函数--监听页面隐藏
48 | */
49 | onHide: function () {
50 |
51 | },
52 |
53 | /**
54 | * 生命周期函数--监听页面卸载
55 | */
56 | onUnload: function () {
57 |
58 | },
59 |
60 | bindScanTap: function (e) {
61 | let meetId = this.data.meetId;
62 | wx.scanCode({
63 | async success(res) {
64 | console.log(res)
65 | if (!res ||
66 | !res.result ||
67 | !res.result.includes('meet=') ||
68 | res.result.length != 20) {
69 | pageHelper.showModal('错误的预约码,请重新扫码');
70 | return;
71 | }
72 |
73 | let code = res.result.replace('meet=', '');
74 | let params = {
75 | meetId,
76 | code
77 | };
78 | let options = {
79 | title: '预约码核销中'
80 | }
81 | await cloudHelper.callCloudSumbit('admin/join_scan', params, options).then(res => {
82 | pageHelper.showModal('核销成功');
83 |
84 | }).catch(err => {
85 | console.log(err);
86 | });
87 | },
88 | fail(err) {
89 | if (err && err.errMsg == 'scanCode:fail')
90 | pageHelper.showModal('预约码核销错误,请重新扫码');
91 | }
92 | });
93 | }
94 | })
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/scan/admin_meet_scan.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-picker-time": "../../../../cmpts/public/picker_time/picker_time_cmpt"
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "enablePullDownRefresh": true,
8 | "navigationBarTitleText": "管理员扫码核销"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/scan/admin_meet_scan.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{title}}
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | 扫码核销
16 | 管理员扫描用户预约码进行签到核销
17 | 立即核销
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/scan/admin_meet_scan.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | .form-box .checkin {
4 | width: 100%;
5 | padding: 40rpx 40rpx 80rpx;
6 | padding-bottom: 150rpx;
7 | display: flex;
8 | flex-direction: column;
9 | justify-content: flex-start;
10 | align-items: center;
11 | }
12 |
13 | .form-box .checkin .notice {
14 | width: 100%;
15 | font-size: 46rpx;
16 | text-align: center;
17 | color: #000;
18 | margin-bottom: 30rpx;
19 | }
20 |
21 | .form-box .checkin .desc {
22 | width: 100%;
23 | font-size: 32rpx;
24 | text-align: center;
25 | color: #666;
26 | }
27 |
28 | .form-box .checkin .oprt {
29 | width: 600rpx;
30 | margin-top: 40rpx;
31 | text-align: center;
32 | font-size: 34rpx;
33 | color: var(--adminColor);
34 | border: 2rpx solid var(--adminColor);
35 | padding: 30rpx 20rpx;
36 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/self/admin_meet_self.js:
--------------------------------------------------------------------------------
1 | const AdminBiz = require('../../../../biz/admin_biz.js');
2 | const pageHelper = require('../../../../helper/page_helper.js');
3 | const cloudHelper = require('../../../../helper/cloud_helper.js');
4 |
5 | Page({
6 |
7 | /**
8 | * 页面的初始数据
9 | */
10 | data: {
11 | isLoad: false,
12 | qrUrl: '',
13 | },
14 |
15 | /**
16 | * 生命周期函数--监听页面加载
17 | */
18 | onLoad: async function (options) {
19 | if (!AdminBiz.isAdmin(this)) return;
20 | if (!pageHelper.getOptions(this, options, 'mark'));
21 |
22 | if (options && options.title) {
23 | let title = decodeURIComponent(options.title);
24 | this.setData({
25 | title
26 | });
27 | }
28 |
29 | await this._loadDetail();
30 | },
31 |
32 | _loadDetail: async function () {
33 | let timeMark = this.data.mark;
34 |
35 | let page = pageHelper.fmtURLByPID("/pages/meet/self/meet_self");
36 |
37 | let params = {
38 | timeMark,
39 | page
40 | };
41 | let opt = {
42 | title: 'bar'
43 | };
44 | try {
45 | await cloudHelper.callCloudSumbit('admin/self_checkin_qr', params, opt).then(res => {
46 | this.setData({
47 | qrUrl: res.data,
48 | isLoad: true
49 | })
50 | });
51 | } catch (err) {
52 | console.error(err);
53 | }
54 |
55 | },
56 |
57 | /**
58 | * 生命周期函数--监听页面初次渲染完成
59 | */
60 | onReady: function () {
61 |
62 | },
63 |
64 | /**
65 | * 生命周期函数--监听页面显示
66 | */
67 | onShow: function () {
68 |
69 | },
70 |
71 | /**
72 | * 生命周期函数--监听页面隐藏
73 | */
74 | onHide: function () {
75 |
76 | },
77 |
78 | /**
79 | * 生命周期函数--监听页面卸载
80 | */
81 | onUnload: function () {
82 |
83 | },
84 |
85 | /**
86 | * 页面相关事件处理函数--监听用户下拉动作
87 | */
88 | onPullDownRefresh: async function () {
89 | await this._loadDetail();
90 | wx.stopPullDownRefresh();
91 | },
92 |
93 | url: function (e) {
94 | pageHelper.url(e, this);
95 | }
96 |
97 | })
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/self/admin_meet_self.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 |
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "enablePullDownRefresh": true,
8 | "navigationBarTitleText": "用户自助签到码"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/self/admin_meet_self.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{title}}
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | 用户自助核销/签到
16 |
17 | ※ 签到规则
18 | 1. 预约用户自行扫描下方小程序码完成核销/签到
19 | 2. 用户在预约当天扫码有效,不可提前核销
20 | 3. 在预约结束时间未到情况下,用户可自行扫码完成核销
21 | 4. 若结束时间已到,需要管理员进行人工扫码核销或者在后台核销
22 |
23 | 长按图片保存小程序码
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/self/admin_meet_self.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | .form-box .checkin {
4 | width: 100%;
5 | padding: 40rpx 40rpx 80rpx;
6 | padding-bottom: 150rpx;
7 | display: flex;
8 | flex-direction: column;
9 | justify-content: flex-start;
10 | align-items: center;
11 | }
12 |
13 | .form-box .checkin .notice {
14 | width: 100%;
15 | font-size: 46rpx;
16 | text-align: center;
17 | color: #000;
18 | margin-bottom: 30rpx;
19 | }
20 |
21 | .form-box .checkin .desc {
22 | width: 100%;
23 | font-size: 28rpx;
24 | text-align: left;
25 | color: #666;
26 | display: flex;
27 | flex-direction: column;
28 | align-items: flex-start;
29 | justify-content: flex-start;
30 | }
31 |
32 | .form-box .checkin image {
33 | width: 500rpx;
34 | height: 500rpx;
35 | margin: 30rpx 0rpx;
36 | }
37 |
38 | .form-box .checkin .oprt {
39 | margin-top: 0rpx;
40 | text-align: center;
41 | font-size: 30rpx;
42 | color: var(--adminColor);
43 | padding: 20rpx 10rpx;
44 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/temp/admin_temp_select.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 |
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "enablePullDownRefresh": true,
8 | "navigationBarTitleText": "时间模板选择"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/temp/admin_temp_select.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 | @import "../../../../style/project/base/article_list.wxss";
3 |
4 | .load.notexist::after {
5 | content: "您还没有可选用的模板哦";
6 | }
7 |
8 | .text-pic-list-box .item {
9 | padding: 18rpx 30rpx;
10 | position: relative;
11 | }
12 |
13 | .item .time-list {
14 | width: 100%;
15 | display: flex;
16 | align-items: flex-start;
17 | justify-content: flex-start;
18 | flex-wrap: wrap;
19 | margin-top: 20rpx;
20 | }
21 |
22 | .item .time-list .time-item {
23 | width: 33.33%;
24 | padding: 10rpx;
25 | }
26 |
27 | .item .time-list .time-item .detail {
28 | width: 100%;
29 | border: 1rpx solid #ccc;
30 | border-radius: 1rpx;
31 | display: flex;
32 | flex-direction: column;
33 | justify-content: center;
34 | align-items: center;
35 | padding: 13rpx 0;
36 | height: 130rpx;
37 | }
38 |
39 | .item .time-list .time-item .detail>text {
40 | font-size: 30rpx;
41 | color: #555;
42 | width: 100%;
43 | text-align: center;
44 | }
45 |
46 | .item .time-list .time-item .detail .up {
47 | font-size: 29rpx;
48 | }
49 |
50 | .item .detail.select {
51 | font-size: 35rpx;
52 | background-color: #f8f8f8;
53 | color:#777;
54 | }
55 |
56 | .item .title {
57 | width: 100%;
58 | display: flex;
59 | align-items: center;
60 | justify-content: space-between;
61 | position: relative;
62 | color:#333!important;
63 | margin-left:15rpx;
64 | }
65 |
66 | .item .title .temp-name {
67 | flex: 1;
68 | }
69 |
70 | .item .title .more{
71 | color:#777;
72 | width:60rpx;
73 | text-align: right;
74 | font-size:40rpx;
75 | font-weight: normal;
76 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/meet/time/admin_meet_time.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-picker-multi": "../../../../cmpts/public/picker_multi/picker_multi_cmpt",
4 | "cmpt-calendar": "../../../../cmpts/public/calendar/calendar_meet/calendar_meet_cmpt"
5 | },
6 | "navigationBarBackgroundColor": "#2499f2",
7 | "navigationBarTextStyle": "white",
8 | "navigationBarTitleText": "时间设置"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/mgr/log/admin_log_list.js:
--------------------------------------------------------------------------------
1 | const AdminBiz = require('../../../../biz/admin_biz.js');
2 | const pageHelper = require('../../../../helper/page_helper.js');
3 |
4 | Page({
5 |
6 | /**
7 | * 页面的初始数据
8 | */
9 | data: {
10 | isSuperAdmin: false,
11 | },
12 |
13 | /**
14 | * 生命周期函数--监听页面加载
15 | */
16 | onLoad: function (options) {
17 | if (!AdminBiz.isAdmin(this)) return;
18 |
19 | //设置搜索菜单
20 | this.setData(this._getSearchMenu());
21 |
22 | this.setData({
23 | isSuperAdmin: AdminBiz.isSuperAdmin(),
24 | });
25 | },
26 |
27 | /**
28 | * 生命周期函数--监听页面初次渲染完成
29 | */
30 | onReady: function () {
31 |
32 | },
33 |
34 | /**
35 | * 生命周期函数--监听页面显示
36 | */
37 | onShow: async function () {},
38 |
39 | /**
40 | * 生命周期函数--监听页面隐藏
41 | */
42 | onHide: function () {
43 |
44 | },
45 |
46 | /**
47 | * 生命周期函数--监听页面卸载
48 | */
49 | onUnload: function () {
50 |
51 | },
52 |
53 | url: async function (e) {
54 | pageHelper.url(e, this);
55 | },
56 |
57 | bindCommListCmpt: function (e) {
58 | pageHelper.commListListener(this, e);
59 | },
60 |
61 |
62 | _getSearchMenu: function () {
63 |
64 | let sortItems = [];
65 | let sortMenus = [{
66 | label: '全部',
67 | type: '',
68 | value: ''
69 | }, {
70 | label: '系统',
71 | type: 'type',
72 | value: 99
73 | },
74 | {
75 | label: '用户',
76 | type: 'type',
77 | value: 0
78 | },
79 | {
80 | label: '内容/文章',
81 | type: 'type',
82 | value: 2
83 | },
84 | {
85 | label: '预约/活动',
86 | type: 'type',
87 | value: 1
88 | }
89 | ]
90 |
91 | return {
92 | sortItems,
93 | sortMenus
94 | }
95 |
96 | }
97 |
98 | })
--------------------------------------------------------------------------------
/miniprogram/pages/admin/mgr/log/admin_log_list.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "navigationBarBackgroundColor": "#2499f2",
5 | "navigationBarTextStyle": "white",
6 | "disableScroll": true,
7 | "navigationBarTitleText": "后台-操作日志"
8 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/mgr/log/admin_log_list.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 共有{{dataList.total}}条符合条件记录
7 |
8 |
9 |
13 |
14 |
15 | 操作人
16 | :
17 | {{item.LOG_ADMIN_NAME}}
18 |
19 |
20 | 操作时间
21 | :
22 | {{item.LOG_ADD_TIME}}
23 |
24 |
25 | 操作内容
26 | :
27 | {{item.LOG_CONTENT}}
28 |
29 |
30 | IP地址
31 | :
32 | {{item.LOG_ADD_IP}}
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/mgr/log/admin_log_list.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | page {
4 | background-color: #f8f8f8;
5 | }
6 |
7 | .admin-comm-list .item .info {
8 | padding: 15rpx 20rpx 0rpx;
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/news/add/admin_news_add.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-img-upload": "../../../../cmpts/public/img/img_upload_cmpt"
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "enablePullDownRefresh": true,
8 | "navigationBarTitleText": "后台-文章添加"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/news/add/admin_news_add.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/news/add/admin_news_add.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/news/content/admin_news_content.js:
--------------------------------------------------------------------------------
1 | // pages/admin/news/content/admin_news_content.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 | })
--------------------------------------------------------------------------------
/miniprogram/pages/admin/news/content/admin_news_content.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {}
3 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/news/content/admin_news_content.wxml:
--------------------------------------------------------------------------------
1 |
2 | pages/admin/news/content/admin_news_content.wxml
3 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/news/content/admin_news_content.wxss:
--------------------------------------------------------------------------------
1 | /* pages/admin/news/content/admin_news_content.wxss */
--------------------------------------------------------------------------------
/miniprogram/pages/admin/news/edit/admin_news_edit.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-img-upload": "../../../../cmpts/public/img/img_upload_cmpt"
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "enablePullDownRefresh": true,
8 | "navigationBarTitleText": "后台-文章修改"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/news/edit/admin_news_edit.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/news/edit/admin_news_edit.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
--------------------------------------------------------------------------------
/miniprogram/pages/admin/news/list/admin_news_list.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "navigationBarBackgroundColor": "#2499f2",
5 | "navigationBarTextStyle": "white",
6 | "disableScroll": true,
7 | "navigationBarTitleText": "后台-内容模块"
8 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/news/list/admin_news_list.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | page {
4 | background-color: #f8f8f8;
5 | }
6 |
7 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/setup/about/admin_setup_about.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-img-upload": "../../../../cmpts/public/img/img_upload_cmpt"
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "enablePullDownRefresh": true,
8 | "navigationBarTitleText": "编辑关于我们"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/setup/about/admin_setup_about.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 关于我们
8 |
9 |
10 | {{formAbout.length}}/50000
11 |
12 |
13 |
14 |
15 |
16 |
17 | {{formAboutFocus}}
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/setup/about/admin_setup_about.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | .btn-skin{
4 | width:155rpx;
5 | padding-left:20rpx!important;
6 | padding-right:20rpx!important;
7 | }
8 |
9 | .title-desc{
10 | padding-left:24rpx;
11 | color:#666;
12 | padding-bottom:30rpx;
13 | border-bottom:1rpx solid #eee;
14 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/setup/contact/admin_setup_contact.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-img-upload": "../../../../cmpts/public/img/img_upload_cmpt"
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "enablePullDownRefresh": true,
8 | "navigationBarTitleText": "编辑联系我们"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/setup/contact/admin_setup_contact.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 地址:
8 |
9 |
10 |
11 |
12 | {{formAddressFocus}}
13 |
14 |
15 | 电话:
16 |
17 |
18 |
19 |
20 |
21 | {{formPhoneFocus}}
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/setup/contact/admin_setup_contact.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | .btn-skin {
4 | width: 155rpx;
5 | padding-left: 20rpx !important;
6 | padding-right: 20rpx !important;
7 | }
8 |
9 | textarea {
10 | min-height: 90rpx;
11 | }
12 |
13 | .title-desc {
14 | padding-left: 24rpx;
15 | color: #666;
16 | padding-bottom: 30rpx;
17 | border-bottom: 1rpx solid #eee;
18 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/setup/qr/admin_setup_qr.js:
--------------------------------------------------------------------------------
1 | const AdminBiz = require('../../../../biz/admin_biz.js');
2 | const pageHelper = require('../../../../helper/page_helper.js');
3 | const cloudHelper = require('../../../../helper/cloud_helper.js');
4 |
5 | Page({
6 |
7 | /**
8 | * 页面的初始数据
9 | */
10 | data: {
11 | isLoad: false,
12 | qrUrl: '',
13 | },
14 |
15 | /**
16 | * 生命周期函数--监听页面加载
17 | */
18 | onLoad: async function (options) {
19 | if (!AdminBiz.isAdmin(this)) return;
20 | await this._loadDetail();
21 | },
22 |
23 | _loadDetail: async function () {
24 | let params = {
25 | };
26 | let opt = {
27 | title: 'bar'
28 | };
29 | try {
30 | await cloudHelper.callCloudSumbit('admin/setup_qr', params, opt).then(res => {
31 | this.setData({
32 | qrUrl: res.data,
33 | isLoad: true
34 | })
35 | });
36 | } catch (err) {
37 | console.error(err);
38 | }
39 |
40 | },
41 |
42 | /**
43 | * 生命周期函数--监听页面初次渲染完成
44 | */
45 | onReady: function () {
46 |
47 | },
48 |
49 | /**
50 | * 生命周期函数--监听页面显示
51 | */
52 | onShow: function () {
53 |
54 | },
55 |
56 | /**
57 | * 生命周期函数--监听页面隐藏
58 | */
59 | onHide: function () {
60 |
61 | },
62 |
63 | /**
64 | * 生命周期函数--监听页面卸载
65 | */
66 | onUnload: function () {
67 |
68 | },
69 |
70 | /**
71 | * 页面相关事件处理函数--监听用户下拉动作
72 | */
73 | onPullDownRefresh: async function () {
74 | await this._loadDetail();
75 | wx.stopPullDownRefresh();
76 | },
77 |
78 | url: function (e) {
79 | pageHelper.url(e, this);
80 | }
81 |
82 | })
--------------------------------------------------------------------------------
/miniprogram/pages/admin/setup/qr/admin_setup_qr.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 |
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "enablePullDownRefresh": true,
8 | "navigationBarTitleText": "小程序码"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/setup/qr/admin_setup_qr.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 放在推广的地方展示
10 |
11 |
12 | 长按图片保存小程序码
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/setup/qr/admin_setup_qr.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | .form-box .checkin {
4 | width: 100%;
5 | padding: 40rpx 40rpx 80rpx;
6 | padding-bottom: 150rpx;
7 | display: flex;
8 | flex-direction: column;
9 | justify-content: flex-start;
10 | align-items: center;
11 | }
12 |
13 | .form-box .checkin .notice {
14 | width: 100%;
15 | font-size: 36rpx;
16 | text-align: center;
17 | color: #000;
18 | margin-bottom: 30rpx;
19 | }
20 |
21 | .form-box .checkin image {
22 | width: 500rpx;
23 | height: 500rpx;
24 | margin: 30rpx 0rpx;
25 | }
26 |
27 | .form-box .checkin .oprt {
28 | margin-top: 0rpx;
29 | text-align: center;
30 | font-size: 30rpx;
31 | color: var(--adminColor);
32 | padding: 20rpx 10rpx;
33 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/user/export/admin_user_export.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 |
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "enablePullDownRefresh": true,
8 | "navigationBarTitleText": "用户资料导出"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/user/export/admin_user_export.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | ※ 数据说明: 针对本次查询结果导出全部数据
8 |
9 |
10 |
11 | 数据下载链接({{time}} 生成)
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | ※ 链接使用说明
22 | 1. 复制以上链接地址,建议在电脑浏览器中打开链接下载数据文件
23 | 2. 为保障信息安全,请勿外传数据链接
24 | 3. 为了防止隐私数据泄露,请在下载后及时点击下方按钮删除
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | 为了防止隐私数据泄露,请在下载上述文件后及时点击按钮删除
39 |
40 |
41 |
--------------------------------------------------------------------------------
/miniprogram/pages/admin/user/export/admin_user_export.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | .form-box .title-desc {
4 | padding-bottom: 10rpx;
5 | border: 0;
6 | font-size: 29rpx;
7 | color: #888;
8 | }
9 |
10 | .btn-admin{
11 | margin-bottom: 20rpx;
12 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/user/list/admin_user_list.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 |
4 | },
5 | "navigationBarBackgroundColor": "#2499f2",
6 | "navigationBarTextStyle": "white",
7 | "disableScroll": true,
8 | "navigationBarTitleText": "用户管理"
9 | }
--------------------------------------------------------------------------------
/miniprogram/pages/admin/user/list/admin_user_list.wxss:
--------------------------------------------------------------------------------
1 | @import '../../../../style/project/base/admin.wxss';
2 |
3 | page {
4 | background-color: #f8f8f8;
5 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/about/contact/about_contact.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/about_contact_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this
12 | });
13 | },
14 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/about/contact/about_contact.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "enablePullDownRefresh": true,
5 | "navigationBarTitleText": "联系我们"
6 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/about/contact/about_contact.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/about/contact/about_contact.wxss:
--------------------------------------------------------------------------------
1 | @import "../../../../style/project/about_contact_base.wxss";
2 | @import "../../skin/skin.wxss";
3 | @import "../index/about_index.wxss";
4 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/about/index/about_index.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/about_index_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this
12 | });
13 | },
14 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/about/index/about_index.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "enablePullDownRefresh": true,
5 | "navigationBarTitleText": "关于我们"
6 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/about/index/about_index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/about/index/about_index.wxss:
--------------------------------------------------------------------------------
1 | @import "../../skin/skin.wxss";
2 | @import "../../../../style/project/about_index_base.wxss";
3 |
4 | .main .pics {
5 | width: 100%;
6 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/calendar/index/calendar_index.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/calendar_index_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this,
12 | isLoadSkin: true,
13 | tabIndex: 1
14 | });
15 | },
16 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/calendar/index/calendar_index.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-calendar": "../../../../cmpts/public/calendar/calendar_comm/calendar_comm_cmpt"
4 | },
5 | "enablePullDownRefresh": true,
6 | "navigationBarTitleText": "预约日历"
7 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/calendar/index/calendar_index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/calendar/index/calendar_index.wxss:
--------------------------------------------------------------------------------
1 | @import "../../skin/skin.wxss";
2 | @import "../../../../style/project/calendar_index_base.wxss";
3 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/default/index/default_index.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/default_index_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | skin.cate2 = false;
10 | PassortBiz.initPage({
11 | skin,
12 | that: this,
13 | isLoadSkin: true,
14 | tabIndex: -1,
15 | isModifyNavColor: true
16 | });
17 | },
18 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/default/index/default_index.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "enablePullDownRefresh": true,
5 | "navigationStyle": "custom",
6 | "navigationBarTitleText": "首页"
7 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/default/index/default_index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/default/index/default_index.wxss:
--------------------------------------------------------------------------------
1 | @import "../../../../style/project/base/appt.wxss";
2 | @import "../../skin/skin.wxss";
3 | @import "../../../../style/project/default_index_base.wxss";
4 |
5 | .up image {
6 | width: 100%;
7 | height: 550rpx;
8 | }
9 |
10 | .pic-card {
11 | width: 100%;
12 | display: flex;
13 | align-items: center;
14 | justify-content: center;
15 | }
16 |
17 | .pic-card image {
18 | width: inherit;
19 | height: inherit;
20 | border-radius: 10rpx;
21 | box-shadow: 6rpx 6rpx 8rpx rgba(235, 132, 195, 0.2);
22 | }
23 |
24 | .pic-card .title {
25 | z-index: 99999;
26 | color: var(--projectColor);
27 | font-weight: bold;
28 | top: 5rpx;
29 | left: 15rpx;
30 | position: absolute;
31 | font-size: 28rpx;
32 | }
33 |
34 | .pic-card .left {
35 | height: 500rpx;
36 | width: 320rpx;
37 | background-color: #fff;
38 | margin-right: 14rpx;
39 | border-radius: 10rpx;
40 | position: relative;
41 | }
42 |
43 | .pic-card .right {
44 | height: 500rpx;
45 | flex: 1;
46 | display: flex;
47 | align-items: flex-start;
48 | justify-content: flex-start;
49 | flex-direction: column;
50 | }
51 |
52 | .pic-card .right .item1,
53 | .pic-card .right .item2 {
54 | width: 100%;
55 | height: 243rpx;
56 | border-radius: 10rpx;
57 | background-color: #fff;
58 | position: relative;
59 | }
60 |
61 | .pic-card .right .item1 .title,
62 | .pic-card .right .item2 .title {
63 | padding:0 15rpx;
64 | background-color: rgba(255,255,255, .7);
65 | border-radius: 10rpx;
66 | display: flex;
67 | align-items: center;
68 | justify-content: center;
69 | }
70 |
71 | .pic-card .right .item1 {
72 | margin-bottom: 14rpx;
73 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/detail/meet_detail.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/meet_detail_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this,
12 | isLoadSkin: true,
13 | });
14 |
15 | wx.setNavigationBarTitle({
16 | title: skin.MEET_NAME + '详情'
17 | });
18 | },
19 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/detail/meet_detail.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "enablePullDownRefresh": true,
5 | "navigationBarTitleText": "活动/预约详情"
6 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/detail/meet_detail.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/index/meet_index.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/meet_index_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this,
12 | isLoadSkin: true,
13 | isModifyNavColor: true
14 | });
15 |
16 | this._setTypeTitle(skin);
17 | },
18 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/index/meet_index.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "disableScroll": true,
5 | "navigationBarTitleText": "活动/预约列表"
6 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/index/meet_index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/index/meet_index.wxss:
--------------------------------------------------------------------------------
1 | @import "../../../../style/project/base/appt.wxss";
2 | @import "../../skin/skin.wxss";
3 | @import "../../../../style/project/meet_index_base.wxss";
4 |
5 | page {
6 | background-color: var(--projectCompareColor)
7 | }
8 |
9 | .load-project {
10 | color: #333 !important;
11 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/join/meet_join.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/meet_join_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this
12 | });
13 | },
14 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/join/meet_join.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "cmpt-form-show": "/cmpts/public/form/form_show/form_show_cmpt"
4 | },
5 | "enablePullDownRefresh": true,
6 | "navigationBarTitleText": "预约详情"
7 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/join/meet_join.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/join/meet_join.wxss:
--------------------------------------------------------------------------------
1 | @import "../../../../style/project/base/detail.wxss";
2 | @import "../../skin/skin.wxss";
3 | @import "../../../../style/project/meet_join_base.wxss";
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/self/meet_self.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/meet_self_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this
12 | });
13 | },
14 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/self/meet_self.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "navigationBarTitleText": "自助签到"
5 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/self/meet_self.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/meet/self/meet_self.wxss:
--------------------------------------------------------------------------------
1 | @import "../../skin/skin.wxss";
2 | @import "../../../../style/project/meet_self_base.wxss";
3 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/edit/my_edit.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/my_edit_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this
12 | });
13 | },
14 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/edit/my_edit.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "enablePullDownRefresh": true,
5 | "navigationBarTitleText": "个人资料"
6 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/edit/my_edit.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/edit/my_edit.wxss:
--------------------------------------------------------------------------------
1 | @import "../../skin/skin.wxss";
2 | @import "../../../../style/project/my_edit_base.wxss";
3 |
4 | .submit-line {
5 | width: 100%;
6 | }
7 |
8 | .form-group .mobile {
9 | flex: 1;
10 | text-align: left;
11 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/index/my_index.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/my_index_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this,
12 | isLoadSkin: true,
13 | tabIndex: -1
14 | });
15 |
16 | },
17 |
18 | bindSetTap: function (e) {
19 | this.setTap(e, skin);
20 | }
21 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/index/my_index.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 |
4 | },
5 | "enablePullDownRefresh": true,
6 | "navigationBarTitleText": "我的"
7 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/index/my_index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/index/my_index.wxss:
--------------------------------------------------------------------------------
1 | @import "../../skin/skin.wxss";
2 | @import "../../../../style/project/my_index_base.wxss";
3 |
4 | /*投影*/
5 | .main .upside {
6 | border-bottom-left-radius: 80rpx;
7 | border-bottom: 15rpx solid var(--projectCompareColor);
8 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/join/my_join.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/my_join_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this,
12 | isLoadSkin: true,
13 | });
14 |
15 | this.getSearchMenu(skin, this);
16 | },
17 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/join/my_join.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "disableScroll": true,
5 | "navigationBarTitleText": "我的活动/预约"
6 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/join/my_join.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/join/my_join.wxss:
--------------------------------------------------------------------------------
1 | @import "../../../../style/project/base/article_list.wxss";
2 | @import "../../skin/skin.wxss";
3 | @import "../../../../style/project/my_join_base.wxss";
4 |
5 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/join_detail/my_join_detail.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/my_join_detail_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this,
12 | isLoadSkin: true,
13 | });
14 | },
15 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/join_detail/my_join_detail.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "enablePullDownRefresh": true,
5 | "navigationBarTitleText": "我的活动/预约详情"
6 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/join_detail/my_join_detail.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/my/join_detail/my_join_detail.wxss:
--------------------------------------------------------------------------------
1 | @import "../../../../style/project/base/article_list.wxss";
2 | @import "../../skin/skin.wxss";
3 | @import "../../../../style/project/my_join_detail_base.wxss";
4 |
5 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/cate1/news_cate1.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/news_index_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this,
12 | isLoadSkin: true,
13 | tabIndex: -1,
14 | isModifyNavColor: true
15 | });
16 |
17 | this._setCateTitle(skin, 1);
18 |
19 | },
20 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/cate1/news_cate1.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "disableScroll": true,
5 | "navigationBarTitleText": "资讯"
6 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/cate1/news_cate1.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/cate1/news_cate1.wxss:
--------------------------------------------------------------------------------
1 | @import "../../../../style/project/base/appt.wxss";
2 | @import "../../skin/skin.wxss";
3 | @import "../../../../style/project/news_index_base.wxss";
4 |
5 | page {
6 | background-color: var(--projectCompareColor)
7 | }
8 |
9 | .load-project {
10 | color: #333 !important;
11 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/cate2/news_cate2.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/news_index_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this,
12 | isLoadSkin: true,
13 | tabIndex: -1,
14 | isModifyNavColor: true
15 | });
16 |
17 | this._setCateTitle(skin, 2);
18 |
19 | },
20 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/cate2/news_cate2.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "disableScroll": true,
5 | "navigationBarTitleText": "资讯"
6 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/cate2/news_cate2.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/cate2/news_cate2.wxss:
--------------------------------------------------------------------------------
1 | @import "../../../../style/project/base/appt.wxss";
2 | @import "../../skin/skin.wxss";
3 | @import "../../../../style/project/news_index_base.wxss";
4 |
5 | page {
6 | background-color: var(--projectCompareColor)
7 | }
8 |
9 | .load-project {
10 | color: #333 !important;
11 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/detail/news_detail.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/news_detail_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this
12 | });
13 | },
14 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/detail/news_detail.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "enablePullDownRefresh": true,
5 | "navigationBarTitleText": "详细内容"
6 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/detail/news_detail.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/detail/news_detail.wxss:
--------------------------------------------------------------------------------
1 | @import "../../../../style/project/base/detail.wxss";
2 | @import "../../skin/skin.wxss";
3 | @import "../../../../style/project/news_detail_base.wxss";
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/index/news_index.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../../behavior/news_index_bh.js');
2 | let PassortBiz = require('../../../../biz/passport_biz.js');
3 | let skin = require('../../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this,
12 | isLoadSkin: true,
13 | tabIndex: -1,
14 | isModifyNavColor: true
15 | });
16 |
17 | this._setCateTitle(skin);
18 |
19 | },
20 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/index/news_index.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | },
4 | "disableScroll": true,
5 | "navigationBarTitleText": "资讯"
6 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/index/news_index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/news/index/news_index.wxss:
--------------------------------------------------------------------------------
1 | @import "../../../../style/project/base/appt.wxss";
2 | @import "../../skin/skin.wxss";
3 | @import "../../../../style/project/news_index_base.wxss";
4 |
5 | page {
6 | background-color: var(--projectCompareColor)
7 | }
8 |
9 | .load-project {
10 | color: #333 !important;
11 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/search/search.js:
--------------------------------------------------------------------------------
1 | let behavior = require('../../../behavior/search_bh.js');
2 | let PassortBiz = require('../../../biz/passport_biz.js');
3 | let skin = require('../skin/skin.js');
4 |
5 | Page({
6 | behaviors: [behavior],
7 |
8 | onReady: function () {
9 | PassortBiz.initPage({
10 | skin,
11 | that: this
12 | });
13 | },
14 | })
--------------------------------------------------------------------------------
/miniprogram/projects/A00/search/search.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {}
3 | }
--------------------------------------------------------------------------------
/miniprogram/projects/A00/search/search.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/miniprogram/projects/A00/search/search.wxss:
--------------------------------------------------------------------------------
1 | @import "../skin/skin.wxss";
2 | @import "../../../style/project/search_base.wxss";
--------------------------------------------------------------------------------
/miniprogram/projects/A00/skin/images/default_index_bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/projects/A00/skin/images/default_index_bg.jpg
--------------------------------------------------------------------------------
/miniprogram/projects/A00/skin/images/menu/meet_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/projects/A00/skin/images/menu/meet_1.png
--------------------------------------------------------------------------------
/miniprogram/projects/A00/skin/images/menu/meet_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/projects/A00/skin/images/menu/meet_2.png
--------------------------------------------------------------------------------
/miniprogram/projects/A00/skin/images/menu/news_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/projects/A00/skin/images/menu/news_1.png
--------------------------------------------------------------------------------
/miniprogram/projects/A00/skin/images/tabbar/cate1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/projects/A00/skin/images/tabbar/cate1.png
--------------------------------------------------------------------------------
/miniprogram/projects/A00/skin/images/tabbar/cate1_cur.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/projects/A00/skin/images/tabbar/cate1_cur.png
--------------------------------------------------------------------------------
/miniprogram/projects/A00/skin/images/tabbar/day.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/projects/A00/skin/images/tabbar/day.png
--------------------------------------------------------------------------------
/miniprogram/projects/A00/skin/images/tabbar/day_cur.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/projects/A00/skin/images/tabbar/day_cur.png
--------------------------------------------------------------------------------
/miniprogram/projects/A00/skin/images/tabbar/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/projects/A00/skin/images/tabbar/home.png
--------------------------------------------------------------------------------
/miniprogram/projects/A00/skin/images/tabbar/home_cur.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/projects/A00/skin/images/tabbar/home_cur.png
--------------------------------------------------------------------------------
/miniprogram/projects/A00/skin/images/tabbar/my.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/projects/A00/skin/images/tabbar/my.png
--------------------------------------------------------------------------------
/miniprogram/projects/A00/skin/images/tabbar/my_cur.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/projects/A00/skin/images/tabbar/my_cur.png
--------------------------------------------------------------------------------
/miniprogram/projects/A00/skin/skin.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | PID: 'A00', //自习室
3 |
4 | NAV_COLOR: '#ffffff',
5 | NAV_BG: '#594BC8',
6 |
7 | MEET_NAME: '预约',
8 |
9 | MENU_ITEM: ['首页', '预约日历', '我的'], // 第1,4,5菜单
10 |
11 | NEWS_CATE: '1=预约规则',
12 | MEET_TYPE: '1=自习室预约|leftbig2,2=储物柜预约|leftbig3',
13 |
14 | DEFAULT_FORMS: [{
15 | type: 'line',
16 | title: '姓名',
17 | desc: '请填写您的姓名',
18 | must: true,
19 | len: 50,
20 | onlySet: {
21 | mode: 'all',
22 | cnt: -1
23 | },
24 | selectOptions: ['', ''],
25 | mobileTruth: true,
26 | checkBoxLimit: 2,
27 | },
28 | {
29 | type: 'line',
30 | title: '手机',
31 | desc: '请填写您的手机号码',
32 | must: true,
33 | len: 50,
34 | onlySet: {
35 | mode: 'all',
36 | cnt: -1
37 | },
38 | selectOptions: ['', ''],
39 | mobileTruth: true,
40 | checkBoxLimit: 2,
41 | }
42 | ]
43 | }
--------------------------------------------------------------------------------
/miniprogram/setting/setting.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | //### 环境相关
3 | CLOUD_ID: 'dev-5gf0o85o226fad1d', //你的云环境id
4 |
5 | // #### 版本信息
6 | VER: 'build 2022.02',
7 | COMPANY: '联系作者',
8 |
9 | // #### 系统参数
10 | PID: 'A00',
11 | IS_SUB: false,
12 |
13 | // #### setup相关
14 | SETUP_PIC_PATH: 'setup/pic/',
15 |
16 | // #### 预约相关
17 | MEET_CAN_NULL_TIME: false, // 是否允许有无时段的日期保存和展示
18 | MEET_PIC_PATH: 'meet/pic/',
19 |
20 | //#################
21 | CHECK_CONTENT: false, //图片文字是否校验
22 |
23 | // ### 内容安全
24 | CLIENT_CHECK_CONTENT: false, //前台图片文字是否校验
25 | ADMIN_CHECK_CONTENT: false, //后台图片文字是否校验
26 |
27 |
28 | IMG_UPLOAD_SIZE: 20, //图片上传大小M兆
29 |
30 |
31 | // #### 缓存相关
32 | CACHE_IS_LIST: true, //列表是否缓存
33 | CACHE_LIST_TIME: 60 * 30, //列表缓存时间秒
34 |
35 |
36 | // #### 资讯相关
37 | NEWS_PIC_PATH: 'news/pic/',
38 |
39 |
40 | // #### 后台相关
41 | ADMIN_TOKEN_EXPIRE: 3600 * 2, //管理员过期时间2小时有效 秒
42 |
43 | }
--------------------------------------------------------------------------------
/miniprogram/sitemap.json:
--------------------------------------------------------------------------------
1 | {
2 | "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
3 | "rules": [{
4 | "action": "disallow",
5 | "page": "*"
6 | }]
7 | }
--------------------------------------------------------------------------------
/miniprogram/style/comm/avatar.wxss:
--------------------------------------------------------------------------------
1 |
2 | /* ==================
3 | 头像
4 | ==================== */
5 | .avatar {
6 | font-variant: small-caps;
7 | margin: 0;
8 | padding: 0;
9 | display: inline-flex;
10 | text-align: center;
11 | justify-content: center;
12 | align-items: center;
13 | color: var(--white);
14 | white-space: nowrap;
15 | position: relative;
16 | width: 64rpx;
17 | height: 64rpx;
18 | background-size: cover;
19 | background-position: center;
20 | vertical-align: middle;
21 | font-size: 1.5em;
22 | }
23 |
24 | .avatar:not([class*="bg-"]) {
25 | background-color: #ccc;
26 | }
27 |
28 | .avatar.xs {
29 | width: 32rpx;
30 | height: 32rpx;
31 | font-size: 1em;
32 | }
33 |
34 | .avatar.small {
35 | width: 48rpx;
36 | height: 48rpx;
37 | font-size: 1em;
38 | }
39 |
40 | .avatar.large {
41 | width: 96rpx;
42 | height: 96rpx;
43 | font-size: 2em;
44 | }
45 |
46 | .avatar.xl {
47 | width: 128rpx;
48 | height: 128rpx;
49 | font-size: 2.5em;
50 | }
51 |
52 | .avatar .avatar-text {
53 | font-size: 0.4em;
54 | }
55 |
56 | .avatar-group {
57 | direction: rtl;
58 | unicode-bidi: bidi-override;
59 | padding: 0 10rpx 0 40rpx;
60 | display: inline-block;
61 | }
62 |
63 | .avatar-group .avatar {
64 | margin-left: -30rpx;
65 | border: 4rpx solid var(--ghostWhite);
66 | vertical-align: middle;
67 | }
68 |
69 | .avatar-group .avatar.small {
70 | margin-left: -20rpx;
71 | border: 1rpx solid var(--ghostWhite);
72 | }
73 |
--------------------------------------------------------------------------------
/miniprogram/style/comm/comm.wxss:
--------------------------------------------------------------------------------
1 | @import "base.wxss";
2 |
3 | @import "avatar.wxss";
4 | @import "background.wxss";
5 | @import "bar.wxss";
6 | @import "border.wxss";
7 | @import "button.wxss";
8 | @import "image.wxss";
9 | @import "modal.wxss";
10 | @import "nav.wxss";
11 | @import "shadow.wxss";
12 | @import "tag.wxss";
13 | @import "icon.wxss";
14 | @import "form.wxss";
15 | @import "text.wxss";
16 | @import "list.wxss";
17 | @import "load.wxss";
18 | @import "layout.wxss";
19 | @import "animation.wxss";
--------------------------------------------------------------------------------
/miniprogram/style/comm/image.wxss:
--------------------------------------------------------------------------------
1 |
2 | /* ==================
3 | 图片
4 | ==================== */
5 |
6 | image {
7 | max-width: 100%;
8 | display: inline-block;
9 | position: relative;
10 | z-index: 0;
11 | }
12 |
13 | image.loading::before {
14 | content: "";
15 | background-color: #f5f5f5;
16 | display: block;
17 | position: absolute;
18 | width: 100%;
19 | height: 100%;
20 | z-index: -2;
21 | }
22 |
23 | image.loading::after {
24 | content: "\e7f1";
25 | font-family: "icon";
26 | position: absolute;
27 | top: 0;
28 | left: 0;
29 | width: 32rpx;
30 | height: 32rpx;
31 | line-height: 32rpx;
32 | right: 0;
33 | bottom: 0;
34 | z-index: -1;
35 | font-size: 32rpx;
36 | margin: auto;
37 | color: #ccc;
38 | -webkit-animation: icon-spin 2s infinite linear;
39 | animation: icon-spin 2s infinite linear;
40 | display: block;
41 | }
--------------------------------------------------------------------------------
/miniprogram/style/comm/nav.wxss:
--------------------------------------------------------------------------------
1 |
2 | /* ==================
3 | 导航栏
4 | ==================== */
5 |
6 | .tab {
7 | white-space: nowrap;
8 | }
9 |
10 | ::-webkit-scrollbar {
11 | display: none;
12 | }
13 |
14 | .tab .item {
15 | height: 90rpx;
16 | display: inline-block;
17 | line-height: 90rpx;
18 | margin: 0 10rpx;
19 | padding: 0 20rpx;
20 | }
21 |
22 | .tab .item.cur {
23 | border-bottom: 4rpx solid;
24 | }
25 |
26 |
--------------------------------------------------------------------------------
/miniprogram/style/project/about_contact_base.wxss:
--------------------------------------------------------------------------------
1 | .main .content .title {
2 | text-align: left;
3 | border-bottom:1rpx dashed #ccc;
4 | }
--------------------------------------------------------------------------------
/miniprogram/style/project/about_index_base.wxss:
--------------------------------------------------------------------------------
1 | .main {
2 | padding: 40rpx;
3 | height: 100vh;
4 | display: flex;
5 | flex-direction: column;
6 | justify-content: flex-start;
7 | }
8 |
9 | .main .main-content {
10 | width: 100%;
11 | flex: 1;
12 | }
13 |
14 | .main .content {
15 | width: 100%;
16 | background-color: #fff;
17 | padding: 50rpx;
18 | border-radius: 20rpx;
19 | margin-top: 15rpx;
20 | }
21 |
22 | .main .content .title {
23 | width: 100%;
24 | text-align: left;
25 | font-size: 36rpx;
26 | line-height: 1.8;
27 | margin-bottom: 30rpx;
28 | }
29 |
30 | .main .content .txt {
31 | color: #666;
32 | margin-bottom: 30rpx;
33 | font-size: 28rpx;
34 | line-height: 1.6;
35 | }
36 |
37 | .main .content.content-err {
38 | padding-top: 120rpx;
39 | padding-bottom: 120rpx;
40 | }
41 |
42 | .main .content .err-icon {
43 | text-align: center;
44 | font-size: 150rpx;
45 | }
46 |
47 | .main .content .err-info {
48 | text-align: center;
49 | font-size: 30rpx;
50 | color: #666;
51 | }
52 |
53 | .main .content .err-apply {
54 | display: flex;
55 | justify-content: center;
56 | align-items: center;
57 | margin-top: 60rpx;
58 | }
59 |
60 | .main .comm-list {
61 | width: 100%;
62 | }
63 |
64 |
65 | .main .pics {
66 | width: 60%;
67 | margin-top: 30rpx;
68 | display: flex;
69 | flex-direction: column;
70 | justify-content: center;
71 | align-items: center;
72 | }
73 |
74 | .main .pics image {
75 | flex: 1;
76 | border-radius: 10rpx;
77 | margin-bottom: 20rpx;
78 | }
--------------------------------------------------------------------------------
/miniprogram/style/project/calendar_index_base.wxss:
--------------------------------------------------------------------------------
1 |
2 | page {
3 | background-color: #f2f2f2;
4 | }
5 |
6 | .main {
7 | padding: 0 0 20rpx;
8 | }
9 |
10 | .main .plan-date {
11 | width: 100%;
12 | position: sticky;
13 | top: 0;
14 | z-index: 999;
15 | box-shadow: var(--ShadowSize) var(--greyShadow);
16 | }
17 |
18 | .main .list {
19 | width: 100%;
20 | display: flex;
21 | flex-direction: column;
22 | justify-content: flex-start;
23 | align-items: center;
24 | padding: 30rpx 20rpx;
25 | }
26 |
27 | .main .list .item {
28 | width: 100%;
29 | display: flex;
30 | justify-content: space-between;
31 | align-items: center;
32 | height: 100rpx;
33 | padding: 0 30rpx 0 0;
34 | background-color: #fff;
35 | margin-bottom: 30rpx;
36 | border-radius: 10rpx;
37 | overflow: hidden;
38 | }
39 |
40 | .main .list .item .left {
41 | width: 8rpx;
42 | height: 100rpx;
43 | margin-right: 15rpx;
44 |
45 | }
46 |
47 | .main .list .item .img {
48 | width: 65rpx;
49 | height: 65rpx;
50 | border-radius: 50%;
51 | position: relative;
52 | }
53 |
54 | .main .list .item .title {
55 | flex: 1;
56 | text-align: left;
57 | font-size: 28rpx;
58 | font-weight: bold;
59 | color: #333;
60 | margin-left: 20rpx;
61 | }
62 |
63 | .main .list .item .time {
64 | width: 140rpx;
65 | text-align: right;
66 | font-size: 26rpx;
67 | color: #999;
68 | }
69 |
70 | .main .list .no-project {
71 | padding: 30rpx 30rpx;
72 | font-size: 28rpx;
73 | }
--------------------------------------------------------------------------------
/miniprogram/style/project/default_index_base.wxss:
--------------------------------------------------------------------------------
1 | .main {
2 | padding: 0rpx 0rpx 100rpx;
3 | }
4 |
5 | .up {
6 | width: 100%;
7 | }
8 |
9 | .up image {
10 | width: 100%;
11 | height: 400rpx;
12 | }
13 |
14 | .down {
15 | width: 100%;
16 | box-sizing: border-box;
17 | padding: 10rpx 30rpx;
18 | margin-top: -200rpx;
19 | z-index: 9999;
20 | }
21 |
22 | .menu {
23 | width: 100%;
24 | display: flex;
25 | flex-wrap: wrap;
26 | background-color: #fff;
27 | padding: 20rpx 10rpx;
28 | border-radius: 20rpx;
29 | }
30 |
31 | .menu .item {
32 | width: 33.3%;
33 | display: flex;
34 | align-items: center;
35 | justify-content: center;
36 | height: 180rpx;
37 |
38 | }
39 |
40 | .menu .item .item-inner {
41 | width: 100%;
42 | display: flex;
43 | flex-direction: column;
44 | align-items: center;
45 | justify-content: center;
46 |
47 | }
48 |
49 | .menu .item-inner .img {
50 | width: 75rpx;
51 | height: 75rpx;
52 | display: flex;
53 | justify-content: center;
54 | align-items: center;
55 | }
56 |
57 | .menu .item-inner .img image {
58 | width: 75rpx;
59 | height: 75rpx;
60 | }
61 |
62 | .menu .item-inner .title {
63 | margin-top: 20rpx;
64 | font-size: 26rpx;
65 | color: #333;
66 | }
67 |
68 | .meet-list-box {
69 | width: 100%;
70 | padding:0;
71 | margin-top:40rpx;
72 | overflow:unset;
73 | }
--------------------------------------------------------------------------------
/miniprogram/style/project/meet_index_base.wxss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/style/project/meet_index_base.wxss
--------------------------------------------------------------------------------
/miniprogram/style/project/meet_join_base.wxss:
--------------------------------------------------------------------------------
1 |
2 | .form-group .line-desc{
3 | font-size:28rpx;
4 | text-align: center;
5 | width:100%;
6 | color:#666;
7 | }
8 |
9 | .submit-line {
10 | width: 100%;
11 | }
12 |
--------------------------------------------------------------------------------
/miniprogram/style/project/meet_self_base.wxss:
--------------------------------------------------------------------------------
1 | .load.loading::after {
2 | content: "自助签到中,请稍候...";
3 | }
--------------------------------------------------------------------------------
/miniprogram/style/project/my_edit_base.wxss:
--------------------------------------------------------------------------------
1 | .submit-line {
2 | width: 100%;
3 | }
4 |
5 | .form-group .mobile {
6 | flex: 1;
7 | text-align: left;
8 | }
--------------------------------------------------------------------------------
/miniprogram/style/project/my_join_base.wxss:
--------------------------------------------------------------------------------
1 |
2 | .text-pic-list-box .item {
3 | padding: 20rpx 30rpx 20rpx 40rpx;
4 | position: relative;
5 | overflow: hidden;
6 | }
7 |
8 | .text-pic-list-box .item .status {
9 | z-index: 9999;
10 | position: absolute;
11 | top: 0;
12 | right: 0;
13 | font-size: 24rpx;
14 | border-bottom-left-radius: 10rpx;
15 | background-color: #f8f8f8;
16 | padding: 0rpx 10rpx 0rpx;
17 | color: #bbb;
18 | }
19 |
20 | .text-pic-list-box .item .qr {
21 | z-index: 9999;
22 | position: absolute;
23 | top: 0;
24 | right: 0;
25 | font-size: 24rpx;
26 | border-bottom-left-radius: 10rpx;
27 | background-color: #f2f2f2;
28 | padding: 0rpx 10rpx 0rpx;
29 | color: #666;
30 | font-size:40rpx;
31 | }
32 |
33 | .btn.mid {
34 | padding: 0 30rpx;
35 | }
36 |
37 | .text-pic-list-box .item .author {
38 | font-size: 28rpx;
39 | color: #999;
40 | }
41 |
42 | .text-pic-list-box .item .title {
43 | position: relative;
44 | padding-right: 20rpx;
45 | }
46 |
47 | .text-pic-list-box .item .data {
48 | line-height: 1.5;
49 | font-size: 26rpx;
50 | color: #666;
51 | margin-top: 10rpx;
52 | display: flex;
53 | justify-content: flex-start;
54 | align-items: center;
55 | }
56 |
57 | .text-time {
58 | color: #ccc;
59 | }
--------------------------------------------------------------------------------
/miniprogram/style/project/news_detail_base.wxss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/style/project/news_detail_base.wxss
--------------------------------------------------------------------------------
/miniprogram/style/project/news_index_base.wxss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/miniprogram/style/project/news_index_base.wxss
--------------------------------------------------------------------------------
/miniprogram/style/project/search_base.wxss:
--------------------------------------------------------------------------------
1 |
2 | .main-search {
3 | box-sizing: border-box;
4 | width: 100%;
5 | height: 100vh;
6 | display: flex;
7 | padding: 0;
8 | flex-direction: column;
9 | justify-content: center;
10 | align-items: center;
11 | }
12 |
13 | .main-search .search {
14 | width: 100%;
15 | }
16 |
17 | .main-search .his {
18 | flex: 1;
19 | margin-top: 2rpx;
20 | width: 100%;
21 | background-color: #fff;
22 | display: flex;
23 | flex-direction: column;
24 | padding: 30rpx;
25 | }
26 |
27 | .main-search .his .title {
28 | width: 100%;
29 | display: flex;
30 | align-items: center;
31 | justify-content: flex-start;
32 | }
33 |
34 | .main-search .his .title .tit {
35 | font-size: 34rpx;
36 | font-weight: bold;
37 | flex: 1;
38 | }
39 |
40 | .main-search .his .title .del {
41 | font-size: 32rpx;
42 | color: #aaa;
43 | margin-left: auto;
44 | }
45 |
46 | .main-search .his .search-content {
47 | width: 100%;
48 | display: flex;
49 | align-items: center;
50 | flex-wrap: wrap;
51 | margin-top: 40rpx;
52 | }
53 |
54 | .main-search .his .search-content .btn {
55 | margin-right: 30rpx;
56 | margin-top: 30rpx;
57 | font-size: 28rpx;
58 | padding: 35rpx 45rpx;
59 | background-color: #f2f2f2;
60 | }
--------------------------------------------------------------------------------
/miniprogram/tpls/project/about_index_tpl.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 关于我们
9 | {{about.SETUP_ABOUT}}
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | v{{accountInfo.miniProgram.version}} {{accountInfo.miniProgram.envVersion}}
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/miniprogram/tpls/project/calendar_index_tpl.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | 本日没有可预约的项目哦~
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | {{item.title}}
22 | {{item.timeDesc}}
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/miniprogram/tpls/project/default_index_tpl.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{item.label}}
12 |
13 |
14 |
15 |
16 |
17 |
18 | {{item.label}}
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/miniprogram/tpls/project/meet_index_tpl.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/miniprogram/tpls/project/meet_join_tpl.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | {{meet.MEET_TITLE}}
11 |
12 |
13 | {{meet.dayDesc}} 更改时段
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | 请您填写资料,带*号为必填项
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/miniprogram/tpls/project/meet_self_tpl.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/miniprogram/tpls/project/news_detail_tpl.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | {{news.NEWS_TITLE}}
11 | {{news.NEWS_ADD_TIME}} {{news.NEWS_CATE_NAME}}
12 |
13 |
14 |
15 |
16 |
17 | {{item.val}}
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/miniprogram/tpls/project/news_index_tpl.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/miniprogram/tpls/project/search_tpl.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | 历史记录
17 |
18 |
19 |
20 | {{item}}
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/miniprogram/tpls/public/list_load_tpl.wxml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | {{noHint?noHint:'暂无记录哦~'}}
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/miniprogram/tpls/public/top_tpl.wxml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/miniprogram/tpls/wxs/tools.wxs:
--------------------------------------------------------------------------------
1 | function indexOf(data, key) {
2 | return data.indexOf(key);
3 | }
4 |
5 | function includes(data, key) {
6 | return data.indexOf(key) > -1 ? true : false;
7 | }
8 |
9 | function split(str, chr) {
10 | var arr = str.split(chr);
11 | if (arr.length == 0) return [];
12 |
13 | return arr;
14 | }
15 |
16 | module.exports = {
17 | split: split,
18 | indexOf: indexOf,
19 | includes: includes
20 | };
21 | module.exports.msg = "hello tools";
--------------------------------------------------------------------------------
/project.private.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "setting": {
3 | "compileHotReLoad": true
4 | },
5 | "condition": {},
6 | "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
7 | "projectname": "自习室"
8 | }
--------------------------------------------------------------------------------
/自习室小程序安装使用手册.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chetanbuluo/StudyRoom/26923b05bd4d5356527f37ef7c786d54633dc2e0/自习室小程序安装使用手册.docx
--------------------------------------------------------------------------------