├── README.md ├── backend ├── config │ ├── application.properties │ ├── logback-dev.xml │ ├── logback.xml │ └── mybatis-generator.xml ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── collegevol │ │ ├── Application.java │ │ ├── config │ │ ├── CorsConfig.java │ │ ├── ImgFileConfig.java │ │ ├── MybatisPlusConfig.java │ │ ├── RedisSessionConfig.java │ │ ├── WebConfig.java │ │ └── WebSecurityConfig.java │ │ ├── controller │ │ ├── EventApplyController.java │ │ ├── EventController.java │ │ ├── PictureController.java │ │ ├── QrcodeController.java │ │ ├── UserController.java │ │ └── WebController.java │ │ ├── dao │ │ ├── EventApplyMapper.java │ │ ├── EventCommentMapper.java │ │ ├── EventLikeMapper.java │ │ ├── EventMapper.java │ │ ├── EventPictureMapper.java │ │ ├── EventPictureSliderMapper.java │ │ ├── EventTagMapper.java │ │ ├── QrcodeMapper.java │ │ └── UserInfoMapper.java │ │ ├── entity │ │ ├── Event.java │ │ ├── EventApply.java │ │ ├── EventApplyInfo.java │ │ ├── EventComment.java │ │ ├── EventLike.java │ │ ├── EventPicture.java │ │ ├── EventPictureSlider.java │ │ ├── EventTag.java │ │ ├── Qrcode.java │ │ └── UserInfo.java │ │ ├── generator │ │ └── CodeGenerator.java │ │ ├── interceptor │ │ └── RedisSessionInterceptor.java │ │ ├── mapper │ │ ├── EventApplyMapper.xml │ │ ├── EventCommentMapper.xml │ │ ├── EventLikeMapper.xml │ │ ├── EventMapper.xml │ │ ├── EventPictureMapper.xml │ │ ├── EventPictureSliderMapper.xml │ │ ├── EventTagMapper.xml │ │ ├── QrcodeMapper.xml │ │ └── UserInfoMapper.xml │ │ ├── po │ │ └── UserPo.java │ │ ├── resolver │ │ ├── MultiRequestBody.java │ │ └── MultiRequestBodyArgumentResolver.java │ │ ├── service │ │ ├── EventApplyService.java │ │ ├── EventCommentService.java │ │ ├── EventLikeService.java │ │ ├── EventPictureService.java │ │ ├── EventPictureSliderService.java │ │ ├── EventService.java │ │ ├── QRCodeUserService.java │ │ ├── QrcodeService.java │ │ ├── UserInfoService.java │ │ └── impl │ │ │ ├── EventApplyServiceImpl.java │ │ │ ├── EventCommentServiceImpl.java │ │ │ ├── EventLikeServiceImpl.java │ │ │ ├── EventPictureServiceImpl.java │ │ │ ├── EventPictureSliderServiceImpl.java │ │ │ ├── EventServiceImpl.java │ │ │ ├── QRCodeUserServiceImpl.java │ │ │ ├── QrcodeServiceImpl.java │ │ │ └── UserInfoServiceImpl.java │ │ ├── task │ │ └── ScheduleTask.java │ │ ├── utils │ │ ├── BASE64Decoder.java │ │ ├── BASE64Encoder.java │ │ ├── Constants.java │ │ ├── DateUtils.java │ │ ├── HexStringUtils.java │ │ ├── JsonMapper.java │ │ ├── MD5Utils.java │ │ └── RedisUtils.java │ │ └── vo │ │ ├── EventApplyCode.java │ │ ├── EventCode.java │ │ ├── EventCommentUserInfoVo.java │ │ ├── EventLikeUserInfoVo.java │ │ ├── EventUserInfoVo.java │ │ ├── EventVo.java │ │ ├── ReturnData.java │ │ ├── StatusCode.java │ │ ├── Test.java │ │ └── VariableParam.java │ └── test │ └── java │ └── com │ └── collegevol │ └── TestPictureDownload.java ├── frontend ├── .eslintrc.js ├── app.js ├── app.json ├── app.wxss ├── dist │ ├── action-sheet │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── alert │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── avatar │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── badge │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── base │ │ └── index.js │ ├── button │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── card │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── cell-group │ │ ├── index.js │ │ ├── index.json │ │ └── index.wxml │ ├── cell │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── checkbox-group │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── checkbox │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── col │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── collapse-item │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── collapse │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── count-down │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── divider │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── drawer │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── grid-icon │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── grid-item │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── grid-label │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── grid │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── icon │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── index-item │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── index │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── input-number │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── input │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── load-more │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── message │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── modal │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── notice-bar │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── page │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── panel │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── progress │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── radio-group │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── radio │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── rate │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── row │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── slide │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── spin │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── step │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── steps │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── sticky-item │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── sticky │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── swipeout │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── switch │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── tab-bar-item │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── tab-bar │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── tab │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── tabs │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── tag │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ └── toast │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss ├── image │ ├── 001.jpg │ ├── 002.jpg │ ├── 003.jpg │ ├── 004.jpg │ ├── 005.jpg │ ├── 01.jpg │ ├── 1.jpg │ ├── 2.jpg │ ├── 3.jpg │ ├── 4.jpg │ ├── 5.jpg │ ├── about.png │ ├── act-logo.jpg │ ├── back.png │ ├── call.jpg │ ├── ceshi │ │ ├── child1.jpg │ │ ├── child2.jpg │ │ ├── di1.jpg │ │ ├── di2.jpg │ │ ├── di3.jpg │ │ ├── di4.jpg │ │ ├── ji1.jpg │ │ ├── ji2.jpg │ │ ├── ji3.jpg │ │ ├── ji4.jpg │ │ ├── jing1.jpg │ │ ├── jing2.jpg │ │ ├── jing3.jpg │ │ ├── jing4.jpg │ │ ├── jing5.jpg │ │ ├── jing6.jpg │ │ ├── kindergarten.jpg │ │ └── 敬老院.jpg │ ├── comment0.jpg │ ├── comment1.png │ ├── contact.png │ ├── head.png │ ├── info.png │ ├── it.jpg │ ├── jiantou.png │ ├── like1.png │ ├── like2.png │ ├── logo.png │ ├── myactivity.png │ ├── no.png │ ├── points.png │ ├── pwd.png │ ├── safe.png │ ├── upPho.jpg │ ├── yes.png │ ├── 广场1.png │ ├── 广场2.png │ ├── 我的1.png │ ├── 我的2.png │ ├── 我的背景.jpg │ ├── 首页1.png │ └── 首页2.png ├── pages │ ├── actInfo │ │ ├── actInfo.js │ │ ├── actInfo.json │ │ ├── actInfo.wxml │ │ └── actInfo.wxss │ ├── history │ │ ├── history.js │ │ ├── history.json │ │ ├── history.wxml │ │ └── history.wxss │ ├── historyActInfo │ │ ├── historyActInfo.js │ │ ├── historyActInfo.json │ │ ├── historyActInfo.wxml │ │ └── historyActInfo.wxss │ ├── index │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── login │ │ ├── login.js │ │ ├── login.json │ │ ├── login.wxml │ │ └── login.wxss │ ├── logs │ │ ├── logs.js │ │ ├── logs.json │ │ ├── logs.wxml │ │ └── logs.wxss │ ├── mine │ │ ├── mine.js │ │ ├── mine.json │ │ ├── mine.wxml │ │ └── mine.wxss │ ├── mine_aboutUs │ │ ├── mine_aboutUs.js │ │ ├── mine_aboutUs.json │ │ ├── mine_aboutUs.wxml │ │ └── mine_aboutUs.wxss │ ├── mine_baseInfo │ │ ├── mine_baseInfo.js │ │ ├── mine_baseInfo.json │ │ ├── mine_baseInfo.wxml │ │ └── mine_baseInfo.wxss │ ├── mine_myAct │ │ ├── mine_myAct.js │ │ ├── mine_myAct.json │ │ ├── mine_myAct.wxml │ │ └── mine_myAct.wxss │ ├── mine_myAct_comment │ │ ├── mine_myAct_comment.js │ │ ├── mine_myAct_comment.json │ │ ├── mine_myAct_comment.wxml │ │ └── mine_myAct_comment.wxss │ ├── mine_safeCenter │ │ ├── mine_safeCenter.js │ │ ├── mine_safeCenter.json │ │ ├── mine_safeCenter.wxml │ │ └── mine_safeCenter.wxss │ └── register │ │ ├── register.js │ │ ├── register.json │ │ ├── register.wxml │ │ └── register.wxss ├── project.config.json ├── sitemap.json └── utils │ ├── api.js │ └── util.js ├── vol-web ├── .browserslistrc ├── .editorconfig ├── .eslintrc.js ├── .gitignore ├── README.md ├── babel.config.js ├── package.json ├── postcss.config.js ├── public │ ├── favicon.ico │ ├── favicon0.ico │ ├── favicon1.ico │ ├── favicon2.ico │ └── index.html ├── src │ ├── App.vue │ ├── apis │ │ └── index.js │ ├── assets │ │ ├── 3.jpg │ │ ├── 404.png │ │ ├── 5.jpg │ │ ├── bg.jpg │ │ ├── bg1.jpg │ │ └── logo2.png │ ├── common │ │ ├── api.js │ │ ├── error.js │ │ ├── httpClass.js │ │ ├── index.js │ │ ├── storage.js │ │ └── util.js │ ├── components │ │ ├── MyCard.vue │ │ └── MyLayout.vue │ ├── main.js │ ├── my-theme │ │ └── index.less │ ├── router │ │ ├── index.js │ │ └── routes.js │ ├── services │ │ └── index.js │ ├── store │ │ ├── index.js │ │ └── modules │ │ │ └── login.js │ ├── style │ │ └── index.less │ └── views │ │ ├── 404.vue │ │ ├── AllActs.vue │ │ ├── AllVolunteer.vue │ │ ├── Checking.vue │ │ ├── FinishAct.vue │ │ ├── Finished.vue │ │ ├── Index.vue │ │ ├── Login.vue │ │ ├── OnlineVolunteers.vue │ │ ├── Processing.vue │ │ └── PublishAct.vue └── vue.config.js ├── 志愿者小程序后端接口说明.md ├── 志愿者小程序开发文档.docx └── 志愿者数据库设计v1.0.doc /backend/config/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8888 2 | #mysql配置 3 | spring.datasource.driver-class-name=com.mysql.jdbc.Driver 4 | spring.datasource.url=jdbc:mysql://127.0.0.1:3306/graduation_83_covdb?characterEncoding=UTF-8&useSSL=false&useUnicode=true&serverTimezone=UTC 5 | spring.datasource.username=root 6 | spring.datasource.password=123456 7 | 8 | 9 | #redis配置 10 | spring.redis.host=localhost 11 | spring.redis.port=6379 12 | spring.redis.timeout=10000 13 | spring.redis.password= 14 | spring.session.store-type=redis 15 | 16 | image.dir=file:///D:/File/images/ 17 | upload.dir=D:/File/images/ 18 | upload.qrcode.dir=D:/File/qrcode/ 19 | image.url=http://127.0.0.1:8888/images/ 20 | 21 | #linux配置 22 | #image.dir=file:/home/cov/images/ 23 | #upload.dir=/home/cov/images/ 24 | #upload.qrcode.dir=/home/cov/images/qrcode/ 25 | #image.url=http://127.0.0.1:8888/images/ 26 | 27 | #image.dir=file:D:\\File\\images 28 | #upload.dir=D:\\File\\images 29 | #image.url=http://127.0.0.1:8888/images/ 30 | 31 | spring.servlet.multipart.maxFileSize=-1 32 | spring.servlet.multipart.maxRequestSize=-1 33 | 34 | mybatis.type-aliases-package=package:com.collegevol.po 35 | mybatis.mapper-locations=classpath:com/collegevol/mapper/*.xml 36 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/Application.java: -------------------------------------------------------------------------------- 1 | package com.collegevol; 2 | 3 | import com.collegevol.vo.Test; 4 | import org.mybatis.spring.annotation.MapperScan; 5 | import org.springframework.boot.SpringApplication; 6 | import org.springframework.boot.autoconfigure.SpringBootApplication; 7 | import org.springframework.boot.web.servlet.ServletComponentScan; 8 | import org.springframework.scheduling.annotation.EnableScheduling; 9 | import org.springframework.transaction.annotation.EnableTransactionManagement; 10 | import org.springframework.web.cors.CorsConfiguration; 11 | 12 | @SpringBootApplication(scanBasePackages = "com.collegevol") 13 | @EnableTransactionManagement(proxyTargetClass = true) 14 | @MapperScan("com.collegevol.dao") 15 | //@ServletComponentScan(basePackages = "com.collegevol") 16 | @EnableScheduling 17 | public class Application { 18 | 19 | public static void main(String[] args) { 20 | SpringApplication.run(Application.class); 21 | new Test().test(); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/config/CorsConfig.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.config; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.web.servlet.config.annotation.CorsRegistry; 5 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 6 | 7 | /** 8 | * 跨域配置 9 | */ 10 | @Configuration 11 | public class CorsConfig extends WebMvcConfigurerAdapter { 12 | 13 | static final String ORIGINS[] = new String[] { "GET", "POST", "PUT", "DELETE","OPTIONS" }; 14 | @Override 15 | public void addCorsMappings(CorsRegistry registry) { 16 | registry.addMapping("/**") 17 | .allowedOrigins("*").allowCredentials(true).allowedMethods(ORIGINS) 18 | .allowedHeaders("*") 19 | .maxAge(3600); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/config/ImgFileConfig.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.config; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 6 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 7 | 8 | /** 9 | * 文件相关的配置 10 | */ 11 | @Configuration 12 | public class ImgFileConfig extends WebMvcConfigurerAdapter { 13 | 14 | @Value("${image.dir}") 15 | private String IMAGE_DIR; 16 | 17 | 18 | @Override 19 | public void addResourceHandlers(ResourceHandlerRegistry registry) { 20 | registry.addResourceHandler("/images/**") 21 | .addResourceLocations(IMAGE_DIR); 22 | super.addResourceHandlers(registry); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/config/MybatisPlusConfig.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.config; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; 4 | import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.context.annotation.Configuration; 7 | import org.springframework.transaction.annotation.EnableTransactionManagement; 8 | 9 | @EnableTransactionManagement 10 | @Configuration 11 | public class MybatisPlusConfig { 12 | 13 | /** 14 | * 分页插件 15 | */ 16 | @Bean 17 | public PaginationInterceptor paginationInterceptor() { 18 | return new PaginationInterceptor(); 19 | } 20 | 21 | 22 | /** 23 | * SQL执行效率插件 24 | */ 25 | @Bean 26 | public PerformanceInterceptor performanceInterceptor() { 27 | return new PerformanceInterceptor(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/config/RedisSessionConfig.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.config; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; 5 | 6 | @Configuration 7 | @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 300) 8 | public class RedisSessionConfig { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/config/WebConfig.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.config; 2 | 3 | import com.collegevol.resolver.MultiRequestBodyArgumentResolver; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.web.method.support.HandlerMethodArgumentResolver; 6 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 7 | 8 | import java.util.List; 9 | 10 | @Configuration 11 | public class WebConfig implements WebMvcConfigurer { 12 | 13 | @Override 14 | public void addArgumentResolvers(List argumentResolvers) { 15 | argumentResolvers.add(new MultiRequestBodyArgumentResolver()); 16 | } 17 | 18 | 19 | // private CorsConfiguration buildConfig(){ 20 | // CorsConfiguration corsConfiguration=new CorsConfiguration(); 21 | // corsConfiguration.addAllowedOrigin("*"); 22 | // corsConfiguration.addAllowedMethod("*"); 23 | // corsConfiguration.addAllowedHeader("*"); 24 | // return corsConfiguration; 25 | // 26 | // } 27 | // 28 | // 29 | // @Bean 30 | // public CorsFilter corsFilter(){ 31 | // UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource=new UrlBasedCorsConfigurationSource(); 32 | // urlBasedCorsConfigurationSource.registerCorsConfiguration("/**",buildConfig()); 33 | // return new CorsFilter(urlBasedCorsConfigurationSource); 34 | // } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/config/WebSecurityConfig.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.config; 2 | 3 | import com.collegevol.interceptor.RedisSessionInterceptor; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 7 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 8 | 9 | @Configuration 10 | public class WebSecurityConfig extends WebMvcConfigurerAdapter { 11 | 12 | @Bean 13 | public RedisSessionInterceptor getSessionInterceptor() { 14 | return new RedisSessionInterceptor(); 15 | } 16 | 17 | @Override 18 | public void addInterceptors(InterceptorRegistry registry) { 19 | registry.addInterceptor(getSessionInterceptor()) 20 | .addPathPatterns("/api/**") 21 | .excludePathPatterns("/api/user/login") 22 | .excludePathPatterns("/api/user/register") 23 | .excludePathPatterns("/api/user/updateAvator"); 24 | super.addInterceptors(registry); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/controller/QrcodeController.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.controller; 2 | 3 | 4 | import com.collegevol.entity.UserInfo; 5 | import com.collegevol.service.impl.QrcodeServiceImpl; 6 | import com.collegevol.service.impl.UserInfoServiceImpl; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RestController; 10 | 11 | import javax.servlet.http.HttpSession; 12 | 13 | /** 14 | *

15 | * 前端控制器 16 | *

17 | * 18 | * 19 | * @since 2019-11-04 20 | */ 21 | @RestController 22 | @RequestMapping("/api/qrcode") 23 | public class QrcodeController { 24 | @Autowired 25 | private UserInfoServiceImpl userInfoService; 26 | 27 | @Autowired 28 | private QrcodeServiceImpl qrcodeService; 29 | 30 | @RequestMapping("/getUserCode") 31 | public String getUserCode(HttpSession session) throws Exception{ 32 | String stuId = (String) session.getAttribute("stuId"); 33 | UserInfo userInfo = userInfoService.qryUserByStuId(stuId); 34 | String qrCodeUrl=qrcodeService.getUserCode(userInfo); 35 | return qrCodeUrl; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/dao/EventApplyMapper.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.dao; 2 | 3 | import com.collegevol.entity.EventApply; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 活动申请表 Mapper 接口 9 | *

10 | * 11 | * 12 | * @since 2019-07-20 13 | */ 14 | public interface EventApplyMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/dao/EventCommentMapper.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.dao; 2 | 3 | import com.collegevol.entity.EventComment; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.collegevol.vo.EventCommentUserInfoVo; 6 | import org.apache.ibatis.annotations.Param; 7 | import org.apache.ibatis.annotations.Select; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | *

13 | * 活动评价表 Mapper 接口 14 | *

15 | * 16 | * 17 | * @since 2019-09-05 18 | */ 19 | public interface EventCommentMapper extends BaseMapper { 20 | 21 | 22 | @Select("SELECT user_info.stu_id,user_info.user_class,user_info.user_school,user_info.user_avator,user_info.user_name, event_comment.`comment`,event_comment.created_time,event_comment.event_id,event_comment.rate FROM `user_info` \n" + 23 | "JOIN event_comment ON `user_info`.user_id=event_comment.user_id WHERE `event_comment`.event_id=#{eventId}") 24 | List qryEventCommentUserInfoVoByEventId(@Param("eventId") Integer eventId); 25 | } 26 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/dao/EventLikeMapper.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.dao; 2 | 3 | import com.collegevol.entity.EventLike; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.collegevol.vo.EventCommentUserInfoVo; 6 | import com.collegevol.vo.EventLikeUserInfoVo; 7 | import org.apache.ibatis.annotations.Param; 8 | import org.apache.ibatis.annotations.Select; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | *

14 | * Mapper 接口 15 | *

16 | * 17 | * 18 | * @since 2019-09-05 19 | */ 20 | public interface EventLikeMapper extends BaseMapper { 21 | 22 | @Select("SELECT user_info.stu_id,user_info.user_class,user_info.user_school,user_info.user_avator,user_info.user_name,user_info.user_id, event_like.create_time,event_like.event_id FROM user_info JOIN event_like ON user_info.user_id=event_like.user_id WHERE event_like.event_id=#{eventId} AND event_like.status!='00X'") 23 | List qryEventLikeUserInfoVoByEventId(@Param("eventId") Integer eventId); 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/dao/EventPictureMapper.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.dao; 2 | 3 | import com.collegevol.entity.EventPicture; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 活动标签表 Mapper 接口 9 | *

10 | * 11 | * 12 | * @since 2019-09-05 13 | */ 14 | public interface EventPictureMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/dao/EventPictureSliderMapper.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.dao; 2 | 3 | import com.collegevol.entity.EventPictureSlider; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Select; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | *

11 | * 图片轮播图 首页展示的图片,展示优先级 Mapper 接口 12 | *

13 | * 14 | * 15 | * @since 2019-09-10 16 | */ 17 | public interface EventPictureSliderMapper extends BaseMapper { 18 | 19 | } 20 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/dao/EventTagMapper.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.dao; 2 | 3 | import com.collegevol.entity.EventTag; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | *

8 | * 活动标签表 Mapper 接口 9 | *

10 | * 11 | * 12 | * @since 2019-07-20 13 | */ 14 | public interface EventTagMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/dao/QrcodeMapper.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.dao; 2 | 3 | import com.collegevol.entity.Qrcode; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * 13 | * @since 2019-11-04 14 | */ 15 | public interface QrcodeMapper extends BaseMapper { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/dao/UserInfoMapper.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.collegevol.entity.UserInfo; 6 | import org.apache.ibatis.annotations.Param; 7 | import org.apache.ibatis.annotations.Select; 8 | import org.apache.ibatis.annotations.Update; 9 | 10 | import java.util.ArrayList; 11 | 12 | /** 13 | *

14 | * 用户信息表 Mapper 接口 15 | *

16 | * 17 | * 18 | * @since 2019-07-20 19 | */ 20 | public interface UserInfoMapper extends BaseMapper { 21 | 22 | @Select("SELECT * FROM `user_info` WHERE user_id IN (${userInfo.searchSql})") 23 | ArrayList qryUserInfoByUserIdForPage(Page page, @Param("userInfo") UserInfo userInfo); 24 | 25 | @Select("SELECT * FROM `user_info` WHERE stu_id IN (${userInfo.searchSql})") 26 | ArrayList qryUserInfoByStuIdForPage(Page page, @Param("userInfo") UserInfo userInfo); 27 | 28 | @Update("UPDATE user_info SET user_score=${baseScore} WHERE user_score < ${baseScore}") 29 | void updateUserScore(@Param("baseScore") Integer baseScore); 30 | 31 | 32 | } 33 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/entity/EventApply.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import java.time.LocalDateTime; 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | 9 | import com.fasterxml.jackson.annotation.JsonFormat; 10 | import lombok.Data; 11 | import lombok.EqualsAndHashCode; 12 | import lombok.experimental.Accessors; 13 | import org.springframework.format.annotation.DateTimeFormat; 14 | 15 | /** 16 | *

17 | * 活动申请表 18 | *

19 | * 20 | * 21 | * @since 2019-07-20 22 | */ 23 | @Data 24 | @EqualsAndHashCode(callSuper = false) 25 | @Accessors(chain = true) 26 | public class EventApply implements Serializable { 27 | 28 | private static final long serialVersionUID = 1L; 29 | 30 | /** 31 | * 自增长id 32 | */ 33 | @TableId(value = "event_apply_id", type = IdType.AUTO) 34 | private Integer eventApplyId; 35 | 36 | /** 37 | * 申请人的id 38 | */ 39 | private Integer userId; 40 | 41 | /** 42 | * 活动的id 43 | */ 44 | private Integer eventId; 45 | 46 | /** 47 | * 申请状态 48 | */ 49 | private String applyStatus; 50 | 51 | /** 52 | * 创建时间 53 | */ 54 | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") 55 | @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") 56 | private Date createdTime; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/entity/EventApplyInfo.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.entity; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class EventApplyInfo extends EventApply{ 7 | /** 8 | * 班级 9 | */ 10 | private String userClass; 11 | 12 | /** 13 | * 学院 14 | */ 15 | private String userSchool; 16 | 17 | /** 18 | * 用户头像 头像路径 19 | */ 20 | private String userAvator; 21 | 22 | /** 23 | * 用户姓名 24 | */ 25 | private String userName; 26 | 27 | /** 28 | * 用户积分 100~0 29 | */ 30 | private Integer userScore; 31 | 32 | private String stuId; 33 | } 34 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/entity/EventComment.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import java.time.LocalDateTime; 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | 9 | import com.fasterxml.jackson.annotation.JsonFormat; 10 | import lombok.Data; 11 | import lombok.EqualsAndHashCode; 12 | import lombok.experimental.Accessors; 13 | import org.springframework.format.annotation.DateTimeFormat; 14 | 15 | /** 16 | *

17 | * 活动评价表 18 | *

19 | * 20 | * 21 | * @since 2019-09-05 22 | */ 23 | @Data 24 | @EqualsAndHashCode(callSuper = false) 25 | @Accessors(chain = true) 26 | public class EventComment implements Serializable { 27 | 28 | private static final long serialVersionUID = 1L; 29 | 30 | /** 31 | * ec_id 32 | */ 33 | @TableId(value = "ec_id", type = IdType.AUTO) 34 | private Integer ecId; 35 | 36 | /** 37 | * 用户id 38 | */ 39 | private Integer userId; 40 | 41 | /** 42 | * 评论内容 43 | */ 44 | private String comment; 45 | 46 | /** 47 | * 评分 48 | */ 49 | private String rate; 50 | 51 | /** 52 | * 创建时间 53 | */ 54 | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") 55 | @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") 56 | private Date createdTime; 57 | 58 | private Integer eventId; 59 | 60 | 61 | } 62 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/entity/EventLike.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import java.time.LocalDateTime; 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | 9 | import com.fasterxml.jackson.annotation.JsonFormat; 10 | import lombok.Data; 11 | import lombok.EqualsAndHashCode; 12 | import lombok.experimental.Accessors; 13 | import org.springframework.format.annotation.DateTimeFormat; 14 | 15 | /** 16 | *

17 | * 18 | *

19 | * 20 | * 21 | * @since 2019-09-05 22 | */ 23 | @Data 24 | @EqualsAndHashCode(callSuper = false) 25 | @Accessors(chain = true) 26 | public class EventLike implements Serializable { 27 | 28 | private static final long serialVersionUID = 1L; 29 | 30 | private Integer eventId; 31 | 32 | private Integer userId; 33 | 34 | @TableId(value = "et_like_id", type = IdType.AUTO) 35 | private Integer etLikeId; 36 | 37 | private String status; 38 | 39 | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") 40 | @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") 41 | private Date createTime; 42 | 43 | 44 | } 45 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/entity/EventPicture.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import java.io.Serializable; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | import lombok.experimental.Accessors; 9 | 10 | /** 11 | *

12 | * 活动标签表 13 | *

14 | * 15 | * 16 | * @since 2019-09-05 17 | */ 18 | @Data 19 | @EqualsAndHashCode(callSuper = false) 20 | @Accessors(chain = true) 21 | public class EventPicture implements Serializable { 22 | 23 | private static final long serialVersionUID = 1L; 24 | 25 | /** 26 | * 自增长用户标签名 27 | */ 28 | @TableId(value = "ep_id", type = IdType.AUTO) 29 | private Integer epId; 30 | 31 | /** 32 | * 标签名 33 | */ 34 | private Integer eventId; 35 | 36 | private String imgUrl; 37 | 38 | 39 | } 40 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/entity/EventPictureSlider.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import java.time.LocalDateTime; 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | 9 | import com.fasterxml.jackson.annotation.JsonFormat; 10 | import lombok.Data; 11 | import lombok.EqualsAndHashCode; 12 | import lombok.experimental.Accessors; 13 | import org.springframework.format.annotation.DateTimeFormat; 14 | 15 | /** 16 | *

17 | * 图片轮播图 首页展示的图片,展示优先级 18 | *

19 | * 20 | * 21 | * @since 2019-09-10 22 | */ 23 | @Data 24 | @EqualsAndHashCode(callSuper = false) 25 | @Accessors(chain = true) 26 | public class EventPictureSlider implements Serializable { 27 | 28 | private static final long serialVersionUID = 1L; 29 | 30 | /** 31 | * 唯一id 32 | */ 33 | @TableId(value = "eps_id", type = IdType.AUTO) 34 | private Integer epsId; 35 | 36 | /** 37 | * 图片链接 38 | */ 39 | private String imgUrl; 40 | 41 | /** 42 | * 展示优先级 数字越小,优先级越高 43 | */ 44 | private Integer showPriority; 45 | 46 | /** 47 | * 创建时间 48 | */ 49 | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") 50 | @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") 51 | private Date createdTime; 52 | 53 | 54 | } 55 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/entity/EventTag.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import java.io.Serializable; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | import lombok.experimental.Accessors; 9 | 10 | /** 11 | *

12 | * 活动标签表 13 | *

14 | * 15 | * @since 2019-07-20 16 | */ 17 | 18 | @Data 19 | @EqualsAndHashCode(callSuper = false) 20 | @Accessors(chain = true) 21 | public class EventTag implements Serializable { 22 | 23 | private static final long serialVersionUID = 1L; 24 | 25 | /** 26 | * 自增长用户标签名 27 | */ 28 | @TableId(value = "et_id", type = IdType.AUTO) 29 | private Integer etId; 30 | 31 | /** 32 | * 标签名 33 | */ 34 | private String tagName; 35 | 36 | 37 | } 38 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/entity/Qrcode.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import java.io.Serializable; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | import lombok.experimental.Accessors; 9 | 10 | /** 11 | *

12 | * 13 | *

14 | * 15 | * 16 | * @since 2019-11-04 17 | */ 18 | @Data 19 | @EqualsAndHashCode(callSuper = false) 20 | @Accessors(chain = true) 21 | public class Qrcode implements Serializable { 22 | 23 | private static final long serialVersionUID = 1L; 24 | 25 | @TableId(value = "q_id", type = IdType.AUTO) 26 | private Integer qId; 27 | 28 | private Integer userId; 29 | 30 | private String qCodeUrl; 31 | 32 | 33 | } 34 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/mapper/EventApplyMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | event_apply_id, user_id, event_id, apply_status, created_time 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/mapper/EventCommentMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | ec_id, user_id, comment, rate, created_time, event_id 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/mapper/EventLikeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | event_id, user_id, et_like_id, status, create_time 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/mapper/EventPictureMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | ep_id, event_id, img_url 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/mapper/EventPictureSliderMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | eps_id, img_url, show_priority, created_time 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/mapper/EventTagMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | et_id, tag_name 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/mapper/QrcodeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | q_id, user_id, q_code_url 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/mapper/UserInfoMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | user_id, 22 | user_class, 23 | user_school, 24 | user_avator, 25 | user_name, 26 | user_score, 27 | password, 28 | stu_id, 29 | create_time, 30 | role 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/po/UserPo.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.po; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableField; 4 | import com.baomidou.mybatisplus.annotation.TableName; 5 | import lombok.Data; 6 | 7 | @TableName("user_info") 8 | @Data 9 | public class UserPo { 10 | @TableField("user_id") 11 | String userId; 12 | 13 | @TableField("user_class") 14 | String userClass; 15 | 16 | @TableField("user_school") 17 | String userSchool; 18 | 19 | @TableField("user_name") 20 | String userName; 21 | 22 | @TableField("stu_id") 23 | String stuId; 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/resolver/MultiRequestBody.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.resolver; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Controller中方法接收多个JSON对象 10 | * 11 | * @author 12 | * @date 2018/08/27 13 | */ 14 | @Target(ElementType.PARAMETER) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | public @interface MultiRequestBody { 17 | /** 18 | * 是否必须出现的参数 19 | */ 20 | boolean required() default false; 21 | 22 | /** 23 | * 当value的值或者参数名不匹配时,是否允许解析最外层属性到该对象 24 | */ 25 | boolean parseAllFields() default true; 26 | 27 | /** 28 | * 解析时用到的JSON的key 29 | */ 30 | String value() default ""; 31 | } 32 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/service/EventApplyService.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.service; 2 | 3 | import com.collegevol.entity.EventApply; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | *

8 | * 活动申请表 服务类 9 | *

10 | * 11 | * 12 | * @since 2019-07-20 13 | */ 14 | public interface EventApplyService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/service/EventCommentService.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.service; 2 | 3 | import com.collegevol.entity.EventComment; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | *

8 | * 活动评价表 服务类 9 | *

10 | * 11 | * 12 | * @since 2019-09-05 13 | */ 14 | public interface EventCommentService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/service/EventLikeService.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.service; 2 | 3 | import com.collegevol.entity.EventLike; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * 12 | * @since 2019-09-05 13 | */ 14 | public interface EventLikeService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/service/EventPictureService.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.service; 2 | 3 | import com.collegevol.entity.EventPicture; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | *

8 | * 活动标签表 服务类 9 | *

10 | * 11 | * 12 | * @since 2019-09-05 13 | */ 14 | public interface EventPictureService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/service/EventPictureSliderService.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.service; 2 | 3 | import com.collegevol.entity.EventPictureSlider; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | *

8 | * 图片轮播图 首页展示的图片,展示优先级 服务类 9 | *

10 | * 11 | * 12 | * @since 2019-09-10 13 | */ 14 | public interface EventPictureSliderService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/service/EventService.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.service; 2 | 3 | import com.collegevol.entity.Event; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.collegevol.vo.EventVo; 6 | 7 | /** 8 | *

9 | * 志愿者活动表 服务类 10 | *

11 | * 12 | * 13 | * @since 2019-07-20 14 | */ 15 | public interface EventService extends IService { 16 | 17 | void addEvent(EventVo eventVo); 18 | } 19 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/service/QRCodeUserService.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.service; 2 | 3 | import com.google.zxing.WriterException; 4 | 5 | import java.io.IOException; 6 | 7 | public interface QRCodeUserService { 8 | 9 | String generateCodeImg(String code) throws WriterException, IOException; 10 | } 11 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/service/QrcodeService.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.service; 2 | 3 | import com.collegevol.entity.Qrcode; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * 12 | * @since 2019-11-04 13 | */ 14 | public interface QrcodeService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/service/UserInfoService.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.service; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.collegevol.entity.UserInfo; 6 | import org.springframework.dao.DataAccessException; 7 | 8 | /** 9 | *

10 | * 用户信息表 服务类 11 | *

12 | * 13 | * 14 | * @since 2019-07-20 15 | */ 16 | public interface UserInfoService extends IService { 17 | 18 | 19 | int login(UserInfo userInfo); 20 | 21 | int addUser(UserInfo userInfo) throws DataAccessException; 22 | 23 | void update(UserInfo userInfo); 24 | 25 | int count(String stuId); 26 | 27 | UserInfo qryUserByStuId(String stuId); 28 | 29 | Page askUserOnline(Page page); 30 | 31 | void kickUserByStuId(String stuId); 32 | 33 | UserInfo selectOne(String stuId); 34 | 35 | 36 | void updateBaseScoreTask(); 37 | 38 | } -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/service/impl/EventApplyServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.service.impl; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.collegevol.entity.EventApply; 5 | import com.collegevol.dao.EventApplyMapper; 6 | import com.collegevol.service.EventApplyService; 7 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 8 | import com.collegevol.vo.EventVo; 9 | import org.springframework.stereotype.Service; 10 | 11 | import javax.annotation.Resource; 12 | import java.net.Inet4Address; 13 | import java.util.List; 14 | import java.util.concurrent.locks.Lock; 15 | import java.util.concurrent.locks.ReentrantLock; 16 | 17 | /** 18 | *

19 | * 活动申请表 服务实现类 20 | *

21 | * 22 | * @since 2019-07-20 23 | */ 24 | @Service 25 | public class EventApplyServiceImpl extends ServiceImpl implements EventApplyService { 26 | 27 | @Resource 28 | private EventApplyMapper eventApplyMapper; 29 | 30 | public void eventApply(EventApply eventApply){ 31 | eventApplyMapper.insert(eventApply); 32 | } 33 | 34 | 35 | public List selectList(Integer eventId){ 36 | QueryWrapper queryWrapper=new QueryWrapper(); 37 | queryWrapper.eq("event_id",eventId); 38 | return eventApplyMapper.selectList(queryWrapper); 39 | } 40 | 41 | 42 | 43 | } 44 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/service/impl/EventCommentServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.service.impl; 2 | 3 | import com.collegevol.entity.EventComment; 4 | import com.collegevol.dao.EventCommentMapper; 5 | import com.collegevol.service.EventCommentService; 6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 活动评价表 服务实现类 12 | *

13 | * 14 | * 15 | * @since 2019-09-05 16 | */ 17 | @Service 18 | public class EventCommentServiceImpl extends ServiceImpl implements EventCommentService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/service/impl/EventLikeServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.service.impl; 2 | 3 | import com.collegevol.entity.EventLike; 4 | import com.collegevol.dao.EventLikeMapper; 5 | import com.collegevol.service.EventLikeService; 6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 服务实现类 12 | *

13 | * 14 | * 15 | * @since 2019-09-05 16 | */ 17 | @Service 18 | public class EventLikeServiceImpl extends ServiceImpl implements EventLikeService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/service/impl/EventPictureServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.service.impl; 2 | 3 | import com.collegevol.entity.EventPicture; 4 | import com.collegevol.dao.EventPictureMapper; 5 | import com.collegevol.service.EventPictureService; 6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 活动标签表 服务实现类 12 | *

13 | * 14 | * 15 | * @since 2019-09-05 16 | */ 17 | @Service 18 | public class EventPictureServiceImpl extends ServiceImpl implements EventPictureService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/task/ScheduleTask.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.task; 2 | 3 | import com.collegevol.service.impl.EventServiceImpl; 4 | import com.collegevol.service.impl.UserInfoServiceImpl; 5 | import org.springframework.scheduling.annotation.EnableScheduling; 6 | import org.springframework.scheduling.annotation.Scheduled; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.annotation.Resource; 10 | 11 | 12 | @Component 13 | @EnableScheduling 14 | public class ScheduleTask { 15 | 16 | @Resource 17 | private EventServiceImpl eventService; 18 | 19 | @Resource 20 | private UserInfoServiceImpl userInfoService; 21 | /** 22 | * 将过期的活动设置为已结束状态定时任务每天12点跑一次 23 | */ 24 | @Scheduled(cron = "0 0 0 * * ?") 25 | public void configureTasks() { 26 | eventService.updateTask(); 27 | } 28 | 29 | /** 30 | * 每月1号恢复分数 31 | */ 32 | @Scheduled(cron = "0 0 0 1 * ?") 33 | public void configureTask2() { 34 | userInfoService.updateBaseScoreTask(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/utils/Constants.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.utils; 2 | 3 | public interface Constants { 4 | 5 | //通用分隔符:, 6 | String SPLIT_COMMON = ","; 7 | 8 | //分隔符:- 9 | String SPLIT_STRIKE = "-"; 10 | 11 | //分隔符:: 12 | String SPLIT_COLON= ":"; 13 | 14 | //分隔符: _ 15 | String SPLIT_UNDERLINE = "_"; 16 | 17 | /** long类型的NULL表示. */ 18 | long NULL_LONG = -9999999999999998L; // 前台JAVASCRIPT没有这么大的值 19 | 20 | /** String类型的NULL标识 */ 21 | public static final String NULL_STRING = "-nullnull-"; 22 | 23 | //缓存模式:本地缓存 24 | String CACHE_MODEl_LOCAL="LOCAL"; 25 | 26 | //缓存模式:REDIS缓存 27 | String CACHE_MODEl_REDIS="REDIS"; 28 | 29 | //缓存模式:混合缓存,一部分在redis,一部分在local 30 | String CACHE_MODEl_MIX="MIX"; 31 | 32 | /** sql语句中?替换标识 */ 33 | String SQL_REPLACE_KEY = "-QUESTION-MARK-"; 34 | 35 | //utf8编码 36 | String ENCODING_UTF8 = "UTF-8"; 37 | 38 | 39 | //http请求参数类型:url-form 40 | String HTTP_CONTENT_TYPE_FORM= "application/x-www-form-urlencoded"; 41 | 42 | //http请求参数类型:json 43 | String HTTP_CONTENT_TYPE_JSON= "application/json"; 44 | 45 | //http请求类型:GET 46 | String HTTP_METHOD_GET = "get"; 47 | 48 | //http请求类型:POST 49 | String HTTP_METHOD_POST = "post"; 50 | 51 | //成功 52 | String SUCCESS = "success"; 53 | //失败 54 | String FAILURE = "failure"; 55 | 56 | 57 | } 58 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/utils/DateUtils.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.utils; 2 | 3 | import java.util.Date; 4 | 5 | public class DateUtils { 6 | 7 | private final static int[] dayArr = new int[] { 20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22 }; 8 | private final static String[] constellationArr = new String[] { "摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座" }; 9 | 10 | 11 | public static String getConstellation(int month, int day) { 12 | return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month]; 13 | } 14 | 15 | public static String getConstellation(Date date){ 16 | return getConstellation(date.getMonth()+1,date.getDate()); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/utils/RedisUtils.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.utils; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.data.redis.core.RedisTemplate; 5 | import org.springframework.stereotype.Component; 6 | 7 | import javax.annotation.PostConstruct; 8 | 9 | @Component 10 | public final class RedisUtils { 11 | 12 | @Autowired 13 | private RedisTemplate redisTemplate; 14 | 15 | private static RedisTemplate TEMPLATE; 16 | 17 | private RedisUtils(){ 18 | 19 | } 20 | 21 | @PostConstruct 22 | public void init() { 23 | TEMPLATE = redisTemplate; 24 | } 25 | 26 | public static RedisTemplate getTemplate(){ 27 | return TEMPLATE; 28 | } 29 | 30 | 31 | public static void set(String h,String key,Object v){ 32 | TEMPLATE.opsForHash().put(h,key,v); 33 | } 34 | 35 | public static void delete(String h,String key){ 36 | TEMPLATE.opsForHash().delete(h,key); 37 | } 38 | 39 | public static Object get(String h, String key){ 40 | return TEMPLATE.opsForHash().get(h,key); 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/vo/EventApplyCode.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.vo; 2 | 3 | public interface EventApplyCode { 4 | 5 | //S00报名中S01报名通过S02已签到S03已完成S0X未签到 6 | String APPYING = "报名中"; 7 | 8 | String APPYED = "报名通过"; 9 | 10 | String APPY_FAIL = "报名未通过"; 11 | 12 | String CHECKED_IN = "已签到"; 13 | 14 | String NOT_CHECK_IN = "未签到"; 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/vo/EventCode.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.vo; 2 | 3 | public interface EventCode { 4 | 5 | //审核中/进行中/已结束 6 | String UNDER_REVIEW = "审核中"; 7 | 8 | String IN_PROGRESS = "进行中"; 9 | 10 | String ENDED = "已结束"; 11 | 12 | String TIMEOUT = "已过期"; 13 | 14 | String S00X = "已删除"; 15 | } 16 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/vo/EventCommentUserInfoVo.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.vo; 2 | 3 | import com.collegevol.entity.EventComment; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class EventCommentUserInfoVo extends EventComment { 8 | /** 9 | * 班级 10 | */ 11 | private String userClass; 12 | 13 | /** 14 | * 学院 15 | */ 16 | private String userSchool; 17 | 18 | /** 19 | * 用户头像 头像路径 20 | */ 21 | private String userAvator; 22 | 23 | /** 24 | * 用户姓名 25 | */ 26 | private String userName; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/vo/EventLikeUserInfoVo.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.vo; 2 | 3 | import com.collegevol.entity.EventLike; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class EventLikeUserInfoVo extends EventLike { 8 | /** 9 | * 班级 10 | */ 11 | private String userClass; 12 | 13 | /** 14 | * 学院 15 | */ 16 | private String userSchool; 17 | 18 | /** 19 | * 用户头像 头像路径 20 | */ 21 | private String userAvator; 22 | 23 | /** 24 | * 用户姓名 25 | */ 26 | private String userName; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/vo/EventUserInfoVo.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.vo; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class EventUserInfoVo extends EventVo{ 7 | 8 | private String userName; 9 | 10 | private String applyStatus; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/vo/EventVo.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.vo; 2 | 3 | import com.collegevol.entity.Event; 4 | import com.collegevol.entity.EventPicture; 5 | import lombok.Data; 6 | 7 | import java.util.Comparator; 8 | import java.util.List; 9 | 10 | @Data 11 | public class EventVo extends Event implements Comparator,Comparable { 12 | private int num; 13 | 14 | @Override 15 | public int compareTo(EventVo o) { 16 | if(this.getStartTime().getTime()>o.getStartTime().getTime()){ 17 | return -1; 18 | }else if(this.getStartTime().getTime()==o.getStartTime().getTime()){ 19 | return 0; 20 | }else return 1; 21 | } 22 | 23 | @Override 24 | public int compare(EventVo o1, EventVo o2) { 25 | if(o1.getStartTime().getTime()>o2.getStartTime().getTime()){ 26 | return 1; 27 | }else if(o1.getStartTime().getTime()==o2.getStartTime().getTime()){ 28 | return 0; 29 | }else return -1; 30 | } 31 | 32 | /** 33 | * 喜欢的人数 34 | */ 35 | private int likeNum; 36 | 37 | private int commentNum; 38 | 39 | private List likes; 40 | 41 | private List comments; 42 | 43 | private List resultPictures; 44 | 45 | private String firstImgUrl; 46 | 47 | private boolean islike; 48 | 49 | private boolean isAdmin; 50 | } 51 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/vo/ReturnData.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.vo; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class ReturnData { 7 | int statusCode; 8 | String msg; 9 | Object data; 10 | 11 | public ReturnData(int statusCode, String msg, Object data) { 12 | this.statusCode = statusCode; 13 | this.msg = msg; 14 | this.data = data; 15 | } 16 | 17 | public ReturnData(){ 18 | 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/vo/StatusCode.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.vo; 2 | 3 | public interface StatusCode { 4 | int NEED_LOGIN = 401; 5 | int SUCCESS = 200; 6 | int FAIL=500; 7 | } 8 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/vo/Test.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.vo; 2 | 3 | public class Test { 4 | 5 | public void test(){ 6 | 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /backend/src/main/java/com/collegevol/vo/VariableParam.java: -------------------------------------------------------------------------------- 1 | package com.collegevol.vo; 2 | 3 | public interface VariableParam { 4 | 5 | String CONTENT_TYPE = "application/json; charset=utf-8"; 6 | 7 | String REDIS_PREFIX = "userId:"; 8 | 9 | String SESSION_USERID = "userId"; 10 | 11 | String LOGIN_HASH = "userLogin"; 12 | 13 | Integer MIN_SCORE = 60; 14 | 15 | Integer BASE_SCORE = 100; 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/test/java/com/collegevol/TestPictureDownload.java: -------------------------------------------------------------------------------- 1 | package com.collegevol; 2 | 3 | import java.io.*; 4 | import java.net.MalformedURLException; 5 | import java.net.URL; 6 | 7 | public class TestPictureDownload { 8 | private static void downloadPicture(String urlList, String path) { 9 | URL url = null; 10 | try { 11 | url = new URL(urlList); 12 | DataInputStream dataInputStream = new DataInputStream(url.openStream()); 13 | FileOutputStream fileOutputStream = new FileOutputStream(new File(path)); 14 | ByteArrayOutputStream output = new ByteArrayOutputStream(); 15 | byte[] buffer = new byte[1024]; 16 | int length; 17 | while ((length = dataInputStream.read(buffer)) > 0) { 18 | output.write(buffer, 0, length); 19 | } 20 | fileOutputStream.write(output.toByteArray()); 21 | dataInputStream.close(); 22 | fileOutputStream.close(); 23 | } catch (MalformedURLException e) { 24 | e.printStackTrace(); 25 | } catch (IOException e) { 26 | e.printStackTrace(); 27 | } 28 | } 29 | 30 | public static void main(String[] args) { 31 | 32 | System.out.println("download end"); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /frontend/.eslintrc.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Eslint config file 3 | * Documentation: https://eslint.org/docs/user-guide/configuring/ 4 | * Install the Eslint extension before using this feature. 5 | */ 6 | module.exports = { 7 | env: { 8 | es6: true, 9 | browser: true, 10 | node: true, 11 | }, 12 | ecmaFeatures: { 13 | modules: true, 14 | }, 15 | parserOptions: { 16 | ecmaVersion: 2018, 17 | sourceType: 'module', 18 | }, 19 | globals: { 20 | wx: true, 21 | App: true, 22 | Page: true, 23 | getCurrentPages: true, 24 | getApp: true, 25 | Component: true, 26 | requirePlugin: true, 27 | requireMiniProgram: true, 28 | }, 29 | // extends: 'eslint:recommended', 30 | rules: {}, 31 | } 32 | -------------------------------------------------------------------------------- /frontend/app.js: -------------------------------------------------------------------------------- 1 | // app.js 2 | App({ 3 | onLaunch() { 4 | // 展示本地存储能力 5 | const logs = wx.getStorageSync('logs') || [] 6 | logs.unshift(Date.now()) 7 | wx.setStorageSync('logs', logs) 8 | 9 | // 登录 10 | wx.login({ 11 | success: res => { 12 | // 发送 res.code 到后台换取 openId, sessionKey, unionId 13 | } 14 | }) 15 | }, 16 | globalData: { 17 | userInfo: null 18 | } 19 | }) 20 | -------------------------------------------------------------------------------- /frontend/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "pages":[ 3 | 4 | "pages/mine/mine", 5 | "pages/index/index", 6 | "pages/login/login", 7 | "pages/history/history", 8 | "pages/mine_myAct/mine_myAct", 9 | "pages/register/register", 10 | "pages/actInfo/actInfo", 11 | "pages/mine_baseInfo/mine_baseInfo", 12 | "pages/mine_safeCenter/mine_safeCenter", 13 | "pages/historyActInfo/historyActInfo", 14 | "pages/mine_aboutUs/mine_aboutUs", 15 | "pages/mine_myAct_comment/mine_myAct_comment" 16 | ], 17 | "window":{ 18 | "backgroundTextStyle": "light", 19 | "navigationBarBackgroundColor": "#fff", 20 | "navigationBarTitleText": "校园志愿", 21 | "navigationBarTextStyle": "black" 22 | }, 23 | "tabBar": { 24 | "list": [ 25 | { 26 | "text": "首页", 27 | "pagePath": "pages/index/index", 28 | "iconPath": "/image/首页1.png", 29 | "selectedIconPath": "/image/首页2.png" 30 | }, 31 | { 32 | "text": "广场", 33 | "pagePath": "pages/history/history", 34 | "iconPath": "/image/广场1.png", 35 | "selectedIconPath": "/image/广场2.png" 36 | }, 37 | { 38 | "text": "我的", 39 | "pagePath": "pages/mine/mine", 40 | "iconPath": "/image/我的1.png", 41 | "selectedIconPath": "/image/我的2.png" 42 | } 43 | ], 44 | "color": "#ccc", 45 | "selectedColor": "black" 46 | }, 47 | "style": "v2", 48 | "sitemapLocation": "sitemap.json" 49 | } 50 | -------------------------------------------------------------------------------- /frontend/app.wxss: -------------------------------------------------------------------------------- 1 | /**app.wxss**/ 2 | .container { 3 | height: 100%; 4 | display: flex; 5 | flex-direction: column; 6 | align-items: center; 7 | justify-content: space-between; 8 | padding: 200rpx 0; 9 | box-sizing: border-box; 10 | } 11 | -------------------------------------------------------------------------------- /frontend/dist/action-sheet/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class', 'i-class-mask', 'i-class-header'], 3 | 4 | options: { 5 | multipleSlots: true 6 | }, 7 | 8 | properties: { 9 | visible: { 10 | type: Boolean, 11 | value: false 12 | }, 13 | maskClosable: { 14 | type: Boolean, 15 | value: true 16 | }, 17 | showCancel: { 18 | type: Boolean, 19 | value: false 20 | }, 21 | cancelText: { 22 | type: String, 23 | value: '取消' 24 | }, 25 | actions: { 26 | type: Array, 27 | value: [] 28 | } 29 | }, 30 | 31 | methods: { 32 | handleClickMask () { 33 | if (!this.data.maskClosable) return; 34 | this.handleClickCancel(); 35 | }, 36 | 37 | handleClickItem ({ currentTarget = {} }) { 38 | const dataset = currentTarget.dataset || {}; 39 | const { index } = dataset; 40 | this.triggerEvent('click', { index }); 41 | }, 42 | 43 | handleClickCancel () { 44 | this.triggerEvent('cancel'); 45 | } 46 | } 47 | }); 48 | -------------------------------------------------------------------------------- /frontend/dist/action-sheet/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": 4 | { 5 | "i-button": "../button/index", 6 | "i-icon": "../icon/index" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /frontend/dist/action-sheet/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 14 | 15 | 16 | {{ item.name }} 17 | 18 | 19 | 20 | 21 | {{ cancelText }} 22 | 23 | 24 | -------------------------------------------------------------------------------- /frontend/dist/action-sheet/index.wxss: -------------------------------------------------------------------------------- 1 | .i-as{position:fixed;width:100%;box-sizing:border-box;left:0;right:0;bottom:0;background:#f7f7f7;transform:translate3d(0,100%,0);transform-origin:center;transition:all .2s ease-in-out;z-index:900;visibility:hidden}.i-as-show{transform:translate3d(0,0,0);visibility:visible}.i-as-mask{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.7);z-index:900;transition:all .2s ease-in-out;opacity:0;visibility:hidden}.i-as-mask-show{opacity:1;visibility:visible}.i-as-action-item{position:relative}.i-as-action-item::after{content:'';position:absolute;top:0;left:0;width:200%;height:200%;transform:scale(.5);transform-origin:0 0;pointer-events:none;box-sizing:border-box;border:0 solid #e9eaec;border-bottom-width:1px}.i-as-header{background:#fff;text-align:center;position:relative;font-size:12px;color:#80848f}.i-as-header::after{content:'';position:absolute;top:0;left:0;width:200%;height:200%;transform:scale(.5);transform-origin:0 0;pointer-events:none;box-sizing:border-box;border:0 solid #e9eaec;border-bottom-width:1px}.i-as-cancel{margin-top:6px}.i-as-btn-loading{display:inline-block;vertical-align:middle;margin-right:10px;width:12px;height:12px;background:0 0;border-radius:50%;border:2px solid #e5e5e5;border-color:#666 #e5e5e5 #e5e5e5 #e5e5e5;animation:btn-spin .6s linear;animation-iteration-count:infinite}.i-as-btn-text{display:inline-block;vertical-align:middle}.i-as-btn-icon{font-size:14px!important;margin-right:4px}@keyframes btn-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}} -------------------------------------------------------------------------------- /frontend/dist/alert/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | options: { 4 | multipleSlots: true 5 | }, 6 | properties: { 7 | //info, success, warning, error 8 | type: { 9 | type: String, 10 | value: 'info' 11 | }, 12 | closable: { 13 | type: Boolean, 14 | value: false 15 | }, 16 | showIcon: { 17 | type: Boolean, 18 | default: false 19 | }, 20 | desc: { 21 | type: Boolean, 22 | default: false 23 | }, 24 | }, 25 | data: { 26 | closed: false 27 | }, 28 | methods: { 29 | handleTap() { 30 | this.setData({ 31 | closed: !this.data.closed, 32 | }); 33 | this.triggerEvent('close'); 34 | }, 35 | 36 | } 37 | }); 38 | -------------------------------------------------------------------------------- /frontend/dist/alert/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": 4 | { 5 | "i-icon": "../icon/index" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /frontend/dist/alert/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /frontend/dist/alert/index.wxss: -------------------------------------------------------------------------------- 1 | .i-alert{position:relative;margin:10px;padding:8px 48px 8px 16px;font-size:14px;border-radius:2px;color:#fff;background:#f7f7f7;color:#495060}.i-alert.i-alert-with-icon{padding:8px 48px 8px 38px}.i-alert-info{color:#fff;background:#2db7f5}.i-alert-success{color:#fff;background:#19be6b}.i-alert-warning{color:#fff;background:#f90}.i-alert-error{color:#fff;background:#ed3f14}.i-alert-icon{position:absolute;top:9px;left:16px;font-size:14px}.i-alert-desc{font-size:12px}.i-alert-with-desc{padding:16px;position:relative}.i-alert-with-desc.i-alert-with-icon{padding:16px 16px 16px 69px}.i-alert-with-desc .i-alert-icon{top:50%;left:24px;margin-top:-21px;font-size:28px}.i-alert-close{font-size:12px;position:absolute;right:16px;top:8px;overflow:hidden;cursor:pointer} -------------------------------------------------------------------------------- /frontend/dist/avatar/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | properties: { 5 | // circle || square 6 | shape: { 7 | type: String, 8 | value: 'circle' 9 | }, 10 | // small || large || default 11 | size: { 12 | type: String, 13 | value: 'default' 14 | }, 15 | src: { 16 | type: String, 17 | value: '' 18 | } 19 | } 20 | }); 21 | -------------------------------------------------------------------------------- /frontend/dist/avatar/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/avatar/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /frontend/dist/avatar/index.wxss: -------------------------------------------------------------------------------- 1 | .i-avatar{display:inline-block;text-align:center;background:#ccc;color:#fff;white-space:nowrap;position:relative;overflow:hidden;vertical-align:middle;width:32px;height:32px;line-height:32px;border-radius:16px;font-size:18px}.i-avatar .ivu-avatar-string{line-height:32px}.i-avatar-large{width:40px;height:40px;line-height:40px;border-radius:20px;font-size:24px}.i-avatar-large .ivu-avatar-string{line-height:40px}.i-avatar-small{width:24px;height:24px;line-height:24px;border-radius:12px;font-size:14px}.i-avatar-small .ivu-avatar-string{line-height:24px}.i-avatar-image{background:0 0}.i-avatar-square{border-radius:4px}.i-avatar>image{width:100%;height:100%} -------------------------------------------------------------------------------- /frontend/dist/badge/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class', 'i-class-alone'], 3 | 4 | properties: { 5 | count: { 6 | type: Number, 7 | value: 0, 8 | observer: 'finalCount' 9 | }, 10 | overflowCount: { 11 | type: Number, 12 | value: 99 13 | }, 14 | dot: { 15 | type: Boolean, 16 | value: false 17 | }, 18 | }, 19 | data: { 20 | finalCount: 0 21 | }, 22 | methods: { 23 | finalCount() { 24 | this.setData({ 25 | finalCount: parseInt(this.data.count) >= parseInt(this.data.overflowCount) ? `${this.data.overflowCount}+` : this.data.count 26 | }); 27 | }, 28 | } 29 | }); 30 | -------------------------------------------------------------------------------- /frontend/dist/badge/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/badge/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ finalCount }} 5 | 6 | -------------------------------------------------------------------------------- /frontend/dist/badge/index.wxss: -------------------------------------------------------------------------------- 1 | .i-badge{position:relative;display:inline-block;line-height:1;vertical-align:middle}.i-badge-count{position:absolute;transform:translateX(50%);top:-6px;right:0;height:18px;border-radius:9px;min-width:18px;background:#ed3f14;border:1px solid transparent;color:#fff;line-height:18px;text-align:center;padding:0 5px;font-size:12px;white-space:nowrap;transform-origin:-10% center;z-index:10;box-shadow:0 0 0 1px #fff;box-sizing:border-box;text-rendering:optimizeLegibility}.i-badge-count-alone{top:auto;display:block;position:relative;transform:translateX(0)}.i-badge-dot{position:absolute;transform:translateX(-50%);transform-origin:0 center;top:-4px;right:-8px;height:8px;width:8px;border-radius:100%;background:#ed3f14;z-index:10;box-shadow:0 0 0 1px #fff} -------------------------------------------------------------------------------- /frontend/dist/base/index.js: -------------------------------------------------------------------------------- 1 | function getCtx (selector) { 2 | const pages = getCurrentPages(); 3 | const ctx = pages[pages.length - 1]; 4 | 5 | const componentCtx = ctx.selectComponent(selector); 6 | 7 | if (!componentCtx) { 8 | console.error('无法找到对应的组件,请按文档说明使用组件'); 9 | return null; 10 | } 11 | return componentCtx; 12 | } 13 | 14 | function Toast(options) { 15 | const { selector = '#toast' } = options; 16 | const ctx = getCtx(selector); 17 | 18 | ctx.handleShow(options); 19 | } 20 | 21 | Toast.hide = function (selector = '#toast') { 22 | const ctx = getCtx(selector); 23 | 24 | ctx.handleHide(); 25 | }; 26 | 27 | function Message(options) { 28 | const { selector = '#message' } = options; 29 | const ctx = getCtx(selector); 30 | 31 | ctx.handleShow(options); 32 | } 33 | 34 | module.exports = { 35 | $Toast: Toast, 36 | $Message: Message 37 | }; -------------------------------------------------------------------------------- /frontend/dist/button/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/button/index.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/dist/button/index.wxss: -------------------------------------------------------------------------------- 1 | .i-btn{text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;white-space:nowrap;user-select:none;font-size:14px;border-radius:2px;border:0!important;position:relative;text-decoration:none;height:44px;line-height:44px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);color:#fff!important;background:#f7f7f7!important;color:#495060!important;margin:10px}.i-btn-hover{opacity:.9}.i-btn-long{border-radius:0;margin:0;box-shadow:none}.i-btn-large{height:48px;line-height:48px}.i-btn-small{height:40px;line-height:40px}.i-btn-primary{color:#fff!important;background:#2d8cf0!important}.i-btn-ghost{color:#fff!important;background:#fff!important;color:#495060!important}.i-btn-success{color:#fff!important;background:#19be6b!important}.i-btn-warning{color:#fff!important;background:#f90!important}.i-btn-error{color:#fff!important;background:#ed3f14!important}.i-btn-info{color:#fff!important;background:#2db7f5!important}.i-btn-circle{border-radius:44px}.i-btn-large.i-btn-circle{border-radius:48px}.i-btn-small.i-btn-circle{border-radius:40px}.i-btn-loading{opacity:.6}.i-btn-loading-inner{display:inline-block;margin-right:12px;vertical-align:middle;width:14px;height:14px;background:0 0;border-radius:50%;border:2px solid #fff;border-color:#fff #fff #fff transparent;animation:btn-spin .6s linear;animation-iteration-count:infinite}.i-btn-disabled{color:#bbbec4!important;background:#f7f7f7!important}.i-btn-inline{display:inline-block}@keyframes btn-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}} -------------------------------------------------------------------------------- /frontend/dist/card/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | options: { 5 | multipleSlots: true 6 | }, 7 | 8 | properties: { 9 | full: { 10 | type: Boolean, 11 | value: false 12 | }, 13 | thumb: { 14 | type: String, 15 | value: '' 16 | }, 17 | title: { 18 | type: String, 19 | value: '' 20 | }, 21 | extra: { 22 | type: String, 23 | value: '' 24 | } 25 | } 26 | }); 27 | -------------------------------------------------------------------------------- /frontend/dist/card/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/card/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ title }} 6 | 7 | {{ extra }} 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /frontend/dist/card/index.wxss: -------------------------------------------------------------------------------- 1 | .i-card{margin:0 16px;font-size:14px;overflow:hidden;position:relative;background:#fff;border:1rpx solid #dddee1;border-radius:5px}.i-card-full{margin:0;border-left:none;border-right:none;border-radius:0}.i-card-header{display:flex;padding:6px 16px;align-items:center}.i-card-header-content{flex:1;text-align:left}.i-card-header-thumb{display:inline-block;width:64px;height:64px;position:relative;margin-left:auto;margin-right:auto;overflow:hidden;background-size:cover;vertical-align:middle}.i-card-header-title{display:inline-block;vertical-align:middle;font-size:14px;color:#1c2438}.i-card-header-extra{flex:1;text-align:right;font-size:14px;color:#80848f}.i-card-body{position:relative;padding:6px 16px;color:#495060;font-size:14px}.i-card-body::before{content:'';position:absolute;top:0;left:0;width:200%;height:200%;transform:scale(.5);transform-origin:0 0;pointer-events:none;box-sizing:border-box;border:0 solid #e9eaec;border-top-width:1px}.i-card-footer{position:relative;padding:6px 16px;color:#80848f;font-size:12px} -------------------------------------------------------------------------------- /frontend/dist/cell-group/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | relations: { 5 | '../cell/index': { 6 | type: 'child', 7 | linked () { 8 | this._updateIsLastCell(); 9 | }, 10 | linkChanged () { 11 | this._updateIsLastCell(); 12 | }, 13 | unlinked () { 14 | this._updateIsLastCell(); 15 | } 16 | } 17 | }, 18 | 19 | methods: { 20 | _updateIsLastCell() { 21 | let cells = this.getRelationNodes('../cell/index'); 22 | const len = cells.length; 23 | 24 | if (len > 0) { 25 | let lastIndex = len - 1; 26 | 27 | cells.forEach((cell, index) => { 28 | cell.updateIsLastCell(index === lastIndex); 29 | }); 30 | } 31 | } 32 | } 33 | }); 34 | -------------------------------------------------------------------------------- /frontend/dist/cell-group/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/cell-group/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /frontend/dist/cell/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/cell/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{ title }} 7 | {{ label }} 8 | 9 | 10 | 11 | {{ value }} 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /frontend/dist/cell/index.wxss: -------------------------------------------------------------------------------- 1 | .i-cell{position:relative;padding:12px 15px;display:flex;background:#fff;align-items:center;line-height:1.4;font-size:14px;overflow:hidden}.i-cell::after{content:'';position:absolute;top:0;left:0;width:200%;height:200%;transform:scale(.5);transform-origin:0 0;pointer-events:none;box-sizing:border-box;border:0 solid #e9eaec;border-bottom-width:1px;left:15px;right:0}.i-cell-last::after{display:none}.i-cell-icon{margin-right:5px}.i-cell-icon:empty{display:none}.i-cell-bd{flex:1}.i-cell-text{line-height:24px;font-size:14px}.i-cell-desc{line-height:1.2;font-size:12px;color:#80848f}.i-cell-ft{position:relative;text-align:right;color:#495060}.i-cell-access .i-cell-ft{padding-right:13px}.i-cell-access .i-cell-ft::after{content:" ";display:inline-block;width:6px;height:6px;position:absolute;top:50%;right:2px;border-width:2px 2px 0 0;border-color:#dddee1;border-style:solid;transform:translateY(-50%) matrix(.71,.71,-.71,.71,0,0)} -------------------------------------------------------------------------------- /frontend/dist/checkbox-group/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | relations: { 4 | '../checkbox/index': { 5 | type: 'child', 6 | linked() { 7 | this.changeCurrent(); 8 | }, 9 | linkChanged() { 10 | this.changeCurrent(); 11 | }, 12 | unlinked() { 13 | this.changeCurrent(); 14 | } 15 | } 16 | }, 17 | properties: { 18 | current: { 19 | type: Array, 20 | value: [], 21 | observer: 'changeCurrent' 22 | }, 23 | }, 24 | methods: { 25 | changeCurrent(val = this.data.current) { 26 | let items = this.getRelationNodes('../checkbox/index'); 27 | const len = items.length; 28 | if (len > 0) { 29 | items.forEach(item => { 30 | item.changeCurrent(val.indexOf(item.data.value) !== -1); 31 | }); 32 | } 33 | }, 34 | emitEvent(current) { 35 | this.triggerEvent('change', current); 36 | } 37 | } 38 | }); 39 | -------------------------------------------------------------------------------- /frontend/dist/checkbox-group/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": 4 | { 5 | "i-cell-group": "../cell-group/index" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /frontend/dist/checkbox-group/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /frontend/dist/checkbox-group/index.wxss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/dist/checkbox-group/index.wxss -------------------------------------------------------------------------------- /frontend/dist/checkbox/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": 4 | { 5 | "i-cell": "../cell/index" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /frontend/dist/checkbox/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/dist/checkbox/index.wxss: -------------------------------------------------------------------------------- 1 | .i-checkbox-cell::after{display:block}.i-checkbox-checkbox-left{float:left}.i-checkbox-checkbox-right{float:right}.i-checkbox-radio{vertical-align:middle}.i-checkbox-title{display:inline-block;vertical-align:middle} -------------------------------------------------------------------------------- /frontend/dist/col/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | relations: { 5 | '../row/index': { 6 | type: 'parent' 7 | } 8 | }, 9 | 10 | properties: { 11 | span: { 12 | value: 0, 13 | type: Number 14 | }, 15 | offset: { 16 | value: 0, 17 | type: Number 18 | } 19 | } 20 | }); 21 | -------------------------------------------------------------------------------- /frontend/dist/col/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } -------------------------------------------------------------------------------- /frontend/dist/col/index.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/dist/collapse-item/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class-content', 'i-class-title', 'i-class'], 3 | 4 | relations: { 5 | '../collapse/index': { 6 | type: 'parent', 7 | linked: function (target) { 8 | const options = { 9 | accordion: target.data.accordion 10 | } 11 | if (target.data.name === this.data.name) { 12 | options.showContent = 'i-collapse-item-show-content'; 13 | } 14 | this.setData(options); 15 | } 16 | } 17 | }, 18 | 19 | properties: { 20 | title: String, 21 | name: String 22 | }, 23 | 24 | data: { 25 | showContent: '', 26 | accordion: false 27 | }, 28 | 29 | options: { 30 | multipleSlots: true 31 | }, 32 | 33 | methods: { 34 | trigger(e) { 35 | const data = this.data; 36 | if (data.accordion) { 37 | this.triggerEvent('collapse', {name: data.name}, {composed: true, bubbles: true}); 38 | } else { 39 | this.setData({ 40 | showContent: data.showContent ? '' : 'i-collapse-item-show-content' 41 | }); 42 | } 43 | }, 44 | } 45 | }); 46 | 47 | -------------------------------------------------------------------------------- /frontend/dist/collapse-item/index.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "component": true, 4 | "usingComponents": { 5 | "i-icon": "../icon/index" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /frontend/dist/collapse-item/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{title}} 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/dist/collapse-item/index.wxss: -------------------------------------------------------------------------------- 1 | .i-collapse-item{padding:2px 8px;border-top:1px solid #dddee1}.i-collapse-item-title{vertical-align:middle}.i-collapse-item-title-wrap{padding:2px 0 0}.i-collapse-item-content{padding:6px;display:none}.i-collapse-item-show-content{display:block}.i-collapse-item-arrow{transition:transform .2s ease-in-out}.i-collapse-item-arrow-show{transition:transform .2s ease-in-out;transform:rotate(90deg)} -------------------------------------------------------------------------------- /frontend/dist/collapse/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | relations: { 5 | '../collapse-item/index': { 6 | type: 'child' 7 | } 8 | }, 9 | properties: { 10 | name: String, 11 | accordion: Boolean 12 | }, 13 | methods: { 14 | clickfn(e) { 15 | const params = e.detail; 16 | const allList = this.getRelationNodes('../collapse-item/index'); 17 | allList.forEach((item) => { 18 | if (params.name === item.data.name) { 19 | item.setData({ 20 | showContent: 'i-collapse-item-show-content' 21 | }); 22 | } else { 23 | item.setData({ 24 | showContent: '' 25 | }); 26 | } 27 | }); 28 | }, 29 | } 30 | }); 31 | 32 | -------------------------------------------------------------------------------- /frontend/dist/collapse/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/collapse/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /frontend/dist/collapse/index.wxss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/dist/collapse/index.wxss -------------------------------------------------------------------------------- /frontend/dist/count-down/index.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "component": true 4 | } 5 | -------------------------------------------------------------------------------- /frontend/dist/count-down/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | {{time}} 3 | 4 | 5 | -------------------------------------------------------------------------------- /frontend/dist/count-down/index.wxss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/dist/count-down/index.wxss -------------------------------------------------------------------------------- /frontend/dist/divider/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | properties: { 4 | content: { 5 | type: String, 6 | value: '' 7 | }, 8 | height : { 9 | type: Number, 10 | value: 48 11 | }, 12 | color : { 13 | type : String, 14 | value : '#80848f' 15 | }, 16 | lineColor : { 17 | type : String, 18 | value : '#e9eaec' 19 | }, 20 | size : { 21 | type: String, 22 | value: 12 23 | } 24 | } 25 | }); 26 | -------------------------------------------------------------------------------- /frontend/dist/divider/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/divider/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{content}} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | module.exports = { 12 | getStyle : function(color,size,height){ 13 | var color = 'color:' + color +';'; 14 | var size = 'font-size:' + size + 'px;'; 15 | var height = 'height:' + height+'px;' 16 | return color + size + height; 17 | } 18 | } 19 | 20 | -------------------------------------------------------------------------------- /frontend/dist/divider/index.wxss: -------------------------------------------------------------------------------- 1 | .i-divider{width:100%;text-align:center;font-size:12px;position:relative;display:flex;align-items:center;justify-content:center}.i-divider-line{position:absolute;left:0;width:100%;height:1rpx;background-color:#f7f7f7;top:50%}.i-divider-content{background:#fff;position:relative;z-index:1;display:inline-block;padding:0 10px} -------------------------------------------------------------------------------- /frontend/dist/drawer/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | properties: { 4 | visible: { 5 | type: Boolean, 6 | value: false 7 | }, 8 | 9 | mask: { 10 | type: Boolean, 11 | value: true 12 | }, 13 | 14 | maskClosable: { 15 | type: Boolean, 16 | value: true 17 | }, 18 | 19 | mode: { 20 | type: String, 21 | value: 'left' // left right 22 | } 23 | }, 24 | data: {}, 25 | methods: { 26 | handleMaskClick() { 27 | if (!this.data.maskClosable) { 28 | return; 29 | } 30 | this.triggerEvent('close', {}); 31 | } 32 | } 33 | }); 34 | -------------------------------------------------------------------------------- /frontend/dist/drawer/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/drawer/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/dist/drawer/index.wxss: -------------------------------------------------------------------------------- 1 | .i-drawer{visibility:hidden}.i-drawer-show{visibility:visible}.i-drawer-show .i-drawer-mask{display:block;opacity:1}.i-drawer-show .i-drawer-container{opacity:1}.i-drawer-show.i-drawer-left .i-drawer-container,.i-drawer-show.i-drawer-right .i-drawer-container{transform:translate3d(0,-50%,0)}.i-drawer-mask{opacity:0;position:fixed;top:0;left:0;right:0;bottom:0;z-index:6;background:rgba(0,0,0,.6);transition:all .3s ease-in-out}.i-drawer-container{position:fixed;left:50%;top:50%;transform:translate3d(-50%,-50%,0);transform-origin:center;transition:all .3s ease-in-out;z-index:7;opacity:0}.i-drawer-left .i-drawer-container{left:0;top:50%;transform:translate3d(-100%,-50%,0)}.i-drawer-right .i-drawer-container{right:0;top:50%;left:auto;transform:translate3d(100%,-50%,0)} -------------------------------------------------------------------------------- /frontend/dist/grid-icon/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | relations: { 5 | '../grid-item/index': { 6 | type: 'parent' 7 | } 8 | }, 9 | 10 | }); 11 | -------------------------------------------------------------------------------- /frontend/dist/grid-icon/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/grid-icon/index.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/dist/grid-icon/index.wxss: -------------------------------------------------------------------------------- 1 | .i-grid-icon{display:block;width:28px;height:28px;margin:0 auto}.i-grid-icon image{width:100%;height:100%} -------------------------------------------------------------------------------- /frontend/dist/grid-item/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | relations: { 5 | '../grid/index': { 6 | type: 'parent' 7 | }, 8 | '../grid-icon/index': { 9 | type: 'child' 10 | } 11 | }, 12 | 13 | data: { 14 | width: '33.33%' 15 | } 16 | }); 17 | -------------------------------------------------------------------------------- /frontend/dist/grid-item/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/grid-item/index.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/dist/grid-item/index.wxss: -------------------------------------------------------------------------------- 1 | .i-grid-item{position:relative;float:left;padding:20px 10px;width:33.33333333%;box-sizing:border-box;border-right:1rpx solid #e9eaec;border-bottom:1rpx solid #e9eaec} -------------------------------------------------------------------------------- /frontend/dist/grid-label/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | relations: { 5 | '../grid-item/index': { 6 | type: 'parent' 7 | } 8 | }, 9 | 10 | }); 11 | -------------------------------------------------------------------------------- /frontend/dist/grid-label/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/grid-label/index.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/dist/grid-label/index.wxss: -------------------------------------------------------------------------------- 1 | .i-grid-label{margin-top:5px;display:block;text-align:center;color:#1c2438;font-size:14px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden} -------------------------------------------------------------------------------- /frontend/dist/grid/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | relations: { 5 | '../grid-item/index': { 6 | type: 'child', 7 | linked () { 8 | this.setGridItemWidth(); 9 | }, 10 | linkChanged () { 11 | this.setGridItemWidth(); 12 | }, 13 | unlinked () { 14 | this.setGridItemWidth(); 15 | } 16 | } 17 | }, 18 | 19 | methods: { 20 | setGridItemWidth () { 21 | const nodes = this.getRelationNodes('../grid-item/index'); 22 | 23 | // const len = nodes.length; 24 | // if (len < 3) { 25 | // nodes.forEach(item => { 26 | // item.setData({ 27 | // 'width': '33.33%' 28 | // }); 29 | // }); 30 | // } else { 31 | // const width = 100 / nodes.length; 32 | // nodes.forEach(item => { 33 | // item.setData({ 34 | // 'width': width + '%' 35 | // }); 36 | // }); 37 | // } 38 | const width = 100 / nodes.length; 39 | nodes.forEach(item => { 40 | item.setData({ 41 | 'width': width + '%' 42 | }); 43 | }); 44 | } 45 | }, 46 | 47 | ready () { 48 | this.setGridItemWidth(); 49 | } 50 | }); 51 | -------------------------------------------------------------------------------- /frontend/dist/grid/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/grid/index.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/dist/grid/index.wxss: -------------------------------------------------------------------------------- 1 | .i-grid{border-top:1rpx solid #e9eaec;border-left:1rpx solid #e9eaec;overflow:hidden} -------------------------------------------------------------------------------- /frontend/dist/icon/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | properties: { 5 | type: { 6 | type: String, 7 | value: '' 8 | }, 9 | custom: { 10 | type: String, 11 | value: '' 12 | }, 13 | size: { 14 | type: Number, 15 | value: 14 16 | }, 17 | color: { 18 | type: String, 19 | value: '' 20 | } 21 | } 22 | }); 23 | -------------------------------------------------------------------------------- /frontend/dist/icon/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/icon/index.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/dist/index-item/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | properties : { 4 | name : { 5 | type : String, 6 | value : '' 7 | } 8 | }, 9 | relations : { 10 | '../index/index' : { 11 | type : 'parent' 12 | } 13 | }, 14 | data : { 15 | top : 0, 16 | height : 0, 17 | currentName : '' 18 | }, 19 | methods: { 20 | updateDataChange() { 21 | const className = '.i-index-item'; 22 | const query = wx.createSelectorQuery().in(this); 23 | query.select( className ).boundingClientRect((res)=>{ 24 | this.setData({ 25 | top : res.top, 26 | height : res.height, 27 | currentName : this.data.name 28 | }) 29 | }).exec() 30 | } 31 | } 32 | }) -------------------------------------------------------------------------------- /frontend/dist/index-item/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/index-item/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | {{name}} 3 | 4 | 5 | 6 | 7 | 8 | module.exports = { 9 | 10 | } 11 | 12 | -------------------------------------------------------------------------------- /frontend/dist/index-item/index.wxss: -------------------------------------------------------------------------------- 1 | .i-index-item-header{height:30px;line-height:30px;background:#eee;font-size:14px;padding-left:10px;width:100%;box-sizing:border-box}.i-index-item-content{font-size:14px} -------------------------------------------------------------------------------- /frontend/dist/index/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/index/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 17 | {{item}} 18 | 19 | 20 | {{currentName}} 21 | 22 | 23 | 24 | module.exports = { 25 | setScrollStyle : function(height){ 26 | var units = ['%','px','rem','rpx','em','rem']; 27 | var hasUnits = false; 28 | for( var i = 0; i < units.length;i++ ){ 29 | var u = units[i]; 30 | if( height.indexOf( u ) > -1 ){ 31 | hasUnits = true; 32 | break; 33 | } 34 | } 35 | return 'height:'+ ( hasUnits ? height : height+'px' ); 36 | } 37 | } 38 | 39 | -------------------------------------------------------------------------------- /frontend/dist/index/index.wxss: -------------------------------------------------------------------------------- 1 | .i-index{width:100%;height:100%}.i-index-line{position:absolute;left:0;width:100%;height:1rpx;background-color:#f7f7f7;top:50%}.i-index-content{background:#fff;position:relative;z-index:1;display:inline-block;padding:0 10px}.i-index-fixed{position:fixed;right:0;top:50%;z-index:10;padding-left:10px;transform:translateY(-50%)}.i-index-fixed-item{display:block;height:18px;line-height:18px;padding:0 5px;text-align:center;color:#2d8cf0;font-size:12px;border-radius:50%}.i-index-fixed-item-current{background:#2d8cf0;color:#fff}.i-index-tooltip{position:fixed;left:50%;top:50%;transform:translate3d(-50%,-50%,0);background:rgba(0,0,0,.7);color:#fff;font-size:24px;border-radius:50%;width:80px;height:80px;line-height:80px;text-align:center} -------------------------------------------------------------------------------- /frontend/dist/input-number/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/input-number/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | - 3 | 4 | + 5 | 6 | -------------------------------------------------------------------------------- /frontend/dist/input-number/index.wxss: -------------------------------------------------------------------------------- 1 | .i-input-number{color:#495060}.i-input-number view{display:inline-block;line-height:20px;padding:5px 0;text-align:center;min-width:40px;box-sizing:border-box;vertical-align:middle;font-size:12px;border:1rpx solid #dddee1}.i-input-number-minus{border-right:none;border-radius:2px 0 0 2px}.i-input-number-plus{border-left:none;border-radius:0 2px 2px 0}.i-input-number-text{border:1rpx solid #dddee1;display:inline-block;text-align:center;vertical-align:middle;height:30px;width:40px;min-height:auto;font-size:12px;line-height:30px}.i-input-number-disabled{border-color:#dddee1;color:#bbbec4;background:#f7f7f7} -------------------------------------------------------------------------------- /frontend/dist/input/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | behaviors: ['wx://form-field'], 3 | 4 | externalClasses: ['i-class'], 5 | 6 | properties: { 7 | title: { 8 | type: String 9 | }, 10 | // text || textarea || password || number 11 | type: { 12 | type: String, 13 | value: 'text' 14 | }, 15 | disabled: { 16 | type: Boolean, 17 | value: false 18 | }, 19 | placeholder: { 20 | type: String, 21 | value: '' 22 | }, 23 | autofocus: { 24 | type: Boolean, 25 | value: false 26 | }, 27 | mode: { 28 | type: String, 29 | value: 'normal' 30 | }, 31 | right: { 32 | type: Boolean, 33 | value: false 34 | }, 35 | error: { 36 | type: Boolean, 37 | value: false 38 | }, 39 | maxlength: { 40 | type: Number 41 | } 42 | }, 43 | 44 | methods: { 45 | handleInputChange(event) { 46 | const { detail = {} } = event; 47 | const { value = '' } = detail; 48 | this.setData({ value }); 49 | 50 | this.triggerEvent('change', event); 51 | }, 52 | 53 | handleInputFocus(event) { 54 | this.triggerEvent('focus', event); 55 | }, 56 | 57 | handleInputBlur(event) { 58 | this.triggerEvent('blur', event); 59 | } 60 | } 61 | }); 62 | -------------------------------------------------------------------------------- /frontend/dist/input/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/input/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | {{ title }} 3 | 17 | 31 | 32 | -------------------------------------------------------------------------------- /frontend/dist/input/index.wxss: -------------------------------------------------------------------------------- 1 | .i-cell{position:relative;padding:12px 15px;display:flex;background:#fff;align-items:center;line-height:1.4;font-size:14px;overflow:hidden}.i-cell::after{content:'';position:absolute;top:0;left:0;width:200%;height:200%;transform:scale(.5);transform-origin:0 0;pointer-events:none;box-sizing:border-box;border:0 solid #e9eaec;border-bottom-width:1px;left:15px;right:0}.i-cell-last::after{display:none}.i-cell-icon{margin-right:5px}.i-cell-icon:empty{display:none}.i-cell-bd{flex:1}.i-cell-text{line-height:24px;font-size:14px}.i-cell-desc{line-height:1.2;font-size:12px;color:#80848f}.i-cell-ft{position:relative;text-align:right;color:#495060}.i-cell-access .i-cell-ft{padding-right:13px}.i-cell-access .i-cell-ft::after{content:" ";display:inline-block;width:6px;height:6px;position:absolute;top:50%;right:2px;border-width:2px 2px 0 0;border-color:#dddee1;border-style:solid;transform:translateY(-50%) matrix(.71,.71,-.71,.71,0,0)}.i-input{padding:7px 15px;color:#495060}.i-input-wrapped{margin:10px 15px;background-color:#fff}.i-input-wrapped::after{left:0;border-width:1px;border-radius:4px}.i-input-error{color:#ed3f14}.i-input-title{color:#495060;min-width:65px;padding-right:10px}.i-input-input{flex:1;line-height:1.6;padding:4px 0;min-height:22px;height:auto;font-size:14px}.i-input-placeholder{font-size:14px}.i-input-input-right{text-align:right}.i-input.i-input-wrapped::after{display:block}.i-input-wrapped.i-input-error::after{border-color:#ed3f14} -------------------------------------------------------------------------------- /frontend/dist/load-more/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | properties: { 5 | loading: { 6 | type: Boolean, 7 | value: true 8 | }, 9 | tip: { 10 | type: String, 11 | value: '' 12 | } 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /frontend/dist/load-more/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/load-more/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ tip }} 5 | 正在加载 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/dist/load-more/index.wxss: -------------------------------------------------------------------------------- 1 | .i-load-more{width:65%;margin:1.5em auto;line-height:1.6em;font-size:14px;text-align:center}.i-load-more-loading{display:inline-block;margin-right:12px;vertical-align:middle;width:14px;height:14px;background:0 0;border-radius:50%;border:2px solid #e9eaec;border-color:#e9eaec #e9eaec #e9eaec #2d8cf0;animation:btn-spin .6s linear;animation-iteration-count:infinite}.i-load-more-tip{display:inline-block;vertical-align:middle;color:#495060}.i-load-more-line{border-top:1px solid #dddee1;display:flex;border-top:0}.i-load-more-line::before{position:relative;top:-1px;-webkit-box-flex:1;-webkit-flex:1;flex:1;content:'';border-top:1px solid #dddee1}.i-load-more-line::after{position:relative;top:-1px;-webkit-box-flex:1;-webkit-flex:1;flex:1;content:'';border-top:1px solid #dddee1}.i-load-more-line .i-load-more-tip{position:relative;top:-.9em;padding:0 .55em}.i-load-more-empty{width:4px;height:4px;border-radius:50%;background-color:#e5e5e5;display:inline-block;position:relative;vertical-align:0;top:-.16em}@keyframes btn-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}} -------------------------------------------------------------------------------- /frontend/dist/message/index.js: -------------------------------------------------------------------------------- 1 | const default_data = { 2 | visible: false, 3 | content: '', 4 | duration: 2, 5 | type: 'default', // default || success || warning || error 6 | }; 7 | 8 | let timmer = null; 9 | 10 | Component({ 11 | externalClasses: ['i-class'], 12 | 13 | data: { 14 | ...default_data 15 | }, 16 | 17 | methods: { 18 | handleShow (options) { 19 | const { type = 'default', duration = 2 } = options; 20 | 21 | this.setData({ 22 | ...options, 23 | type, 24 | duration, 25 | visible: true 26 | }); 27 | 28 | const d = this.data.duration * 1000; 29 | 30 | if (timmer) clearTimeout(timmer); 31 | if (d !== 0) { 32 | timmer = setTimeout(() => { 33 | this.handleHide(); 34 | timmer = null; 35 | }, d); 36 | } 37 | }, 38 | 39 | handleHide () { 40 | this.setData({ 41 | ...default_data 42 | }); 43 | } 44 | } 45 | }); -------------------------------------------------------------------------------- /frontend/dist/message/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/message/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | {{ content }} 3 | -------------------------------------------------------------------------------- /frontend/dist/message/index.wxss: -------------------------------------------------------------------------------- 1 | .i-message{display:block;width:100%;min-height:32px;line-height:2.3;position:fixed;top:0;left:0;right:0;background:#2d8cf0;color:#fff;text-align:center;font-size:14px;z-index:1010;opacity:0;-webkit-transform:translateZ(0) translateY(-100%);transition:all .4s ease-in-out}.i-message-show{-webkit-transform:translateZ(0) translateY(0);opacity:1}.i-message-default{background:#2d8cf0}.i-message-success{background:#19be6b}.i-message-warning{background:#f90}.i-message-error{background:#ed3f14} -------------------------------------------------------------------------------- /frontend/dist/modal/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class', 'i-class-mask'], 3 | 4 | properties: { 5 | visible: { 6 | type: Boolean, 7 | value: false 8 | }, 9 | title: { 10 | type: String, 11 | value: '' 12 | }, 13 | showOk: { 14 | type: Boolean, 15 | value: true 16 | }, 17 | showCancel: { 18 | type: Boolean, 19 | value: true 20 | }, 21 | okText: { 22 | type: String, 23 | value: '确定' 24 | }, 25 | cancelText: { 26 | type: String, 27 | value: '取消' 28 | }, 29 | // 按钮组,有此值时,不显示 ok 和 cancel 按钮 30 | actions: { 31 | type: Array, 32 | value: [] 33 | }, 34 | // horizontal || vertical 35 | actionMode: { 36 | type: String, 37 | value: 'horizontal' 38 | } 39 | }, 40 | 41 | methods: { 42 | handleClickItem ({ currentTarget = {} }) { 43 | const dataset = currentTarget.dataset || {}; 44 | const { index } = dataset; 45 | this.triggerEvent('click', { index }); 46 | }, 47 | handleClickOk () { 48 | this.triggerEvent('ok'); 49 | }, 50 | handleClickCancel () { 51 | this.triggerEvent('cancel'); 52 | } 53 | } 54 | }); 55 | -------------------------------------------------------------------------------- /frontend/dist/modal/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": { 4 | "i-grid": "../grid/index", 5 | "i-grid-item": "../grid-item/index", 6 | "i-button": "../button/index", 7 | "i-icon": "../icon/index" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /frontend/dist/notice-bar/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": 4 | { 5 | "i-icon": "../icon/index" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /frontend/dist/notice-bar/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /frontend/dist/notice-bar/index.wxss: -------------------------------------------------------------------------------- 1 | .i-noticebar{display:flex;height:72rpx;line-height:72rpx;font-size:14px;color:#f76a24;background-color:#fefcec;overflow:hidden}.i-noticebar-icon{display:flex;margin-left:30rpx;align-items:center}.i-noticebar-icon+view{margin-left:10rpx}.i-noticebar-operation{display:flex;margin-right:16rpx;align-items:center}.i-noticebar-content-wrap{position:relative;flex:1;margin:0 30rpx;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.i-noticebar-content-wrap .i-noticebar-content{position:absolute;transition-duration:20s} -------------------------------------------------------------------------------- /frontend/dist/page/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | options: { 5 | multipleSlots: true 6 | }, 7 | 8 | properties: { 9 | // button || number || pointer 10 | mode: { 11 | type: String, 12 | value: 'button' 13 | }, 14 | current: { 15 | type: Number, 16 | value: 1 17 | }, 18 | total: { 19 | type: Number, 20 | value: 0 21 | }, 22 | // 是否隐藏数值 23 | simple: { 24 | type: Boolean, 25 | value: false 26 | } 27 | }, 28 | 29 | methods: { 30 | handleChange (type) { 31 | this.triggerEvent('change', { 32 | type: type 33 | }); 34 | }, 35 | handlePrev () { 36 | this.handleChange('prev'); 37 | }, 38 | handleNext () { 39 | this.handleChange('next'); 40 | } 41 | } 42 | }); 43 | -------------------------------------------------------------------------------- /frontend/dist/page/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": 4 | { 5 | "i-button": "../button/index" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /frontend/dist/page/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{ current }}/{{total}} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /frontend/dist/page/index.wxss: -------------------------------------------------------------------------------- 1 | .i-page{display:block;width:100%;height:44px;overflow:hidden;box-sizing:border-box;position:relative}.i-page-prev{position:absolute;left:10px;top:0}.i-page-next{position:absolute;right:10px;top:0}.i-page-number{width:100%;height:44px;line-height:44px;margin:0 auto;text-align:center}.i-page-number-current{display:inline;color:#2d8cf0}.i-page-pointer{width:100%;height:44px;line-height:44px;margin:0 auto;text-align:center}.i-page-pointer-dot{display:inline-block;width:8px;height:8px;margin:0 2px;border-radius:50%;background:#bbbec4}.i-page-pointer-dot.current{background:#80848f}.i-page-button{display:inline-block;margin:0} -------------------------------------------------------------------------------- /frontend/dist/panel/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | properties: { 5 | title: { 6 | type: String, 7 | value: '' 8 | }, 9 | // 标题顶部距离 10 | hideTop: { 11 | type: Boolean, 12 | value: false 13 | }, 14 | hideBorder: { 15 | type: Boolean, 16 | value: false 17 | } 18 | } 19 | }); 20 | -------------------------------------------------------------------------------- /frontend/dist/panel/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/panel/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | {{ title }} 3 | 4 | 5 | -------------------------------------------------------------------------------- /frontend/dist/panel/index.wxss: -------------------------------------------------------------------------------- 1 | .i-panel{position:relative;overflow:hidden}.i-panel-title{font-size:14px;line-height:1;color:#1c2438;padding:20px 16px 10px}.i-panel-title-hide-top{padding-top:0}.i-panel-content{position:relative;background:#fff;overflow:hidden}.i-panel-content::after{content:'';position:absolute;top:0;left:0;width:200%;height:200%;transform:scale(.5);transform-origin:0 0;pointer-events:none;box-sizing:border-box;border:0 solid #e9eaec;border-top-width:1px;border-bottom-width:1px}.i-panel-without-border::after{border:0 none} -------------------------------------------------------------------------------- /frontend/dist/progress/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | properties: { 5 | percent: { 6 | type: Number, 7 | value: 0 8 | }, 9 | // normal || active || wrong || success 10 | status: { 11 | type: String, 12 | value: 'normal' 13 | }, 14 | strokeWidth: { 15 | type: Number, 16 | value: 10 17 | }, 18 | hideInfo: { 19 | type: Boolean, 20 | value: false 21 | } 22 | } 23 | }); 24 | -------------------------------------------------------------------------------- /frontend/dist/progress/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/progress/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {{ percent }}% 9 | 10 | -------------------------------------------------------------------------------- /frontend/dist/progress/index.wxss: -------------------------------------------------------------------------------- 1 | .i-progress{display:inline-block;width:100%;font-size:12px;position:relative}.i-progress-outer{display:inline-block;width:100%;margin-right:0;padding-right:0;box-sizing:border-box}.i-progress-show-info .i-progress-outer{padding-right:55px;margin-right:-55px}.i-progress-inner{display:inline-block;width:100%;background-color:#f3f3f3;border-radius:100px;vertical-align:middle}.i-progress-bg{border-radius:100px;background-color:#2db7f5;transition:all .2s linear;position:relative}.i-progress-text{display:inline-block;margin-left:5px;text-align:left;font-size:1em;vertical-align:middle}.i-progress-active .i-progress-bg:before{content:'';opacity:0;position:absolute;top:0;left:0;right:0;bottom:0;background:#fff;border-radius:10px;animation:i-progress-active 2s ease-in-out infinite}.i-progress-wrong .i-progress-bg{background-color:#ed3f14}.i-progress-wrong .i-progress-text{color:#ed3f14}.i-progress-success .i-progress-bg{background-color:#19be6b}.i-progress-success .i-progress-text{color:#19be6b}@keyframes i-progress-active{0%{opacity:.3;width:0}100%{opacity:0;width:100%}} -------------------------------------------------------------------------------- /frontend/dist/radio-group/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | relations: { 4 | '../radio/index': { 5 | type: 'child', 6 | linked() { 7 | this.changeCurrent(); 8 | }, 9 | linkChanged() { 10 | this.changeCurrent(); 11 | }, 12 | unlinked() { 13 | this.changeCurrent(); 14 | } 15 | } 16 | }, 17 | properties: { 18 | current: { 19 | type: String, 20 | value: '', 21 | observer: 'changeCurrent' 22 | }, 23 | }, 24 | methods: { 25 | changeCurrent(val = this.data.current) { 26 | let items = this.getRelationNodes('../radio/index'); 27 | const len = items.length; 28 | if (len > 0) { 29 | items.forEach(item => { 30 | item.changeCurrent(val === item.data.value); 31 | }); 32 | } 33 | }, 34 | emitEvent(current) { 35 | this.triggerEvent('change', current); 36 | } 37 | } 38 | }); 39 | -------------------------------------------------------------------------------- /frontend/dist/radio-group/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": 4 | { 5 | "i-cell-group": "../cell-group/index" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /frontend/dist/radio-group/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /frontend/dist/radio-group/index.wxss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/dist/radio-group/index.wxss -------------------------------------------------------------------------------- /frontend/dist/radio/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": 4 | { 5 | "i-cell": "../cell/index" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /frontend/dist/radio/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/dist/radio/index.wxss: -------------------------------------------------------------------------------- 1 | .i-radio-cell::after{display:block}.i-radio-radio-left{float:left}.i-radio-radio-right{float:right}.i-radio-radio{vertical-align:middle}.i-radio-title{display:inline-block;vertical-align:middle} -------------------------------------------------------------------------------- /frontend/dist/rate/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents":{ 4 | "i-icon": "../icon/index" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /frontend/dist/rate/index.wxml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 15 | var prefixCls = 'i-rate'; 16 | module.exports = { 17 | getCurrent : function( value,index ){ 18 | if( index < value ){ 19 | return prefixCls + '-current' 20 | } 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /frontend/dist/rate/index.wxss: -------------------------------------------------------------------------------- 1 | .i-rate{margin:0;padding:0;font-size:20px;display:inline-block;vertical-align:middle;font-weight:400;font-style:normal}.i-rate-hide-input{display:none}.i-rate-star{display:inline-block;color:#e9e9e9}.i-rate-current{color:#f5a623}.i-rate-text{display:inline-block;vertical-align:middle;margin-left:6px;font-size:14px} -------------------------------------------------------------------------------- /frontend/dist/row/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | relations: { 5 | '../col/index': { 6 | type: 'child' 7 | } 8 | } 9 | }); 10 | -------------------------------------------------------------------------------- /frontend/dist/row/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/row/index.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/dist/row/index.wxss: -------------------------------------------------------------------------------- 1 | .i-row:after{content:"";display:table;clear:both} -------------------------------------------------------------------------------- /frontend/dist/slide/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | options: { 4 | // 在组件定义时的选项中启用多slot支持 5 | multipleSlots: true 6 | }, 7 | methods : { 8 | handleTap2(){ 9 | console.log(event,1111111) 10 | }, 11 | handleTap3(){ 12 | 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /frontend/dist/slide/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": 4 | { 5 | "i-button": "../button/index", 6 | "i-icon": "../icon/index" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /frontend/dist/slide/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 1111 3 | 4 | -------------------------------------------------------------------------------- /frontend/dist/slide/index.wxss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/dist/slide/index.wxss -------------------------------------------------------------------------------- /frontend/dist/spin/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | properties: { 5 | // small || default || large 6 | size: { 7 | type: String, 8 | value: 'default' 9 | }, 10 | fix: { 11 | type: Boolean, 12 | value: false 13 | }, 14 | fullscreen: { 15 | type: Boolean, 16 | value: false 17 | }, 18 | custom: { 19 | type: Boolean, 20 | value: false 21 | } 22 | } 23 | }); 24 | -------------------------------------------------------------------------------- /frontend/dist/spin/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/spin/index.wxml: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 |
7 | -------------------------------------------------------------------------------- /frontend/dist/spin/index.wxss: -------------------------------------------------------------------------------- 1 | .i-spin{color:#2d8cf0;vertical-align:middle;text-align:center}.i-spin-dot{position:relative;display:block;border-radius:50%;background-color:#2d8cf0;width:20px;height:20px;animation:ani-spin-bounce 1s 0s ease-in-out infinite}.i-spin-large .i-spin-dot{width:32px;height:32px}.i-spin-small .i-spin-dot{width:12px;height:12px}.i-spin-fix{position:absolute;top:0;left:0;z-index:8;width:100%;height:100%;background-color:rgba(255,255,255,.9)}.i-spin-fullscreen{z-index:2010}.i-spin-fullscreen-wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.i-spin-fix .i-spin-main{position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.i-spin-fix .i-spin-dot{display:inline-block}.i-spin-show-text .i-spin-dot,.i-spin-text{display:none}.i-spin-show-text .i-spin-text{display:block;font-size:14px}@keyframes ani-spin-bounce{0%{transform:scale(0)}100%{transform:scale(1);opacity:0}} -------------------------------------------------------------------------------- /frontend/dist/step/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | properties : { 4 | status : { 5 | type : String, 6 | //wait、process、finish、error 7 | value : '' 8 | }, 9 | title : { 10 | type : String, 11 | value : '' 12 | }, 13 | content : { 14 | type : String, 15 | value : '' 16 | }, 17 | icon : { 18 | type : String, 19 | value : '' 20 | } 21 | }, 22 | options: { 23 | // 在组件定义时的选项中启用多slot支持 24 | multipleSlots: true 25 | }, 26 | relations : { 27 | '../steps/index' : { 28 | type : 'parent' 29 | } 30 | }, 31 | data : { 32 | //step length 33 | len : 1, 34 | //current in step index 35 | index : 0, 36 | //parent component select current index 37 | current : 0, 38 | //css direction 39 | direction : 'horizontal' 40 | }, 41 | methods : { 42 | updateDataChange( options ){ 43 | this.setData({ 44 | len : options.len, 45 | index : options.index, 46 | current : options.current, 47 | direction : options.direction 48 | }) 49 | } 50 | } 51 | 52 | }) -------------------------------------------------------------------------------- /frontend/dist/step/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": 4 | { 5 | "i-icon": "../icon/index" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /frontend/dist/steps/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | properties : { 4 | current : { 5 | type : Number, 6 | value : -1, 7 | observer : '_updateDataChange' 8 | }, 9 | status : { 10 | type : String, 11 | //wait、process、finish、error 12 | value : '' 13 | }, 14 | direction : { 15 | type : String, 16 | //value has horizontal or vertical 17 | value : 'horizontal' 18 | } 19 | }, 20 | relations : { 21 | '../step/index' : { 22 | type : 'child', 23 | linked(){ 24 | this._updateDataChange(); 25 | }, 26 | linkChanged () { 27 | this._updateDataChange(); 28 | }, 29 | unlinked () { 30 | this._updateDataChange(); 31 | } 32 | } 33 | }, 34 | methods: { 35 | _updateDataChange() { 36 | let steps = this.getRelationNodes('../step/index'); 37 | const len = steps.length; 38 | if (len > 0) { 39 | steps.forEach((step, index) => { 40 | step.updateDataChange({ 41 | len : len, 42 | index : index, 43 | current : this.data.current, 44 | direction : this.data.direction 45 | }); 46 | }); 47 | } 48 | } 49 | } 50 | }) -------------------------------------------------------------------------------- /frontend/dist/steps/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/steps/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /frontend/dist/steps/index.wxss: -------------------------------------------------------------------------------- 1 | .i-steps{width:100%} -------------------------------------------------------------------------------- /frontend/dist/sticky-item/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | options: { 4 | multipleSlots: true 5 | }, 6 | relations : { 7 | '../sticky/index' : { 8 | type : 'parent' 9 | } 10 | }, 11 | data : { 12 | top : 0, 13 | height : 0, 14 | isFixed : false, 15 | index : -1, 16 | }, 17 | methods: { 18 | updateScrollTopChange(scrollTop){ 19 | const data = this.data; 20 | const top = data.top; 21 | const height = data.height; 22 | this.setData({ 23 | isFixed : ( scrollTop >= top && scrollTop < top + height ) ? true : false 24 | }) 25 | }, 26 | updateDataChange(index) { 27 | const className = '.i-sticky-item'; 28 | const query = wx.createSelectorQuery().in(this); 29 | query.select( className ).boundingClientRect((res)=>{ 30 | if( res ){ 31 | this.setData({ 32 | top : res.top, 33 | height : res.height, 34 | index : index 35 | }) 36 | } 37 | }).exec() 38 | } 39 | } 40 | }) -------------------------------------------------------------------------------- /frontend/dist/sticky-item/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/sticky-item/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /frontend/dist/sticky-item/index.wxss: -------------------------------------------------------------------------------- 1 | .i-sticky-item-header{background:#eee;font-size:14px;width:100%;height:32px;line-height:32px}.i-sticky-item-content{font-size:14px}.i-sticky-title{width:100%;padding:0 15px;box-sizing:border-box;background:#eee}.i-sticky-fixed .i-sticky-title{position:fixed;top:0} -------------------------------------------------------------------------------- /frontend/dist/sticky/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/sticky/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /frontend/dist/sticky/index.wxss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/dist/sticky/index.wxss -------------------------------------------------------------------------------- /frontend/dist/swipeout/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": { 4 | "i-cell": "../cell/index", 5 | "i-icon": "../icon/index" 6 | } 7 | } -------------------------------------------------------------------------------- /frontend/dist/swipeout/index.wxss: -------------------------------------------------------------------------------- 1 | .i-swipeout-wrap{border-bottom:#dddee1 solid 1px;background:#fff;position:relative;overflow:hidden}.i-swipeout-item{width:100%;padding:15px 20px;box-sizing:border-box;transition:transform .2s ease;font-size:14px}.i-swipeout-content{white-space:nowrap;overflow:hidden}.i-swipeout-button-right-group{position:absolute;right:-100%;top:0;height:100%;z-index:1;width:100%}.i-swipeout-button-right-item{height:100%;float:left;white-space:nowrap;box-sizing:border-box;display:flex;align-items:center;justify-content:center} -------------------------------------------------------------------------------- /frontend/dist/switch/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | properties : { 4 | value : { 5 | type : Boolean, 6 | value : false 7 | }, 8 | //large small default 9 | size : { 10 | type : String, 11 | value : 'default' 12 | }, 13 | // is or not disable 14 | disabled : { 15 | type : Boolean, 16 | value : false 17 | }, 18 | // hidden inut name 19 | name : { 20 | type : String, 21 | value : '' 22 | } 23 | }, 24 | options: { 25 | // 在组件定义时的选项中启用多slot支持 26 | multipleSlots: true 27 | }, 28 | methods : { 29 | toggle(){ 30 | if( this.data.disabled ) return; 31 | const data = this.data; 32 | const value = data.value ? false : true; 33 | this.triggerEvent('change',{ 34 | value : value 35 | }) 36 | } 37 | } 38 | }); 39 | -------------------------------------------------------------------------------- /frontend/dist/switch/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/switch/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | var sizes = ['large', 'default']; 12 | var prefixCls = 'i-switch'; 13 | module.exports = { 14 | setSize : function( size ){ 15 | var index = sizes.indexOf( size ); 16 | return prefixCls + ( index > -1 ? ( '-'+size ) : 'default' ) 17 | }, 18 | setCurrent : function( value,disabled ){ 19 | var className = value && !disabled ? prefixCls + '-checked' : ''; 20 | if( disabled ){ 21 | className += ' ' + prefixCls + '-disabled'; 22 | } 23 | return className; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /frontend/dist/switch/index.wxss: -------------------------------------------------------------------------------- 1 | .i-switch{display:inline-block;width:48px;height:24px;line-height:24px;border-radius:24px;vertical-align:middle;border:1px solid #ccc;background-color:#ccc;position:relative;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:all .2s ease-in-out}.i-switch-hide-input{display:none;opacity:0}.i-switch-inner{color:#fff;font-size:12px;position:absolute;left:25px;vertical-align:middle}.i-switch-inner .i-icon{width:12px;height:12px;text-align:center;vertical-align:middle}.i-switch:after{content:'';width:22px;height:22px;border-radius:22px;background-color:#fff;position:absolute;left:1px;top:1px;cursor:pointer;transition:left .2s ease-in-out,width .2s ease-in-out}.i-switch-checked:after{left:8px}.i-switch-large{width:60px}.i-switch-large.i-switch-checked:after{left:37px}.i-switch-checked:after{left:25px}.i-switch-checked{border-color:#2d8cf0;background-color:#2d8cf0}.i-switch-checked .i-switch-inner{left:8px}.i-switch-checked:after{left:25px}.i-switch-disabled{background:#f3f3f3;border-color:#f3f3f3}.i-switch-disabled:after{background:#ccc;cursor:not-allowed}.i-switch-disabled .i-switch-inner{color:#ccc} -------------------------------------------------------------------------------- /frontend/dist/tab-bar-item/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | relations: { 5 | '../tab-bar/index': { 6 | type: 'parent' 7 | } 8 | }, 9 | 10 | properties: { 11 | icon: { 12 | type: String, 13 | value: '' 14 | }, 15 | currentIcon: { 16 | type: String, 17 | value: '' 18 | }, 19 | img: { 20 | type: String, 21 | value: '' 22 | }, 23 | currentImg: { 24 | type: String, 25 | value: '' 26 | }, 27 | key: { 28 | type: String, 29 | value: '' 30 | }, 31 | title: { 32 | type: String, 33 | value: '' 34 | }, 35 | dot: { 36 | type: Boolean, 37 | value: false 38 | }, 39 | count: { 40 | type: Number, 41 | value: 0 42 | } 43 | }, 44 | 45 | data: { 46 | current: false, 47 | currentColor: '' 48 | }, 49 | 50 | methods: { 51 | changeCurrent (current) { 52 | this.setData({ current }); 53 | }, 54 | changeCurrentColor (currentColor) { 55 | this.setData({ currentColor }); 56 | }, 57 | handleClickItem () { 58 | const parent = this.getRelationNodes('../tab-bar/index')[0]; 59 | parent.emitEvent(this.data.key); 60 | } 61 | } 62 | }); 63 | -------------------------------------------------------------------------------- /frontend/dist/tab-bar-item/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": 4 | { 5 | "i-badge": "../badge/index", 6 | "i-icon": "../icon/index" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /frontend/dist/tab-bar-item/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{ title }} 7 | {{ title }} 8 | 9 | 10 | -------------------------------------------------------------------------------- /frontend/dist/tab-bar-item/index.wxss: -------------------------------------------------------------------------------- 1 | .i-tab-bar-item{flex:1;display:flex;width:100%;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;text-align:center}.i-tab-bar-item-icon{display:flex;-webkit-box-pack:center;justify-content:center;box-sizing:border-box;color:#80848f}.i-tab-bar-item-icon-current{color:#2d8cf0}.i-tab-bar-item-img{display:flex;-webkit-box-pack:center;justify-content:center;box-sizing:border-box;width:22px;height:22px}.i-tab-bar-item-title{font-size:10px;margin:3px 0 0;line-height:1;text-align:center;box-sizing:border-box;color:#80848f}.i-tab-bar-item-title-current{color:#2d8cf0}.i-tab-bar-item-img{display:flex;-webkit-box-pack:center;justify-content:center;box-sizing:border-box;color:#80848f} -------------------------------------------------------------------------------- /frontend/dist/tab-bar/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/tab-bar/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /frontend/dist/tab-bar/index.wxss: -------------------------------------------------------------------------------- 1 | .i-tab-bar{display:flex;width:100%;height:50px;box-sizing:border-box;position:relative;justify-content:space-around;align-items:center;-webkit-box-align:center;background:#fff}.i-tab-bar::after{content:'';position:absolute;top:0;left:0;width:200%;height:200%;transform:scale(.5);transform-origin:0 0;pointer-events:none;box-sizing:border-box;border:0 solid #e9eaec;border-top-width:1px}.i-tab-bar-fixed{position:fixed;bottom:0;z-index:2}.i-tab-bar-list{position:absolute;top:0;bottom:0;left:0;right:0}.i-tab-bar-layer{display:block;float:left;height:100%} -------------------------------------------------------------------------------- /frontend/dist/tab/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | 4 | relations: { 5 | '../tabs/index': { 6 | type: 'parent' 7 | } 8 | }, 9 | 10 | properties: { 11 | key: { 12 | type: String, 13 | value: '' 14 | }, 15 | title: { 16 | type: String, 17 | value: '' 18 | }, 19 | dot: { 20 | type: Boolean, 21 | value: false 22 | }, 23 | count: { 24 | type: Number, 25 | value: 0 26 | } 27 | }, 28 | 29 | data: { 30 | current: false, 31 | currentColor: '', 32 | scroll: false 33 | }, 34 | 35 | methods: { 36 | changeCurrent (current) { 37 | this.setData({ current }); 38 | }, 39 | changeCurrentColor (currentColor) { 40 | this.setData({ currentColor }); 41 | }, 42 | changeScroll (scroll) { 43 | this.setData({ scroll }); 44 | }, 45 | handleClickItem () { 46 | const parent = this.getRelationNodes('../tabs/index')[0]; 47 | parent.emitEvent(this.data.key); 48 | } 49 | } 50 | }); 51 | -------------------------------------------------------------------------------- /frontend/dist/tab/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": 4 | { 5 | "i-badge": "../badge/index" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /frontend/dist/tab/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ title }} 5 | {{ title }} 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/dist/tab/index.wxss: -------------------------------------------------------------------------------- 1 | .i-tabs-tab{flex:1;display:flex;width:100%;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;text-align:center;position:relative}.i-tabs-tab-bar{display:block;width:100%;height:2px;background:0 0;position:absolute;bottom:0;left:0;background:#2d8cf0}.i-tabs-tab-title{font-size:14px;text-align:center;box-sizing:border-box;color:#80848f}.i-tabs-tab-title-current{color:#2d8cf0}.i-tabs-tab-scroll{display:inline-block;width:60px} -------------------------------------------------------------------------------- /frontend/dist/tabs/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } 4 | -------------------------------------------------------------------------------- /frontend/dist/tabs/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /frontend/dist/tabs/index.wxss: -------------------------------------------------------------------------------- 1 | .i-tabs{display:flex;width:100%;height:42px;line-height:42px;box-sizing:border-box;position:relative;justify-content:space-around;align-items:center;-webkit-box-align:center;background:#fff}.i-tabs::after{content:'';position:absolute;top:0;left:0;width:200%;height:200%;transform:scale(.5);transform-origin:0 0;pointer-events:none;box-sizing:border-box;border:0 solid #e9eaec;border-bottom-width:1px}.i-tabs-scroll{display:block;overflow-x:auto;white-space:nowrap}.i-tabs-fixed{position:fixed;top:0;z-index:2} -------------------------------------------------------------------------------- /frontend/dist/tag/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['i-class'], 3 | properties : { 4 | //slot name 5 | name : { 6 | type : String, 7 | value : '' 8 | }, 9 | //can click or not click 10 | checkable : { 11 | type : Boolean, 12 | value : false 13 | }, 14 | //is current choose 15 | checked : { 16 | type : Boolean, 17 | value : true 18 | }, 19 | //background and color setting 20 | color : { 21 | type : String, 22 | value : 'default' 23 | }, 24 | //control fill or not 25 | type : { 26 | type : String, 27 | value : 'dot' 28 | } 29 | }, 30 | methods : { 31 | tapTag(){ 32 | const data = this.data; 33 | if( data.checkable ){ 34 | const checked = data.checked ? false : true; 35 | this.triggerEvent('change',{ 36 | name : data.name || '', 37 | checked : checked 38 | }); 39 | } 40 | } 41 | } 42 | }) -------------------------------------------------------------------------------- /frontend/dist/tag/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component" : true 3 | } -------------------------------------------------------------------------------- /frontend/dist/tag/index.wxml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | module.exports = { 8 | getClass : function(color,type,checked,checkable) { 9 | var initColorList = ['blue', 'green', 'red', 'yellow', 'default']; 10 | var theme = ''; 11 | var className = 'i-tag-'; 12 | if( initColorList.indexOf( color ) > -1 ){ 13 | theme = className + color; 14 | } 15 | if( type === 'border' ){ 16 | theme = className+color+'-border'; 17 | } 18 | if( checkable && checked ){ 19 | theme = className+color+'-checked'; 20 | }else if( checkable && !checked ){ 21 | theme = ( type === 'border' ? className + color +'-border' : className+'none' ); 22 | } 23 | 24 | return theme; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /frontend/dist/tag/index.wxss: -------------------------------------------------------------------------------- 1 | .i-tag{display:inline-block;height:18px;line-height:18px;padding:0 4px;border-radius:2px;background:#fff;font-size:11px;vertical-align:middle;border:1rpx solid #dddee1}.i-tag-none{border-color:#fff}.i-tag-default{border-color:#dddee1;background:#e9eaec}.i-tag-red{background:#ed3f14;color:#fff}.i-tag-red-border{color:#ed3f14;background:#fff;border-color:#ed3f14}.i-tag-red-checked{background:#ed3f14;color:#fff;border-color:#ed3f14}.i-tag-green{background:#19be6b;color:#fff;border-color:#19be6b}.i-tag-green-border{color:#19be6b;background:#fff;border-color:#19be6b}.i-tag-green-checked{background:#19be6b;color:#fff;border-color:#19be6b}.i-tag-blue{background:#2d8cf0;color:#fff;border-color:#2d8cf0}.i-tag-blue-border{color:#2d8cf0;background:#fff;border-color:#2d8cf0}.i-tag-blue-checked{background:#2d8cf0;color:#fff;border-color:#2d8cf0}.i-tag-yellow{background:#f90;color:#fff;border-color:#f90}.i-tag-yellow-border{color:#f90;background:#fff;border-color:#f90}.i-tag-yellow-checked{background:#f90;color:#fff;border-color:#f90}.i-tag-default-checked{background:#e9eaec;color:#495060;border-color:#e9eaec} -------------------------------------------------------------------------------- /frontend/dist/toast/index.js: -------------------------------------------------------------------------------- 1 | const default_data = { 2 | visible: false, 3 | content: '', 4 | icon: '', 5 | image: '', 6 | duration: 2, 7 | mask: true, 8 | type: 'default', // default || success || warning || error || loading 9 | }; 10 | 11 | let timmer = null; 12 | 13 | Component({ 14 | externalClasses: ['i-class'], 15 | 16 | data: { 17 | ...default_data 18 | }, 19 | 20 | methods: { 21 | handleShow (options) { 22 | const { type = 'default', duration = 2 } = options; 23 | 24 | this.setData({ 25 | ...options, 26 | type, 27 | duration, 28 | visible: true 29 | }); 30 | 31 | const d = this.data.duration * 1000; 32 | 33 | if (timmer) clearTimeout(timmer); 34 | if (d !== 0) { 35 | timmer = setTimeout(() => { 36 | this.handleHide(); 37 | timmer = null; 38 | }, d); 39 | } 40 | }, 41 | 42 | handleHide () { 43 | this.setData({ 44 | ...default_data 45 | }); 46 | } 47 | } 48 | }); 49 | -------------------------------------------------------------------------------- /frontend/dist/toast/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": 4 | { 5 | "i-icon": "../icon/index" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /frontend/dist/toast/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | {{ content }} 16 | -------------------------------------------------------------------------------- /frontend/dist/toast/index.wxss: -------------------------------------------------------------------------------- 1 | .i-toast{position:fixed;top:35%;left:50%;transform:translate3d(-50%,-50%,0);background:rgba(0,0,0,.7);color:#fff;font-size:14px;line-height:1.5em;margin:0 auto;box-sizing:border-box;padding:10px 18px;text-align:center;border-radius:4px;z-index:1010}.i-toast-mask{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1010}.i-toast-icon{font-size:38px!important;margin-bottom:6px}.i-toast-image{max-width:100px;max-height:100px}.i-toast-loading{display:inline-block;vertical-align:middle;width:28px;height:28px;background:0 0;border-radius:50%;border:2px solid #fff;border-color:#fff #fff #fff #2d8cf0;animation:btn-spin .8s linear;animation-iteration-count:infinite}@keyframes btn-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}} -------------------------------------------------------------------------------- /frontend/image/001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/001.jpg -------------------------------------------------------------------------------- /frontend/image/002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/002.jpg -------------------------------------------------------------------------------- /frontend/image/003.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/003.jpg -------------------------------------------------------------------------------- /frontend/image/004.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/004.jpg -------------------------------------------------------------------------------- /frontend/image/005.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/005.jpg -------------------------------------------------------------------------------- /frontend/image/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/01.jpg -------------------------------------------------------------------------------- /frontend/image/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/1.jpg -------------------------------------------------------------------------------- /frontend/image/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/2.jpg -------------------------------------------------------------------------------- /frontend/image/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/3.jpg -------------------------------------------------------------------------------- /frontend/image/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/4.jpg -------------------------------------------------------------------------------- /frontend/image/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/5.jpg -------------------------------------------------------------------------------- /frontend/image/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/about.png -------------------------------------------------------------------------------- /frontend/image/act-logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/act-logo.jpg -------------------------------------------------------------------------------- /frontend/image/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/back.png -------------------------------------------------------------------------------- /frontend/image/call.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/call.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/child1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/child1.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/child2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/child2.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/di1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/di1.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/di2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/di2.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/di3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/di3.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/di4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/di4.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/ji1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/ji1.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/ji2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/ji2.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/ji3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/ji3.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/ji4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/ji4.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/jing1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/jing1.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/jing2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/jing2.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/jing3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/jing3.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/jing4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/jing4.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/jing5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/jing5.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/jing6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/jing6.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/kindergarten.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/kindergarten.jpg -------------------------------------------------------------------------------- /frontend/image/ceshi/敬老院.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/ceshi/敬老院.jpg -------------------------------------------------------------------------------- /frontend/image/comment0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/comment0.jpg -------------------------------------------------------------------------------- /frontend/image/comment1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/comment1.png -------------------------------------------------------------------------------- /frontend/image/contact.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/contact.png -------------------------------------------------------------------------------- /frontend/image/head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/head.png -------------------------------------------------------------------------------- /frontend/image/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/info.png -------------------------------------------------------------------------------- /frontend/image/it.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/it.jpg -------------------------------------------------------------------------------- /frontend/image/jiantou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/jiantou.png -------------------------------------------------------------------------------- /frontend/image/like1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/like1.png -------------------------------------------------------------------------------- /frontend/image/like2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/like2.png -------------------------------------------------------------------------------- /frontend/image/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/logo.png -------------------------------------------------------------------------------- /frontend/image/myactivity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/myactivity.png -------------------------------------------------------------------------------- /frontend/image/no.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/no.png -------------------------------------------------------------------------------- /frontend/image/points.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/points.png -------------------------------------------------------------------------------- /frontend/image/pwd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/pwd.png -------------------------------------------------------------------------------- /frontend/image/safe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/safe.png -------------------------------------------------------------------------------- /frontend/image/upPho.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/upPho.jpg -------------------------------------------------------------------------------- /frontend/image/yes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/yes.png -------------------------------------------------------------------------------- /frontend/image/广场1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/广场1.png -------------------------------------------------------------------------------- /frontend/image/广场2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/广场2.png -------------------------------------------------------------------------------- /frontend/image/我的1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/我的1.png -------------------------------------------------------------------------------- /frontend/image/我的2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/我的2.png -------------------------------------------------------------------------------- /frontend/image/我的背景.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/我的背景.jpg -------------------------------------------------------------------------------- /frontend/image/首页1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/首页1.png -------------------------------------------------------------------------------- /frontend/image/首页2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/frontend/image/首页2.png -------------------------------------------------------------------------------- /frontend/pages/actInfo/actInfo.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": {} 3 | } -------------------------------------------------------------------------------- /frontend/pages/history/history.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": { 3 | "i-page": "/dist/page/index" 4 | } 5 | } -------------------------------------------------------------------------------- /frontend/pages/historyActInfo/historyActInfo.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": { 3 | "i-tabs": "../../dist/tabs/index", 4 | "i-tab": "../../dist/tab/index", 5 | "i-divider": "../../dist/divider/index" 6 | } 7 | } -------------------------------------------------------------------------------- /frontend/pages/index/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": { 3 | "i-page": "/dist/page/index", 4 | "i-button": "/dist/button/index" 5 | } 6 | } -------------------------------------------------------------------------------- /frontend/pages/index/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 首页 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {{item.title}} 14 | 地点:{{item.location}} 15 | 活动时间:{{item.startTime}} 16 | 报名截止:{{item.endTime}} 17 | 18 | {{item.eventScore}} 19 | 20 | 21 | 22 | 23 | 24 | 25 | 上一页 26 | 下一页 27 | 28 | 29 | -------------------------------------------------------------------------------- /frontend/pages/index/index.wxss: -------------------------------------------------------------------------------- 1 | /* pages/index/index.wxss */ 2 | 3 | .top{ 4 | height: 130rpx; 5 | width: 100%; 6 | background-color: #77BB42; 7 | } 8 | .logout-btn{ 9 | width: 140rpx; 10 | height: 80rpx; 11 | line-height: 80rpx; 12 | float: right; 13 | margin-right: 30rpx; 14 | margin-top: 25rpx; 15 | border-radius: 10rpx; 16 | background-color: rgba(57, 105, 21, 0.918); 17 | color: #fff; 18 | } 19 | .title{ 20 | font-size: 45rpx; 21 | color: #fff; 22 | line-height: 130rpx; 23 | margin-left: 30rpx; 24 | font-family: '黑体'; 25 | } 26 | .act-info{ 27 | width: 100%; 28 | height: 250rpx; 29 | background-color: #fff; 30 | border-bottom: 2rpx solid #888; 31 | } 32 | .head-img{ 33 | width: 200rpx; 34 | height: 200rpx; 35 | border-radius: 8rpx; 36 | float: left; 37 | display: flex; 38 | overflow: hidden; 39 | margin-top: 25rpx; 40 | margin-left: 18rpx; 41 | } 42 | .right{ 43 | float: left; 44 | margin: 0 auto; 45 | margin-left: 18rpx; 46 | margin-top: 15rpx; 47 | } 48 | .name{ 49 | color: #000; 50 | font-size: 36rpx; 51 | display: block; 52 | 53 | } 54 | .txt{ 55 | color: rgb(109, 109, 109); 56 | font-size: 30rpx; 57 | display: block; 58 | margin-top: 2rpx; 59 | } 60 | .points{ 61 | font-size: 20rpx; 62 | border: 4rpx solid #77BB42; 63 | border-radius: 5rpx; 64 | width: 120rpx; 65 | margin-top: 4rpx; 66 | text-align: center; 67 | } 68 | .page { 69 | position: fixed; 70 | bottom: 0; 71 | width: 750rpx; 72 | margin: 0 auto; 73 | } -------------------------------------------------------------------------------- /frontend/pages/login/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": {} 3 | } -------------------------------------------------------------------------------- /frontend/pages/login/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 | 25 | 立即注册 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /frontend/pages/logs/logs.js: -------------------------------------------------------------------------------- 1 | // logs.js 2 | const util = require('../../utils/util.js') 3 | 4 | Page({ 5 | data: { 6 | logs: [] 7 | }, 8 | onLoad() { 9 | this.setData({ 10 | logs: (wx.getStorageSync('logs') || []).map(log => { 11 | return { 12 | date: util.formatTime(new Date(log)), 13 | timeStamp: log 14 | } 15 | }) 16 | }) 17 | } 18 | }) 19 | -------------------------------------------------------------------------------- /frontend/pages/logs/logs.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "查看启动日志", 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /frontend/pages/logs/logs.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{index + 1}}. {{log.date}} 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/pages/logs/logs.wxss: -------------------------------------------------------------------------------- 1 | .log-list { 2 | display: flex; 3 | flex-direction: column; 4 | padding: 40rpx; 5 | } 6 | .log-item { 7 | margin: 10rpx; 8 | } 9 | -------------------------------------------------------------------------------- /frontend/pages/mine/mine.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": { 3 | "i-spin": "../../dist/spin/index", 4 | "i-icon": "../../dist/icon/index" 5 | } 6 | } -------------------------------------------------------------------------------- /frontend/pages/mine_aboutUs/mine_aboutUs.js: -------------------------------------------------------------------------------- 1 | // pages/mine_aboutUs/mine_aboutUs.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 | }) -------------------------------------------------------------------------------- /frontend/pages/mine_aboutUs/mine_aboutUs.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": {} 3 | } -------------------------------------------------------------------------------- /frontend/pages/mine_aboutUs/mine_aboutUs.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 如有问题,请联系18360869989 4 | 5 | -------------------------------------------------------------------------------- /frontend/pages/mine_aboutUs/mine_aboutUs.wxss: -------------------------------------------------------------------------------- 1 | /* pages/mine_aboutUs/mine_aboutUs.wxss */ 2 | .txt{ 3 | text-align:center; 4 | align-items:center; 5 | margin-top: 50%; 6 | } -------------------------------------------------------------------------------- /frontend/pages/mine_baseInfo/mine_baseInfo.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": {} 3 | } -------------------------------------------------------------------------------- /frontend/pages/mine_baseInfo/mine_baseInfo.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 | -------------------------------------------------------------------------------- /frontend/pages/mine_myAct/mine_myAct.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": { 3 | "i-tabs": "../../dist/tabs/index", 4 | "i-tab": "../../dist/tab/index", 5 | "i-divider": "../../dist/divider/index", 6 | "i-icon": "../../dist/icon/index" 7 | } 8 | } -------------------------------------------------------------------------------- /frontend/pages/mine_myAct/mine_myAct.wxss: -------------------------------------------------------------------------------- 1 | /* pages/mine_myAct/mine_myAct.wxss */ 2 | .nav{ 3 | width: 100%; 4 | height: 130rpx; 5 | background-color: #77BB42; 6 | margin: 0 auto; 7 | text-align: left; 8 | } 9 | .title{ 10 | font-size: 40rpx; 11 | color: #fff; 12 | line-height: 130rpx; 13 | margin-left: 30rpx; 14 | font-family: '黑体'; 15 | } 16 | .container { 17 | background-color: #eee; 18 | padding: 18rpx 0; 19 | } 20 | /* .act { 21 | padding: 25rpx; 22 | } */ 23 | .act-item { 24 | padding: 20rpx; 25 | margin-bottom: 12rpx; 26 | background-color: #fff; 27 | width: 100%; 28 | display: flex; 29 | } 30 | .act-image { 31 | width: 120rpx; 32 | height: 120rpx; 33 | margin-left: 25rpx; 34 | border-radius: 6rpx; 35 | margin-right: 20rpx; 36 | float: left; 37 | display: flex; 38 | overflow: hidden; 39 | } 40 | .act-info{ 41 | float: left; 42 | margin: 0 auto; 43 | margin-left: 18rpx; 44 | margin-top: 15rpx; 45 | } 46 | .txt{ 47 | color: rgb(109, 109, 109); 48 | font-size: 30rpx; 49 | display: block; 50 | } 51 | .act-title { 52 | font-size: 34rpx; 53 | color: #000; 54 | } 55 | .comment-btn { 56 | height: 48rpx; 57 | line-height: 48rpx; 58 | float: right; 59 | margin-right: 18rpx; 60 | font-size: 34rpx; 61 | border-radius: 18rpx; 62 | background-color: #ff5a18; 63 | padding: 10rpx 24rpx; 64 | color: #fff; 65 | margin-top: 60rpx; 66 | } 67 | .scan-button { 68 | position: absolute; 69 | right: 20rpx; 70 | margin-top: -60rpx; 71 | } -------------------------------------------------------------------------------- /frontend/pages/mine_myAct_comment/mine_myAct_comment.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": { 3 | "i-radio-group": "../../dist/radio-group/index", 4 | "i-radio": "../../dist/radio/index", 5 | "i-input": "../../dist/input/index", 6 | "i-icon": "../../dist/icon/index" 7 | } 8 | } -------------------------------------------------------------------------------- /frontend/pages/mine_myAct_comment/mine_myAct_comment.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 评价 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {{actInfo.title}} 14 | 15 | {{actInfo.status}} 16 | 积分:{{actInfo.eventScore}} 17 | 18 | 19 | 20 | 21 | 22 | 本次活动满意度 23 | 24 | 25 | 26 |
27 | 28 |
29 |
30 | 发布 31 |
32 |
33 | -------------------------------------------------------------------------------- /frontend/pages/mine_safeCenter/mine_safeCenter.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": {} 3 | } -------------------------------------------------------------------------------- /frontend/pages/mine_safeCenter/mine_safeCenter.wxml: -------------------------------------------------------------------------------- 1 | 2 | 修改密码 3 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /frontend/pages/mine_safeCenter/mine_safeCenter.wxss: -------------------------------------------------------------------------------- 1 | /* pages/mine_safeCenter/mine_safeCenter.wxss */ 2 | page{ 3 | background-color: #e0e0e0; 4 | width: 100%; 5 | height: 100%; 6 | display: flex; 7 | flex-direction: column; 8 | } 9 | .txt-head{ 10 | display: flex; 11 | width: 100%; 12 | height: 90rpx; 13 | line-height: 90rpx; 14 | background-color: #fff; 15 | font-size: 40rpx; 16 | margin-top: 20rpx; 17 | padding-left: 10rpx; 18 | color: #353535; 19 | } 20 | 21 | .btn-reg{ 22 | width: 370rpx; 23 | height: 90rpx; 24 | line-height: 90rpx; 25 | background-color: rgb(252, 130, 16); 26 | margin-top: 60rpx; 27 | align-items: center; 28 | border-radius: 8rpx; 29 | color: #fff; 30 | font-size: 38rpx; 31 | 32 | } 33 | .btn-reg:active{ 34 | background-color: rgba(253, 159, 71, 0.89); 35 | } 36 | .box{ 37 | width: 100%; 38 | margin: 0 auto; 39 | margin-top: 30rpx; 40 | } 41 | .item{ 42 | height: 90rpx; 43 | line-height: 90rpx; 44 | display: flex; 45 | justify-content: space-between; 46 | flex-direction: row; 47 | background-color: #fff; 48 | border-bottom:2rpx solid #ccc; 49 | } 50 | .txt{ 51 | color: #888; 52 | line-height: 90rpx; 53 | height: 90rpx; 54 | margin-left: 30rpx; 55 | } 56 | .inp-view{ 57 | width: 260rpx; 58 | } 59 | 60 | -------------------------------------------------------------------------------- /frontend/pages/register/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": {} 3 | } -------------------------------------------------------------------------------- /frontend/pages/register/register.wxml: -------------------------------------------------------------------------------- 1 | 2 | 注册 3 | 4 | 5 | 6 | 学号应为9位数! 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 请设置6位数密码! 27 | 28 | 29 | 30 | 两次密码须一致! 31 | 32 | 33 | 开启新的旅程 -------------------------------------------------------------------------------- /frontend/pages/register/register.wxss: -------------------------------------------------------------------------------- 1 | /* pages/index.wxss */ 2 | .txt-head{ 3 | display: block; 4 | font-size: 40rpx; 5 | text-align: center; 6 | margin-top: 40rpx; 7 | } 8 | 9 | .btn-reg{ 10 | width: 580rpx; 11 | height: 90rpx; 12 | line-height: 90rpx; 13 | background-color: #77BB42; 14 | margin: 0 auto; 15 | margin-top: 40rpx; 16 | align-items: center; 17 | border-radius: 8rpx; 18 | color: #fff; 19 | font-size: 40rpx; 20 | text-align: center; 21 | } 22 | 23 | .box{ 24 | width: 580rpx; 25 | margin: 0 auto; 26 | margin-top: 40rpx; 27 | } 28 | 29 | .item{ 30 | height: 90rpx; 31 | line-height: 90rpx; 32 | display: flex; 33 | justify-content: space-between; 34 | flex-direction: row; 35 | border-bottom: 3rpx solid #77BB42; 36 | align-items:center; 37 | border-left: solid 3rpx #77BB42; 38 | border-right: solid 3rpx #77BB42; 39 | 40 | } 41 | .snoTip{ 42 | color:#e64340; 43 | font-weight: bold; 44 | } 45 | .inp-view{ 46 | width: 260rpx; 47 | } 48 | 49 | .item-first{ 50 | border-top: solid 3rpx #77BB42; 51 | border-top-left-radius: 10rpx; 52 | border-top-right-radius: 10rpx; 53 | } 54 | .item-last{ 55 | border-bottom-left-radius: 10rpx; 56 | border-bottom-right-radius: 10rpx; 57 | 58 | } -------------------------------------------------------------------------------- /frontend/sitemap.json: -------------------------------------------------------------------------------- 1 | { 2 | "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", 3 | "rules": [{ 4 | "action": "allow", 5 | "page": "*" 6 | }] 7 | } -------------------------------------------------------------------------------- /frontend/utils/api.js: -------------------------------------------------------------------------------- 1 | const BASE_URL = 2 | 'http://127.0.0.1:8888' 3 | // 'http://127.0.0.1:8888' 4 | module.exports = { 5 | BASE_URL 6 | } -------------------------------------------------------------------------------- /frontend/utils/util.js: -------------------------------------------------------------------------------- 1 | const formatTime = date => { 2 | const year = date.getFullYear() 3 | const month = date.getMonth() + 1 4 | const day = date.getDate() 5 | const hour = date.getHours() 6 | const minute = date.getMinutes() 7 | const second = date.getSeconds() 8 | 9 | return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}` 10 | } 11 | 12 | const formatNumber = n => { 13 | n = n.toString() 14 | return n[1] ? n : `0${n}` 15 | } 16 | 17 | module.exports = { 18 | formatTime 19 | } 20 | -------------------------------------------------------------------------------- /vol-web/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | -------------------------------------------------------------------------------- /vol-web/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{js,jsx,ts,tsx,vue}] 2 | indent_style = space 3 | indent_size = 2 4 | trim_trailing_whitespace = true 5 | insert_final_newline = true 6 | -------------------------------------------------------------------------------- /vol-web/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true 5 | }, 6 | 'extends': [ 7 | 'plugin:vue/essential', 8 | '@vue/standard' 9 | ], 10 | rules: { 11 | 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', 12 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 13 | }, 14 | parserOptions: { 15 | parser: 'babel-eslint' 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /vol-web/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw? 22 | -------------------------------------------------------------------------------- /vol-web/README.md: -------------------------------------------------------------------------------- 1 | # collegevol 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Run your tests 19 | ``` 20 | npm run test 21 | ``` 22 | 23 | ### Lints and fixes files 24 | ``` 25 | npm run lint 26 | ``` 27 | 28 | ### Customize configuration 29 | See [Configuration Reference](https://cli.vuejs.org/config/). 30 | -------------------------------------------------------------------------------- /vol-web/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /vol-web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "collegevol", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "axios": "^0.19.0", 12 | "core-js": "^2.6.5", 13 | "iview": "^3.5.0", 14 | "view-design": "^4.0.2", 15 | "vue": "^2.6.10", 16 | "vue-router": "^3.0.3", 17 | "vuex": "^3.0.1" 18 | }, 19 | "devDependencies": { 20 | "@vue/cli-plugin-babel": "^3.11.0", 21 | "@vue/cli-plugin-eslint": "^3.11.0", 22 | "@vue/cli-service": "^3.11.0", 23 | "@vue/eslint-config-standard": "^4.0.0", 24 | "babel-eslint": "^10.0.1", 25 | "eslint": "^5.16.0", 26 | "eslint-plugin-vue": "^5.0.0", 27 | "less": "^3.0.4", 28 | "less-loader": "^5.0.0", 29 | "lint-staged": "^8.1.5", 30 | "vue-template-compiler": "^2.6.10" 31 | }, 32 | "gitHooks": { 33 | "pre-commit": "lint-staged" 34 | }, 35 | "lint-staged": { 36 | "*.{js,vue}": [ 37 | "vue-cli-service lint", 38 | "git add" 39 | ] 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /vol-web/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {} 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /vol-web/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/vol-web/public/favicon.ico -------------------------------------------------------------------------------- /vol-web/public/favicon0.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/vol-web/public/favicon0.ico -------------------------------------------------------------------------------- /vol-web/public/favicon1.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/vol-web/public/favicon1.ico -------------------------------------------------------------------------------- /vol-web/public/favicon2.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/vol-web/public/favicon2.ico -------------------------------------------------------------------------------- /vol-web/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 校园志愿 9 | 10 | 11 | 12 | 15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /vol-web/src/assets/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/vol-web/src/assets/3.jpg -------------------------------------------------------------------------------- /vol-web/src/assets/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/vol-web/src/assets/404.png -------------------------------------------------------------------------------- /vol-web/src/assets/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/vol-web/src/assets/5.jpg -------------------------------------------------------------------------------- /vol-web/src/assets/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/vol-web/src/assets/bg.jpg -------------------------------------------------------------------------------- /vol-web/src/assets/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/vol-web/src/assets/bg1.jpg -------------------------------------------------------------------------------- /vol-web/src/assets/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/vol-web/src/assets/logo2.png -------------------------------------------------------------------------------- /vol-web/src/common/api.js: -------------------------------------------------------------------------------- 1 | import { ApiError, HttpClass } from '../common' 2 | 3 | export class Api extends HttpClass { 4 | constructor (timeout = 100000) { 5 | super(timeout) 6 | } 7 | 8 | call (api, params) { 9 | const url = api 10 | const par = this._params(params) 11 | return this.post(url, par).then(response => { 12 | if (!response || !response.data) { 13 | return Promise.reject(new ApiError('network error response', -1)) 14 | } 15 | const data = response.data 16 | if (!data || typeof data !== 'object') { 17 | return Promise.reject(new ApiError('network error format', -1)) 18 | } 19 | if (data) { 20 | // if (data.statusCode && data.statusCode === 200) { 21 | return Promise.resolve(data) 22 | } 23 | return Promise.reject(new ApiError(data.msg, data.statusCode)) 24 | }) 25 | } 26 | 27 | _params (params) { 28 | if (!params || typeof params !== 'object') { 29 | params = {} 30 | } 31 | return params 32 | } 33 | } 34 | const api = new Api(100000) 35 | export default api 36 | -------------------------------------------------------------------------------- /vol-web/src/common/error.js: -------------------------------------------------------------------------------- 1 | export class ApiError extends Error { 2 | constructor (message, code) { 3 | super(message) 4 | this.msg = message 5 | this.code = code 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /vol-web/src/common/index.js: -------------------------------------------------------------------------------- 1 | // export { default as Message } from './Message' 2 | export { Http as HttpClass } from './httpClass' 3 | export { default as Http } from './httpClass' 4 | export { ApiError } from './error' 5 | export { Api as ApiClass } from './api' 6 | export { default as Api } from './api' 7 | // export { default as Utils } from './util' 8 | // export { default as Store } from './store' 9 | // export { default as Global } from './global' 10 | // export { default as Storage } from './storage' 11 | -------------------------------------------------------------------------------- /vol-web/src/common/storage.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/vol-web/src/common/storage.js -------------------------------------------------------------------------------- /vol-web/src/common/util.js: -------------------------------------------------------------------------------- 1 | function getCookie (name) { 2 | var arr = document.cookie.match(new RegExp('(^| )' + name + '=([^;]*)(;|$)')) 3 | if (arr != null) return unescape(arr[2]) 4 | return null 5 | } 6 | export default { 7 | getCookie 8 | } 9 | -------------------------------------------------------------------------------- /vol-web/src/components/MyCard.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | -------------------------------------------------------------------------------- /vol-web/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | import store from './store' 5 | import iView from 'view-design' 6 | import axios from 'axios' 7 | 8 | import 'view-design/dist/styles/iview.css' 9 | import './my-theme/index.less' 10 | 11 | Vue.use(iView) 12 | // Vue.use(axios) 13 | 14 | Vue.config.productionTip = false 15 | 16 | new Vue({ 17 | router, 18 | store, 19 | axios, 20 | render: h => h(App) 21 | }).$mount('#app') 22 | -------------------------------------------------------------------------------- /vol-web/src/my-theme/index.less: -------------------------------------------------------------------------------- 1 | @import '~iview/src/styles/index.less'; 2 | 3 | // Here are the variables to cover, such as: 4 | @primary-color: #58B957; -------------------------------------------------------------------------------- /vol-web/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import routes from './routes' 4 | import Utils from '@/common/util.js' 5 | Vue.use(Router) 6 | 7 | const router = new Router({ 8 | mode: 'hash', 9 | routes 10 | }) 11 | 12 | console.log(Utils.getCookie('sessionId')) 13 | // 注册全局前置守卫 14 | router.beforeEach((to, from, next) => { 15 | // 通过检查是否有cookie获取登录状态,保存在一个常量里 16 | const HAS_LOGINED = Boolean(Utils.getCookie('sessionId')) 17 | if (to.name !== 'Login') { 18 | if (HAS_LOGINED) next()// 如果已经登录,直接跳转 19 | else next({ name: 'Login' })// 如果没有登录,跳转到login页面 20 | } else { 21 | if (HAS_LOGINED) next({ name: 'index' }) 22 | else next() // 进入该路由 23 | } 24 | }) 25 | 26 | export default router 27 | -------------------------------------------------------------------------------- /vol-web/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | import login from './modules/login' 5 | 6 | Vue.use(Vuex) 7 | 8 | export default new Vuex.Store({ 9 | modules: { 10 | login 11 | } 12 | }) 13 | -------------------------------------------------------------------------------- /vol-web/src/store/modules/login.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/vol-web/src/store/modules/login.js -------------------------------------------------------------------------------- /vol-web/src/style/index.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/vol-web/src/style/index.less -------------------------------------------------------------------------------- /vol-web/src/views/404.vue: -------------------------------------------------------------------------------- 1 | 13 | 28 | 29 | 58 | -------------------------------------------------------------------------------- /vol-web/vue.config.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = { 3 | css: { 4 | loaderOptions: { // 向 CSS 相关的 loader 传递选项 5 | less: { 6 | javascriptEnabled: true 7 | } 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /志愿者小程序开发文档.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/志愿者小程序开发文档.docx -------------------------------------------------------------------------------- /志愿者数据库设计v1.0.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimpleGraduationProjects/CampusVolunteerActivityManagementSystem/0c12f4f87ff5a727df3b76777b8b1da4e12fd3ac/志愿者数据库设计v1.0.doc --------------------------------------------------------------------------------