├── EasyCode模板.docx ├── 客户信息展示的示例(课程).pdf ├── 前端代码 ├── static │ ├── data │ │ └── product.js │ ├── img │ │ ├── shop.ico │ │ ├── analysis.jpg │ │ ├── selectImg.png │ │ ├── shopico.ico │ │ ├── touxiang.jpg │ │ ├── wangyan.jpg │ │ ├── shopping_cart_76.8px_1204324_easyicon.net.png │ │ └── shopping_cart_86.4px_1204324_easyicon.net.png │ ├── eui │ │ └── fonts │ │ │ ├── element-icons.ttf │ │ │ └── element-icons.woff │ ├── comm │ │ └── Ajax.js │ ├── css │ │ └── index.css │ └── vue │ │ └── vue-resource.js └── views │ ├── temp.html │ └── test │ └── index.html ├── customerProject ├── src │ └── main │ │ ├── java │ │ ├── ._.DS_Store │ │ └── com │ │ │ ├── ._.DS_Store │ │ │ └── customer │ │ │ ├── ._.DS_Store │ │ │ ├── service │ │ │ ├── CustomerTableService.java │ │ │ └── impl │ │ │ │ └── CustomerTableServiceImpl.java │ │ │ ├── dao │ │ │ └── CustomerTableDao.java │ │ │ ├── CustomerApp.java │ │ │ ├── cfg │ │ │ ├── MybatisPlusConfig.java │ │ │ └── AccessControlAllowOriginFilter.java │ │ │ ├── controller │ │ │ ├── CustomerTableExtendController.java │ │ │ └── CustomerTableController.java │ │ │ └── entity │ │ │ └── CustomerTable.java │ │ └── resources │ │ └── application.yml ├── pom.xml └── customerProject.iml ├── .idea ├── vcs.xml ├── encodings.xml ├── modules.xml ├── libraries │ ├── Maven__junit_junit_4_12.xml │ ├── Maven__org_ow2_asm_asm_5_0_4.xml │ ├── Maven__org_yaml_snakeyaml_1_23.xml │ ├── Maven__org_mybatis_mybatis_3_5_0.xml │ ├── Maven__com_zaxxer_HikariCP_3_2_0.xml │ ├── Maven__net_minidev_json_smart_2_3.xml │ ├── Maven__org_objenesis_objenesis_2_6.xml │ ├── Maven__org_slf4j_slf4j_api_1_7_28.xml │ ├── Maven__com_fasterxml_classmate_1_4_0.xml │ ├── Maven__org_hamcrest_hamcrest_core_1_3.xml │ ├── Maven__net_bytebuddy_byte_buddy_1_9_16.xml │ ├── Maven__org_projectlombok_lombok_1_18_10.xml │ ├── Maven__org_slf4j_jul_to_slf4j_1_7_28.xml │ ├── Maven__org_xmlunit_xmlunit_core_2_6_3.xml │ ├── Maven__com_baomidou_mybatis_plus_3_1_0.xml │ ├── Maven__org_skyscreamer_jsonassert_1_5_0.xml │ ├── Maven__net_minidev_accessors_smart_1_2.xml │ ├── Maven__org_assertj_assertj_core_3_11_1.xml │ ├── Maven__org_mockito_mockito_core_2_23_4.xml │ ├── Maven__ch_qos_logback_logback_core_1_2_3.xml │ ├── Maven__com_jayway_jsonpath_json_path_2_4_0.xml │ ├── Maven__org_mybatis_mybatis_spring_2_0_0.xml │ ├── Maven__com_github_jsqlparser_jsqlparser_1_4.xml │ ├── Maven__org_hamcrest_hamcrest_library_1_3.xml │ ├── Maven__ch_qos_logback_logback_classic_1_2_3.xml │ ├── Maven__mysql_mysql_connector_java_8_0_17.xml │ ├── Maven__com_baomidou_mybatis_plus_core_3_1_0.xml │ ├── Maven__net_bytebuddy_byte_buddy_agent_1_9_16.xml │ ├── Maven__org_apache_logging_log4j_log4j_api_2_11_2.xml │ ├── Maven__com_fasterxml_jackson_core_jackson_core_2_9_9.xml │ ├── Maven__com_baomidou_mybatis_plus_extension_3_1_0.xml │ ├── Maven__org_jboss_logging_jboss_logging_3_3_3_Final.xml │ ├── Maven__javax_annotation_javax_annotation_api_1_3_2.xml │ ├── Maven__javax_validation_validation_api_2_0_1_Final.xml │ ├── Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_2.xml │ ├── Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_26.xml │ ├── Maven__org_springframework_spring_tx_5_1_10_RELEASE.xml │ ├── Maven__com_baomidou_mybatis_plus_annotation_3_1_0.xml │ ├── Maven__org_springframework_spring_aop_5_1_10_RELEASE.xml │ ├── Maven__org_springframework_spring_jcl_5_1_10_RELEASE.xml │ ├── Maven__org_springframework_spring_web_5_1_10_RELEASE.xml │ ├── Maven__org_springframework_spring_core_5_1_10_RELEASE.xml │ ├── Maven__org_springframework_spring_jdbc_5_1_10_RELEASE.xml │ ├── Maven__org_springframework_spring_test_5_1_10_RELEASE.xml │ ├── Maven__com_baomidou_mybatis_plus_boot_starter_3_1_0.xml │ ├── Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_26.xml │ ├── Maven__org_springframework_spring_beans_5_1_10_RELEASE.xml │ ├── Maven__org_springframework_boot_spring_boot_2_1_9_RELEASE.xml │ ├── Maven__org_springframework_spring_webmvc_5_1_10_RELEASE.xml │ ├── Maven__com_fasterxml_jackson_core_jackson_databind_2_9_9_3.xml │ ├── Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml │ ├── Maven__org_springframework_spring_context_5_1_10_RELEASE.xml │ ├── Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_26.xml │ ├── Maven__org_springframework_spring_expression_5_1_10_RELEASE.xml │ ├── Maven__org_springframework_boot_spring_boot_test_2_1_9_RELEASE.xml │ ├── Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_9.xml │ ├── Maven__org_hibernate_validator_hibernate_validator_6_0_17_Final.xml │ ├── Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_9.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_2_1_9_RELEASE.xml │ ├── Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_web_2_1_9_RELEASE.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_jdbc_2_1_9_RELEASE.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_json_2_1_9_RELEASE.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_test_2_1_9_RELEASE.xml │ ├── Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_9.xml │ ├── Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_9_RELEASE.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_9_RELEASE.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_logging_2_1_9_RELEASE.xml │ └── Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_9_RELEASE.xml ├── compiler.xml └── misc.xml ├── study.iml ├── customer_db.sql └── README.md /EasyCode模板.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/EasyCode模板.docx -------------------------------------------------------------------------------- /客户信息展示的示例(课程).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/客户信息展示的示例(课程).pdf -------------------------------------------------------------------------------- /前端代码/static/data/product.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 定义商品类 3 | * @type {{}} 4 | */ 5 | var Product = { 6 | 7 | } -------------------------------------------------------------------------------- /前端代码/static/img/shop.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/前端代码/static/img/shop.ico -------------------------------------------------------------------------------- /前端代码/static/img/analysis.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/前端代码/static/img/analysis.jpg -------------------------------------------------------------------------------- /前端代码/static/img/selectImg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/前端代码/static/img/selectImg.png -------------------------------------------------------------------------------- /前端代码/static/img/shopico.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/前端代码/static/img/shopico.ico -------------------------------------------------------------------------------- /前端代码/static/img/touxiang.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/前端代码/static/img/touxiang.jpg -------------------------------------------------------------------------------- /前端代码/static/img/wangyan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/前端代码/static/img/wangyan.jpg -------------------------------------------------------------------------------- /前端代码/static/eui/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/前端代码/static/eui/fonts/element-icons.ttf -------------------------------------------------------------------------------- /customerProject/src/main/java/._.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/customerProject/src/main/java/._.DS_Store -------------------------------------------------------------------------------- /前端代码/static/eui/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/前端代码/static/eui/fonts/element-icons.woff -------------------------------------------------------------------------------- /customerProject/src/main/java/com/._.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/customerProject/src/main/java/com/._.DS_Store -------------------------------------------------------------------------------- /customerProject/src/main/java/com/customer/._.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/customerProject/src/main/java/com/customer/._.DS_Store -------------------------------------------------------------------------------- /前端代码/static/img/shopping_cart_76.8px_1204324_easyicon.net.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/前端代码/static/img/shopping_cart_76.8px_1204324_easyicon.net.png -------------------------------------------------------------------------------- /前端代码/static/img/shopping_cart_86.4px_1204324_easyicon.net.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ming201005/study-demo-01/HEAD/前端代码/static/img/shopping_cart_86.4px_1204324_easyicon.net.png -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /study.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /customerProject/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8099 3 | spring: 4 | datasource: 5 | #driver-class-name: com.mysql.cj.jdbc.Driver 6 | url: jdbc:mysql://localhost:3309/customer_db 7 | username: root 8 | password: 888888 9 | mybatis-plus: 10 | #信息输出设置 11 | configuration: 12 | log-impl: org.apache.ibatis.logging.stdout.StdOutImpl -------------------------------------------------------------------------------- /customerProject/src/main/java/com/customer/service/CustomerTableService.java: -------------------------------------------------------------------------------- 1 | package com.customer.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.customer.entity.CustomerTable; 5 | 6 | /** 7 | * (CustomerTable)表服务接口 8 | * 9 | * @author makejava 10 | * @since 2019-11-05 19:38:03 11 | */ 12 | public interface CustomerTableService extends IService { 13 | 14 | } -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /customerProject/src/main/java/com/customer/dao/CustomerTableDao.java: -------------------------------------------------------------------------------- 1 | package com.customer.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.customer.entity.CustomerTable; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * (CustomerTable)表数据库访问层 9 | * 10 | * @author makejava 11 | * @since 2019-11-05 19:38:03 12 | */ 13 | 14 | public interface CustomerTableDao extends BaseMapper { 15 | 16 | } -------------------------------------------------------------------------------- /customerProject/src/main/java/com/customer/CustomerApp.java: -------------------------------------------------------------------------------- 1 | package com.customer; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | @SpringBootApplication 8 | @MapperScan("com.customer.dao") 9 | public class CustomerApp { 10 | 11 | public static void main(String[] agrs) { 12 | 13 | SpringApplication.run (CustomerApp.class,agrs); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__junit_junit_4_12.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_yaml_snakeyaml_1_23.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_mybatis_mybatis_3_5_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /前端代码/views/temp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_zaxxer_HikariCP_3_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__net_minidev_json_smart_2_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_28.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_classmate_1_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_16.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_projectlombok_lombok_1_18_10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_28.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_baomidou_mybatis_plus_3_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_assertj_assertj_core_3_11_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_mockito_mockito_core_2_23_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_mybatis_mybatis_spring_2_0_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_github_jsqlparser_jsqlparser_1_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__mysql_mysql_connector_java_8_0_17.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_baomidou_mybatis_plus_core_3_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_16.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_11_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /customerProject/src/main/java/com/customer/service/impl/CustomerTableServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.customer.service.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.customer.dao.CustomerTableDao; 5 | import com.customer.entity.CustomerTable; 6 | import com.customer.service.CustomerTableService; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * (CustomerTable)表服务实现类 11 | * 12 | * @author makejava 13 | * @since 2019-11-05 19:38:03 14 | */ 15 | @Service("customerTableService") 16 | public class CustomerTableServiceImpl extends ServiceImpl implements CustomerTableService { 17 | 18 | } -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_baomidou_mybatis_plus_extension_3_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_3_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_26.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_tx_5_1_10_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_baomidou_mybatis_plus_annotation_3_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_aop_5_1_10_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_jcl_5_1_10_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_web_5_1_10_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_core_5_1_10_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_jdbc_5_1_10_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_test_5_1_10_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_baomidou_mybatis_plus_boot_starter_3_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_26.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_beans_5_1_10_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_2_1_9_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_webmvc_5_1_10_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_9_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_context_5_1_10_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_26.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_expression_5_1_10_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_1_9_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_17_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_1_9_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_1_9_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_1_9_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_1_9_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_1_9_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_9_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_9_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_1_9_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_9_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 | 21 | -------------------------------------------------------------------------------- /customerProject/src/main/java/com/customer/cfg/MybatisPlusConfig.java: -------------------------------------------------------------------------------- 1 | package com.customer.cfg; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.transaction.annotation.EnableTransactionManagement; 7 | 8 | //Spring boot方式 9 | @EnableTransactionManagement 10 | @Configuration 11 | public class MybatisPlusConfig { 12 | @Bean 13 | public PaginationInterceptor paginationInterceptor() { 14 | PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); 15 | // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false 16 | // paginationInterceptor.setOverflow(false); 17 | // 设置最大单页限制数量,默认 500 条,-1 不受限制 18 | // paginationInterceptor.setLimit(500); 19 | return paginationInterceptor; 20 | } 21 | } -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | Android 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /customerProject/src/main/java/com/customer/controller/CustomerTableExtendController.java: -------------------------------------------------------------------------------- 1 | package com.customer.controller; 2 | 3 | import com.customer.entity.CustomerTable; 4 | import com.customer.service.CustomerTableService; 5 | 6 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 7 | import com.baomidou.mybatisplus.core.metadata.IPage; 8 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 9 | import com.baomidou.mybatisplus.extension.api.R; 10 | 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.web.bind.annotation.*; 13 | 14 | import java.io.Serializable; 15 | import java.util.List; 16 | 17 | /** 18 | * (CustomerTable)控制层扩展类,一般初次生成,后续不再覆盖。这个类提供编写自己定义的方法。 19 | * 20 | * @author makejava 21 | * @since 2019-11-05 19:38:03 22 | */ 23 | @RestController 24 | @RequestMapping("customerTable") 25 | public class CustomerTableExtendController extends CustomerTableController { 26 | 27 | 28 | } -------------------------------------------------------------------------------- /customerProject/src/main/java/com/customer/cfg/AccessControlAllowOriginFilter.java: -------------------------------------------------------------------------------- 1 | package com.customer.cfg; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | 5 | import javax.servlet.*; 6 | import javax.servlet.http.HttpServletResponse; 7 | import java.io.IOException; 8 | 9 | /** 10 | * 解决跨域问题 11 | */ 12 | @Configuration 13 | public class AccessControlAllowOriginFilter implements Filter { 14 | @Override 15 | public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 16 | throws IOException, ServletException { 17 | HttpServletResponse response = (HttpServletResponse) res; 18 | response.setHeader("Access-Control-Allow-Origin", "*"); 19 | response.setHeader("Access-Control-Allow-Methods", 20 | "POST, GET, OPTIONS, DELETE"); 21 | response.setHeader("Access-Control-Allow-Credentials", "true"); 22 | chain.doFilter(req, response); 23 | } 24 | public void init(FilterConfig filterConfig) { 25 | System.out.println ("初始化配置......"); 26 | } 27 | public void destroy() { 28 | System.out.println ("销毁......"); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /customer_db.sql: -------------------------------------------------------------------------------- 1 | /* 2 | Navicat Premium Data Transfer 3 | 4 | Source Server : localhost-MAMP 5 | Source Server Type : MySQL 6 | Source Server Version : 50725 7 | Source Host : localhost 8 | Source Database : customer_db 9 | 10 | Target Server Type : MySQL 11 | Target Server Version : 50725 12 | File Encoding : utf-8 13 | 14 | Date: 11/06/2019 15:48:23 PM 15 | */ 16 | 17 | SET NAMES utf8; 18 | SET FOREIGN_KEY_CHECKS = 0; 19 | 20 | -- ---------------------------- 21 | -- Table structure for `customer_table` 22 | -- ---------------------------- 23 | DROP TABLE IF EXISTS `customer_table`; 24 | CREATE TABLE `customer_table` ( 25 | `id` int(8) NOT NULL AUTO_INCREMENT, 26 | `name` varchar(20) NOT NULL, 27 | `sex` varchar(5) DEFAULT NULL, 28 | `tell` varchar(15) DEFAULT NULL, 29 | `addr` varchar(50) DEFAULT NULL, 30 | PRIMARY KEY (`id`) 31 | ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; 32 | 33 | -- ---------------------------- 34 | -- Records of `customer_table` 35 | -- ---------------------------- 36 | BEGIN; 37 | INSERT INTO `customer_table` VALUES ('1', '刘德华', '男', '1883446', '香港'), ('2', '张学友', '男', '151790987', '香港'), ('3', '容祖儿', '女', '138565565', '深圳'), ('4', '范玮琪', '女', '1688654467', '台湾'), ('5', 'uuu', '男', 'uu', 'u'), ('6', 'iii', '男', 'uui', 'uii'); 38 | COMMIT; 39 | 40 | SET FOREIGN_KEY_CHECKS = 1; 41 | -------------------------------------------------------------------------------- /前端代码/static/comm/Ajax.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 简单封装了ajax对象 3 | */ 4 | class Ajax { 5 | 6 | vueObj = null; 7 | 8 | baseUrl = "http://localhost:8099/"; 9 | 10 | /** 11 | * 构造方法 12 | * @param {*} vueObj 13 | */ 14 | constructor(vueObj) { 15 | 16 | this.vueObj = vueObj; 17 | } 18 | 19 | /** 20 | * get方法 21 | * @param {*} api 22 | * @param {*} callback 23 | * @param {*} params 24 | */ 25 | get(api,callback,params){ 26 | let url = this.baseUrl + api ; 27 | let data = JSON.stringify(params); 28 | this.vueObj.$http.get(url, data,{emulateJSON:true}) 29 | .then( res => { 30 | callback(JSON.parse(res.body)); 31 | }); 32 | } 33 | 34 | /** 35 | * post方法 36 | * @param {*} api 37 | * @param {*} callback 38 | * @param {*} params 39 | */ 40 | post(api,callback,params){ 41 | let url = this.baseUrl + api ; 42 | let data = JSON.stringify(params); 43 | this.vueObj.$http.post(url, data,{emulateJSON:true}) 44 | .then( res => { 45 | callback(JSON.parse(res.body)); 46 | }); 47 | } 48 | 49 | /** 50 | * put方法 51 | * @param {*} api 52 | * @param {*} callback 53 | * @param {*} params 54 | */ 55 | put(api,callback,params){ 56 | let url = this.baseUrl + api ; 57 | let data = JSON.stringify(params); 58 | this.vueObj.$http.put(url, data,{emulateJSON:true}) 59 | .then( res => { 60 | callback(JSON.parse(res.body)); 61 | }); 62 | } 63 | 64 | /** 65 | * delete方法 66 | * @param {*} api 67 | * @param {*} callback 68 | * @param {*} params 69 | */ 70 | delete(api,callback,params){ 71 | let url = this.baseUrl + api ; 72 | let data = JSON.stringify(params); 73 | this.vueObj.$http.delete(url, data ,{emulateJSON:true}) 74 | .then( res => { 75 | callback(JSON.parse(res.body)); 76 | }); 77 | } 78 | } -------------------------------------------------------------------------------- /customerProject/src/main/java/com/customer/entity/CustomerTable.java: -------------------------------------------------------------------------------- 1 | package com.customer.entity; 2 | import com.baomidou.mybatisplus.extension.activerecord.Model; 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.NoArgsConstructor; 8 | 9 | /** 10 | * (CustomerTable)表实体类 11 | * 12 | * @author makejava 13 | * @since 2019-11-05 19:38:03 14 | */ 15 | @Data 16 | @NoArgsConstructor 17 | @SuppressWarnings("serial") 18 | public class CustomerTable extends Model { 19 | 20 | @TableId(type = IdType.AUTO) 21 | private Integer id; 22 | private String name; 23 | private String sex; 24 | private String tell; 25 | private String addr; 26 | 27 | 28 | //-------------------------------------- 29 | //如果安装了lambook插件,以下代码可以删掉 30 | public CustomerTable() { 31 | } 32 | 33 | public CustomerTable(Integer id, String name, String sex, String tell, String addr) { 34 | this.id = id; 35 | this.name = name; 36 | this.sex = sex; 37 | this.tell = tell; 38 | this.addr = addr; 39 | } 40 | 41 | public Integer getId() { 42 | return id; 43 | } 44 | 45 | public void setId(Integer id) { 46 | this.id = id; 47 | } 48 | 49 | public String getName() { 50 | return name; 51 | } 52 | 53 | public void setName(String name) { 54 | this.name = name; 55 | } 56 | 57 | public String getSex() { 58 | return sex; 59 | } 60 | 61 | public void setSex(String sex) { 62 | this.sex = sex; 63 | } 64 | 65 | public String getTell() { 66 | return tell; 67 | } 68 | 69 | public void setTell(String tell) { 70 | this.tell = tell; 71 | } 72 | 73 | public String getAddr() { 74 | return addr; 75 | } 76 | 77 | public void setAddr(String addr) { 78 | this.addr = addr; 79 | } 80 | 81 | @Override 82 | public String toString() { 83 | return "CustomerTable{" + 84 | "id=" + id + 85 | ", name='" + name + '\'' + 86 | ", sex='" + sex + '\'' + 87 | ", tell='" + tell + '\'' + 88 | ", addr='" + addr + '\'' + 89 | '}'; 90 | } 91 | } -------------------------------------------------------------------------------- /customerProject/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | 8 | org.springframework.boot 9 | spring-boot-starter-parent 10 | 2.1.9.RELEASE 11 | 12 | 13 | 14 | com.customer 15 | customerProject 16 | 1.0-SNAPSHOT 17 | 18 | 19 | 20 | 21 | org.springframework.boot 22 | spring-boot-starter 23 | 24 | 25 | 26 | 27 | org.springframework.boot 28 | spring-boot-starter-web 29 | 30 | 31 | 32 | 33 | org.springframework.boot 34 | spring-boot-starter-test 35 | test 36 | 37 | 38 | 39 | 40 | org.projectlombok 41 | lombok 42 | true 43 | 44 | 45 | 46 | 47 | com.baomidou 48 | mybatis-plus-boot-starter 49 | 3.1.0 50 | 51 | 52 | 53 | 54 | mysql 55 | mysql-connector-java 56 | runtime 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | org.springframework.boot 65 | spring-boot-maven-plugin 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /customerProject/src/main/java/com/customer/controller/CustomerTableController.java: -------------------------------------------------------------------------------- 1 | package com.customer.controller; 2 | 3 | import com.customer.entity.CustomerTable; 4 | import com.customer.service.CustomerTableService; 5 | 6 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 7 | import com.baomidou.mybatisplus.core.metadata.IPage; 8 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 9 | import com.baomidou.mybatisplus.extension.api.R; 10 | 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.web.bind.annotation.*; 13 | 14 | import java.io.Serializable; 15 | import java.util.List; 16 | 17 | /** 18 | * (CustomerTable)控制层,建议不要修改,如果有新增的方法,在子类中写 19 | * 20 | * @author makejava 21 | * @since 2019-11-05 19:38:03 22 | */ 23 | public class CustomerTableController { 24 | 25 | @Autowired 26 | CustomerTableService customerTableService; 27 | 28 | /** 29 | * 分页查询所有数据 30 | * 31 | * @param page 分页对象 32 | * @param customerTable 查询实体 33 | * @return 所有数据 34 | */ 35 | @GetMapping 36 | @CrossOrigin 37 | public R> selectAll(Page page, CustomerTable customerTable) { 38 | return R.ok (this.customerTableService.page(page, new QueryWrapper<>(customerTable))); 39 | } 40 | 41 | /** 42 | * 通过主键查询单条数据 43 | * 44 | * @param id 主键 45 | * @return 单条数据 46 | */ 47 | @GetMapping("{id}") 48 | @CrossOrigin 49 | public R selectOne(@PathVariable Serializable id) { 50 | return R.ok(this.customerTableService.getById(id)); 51 | } 52 | 53 | /** 54 | * 新增数据 55 | * 56 | * @param customerTable 实体对象 57 | * @return 新增结果 58 | */ 59 | @PostMapping 60 | @CrossOrigin 61 | public R insert(@RequestBody CustomerTable customerTable) { 62 | boolean rs = this.customerTableService.save(customerTable); 63 | 64 | return R.ok(rs?customerTable.getId():0); 65 | } 66 | 67 | /** 68 | * 修改数据 69 | * 70 | * @param customerTable 实体对象 71 | * @return 修改结果 72 | */ 73 | @PutMapping 74 | @CrossOrigin 75 | public R update(@RequestBody CustomerTable customerTable) { 76 | boolean rs = this.customerTableService.updateById(customerTable); 77 | return R.ok(customerTable.getId()); 78 | } 79 | 80 | /** 81 | * 删除数据 82 | * 83 | * @param idList 主键结合 84 | * @return 删除结果 85 | */ 86 | @DeleteMapping 87 | @CrossOrigin 88 | public R delete(@RequestParam("idList") List idList) { 89 | return R.ok(this.customerTableService.removeByIds(idList)); 90 | } 91 | } -------------------------------------------------------------------------------- /前端代码/static/css/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Microsoft YaHei, Helvitica, Verdana, Arial, san-serif; 3 | font-size: 12px; 4 | 5 | } 6 | /*刷新*/ 7 | .el-refresh{ 8 | position:absolute; 9 | width:30px; 10 | height:30px; 11 | right:5px; 12 | top:20px; 13 | z-index:100; 14 | } 15 | .el-icon-refresh{ 16 | width: 32px; 17 | height: 32px; 18 | cursor: pointer; 19 | } 20 | /*搜索*/ 21 | .seachClass{ 22 | display: flex; 23 | flex-wrap: wrap; 24 | padding-top: 25px; 25 | } 26 | 27 | /*==================表单页面的样式=================*/ 28 | .el-steps { 29 | margin: 20px; 30 | } 31 | 32 | .el-form { 33 | /*margin-right: 10px;*/ 34 | background-color: #fbfbfb; 35 | border-radius: 4px; 36 | padding: 8px; 37 | /*padding-right: 20px;*/ 38 | /*box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04)*/ 39 | } 40 | 41 | .buttonSpan { 42 | z-index: 100; 43 | line-height: 25px; 44 | position: fixed; 45 | left: 30%; 46 | bottom: 0px; 47 | } 48 | 49 | .el-backtop { 50 | position: fixed; 51 | background-color: #fff; 52 | width: 40px; 53 | height: 40px; 54 | border-radius: 50%; 55 | color: #409eff; 56 | display: flex; 57 | align-items: center; 58 | justify-content: center; 59 | font-size: 20px; 60 | box-shadow: 0 0 6px rgba(0, 0, 0, .12); 61 | cursor: pointer; 62 | z-index: 5; 63 | } 64 | 65 | /*================上传图片相关=====================*/ 66 | 67 | /*图片box*/ 68 | .imgBox { 69 | display: flex; 70 | flex-wrap: wrap; 71 | padding-bottom: 60px; 72 | } 73 | /*图片*/ 74 | .imgItem { 75 | width: 145px; 76 | height: 145px; 77 | display: flex; 78 | flex-direction: column; 79 | justify-content: center; 80 | text-align: center; 81 | cursor: pointer; 82 | border-style: solid; 83 | border-color: #c6e2ff; 84 | border-width: 1px; 85 | border-radius: 6px; 86 | margin: 15px 15px 0px 15px; 87 | padding: 2px; 88 | } 89 | /*图片显示(背景)*/ 90 | .imageShow{ 91 | height:145px; 92 | position: relative; 93 | background-repeat: no-repeat; 94 | background-size: cover; 95 | background-position: center center; 96 | border-radius: 6px; 97 | } 98 | 99 | .showHide { 100 | position: relative; 101 | left: 50px; 102 | color: #000000; 103 | } 104 | 105 | /*图片名称效果*/ 106 | .nameSpan{ 107 | width: 100%; 108 | height: 20px; 109 | line-height: 20px; 110 | font-size: 12px; 111 | text-align: center; 112 | background-color: #ffffff; 113 | color: #000000; 114 | margin-top: 106px; 115 | opacity:0.7; 116 | } 117 | /*选中遮住效果*/ 118 | .selectCheck { 119 | position: relative; 120 | width: 100%; 121 | height: 100%; 122 | top: 0; 123 | bottom: 0; 124 | left: 0; 125 | right: 0; 126 | background: rgba(0, 0, 0, 0.45); 127 | text-align: center; 128 | border-radius: 6px; 129 | } -------------------------------------------------------------------------------- /前端代码/views/test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 保存 45 | 取消 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 57 | 58 | 59 | 75 | 76 | 78 | 79 |
80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /customerProject/customerProject.iml: -------------------------------------------------------------------------------- 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 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | SpringBoot+ElementUI—客户信息展示的示例,这个示例使用 前后端分离的开发模式来完成. 2 | 3 | **学习目的:** 4 | 了解前端、后端、相关工具使用,以及完整的项目实例,帮助新手快速入门。 5 | 6 | > ### 开发环境和相关工具: 7 | > 8 | > 前端:Element UI + VUE 9 | > 10 | > 后端:SpringBoot、MybatisPlus、Lombok、EasyCode代码生成器 11 | > 12 | > 后端开发工具:IDEA 13 | > 14 | > API测试工具:PostMan 15 | > 16 | > 前端开发工具:VSCode 17 | 18 | 19 | # 第1节:建立数据库表 20 | 21 | mysql, 22 | 23 | customer_db 24 | 25 | customer_table 26 | 27 | # 第2节:创建一个后端项目 28 | 29 | 工具:IDEA。用快速创建方式创建一个SpringBoot项目 30 | 31 | ## 1)、创建一个SpringBoot项目 32 | 33 | ## 2)、引入所需依赖jar包 34 | 35 | ```xml 36 | 37 | org.springframework.boot 38 | spring-boot-starter-parent 39 | 2.1.9.RELEASE 40 | 41 | 42 | 43 | 44 | 45 | 46 | org.springframework.boot 47 | spring-boot-starter 48 | 49 | 50 | 51 | 52 | org.springframework.boot 53 | spring-boot-starter-web 54 | 55 | 56 | 57 | 58 | org.springframework.boot 59 | spring-boot-starter-test 60 | test 61 | 62 | 63 | 64 | 65 | org.projectlombok 66 | lombok 67 | true 68 | 69 | 70 | 71 | 72 | com.baomidou 73 | mybatis-plus-boot-starter 74 | 3.1.0 75 | 76 | 77 | 78 | 79 | mysql 80 | mysql-connector-java 81 | runtime 82 | 83 | 84 | 85 | 86 | 87 | 88 | org.springframework.boot 89 | spring-boot-maven-plugin 90 | 91 | 92 | 93 | ``` 94 | 95 | 96 | 97 | 如果用maven创建项目,需要手工创建程序启动类: 98 | 99 | ```java 100 | @SpringBootApplication 101 | public static void main(String[] args) { 102 | SpringApplication.run (xx.class, args); 103 | } 104 | ``` 105 | 106 | 如果用maven创建项目,默认是没有测试类的,如果需要创建测试类,需要在测试类头增加注解: 107 | 108 | ```java 109 | @RunWith(SpringRunner.class) 110 | @SpringBootTest 111 | ``` 112 | 113 | ## 3)、配置数据源连接 114 | 115 | 新建application.yml配置文件 116 | 117 | ```yaml 118 | server: 119 | port: 8088 120 | spring: 121 | datasource: 122 | driver-class-name: com.mysql.cj.jdbc.Driver 123 | url: jdbc:mysql://localhost:3309/XXXX 124 | username: root 125 | password: 8888 126 | mybatis-plus: 127 | #信息输出设置 128 | configuration: 129 | log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 130 | ``` 131 | 132 | 133 | 134 | 135 | 136 | # 第3节:编写API接口程序 137 | 138 | 为了高效, 使用EasyCode工具来生成后台java代码,也就是API接口程序。 139 | 140 | 141 | 142 | # 第4节:配置接口映射和分页插件的注册 143 | 144 | 1)、在主程序添加注解 @MapperScan,作用是:一次性扫描Mapper映射接口的包路径; 145 | 146 | 2)、在项目中加入配置类,在类中用@bean注解来注册分页插件; 147 | 148 | ```java 149 | //Spring boot方式 150 | @EnableTransactionManagement 151 | @Configuration 152 | public class MybatisPlusConfig { 153 | @Bean 154 | public PaginationInterceptor paginationInterceptor() { 155 | PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); 156 | // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false 157 | // paginationInterceptor.setOverflow(false); 158 | // 设置最大单页限制数量,默认 500 条,-1 不受限制 159 | // paginationInterceptor.setLimit(500); 160 | return paginationInterceptor; 161 | } 162 | } 163 | ``` 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | # 第5节:启动后台项目,测试API接口程序 172 | 173 | 开启 PostMan工具测试。get、post 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | # 第6节:创建一个前端项目,并新建页面 182 | 183 | 前端用:Element UI+VUE。手工简单创建项目(不使用vue-cli) 184 | 185 | 用vsCode工具编辑 186 | 187 | ## 1)、基础的准备 188 | 189 | ## 2)、模拟列表数据 190 | 191 | # 第7节:绑定后台列表数据 192 | 193 | vue基本方法框架: 194 | 195 | ```html 196 | 217 | ``` 218 | 219 | 220 | 221 | ```javascript 222 | // 用ajax去请求服务端数据 223 | getData() { 224 | let that = this; 225 | let url = "http://localhost:8089/customerTable"; 226 | that.$http.get(url, null, { emulateJSON: true }) 227 | .then(res => { 228 | let rs = JSON.parse(res.body); 229 | if (rs.code == 0) { 230 | that.tableData = rs.data.records; 231 | } 232 | }); 233 | 234 | } 235 | ``` 236 | 237 | ```javascript 238 | 获取远程数据: 239 | 240 | this.$http.get(url, data,{emulateJSON:true}) 241 | .then( res => { 242 | let rs = JSON.parse(res.body); 243 | }); 244 | ``` 245 | 246 | **封装好的ajax:** 247 | 248 | ```javascript 249 | /** 250 | * 简单封装了ajax对象 251 | */ 252 | class Ajax { 253 | 254 | vueObj = null; 255 | 256 | baseUrl = "http://localhost:8099/"; 257 | 258 | /** 259 | * 构造方法 260 | * @param {*} vueObj 261 | */ 262 | constructor(vueObj) { 263 | 264 | this.vueObj = vueObj; 265 | } 266 | 267 | /** 268 | * get方法 269 | * @param {*} api 270 | * @param {*} callback 271 | * @param {*} params 272 | */ 273 | get(api,callback,params){ 274 | let url = this.baseUrl + api ; 275 | let data = JSON.stringify(params); 276 | this.vueObj.$http.get(url, data,{emulateJSON:true}) 277 | .then( res => { 278 | callback(JSON.parse(res.body)); 279 | }); 280 | } 281 | 282 | /** 283 | * post方法 284 | * @param {*} api 285 | * @param {*} callback 286 | * @param {*} params 287 | */ 288 | post(api,callback,params){ 289 | let url = this.baseUrl + api ; 290 | let data = JSON.stringify(params); 291 | this.vueObj.$http.post(url, data,{emulateJSON:true}) 292 | .then( res => { 293 | callback(JSON.parse(res.body)); 294 | }); 295 | } 296 | 297 | /** 298 | * put方法 299 | * @param {*} api 300 | * @param {*} callback 301 | * @param {*} params 302 | */ 303 | put(api,callback,params){ 304 | let url = this.baseUrl + api ; 305 | let data = JSON.stringify(params); 306 | this.vueObj.$http.put(url, data,{emulateJSON:true}) 307 | .then( res => { 308 | callback(JSON.parse(res.body)); 309 | }); 310 | } 311 | 312 | /** 313 | * delete方法 314 | * @param {*} api 315 | * @param {*} callback 316 | * @param {*} params 317 | */ 318 | delete(api,callback,params){ 319 | let url = this.baseUrl + api ; 320 | let data = JSON.stringify(params); 321 | this.vueObj.$http.delete(url, data ,{emulateJSON:true}) 322 | .then( res => { 323 | callback(JSON.parse(res.body)); 324 | }); 325 | } 326 | } 327 | ``` 328 | 329 | 330 | 331 | # 第8节:列表分页设置 332 | 333 | 主要代码: 334 | 335 | ```javascript 336 | //分页点击事件 337 | currentChange(current){ 338 | // console.log(current); 339 | this.page.current = current; 340 | this.getData(); 341 | } 342 | ``` 343 | 344 | ```html 345 | 353 | 354 | ``` 355 | 356 | 357 | 358 | # 第9节:删除功能 359 | 360 | 361 | 362 | ```javascript 363 | // 删除数据 364 | del() { 365 | if (this.idList.length > 0) { 366 | let that = this; 367 | let idList = that.idList.toString(); 368 | let url = "customerTable?idList=" + idList; 369 | //调用Ajax的delete方法 370 | that.ajax.delete(url, function (rs) { 371 | if (rs.code == 0) { 372 | //重新获取数据 373 | that.getData(); 374 | } 375 | }); 376 | } 377 | } 378 | ``` 379 | 380 | 381 | 382 | # 第10节:新建、编辑功能 383 | 384 | 385 | 386 | ```javascript 387 | onSubmit() { 388 | let that = this; 389 | let url = "customerTable"; 390 | let data = that.form; 391 | //调用Ajax的post方法 392 | that.ajax.post(url, function (rs) { 393 | if (rs.code == 0) { 394 | //重新获取数据 395 | that.getData(); 396 | } 397 | },data); 398 | } 399 | ``` 400 | 401 | -------------------------------------------------------------------------------- /前端代码/static/vue/vue-resource.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * vue-resource v0.9.3 3 | * https://github.com/vuejs/vue-resource 4 | * Released under the MIT License. 5 | */ 6 | 7 | (function (global, factory) { 8 | typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 9 | typeof define === 'function' && define.amd ? define(factory) : 10 | (global.VueResource = factory()); 11 | }(this, function () { 'use strict'; 12 | 13 | /** 14 | * Promises/A+ polyfill v1.1.4 (https://github.com/bramstein/promis) 15 | */ 16 | 17 | var RESOLVED = 0; 18 | var REJECTED = 1; 19 | var PENDING = 2; 20 | 21 | function Promise$2(executor) { 22 | 23 | this.state = PENDING; 24 | this.value = undefined; 25 | this.deferred = []; 26 | 27 | var promise = this; 28 | 29 | try { 30 | executor(function (x) { 31 | promise.resolve(x); 32 | }, function (r) { 33 | promise.reject(r); 34 | }); 35 | } catch (e) { 36 | promise.reject(e); 37 | } 38 | } 39 | 40 | Promise$2.reject = function (r) { 41 | return new Promise$2(function (resolve, reject) { 42 | reject(r); 43 | }); 44 | }; 45 | 46 | Promise$2.resolve = function (x) { 47 | return new Promise$2(function (resolve, reject) { 48 | resolve(x); 49 | }); 50 | }; 51 | 52 | Promise$2.all = function all(iterable) { 53 | return new Promise$2(function (resolve, reject) { 54 | var count = 0, 55 | result = []; 56 | 57 | if (iterable.length === 0) { 58 | resolve(result); 59 | } 60 | 61 | function resolver(i) { 62 | return function (x) { 63 | result[i] = x; 64 | count += 1; 65 | 66 | if (count === iterable.length) { 67 | resolve(result); 68 | } 69 | }; 70 | } 71 | 72 | for (var i = 0; i < iterable.length; i += 1) { 73 | Promise$2.resolve(iterable[i]).then(resolver(i), reject); 74 | } 75 | }); 76 | }; 77 | 78 | Promise$2.race = function race(iterable) { 79 | return new Promise$2(function (resolve, reject) { 80 | for (var i = 0; i < iterable.length; i += 1) { 81 | Promise$2.resolve(iterable[i]).then(resolve, reject); 82 | } 83 | }); 84 | }; 85 | 86 | var p$1 = Promise$2.prototype; 87 | 88 | p$1.resolve = function resolve(x) { 89 | var promise = this; 90 | 91 | if (promise.state === PENDING) { 92 | if (x === promise) { 93 | throw new TypeError('Promise settled with itself.'); 94 | } 95 | 96 | var called = false; 97 | 98 | try { 99 | var then = x && x['then']; 100 | 101 | if (x !== null && typeof x === 'object' && typeof then === 'function') { 102 | then.call(x, function (x) { 103 | if (!called) { 104 | promise.resolve(x); 105 | } 106 | called = true; 107 | }, function (r) { 108 | if (!called) { 109 | promise.reject(r); 110 | } 111 | called = true; 112 | }); 113 | return; 114 | } 115 | } catch (e) { 116 | if (!called) { 117 | promise.reject(e); 118 | } 119 | return; 120 | } 121 | 122 | promise.state = RESOLVED; 123 | promise.value = x; 124 | promise.notify(); 125 | } 126 | }; 127 | 128 | p$1.reject = function reject(reason) { 129 | var promise = this; 130 | 131 | if (promise.state === PENDING) { 132 | if (reason === promise) { 133 | throw new TypeError('Promise settled with itself.'); 134 | } 135 | 136 | promise.state = REJECTED; 137 | promise.value = reason; 138 | promise.notify(); 139 | } 140 | }; 141 | 142 | p$1.notify = function notify() { 143 | var promise = this; 144 | 145 | nextTick(function () { 146 | if (promise.state !== PENDING) { 147 | while (promise.deferred.length) { 148 | var deferred = promise.deferred.shift(), 149 | onResolved = deferred[0], 150 | onRejected = deferred[1], 151 | resolve = deferred[2], 152 | reject = deferred[3]; 153 | 154 | try { 155 | if (promise.state === RESOLVED) { 156 | if (typeof onResolved === 'function') { 157 | resolve(onResolved.call(undefined, promise.value)); 158 | } else { 159 | resolve(promise.value); 160 | } 161 | } else if (promise.state === REJECTED) { 162 | if (typeof onRejected === 'function') { 163 | resolve(onRejected.call(undefined, promise.value)); 164 | } else { 165 | reject(promise.value); 166 | } 167 | } 168 | } catch (e) { 169 | reject(e); 170 | } 171 | } 172 | } 173 | }); 174 | }; 175 | 176 | p$1.then = function then(onResolved, onRejected) { 177 | var promise = this; 178 | 179 | return new Promise$2(function (resolve, reject) { 180 | promise.deferred.push([onResolved, onRejected, resolve, reject]); 181 | promise.notify(); 182 | }); 183 | }; 184 | 185 | p$1.catch = function (onRejected) { 186 | return this.then(undefined, onRejected); 187 | }; 188 | 189 | var PromiseObj = window.Promise || Promise$2; 190 | 191 | function Promise$1(executor, context) { 192 | 193 | if (executor instanceof PromiseObj) { 194 | this.promise = executor; 195 | } else { 196 | this.promise = new PromiseObj(executor.bind(context)); 197 | } 198 | 199 | this.context = context; 200 | } 201 | 202 | Promise$1.all = function (iterable, context) { 203 | return new Promise$1(PromiseObj.all(iterable), context); 204 | }; 205 | 206 | Promise$1.resolve = function (value, context) { 207 | return new Promise$1(PromiseObj.resolve(value), context); 208 | }; 209 | 210 | Promise$1.reject = function (reason, context) { 211 | return new Promise$1(PromiseObj.reject(reason), context); 212 | }; 213 | 214 | Promise$1.race = function (iterable, context) { 215 | return new Promise$1(PromiseObj.race(iterable), context); 216 | }; 217 | 218 | var p = Promise$1.prototype; 219 | 220 | p.bind = function (context) { 221 | this.context = context; 222 | return this; 223 | }; 224 | 225 | p.then = function (fulfilled, rejected) { 226 | 227 | if (fulfilled && fulfilled.bind && this.context) { 228 | fulfilled = fulfilled.bind(this.context); 229 | } 230 | 231 | if (rejected && rejected.bind && this.context) { 232 | rejected = rejected.bind(this.context); 233 | } 234 | 235 | return new Promise$1(this.promise.then(fulfilled, rejected), this.context); 236 | }; 237 | 238 | p.catch = function (rejected) { 239 | 240 | if (rejected && rejected.bind && this.context) { 241 | rejected = rejected.bind(this.context); 242 | } 243 | 244 | return new Promise$1(this.promise.catch(rejected), this.context); 245 | }; 246 | 247 | p.finally = function (callback) { 248 | 249 | return this.then(function (value) { 250 | callback.call(this); 251 | return value; 252 | }, function (reason) { 253 | callback.call(this); 254 | return PromiseObj.reject(reason); 255 | }); 256 | }; 257 | 258 | var debug = false; 259 | var util = {}; 260 | var array = []; 261 | function Util (Vue) { 262 | util = Vue.util; 263 | debug = Vue.config.debug || !Vue.config.silent; 264 | } 265 | 266 | function warn(msg) { 267 | if (typeof console !== 'undefined' && debug) { 268 | console.warn('[VueResource warn]: ' + msg); 269 | } 270 | } 271 | 272 | function error(msg) { 273 | if (typeof console !== 'undefined') { 274 | console.error(msg); 275 | } 276 | } 277 | 278 | function nextTick(cb, ctx) { 279 | return util.nextTick(cb, ctx); 280 | } 281 | 282 | function trim(str) { 283 | return str.replace(/^\s*|\s*$/g, ''); 284 | } 285 | 286 | var isArray = Array.isArray; 287 | 288 | function isString(val) { 289 | return typeof val === 'string'; 290 | } 291 | 292 | function isBoolean(val) { 293 | return val === true || val === false; 294 | } 295 | 296 | function isFunction(val) { 297 | return typeof val === 'function'; 298 | } 299 | 300 | function isObject(obj) { 301 | return obj !== null && typeof obj === 'object'; 302 | } 303 | 304 | function isPlainObject(obj) { 305 | return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype; 306 | } 307 | 308 | function isFormData(obj) { 309 | return typeof FormData !== 'undefined' && obj instanceof FormData; 310 | } 311 | 312 | function when(value, fulfilled, rejected) { 313 | 314 | var promise = Promise$1.resolve(value); 315 | 316 | if (arguments.length < 2) { 317 | return promise; 318 | } 319 | 320 | return promise.then(fulfilled, rejected); 321 | } 322 | 323 | function options(fn, obj, opts) { 324 | 325 | opts = opts || {}; 326 | 327 | if (isFunction(opts)) { 328 | opts = opts.call(obj); 329 | } 330 | 331 | return merge(fn.bind({ $vm: obj, $options: opts }), fn, { $options: opts }); 332 | } 333 | 334 | function each(obj, iterator) { 335 | 336 | var i, key; 337 | 338 | if (typeof obj.length == 'number') { 339 | for (i = 0; i < obj.length; i++) { 340 | iterator.call(obj[i], obj[i], i); 341 | } 342 | } else if (isObject(obj)) { 343 | for (key in obj) { 344 | if (obj.hasOwnProperty(key)) { 345 | iterator.call(obj[key], obj[key], key); 346 | } 347 | } 348 | } 349 | 350 | return obj; 351 | } 352 | 353 | var assign = Object.assign || _assign; 354 | 355 | function merge(target) { 356 | 357 | var args = array.slice.call(arguments, 1); 358 | 359 | args.forEach(function (source) { 360 | _merge(target, source, true); 361 | }); 362 | 363 | return target; 364 | } 365 | 366 | function defaults(target) { 367 | 368 | var args = array.slice.call(arguments, 1); 369 | 370 | args.forEach(function (source) { 371 | 372 | for (var key in source) { 373 | if (target[key] === undefined) { 374 | target[key] = source[key]; 375 | } 376 | } 377 | }); 378 | 379 | return target; 380 | } 381 | 382 | function _assign(target) { 383 | 384 | var args = array.slice.call(arguments, 1); 385 | 386 | args.forEach(function (source) { 387 | _merge(target, source); 388 | }); 389 | 390 | return target; 391 | } 392 | 393 | function _merge(target, source, deep) { 394 | for (var key in source) { 395 | if (deep && (isPlainObject(source[key]) || isArray(source[key]))) { 396 | if (isPlainObject(source[key]) && !isPlainObject(target[key])) { 397 | target[key] = {}; 398 | } 399 | if (isArray(source[key]) && !isArray(target[key])) { 400 | target[key] = []; 401 | } 402 | _merge(target[key], source[key], deep); 403 | } else if (source[key] !== undefined) { 404 | target[key] = source[key]; 405 | } 406 | } 407 | } 408 | 409 | function root (options, next) { 410 | 411 | var url = next(options); 412 | 413 | if (isString(options.root) && !url.match(/^(https?:)?\//)) { 414 | url = options.root + '/' + url; 415 | } 416 | 417 | return url; 418 | } 419 | 420 | function query (options, next) { 421 | 422 | var urlParams = Object.keys(Url.options.params), 423 | query = {}, 424 | url = next(options); 425 | 426 | each(options.params, function (value, key) { 427 | if (urlParams.indexOf(key) === -1) { 428 | query[key] = value; 429 | } 430 | }); 431 | 432 | query = Url.params(query); 433 | 434 | if (query) { 435 | url += (url.indexOf('?') == -1 ? '?' : '&') + query; 436 | } 437 | 438 | return url; 439 | } 440 | 441 | /** 442 | * URL Template v2.0.6 (https://github.com/bramstein/url-template) 443 | */ 444 | 445 | function expand(url, params, variables) { 446 | 447 | var tmpl = parse(url), 448 | expanded = tmpl.expand(params); 449 | 450 | if (variables) { 451 | variables.push.apply(variables, tmpl.vars); 452 | } 453 | 454 | return expanded; 455 | } 456 | 457 | function parse(template) { 458 | 459 | var operators = ['+', '#', '.', '/', ';', '?', '&'], 460 | variables = []; 461 | 462 | return { 463 | vars: variables, 464 | expand: function (context) { 465 | return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) { 466 | if (expression) { 467 | 468 | var operator = null, 469 | values = []; 470 | 471 | if (operators.indexOf(expression.charAt(0)) !== -1) { 472 | operator = expression.charAt(0); 473 | expression = expression.substr(1); 474 | } 475 | 476 | expression.split(/,/g).forEach(function (variable) { 477 | var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); 478 | values.push.apply(values, getValues(context, operator, tmp[1], tmp[2] || tmp[3])); 479 | variables.push(tmp[1]); 480 | }); 481 | 482 | if (operator && operator !== '+') { 483 | 484 | var separator = ','; 485 | 486 | if (operator === '?') { 487 | separator = '&'; 488 | } else if (operator !== '#') { 489 | separator = operator; 490 | } 491 | 492 | return (values.length !== 0 ? operator : '') + values.join(separator); 493 | } else { 494 | return values.join(','); 495 | } 496 | } else { 497 | return encodeReserved(literal); 498 | } 499 | }); 500 | } 501 | }; 502 | } 503 | 504 | function getValues(context, operator, key, modifier) { 505 | 506 | var value = context[key], 507 | result = []; 508 | 509 | if (isDefined(value) && value !== '') { 510 | if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { 511 | value = value.toString(); 512 | 513 | if (modifier && modifier !== '*') { 514 | value = value.substring(0, parseInt(modifier, 10)); 515 | } 516 | 517 | result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null)); 518 | } else { 519 | if (modifier === '*') { 520 | if (Array.isArray(value)) { 521 | value.filter(isDefined).forEach(function (value) { 522 | result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null)); 523 | }); 524 | } else { 525 | Object.keys(value).forEach(function (k) { 526 | if (isDefined(value[k])) { 527 | result.push(encodeValue(operator, value[k], k)); 528 | } 529 | }); 530 | } 531 | } else { 532 | var tmp = []; 533 | 534 | if (Array.isArray(value)) { 535 | value.filter(isDefined).forEach(function (value) { 536 | tmp.push(encodeValue(operator, value)); 537 | }); 538 | } else { 539 | Object.keys(value).forEach(function (k) { 540 | if (isDefined(value[k])) { 541 | tmp.push(encodeURIComponent(k)); 542 | tmp.push(encodeValue(operator, value[k].toString())); 543 | } 544 | }); 545 | } 546 | 547 | if (isKeyOperator(operator)) { 548 | result.push(encodeURIComponent(key) + '=' + tmp.join(',')); 549 | } else if (tmp.length !== 0) { 550 | result.push(tmp.join(',')); 551 | } 552 | } 553 | } 554 | } else { 555 | if (operator === ';') { 556 | result.push(encodeURIComponent(key)); 557 | } else if (value === '' && (operator === '&' || operator === '?')) { 558 | result.push(encodeURIComponent(key) + '='); 559 | } else if (value === '') { 560 | result.push(''); 561 | } 562 | } 563 | 564 | return result; 565 | } 566 | 567 | function isDefined(value) { 568 | return value !== undefined && value !== null; 569 | } 570 | 571 | function isKeyOperator(operator) { 572 | return operator === ';' || operator === '&' || operator === '?'; 573 | } 574 | 575 | function encodeValue(operator, value, key) { 576 | 577 | value = operator === '+' || operator === '#' ? encodeReserved(value) : encodeURIComponent(value); 578 | 579 | if (key) { 580 | return encodeURIComponent(key) + '=' + value; 581 | } else { 582 | return value; 583 | } 584 | } 585 | 586 | function encodeReserved(str) { 587 | return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) { 588 | if (!/%[0-9A-Fa-f]/.test(part)) { 589 | part = encodeURI(part); 590 | } 591 | return part; 592 | }).join(''); 593 | } 594 | 595 | function template (options) { 596 | 597 | var variables = [], 598 | url = expand(options.url, options.params, variables); 599 | 600 | variables.forEach(function (key) { 601 | delete options.params[key]; 602 | }); 603 | 604 | return url; 605 | } 606 | 607 | /** 608 | * Service for URL templating. 609 | */ 610 | 611 | var ie = document.documentMode; 612 | var el = document.createElement('a'); 613 | 614 | function Url(url, params) { 615 | 616 | var self = this || {}, 617 | options = url, 618 | transform; 619 | 620 | if (isString(url)) { 621 | options = { url: url, params: params }; 622 | } 623 | 624 | options = merge({}, Url.options, self.$options, options); 625 | 626 | Url.transforms.forEach(function (handler) { 627 | transform = factory(handler, transform, self.$vm); 628 | }); 629 | 630 | return transform(options); 631 | } 632 | 633 | /** 634 | * Url options. 635 | */ 636 | 637 | Url.options = { 638 | url: '', 639 | root: null, 640 | params: {} 641 | }; 642 | 643 | /** 644 | * Url transforms. 645 | */ 646 | 647 | Url.transforms = [template, query, root]; 648 | 649 | /** 650 | * Encodes a Url parameter string. 651 | * 652 | * @param {Object} obj 653 | */ 654 | 655 | Url.params = function (obj) { 656 | 657 | var params = [], 658 | escape = encodeURIComponent; 659 | 660 | params.add = function (key, value) { 661 | 662 | if (isFunction(value)) { 663 | value = value(); 664 | } 665 | 666 | if (value === null) { 667 | value = ''; 668 | } 669 | 670 | this.push(escape(key) + '=' + escape(value)); 671 | }; 672 | 673 | serialize(params, obj); 674 | 675 | return params.join('&').replace(/%20/g, '+'); 676 | }; 677 | 678 | /** 679 | * Parse a URL and return its components. 680 | * 681 | * @param {String} url 682 | */ 683 | 684 | Url.parse = function (url) { 685 | 686 | if (ie) { 687 | el.href = url; 688 | url = el.href; 689 | } 690 | 691 | el.href = url; 692 | 693 | return { 694 | href: el.href, 695 | protocol: el.protocol ? el.protocol.replace(/:$/, '') : '', 696 | port: el.port, 697 | host: el.host, 698 | hostname: el.hostname, 699 | pathname: el.pathname.charAt(0) === '/' ? el.pathname : '/' + el.pathname, 700 | search: el.search ? el.search.replace(/^\?/, '') : '', 701 | hash: el.hash ? el.hash.replace(/^#/, '') : '' 702 | }; 703 | }; 704 | 705 | function factory(handler, next, vm) { 706 | return function (options) { 707 | return handler.call(vm, options, next); 708 | }; 709 | } 710 | 711 | function serialize(params, obj, scope) { 712 | 713 | var array = isArray(obj), 714 | plain = isPlainObject(obj), 715 | hash; 716 | 717 | each(obj, function (value, key) { 718 | 719 | hash = isObject(value) || isArray(value); 720 | 721 | if (scope) { 722 | key = scope + '[' + (plain || hash ? key : '') + ']'; 723 | } 724 | 725 | if (!scope && array) { 726 | params.add(value.name, value.value); 727 | } else if (hash) { 728 | serialize(params, value, key); 729 | } else { 730 | params.add(key, value); 731 | } 732 | }); 733 | } 734 | 735 | function xdrClient (request) { 736 | return new Promise$1(function (resolve) { 737 | 738 | var xdr = new XDomainRequest(), 739 | handler = function (event) { 740 | 741 | var response = request.respondWith(xdr.responseText, { 742 | status: xdr.status, 743 | statusText: xdr.statusText 744 | }); 745 | 746 | resolve(response); 747 | }; 748 | 749 | request.abort = function () { 750 | return xdr.abort(); 751 | }; 752 | 753 | xdr.open(request.method, request.getUrl(), true); 754 | xdr.timeout = 0; 755 | xdr.onload = handler; 756 | xdr.onerror = handler; 757 | xdr.ontimeout = function () {}; 758 | xdr.onprogress = function () {}; 759 | xdr.send(request.getBody()); 760 | }); 761 | } 762 | 763 | var ORIGIN_URL = Url.parse(location.href); 764 | var SUPPORTS_CORS = 'withCredentials' in new XMLHttpRequest(); 765 | 766 | function cors (request, next) { 767 | 768 | if (!isBoolean(request.crossOrigin) && crossOrigin(request)) { 769 | request.crossOrigin = true; 770 | } 771 | 772 | if (request.crossOrigin) { 773 | 774 | if (!SUPPORTS_CORS) { 775 | request.client = xdrClient; 776 | } 777 | 778 | delete request.emulateHTTP; 779 | } 780 | 781 | next(); 782 | } 783 | 784 | function crossOrigin(request) { 785 | 786 | var requestUrl = Url.parse(Url(request)); 787 | 788 | return requestUrl.protocol !== ORIGIN_URL.protocol || requestUrl.host !== ORIGIN_URL.host; 789 | } 790 | 791 | function body (request, next) { 792 | 793 | if (request.emulateJSON && isPlainObject(request.body)) { 794 | request.body = Url.params(request.body); 795 | request.headers['Content-Type'] = 'application/x-www-form-urlencoded'; 796 | } 797 | 798 | if (isFormData(request.body)) { 799 | delete request.headers['Content-Type']; 800 | } 801 | 802 | if (isPlainObject(request.body)) { 803 | request.body = JSON.stringify(request.body); 804 | } 805 | 806 | next(function (response) { 807 | 808 | var contentType = response.headers['Content-Type']; 809 | 810 | if (isString(contentType) && contentType.indexOf('application/json') === 0) { 811 | 812 | try { 813 | response.data = response.json(); 814 | } catch (e) { 815 | response.data = null; 816 | } 817 | } else { 818 | response.data = response.text(); 819 | } 820 | }); 821 | } 822 | 823 | function jsonpClient (request) { 824 | return new Promise$1(function (resolve) { 825 | 826 | var name = request.jsonp || 'callback', 827 | callback = '_jsonp' + Math.random().toString(36).substr(2), 828 | body = null, 829 | handler, 830 | script; 831 | 832 | handler = function (event) { 833 | 834 | var status = 0; 835 | 836 | if (event.type === 'load' && body !== null) { 837 | status = 200; 838 | } else if (event.type === 'error') { 839 | status = 404; 840 | } 841 | 842 | resolve(request.respondWith(body, { status: status })); 843 | 844 | delete window[callback]; 845 | document.body.removeChild(script); 846 | }; 847 | 848 | request.params[name] = callback; 849 | 850 | window[callback] = function (result) { 851 | body = JSON.stringify(result); 852 | }; 853 | 854 | script = document.createElement('script'); 855 | script.src = request.getUrl(); 856 | script.type = 'text/javascript'; 857 | script.async = true; 858 | script.onload = handler; 859 | script.onerror = handler; 860 | 861 | document.body.appendChild(script); 862 | }); 863 | } 864 | 865 | function jsonp (request, next) { 866 | 867 | if (request.method == 'JSONP') { 868 | request.client = jsonpClient; 869 | } 870 | 871 | next(function (response) { 872 | 873 | if (request.method == 'JSONP') { 874 | response.data = response.json(); 875 | } 876 | }); 877 | } 878 | 879 | function before (request, next) { 880 | 881 | if (isFunction(request.before)) { 882 | request.before.call(this, request); 883 | } 884 | 885 | next(); 886 | } 887 | 888 | /** 889 | * HTTP method override Interceptor. 890 | */ 891 | 892 | function method (request, next) { 893 | 894 | if (request.emulateHTTP && /^(PUT|PATCH|DELETE)$/i.test(request.method)) { 895 | request.headers['X-HTTP-Method-Override'] = request.method; 896 | request.method = 'POST'; 897 | } 898 | 899 | next(); 900 | } 901 | 902 | function header (request, next) { 903 | 904 | request.method = request.method.toUpperCase(); 905 | request.headers = assign({}, Http.headers.common, !request.crossOrigin ? Http.headers.custom : {}, Http.headers[request.method.toLowerCase()], request.headers); 906 | 907 | next(); 908 | } 909 | 910 | /** 911 | * Timeout Interceptor. 912 | */ 913 | 914 | function timeout (request, next) { 915 | 916 | var timeout; 917 | 918 | if (request.timeout) { 919 | timeout = setTimeout(function () { 920 | request.abort(); 921 | }, request.timeout); 922 | } 923 | 924 | next(function (response) { 925 | 926 | clearTimeout(timeout); 927 | }); 928 | } 929 | 930 | function xhrClient (request) { 931 | return new Promise$1(function (resolve) { 932 | 933 | var xhr = new XMLHttpRequest(), 934 | handler = function (event) { 935 | 936 | var response = request.respondWith('response' in xhr ? xhr.response : xhr.responseText, { 937 | status: xhr.status === 1223 ? 204 : xhr.status, // IE9 status bug 938 | statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText), 939 | headers: parseHeaders(xhr.getAllResponseHeaders()) 940 | }); 941 | 942 | resolve(response); 943 | }; 944 | 945 | request.abort = function () { 946 | return xhr.abort(); 947 | }; 948 | 949 | xhr.open(request.method, request.getUrl(), true); 950 | xhr.timeout = 0; 951 | xhr.onload = handler; 952 | xhr.onerror = handler; 953 | 954 | if (request.progress) { 955 | if (request.method === 'GET') { 956 | xhr.addEventListener('progress', request.progress); 957 | } else if (/^(POST|PUT)$/i.test(request.method)) { 958 | xhr.upload.addEventListener('progress', request.progress); 959 | } 960 | } 961 | 962 | if (request.credentials === true) { 963 | xhr.withCredentials = true; 964 | } 965 | 966 | each(request.headers || {}, function (value, header) { 967 | xhr.setRequestHeader(header, value); 968 | }); 969 | 970 | xhr.send(request.getBody()); 971 | }); 972 | } 973 | 974 | function parseHeaders(str) { 975 | 976 | var headers = {}, 977 | value, 978 | name, 979 | i; 980 | 981 | each(trim(str).split('\n'), function (row) { 982 | 983 | i = row.indexOf(':'); 984 | name = trim(row.slice(0, i)); 985 | value = trim(row.slice(i + 1)); 986 | 987 | if (headers[name]) { 988 | 989 | if (isArray(headers[name])) { 990 | headers[name].push(value); 991 | } else { 992 | headers[name] = [headers[name], value]; 993 | } 994 | } else { 995 | 996 | headers[name] = value; 997 | } 998 | }); 999 | 1000 | return headers; 1001 | } 1002 | 1003 | function Client (context) { 1004 | 1005 | var reqHandlers = [sendRequest], 1006 | resHandlers = [], 1007 | handler; 1008 | 1009 | if (!isObject(context)) { 1010 | context = null; 1011 | } 1012 | 1013 | function Client(request) { 1014 | return new Promise$1(function (resolve) { 1015 | 1016 | function exec() { 1017 | 1018 | handler = reqHandlers.pop(); 1019 | 1020 | if (isFunction(handler)) { 1021 | handler.call(context, request, next); 1022 | } else { 1023 | warn('Invalid interceptor of type ' + typeof handler + ', must be a function'); 1024 | next(); 1025 | } 1026 | } 1027 | 1028 | function next(response) { 1029 | 1030 | if (isFunction(response)) { 1031 | 1032 | resHandlers.unshift(response); 1033 | } else if (isObject(response)) { 1034 | 1035 | resHandlers.forEach(function (handler) { 1036 | response = when(response, function (response) { 1037 | return handler.call(context, response) || response; 1038 | }); 1039 | }); 1040 | 1041 | when(response, resolve); 1042 | 1043 | return; 1044 | } 1045 | 1046 | exec(); 1047 | } 1048 | 1049 | exec(); 1050 | }, context); 1051 | } 1052 | 1053 | Client.use = function (handler) { 1054 | reqHandlers.push(handler); 1055 | }; 1056 | 1057 | return Client; 1058 | } 1059 | 1060 | function sendRequest(request, resolve) { 1061 | 1062 | var client = request.client || xhrClient; 1063 | 1064 | resolve(client(request)); 1065 | } 1066 | 1067 | var classCallCheck = function (instance, Constructor) { 1068 | if (!(instance instanceof Constructor)) { 1069 | throw new TypeError("Cannot call a class as a function"); 1070 | } 1071 | }; 1072 | 1073 | /** 1074 | * HTTP Response. 1075 | */ 1076 | 1077 | var Response = function () { 1078 | function Response(body, _ref) { 1079 | var url = _ref.url; 1080 | var headers = _ref.headers; 1081 | var status = _ref.status; 1082 | var statusText = _ref.statusText; 1083 | classCallCheck(this, Response); 1084 | 1085 | 1086 | this.url = url; 1087 | this.body = body; 1088 | this.headers = headers || {}; 1089 | this.status = status || 0; 1090 | this.statusText = statusText || ''; 1091 | this.ok = status >= 200 && status < 300; 1092 | } 1093 | 1094 | Response.prototype.text = function text() { 1095 | return this.body; 1096 | }; 1097 | 1098 | Response.prototype.blob = function blob() { 1099 | return new Blob([this.body]); 1100 | }; 1101 | 1102 | Response.prototype.json = function json() { 1103 | return JSON.parse(this.body); 1104 | }; 1105 | 1106 | return Response; 1107 | }(); 1108 | 1109 | var Request = function () { 1110 | function Request(options) { 1111 | classCallCheck(this, Request); 1112 | 1113 | 1114 | this.method = 'GET'; 1115 | this.body = null; 1116 | this.params = {}; 1117 | this.headers = {}; 1118 | 1119 | assign(this, options); 1120 | } 1121 | 1122 | Request.prototype.getUrl = function getUrl() { 1123 | return Url(this); 1124 | }; 1125 | 1126 | Request.prototype.getBody = function getBody() { 1127 | return this.body; 1128 | }; 1129 | 1130 | Request.prototype.respondWith = function respondWith(body, options) { 1131 | return new Response(body, assign(options || {}, { url: this.getUrl() })); 1132 | }; 1133 | 1134 | return Request; 1135 | }(); 1136 | 1137 | /** 1138 | * Service for sending network requests. 1139 | */ 1140 | 1141 | var CUSTOM_HEADERS = { 'X-Requested-With': 'XMLHttpRequest' }; 1142 | var COMMON_HEADERS = { 'Accept': 'application/json, text/plain, */*' }; 1143 | var JSON_CONTENT_TYPE = { 'Content-Type': 'application/json;charset=utf-8' }; 1144 | 1145 | function Http(options) { 1146 | 1147 | var self = this || {}, 1148 | client = Client(self.$vm); 1149 | 1150 | defaults(options || {}, self.$options, Http.options); 1151 | 1152 | Http.interceptors.forEach(function (handler) { 1153 | client.use(handler); 1154 | }); 1155 | 1156 | return client(new Request(options)).then(function (response) { 1157 | 1158 | return response.ok ? response : Promise$1.reject(response); 1159 | }, function (response) { 1160 | 1161 | if (response instanceof Error) { 1162 | error(response); 1163 | } 1164 | 1165 | return Promise$1.reject(response); 1166 | }); 1167 | } 1168 | 1169 | Http.options = {}; 1170 | 1171 | Http.headers = { 1172 | put: JSON_CONTENT_TYPE, 1173 | post: JSON_CONTENT_TYPE, 1174 | patch: JSON_CONTENT_TYPE, 1175 | delete: JSON_CONTENT_TYPE, 1176 | custom: CUSTOM_HEADERS, 1177 | common: COMMON_HEADERS 1178 | }; 1179 | 1180 | Http.interceptors = [before, timeout, method, body, jsonp, header, cors]; 1181 | 1182 | ['get', 'delete', 'head', 'jsonp'].forEach(function (method) { 1183 | 1184 | Http[method] = function (url, options) { 1185 | return this(assign(options || {}, { url: url, method: method })); 1186 | }; 1187 | }); 1188 | 1189 | ['post', 'put', 'patch'].forEach(function (method) { 1190 | 1191 | Http[method] = function (url, body, options) { 1192 | return this(assign(options || {}, { url: url, method: method, body: body })); 1193 | }; 1194 | }); 1195 | 1196 | function Resource(url, params, actions, options) { 1197 | 1198 | var self = this || {}, 1199 | resource = {}; 1200 | 1201 | actions = assign({}, Resource.actions, actions); 1202 | 1203 | each(actions, function (action, name) { 1204 | 1205 | action = merge({ url: url, params: params || {} }, options, action); 1206 | 1207 | resource[name] = function () { 1208 | return (self.$http || Http)(opts(action, arguments)); 1209 | }; 1210 | }); 1211 | 1212 | return resource; 1213 | } 1214 | 1215 | function opts(action, args) { 1216 | 1217 | var options = assign({}, action), 1218 | params = {}, 1219 | body; 1220 | 1221 | switch (args.length) { 1222 | 1223 | case 2: 1224 | 1225 | params = args[0]; 1226 | body = args[1]; 1227 | 1228 | break; 1229 | 1230 | case 1: 1231 | 1232 | if (/^(POST|PUT|PATCH)$/i.test(options.method)) { 1233 | body = args[0]; 1234 | } else { 1235 | params = args[0]; 1236 | } 1237 | 1238 | break; 1239 | 1240 | case 0: 1241 | 1242 | break; 1243 | 1244 | default: 1245 | 1246 | throw 'Expected up to 4 arguments [params, body], got ' + args.length + ' arguments'; 1247 | } 1248 | 1249 | options.body = body; 1250 | options.params = assign({}, options.params, params); 1251 | 1252 | return options; 1253 | } 1254 | 1255 | Resource.actions = { 1256 | 1257 | get: { method: 'GET' }, 1258 | save: { method: 'POST' }, 1259 | query: { method: 'GET' }, 1260 | update: { method: 'PUT' }, 1261 | remove: { method: 'DELETE' }, 1262 | delete: { method: 'DELETE' } 1263 | 1264 | }; 1265 | 1266 | function plugin(Vue) { 1267 | 1268 | if (plugin.installed) { 1269 | return; 1270 | } 1271 | 1272 | Util(Vue); 1273 | 1274 | Vue.url = Url; 1275 | Vue.http = Http; 1276 | Vue.resource = Resource; 1277 | Vue.Promise = Promise$1; 1278 | 1279 | Object.defineProperties(Vue.prototype, { 1280 | 1281 | $url: { 1282 | get: function () { 1283 | return options(Vue.url, this, this.$options.url); 1284 | } 1285 | }, 1286 | 1287 | $http: { 1288 | get: function () { 1289 | return options(Vue.http, this, this.$options.http); 1290 | } 1291 | }, 1292 | 1293 | $resource: { 1294 | get: function () { 1295 | return Vue.resource.bind(this); 1296 | } 1297 | }, 1298 | 1299 | $promise: { 1300 | get: function () { 1301 | var _this = this; 1302 | 1303 | return function (executor) { 1304 | return new Vue.Promise(executor, _this); 1305 | }; 1306 | } 1307 | } 1308 | 1309 | }); 1310 | } 1311 | 1312 | if (typeof window !== 'undefined' && window.Vue) { 1313 | window.Vue.use(plugin); 1314 | } 1315 | 1316 | return plugin; 1317 | 1318 | })); --------------------------------------------------------------------------------