初始项目
This commit is contained in:
3
mallplus-admin/src/main/resources/META-INF/MANIFEST.MF
Normal file
3
mallplus-admin/src/main/resources/META-INF/MANIFEST.MF
Normal file
@@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
Main-Class: com.zscat.mallplus.MallAdminApplication
|
||||
|
||||
58
mallplus-admin/src/main/resources/application-dev.properties
Normal file
58
mallplus-admin/src/main/resources/application-dev.properties
Normal file
@@ -0,0 +1,58 @@
|
||||
#===redis start===
|
||||
# Redis\u6570\u636E\u5E93\u7D22\u5F15\uFF08\u9ED8\u8BA4\u4E3A0\uFF09
|
||||
spring.redis.database=4
|
||||
# Redis\u670D\u52A1\u5668\u5730\u5740
|
||||
spring.redis.host=127.0.0.1
|
||||
# Redis\u670D\u52A1\u5668\u8FDE\u63A5\u7AEF\u53E3
|
||||
spring.redis.port=6379
|
||||
# Redis\u670D\u52A1\u5668\u8FDE\u63A5\u5BC6\u7801\uFF08\u9ED8\u8BA4\u4E3A\u7A7A\uFF09
|
||||
spring.redis.password=
|
||||
# \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
|
||||
spring.redis.pool.max-active=8
|
||||
# \u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
|
||||
spring.redis.pool.max-wait=-1
|
||||
# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5
|
||||
spring.redis.pool.max-idle=8
|
||||
# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5
|
||||
spring.redis.pool.min-idle=0
|
||||
# \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09
|
||||
spring.redis.timeout=0
|
||||
#===redis end===
|
||||
spring.datasource.url=jdbc:mysql://localhost:3306/mallplus1?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8
|
||||
spring.datasource.username=root
|
||||
spring.datasource.password=root
|
||||
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
|
||||
spring.datasource.druid.initialSize=5
|
||||
spring.datasource.druid.minIdle=5
|
||||
spring.datasource.druid.maxActive=10
|
||||
spring.datasource.druid.maxWait=60000
|
||||
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
|
||||
spring.datasource.druid.minEvictableIdleTimeMillis=300000
|
||||
spring.datasource.druid.validationQuery=SELECT 1
|
||||
spring.datasource.druid.testWhileIdle=true
|
||||
spring.datasource.druid.testOnBorrow=false
|
||||
spring.datasource.druid.testOnReturn=false
|
||||
spring.datasource.druid.removeAbandoned=true
|
||||
spring.datasource.druid.remove-abandoned-timeout=180
|
||||
spring.datasource.druid.web-stat-filter.enabled=true
|
||||
spring.datasource.druid.web-stat-filter.url-pattern=/*
|
||||
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
|
||||
spring.datasource.druid.stat-view-servlet.enabled=true
|
||||
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
|
||||
spring.datasource.druid.stat-view-servlet.reset-enable=true
|
||||
spring.datasource.druid.stat-view-servlet.login-username=druid
|
||||
spring.datasource.druid.stat-view-servlet.login-password=druid
|
||||
mybatis-plus.mapper-locations=classpath:/mapper/*/*.xml
|
||||
mybatis-plus.typeAliasesPackage=com.zscat.mallplus.*.entity
|
||||
#mybatis-plus.typeEnumsPackage=com.zscat.mallplus.sys.entity.enums
|
||||
mybatis-plus.global-config.db-config.id-type=id_worker
|
||||
mybatis-plus.global-config.db-config.field-strategy=not_empty
|
||||
mybatis-plus.global-config.db-config.column-underline=true
|
||||
mybatis-plus.global-config.db-config.logic-delete-value=0
|
||||
mybatis-plus.global-config.db-config.logic-not-delete-value=1
|
||||
mybatis-plus.global-config.db-config.db-type=mysql
|
||||
mybatis-plus.global-config.refresh=true
|
||||
mybatis-plus.configuration.map-underscore-to-camel-case=true
|
||||
mybatis-plus.configuration.cache-enabled=false
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
#===redis start===
|
||||
# Redis\u6570\u636E\u5E93\u7D22\u5F15\uFF08\u9ED8\u8BA4\u4E3A0\uFF09
|
||||
spring.redis.database=2
|
||||
# Redis\u670D\u52A1\u5668\u5730\u5740
|
||||
spring.redis.host=127.0.0.1
|
||||
# Redis\u670D\u52A1\u5668\u8FDE\u63A5\u7AEF\u53E3
|
||||
spring.redis.port=6379
|
||||
# Redis\u670D\u52A1\u5668\u8FDE\u63A5\u5BC6\u7801\uFF08\u9ED8\u8BA4\u4E3A\u7A7A\uFF09
|
||||
spring.redis.password=
|
||||
# \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
|
||||
spring.redis.pool.max-active=8
|
||||
# \u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
|
||||
spring.redis.pool.max-wait=-1
|
||||
# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5
|
||||
spring.redis.pool.max-idle=8
|
||||
# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5
|
||||
spring.redis.pool.min-idle=0
|
||||
# \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09
|
||||
spring.redis.timeout=0
|
||||
#===redis end===
|
||||
spring.datasource.url=jdbc:mysql://localhost:3306/mallplus1?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8
|
||||
spring.datasource.username=root
|
||||
spring.datasource.password=yxt_3316_admin
|
||||
# 生成的公钥
|
||||
#public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJA52y0MfenXef1fa16LOdIy5aHKPaQCGrjDH/GlHEOwvaDqFn5teHZjrZPUeXBYouL74SXLOwIBMKqihzkmB0sCAwEAAQ==
|
||||
# 配置 connection-properties,启用加密,配置公钥。
|
||||
#spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key}
|
||||
# 启用ConfigFilter
|
||||
spring.datasource.druid.filter.config.enabled=true
|
||||
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
|
||||
spring.datasource.druid.initialSize=5
|
||||
spring.datasource.druid.minIdle=5
|
||||
spring.datasource.druid.maxActive=10
|
||||
spring.datasource.druid.maxWait=60000
|
||||
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
|
||||
spring.datasource.druid.minEvictableIdleTimeMillis=300000
|
||||
spring.datasource.druid.validationQuery=SELECT 1
|
||||
spring.datasource.druid.testWhileIdle=true
|
||||
spring.datasource.druid.testOnBorrow=false
|
||||
spring.datasource.druid.testOnReturn=false
|
||||
spring.datasource.druid.removeAbandoned=true
|
||||
spring.datasource.druid.remove-abandoned-timeout=180
|
||||
spring.datasource.druid.web-stat-filter.enabled=true
|
||||
spring.datasource.druid.web-stat-filter.url-pattern=/*
|
||||
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
|
||||
spring.datasource.druid.stat-view-servlet.enabled=true
|
||||
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
|
||||
spring.datasource.druid.stat-view-servlet.reset-enable=true
|
||||
spring.datasource.druid.stat-view-servlet.login-username=druid
|
||||
spring.datasource.druid.stat-view-servlet.login-password=druid
|
||||
mybatis-plus.mapper-locations=classpath:/mapper/*/*.xml
|
||||
mybatis-plus.typeAliasesPackage=com.zscat.mallplus.*.entity
|
||||
#mybatis-plus.typeEnumsPackage=com.zscat.mallplus.sys.entity.enums
|
||||
mybatis-plus.global-config.db-config.id-type=id_worker
|
||||
mybatis-plus.global-config.db-config.field-strategy=not_empty
|
||||
mybatis-plus.global-config.db-config.column-underline=true
|
||||
mybatis-plus.global-config.db-config.logic-delete-value=0
|
||||
mybatis-plus.global-config.db-config.logic-not-delete-value=1
|
||||
mybatis-plus.global-config.db-config.db-type=mysql
|
||||
mybatis-plus.global-config.refresh=true
|
||||
mybatis-plus.configuration.map-underscore-to-camel-case=true
|
||||
mybatis-plus.configuration.cache-enabled=false
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
spring.datasource.url=jdbc:mysql://localhost:3306/mallplus1?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=UTC
|
||||
spring.datasource.username=root
|
||||
spring.datasource.password=1LAiGz$t1*Iw
|
||||
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
|
||||
spring.datasource.druid.initialSize=5
|
||||
spring.datasource.druid.minIdle=5
|
||||
spring.datasource.druid.maxActive=10
|
||||
spring.datasource.druid.maxWait=60000
|
||||
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
|
||||
spring.datasource.druid.minEvictableIdleTimeMillis=300000
|
||||
spring.datasource.druid.validationQuery=SELECT 1
|
||||
spring.datasource.druid.testWhileIdle=true
|
||||
spring.datasource.druid.testOnBorrow=false
|
||||
spring.datasource.druid.testOnReturn=false
|
||||
spring.datasource.druid.removeAbandoned=true
|
||||
spring.datasource.druid.remove-abandoned-timeout=180
|
||||
spring.datasource.druid.web-stat-filter.enabled=true
|
||||
spring.datasource.druid.web-stat-filter.url-pattern=/*
|
||||
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
|
||||
spring.datasource.druid.stat-view-servlet.enabled=true
|
||||
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
|
||||
spring.datasource.druid.stat-view-servlet.reset-enable=true
|
||||
spring.datasource.druid.stat-view-servlet.login-username=druid
|
||||
spring.datasource.druid.stat-view-servlet.login-password=druid
|
||||
mybatis-plus.mapper-locations=classpath:/mapper/*/*.xml
|
||||
mybatis-plus.typeAliasesPackage=com.zscat.mallplus.*.entity
|
||||
#mybatis-plus.typeEnumsPackage=com.zscat.mallplus.sys.entity.enums
|
||||
mybatis-plus.global-config.db-config.id-type=id_worker
|
||||
mybatis-plus.global-config.db-config.field-strategy=not_empty
|
||||
mybatis-plus.global-config.db-config.column-underline=true
|
||||
mybatis-plus.global-config.db-config.logic-delete-value=0
|
||||
mybatis-plus.global-config.db-config.logic-not-delete-value=1
|
||||
mybatis-plus.global-config.db-config.db-type=mysql
|
||||
mybatis-plus.global-config.refresh=true
|
||||
mybatis-plus.configuration.map-underscore-to-camel-case=true
|
||||
mybatis-plus.configuration.cache-enabled=false
|
||||
#===mongodb end===
|
||||
#===redis start===
|
||||
# Redis\u6570\u636E\u5E93\u7D22\u5F15\uFF08\u9ED8\u8BA4\u4E3A0\uFF09
|
||||
spring.redis.database=0
|
||||
# Redis\u670D\u52A1\u5668\u5730\u5740
|
||||
spring.redis.host=127.0.0.1
|
||||
# Redis\u670D\u52A1\u5668\u8FDE\u63A5\u7AEF\u53E3
|
||||
spring.redis.port=6379
|
||||
# Redis\u670D\u52A1\u5668\u8FDE\u63A5\u5BC6\u7801\uFF08\u9ED8\u8BA4\u4E3A\u7A7A\uFF09
|
||||
spring.redis.password=123456
|
||||
# \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
|
||||
spring.redis.pool.max-active=8
|
||||
# \u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
|
||||
spring.redis.pool.max-wait=-1
|
||||
# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5
|
||||
spring.redis.pool.max-idle=8
|
||||
# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5
|
||||
spring.redis.pool.min-idle=0
|
||||
# \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09
|
||||
spring.redis.timeout=0
|
||||
#===redis end===
|
||||
# \u5C0F\u7A0B\u5E8F
|
||||
wx.secret=12c7a7ae75571beaf4eb379d30962681
|
||||
wx.appId=wx15ade215f1447bda
|
||||
wx.mchId=1388211202
|
||||
wx.paySignKey=QMRHz2NpJpNIJqhHHJQSNuNmHPnH2v9z
|
||||
wx.certName=/cert/apiclient_cert.p12
|
||||
wx.getCode=https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=STAT#wechat_redirect
|
||||
wx.notifyUrl=http://localhost:8085/api/pay/notify
|
||||
wx.orderquery=https://api.mch.weixin.qq.com/pay/orderquery
|
||||
wx.refundUrl=https://api.mch.weixin.qq.com/secapi/pay/refund
|
||||
wx.refundqueryUrl=https://api.mch.weixin.qq.com/pay/refundquery
|
||||
wx.tradeType=JSAPI
|
||||
wx.uniformorder=https://api.mch.weixin.qq.com/pay/unifiedorder
|
||||
wx.userMessage=https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN
|
||||
wx.webAccessTokenhttps=https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code
|
||||
wx.templateId=nAt_DYLLwYXkIhtDb5nyEm0ynrt98OK3Z3MmeUooPz4
|
||||
87
mallplus-admin/src/main/resources/application.properties
Normal file
87
mallplus-admin/src/main/resources/application.properties
Normal file
@@ -0,0 +1,87 @@
|
||||
#\u9ED8\u8BA4\u4E3A\u5F00\u53D1\u73AF\u5883
|
||||
#spring.profiles.active=dev
|
||||
spring.profiles.active=test
|
||||
server.port=8085
|
||||
spring.jackson.time-zone=GMT+8
|
||||
|
||||
#===OSS start \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u01B6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
|
||||
aliyun.sms.accessKeyId=LTAI4G8mEVaYgHYEVsJ19y9M
|
||||
aliyun.sms.accessKeySecret=s4IC8jIlrVvU3CWqeOxqqbOxMCwdui
|
||||
aliyun.sms.sign.name=\u4EAC\u6021\u541B\u5546\u8D38
|
||||
aliyun.sms.template.code=SMS_164240312
|
||||
aliyun.sms.expire-minute=2
|
||||
aliyun.sms.day-count=45
|
||||
|
||||
#===OSS start \u01F0\uFFFD\uFFFDoss\uFFFD\uFFFD\u04AA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD===
|
||||
aliyun.oss.endpoint=oss-cn-huhehaote.aliyuncs.com
|
||||
aliyun.oss.accessKeyId=LTAI4G8mEVaYgHYEVsJ19y9M
|
||||
aliyun.oss.accessKeySecret=s4IC8jIlrVvU3CWqeOxqqbOxMCwdui
|
||||
aliyun.oss.bucketName=yxt-sc
|
||||
aliyun.oss.policy.expire=300
|
||||
aliyun.oss.maxSize=10
|
||||
#aliyun.oss.callback=http://39.104.100.138:8085/aliyun/oss/callback
|
||||
|
||||
|
||||
|
||||
aliyun.oss.dir.prefix=
|
||||
#===OSS end===
|
||||
|
||||
#===OSS start oss\uFFFD\uFFFD\u04AA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04BB\uFFFD\uFFFD\uFFFD\uFFFD\u04B2\uFFFD\uFFFD\uFFFD\uFFFD\u05BB\uFFFD\uFFFDdefalut\uFFFD\u013C\uFFFD\u00BC===
|
||||
oss.type=1
|
||||
oss.aliyun.first.accessKeyId=LTAI4G8mEVaYgHYEVsJ19y9M
|
||||
oss.aliyun.first.accessKeySecret=s4IC8jIlrVvU3CWqeOxqqbOxMCwdui
|
||||
oss.aliyun.first.bucketName=yxt-sc
|
||||
oss.aliyun.first.endPoint=oss-cn-huhehaote.aliyuncs.com
|
||||
oss.aliyun.first.styleName=
|
||||
oss.aliyun.first.prefix=web
|
||||
|
||||
oss.aliyun.second.accessKeyId=\u02A1\uFFFD\uFFFD...
|
||||
oss.aliyun.second.accessKeySecret=\u02A1\uFFFD\uFFFD...
|
||||
oss.aliyun.second.bucketName=peterjava
|
||||
oss.aliyun.second.endPoint=oss-cn-huhehaote.aliyuncs.com
|
||||
oss.aliyun.second.styleName=
|
||||
oss.aliyun.second.prefix=user
|
||||
|
||||
oss.aliyun.domain=http://yxt-sc.oss-cn-beijing.aliyuncs.com/
|
||||
oss.aliyun.defalut.accessKeyId=LTAI4G8mEVaYgHYEVsJ19y9M
|
||||
oss.aliyun.defalut.accessKeySecret=s4IC8jIlrVvU3CWqeOxqqbOxMCwdui
|
||||
oss.aliyun.defalut.bucketName=yxt-sc
|
||||
oss.aliyun.defalut.endPoint=oss-cn-huhehaote.aliyuncs.com
|
||||
oss.aliyun.defalut.styleName=
|
||||
oss.aliyun.defalut.prefix=web
|
||||
#===mybatis start===
|
||||
redis.key.prefix.authCode=admin:authCode:
|
||||
redis.key.prefix.orderId=admin:orderId:
|
||||
authCode.expire.seconds=90
|
||||
#===mybatis end===
|
||||
#===log start===
|
||||
#\u65E5\u5FD7\u914D\u7F6EDEBUG,INFO,WARN,ERROR
|
||||
logging.level.root=info
|
||||
#\u5355\u72EC\u914D\u7F6E\u65E5\u5FD7\u7EA7\u522B
|
||||
logging.level.com.zscat.mallplus=debug
|
||||
logging.level.com.zscat.mallplus.mapper=debug
|
||||
logging.level.com.zscat.mallplus.sms.mapper=debug
|
||||
logging.level.com.zscat.mallplus.oms.mapper=debug
|
||||
logging.level.com.zscat.mallplus.pms.mapper=debug
|
||||
logging.level.com.zscat.mallplus.sys.mapper=debug
|
||||
logging.level.com.zscat.mallplus.cms.mapper=debug
|
||||
logging.level.com.zscat.mallplus.ums.mapper=debug
|
||||
#\u914D\u7F6E\u65E5\u5FD7\u751F\u6210\u8DEF\u5F84
|
||||
#logging.path=/var/logs
|
||||
#\u914D\u7F6E\u65E5\u5FD7\u6587\u4EF6\u540D\u79F0
|
||||
#logging.file=demo_log.log
|
||||
#===log end===
|
||||
#===thymeleaf start===
|
||||
#\u5F00\u53D1\u65F6\u5173\u95ED\u7F13\u5B58,\u4E0D\u7136\u6CA1\u6CD5\u770B\u5230\u5B9E\u65F6\u9875\u9762
|
||||
spring.thymeleaf.cache=false
|
||||
#===thymeleaf end==
|
||||
#===JWT start===
|
||||
#JWT\u5B58\u50A8\u7684\u8BF7\u6C42\u5934
|
||||
jwt.tokenHeader=Authorization
|
||||
#JWT\u52A0\u89E3\u5BC6\u4F7F\u7528\u7684\u5BC6\u94A5
|
||||
jwt.secret=mySecret
|
||||
#JWT\u7684\u8D85\u671F\u9650\u65F6\u95F4(60*60*24)
|
||||
jwt.expiration=604800
|
||||
#JWT\u8D1F\u8F7D\u4E2D\u62FF\u5230\u5F00\u5934
|
||||
jwt.tokenHead=Bearer
|
||||
#===JWT end===
|
||||
33
mallplus-admin/src/main/resources/generator.properties
Normal file
33
mallplus-admin/src/main/resources/generator.properties
Normal file
@@ -0,0 +1,33 @@
|
||||
#\u4EE3\u7801\u751F\u6210\u5668\uFF0C\u914D\u7F6E\u4FE1\u606F
|
||||
#\u5305\u540D
|
||||
package=com.zscat
|
||||
module=cms
|
||||
labeltext=\u54C1\u724C
|
||||
#\u4F5C\u8005
|
||||
author=zscat
|
||||
#Email
|
||||
email=951449465@qq.com
|
||||
#\u81EA\u52A8\u53BB\u9664\u8868\u524D\u7F00\uFF0C\u9ED8\u8BA4\u662F true
|
||||
autoRemovePre=true
|
||||
#\u8868\u524D\u7F00(\u7C7B\u540D\u4E0D\u4F1A\u5305\u542B\u8868\u524D\u7F00)
|
||||
tablePrefix=cms_
|
||||
#\u7C7B\u578B\u8F6C\u6362\uFF0C\u914D\u7F6E\u4FE1\u606F
|
||||
tinyint=Integer
|
||||
smallint=Integer
|
||||
mediumint=Integer
|
||||
int=Integer
|
||||
integer=Integer
|
||||
bigint=Long
|
||||
float=Float
|
||||
double=Double
|
||||
decimal=BigDecimal
|
||||
bit=Boolean
|
||||
char=String
|
||||
varchar=String
|
||||
tinytext=String
|
||||
text=String
|
||||
mediumtext=String
|
||||
longtext=String
|
||||
date=Date
|
||||
datetime=Date
|
||||
timestamp=Date
|
||||
31
mallplus-admin/src/main/resources/logback-spring.xml
Normal file
31
mallplus-admin/src/main/resources/logback-spring.xml
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE configuration>
|
||||
<configuration>
|
||||
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
|
||||
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
|
||||
<!--应用名称-->
|
||||
<property name="APP_NAME" value="mallplus-admin"/>
|
||||
<!--日志文件保存路径-->
|
||||
<property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>
|
||||
<contextName>${APP_NAME}</contextName>
|
||||
<!--每天记录日志到文件appender-->
|
||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${FILE_LOG_PATTERN}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
<!--输出到logstash的appender-->
|
||||
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
|
||||
<destination>localhost:4560</destination>
|
||||
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
|
||||
</appender>
|
||||
<root level="INFO">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
<appender-ref ref="FILE"/>
|
||||
<appender-ref ref="LOGSTASH"/>
|
||||
</root>
|
||||
</configuration>
|
||||
57
mallplus-admin/src/main/resources/template/email/email.ftl
Normal file
57
mallplus-admin/src/main/resources/template/email/email.ftl
Normal file
@@ -0,0 +1,57 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<style>
|
||||
@page {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body style="margin: 0px;
|
||||
padding: 0px;
|
||||
font: 100% SimSun, Microsoft YaHei, Times New Roman, Verdana, Arial, Helvetica, sans-serif;
|
||||
color: #000;">
|
||||
<div style="height: auto;
|
||||
width: 820px;
|
||||
min-width: 820px;
|
||||
margin: 0 auto;
|
||||
margin-top: 20px;
|
||||
border: 1px solid #eee;">
|
||||
<div style="padding: 10px;padding-bottom: 0px;">
|
||||
<p style="margin-bottom: 10px;padding-bottom: 0px;">尊敬的用户,您好:</p>
|
||||
<p style="text-indent: 2em; margin-bottom: 10px;">您正在申请邮箱验证,您的验证码为:</p>
|
||||
<p style="text-align: center;
|
||||
font-family: Times New Roman;
|
||||
font-size: 22px;
|
||||
color: #C60024;
|
||||
padding: 20px 0px;
|
||||
margin-bottom: 10px;
|
||||
font-weight: bold;
|
||||
background: #ebebeb;">${code}</p>
|
||||
<div style="list-style: none;
|
||||
margin-top: 22px;
|
||||
maigin-bottom: 10px;
|
||||
font-size: 14px;
|
||||
color: #555;">
|
||||
<p style="line-height: 12px;">Github:<a hover="color: #DA251D;" style="color: #999;"
|
||||
href="https://github.com/elunez/eladmin" target="_blank">https://github.com/elunez/eladmin</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="foot-hr hr" style="margin: 0 auto;
|
||||
z-index: 111;
|
||||
width: 800px;
|
||||
margin-top: 30px;
|
||||
border-top: 1px solid #DA251D;">
|
||||
</div>
|
||||
<div style="text-align: center;
|
||||
font-size: 12px;
|
||||
padding: 20px 0px;
|
||||
font-family: Microsoft YaHei;">
|
||||
Copyright ©${.now?string("yyyy")} EL-ADMIN 后台管理系统 All Rights Reserved.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,156 @@
|
||||
package ${package}.controller;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.zscat.mallplus.annotation.SysLog;
|
||||
import ${package}.entity.${className};
|
||||
import ${package}.service.I${className}Service;
|
||||
import com.zscat.mallplus.util.EasyPoiUtils;
|
||||
import com.zscat.mallplus.utils.CommonResult;
|
||||
import com.zscat.mallplus.utils.ValidatorUtils;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author ${author}
|
||||
* @date ${date}
|
||||
* ${prefix}
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/${moduleName}/${changeClassName}")
|
||||
public class ${className}Controller {
|
||||
|
||||
@Resource
|
||||
private I${className}Service I${className}Service;
|
||||
|
||||
@SysLog(MODULE = "${moduleName}", REMARK = "根据条件查询所有${prefix}列表")
|
||||
@ApiOperation("根据条件查询所有${prefix}列表")
|
||||
@GetMapping(value = "/list")
|
||||
@PreAuthorize("hasAuthority('${moduleName}:${changeClassName}:read')")
|
||||
public Object get${className}ByPage(${className} entity,
|
||||
@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize
|
||||
) {
|
||||
try {
|
||||
return new CommonResult().success(I${className}Service.page(new Page<${className}>(pageNum, pageSize), new QueryWrapper<>(entity)));
|
||||
} catch (Exception e) {
|
||||
log.error("根据条件查询所有${prefix}列表:%s", e.getMessage(), e);
|
||||
}
|
||||
return new CommonResult().failed();
|
||||
}
|
||||
|
||||
@SysLog(MODULE = "${moduleName}", REMARK = "保存${prefix}")
|
||||
@ApiOperation("保存${prefix}")
|
||||
@PostMapping(value = "/create")
|
||||
@PreAuthorize("hasAuthority('${moduleName}:${changeClassName}:create')")
|
||||
public Object save${className}(@RequestBody ${className} entity) {
|
||||
try {
|
||||
entity.setCreateTime(new Date());
|
||||
if (I${className}Service.save(entity)) {
|
||||
return new CommonResult().success();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("保存${prefix}:%s", e.getMessage(), e);
|
||||
return new CommonResult().failed(e.getMessage());
|
||||
}
|
||||
return new CommonResult().failed();
|
||||
}
|
||||
|
||||
@SysLog(MODULE = "${moduleName}", REMARK = "更新${prefix}")
|
||||
@ApiOperation("更新${prefix}")
|
||||
@PostMapping(value = "/update/{id}")
|
||||
@PreAuthorize("hasAuthority('${moduleName}:${changeClassName}:update')")
|
||||
public Object update${className}(@RequestBody ${className} entity) {
|
||||
try {
|
||||
if (I${className}Service.updateById(entity)) {
|
||||
return new CommonResult().success();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("更新${prefix}:%s", e.getMessage(), e);
|
||||
return new CommonResult().failed(e.getMessage());
|
||||
}
|
||||
return new CommonResult().failed();
|
||||
}
|
||||
|
||||
@SysLog(MODULE = "${moduleName}", REMARK = "删除${prefix}")
|
||||
@ApiOperation("删除${prefix}")
|
||||
@GetMapping(value = "/delete/{id}")
|
||||
@PreAuthorize("hasAuthority('${moduleName}:${changeClassName}:delete')")
|
||||
public Object delete${className}(@ApiParam("${prefix}id") @PathVariable Long id) {
|
||||
try {
|
||||
if (ValidatorUtils.empty(id)) {
|
||||
return new CommonResult().paramFailed("${prefix}id");
|
||||
}
|
||||
if (I${className}Service.removeById(id)) {
|
||||
return new CommonResult().success();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("删除${prefix}:%s", e.getMessage(), e);
|
||||
return new CommonResult().failed(e.getMessage());
|
||||
}
|
||||
return new CommonResult().failed();
|
||||
}
|
||||
|
||||
@SysLog(MODULE = "${moduleName}", REMARK = "给${prefix}分配${prefix}")
|
||||
@ApiOperation("查询${prefix}明细")
|
||||
@GetMapping(value = "/{id}")
|
||||
@PreAuthorize("hasAuthority('${moduleName}:${changeClassName}:read')")
|
||||
public Object get${className}ById(@ApiParam("${prefix}id") @PathVariable Long id) {
|
||||
try {
|
||||
if (ValidatorUtils.empty(id)) {
|
||||
return new CommonResult().paramFailed("${prefix}id");
|
||||
}
|
||||
${className} coupon = I${className}Service.getById(id);
|
||||
return new CommonResult().success(coupon);
|
||||
} catch (Exception e) {
|
||||
log.error("查询${prefix}明细:%s", e.getMessage(), e);
|
||||
return new CommonResult().failed();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ApiOperation(value = "批量删除${prefix}")
|
||||
@RequestMapping(value = "/delete/batch", method = RequestMethod.GET)
|
||||
@SysLog(MODULE = "${moduleName}", REMARK = "批量删除${prefix}")
|
||||
@PreAuthorize("hasAuthority('${moduleName}:${changeClassName}:delete')")
|
||||
public Object deleteBatch(@RequestParam("ids") List
|
||||
<Long> ids) {
|
||||
boolean count = I${className}Service.removeByIds(ids);
|
||||
if (count) {
|
||||
return new CommonResult().success(count);
|
||||
} else {
|
||||
return new CommonResult().failed();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@SysLog(MODULE = "${moduleName}", REMARK = "导出社区数据")
|
||||
@GetMapping("/exportExcel")
|
||||
public void export(HttpServletResponse response, ${className} entity) {
|
||||
// 模拟从数据库获取需要导出的数据
|
||||
List<${className}> personList = I${className}Service.list(new QueryWrapper<>(entity));
|
||||
// 导出操作
|
||||
EasyPoiUtils.exportExcel(personList, "导出社区数据", "社区数据", ${className}.class, "导出社区数据.xls", response);
|
||||
|
||||
}
|
||||
|
||||
@SysLog(MODULE = "${moduleName}", REMARK = "导入社区数据")
|
||||
@PostMapping("/importExcel")
|
||||
public void importUsers(@RequestParam MultipartFile file) {
|
||||
List<${className}> personList = EasyPoiUtils.importExcel(file, ${className}.class);
|
||||
I${className}Service.saveBatch(personList);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package ${package}.entity;
|
||||
|
||||
import lombok.Data;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.zscat.mallplus.utils.BaseEntity;
|
||||
import java.util.Date;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
<#if hasTimestamp>
|
||||
import java.sql.Timestamp;
|
||||
</#if>
|
||||
<#if hasBigDecimal>
|
||||
import java.math.BigDecimal;
|
||||
</#if>
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author ${author}
|
||||
* @date ${date}
|
||||
${prefix}
|
||||
*/
|
||||
@Data
|
||||
@TableName("${tableName}")
|
||||
public class ${className} extends BaseEntity implements Serializable {
|
||||
<#if columns??>
|
||||
<#list columns as column>
|
||||
|
||||
|
||||
<#if column.changeColumnName = 'id'>
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
</#if>
|
||||
<#if column.changeColumnName != 'id'>
|
||||
/**
|
||||
${column.columnComment}
|
||||
**/
|
||||
@TableField( "${column.columnName}")
|
||||
</#if>
|
||||
private ${column.columnType} ${column.changeColumnName};
|
||||
</#list>
|
||||
</#if>
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package ${package}.mapper;
|
||||
|
||||
|
||||
import ${package}.entity.${className};
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author ${author}
|
||||
* @date ${date}
|
||||
*/
|
||||
public interface ${className}Mapper extends BaseMapper<${className}> {
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package ${package}.service;
|
||||
|
||||
import ${package}.entity.${className};
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* @author ${author}
|
||||
* @date ${date}
|
||||
*/
|
||||
|
||||
public interface I${className}Service extends IService<${className}> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package ${package}.service.impl;
|
||||
|
||||
import ${package}.entity.${className};
|
||||
import ${package}.mapper.${className}Mapper;
|
||||
import ${package}.service.I${className}Service;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
/**
|
||||
* @author ${author}
|
||||
* @date ${date}
|
||||
*/
|
||||
@Service
|
||||
public class ${className}ServiceImpl extends ServiceImpl
|
||||
<${className}Mapper, ${className}> implements I${className}Service {
|
||||
|
||||
@Resource
|
||||
private ${className}Mapper ${changeClassName}Mapper;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
-- 菜单对应按钮SQL
|
||||
|
||||
insert into `sys_permission` ( `name`, `pid`, `status`, `sort`, `value`, `type`, `create_time`, `uri`, `icon`) values
|
||||
( '${prefix}列表', '47', '1', '0', '${moduleName}:${changeClassName}:read', '1', '2018-09-29 16:18:51', '${changeClassName}', 'fwb');
|
||||
insert into `sys_permission` ( `name`, `pid`, `status`, `sort`, `value`, `type`, `create_time`, `uri`, `icon`) values
|
||||
( '添加${prefix}', '47', '1', '0', '${moduleName}:${changeClassName}:create', '2', '2018-09-29 16:18:51', 'add${className}', 'fwb');
|
||||
insert into `sys_permission` ( `name`, `pid`, `status`, `sort`, `value`, `type`, `create_time`, `uri`, `icon`) values
|
||||
( '修改${prefix}', '47', '1', '0', '${moduleName}:${changeClassName}:update', '2', '2018-09-29 16:18:51', 'update${className}', null);
|
||||
insert into `sys_permission` ( `name`, `pid`, `status`, `sort`, `value`, `type`, `create_time`, `uri`, `icon`) values
|
||||
( '删除${prefix}', '47', '1', '0', '${moduleName}:${changeClassName}:delete', '2', '2018-09-29 16:18:51', 'delete${className}', null);
|
||||
|
||||
|
||||
{
|
||||
path: '${changeClassName}',
|
||||
name: '${changeClassName}',
|
||||
component: () => import('@/views/${moduleName}/${changeClassName}/index'),
|
||||
meta: {title: '${prefix}列表', icon: 'product-list'}
|
||||
},
|
||||
|
||||
{
|
||||
path: 'add${className}',
|
||||
name: 'add${className}',
|
||||
component: () => import('@/views/${moduleName}/${changeClassName}/add'),
|
||||
meta: {title: '添加${prefix}'},
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: 'update${className}',
|
||||
name: 'update${className}',
|
||||
component: () => import('@/views/${moduleName}/${changeClassName}/update'),
|
||||
meta: {title: '编辑${prefix}'},
|
||||
hidden: true
|
||||
},
|
||||
@@ -0,0 +1,16 @@
|
||||
<template>
|
||||
<${changeClassName}-detail :is-edit='false'>
|
||||
</${changeClassName}-detail>
|
||||
</template>
|
||||
<script>
|
||||
import ${className}Detail from './components/detail'
|
||||
|
||||
export default {
|
||||
name: 'add${className}',
|
||||
components: {${className}Detail}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
</style>
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url: '/${moduleName}/${changeClassName}/list',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
export function create${className}(data) {
|
||||
return request({
|
||||
url: '/${moduleName}/${changeClassName}/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function delete${className}(id) {
|
||||
return request({
|
||||
url: '/${moduleName}/${changeClassName}/delete/' + id,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function get${className}(id) {
|
||||
return request({
|
||||
url: '/${moduleName}/${changeClassName}/' + id,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function update${className}(id, data) {
|
||||
return request({
|
||||
url: '/${moduleName}/${changeClassName}/update/' + id,
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
<template>
|
||||
<el-card class="form-container" shadow="never">
|
||||
<el-form :model="${changeClassName}" :rules="rules" ref="${className}From" label-width="150px">
|
||||
|
||||
<#if columns??>
|
||||
<#list columns as column>
|
||||
|
||||
<el-form-item
|
||||
label="<#if column.columnComment != ''>${column.columnComment}<#else>${column.changeColumnName}</#if>"
|
||||
prop="${column.changeColumnName}">
|
||||
<el-input v-model="${changeClassName}.${column.changeColumnName}" style="width: 370px;"/>
|
||||
</el-form-item>
|
||||
|
||||
</#list>
|
||||
</#if>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="onSubmit('${className}From')">提交</el-button>
|
||||
<el-button v-if="!isEdit" @click="resetForm('${className}From')">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</template>
|
||||
<script>
|
||||
import {create${className}, get${className}, update${className}} from '@/api/${moduleName}/${changeClassName}'
|
||||
import SingleUpload from '@/components/Upload/singleUpload'
|
||||
|
||||
const default${className} = {
|
||||
name: ''
|
||||
};
|
||||
export default {
|
||||
name: '${className}Detail',
|
||||
components: {SingleUpload},
|
||||
props: {
|
||||
isEdit: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
${changeClassName}:
|
||||
Object.assign({},
|
||||
default${className}),
|
||||
rules: {
|
||||
name: [
|
||||
{required: true, message: '请输入品牌名称', trigger: 'blur'},
|
||||
{min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur'}
|
||||
],
|
||||
logo
|
||||
:
|
||||
[
|
||||
{required: true, message: '请输入品牌logo', trigger: 'blur'}
|
||||
],
|
||||
sort
|
||||
:
|
||||
[
|
||||
{type: 'number', message: '排序必须为数字'}
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
if (this.isEdit) {
|
||||
get${className}(this.$route.query.id).then(response => {
|
||||
this.${changeClassName} = response.data;
|
||||
})
|
||||
;
|
||||
} else {
|
||||
this.${changeClassName} = Object.assign({},
|
||||
default${className})
|
||||
;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onSubmit(formName) {
|
||||
this.$refs[formName].validate((valid) => {
|
||||
if(valid) {
|
||||
this.$confirm('是否提交数据', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
if(this.isEdit
|
||||
)
|
||||
{
|
||||
update${className}(this.$route.query.id, this.${changeClassName}).then(response => {
|
||||
if(response.code == 200
|
||||
)
|
||||
{
|
||||
this.$refs[formName].resetFields();
|
||||
this.$message({
|
||||
message: '修改成功',
|
||||
type: 'success',
|
||||
duration: 1000
|
||||
});
|
||||
this.$router.back();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.$message({
|
||||
message: response.msg,
|
||||
type: 'error',
|
||||
duration: 1000
|
||||
});
|
||||
}
|
||||
|
||||
})
|
||||
;
|
||||
}
|
||||
else
|
||||
{
|
||||
create${className}(this.${changeClassName}).then(response => {
|
||||
if(response.code == 200
|
||||
)
|
||||
{
|
||||
this.$refs[formName].resetFields();
|
||||
this.${changeClassName} = Object.assign({},
|
||||
default${className})
|
||||
;
|
||||
this.$message({
|
||||
message: '提交成功',
|
||||
type: 'success',
|
||||
duration: 1000
|
||||
});
|
||||
this.$router.back();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.$message({
|
||||
message: response.msg,
|
||||
type: 'error',
|
||||
duration: 1000
|
||||
});
|
||||
}
|
||||
|
||||
})
|
||||
;
|
||||
}
|
||||
})
|
||||
;
|
||||
|
||||
} else {
|
||||
this.$message({
|
||||
message: '验证失败',
|
||||
type: 'error',
|
||||
duration: 1000
|
||||
});
|
||||
return false;
|
||||
}
|
||||
})
|
||||
;
|
||||
},
|
||||
resetForm(formName) {
|
||||
this.$refs[formName].resetFields();
|
||||
this.${changeClassName} = Object.assign({},
|
||||
default${className})
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
</style>
|
||||
|
||||
|
||||
@@ -0,0 +1,242 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card class="filter-container" shadow="never">
|
||||
<div>
|
||||
<i class="el-icon-search"></i>
|
||||
<span>筛选搜索</span>
|
||||
<el-button
|
||||
style="float: right"
|
||||
@click="search${className}List()"
|
||||
type="primary"
|
||||
size="small">
|
||||
查询结果
|
||||
</el-button>
|
||||
</div>
|
||||
<div style="margin-top: 15px">
|
||||
<el-form :inline="true" :model="listQuery" size="small" label-width="140px">
|
||||
<el-form-item label="输入搜索:">
|
||||
<el-input style="width: 203px" v-model="listQuery.keyword" placeholder="类型名称/关键字"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="operate-container" shadow="never">
|
||||
<i class="el-icon-tickets"></i>
|
||||
<span>数据列表</span>
|
||||
<el-button
|
||||
class="btn-add"
|
||||
@click="add${className}()"
|
||||
size="mini">
|
||||
添加
|
||||
</el-button>
|
||||
</el-card>
|
||||
<div class="table-container">
|
||||
<el-table ref="${changeClassName}Table"
|
||||
:data="list"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelectionChange"
|
||||
v-loading="listLoading"
|
||||
border>
|
||||
<el-table-column type="selection" width="60" align="center"></el-table-column>
|
||||
|
||||
|
||||
<#if columns??>
|
||||
<#list columns as column>
|
||||
<#if column.columnShow = 'true'>
|
||||
|
||||
<el-table-column prop="${column.changeColumnName}"
|
||||
label="<#if column.columnComment != ''>${column.columnComment}<#else>${column.changeColumnName}</#if>">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.${column.changeColumnName} }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
|
||||
<el-table-column label="操作" width="200" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
@click="handleUpdate(scope.$index, scope.row)">编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="danger"
|
||||
@click="handleDelete(scope.$index, scope.row)">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="batch-operate-container">
|
||||
|
||||
</div>
|
||||
<div class="pagination-container">
|
||||
<el-pagination
|
||||
background
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
layout="total, sizes,prev, pager, next,jumper"
|
||||
:page-size="listQuery.pageSize"
|
||||
:page-sizes="[5,10,15]"
|
||||
:current-page.sync="listQuery.pageNum"
|
||||
:total="total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
//将$都替换为$
|
||||
import {fetchList, delete${className}} from '@/api/${moduleName}/${changeClassName}'
|
||||
import {formatDate} from '@/utils/date';
|
||||
|
||||
export default {
|
||||
name: '${changeClassName}List',
|
||||
data() {
|
||||
return {
|
||||
operates: [],
|
||||
operateType: null,
|
||||
listQuery: {
|
||||
keyword: null,
|
||||
pageNum: 1,
|
||||
pageSize: 10
|
||||
},
|
||||
list: null,
|
||||
total: null,
|
||||
listLoading: true,
|
||||
multipleSelection: []
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
filters: {
|
||||
formatCreateTime(time) {
|
||||
let date = new Date(time);
|
||||
return formatDate(date, 'yyyy-MM-dd hh:mm:ss')
|
||||
},
|
||||
|
||||
formatStatus(value) {
|
||||
if (value === 1) {
|
||||
return '未开始';
|
||||
} else if (value === 2) {
|
||||
return '活动中';
|
||||
} else if (value === 3) {
|
||||
return '已结束';
|
||||
} else if (value === 4) {
|
||||
return '已失效';
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.listLoading = true;
|
||||
fetchList(this.listQuery).then(response => {
|
||||
this.listLoading = false;
|
||||
this.list = response.data.records;
|
||||
this.total = response.data.total;
|
||||
this.totalPage = response.data.pages;
|
||||
this.pageSize = response.data.size;
|
||||
})
|
||||
;
|
||||
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.multipleSelection = val;
|
||||
},
|
||||
handleUpdate(index, row) {
|
||||
this.$router.push(
|
||||
{path: '/${moduleName}/update${className}', query: {id: row.id}})
|
||||
},
|
||||
handleDelete(index, row) {
|
||||
this.$confirm('是否要删除该类型', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
delete${className}(row.id
|
||||
).
|
||||
then(response => {
|
||||
this.$message({
|
||||
message: '删除成功',
|
||||
type: 'success',
|
||||
duration: 1000
|
||||
});
|
||||
this.getList();
|
||||
})
|
||||
;
|
||||
|
||||
})
|
||||
;
|
||||
|
||||
},
|
||||
|
||||
|
||||
handleSizeChange(val) {
|
||||
this.listQuery.pageNum = 1;
|
||||
this.listQuery.pageSize = val;
|
||||
this.getList();
|
||||
},
|
||||
handleCurrentChange(val) {
|
||||
this.listQuery.pageNum = val;
|
||||
this.getList();
|
||||
},
|
||||
search${className}List() {
|
||||
this.listQuery.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
handleBatchOperate() {
|
||||
console.log(this.multipleSelection);
|
||||
if (this.multipleSelection < 1) {
|
||||
this.$message({
|
||||
message: '请选择一条记录',
|
||||
type: 'warning',
|
||||
duration: 1000
|
||||
});
|
||||
return;
|
||||
}
|
||||
let showStatus = 0;
|
||||
if (this.operateType === 'show${className}') {
|
||||
showStatus = 1;
|
||||
} else if (this.operateType === 'hide${className}') {
|
||||
showStatus = 0;
|
||||
} else {
|
||||
this.$message({
|
||||
message: '请选择批量操作类型',
|
||||
type: 'warning',
|
||||
duration: 1000
|
||||
});
|
||||
return;
|
||||
}
|
||||
let ids = [];
|
||||
for (let i = 0; i < this.multipleSelection.length; i++) {
|
||||
ids.push(this.multipleSelection[i].id);
|
||||
}
|
||||
let data = new URLSearchParams();
|
||||
data.append("ids", ids);
|
||||
data.append("showStatus", showStatus);
|
||||
updateShowStatus(data).then(response => {
|
||||
this.getList();
|
||||
this.$message({
|
||||
message: '修改成功',
|
||||
type: 'success',
|
||||
duration: 1000
|
||||
});
|
||||
})
|
||||
;
|
||||
},
|
||||
add${className}() {
|
||||
//手动将router,改成$router
|
||||
this.$router.push({path: '/${moduleName}/add${className}'})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
小程序、H5及安卓App
|
||||
注册登录:获取昵称、头像,授权手机号注册登录;
|
||||
业主认证:与后台业务手机号匹配则自动通过认证;
|
||||
家庭成员或者租户绑定:注册绑定手机号后,选择房租户门号,提出申请,由业主审核通过后,通过认证;
|
||||
首页:轮播图、导航(社区公告、在线报修、物业缴费、联系物业)、热门商品列表
|
||||
社区公告:首次提示进入业主绑定,绑定后默认展示本社区的公告列表;
|
||||
在线报修:首次提示进入业主绑定,绑定后默认进入填写报修的流程;
|
||||
物业缴费:首次提示进入业主绑定,绑定后默认进入物业费缴纳界面;
|
||||
联系物业:点击拨打物业客服电话
|
||||
商品分类:商品分类展示,商品列表
|
||||
购物车:加入购物车、删除购物车商品、商品结算
|
||||
个人中心:个人信息、家庭成员(业主有此权限,对家庭成员及租户的账户进行添加绑定、审核、取消绑定等操作)、报修记录、缴费记录、我的订单(包括团购订单)、收货地址、客服电话
|
||||
商品详情页:展示轮播图、基本信息、商品规格、商品详情等
|
||||
商品购买:
|
||||
支持立即购买、加入购物车,
|
||||
支持优惠券(包括:满减、满赠等)
|
||||
支持社群团购(按社区为单位的团购,单个社区购买人数达标即可成团,不成团自动退款)
|
||||
订单结算:支持微信支付、银联云闪付、支持积分+现金的形式支付
|
||||
后台管理
|
||||
小区管理:对小区、楼/幢号、单元的管理,并可以设置小区所属的物业公司;
|
||||
房屋导入:按照设置的小区、楼/幢号、单元、户号的Excel列表导入导出;
|
||||
业主管理:对业主信息的管理,并关联到房屋的户号,支持Excel导入导出;
|
||||
报修管理:对业主报修的信息列表的查询,以及处理状态的管理;
|
||||
缴费项目管理:对缴费项目的管理,支持自定义缴费项目,比如物业费、停车费、公共维修金等;
|
||||
缴费优惠配置:对缴费赠送商城积分等的优惠设置;
|
||||
缴费单导入:按照Excel模板导入缴费单,支持按照房屋面积自动计算费用生成缴费单;
|
||||
缴费记录管理:对住户的缴费记录的查询;
|
||||
商品管理:商品的添加、编辑、上架、下架管理;
|
||||
商品分类管理:商品分类的管理;
|
||||
品牌管理:品牌信息的管理;
|
||||
优惠券管理:对商城的优惠券的发布下发消费等的管理;
|
||||
社群团购管理:对社群团购的发布,查看,统计等;
|
||||
订单管理:订单管理,包括全部、代付款、代发货、待收货、已完成、已取消订单状态;
|
||||
团购订单:对社群团购订单的管理;
|
||||
售后管理:对退换货流程的审批及管理;
|
||||
用户管理:对商城用户的管理;
|
||||
角色管理:对系统角色的管理,可以给角色分配功能权限及数据权限;
|
||||
菜单管理:对系统后台菜单的管理;
|
||||
日志管理:对系统的操作日志,交易日志的管理;
|
||||
物业公司管理:对物业公司基础信息进行管理,并可以设置物业公司所管辖的小区列表;
|
||||
数据权限分级:数据权限按 超级管理员、物业公司管理员、小区管理员三个角色级别,小区管理员只能查看本小区的数据,包括本小区业主的订单;物业公司管理员可以看到所管辖小区的数据;超级管理员可以查看所有数据。物业公司可以开通小区的账户,并对小区进行整体的管理。
|
||||
@@ -0,0 +1,16 @@
|
||||
<template>
|
||||
<${changeClassName}-detail :is-edit='true'>
|
||||
</${changeClassName}-detail>
|
||||
</template>
|
||||
<script>
|
||||
import ${className}Detail from './components/detail'
|
||||
|
||||
export default {
|
||||
name: 'update${className}',
|
||||
components: {${className}Detail}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
</style>
|
||||
|
||||
|
||||
36
mallplus-admin/src/main/resources/test
Normal file
36
mallplus-admin/src/main/resources/test
Normal file
@@ -0,0 +1,36 @@
|
||||
SELECT * FROM build_repair ;
|
||||
SELECT * FROM build_type_price;
|
||||
SELECT * FROM build_wuye_price;
|
||||
SELECT * FROM build_wuye_company;
|
||||
SELECT * FROM build_adv;
|
||||
SELECT * FROM build_apply_room;
|
||||
SELECT * FROM build_notice;
|
||||
SELECT * FROM build_group;
|
||||
SELECT * FROM build_group_member;
|
||||
|
||||
SELECT * FROM building_community;
|
||||
SELECT * FROM building_floor;
|
||||
SELECT * FROM building_unit;
|
||||
SELECT * FROM building_room;
|
||||
SELECT * FROM building_owner;
|
||||
|
||||
|
||||
|
||||
DELETE FROM build_repair ;
|
||||
DELETE FROM build_type_price;
|
||||
DELETE FROM build_wuye_price;
|
||||
DELETE FROM build_wuye_company;
|
||||
DELETE FROM build_adv;
|
||||
DELETE FROM build_apply_room;
|
||||
DELETE FROM build_notice;
|
||||
DELETE FROM build_group;
|
||||
DELETE FROM build_group_member;
|
||||
|
||||
DELETE FROM building_community;
|
||||
DELETE FROM building_floor;
|
||||
DELETE FROM building_unit;
|
||||
DELETE FROM building_room;
|
||||
DELETE FROM building_owner;
|
||||
|
||||
SELECT id,`name`,`status` from sys_store ;
|
||||
update pms_product set store_id=6,store_name='北京耳机专卖' where store_name is null
|
||||
Reference in New Issue
Block a user