高敬炎 il y a 2 ans
Parent
commit
a57b1c51d4
88 fichiers modifiés avec 8646 ajouts et 111 suppressions
  1. 59 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICardClassifyInfoService.java
  2. 59 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICardHolderInfoService.java
  3. 73 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICardManagementInfoService.java
  4. 59 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICertificateManagementInfoService.java
  5. 59 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICircleCardInfoService.java
  6. 61 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICircleManagementInfoService.java
  7. 69 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICommonUserInfoService.java
  8. 71 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/IPersonalHomepageInfoService.java
  9. 59 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ISearchRecordsInfoService.java
  10. 120 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CardClassifyInfoServiceImpl.java
  11. 120 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CardHolderInfoServiceImpl.java
  12. 162 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CardManagementInfoServiceImpl.java
  13. 120 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CertificateManagementInfoServiceImpl.java
  14. 120 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CircleCardInfoServiceImpl.java
  15. 126 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CircleManagementInfoServiceImpl.java
  16. 150 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CommonUserInfoServiceImpl.java
  17. 156 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/PersonalHomepageInfoServiceImpl.java
  18. 120 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/SearchRecordsInfoServiceImpl.java
  19. 73 0
      unimall-admin/src/api/card/cardClassifyInfo.js
  20. 73 0
      unimall-admin/src/api/card/cardHolderInfo.js
  21. 73 0
      unimall-admin/src/api/card/cardManagementInfo.js
  22. 73 0
      unimall-admin/src/api/card/certificateManagementInfo.js
  23. 73 0
      unimall-admin/src/api/card/circleCardInfo.js
  24. 73 0
      unimall-admin/src/api/card/circleManagementInfo.js
  25. 73 0
      unimall-admin/src/api/card/commonUserInfo.js
  26. 73 0
      unimall-admin/src/api/card/info.js
  27. 73 0
      unimall-admin/src/api/card/personalHomepageInfo.js
  28. 356 0
      unimall-admin/src/views/cardClassifyInfo/index.vue
  29. 359 0
      unimall-admin/src/views/cardHolderInfo/index.vue
  30. 459 0
      unimall-admin/src/views/cardManagementInfo/index.vue
  31. 1 1
      unimall-admin/src/views/case/index.vue
  32. 354 0
      unimall-admin/src/views/certificateManagementInfo/index.vue
  33. 358 0
      unimall-admin/src/views/circleCardInfo/index.vue
  34. 360 0
      unimall-admin/src/views/circleManagementInfo/index.vue
  35. 435 0
      unimall-admin/src/views/commonUserInfo/index.vue
  36. 417 0
      unimall-admin/src/views/personalHomepageInfo/index.vue
  37. 352 0
      unimall-admin/src/views/searchRecordsInfo/index.vue
  38. 4 0
      unimall-app/.hbuilderx/launch.json
  39. 74 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/CardClassifyInfo.java
  40. 80 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/CardHolderInfo.java
  41. 116 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/CardManagementInfo.java
  42. 74 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/CertificateManagementInfo.java
  43. 69 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/CircleCardInfo.java
  44. 80 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/CircleManagementInfo.java
  45. 104 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/CommonUserInfo.java
  46. 110 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/PersonalHomepageInfo.java
  47. 74 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/SearchRecordsInfo.java
  48. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CardClassifyInfoMapper.java
  49. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CardHolderInfoMapper.java
  50. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CardManagementInfoMapper.java
  51. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CertificateManagementInfoMapper.java
  52. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CircleCardInfoMapper.java
  53. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CircleManagementInfoMapper.java
  54. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CommonUserInfoMapper.java
  55. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/PersonalHomepageInfoMapper.java
  56. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/SearchRecordsInfoMapper.java
  57. 1 1
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/tools/gen/GenTableMapper.java
  58. 9 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CardClassifyInfoMapper.xml
  59. 9 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CardHolderInfoMapper.xml
  60. 9 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CardManagementInfoMapper.xml
  61. 9 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CertificateManagementInfoMapper.xml
  62. 9 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CircleCardInfoMapper.xml
  63. 9 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CircleManagementInfoMapper.xml
  64. 9 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CommonUserInfoMapper.xml
  65. 9 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/PersonalHomepageInfoMapper.xml
  66. 9 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/SearchRecordsInfoMapper.xml
  67. 24 24
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/tools/gen/GenTableColumnMapper.xml
  68. 52 52
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/tools/gen/GenTableMapper.xml
  69. 1 1
      unimall-launcher/src/main/java/com/iotechn/unimall/launcher/controller/CommonController.java
  70. 2 2
      unimall-launcher/src/main/resources/application.properties
  71. 4 0
      xiaochengxu/.hbuilderx/launch.json
  72. 143 0
      xiaochengxu/components/ossutil/base64.js
  73. 9 0
      xiaochengxu/components/ossutil/config.js
  74. 178 0
      xiaochengxu/components/ossutil/crypto.js
  75. 34 0
      xiaochengxu/components/ossutil/hmac.js
  76. 79 0
      xiaochengxu/components/ossutil/sha1.js
  77. 394 0
      xiaochengxu/components/ossutil/signature.js
  78. 86 0
      xiaochengxu/components/ossutil/uploadFile.js
  79. 11 2
      xiaochengxu/pages.json
  80. 106 5
      xiaochengxu/pages/mySet/myInfo.vue
  81. 19 0
      xiaochengxu/pages/mySet/newCard.vue
  82. 0 0
      xiaochengxu/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
  83. 0 0
      xiaochengxu/unpackage/dist/dev/.sourcemap/mp-weixin/pages/mySet/myInfo.js.map
  84. 2 1
      xiaochengxu/unpackage/dist/dev/mp-weixin/app.json
  85. 520 0
      xiaochengxu/unpackage/dist/dev/mp-weixin/common/vendor.js
  86. 123 19
      xiaochengxu/unpackage/dist/dev/mp-weixin/pages/mySet/myInfo.js
  87. 4 2
      xiaochengxu/unpackage/dist/dev/mp-weixin/pages/mySet/myInfo.json
  88. 0 1
      xiaochengxu/unpackage/dist/dev/mp-weixin/pages/mySet/myInfo.wxml

+ 59 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICardClassifyInfoService.java

@@ -0,0 +1,59 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+
+import com.iotechn.unimall.data.domain.unimall.CardClassifyInfo;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+
+/**
+ * 名片分类Service接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@HttpOpenApi(group = "admin.unimall.cardClassifyInfo", description = "名片分类")
+public interface ICardClassifyInfoService{
+	@HttpMethod(description = "新增", permission = "admin:unimall:cardClassifyInfo:add", permissionParentName = "宠物管理", permissionName = "名片分类管理")
+	public Boolean add(@NotNull @HttpParam(name = "cardClassifyInfo", type = HttpParamType.COMMON, description = "名片分类") CardClassifyInfo cardClassifyInfo,
+						   @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "列表", permission = "admin:unimall:cardClassifyInfo:list",permissionParentName = "宠物管理", permissionName = "名片分类管理")
+	public Page<CardClassifyInfo> list(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "circleName", type = HttpParamType.COMMON, description = "分类名称") String circleName,
+							@HttpParam(name = "topMarking", type = HttpParamType.COMMON, description = "置顶标识") Long topMarking,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+					@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+		@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+		throws ServiceException;
+
+	@HttpMethod(description = "删除", permission = "admin:unimall:cardClassifyInfo:delete",permissionParentName = "宠物管理", permissionName = "名片分类管理")
+	public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")String id)throws ServiceException;
+
+	@HttpMethod(description = "修改", permission = "admin:unimall:cardClassifyInfo:update",permissionParentName = "宠物管理", permissionName = "名片分类管理")
+	public Boolean update(@NotNull @HttpParam(name = "cardClassifyInfo", type = HttpParamType.COMMON, description = "名片分类") CardClassifyInfo cardClassifyInfo,
+						  @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "查询", permission = "admin:unimall:cardClassifyInfo:get",permissionParentName = "宠物管理", permissionName = "名片分类管理")
+	public CardClassifyInfo get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+	
+	@HttpMethod(description = "导出excl表", permission = "admin:unimall:cardClassifyInfo:export",permissionParentName = "宠物管理", permissionName = "名片分类管理")
+	public String export(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "circleName", type = HttpParamType.COMMON, description = "分类名称") String circleName,
+							@HttpParam(name = "topMarking", type = HttpParamType.COMMON, description = "置顶标识") Long topMarking,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+				@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+	@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)throws ServiceException;
+	
+}

+ 59 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICardHolderInfoService.java

@@ -0,0 +1,59 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+
+import com.iotechn.unimall.data.domain.unimall.CardHolderInfo;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+
+/**
+ * 名片夹Service接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@HttpOpenApi(group = "admin.unimall.cardHolderInfo", description = "名片夹")
+public interface ICardHolderInfoService{
+	@HttpMethod(description = "新增", permission = "admin:unimall:cardHolderInfo:add", permissionParentName = "宠物管理", permissionName = "名片夹管理")
+	public Boolean add(@NotNull @HttpParam(name = "cardHolderInfo", type = HttpParamType.COMMON, description = "名片夹") CardHolderInfo cardHolderInfo,
+						   @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "列表", permission = "admin:unimall:cardHolderInfo:list",permissionParentName = "宠物管理", permissionName = "名片夹管理")
+	public Page<CardHolderInfo> list(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "cardId", type = HttpParamType.COMMON, description = "名片id") String cardId,
+										@HttpParam(name = "classify", type = HttpParamType.COMMON, description = "客户分类") String classify,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+					@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+		@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+		throws ServiceException;
+
+	@HttpMethod(description = "删除", permission = "admin:unimall:cardHolderInfo:delete",permissionParentName = "宠物管理", permissionName = "名片夹管理")
+	public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")String id)throws ServiceException;
+
+	@HttpMethod(description = "修改", permission = "admin:unimall:cardHolderInfo:update",permissionParentName = "宠物管理", permissionName = "名片夹管理")
+	public Boolean update(@NotNull @HttpParam(name = "cardHolderInfo", type = HttpParamType.COMMON, description = "名片夹") CardHolderInfo cardHolderInfo,
+						  @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "查询", permission = "admin:unimall:cardHolderInfo:get",permissionParentName = "宠物管理", permissionName = "名片夹管理")
+	public CardHolderInfo get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+	
+	@HttpMethod(description = "导出excl表", permission = "admin:unimall:cardHolderInfo:export",permissionParentName = "宠物管理", permissionName = "名片夹管理")
+	public String export(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "cardId", type = HttpParamType.COMMON, description = "名片id") String cardId,
+										@HttpParam(name = "classify", type = HttpParamType.COMMON, description = "客户分类") String classify,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+				@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+	@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)throws ServiceException;
+	
+}

+ 73 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICardManagementInfoService.java

@@ -0,0 +1,73 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+
+import com.iotechn.unimall.data.domain.unimall.CardManagementInfo;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+
+/**
+ * 名片管理Service接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@HttpOpenApi(group = "admin.unimall.cardManagementInfo", description = "名片管理")
+public interface ICardManagementInfoService{
+	@HttpMethod(description = "新增", permission = "admin:unimall:cardManagementInfo:add", permissionParentName = "宠物管理", permissionName = "名片管理管理")
+	public Boolean add(@NotNull @HttpParam(name = "cardManagementInfo", type = HttpParamType.COMMON, description = "名片管理") CardManagementInfo cardManagementInfo,
+						   @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "列表", permission = "admin:unimall:cardManagementInfo:list",permissionParentName = "宠物管理", permissionName = "名片管理管理")
+	public Page<CardManagementInfo> list(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "cardBusiness", type = HttpParamType.COMMON, description = "名片标识") String cardBusiness,
+							@HttpParam(name = "name", type = HttpParamType.COMMON, description = "姓名") String name,
+							@HttpParam(name = "post", type = HttpParamType.COMMON, description = "职务") String post,
+							@HttpParam(name = "companyName", type = HttpParamType.COMMON, description = "公司名") String companyName,
+							@HttpParam(name = "location", type = HttpParamType.COMMON, description = "定位") String location,
+							@HttpParam(name = "detailedAddress", type = HttpParamType.COMMON, description = "详细地址") String detailedAddress,
+							@HttpParam(name = "phone", type = HttpParamType.COMMON, description = "联系电话") String phone,
+							@HttpParam(name = "headSculpture", type = HttpParamType.COMMON, description = "头像") String headSculpture,
+							@HttpParam(name = "qrCode", type = HttpParamType.COMMON, description = "二维码") String qrCode,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+					@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+		@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+		throws ServiceException;
+
+	@HttpMethod(description = "删除", permission = "admin:unimall:cardManagementInfo:delete",permissionParentName = "宠物管理", permissionName = "名片管理管理")
+	public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")String id)throws ServiceException;
+
+	@HttpMethod(description = "修改", permission = "admin:unimall:cardManagementInfo:update",permissionParentName = "宠物管理", permissionName = "名片管理管理")
+	public Boolean update(@NotNull @HttpParam(name = "cardManagementInfo", type = HttpParamType.COMMON, description = "名片管理") CardManagementInfo cardManagementInfo,
+						  @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "查询", permission = "admin:unimall:cardManagementInfo:get",permissionParentName = "宠物管理", permissionName = "名片管理管理")
+	public CardManagementInfo get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+	
+	@HttpMethod(description = "导出excl表", permission = "admin:unimall:cardManagementInfo:export",permissionParentName = "宠物管理", permissionName = "名片管理管理")
+	public String export(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "cardBusiness", type = HttpParamType.COMMON, description = "名片标识") String cardBusiness,
+							@HttpParam(name = "name", type = HttpParamType.COMMON, description = "姓名") String name,
+							@HttpParam(name = "post", type = HttpParamType.COMMON, description = "职务") String post,
+							@HttpParam(name = "companyName", type = HttpParamType.COMMON, description = "公司名") String companyName,
+							@HttpParam(name = "location", type = HttpParamType.COMMON, description = "定位") String location,
+							@HttpParam(name = "detailedAddress", type = HttpParamType.COMMON, description = "详细地址") String detailedAddress,
+							@HttpParam(name = "phone", type = HttpParamType.COMMON, description = "联系电话") String phone,
+							@HttpParam(name = "headSculpture", type = HttpParamType.COMMON, description = "头像") String headSculpture,
+							@HttpParam(name = "qrCode", type = HttpParamType.COMMON, description = "二维码") String qrCode,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+				@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+	@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)throws ServiceException;
+	
+}

+ 59 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICertificateManagementInfoService.java

@@ -0,0 +1,59 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+
+import com.iotechn.unimall.data.domain.unimall.CertificateManagementInfo;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+
+/**
+ * 证件管理Service接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@HttpOpenApi(group = "admin.unimall.certificateManagementInfo", description = "证件管理")
+public interface ICertificateManagementInfoService{
+	@HttpMethod(description = "新增", permission = "admin:unimall:certificateManagementInfo:add", permissionParentName = "宠物管理", permissionName = "证件管理管理")
+	public Boolean add(@NotNull @HttpParam(name = "certificateManagementInfo", type = HttpParamType.COMMON, description = "证件管理") CertificateManagementInfo certificateManagementInfo,
+						   @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "列表", permission = "admin:unimall:certificateManagementInfo:list",permissionParentName = "宠物管理", permissionName = "证件管理管理")
+	public Page<CertificateManagementInfo> list(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "certificateName", type = HttpParamType.COMMON, description = "证件名称") String certificateName,
+							@HttpParam(name = "certificateImage", type = HttpParamType.COMMON, description = "证件图") String certificateImage,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+					@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+		@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+		throws ServiceException;
+
+	@HttpMethod(description = "删除", permission = "admin:unimall:certificateManagementInfo:delete",permissionParentName = "宠物管理", permissionName = "证件管理管理")
+	public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")String id)throws ServiceException;
+
+	@HttpMethod(description = "修改", permission = "admin:unimall:certificateManagementInfo:update",permissionParentName = "宠物管理", permissionName = "证件管理管理")
+	public Boolean update(@NotNull @HttpParam(name = "certificateManagementInfo", type = HttpParamType.COMMON, description = "证件管理") CertificateManagementInfo certificateManagementInfo,
+						  @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "查询", permission = "admin:unimall:certificateManagementInfo:get",permissionParentName = "宠物管理", permissionName = "证件管理管理")
+	public CertificateManagementInfo get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+	
+	@HttpMethod(description = "导出excl表", permission = "admin:unimall:certificateManagementInfo:export",permissionParentName = "宠物管理", permissionName = "证件管理管理")
+	public String export(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "certificateName", type = HttpParamType.COMMON, description = "证件名称") String certificateName,
+							@HttpParam(name = "certificateImage", type = HttpParamType.COMMON, description = "证件图") String certificateImage,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+				@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+	@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)throws ServiceException;
+	
+}

+ 59 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICircleCardInfoService.java

@@ -0,0 +1,59 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+
+import com.iotechn.unimall.data.domain.unimall.CircleCardInfo;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+
+/**
+ * 圈子个人关系Service接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@HttpOpenApi(group = "admin.unimall.circleCardInfo", description = "圈子个人关系")
+public interface ICircleCardInfoService{
+	@HttpMethod(description = "新增", permission = "admin:unimall:circleCardInfo:add", permissionParentName = "宠物管理", permissionName = "圈子个人关系管理")
+	public Boolean add(@NotNull @HttpParam(name = "circleCardInfo", type = HttpParamType.COMMON, description = "圈子个人关系") CircleCardInfo circleCardInfo,
+						   @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "列表", permission = "admin:unimall:circleCardInfo:list",permissionParentName = "宠物管理", permissionName = "圈子个人关系管理")
+	public Page<CircleCardInfo> list(
+					@HttpParam(name = "comId", type = HttpParamType.COMMON, description = "圈子id") String comId,
+							@HttpParam(name = "identityId", type = HttpParamType.COMMON, description = "名片id") String identityId,
+							@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") String commonId,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+					@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+		@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+		throws ServiceException;
+
+	@HttpMethod(description = "删除", permission = "admin:unimall:circleCardInfo:delete",permissionParentName = "宠物管理", permissionName = "圈子个人关系管理")
+	public Boolean delete(@NotNull @HttpParam(name = "comId", type = HttpParamType.COMMON, description = "圈子id")String comId)throws ServiceException;
+
+	@HttpMethod(description = "修改", permission = "admin:unimall:circleCardInfo:update",permissionParentName = "宠物管理", permissionName = "圈子个人关系管理")
+	public Boolean update(@NotNull @HttpParam(name = "circleCardInfo", type = HttpParamType.COMMON, description = "圈子个人关系") CircleCardInfo circleCardInfo,
+						  @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "查询", permission = "admin:unimall:circleCardInfo:get",permissionParentName = "宠物管理", permissionName = "圈子个人关系管理")
+	public CircleCardInfo get(@NotNull @HttpParam(name = "comId", type = HttpParamType.COMMON, description = "圈子id")String comId)throws ServiceException;
+	
+	@HttpMethod(description = "导出excl表", permission = "admin:unimall:circleCardInfo:export",permissionParentName = "宠物管理", permissionName = "圈子个人关系管理")
+	public String export(
+					@HttpParam(name = "comId", type = HttpParamType.COMMON, description = "圈子id") String comId,
+							@HttpParam(name = "identityId", type = HttpParamType.COMMON, description = "名片id") String identityId,
+							@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") String commonId,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+				@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+	@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)throws ServiceException;
+	
+}

+ 61 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICircleManagementInfoService.java

@@ -0,0 +1,61 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+
+import com.iotechn.unimall.data.domain.unimall.CircleManagementInfo;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+
+/**
+ * 圈子管理Service接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@HttpOpenApi(group = "admin.unimall.circleManagementInfo", description = "圈子管理")
+public interface ICircleManagementInfoService{
+	@HttpMethod(description = "新增", permission = "admin:unimall:circleManagementInfo:add", permissionParentName = "宠物管理", permissionName = "圈子管理管理")
+	public Boolean add(@NotNull @HttpParam(name = "circleManagementInfo", type = HttpParamType.COMMON, description = "圈子管理") CircleManagementInfo circleManagementInfo,
+						   @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "列表", permission = "admin:unimall:circleManagementInfo:list",permissionParentName = "宠物管理", permissionName = "圈子管理管理")
+	public Page<CircleManagementInfo> list(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "circleName", type = HttpParamType.COMMON, description = "圈子名称") String circleName,
+							@HttpParam(name = "circleLabel", type = HttpParamType.COMMON, description = "圈子标签") String circleLabel,
+							@HttpParam(name = "status", type = HttpParamType.COMMON, description = "0未审核 1已通过") Long status,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+					@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+		@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+		throws ServiceException;
+
+	@HttpMethod(description = "删除", permission = "admin:unimall:circleManagementInfo:delete",permissionParentName = "宠物管理", permissionName = "圈子管理管理")
+	public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")String id)throws ServiceException;
+
+	@HttpMethod(description = "修改", permission = "admin:unimall:circleManagementInfo:update",permissionParentName = "宠物管理", permissionName = "圈子管理管理")
+	public Boolean update(@NotNull @HttpParam(name = "circleManagementInfo", type = HttpParamType.COMMON, description = "圈子管理") CircleManagementInfo circleManagementInfo,
+						  @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "查询", permission = "admin:unimall:circleManagementInfo:get",permissionParentName = "宠物管理", permissionName = "圈子管理管理")
+	public CircleManagementInfo get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+	
+	@HttpMethod(description = "导出excl表", permission = "admin:unimall:circleManagementInfo:export",permissionParentName = "宠物管理", permissionName = "圈子管理管理")
+	public String export(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "circleName", type = HttpParamType.COMMON, description = "圈子名称") String circleName,
+							@HttpParam(name = "circleLabel", type = HttpParamType.COMMON, description = "圈子标签") String circleLabel,
+							@HttpParam(name = "status", type = HttpParamType.COMMON, description = "0未审核 1已通过") Long status,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+				@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+	@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)throws ServiceException;
+	
+}

+ 69 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ICommonUserInfoService.java

@@ -0,0 +1,69 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+
+import com.iotechn.unimall.data.domain.unimall.CommonUserInfo;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+
+/**
+ * 用户管理Service接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@HttpOpenApi(group = "admin.unimall.commonUserInfo", description = "用户管理")
+public interface ICommonUserInfoService{
+	@HttpMethod(description = "新增", permission = "admin:unimall:commonUserInfo:add", permissionParentName = "宠物管理", permissionName = "用户管理管理")
+	public Boolean add(@NotNull @HttpParam(name = "commonUserInfo", type = HttpParamType.COMMON, description = "用户管理") CommonUserInfo commonUserInfo,
+						   @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "列表", permission = "admin:unimall:commonUserInfo:list",permissionParentName = "宠物管理", permissionName = "用户管理管理")
+	public Page<CommonUserInfo> list(
+								@HttpParam(name = "nickname", type = HttpParamType.COMMON, description = "昵称") String nickname,
+							@HttpParam(name = "password", type = HttpParamType.COMMON, description = "密码") String password,
+							@HttpParam(name = "phone", type = HttpParamType.COMMON, description = "手机号") String phone,
+							@HttpParam(name = "realname", type = HttpParamType.COMMON, description = "真实姓名") String realname,
+							@HttpParam(name = "shareCard", type = HttpParamType.COMMON, description = "允许他人分享名片(1允许)") Long shareCard,
+							@HttpParam(name = "lookPage", type = HttpParamType.COMMON, description = "允许圈子成员查看主页(1允许)") Long lookPage,
+							@HttpParam(name = "autoAccept", type = HttpParamType.COMMON, description = "自动接受邀请(1是)") Long autoAccept,
+							@HttpParam(name = "status", type = HttpParamType.COMMON, description = "0.冻结 1.激活") Long status,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+					@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+		@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+		throws ServiceException;
+
+	@HttpMethod(description = "删除", permission = "admin:unimall:commonUserInfo:delete",permissionParentName = "宠物管理", permissionName = "用户管理管理")
+	public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")String id)throws ServiceException;
+
+	@HttpMethod(description = "修改", permission = "admin:unimall:commonUserInfo:update",permissionParentName = "宠物管理", permissionName = "用户管理管理")
+	public Boolean update(@NotNull @HttpParam(name = "commonUserInfo", type = HttpParamType.COMMON, description = "用户管理") CommonUserInfo commonUserInfo,
+						  @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "查询", permission = "admin:unimall:commonUserInfo:get",permissionParentName = "宠物管理", permissionName = "用户管理管理")
+	public CommonUserInfo get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+	
+	@HttpMethod(description = "导出excl表", permission = "admin:unimall:commonUserInfo:export",permissionParentName = "宠物管理", permissionName = "用户管理管理")
+	public String export(
+								@HttpParam(name = "nickname", type = HttpParamType.COMMON, description = "昵称") String nickname,
+							@HttpParam(name = "password", type = HttpParamType.COMMON, description = "密码") String password,
+							@HttpParam(name = "phone", type = HttpParamType.COMMON, description = "手机号") String phone,
+							@HttpParam(name = "realname", type = HttpParamType.COMMON, description = "真实姓名") String realname,
+							@HttpParam(name = "shareCard", type = HttpParamType.COMMON, description = "允许他人分享名片(1允许)") Long shareCard,
+							@HttpParam(name = "lookPage", type = HttpParamType.COMMON, description = "允许圈子成员查看主页(1允许)") Long lookPage,
+							@HttpParam(name = "autoAccept", type = HttpParamType.COMMON, description = "自动接受邀请(1是)") Long autoAccept,
+							@HttpParam(name = "status", type = HttpParamType.COMMON, description = "0.冻结 1.激活") Long status,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+				@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+	@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)throws ServiceException;
+	
+}

+ 71 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/IPersonalHomepageInfoService.java

@@ -0,0 +1,71 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+
+import com.iotechn.unimall.data.domain.unimall.PersonalHomepageInfo;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+
+/**
+ * 个人主页Service接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@HttpOpenApi(group = "admin.unimall.personalHomepageInfo", description = "个人主页")
+public interface IPersonalHomepageInfoService{
+	@HttpMethod(description = "新增", permission = "admin:unimall:personalHomepageInfo:add", permissionParentName = "宠物管理", permissionName = "个人主页管理")
+	public Boolean add(@NotNull @HttpParam(name = "personalHomepageInfo", type = HttpParamType.COMMON, description = "个人主页") PersonalHomepageInfo personalHomepageInfo,
+						   @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "列表", permission = "admin:unimall:personalHomepageInfo:list",permissionParentName = "宠物管理", permissionName = "个人主页管理")
+	public Page<PersonalHomepageInfo> list(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "companyName", type = HttpParamType.COMMON, description = "公司名") String companyName,
+							@HttpParam(name = "companyIntroduction", type = HttpParamType.COMMON, description = "公司简介") String companyIntroduction,
+							@HttpParam(name = "scopeOfBusiness", type = HttpParamType.COMMON, description = "业务范围") String scopeOfBusiness,
+							@HttpParam(name = "companyAddress", type = HttpParamType.COMMON, description = "公司地址") String companyAddress,
+							@HttpParam(name = "phone", type = HttpParamType.COMMON, description = "联系电话") String phone,
+							@HttpParam(name = "portraiture", type = HttpParamType.COMMON, description = "传真") String portraiture,
+							@HttpParam(name = "postbox", type = HttpParamType.COMMON, description = "邮箱") String postbox,
+							@HttpParam(name = "addressUrl", type = HttpParamType.COMMON, description = "企业风采") String addressUrl,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+					@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+		@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+		throws ServiceException;
+
+	@HttpMethod(description = "删除", permission = "admin:unimall:personalHomepageInfo:delete",permissionParentName = "宠物管理", permissionName = "个人主页管理")
+	public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")String id)throws ServiceException;
+
+	@HttpMethod(description = "修改", permission = "admin:unimall:personalHomepageInfo:update",permissionParentName = "宠物管理", permissionName = "个人主页管理")
+	public Boolean update(@NotNull @HttpParam(name = "personalHomepageInfo", type = HttpParamType.COMMON, description = "个人主页") PersonalHomepageInfo personalHomepageInfo,
+						  @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "查询", permission = "admin:unimall:personalHomepageInfo:get",permissionParentName = "宠物管理", permissionName = "个人主页管理")
+	public PersonalHomepageInfo get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+	
+	@HttpMethod(description = "导出excl表", permission = "admin:unimall:personalHomepageInfo:export",permissionParentName = "宠物管理", permissionName = "个人主页管理")
+	public String export(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "companyName", type = HttpParamType.COMMON, description = "公司名") String companyName,
+							@HttpParam(name = "companyIntroduction", type = HttpParamType.COMMON, description = "公司简介") String companyIntroduction,
+							@HttpParam(name = "scopeOfBusiness", type = HttpParamType.COMMON, description = "业务范围") String scopeOfBusiness,
+							@HttpParam(name = "companyAddress", type = HttpParamType.COMMON, description = "公司地址") String companyAddress,
+							@HttpParam(name = "phone", type = HttpParamType.COMMON, description = "联系电话") String phone,
+							@HttpParam(name = "portraiture", type = HttpParamType.COMMON, description = "传真") String portraiture,
+							@HttpParam(name = "postbox", type = HttpParamType.COMMON, description = "邮箱") String postbox,
+							@HttpParam(name = "addressUrl", type = HttpParamType.COMMON, description = "企业风采") String addressUrl,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+				@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+	@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)throws ServiceException;
+	
+}

+ 59 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/ISearchRecordsInfoService.java

@@ -0,0 +1,59 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+
+import com.iotechn.unimall.data.domain.unimall.SearchRecordsInfo;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+
+/**
+ * 搜索记录Service接口
+ * 
+ * @author searchRecordsInfo
+ * @date 2023-04-10
+ */
+@HttpOpenApi(group = "admin.unimall.searchRecordsInfo", description = "搜索记录")
+public interface ISearchRecordsInfoService{
+	@HttpMethod(description = "新增", permission = "admin:unimall:searchRecordsInfo:add", permissionParentName = "宠物管理", permissionName = "搜索记录管理")
+	public Boolean add(@NotNull @HttpParam(name = "searchRecordsInfo", type = HttpParamType.COMMON, description = "搜索记录") SearchRecordsInfo searchRecordsInfo,
+						   @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "列表", permission = "admin:unimall:searchRecordsInfo:list",permissionParentName = "宠物管理", permissionName = "搜索记录管理")
+	public Page<SearchRecordsInfo> list(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "searchContent", type = HttpParamType.COMMON, description = "搜索内容") String searchContent,
+							@HttpParam(name = "functionType", type = HttpParamType.COMMON, description = "功能类型") String functionType,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+					@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+		@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+		throws ServiceException;
+
+	@HttpMethod(description = "删除", permission = "admin:unimall:searchRecordsInfo:delete",permissionParentName = "宠物管理", permissionName = "搜索记录管理")
+	public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")String id)throws ServiceException;
+
+	@HttpMethod(description = "修改", permission = "admin:unimall:searchRecordsInfo:update",permissionParentName = "宠物管理", permissionName = "搜索记录管理")
+	public Boolean update(@NotNull @HttpParam(name = "searchRecordsInfo", type = HttpParamType.COMMON, description = "搜索记录") SearchRecordsInfo searchRecordsInfo,
+						  @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "查询", permission = "admin:unimall:searchRecordsInfo:get",permissionParentName = "宠物管理", permissionName = "搜索记录管理")
+	public SearchRecordsInfo get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+	
+	@HttpMethod(description = "导出excl表", permission = "admin:unimall:searchRecordsInfo:export",permissionParentName = "宠物管理", permissionName = "搜索记录管理")
+	public String export(
+								@HttpParam(name = "commonId", type = HttpParamType.COMMON, description = "个人id") Long commonId,
+							@HttpParam(name = "searchContent", type = HttpParamType.COMMON, description = "搜索内容") String searchContent,
+							@HttpParam(name = "functionType", type = HttpParamType.COMMON, description = "功能类型") String functionType,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "删除标识") Long deleteFlag,
+				@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+	@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)throws ServiceException;
+	
+}

+ 120 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CardClassifyInfoServiceImpl.java

@@ -0,0 +1,120 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.unimall.CardClassifyInfoMapper;
+import com.iotechn.unimall.data.domain.unimall.CardClassifyInfo;
+import com.iotechn.unimall.admin.api.unimall.ICardClassifyInfoService;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 名片分类Service业务层处理
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Service
+public class CardClassifyInfoServiceImpl implements ICardClassifyInfoService{
+	@Autowired
+	private CardClassifyInfoMapper cardClassifyInfoMapper;
+	
+	@Override
+	public Boolean add(CardClassifyInfo cardClassifyInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		cardClassifyInfo.setGmtCreate(now);
+		cardClassifyInfo.setGmtUpdate(now);
+		cardClassifyInfo.setCommonId(adminId);
+		return cardClassifyInfoMapper.insert(cardClassifyInfo)>0;
+	}
+
+	@Override
+	public Page<CardClassifyInfo> list(Long commonId,String circleName,Long topMarking,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CardClassifyInfo> wrapper = new EntityWrapper<CardClassifyInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(circleName)) {
+					wrapper.eq("circle_name", circleName);
+				}
+												if (!StringUtils.isEmpty(topMarking)) {
+					wrapper.eq("top_marking", topMarking);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							wrapper.eq("delete_flag", 0);
+		List<CardClassifyInfo> list = cardClassifyInfoMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+		Integer count = cardClassifyInfoMapper.selectCount(wrapper);
+		return new Page<CardClassifyInfo>(list, page, limit, count);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean delete(String id) {
+		String[] ids = String.valueOf(id).split(",");
+		for (String tt:ids) {
+			CardClassifyInfo tmp =  cardClassifyInfoMapper.selectById(Long.parseLong(tt));
+			if(tmp != null){
+				tmp.setDeleteFlag(1l);
+				cardClassifyInfoMapper.updateById(tmp);
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public Boolean update(CardClassifyInfo cardClassifyInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		cardClassifyInfo.setGmtUpdate(now);
+		cardClassifyInfo.setCommonId(adminId);
+		return cardClassifyInfoMapper.updateById(cardClassifyInfo)>0;
+	}
+
+	@Override
+	public CardClassifyInfo get(Long id) throws ServiceException {
+		return cardClassifyInfoMapper.selectById(id);
+	}
+	
+	@Override
+	public String export(Long commonId,String circleName,Long topMarking,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CardClassifyInfo> wrapper = new EntityWrapper<CardClassifyInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(circleName)) {
+					wrapper.eq("circle_name", circleName);
+				}
+												if (!StringUtils.isEmpty(topMarking)) {
+					wrapper.eq("top_marking", topMarking);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							List<CardClassifyInfo> list = cardClassifyInfoMapper.selectList(wrapper);
+		ExcelUtil<CardClassifyInfo> util = new ExcelUtil<CardClassifyInfo>(CardClassifyInfo.class);
+		return util.exportExcel(list, "操作日志");
+	}
+}

+ 120 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CardHolderInfoServiceImpl.java

@@ -0,0 +1,120 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.unimall.CardHolderInfoMapper;
+import com.iotechn.unimall.data.domain.unimall.CardHolderInfo;
+import com.iotechn.unimall.admin.api.unimall.ICardHolderInfoService;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 名片夹Service业务层处理
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Service
+public class CardHolderInfoServiceImpl implements ICardHolderInfoService{
+	@Autowired
+	private CardHolderInfoMapper cardHolderInfoMapper;
+	
+	@Override
+	public Boolean add(CardHolderInfo cardHolderInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		cardHolderInfo.setGmtCreate(now);
+		cardHolderInfo.setGmtUpdate(now);
+		cardHolderInfo.setCommonId(adminId);
+		return cardHolderInfoMapper.insert(cardHolderInfo)>0;
+	}
+
+	@Override
+	public Page<CardHolderInfo> list(Long commonId,String cardId,String classify,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CardHolderInfo> wrapper = new EntityWrapper<CardHolderInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(cardId)) {
+					wrapper.eq("card_id", cardId);
+				}
+																	if (!StringUtils.isEmpty(classify)) {
+					wrapper.eq("classify", classify);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							wrapper.eq("delete_flag", 0);
+		List<CardHolderInfo> list = cardHolderInfoMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+		Integer count = cardHolderInfoMapper.selectCount(wrapper);
+		return new Page<CardHolderInfo>(list, page, limit, count);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean delete(String id) {
+		String[] ids = String.valueOf(id).split(",");
+		for (String tt:ids) {
+			CardHolderInfo tmp =  cardHolderInfoMapper.selectById(Long.parseLong(tt));
+			if(tmp != null){
+				tmp.setDeleteFlag(1l);
+				cardHolderInfoMapper.updateById(tmp);
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public Boolean update(CardHolderInfo cardHolderInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		cardHolderInfo.setGmtUpdate(now);
+		cardHolderInfo.setCommonId(adminId);
+		return cardHolderInfoMapper.updateById(cardHolderInfo)>0;
+	}
+
+	@Override
+	public CardHolderInfo get(Long id) throws ServiceException {
+		return cardHolderInfoMapper.selectById(id);
+	}
+	
+	@Override
+	public String export(Long commonId,String cardId,String classify,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CardHolderInfo> wrapper = new EntityWrapper<CardHolderInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(cardId)) {
+					wrapper.eq("card_id", cardId);
+				}
+																	if (!StringUtils.isEmpty(classify)) {
+					wrapper.eq("classify", classify);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							List<CardHolderInfo> list = cardHolderInfoMapper.selectList(wrapper);
+		ExcelUtil<CardHolderInfo> util = new ExcelUtil<CardHolderInfo>(CardHolderInfo.class);
+		return util.exportExcel(list, "操作日志");
+	}
+}

+ 162 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CardManagementInfoServiceImpl.java

@@ -0,0 +1,162 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.unimall.CardManagementInfoMapper;
+import com.iotechn.unimall.data.domain.unimall.CardManagementInfo;
+import com.iotechn.unimall.admin.api.unimall.ICardManagementInfoService;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 名片管理Service业务层处理
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Service
+public class CardManagementInfoServiceImpl implements ICardManagementInfoService{
+	@Autowired
+	private CardManagementInfoMapper cardManagementInfoMapper;
+	
+	@Override
+	public Boolean add(CardManagementInfo cardManagementInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		cardManagementInfo.setGmtCreate(now);
+		cardManagementInfo.setGmtUpdate(now);
+		cardManagementInfo.setCommonId(adminId);
+		return cardManagementInfoMapper.insert(cardManagementInfo)>0;
+	}
+
+	@Override
+	public Page<CardManagementInfo> list(Long commonId,String cardBusiness,String name,String post,String companyName,String location,String detailedAddress,String phone,String headSculpture,String qrCode,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CardManagementInfo> wrapper = new EntityWrapper<CardManagementInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(cardBusiness)) {
+					wrapper.eq("card_business", cardBusiness);
+				}
+												if (!StringUtils.isEmpty(name)) {
+					wrapper.eq("name", name);
+				}
+												if (!StringUtils.isEmpty(post)) {
+					wrapper.eq("post", post);
+				}
+												if (!StringUtils.isEmpty(companyName)) {
+					wrapper.eq("company_name", companyName);
+				}
+												if (!StringUtils.isEmpty(location)) {
+					wrapper.eq("location", location);
+				}
+												if (!StringUtils.isEmpty(detailedAddress)) {
+					wrapper.eq("detailed_address", detailedAddress);
+				}
+												if (!StringUtils.isEmpty(phone)) {
+					wrapper.eq("phone", phone);
+				}
+												if (!StringUtils.isEmpty(headSculpture)) {
+					wrapper.eq("head_sculpture", headSculpture);
+				}
+												if (!StringUtils.isEmpty(qrCode)) {
+					wrapper.eq("qr_code", qrCode);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							wrapper.eq("delete_flag", 0);
+		List<CardManagementInfo> list = cardManagementInfoMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+		Integer count = cardManagementInfoMapper.selectCount(wrapper);
+		return new Page<CardManagementInfo>(list, page, limit, count);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean delete(String id) {
+		String[] ids = String.valueOf(id).split(",");
+		for (String tt:ids) {
+			CardManagementInfo tmp =  cardManagementInfoMapper.selectById(Long.parseLong(tt));
+			if(tmp != null){
+				tmp.setDeleteFlag(1l);
+				cardManagementInfoMapper.updateById(tmp);
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public Boolean update(CardManagementInfo cardManagementInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		cardManagementInfo.setGmtUpdate(now);
+		cardManagementInfo.setCommonId(adminId);
+		return cardManagementInfoMapper.updateById(cardManagementInfo)>0;
+	}
+
+	@Override
+	public CardManagementInfo get(Long id) throws ServiceException {
+		return cardManagementInfoMapper.selectById(id);
+	}
+	
+	@Override
+	public String export(Long commonId,String cardBusiness,String name,String post,String companyName,String location,String detailedAddress,String phone,String headSculpture,String qrCode,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CardManagementInfo> wrapper = new EntityWrapper<CardManagementInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(cardBusiness)) {
+					wrapper.eq("card_business", cardBusiness);
+				}
+												if (!StringUtils.isEmpty(name)) {
+					wrapper.eq("name", name);
+				}
+												if (!StringUtils.isEmpty(post)) {
+					wrapper.eq("post", post);
+				}
+												if (!StringUtils.isEmpty(companyName)) {
+					wrapper.eq("company_name", companyName);
+				}
+												if (!StringUtils.isEmpty(location)) {
+					wrapper.eq("location", location);
+				}
+												if (!StringUtils.isEmpty(detailedAddress)) {
+					wrapper.eq("detailed_address", detailedAddress);
+				}
+												if (!StringUtils.isEmpty(phone)) {
+					wrapper.eq("phone", phone);
+				}
+												if (!StringUtils.isEmpty(headSculpture)) {
+					wrapper.eq("head_sculpture", headSculpture);
+				}
+												if (!StringUtils.isEmpty(qrCode)) {
+					wrapper.eq("qr_code", qrCode);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							List<CardManagementInfo> list = cardManagementInfoMapper.selectList(wrapper);
+		ExcelUtil<CardManagementInfo> util = new ExcelUtil<CardManagementInfo>(CardManagementInfo.class);
+		return util.exportExcel(list, "操作日志");
+	}
+}

+ 120 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CertificateManagementInfoServiceImpl.java

@@ -0,0 +1,120 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.unimall.CertificateManagementInfoMapper;
+import com.iotechn.unimall.data.domain.unimall.CertificateManagementInfo;
+import com.iotechn.unimall.admin.api.unimall.ICertificateManagementInfoService;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 证件管理Service业务层处理
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Service
+public class CertificateManagementInfoServiceImpl implements ICertificateManagementInfoService{
+	@Autowired
+	private CertificateManagementInfoMapper certificateManagementInfoMapper;
+	
+	@Override
+	public Boolean add(CertificateManagementInfo certificateManagementInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		certificateManagementInfo.setGmtCreate(now);
+		certificateManagementInfo.setGmtUpdate(now);
+		certificateManagementInfo.setCommonId(adminId);
+		return certificateManagementInfoMapper.insert(certificateManagementInfo)>0;
+	}
+
+	@Override
+	public Page<CertificateManagementInfo> list(Long commonId,String certificateName,String certificateImage,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CertificateManagementInfo> wrapper = new EntityWrapper<CertificateManagementInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(certificateName)) {
+					wrapper.eq("certificate_name", certificateName);
+				}
+												if (!StringUtils.isEmpty(certificateImage)) {
+					wrapper.eq("certificate_image", certificateImage);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							wrapper.eq("delete_flag", 0);
+		List<CertificateManagementInfo> list = certificateManagementInfoMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+		Integer count = certificateManagementInfoMapper.selectCount(wrapper);
+		return new Page<CertificateManagementInfo>(list, page, limit, count);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean delete(String id) {
+		String[] ids = String.valueOf(id).split(",");
+		for (String tt:ids) {
+			CertificateManagementInfo tmp =  certificateManagementInfoMapper.selectById(Long.parseLong(tt));
+			if(tmp != null){
+				tmp.setDeleteFlag(1l);
+				certificateManagementInfoMapper.updateById(tmp);
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public Boolean update(CertificateManagementInfo certificateManagementInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		certificateManagementInfo.setGmtUpdate(now);
+		certificateManagementInfo.setCommonId(adminId);
+		return certificateManagementInfoMapper.updateById(certificateManagementInfo)>0;
+	}
+
+	@Override
+	public CertificateManagementInfo get(Long id) throws ServiceException {
+		return certificateManagementInfoMapper.selectById(id);
+	}
+	
+	@Override
+	public String export(Long commonId,String certificateName,String certificateImage,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CertificateManagementInfo> wrapper = new EntityWrapper<CertificateManagementInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(certificateName)) {
+					wrapper.eq("certificate_name", certificateName);
+				}
+												if (!StringUtils.isEmpty(certificateImage)) {
+					wrapper.eq("certificate_image", certificateImage);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							List<CertificateManagementInfo> list = certificateManagementInfoMapper.selectList(wrapper);
+		ExcelUtil<CertificateManagementInfo> util = new ExcelUtil<CertificateManagementInfo>(CertificateManagementInfo.class);
+		return util.exportExcel(list, "操作日志");
+	}
+}

+ 120 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CircleCardInfoServiceImpl.java

@@ -0,0 +1,120 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.unimall.CircleCardInfoMapper;
+import com.iotechn.unimall.data.domain.unimall.CircleCardInfo;
+import com.iotechn.unimall.admin.api.unimall.ICircleCardInfoService;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 圈子个人关系Service业务层处理
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Service
+public class CircleCardInfoServiceImpl implements ICircleCardInfoService{
+	@Autowired
+	private CircleCardInfoMapper circleCardInfoMapper;
+	
+	@Override
+	public Boolean add(CircleCardInfo circleCardInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		circleCardInfo.setGmtCreate(now);
+		circleCardInfo.setGmtUpdate(now);
+		circleCardInfo.setCommonId(adminId);
+		return circleCardInfoMapper.insert(circleCardInfo)>0;
+	}
+
+	@Override
+	public Page<CircleCardInfo> list(String comId,String identityId,String commonId,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CircleCardInfo> wrapper = new EntityWrapper<CircleCardInfo>();
+									if (!StringUtils.isEmpty(comId)) {
+					wrapper.eq("com_id", comId);
+				}
+												if (!StringUtils.isEmpty(identityId)) {
+					wrapper.eq("identity_id", identityId);
+				}
+												if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							wrapper.eq("delete_flag", 0);
+		List<CircleCardInfo> list = circleCardInfoMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+		Integer count = circleCardInfoMapper.selectCount(wrapper);
+		return new Page<CircleCardInfo>(list, page, limit, count);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean delete(String comId) {
+		String[] ids = String.valueOf(comId).split(",");
+		for (String tt:ids) {
+			CircleCardInfo tmp =  circleCardInfoMapper.selectById(Long.parseLong(tt));
+			if(tmp != null){
+				tmp.setDeleteFlag(1l);
+				circleCardInfoMapper.updateById(tmp);
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public Boolean update(CircleCardInfo circleCardInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		circleCardInfo.setGmtUpdate(now);
+		circleCardInfo.setCommonId(adminId);
+		return circleCardInfoMapper.updateById(circleCardInfo)>0;
+	}
+
+	@Override
+	public CircleCardInfo get(String comId) throws ServiceException {
+		return circleCardInfoMapper.selectById(comId);
+	}
+	
+	@Override
+	public String export(String comId,String identityId,String commonId,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CircleCardInfo> wrapper = new EntityWrapper<CircleCardInfo>();
+									if (!StringUtils.isEmpty(comId)) {
+					wrapper.eq("com_id", comId);
+				}
+												if (!StringUtils.isEmpty(identityId)) {
+					wrapper.eq("identity_id", identityId);
+				}
+												if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							List<CircleCardInfo> list = circleCardInfoMapper.selectList(wrapper);
+		ExcelUtil<CircleCardInfo> util = new ExcelUtil<CircleCardInfo>(CircleCardInfo.class);
+		return util.exportExcel(list, "操作日志");
+	}
+}

+ 126 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CircleManagementInfoServiceImpl.java

@@ -0,0 +1,126 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.unimall.CircleManagementInfoMapper;
+import com.iotechn.unimall.data.domain.unimall.CircleManagementInfo;
+import com.iotechn.unimall.admin.api.unimall.ICircleManagementInfoService;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 圈子管理Service业务层处理
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Service
+public class CircleManagementInfoServiceImpl implements ICircleManagementInfoService{
+	@Autowired
+	private CircleManagementInfoMapper circleManagementInfoMapper;
+	
+	@Override
+	public Boolean add(CircleManagementInfo circleManagementInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		circleManagementInfo.setGmtCreate(now);
+		circleManagementInfo.setGmtUpdate(now);
+		circleManagementInfo.setCommonId(adminId);
+		return circleManagementInfoMapper.insert(circleManagementInfo)>0;
+	}
+
+	@Override
+	public Page<CircleManagementInfo> list(Long commonId,String circleName,String circleLabel,Long status,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CircleManagementInfo> wrapper = new EntityWrapper<CircleManagementInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(circleName)) {
+					wrapper.eq("circle_name", circleName);
+				}
+												if (!StringUtils.isEmpty(circleLabel)) {
+					wrapper.eq("circle_label", circleLabel);
+				}
+												if (!StringUtils.isEmpty(status)) {
+					wrapper.eq("status", status);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							wrapper.eq("delete_flag", 0);
+		List<CircleManagementInfo> list = circleManagementInfoMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+		Integer count = circleManagementInfoMapper.selectCount(wrapper);
+		return new Page<CircleManagementInfo>(list, page, limit, count);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean delete(String id) {
+		String[] ids = String.valueOf(id).split(",");
+		for (String tt:ids) {
+			CircleManagementInfo tmp =  circleManagementInfoMapper.selectById(Long.parseLong(tt));
+			if(tmp != null){
+				tmp.setDeleteFlag(1l);
+				circleManagementInfoMapper.updateById(tmp);
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public Boolean update(CircleManagementInfo circleManagementInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		circleManagementInfo.setGmtUpdate(now);
+		circleManagementInfo.setCommonId(adminId);
+		return circleManagementInfoMapper.updateById(circleManagementInfo)>0;
+	}
+
+	@Override
+	public CircleManagementInfo get(Long id) throws ServiceException {
+		return circleManagementInfoMapper.selectById(id);
+	}
+	
+	@Override
+	public String export(Long commonId,String circleName,String circleLabel,Long status,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CircleManagementInfo> wrapper = new EntityWrapper<CircleManagementInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(circleName)) {
+					wrapper.eq("circle_name", circleName);
+				}
+												if (!StringUtils.isEmpty(circleLabel)) {
+					wrapper.eq("circle_label", circleLabel);
+				}
+												if (!StringUtils.isEmpty(status)) {
+					wrapper.eq("status", status);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							List<CircleManagementInfo> list = circleManagementInfoMapper.selectList(wrapper);
+		ExcelUtil<CircleManagementInfo> util = new ExcelUtil<CircleManagementInfo>(CircleManagementInfo.class);
+		return util.exportExcel(list, "操作日志");
+	}
+}

+ 150 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/CommonUserInfoServiceImpl.java

@@ -0,0 +1,150 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.unimall.CommonUserInfoMapper;
+import com.iotechn.unimall.data.domain.unimall.CommonUserInfo;
+import com.iotechn.unimall.admin.api.unimall.ICommonUserInfoService;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 用户管理Service业务层处理
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Service
+public class CommonUserInfoServiceImpl implements ICommonUserInfoService{
+	@Autowired
+	private CommonUserInfoMapper commonUserInfoMapper;
+	
+	@Override
+	public Boolean add(CommonUserInfo commonUserInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		commonUserInfo.setGmtCreate(now);
+		commonUserInfo.setGmtUpdate(now);
+		commonUserInfo.setId(adminId);
+		return commonUserInfoMapper.insert(commonUserInfo)>0;
+	}
+
+	@Override
+	public Page<CommonUserInfo> list(String nickname,String password,String phone,String realname,Long shareCard,Long lookPage,Long autoAccept,Long status,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CommonUserInfo> wrapper = new EntityWrapper<CommonUserInfo>();
+														if (!StringUtils.isEmpty(nickname)) {
+					wrapper.eq("nickname", nickname);
+				}
+												if (!StringUtils.isEmpty(password)) {
+					wrapper.eq("password", password);
+				}
+												if (!StringUtils.isEmpty(phone)) {
+					wrapper.eq("phone", phone);
+				}
+												if (!StringUtils.isEmpty(realname)) {
+					wrapper.eq("realname", realname);
+				}
+												if (!StringUtils.isEmpty(shareCard)) {
+					wrapper.eq("share_card", shareCard);
+				}
+												if (!StringUtils.isEmpty(lookPage)) {
+					wrapper.eq("look_page", lookPage);
+				}
+												if (!StringUtils.isEmpty(autoAccept)) {
+					wrapper.eq("auto_accept", autoAccept);
+				}
+												if (!StringUtils.isEmpty(status)) {
+					wrapper.eq("status", status);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							wrapper.eq("delete_flag", 0);
+		List<CommonUserInfo> list = commonUserInfoMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+		Integer count = commonUserInfoMapper.selectCount(wrapper);
+		return new Page<CommonUserInfo>(list, page, limit, count);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean delete(String id) {
+		String[] ids = String.valueOf(id).split(",");
+		for (String tt:ids) {
+			CommonUserInfo tmp =  commonUserInfoMapper.selectById(Long.parseLong(tt));
+			if(tmp != null){
+				tmp.setDeleteFlag(1L);
+				commonUserInfoMapper.updateById(tmp);
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public Boolean update(CommonUserInfo commonUserInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		commonUserInfo.setGmtUpdate(now);
+		commonUserInfo.setId(adminId);
+		return commonUserInfoMapper.updateById(commonUserInfo)>0;
+	}
+
+	@Override
+	public CommonUserInfo get(Long id) throws ServiceException {
+		return commonUserInfoMapper.selectById(id);
+	}
+	
+	@Override
+	public String export(String nickname,String password,String phone,String realname,Long shareCard,Long lookPage,Long autoAccept,Long status,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<CommonUserInfo> wrapper = new EntityWrapper<CommonUserInfo>();
+														if (!StringUtils.isEmpty(nickname)) {
+					wrapper.eq("nickname", nickname);
+				}
+												if (!StringUtils.isEmpty(password)) {
+					wrapper.eq("password", password);
+				}
+												if (!StringUtils.isEmpty(phone)) {
+					wrapper.eq("phone", phone);
+				}
+												if (!StringUtils.isEmpty(realname)) {
+					wrapper.eq("realname", realname);
+				}
+												if (!StringUtils.isEmpty(shareCard)) {
+					wrapper.eq("share_card", shareCard);
+				}
+												if (!StringUtils.isEmpty(lookPage)) {
+					wrapper.eq("look_page", lookPage);
+				}
+												if (!StringUtils.isEmpty(autoAccept)) {
+					wrapper.eq("auto_accept", autoAccept);
+				}
+												if (!StringUtils.isEmpty(status)) {
+					wrapper.eq("status", status);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							List<CommonUserInfo> list = commonUserInfoMapper.selectList(wrapper);
+		ExcelUtil<CommonUserInfo> util = new ExcelUtil<CommonUserInfo>(CommonUserInfo.class);
+		return util.exportExcel(list, "操作日志");
+	}
+}

+ 156 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/PersonalHomepageInfoServiceImpl.java

@@ -0,0 +1,156 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.unimall.PersonalHomepageInfoMapper;
+import com.iotechn.unimall.data.domain.unimall.PersonalHomepageInfo;
+import com.iotechn.unimall.admin.api.unimall.IPersonalHomepageInfoService;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 个人主页Service业务层处理
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Service
+public class PersonalHomepageInfoServiceImpl implements IPersonalHomepageInfoService{
+	@Autowired
+	private PersonalHomepageInfoMapper personalHomepageInfoMapper;
+	
+	@Override
+	public Boolean add(PersonalHomepageInfo personalHomepageInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		personalHomepageInfo.setGmtCreate(now);
+		personalHomepageInfo.setGmtUpdate(now);
+		personalHomepageInfo.setCommonId(adminId);
+		return personalHomepageInfoMapper.insert(personalHomepageInfo)>0;
+	}
+
+	@Override
+	public Page<PersonalHomepageInfo> list(Long commonId,String companyName,String companyIntroduction,String scopeOfBusiness,String companyAddress,String phone,String portraiture,String postbox,String addressUrl,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<PersonalHomepageInfo> wrapper = new EntityWrapper<PersonalHomepageInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(companyName)) {
+					wrapper.eq("company_name", companyName);
+				}
+												if (!StringUtils.isEmpty(companyIntroduction)) {
+					wrapper.eq("company_introduction", companyIntroduction);
+				}
+												if (!StringUtils.isEmpty(scopeOfBusiness)) {
+					wrapper.eq("scope_of_business", scopeOfBusiness);
+				}
+												if (!StringUtils.isEmpty(companyAddress)) {
+					wrapper.eq("company_address", companyAddress);
+				}
+												if (!StringUtils.isEmpty(phone)) {
+					wrapper.eq("phone", phone);
+				}
+												if (!StringUtils.isEmpty(portraiture)) {
+					wrapper.eq("portraiture", portraiture);
+				}
+												if (!StringUtils.isEmpty(postbox)) {
+					wrapper.eq("postbox", postbox);
+				}
+												if (!StringUtils.isEmpty(addressUrl)) {
+					wrapper.eq("address_url", addressUrl);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							wrapper.eq("delete_flag", 0);
+		List<PersonalHomepageInfo> list = personalHomepageInfoMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+		Integer count = personalHomepageInfoMapper.selectCount(wrapper);
+		return new Page<PersonalHomepageInfo>(list, page, limit, count);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean delete(String id) {
+		String[] ids = String.valueOf(id).split(",");
+		for (String tt:ids) {
+			PersonalHomepageInfo tmp =  personalHomepageInfoMapper.selectById(Long.parseLong(tt));
+			if(tmp != null){
+				tmp.setDeleteFlag(1l);
+				personalHomepageInfoMapper.updateById(tmp);
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public Boolean update(PersonalHomepageInfo personalHomepageInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		personalHomepageInfo.setGmtUpdate(now);
+		personalHomepageInfo.setCommonId(adminId);
+		return personalHomepageInfoMapper.updateById(personalHomepageInfo)>0;
+	}
+
+	@Override
+	public PersonalHomepageInfo get(Long id) throws ServiceException {
+		return personalHomepageInfoMapper.selectById(id);
+	}
+	
+	@Override
+	public String export(Long commonId,String companyName,String companyIntroduction,String scopeOfBusiness,String companyAddress,String phone,String portraiture,String postbox,String addressUrl,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<PersonalHomepageInfo> wrapper = new EntityWrapper<PersonalHomepageInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(companyName)) {
+					wrapper.eq("company_name", companyName);
+				}
+												if (!StringUtils.isEmpty(companyIntroduction)) {
+					wrapper.eq("company_introduction", companyIntroduction);
+				}
+												if (!StringUtils.isEmpty(scopeOfBusiness)) {
+					wrapper.eq("scope_of_business", scopeOfBusiness);
+				}
+												if (!StringUtils.isEmpty(companyAddress)) {
+					wrapper.eq("company_address", companyAddress);
+				}
+												if (!StringUtils.isEmpty(phone)) {
+					wrapper.eq("phone", phone);
+				}
+												if (!StringUtils.isEmpty(portraiture)) {
+					wrapper.eq("portraiture", portraiture);
+				}
+												if (!StringUtils.isEmpty(postbox)) {
+					wrapper.eq("postbox", postbox);
+				}
+												if (!StringUtils.isEmpty(addressUrl)) {
+					wrapper.eq("address_url", addressUrl);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							List<PersonalHomepageInfo> list = personalHomepageInfoMapper.selectList(wrapper);
+		ExcelUtil<PersonalHomepageInfo> util = new ExcelUtil<PersonalHomepageInfo>(PersonalHomepageInfo.class);
+		return util.exportExcel(list, "操作日志");
+	}
+}

+ 120 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/card/impl/SearchRecordsInfoServiceImpl.java

@@ -0,0 +1,120 @@
+package com.iotechn.unimall.admin.api.unimall;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.unimall.SearchRecordsInfoMapper;
+import com.iotechn.unimall.data.domain.unimall.SearchRecordsInfo;
+import com.iotechn.unimall.admin.api.unimall.ISearchRecordsInfoService;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 搜索记录Service业务层处理
+ * 
+ * @author searchRecordsInfo
+ * @date 2023-04-10
+ */
+@Service
+public class SearchRecordsInfoServiceImpl implements ISearchRecordsInfoService{
+	@Autowired
+	private SearchRecordsInfoMapper searchRecordsInfoMapper;
+	
+	@Override
+	public Boolean add(SearchRecordsInfo searchRecordsInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		searchRecordsInfo.setGmtCreate(now);
+		searchRecordsInfo.setGmtUpdate(now);
+		searchRecordsInfo.setCommonId(adminId);
+		return searchRecordsInfoMapper.insert(searchRecordsInfo)>0;
+	}
+
+	@Override
+	public Page<SearchRecordsInfo> list(Long commonId,String searchContent,String functionType,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<SearchRecordsInfo> wrapper = new EntityWrapper<SearchRecordsInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(searchContent)) {
+					wrapper.eq("search_content", searchContent);
+				}
+												if (!StringUtils.isEmpty(functionType)) {
+					wrapper.eq("function_type", functionType);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							wrapper.eq("delete_flag", 0);
+		List<SearchRecordsInfo> list = searchRecordsInfoMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+		Integer count = searchRecordsInfoMapper.selectCount(wrapper);
+		return new Page<SearchRecordsInfo>(list, page, limit, count);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean delete(String id) {
+		String[] ids = String.valueOf(id).split(",");
+		for (String tt:ids) {
+			SearchRecordsInfo tmp =  searchRecordsInfoMapper.selectById(Long.parseLong(tt));
+			if(tmp != null){
+				tmp.setDeleteFlag(1l);
+				searchRecordsInfoMapper.updateById(tmp);
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public Boolean update(SearchRecordsInfo searchRecordsInfo,Long adminId) throws ServiceException {
+		Date now = new Date();
+		searchRecordsInfo.setGmtUpdate(now);
+		searchRecordsInfo.setCommonId(adminId);
+		return searchRecordsInfoMapper.updateById(searchRecordsInfo)>0;
+	}
+
+	@Override
+	public SearchRecordsInfo get(Long id) throws ServiceException {
+		return searchRecordsInfoMapper.selectById(id);
+	}
+	
+	@Override
+	public String export(Long commonId,String searchContent,String functionType,Date gmtCreate,Date gmtUpdate,Long deleteFlag, Integer page, Integer limit)throws ServiceException {
+		Wrapper<SearchRecordsInfo> wrapper = new EntityWrapper<SearchRecordsInfo>();
+														if (!StringUtils.isEmpty(commonId)) {
+					wrapper.eq("common_id", commonId);
+				}
+												if (!StringUtils.isEmpty(searchContent)) {
+					wrapper.eq("search_content", searchContent);
+				}
+												if (!StringUtils.isEmpty(functionType)) {
+					wrapper.eq("function_type", functionType);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+							List<SearchRecordsInfo> list = searchRecordsInfoMapper.selectList(wrapper);
+		ExcelUtil<SearchRecordsInfo> util = new ExcelUtil<SearchRecordsInfo>(SearchRecordsInfo.class);
+		return util.exportExcel(list, "操作日志");
+	}
+}

+ 73 - 0
unimall-admin/src/api/card/cardClassifyInfo.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询名片分类列表
+export function listCardClassifyInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.cardClassifyInfo',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询名片分类详细
+export function getCardClassifyInfo(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.cardClassifyInfo',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增名片分类
+export function addCardClassifyInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.cardClassifyInfo',
+      _mt: 'add',
+      cardClassifyInfo: data
+    }
+  })
+}
+
+// 修改名片分类
+export function updateCardClassifyInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.cardClassifyInfo',
+      _mt: 'update',
+      cardClassifyInfo: data
+    }
+  })
+}
+
+// 删除名片分类
+export function delCardClassifyInfo(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.cardClassifyInfo',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出名片分类
+export function exportCardClassifyInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.cardClassifyInfo',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/card/cardHolderInfo.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询名片夹列表
+export function listCardHolderInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.cardHolderInfo',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询名片夹详细
+export function getCardHolderInfo(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.cardHolderInfo',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增名片夹
+export function addCardHolderInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.cardHolderInfo',
+      _mt: 'add',
+      cardHolderInfo: data
+    }
+  })
+}
+
+// 修改名片夹
+export function updateCardHolderInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.cardHolderInfo',
+      _mt: 'update',
+      cardHolderInfo: data
+    }
+  })
+}
+
+// 删除名片夹
+export function delCardHolderInfo(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.cardHolderInfo',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出名片夹
+export function exportCardHolderInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.cardHolderInfo',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/card/cardManagementInfo.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询名片管理列表
+export function listCardManagementInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.cardManagementInfo',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询名片管理详细
+export function getCardManagementInfo(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.cardManagementInfo',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增名片管理
+export function addCardManagementInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.cardManagementInfo',
+      _mt: 'add',
+      cardManagementInfo: data
+    }
+  })
+}
+
+// 修改名片管理
+export function updateCardManagementInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.cardManagementInfo',
+      _mt: 'update',
+      cardManagementInfo: data
+    }
+  })
+}
+
+// 删除名片管理
+export function delCardManagementInfo(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.cardManagementInfo',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出名片管理
+export function exportCardManagementInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.cardManagementInfo',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/card/certificateManagementInfo.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询证件管理列表
+export function listCertificateManagementInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.certificateManagementInfo',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询证件管理详细
+export function getCertificateManagementInfo(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.certificateManagementInfo',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增证件管理
+export function addCertificateManagementInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.certificateManagementInfo',
+      _mt: 'add',
+      certificateManagementInfo: data
+    }
+  })
+}
+
+// 修改证件管理
+export function updateCertificateManagementInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.certificateManagementInfo',
+      _mt: 'update',
+      certificateManagementInfo: data
+    }
+  })
+}
+
+// 删除证件管理
+export function delCertificateManagementInfo(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.certificateManagementInfo',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出证件管理
+export function exportCertificateManagementInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.certificateManagementInfo',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/card/circleCardInfo.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询圈子个人关系列表
+export function listCircleCardInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.circleCardInfo',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询圈子个人关系详细
+export function getCircleCardInfo(comId) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.circleCardInfo',
+      _mt: 'get',
+      comId: comId
+    }
+  })
+}
+
+// 新增圈子个人关系
+export function addCircleCardInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.circleCardInfo',
+      _mt: 'add',
+      circleCardInfo: data
+    }
+  })
+}
+
+// 修改圈子个人关系
+export function updateCircleCardInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.circleCardInfo',
+      _mt: 'update',
+      circleCardInfo: data
+    }
+  })
+}
+
+// 删除圈子个人关系
+export function delCircleCardInfo(comId) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.circleCardInfo',
+      _mt: 'delete',
+      comId: comId
+    }
+  })
+}
+
+// 导出圈子个人关系
+export function exportCircleCardInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.circleCardInfo',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/card/circleManagementInfo.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询圈子管理列表
+export function listCircleManagementInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.circleManagementInfo',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询圈子管理详细
+export function getCircleManagementInfo(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.circleManagementInfo',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增圈子管理
+export function addCircleManagementInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.circleManagementInfo',
+      _mt: 'add',
+      circleManagementInfo: data
+    }
+  })
+}
+
+// 修改圈子管理
+export function updateCircleManagementInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.circleManagementInfo',
+      _mt: 'update',
+      circleManagementInfo: data
+    }
+  })
+}
+
+// 删除圈子管理
+export function delCircleManagementInfo(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.circleManagementInfo',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出圈子管理
+export function exportCircleManagementInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.circleManagementInfo',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/card/commonUserInfo.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询用户管理列表
+export function listCommonUserInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.commonUserInfo',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询用户管理详细
+export function getCommonUserInfo(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.commonUserInfo',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增用户管理
+export function addCommonUserInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.commonUserInfo',
+      _mt: 'add',
+      commonUserInfo: data
+    }
+  })
+}
+
+// 修改用户管理
+export function updateCommonUserInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.commonUserInfo',
+      _mt: 'update',
+      commonUserInfo: data
+    }
+  })
+}
+
+// 删除用户管理
+export function delCommonUserInfo(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.commonUserInfo',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出用户管理
+export function exportCommonUserInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.commonUserInfo',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/card/info.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询搜索记录列表
+export function listInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.searchRecordsInfo',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询搜索记录详细
+export function getInfo(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.searchRecordsInfo',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增搜索记录
+export function addInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.searchRecordsInfo',
+      _mt: 'add',
+      searchRecordsInfo: data
+    }
+  })
+}
+
+// 修改搜索记录
+export function updateInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.searchRecordsInfo',
+      _mt: 'update',
+      searchRecordsInfo: data
+    }
+  })
+}
+
+// 删除搜索记录
+export function delInfo(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.searchRecordsInfo',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出搜索记录
+export function exportInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.searchRecordsInfo',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/card/personalHomepageInfo.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询个人主页列表
+export function listPersonalHomepageInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.personalHomepageInfo',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询个人主页详细
+export function getPersonalHomepageInfo(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.personalHomepageInfo',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增个人主页
+export function addPersonalHomepageInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.personalHomepageInfo',
+      _mt: 'add',
+      personalHomepageInfo: data
+    }
+  })
+}
+
+// 修改个人主页
+export function updatePersonalHomepageInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.personalHomepageInfo',
+      _mt: 'update',
+      personalHomepageInfo: data
+    }
+  })
+}
+
+// 删除个人主页
+export function delPersonalHomepageInfo(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.personalHomepageInfo',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出个人主页
+export function exportPersonalHomepageInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.personalHomepageInfo',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 356 - 0
unimall-admin/src/views/cardClassifyInfo/index.vue

@@ -0,0 +1,356 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+      <el-form-item label="个人id" prop="commonId">
+        <el-input
+          v-model="queryParams.commonId"
+          placeholder="请输入个人id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="分类名称" prop="circleName">
+        <el-input
+          v-model="queryParams.circleName"
+          placeholder="请输入分类名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="置顶标识" prop="topMarking">
+        <el-input
+          v-model="queryParams.topMarking"
+          placeholder="请输入置顶标识"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtCreate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtUpdate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="删除标识" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入删除标识"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-permission="['unimall:cardClassifyInfo:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-permission="['unimall:cardClassifyInfo:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-permission="['unimall:cardClassifyInfo:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-permission="['unimall:cardClassifyInfo:export']"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="cardClassifyInfoList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="个人id" align="center" prop="commonId" />
+      <el-table-column label="分类名称" align="center" prop="circleName" />
+      <el-table-column label="置顶标识" align="center" prop="topMarking" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="删除标识" align="center" prop="deleteFlag" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-permission="['unimall:cardClassifyInfo:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-permission="['unimall:cardClassifyInfo:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改名片分类对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="个人id" prop="commonId">
+          <el-input v-model="form.commonId" placeholder="请输入个人id" />
+        </el-form-item>
+        <el-form-item label="分类名称" prop="circleName">
+          <el-input v-model="form.circleName" placeholder="请输入分类名称" />
+        </el-form-item>
+        <el-form-item label="置顶标识" prop="topMarking">
+          <el-input v-model="form.topMarking" placeholder="请输入置顶标识" />
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtCreate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtUpdate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="删除标识" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入删除标识" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCardClassifyInfo, getCardClassifyInfo, delCardClassifyInfo, addCardClassifyInfo, updateCardClassifyInfo, exportCardClassifyInfo } from "@/api/unimall/cardClassifyInfo";
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 名片分类表格数据
+      cardClassifyInfoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        commonId: undefined,
+        circleName: undefined,
+        topMarking: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        topMarking: [
+          { required: true, message: "置顶标识不能为空", trigger: "blur" }
+        ],        gmtCreate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        gmtUpdate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        deleteFlag: [
+          { required: true, message: "删除标识不能为空", trigger: "blur" }
+        ]      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询名片分类列表 */
+    getList() {
+      this.loading = true;
+      listCardClassifyInfo(this.queryParams).then(response => {
+        this.cardClassifyInfoList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        commonId: undefined,
+        circleName: undefined,
+        topMarking: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加名片分类";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids.join(',')
+      getCardClassifyInfo(id).then(response => {
+        this.form = response.data.data
+        this.open = true;
+        this.title = "修改名片分类";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateCardClassifyInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          } else {
+            addCardClassifyInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除名片分类编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delCardClassifyInfo(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有名片分类数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportCardClassifyInfo(queryParams);
+        }).then(response => {
+          this.download(response.data.data);
+        }).catch(function() {});
+    }
+  }
+};
+</script>

+ 359 - 0
unimall-admin/src/views/cardHolderInfo/index.vue

@@ -0,0 +1,359 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+      <el-form-item label="个人id" prop="commonId">
+        <el-input
+          v-model="queryParams.commonId"
+          placeholder="请输入个人id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="名片id" prop="cardId">
+        <el-input
+          v-model="queryParams.cardId"
+          placeholder="请输入名片id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="客户分类" prop="classify">
+        <el-input
+          v-model="queryParams.classify"
+          placeholder="请输入客户分类"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtCreate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtUpdate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="删除标识" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入删除标识"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-permission="['unimall:cardHolderInfo:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-permission="['unimall:cardHolderInfo:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-permission="['unimall:cardHolderInfo:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-permission="['unimall:cardHolderInfo:export']"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="cardHolderInfoList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="个人id" align="center" prop="commonId" />
+      <el-table-column label="名片id" align="center" prop="cardId" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="客户分类" align="center" prop="classify" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="删除标识" align="center" prop="deleteFlag" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-permission="['unimall:cardHolderInfo:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-permission="['unimall:cardHolderInfo:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改名片夹对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="个人id" prop="commonId">
+          <el-input v-model="form.commonId" placeholder="请输入个人id" />
+        </el-form-item>
+        <el-form-item label="名片id" prop="cardId">
+          <el-input v-model="form.cardId" placeholder="请输入名片id" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="客户分类" prop="classify">
+          <el-input v-model="form.classify" placeholder="请输入客户分类" />
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtCreate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtUpdate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="删除标识" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入删除标识" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCardHolderInfo, getCardHolderInfo, delCardHolderInfo, addCardHolderInfo, updateCardHolderInfo, exportCardHolderInfo } from "@/api/unimall/cardHolderInfo";
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 名片夹表格数据
+      cardHolderInfoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        commonId: undefined,
+        cardId: undefined,
+        classify: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        gmtCreate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        gmtUpdate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        deleteFlag: [
+          { required: true, message: "删除标识不能为空", trigger: "blur" }
+        ]      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询名片夹列表 */
+    getList() {
+      this.loading = true;
+      listCardHolderInfo(this.queryParams).then(response => {
+        this.cardHolderInfoList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        commonId: undefined,
+        cardId: undefined,
+        remark: undefined,
+        classify: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加名片夹";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids.join(',')
+      getCardHolderInfo(id).then(response => {
+        this.form = response.data.data
+        this.open = true;
+        this.title = "修改名片夹";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateCardHolderInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          } else {
+            addCardHolderInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除名片夹编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delCardHolderInfo(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有名片夹数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportCardHolderInfo(queryParams);
+        }).then(response => {
+          this.download(response.data.data);
+        }).catch(function() {});
+    }
+  }
+};
+</script>

+ 459 - 0
unimall-admin/src/views/cardManagementInfo/index.vue

@@ -0,0 +1,459 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+      <el-form-item label="个人id" prop="commonId">
+        <el-input
+          v-model="queryParams.commonId"
+          placeholder="请输入个人id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="名片标识" prop="cardBusiness">
+        <el-input
+          v-model="queryParams.cardBusiness"
+          placeholder="请输入名片标识"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="姓名" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入姓名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="职务" prop="post">
+        <el-input
+          v-model="queryParams.post"
+          placeholder="请输入职务"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="公司名" prop="companyName">
+        <el-input
+          v-model="queryParams.companyName"
+          placeholder="请输入公司名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="定位" prop="location">
+        <el-input
+          v-model="queryParams.location"
+          placeholder="请输入定位"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="详细地址" prop="detailedAddress">
+        <el-input
+          v-model="queryParams.detailedAddress"
+          placeholder="请输入详细地址"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="联系电话" prop="phone">
+        <el-input
+          v-model="queryParams.phone"
+          placeholder="请输入联系电话"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="头像" prop="headSculpture">
+        <el-input
+          v-model="queryParams.headSculpture"
+          placeholder="请输入头像"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="二维码" prop="qrCode">
+        <el-input
+          v-model="queryParams.qrCode"
+          placeholder="请输入二维码"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtCreate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtUpdate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="删除标识" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入删除标识"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-permission="['unimall:cardManagementInfo:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-permission="['unimall:cardManagementInfo:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-permission="['unimall:cardManagementInfo:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-permission="['unimall:cardManagementInfo:export']"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="cardManagementInfoList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="个人id" align="center" prop="commonId" />
+      <el-table-column label="名片标识" align="center" prop="cardBusiness" />
+      <el-table-column label="姓名" align="center" prop="name" />
+      <el-table-column label="职务" align="center" prop="post" />
+      <el-table-column label="公司名" align="center" prop="companyName" />
+      <el-table-column label="定位" align="center" prop="location" />
+      <el-table-column label="详细地址" align="center" prop="detailedAddress" />
+      <el-table-column label="联系电话" align="center" prop="phone" />
+      <el-table-column label="头像" align="center" prop="headSculpture" />
+      <el-table-column label="二维码" align="center" prop="qrCode" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="删除标识" align="center" prop="deleteFlag" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-permission="['unimall:cardManagementInfo:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-permission="['unimall:cardManagementInfo:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改名片管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="个人id" prop="commonId">
+          <el-input v-model="form.commonId" placeholder="请输入个人id" />
+        </el-form-item>
+        <el-form-item label="名片标识" prop="cardBusiness">
+          <el-input v-model="form.cardBusiness" placeholder="请输入名片标识" />
+        </el-form-item>
+        <el-form-item label="姓名" prop="name">
+          <el-input v-model="form.name" placeholder="请输入姓名" />
+        </el-form-item>
+        <el-form-item label="职务" prop="post">
+          <el-input v-model="form.post" placeholder="请输入职务" />
+        </el-form-item>
+        <el-form-item label="公司名" prop="companyName">
+          <el-input v-model="form.companyName" placeholder="请输入公司名" />
+        </el-form-item>
+        <el-form-item label="定位" prop="location">
+          <el-input v-model="form.location" placeholder="请输入定位" />
+        </el-form-item>
+        <el-form-item label="详细地址" prop="detailedAddress">
+          <el-input v-model="form.detailedAddress" placeholder="请输入详细地址" />
+        </el-form-item>
+        <el-form-item label="联系电话" prop="phone">
+          <el-input v-model="form.phone" placeholder="请输入联系电话" />
+        </el-form-item>
+        <el-form-item label="头像" prop="headSculpture">
+          <el-input v-model="form.headSculpture" placeholder="请输入头像" />
+        </el-form-item>
+        <el-form-item label="二维码" prop="qrCode">
+          <el-input v-model="form.qrCode" placeholder="请输入二维码" />
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtCreate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtUpdate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="删除标识" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入删除标识" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCardManagementInfo, getCardManagementInfo, delCardManagementInfo, addCardManagementInfo, updateCardManagementInfo, exportCardManagementInfo } from "@/api/unimall/cardManagementInfo";
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 名片管理表格数据
+      cardManagementInfoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        commonId: undefined,
+        cardBusiness: undefined,
+        name: undefined,
+        post: undefined,
+        companyName: undefined,
+        location: undefined,
+        detailedAddress: undefined,
+        phone: undefined,
+        headSculpture: undefined,
+        qrCode: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        gmtCreate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        gmtUpdate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        deleteFlag: [
+          { required: true, message: "删除标识不能为空", trigger: "blur" }
+        ]      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询名片管理列表 */
+    getList() {
+      this.loading = true;
+      listCardManagementInfo(this.queryParams).then(response => {
+        this.cardManagementInfoList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        commonId: undefined,
+        cardBusiness: undefined,
+        name: undefined,
+        post: undefined,
+        companyName: undefined,
+        location: undefined,
+        detailedAddress: undefined,
+        phone: undefined,
+        headSculpture: undefined,
+        qrCode: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加名片管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids.join(',')
+      getCardManagementInfo(id).then(response => {
+        this.form = response.data.data
+        this.open = true;
+        this.title = "修改名片管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateCardManagementInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          } else {
+            addCardManagementInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除名片管理编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delCardManagementInfo(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有名片管理数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportCardManagementInfo(queryParams);
+        }).then(response => {
+          this.download(response.data.data);
+        }).catch(function() {});
+    }
+  }
+};
+</script>

+ 1 - 1
unimall-admin/src/views/case/index.vue

@@ -119,7 +119,7 @@
 </template>
 
 <script>
-import { listCase, getCase, delCase, addCase, updateCase, exportCase } from "@/api/unimall/case";
+// import { listCase, getCase, delCase, addCase, updateCase, exportCase } from "@/api/unimall/case";
 
 export default {
   data() {

+ 354 - 0
unimall-admin/src/views/certificateManagementInfo/index.vue

@@ -0,0 +1,354 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+      <el-form-item label="个人id" prop="commonId">
+        <el-input
+          v-model="queryParams.commonId"
+          placeholder="请输入个人id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="证件名称" prop="certificateName">
+        <el-input
+          v-model="queryParams.certificateName"
+          placeholder="请输入证件名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="证件图" prop="certificateImage">
+        <el-input
+          v-model="queryParams.certificateImage"
+          placeholder="请输入证件图"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtCreate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtUpdate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="删除标识" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入删除标识"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-permission="['unimall:certificateManagementInfo:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-permission="['unimall:certificateManagementInfo:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-permission="['unimall:certificateManagementInfo:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-permission="['unimall:certificateManagementInfo:export']"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="certificateManagementInfoList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="个人id" align="center" prop="commonId" />
+      <el-table-column label="证件名称" align="center" prop="certificateName" />
+      <el-table-column label="证件图" align="center" prop="certificateImage" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="删除标识" align="center" prop="deleteFlag" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-permission="['unimall:certificateManagementInfo:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-permission="['unimall:certificateManagementInfo:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改证件管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="个人id" prop="commonId">
+          <el-input v-model="form.commonId" placeholder="请输入个人id" />
+        </el-form-item>
+        <el-form-item label="证件名称" prop="certificateName">
+          <el-input v-model="form.certificateName" placeholder="请输入证件名称" />
+        </el-form-item>
+        <el-form-item label="证件图" prop="certificateImage">
+          <el-input v-model="form.certificateImage" placeholder="请输入证件图" />
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtCreate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtUpdate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="删除标识" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入删除标识" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCertificateManagementInfo, getCertificateManagementInfo, delCertificateManagementInfo, addCertificateManagementInfo, updateCertificateManagementInfo, exportCertificateManagementInfo } from "@/api/unimall/certificateManagementInfo";
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 证件管理表格数据
+      certificateManagementInfoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        commonId: undefined,
+        certificateName: undefined,
+        certificateImage: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        gmtCreate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        gmtUpdate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        deleteFlag: [
+          { required: true, message: "删除标识不能为空", trigger: "blur" }
+        ]      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询证件管理列表 */
+    getList() {
+      this.loading = true;
+      listCertificateManagementInfo(this.queryParams).then(response => {
+        this.certificateManagementInfoList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        commonId: undefined,
+        certificateName: undefined,
+        certificateImage: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加证件管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids.join(',')
+      getCertificateManagementInfo(id).then(response => {
+        this.form = response.data.data
+        this.open = true;
+        this.title = "修改证件管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateCertificateManagementInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          } else {
+            addCertificateManagementInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除证件管理编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delCertificateManagementInfo(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有证件管理数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportCertificateManagementInfo(queryParams);
+        }).then(response => {
+          this.download(response.data.data);
+        }).catch(function() {});
+    }
+  }
+};
+</script>

+ 358 - 0
unimall-admin/src/views/circleCardInfo/index.vue

@@ -0,0 +1,358 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+      <el-form-item label="圈子id" prop="comId">
+        <el-input
+          v-model="queryParams.comId"
+          placeholder="请输入圈子id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="名片id" prop="identityId">
+        <el-input
+          v-model="queryParams.identityId"
+          placeholder="请输入名片id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="个人id" prop="commonId">
+        <el-input
+          v-model="queryParams.commonId"
+          placeholder="请输入个人id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtCreate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtUpdate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="删除标识" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入删除标识"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-permission="['unimall:circleCardInfo:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-permission="['unimall:circleCardInfo:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-permission="['unimall:circleCardInfo:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-permission="['unimall:circleCardInfo:export']"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="circleCardInfoList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="圈子id" align="center" prop="comId" />
+      <el-table-column label="名片id" align="center" prop="identityId" />
+      <el-table-column label="个人id" align="center" prop="commonId" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="删除标识" align="center" prop="deleteFlag" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-permission="['unimall:circleCardInfo:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-permission="['unimall:circleCardInfo:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改圈子个人关系对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="圈子id" prop="comId">
+          <el-input v-model="form.comId" placeholder="请输入圈子id" />
+        </el-form-item>
+        <el-form-item label="名片id" prop="identityId">
+          <el-input v-model="form.identityId" placeholder="请输入名片id" />
+        </el-form-item>
+        <el-form-item label="个人id" prop="commonId">
+          <el-input v-model="form.commonId" placeholder="请输入个人id" />
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtCreate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtUpdate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="删除标识" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入删除标识" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCircleCardInfo, getCircleCardInfo, delCircleCardInfo, addCircleCardInfo, updateCircleCardInfo, exportCircleCardInfo } from "@/api/unimall/circleCardInfo";
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 圈子个人关系表格数据
+      circleCardInfoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        comId: undefined,
+        identityId: undefined,
+        commonId: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        comId: [
+          { required: true, message: "圈子id不能为空", trigger: "blur" }
+        ],        identityId: [
+          { required: true, message: "名片id不能为空", trigger: "blur" }
+        ],        commonId: [
+          { required: true, message: "个人id不能为空", trigger: "blur" }
+        ],        gmtCreate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        gmtUpdate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        deleteFlag: [
+          { required: true, message: "删除标识不能为空", trigger: "blur" }
+        ]      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询圈子个人关系列表 */
+    getList() {
+      this.loading = true;
+      listCircleCardInfo(this.queryParams).then(response => {
+        this.circleCardInfoList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        comId: undefined,
+        identityId: undefined,
+        commonId: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.comId)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加圈子个人关系";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const comId = row.comId || this.ids.join(',')
+      getCircleCardInfo(comId).then(response => {
+        this.form = response.data.data
+        this.open = true;
+        this.title = "修改圈子个人关系";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.comId != undefined) {
+            updateCircleCardInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          } else {
+            addCircleCardInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const comIds = row.comId || this.ids.join(',')
+      this.$confirm('是否确认删除圈子个人关系编号为"' + comIds + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delCircleCardInfo(comIds);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有圈子个人关系数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportCircleCardInfo(queryParams);
+        }).then(response => {
+          this.download(response.data.data);
+        }).catch(function() {});
+    }
+  }
+};
+</script>

+ 360 - 0
unimall-admin/src/views/circleManagementInfo/index.vue

@@ -0,0 +1,360 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+      <el-form-item label="个人id" prop="commonId">
+        <el-input
+          v-model="queryParams.commonId"
+          placeholder="请输入个人id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="圈子名称" prop="circleName">
+        <el-input
+          v-model="queryParams.circleName"
+          placeholder="请输入圈子名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+        <el-form-item label="0未审核 1已通过" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择0未审核 1已通过" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtCreate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtUpdate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="删除标识" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入删除标识"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-permission="['unimall:circleManagementInfo:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-permission="['unimall:circleManagementInfo:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-permission="['unimall:circleManagementInfo:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-permission="['unimall:circleManagementInfo:export']"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="circleManagementInfoList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="个人id" align="center" prop="commonId" />
+      <el-table-column label="圈子名称" align="center" prop="circleName" />
+      <el-table-column label="圈子标签" align="center" prop="circleLabel" />
+      <el-table-column label="0未审核 1已通过" align="center" prop="status" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="删除标识" align="center" prop="deleteFlag" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-permission="['unimall:circleManagementInfo:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-permission="['unimall:circleManagementInfo:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改圈子管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="个人id" prop="commonId">
+          <el-input v-model="form.commonId" placeholder="请输入个人id" />
+        </el-form-item>
+        <el-form-item label="圈子名称" prop="circleName">
+          <el-input v-model="form.circleName" placeholder="请输入圈子名称" />
+        </el-form-item>
+        <el-form-item label="圈子标签" prop="circleLabel">
+          <el-input v-model="form.circleLabel" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="0未审核 1已通过">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtCreate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtUpdate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="删除标识" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入删除标识" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCircleManagementInfo, getCircleManagementInfo, delCircleManagementInfo, addCircleManagementInfo, updateCircleManagementInfo, exportCircleManagementInfo } from "@/api/unimall/circleManagementInfo";
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 圈子管理表格数据
+      circleManagementInfoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        commonId: undefined,
+        circleName: undefined,
+        circleLabel: undefined,
+        status: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        status: [
+          { required: true, message: "0未审核 1已通过不能为空", trigger: "blur" }
+        ],        gmtCreate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        gmtUpdate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        deleteFlag: [
+          { required: true, message: "删除标识不能为空", trigger: "blur" }
+        ]      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询圈子管理列表 */
+    getList() {
+      this.loading = true;
+      listCircleManagementInfo(this.queryParams).then(response => {
+        this.circleManagementInfoList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        commonId: undefined,
+        circleName: undefined,
+        circleLabel: undefined,
+        status: "0",
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加圈子管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids.join(',')
+      getCircleManagementInfo(id).then(response => {
+        this.form = response.data.data
+        this.open = true;
+        this.title = "修改圈子管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateCircleManagementInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          } else {
+            addCircleManagementInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除圈子管理编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delCircleManagementInfo(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有圈子管理数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportCircleManagementInfo(queryParams);
+        }).then(response => {
+          this.download(response.data.data);
+        }).catch(function() {});
+    }
+  }
+};
+</script>

+ 435 - 0
unimall-admin/src/views/commonUserInfo/index.vue

@@ -0,0 +1,435 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+      <el-form-item label="昵称" prop="nickname">
+        <el-input
+          v-model="queryParams.nickname"
+          placeholder="请输入昵称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="密码" prop="password">
+        <el-input
+          v-model="queryParams.password"
+          placeholder="请输入密码"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="手机号" prop="phone">
+        <el-input
+          v-model="queryParams.phone"
+          placeholder="请输入手机号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="真实姓名" prop="realname">
+        <el-input
+          v-model="queryParams.realname"
+          placeholder="请输入真实姓名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="允许他人分享名片(1允许)" prop="shareCard">
+        <el-input
+          v-model="queryParams.shareCard"
+          placeholder="请输入允许他人分享名片(1允许)"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="允许圈子成员查看主页(1允许)" prop="lookPage">
+        <el-input
+          v-model="queryParams.lookPage"
+          placeholder="请输入允许圈子成员查看主页(1允许)"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="自动接受邀请(1是)" prop="autoAccept">
+        <el-input
+          v-model="queryParams.autoAccept"
+          placeholder="请输入自动接受邀请(1是)"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+        <el-form-item label="0.冻结 1.激活" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择0.冻结 1.激活" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtCreate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtUpdate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="删除标识" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入删除标识"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-permission="['unimall:commonUserInfo:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-permission="['unimall:commonUserInfo:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-permission="['unimall:commonUserInfo:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-permission="['unimall:commonUserInfo:export']"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="commonUserInfoList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="昵称" align="center" prop="nickname" />
+      <el-table-column label="密码" align="center" prop="password" />
+      <el-table-column label="手机号" align="center" prop="phone" />
+      <el-table-column label="真实姓名" align="center" prop="realname" />
+      <el-table-column label="允许他人分享名片(1允许)" align="center" prop="shareCard" />
+      <el-table-column label="允许圈子成员查看主页(1允许)" align="center" prop="lookPage" />
+      <el-table-column label="自动接受邀请(1是)" align="center" prop="autoAccept" />
+      <el-table-column label="0.冻结 1.激活" align="center" prop="status" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="删除标识" align="center" prop="deleteFlag" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-permission="['unimall:commonUserInfo:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-permission="['unimall:commonUserInfo:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改用户管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="昵称" prop="nickname">
+          <el-input v-model="form.nickname" placeholder="请输入昵称" />
+        </el-form-item>
+        <el-form-item label="密码" prop="password">
+          <el-input v-model="form.password" placeholder="请输入密码" />
+        </el-form-item>
+        <el-form-item label="手机号" prop="phone">
+          <el-input v-model="form.phone" placeholder="请输入手机号" />
+        </el-form-item>
+        <el-form-item label="真实姓名" prop="realname">
+          <el-input v-model="form.realname" placeholder="请输入真实姓名" />
+        </el-form-item>
+        <el-form-item label="允许他人分享名片(1允许)" prop="shareCard">
+          <el-input v-model="form.shareCard" placeholder="请输入允许他人分享名片(1允许)" />
+        </el-form-item>
+        <el-form-item label="允许圈子成员查看主页(1允许)" prop="lookPage">
+          <el-input v-model="form.lookPage" placeholder="请输入允许圈子成员查看主页(1允许)" />
+        </el-form-item>
+        <el-form-item label="自动接受邀请(1是)" prop="autoAccept">
+          <el-input v-model="form.autoAccept" placeholder="请输入自动接受邀请(1是)" />
+        </el-form-item>
+        <el-form-item label="0.冻结 1.激活">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtCreate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtUpdate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="删除标识" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入删除标识" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCommonUserInfo, getCommonUserInfo, delCommonUserInfo, addCommonUserInfo, updateCommonUserInfo, exportCommonUserInfo } from "@/api/unimall/commonUserInfo";
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 用户管理表格数据
+      commonUserInfoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        nickname: undefined,
+        password: undefined,
+        phone: undefined,
+        realname: undefined,
+        shareCard: undefined,
+        lookPage: undefined,
+        autoAccept: undefined,
+        status: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        shareCard: [
+          { required: true, message: "允许他人分享名片(1允许)不能为空", trigger: "blur" }
+        ],        lookPage: [
+          { required: true, message: "允许圈子成员查看主页(1允许)不能为空", trigger: "blur" }
+        ],        autoAccept: [
+          { required: true, message: "自动接受邀请(1是)不能为空", trigger: "blur" }
+        ],        status: [
+          { required: true, message: "0.冻结 1.激活不能为空", trigger: "blur" }
+        ],        gmtCreate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        gmtUpdate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        deleteFlag: [
+          { required: true, message: "删除标识不能为空", trigger: "blur" }
+        ]      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询用户管理列表 */
+    getList() {
+      this.loading = true;
+      listCommonUserInfo(this.queryParams).then(response => {
+        this.commonUserInfoList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        nickname: undefined,
+        password: undefined,
+        phone: undefined,
+        realname: undefined,
+        shareCard: undefined,
+        lookPage: undefined,
+        autoAccept: undefined,
+        status: "0",
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加用户管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids.join(',')
+      getCommonUserInfo(id).then(response => {
+        this.form = response.data.data
+        this.open = true;
+        this.title = "修改用户管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateCommonUserInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          } else {
+            addCommonUserInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除用户管理编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delCommonUserInfo(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有用户管理数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportCommonUserInfo(queryParams);
+        }).then(response => {
+          this.download(response.data.data);
+        }).catch(function() {});
+    }
+  }
+};
+</script>

+ 417 - 0
unimall-admin/src/views/personalHomepageInfo/index.vue

@@ -0,0 +1,417 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+      <el-form-item label="个人id" prop="commonId">
+        <el-input
+          v-model="queryParams.commonId"
+          placeholder="请输入个人id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="公司名" prop="companyName">
+        <el-input
+          v-model="queryParams.companyName"
+          placeholder="请输入公司名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="公司地址" prop="companyAddress">
+        <el-input
+          v-model="queryParams.companyAddress"
+          placeholder="请输入公司地址"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="联系电话" prop="phone">
+        <el-input
+          v-model="queryParams.phone"
+          placeholder="请输入联系电话"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="传真" prop="portraiture">
+        <el-input
+          v-model="queryParams.portraiture"
+          placeholder="请输入传真"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="邮箱" prop="postbox">
+        <el-input
+          v-model="queryParams.postbox"
+          placeholder="请输入邮箱"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtCreate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtUpdate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="删除标识" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入删除标识"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-permission="['unimall:personalHomepageInfo:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-permission="['unimall:personalHomepageInfo:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-permission="['unimall:personalHomepageInfo:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-permission="['unimall:personalHomepageInfo:export']"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="personalHomepageInfoList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="个人id" align="center" prop="commonId" />
+      <el-table-column label="公司名" align="center" prop="companyName" />
+      <el-table-column label="公司简介" align="center" prop="companyIntroduction" />
+      <el-table-column label="业务范围" align="center" prop="scopeOfBusiness" />
+      <el-table-column label="公司地址" align="center" prop="companyAddress" />
+      <el-table-column label="联系电话" align="center" prop="phone" />
+      <el-table-column label="传真" align="center" prop="portraiture" />
+      <el-table-column label="邮箱" align="center" prop="postbox" />
+      <el-table-column label="企业风采" align="center" prop="addressUrl" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="删除标识" align="center" prop="deleteFlag" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-permission="['unimall:personalHomepageInfo:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-permission="['unimall:personalHomepageInfo:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改个人主页对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="个人id" prop="commonId">
+          <el-input v-model="form.commonId" placeholder="请输入个人id" />
+        </el-form-item>
+        <el-form-item label="公司名" prop="companyName">
+          <el-input v-model="form.companyName" placeholder="请输入公司名" />
+        </el-form-item>
+        <el-form-item label="公司简介" prop="companyIntroduction">
+          <el-input v-model="form.companyIntroduction" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="业务范围" prop="scopeOfBusiness">
+          <el-input v-model="form.scopeOfBusiness" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="公司地址" prop="companyAddress">
+          <el-input v-model="form.companyAddress" placeholder="请输入公司地址" />
+        </el-form-item>
+        <el-form-item label="联系电话" prop="phone">
+          <el-input v-model="form.phone" placeholder="请输入联系电话" />
+        </el-form-item>
+        <el-form-item label="传真" prop="portraiture">
+          <el-input v-model="form.portraiture" placeholder="请输入传真" />
+        </el-form-item>
+        <el-form-item label="邮箱" prop="postbox">
+          <el-input v-model="form.postbox" placeholder="请输入邮箱" />
+        </el-form-item>
+        <el-form-item label="企业风采" prop="addressUrl">
+          <el-input v-model="form.addressUrl" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtCreate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtUpdate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="删除标识" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入删除标识" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listPersonalHomepageInfo, getPersonalHomepageInfo, delPersonalHomepageInfo, addPersonalHomepageInfo, updatePersonalHomepageInfo, exportPersonalHomepageInfo } from "@/api/unimall/personalHomepageInfo";
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 个人主页表格数据
+      personalHomepageInfoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        commonId: undefined,
+        companyName: undefined,
+        companyIntroduction: undefined,
+        scopeOfBusiness: undefined,
+        companyAddress: undefined,
+        phone: undefined,
+        portraiture: undefined,
+        postbox: undefined,
+        addressUrl: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        gmtCreate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        gmtUpdate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        deleteFlag: [
+          { required: true, message: "删除标识不能为空", trigger: "blur" }
+        ]      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询个人主页列表 */
+    getList() {
+      this.loading = true;
+      listPersonalHomepageInfo(this.queryParams).then(response => {
+        this.personalHomepageInfoList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        commonId: undefined,
+        companyName: undefined,
+        companyIntroduction: undefined,
+        scopeOfBusiness: undefined,
+        companyAddress: undefined,
+        phone: undefined,
+        portraiture: undefined,
+        postbox: undefined,
+        addressUrl: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加个人主页";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids.join(',')
+      getPersonalHomepageInfo(id).then(response => {
+        this.form = response.data.data
+        this.open = true;
+        this.title = "修改个人主页";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updatePersonalHomepageInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          } else {
+            addPersonalHomepageInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除个人主页编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delPersonalHomepageInfo(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有个人主页数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportPersonalHomepageInfo(queryParams);
+        }).then(response => {
+          this.download(response.data.data);
+        }).catch(function() {});
+    }
+  }
+};
+</script>

+ 352 - 0
unimall-admin/src/views/searchRecordsInfo/index.vue

@@ -0,0 +1,352 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+      <el-form-item label="个人id" prop="commonId">
+        <el-input
+          v-model="queryParams.commonId"
+          placeholder="请输入个人id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="搜索内容" prop="searchContent">
+        <el-input
+          v-model="queryParams.searchContent"
+          placeholder="请输入搜索内容"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+        <el-form-item label="功能类型" prop="functionType">
+        <el-select v-model="queryParams.functionType" placeholder="请选择功能类型" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtCreate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.gmtUpdate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="删除标识" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入删除标识"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-permission="['unimall:info:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-permission="['unimall:info:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-permission="['unimall:info:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-permission="['unimall:info:export']"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="个人id" align="center" prop="commonId" />
+      <el-table-column label="搜索内容" align="center" prop="searchContent" />
+      <el-table-column label="功能类型" align="center" prop="functionType" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="删除标识" align="center" prop="deleteFlag" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-permission="['unimall:info:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-permission="['unimall:info:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改搜索记录对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="个人id" prop="commonId">
+          <el-input v-model="form.commonId" placeholder="请输入个人id" />
+        </el-form-item>
+        <el-form-item label="搜索内容" prop="searchContent">
+          <el-input v-model="form.searchContent" placeholder="请输入搜索内容" />
+        </el-form-item>
+        <el-form-item label="功能类型">
+          <el-select v-model="form.functionType" placeholder="请选择功能类型">
+            <el-option label="请选择字典生成" value="" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtCreate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtUpdate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="删除标识" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入删除标识" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listInfo, getInfo, delInfo, addInfo, updateInfo, exportInfo } from "@/api/unimall/info";
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 搜索记录表格数据
+      infoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        commonId: undefined,
+        searchContent: undefined,
+        functionType: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        gmtCreate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        gmtUpdate: [
+          { required: true, message: "不能为空", trigger: "blur" }
+        ],        deleteFlag: [
+          { required: true, message: "删除标识不能为空", trigger: "blur" }
+        ]      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询搜索记录列表 */
+    getList() {
+      this.loading = true;
+      listInfo(this.queryParams).then(response => {
+        this.infoList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        commonId: undefined,
+        searchContent: undefined,
+        functionType: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        deleteFlag: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加搜索记录";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids.join(',')
+      getInfo(id).then(response => {
+        this.form = response.data.data
+        this.open = true;
+        this.title = "修改搜索记录";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          } else {
+            addInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除搜索记录编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delInfo(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有搜索记录数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportInfo(queryParams);
+        }).then(response => {
+          this.download(response.data.data);
+        }).catch(function() {});
+    }
+  }
+};
+</script>

+ 4 - 0
unimall-app/.hbuilderx/launch.json

@@ -6,7 +6,11 @@
      	{
      		"launchtype" : "remote"
      	},
+<<<<<<< HEAD
      	"mp-weixin" : 
+=======
+     	"h5" : 
+>>>>>>> 72b62d44efc6e96b6d03a194caa0d8ee36cc31a5
      	{
      		"launchtype" : "remote"
      	},

+ 74 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/CardClassifyInfo.java

@@ -0,0 +1,74 @@
+package com.iotechn.unimall.data.domain.unimall;
+
+import com.iotechn.unimall.data.domain.SuperDO;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 名片分类对象 card_classify_info
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Data
+@TableName("card_classify_info")
+public class CardClassifyInfo extends SuperDO {
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /** 个人id */
+    @Excel(name = "个人id")
+    @TableField("common_id")
+    private Long commonId;
+
+    /** 分类名称 */
+    @Excel(name = "分类名称")
+    @TableField("circle_name")
+    private String circleName;
+
+    /** 置顶标识 */
+    @Excel(name = "置顶标识")
+    @TableField("top_marking")
+    private Long topMarking;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /** 删除标识 */
+    @Excel(name = "删除标识")
+    @TableField("delete_flag")
+    private Long deleteFlag;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("commonId", getCommonId())
+            .append("circleName", getCircleName())
+            .append("topMarking", getTopMarking())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("deleteFlag", getDeleteFlag())
+            .toString();
+    }
+}

+ 80 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/CardHolderInfo.java

@@ -0,0 +1,80 @@
+package com.iotechn.unimall.data.domain.unimall;
+
+import com.iotechn.unimall.data.domain.SuperDO;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 名片夹对象 card_holder_info
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Data
+@TableName("card_holder_info")
+public class CardHolderInfo extends SuperDO {
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /** 个人id */
+    @Excel(name = "个人id")
+    @TableField("common_id")
+    private Long commonId;
+
+    /** 名片id */
+    @Excel(name = "名片id")
+    @TableField("card_id")
+    private String cardId;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    @TableField("remark")
+    private String remark;
+
+    /** 客户分类 */
+    @Excel(name = "客户分类")
+    @TableField("classify")
+    private String classify;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /** 删除标识 */
+    @Excel(name = "删除标识")
+    @TableField("delete_flag")
+    private Long deleteFlag;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("commonId", getCommonId())
+            .append("cardId", getCardId())
+            .append("remark", getRemark())
+            .append("classify", getClassify())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("deleteFlag", getDeleteFlag())
+            .toString();
+    }
+}

+ 116 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/CardManagementInfo.java

@@ -0,0 +1,116 @@
+package com.iotechn.unimall.data.domain.unimall;
+
+import com.iotechn.unimall.data.domain.SuperDO;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 名片管理对象 card_management_info
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Data
+@TableName("card_management_info")
+public class CardManagementInfo extends SuperDO {
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /** 个人id */
+    @Excel(name = "个人id")
+    @TableField("common_id")
+    private Long commonId;
+
+    /** 名片标识 */
+    @Excel(name = "名片标识")
+    @TableField("card_business")
+    private String cardBusiness;
+
+    /** 姓名 */
+    @Excel(name = "姓名")
+    @TableField("name")
+    private String name;
+
+    /** 职务 */
+    @Excel(name = "职务")
+    @TableField("post")
+    private String post;
+
+    /** 公司名 */
+    @Excel(name = "公司名")
+    @TableField("company_name")
+    private String companyName;
+
+    /** 定位 */
+    @Excel(name = "定位")
+    @TableField("location")
+    private String location;
+
+    /** 详细地址 */
+    @Excel(name = "详细地址")
+    @TableField("detailed_address")
+    private String detailedAddress;
+
+    /** 联系电话 */
+    @Excel(name = "联系电话")
+    @TableField("phone")
+    private String phone;
+
+    /** 头像 */
+    @Excel(name = "头像")
+    @TableField("head_sculpture")
+    private String headSculpture;
+
+    /** 二维码 */
+    @Excel(name = "二维码")
+    @TableField("qr_code")
+    private String qrCode;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /** 删除标识 */
+    @Excel(name = "删除标识")
+    @TableField("delete_flag")
+    private Long deleteFlag;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("commonId", getCommonId())
+            .append("cardBusiness", getCardBusiness())
+            .append("name", getName())
+            .append("post", getPost())
+            .append("companyName", getCompanyName())
+            .append("location", getLocation())
+            .append("detailedAddress", getDetailedAddress())
+            .append("phone", getPhone())
+            .append("headSculpture", getHeadSculpture())
+            .append("qrCode", getQrCode())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("deleteFlag", getDeleteFlag())
+            .toString();
+    }
+}

+ 74 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/CertificateManagementInfo.java

@@ -0,0 +1,74 @@
+package com.iotechn.unimall.data.domain.unimall;
+
+import com.iotechn.unimall.data.domain.SuperDO;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 证件管理对象 certificate_management_info
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Data
+@TableName("certificate_management_info")
+public class CertificateManagementInfo extends SuperDO {
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /** 个人id */
+    @Excel(name = "个人id")
+    @TableField("common_id")
+    private Long commonId;
+
+    /** 证件名称 */
+    @Excel(name = "证件名称")
+    @TableField("certificate_name")
+    private String certificateName;
+
+    /** 证件图 */
+    @Excel(name = "证件图")
+    @TableField("certificate_image")
+    private String certificateImage;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /** 删除标识 */
+    @Excel(name = "删除标识")
+    @TableField("delete_flag")
+    private Long deleteFlag;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("commonId", getCommonId())
+            .append("certificateName", getCertificateName())
+            .append("certificateImage", getCertificateImage())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("deleteFlag", getDeleteFlag())
+            .toString();
+    }
+}

+ 69 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/CircleCardInfo.java

@@ -0,0 +1,69 @@
+package com.iotechn.unimall.data.domain.unimall;
+
+import com.iotechn.unimall.data.domain.SuperDO;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 圈子个人关系对象 circle_card_info
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Data
+@TableName("circle_card_info")
+public class CircleCardInfo extends SuperDO {
+    private static final long serialVersionUID = 1L;
+
+    /** 圈子id */
+    @Excel(name = "圈子id")
+    @TableField("com_id")
+    private String comId;
+
+    /** 名片id */
+    @Excel(name = "名片id")
+    @TableField("identity_id")
+    private String identityId;
+
+    /** 个人id */
+    @Excel(name = "个人id")
+    @TableField("common_id")
+    private Long commonId;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /** 删除标识 */
+    @Excel(name = "删除标识")
+    @TableField("delete_flag")
+    private Long deleteFlag;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("comId", getComId())
+            .append("identityId", getIdentityId())
+            .append("commonId", getCommonId())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("deleteFlag", getDeleteFlag())
+            .toString();
+    }
+}

+ 80 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/CircleManagementInfo.java

@@ -0,0 +1,80 @@
+package com.iotechn.unimall.data.domain.unimall;
+
+import com.iotechn.unimall.data.domain.SuperDO;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 圈子管理对象 circle_management_info
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Data
+@TableName("circle_management_info")
+public class CircleManagementInfo extends SuperDO {
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /** 个人id */
+    @Excel(name = "个人id")
+    @TableField("common_id")
+    private Long commonId;
+
+    /** 圈子名称 */
+    @Excel(name = "圈子名称")
+    @TableField("circle_name")
+    private String circleName;
+
+    /** 圈子标签 */
+    @Excel(name = "圈子标签")
+    @TableField("circle_label")
+    private String circleLabel;
+
+    /** 0未审核 1已通过 */
+    @Excel(name = "0未审核 1已通过")
+    @TableField("status")
+    private Long status;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /** 删除标识 */
+    @Excel(name = "删除标识")
+    @TableField("delete_flag")
+    private Long deleteFlag;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("commonId", getCommonId())
+            .append("circleName", getCircleName())
+            .append("circleLabel", getCircleLabel())
+            .append("status", getStatus())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("deleteFlag", getDeleteFlag())
+            .toString();
+    }
+}

+ 104 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/CommonUserInfo.java

@@ -0,0 +1,104 @@
+package com.iotechn.unimall.data.domain.unimall;
+
+import com.iotechn.unimall.data.domain.SuperDO;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 用户管理对象 common_user_info
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Data
+@TableName("common_user_info")
+public class CommonUserInfo extends SuperDO {
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /** 昵称 */
+    @Excel(name = "昵称")
+    @TableField("nickname")
+    private String nickname;
+
+    /** 密码 */
+    @Excel(name = "密码")
+    @TableField("password")
+    private String password;
+
+    /** 手机号 */
+    @Excel(name = "手机号")
+    @TableField("phone")
+    private String phone;
+
+    /** 真实姓名 */
+    @Excel(name = "真实姓名")
+    @TableField("realname")
+    private String realname;
+
+    /** 允许他人分享名片(1允许) */
+    @Excel(name = "允许他人分享名片(1允许)")
+    @TableField("share_card")
+    private Long shareCard;
+
+    /** 允许圈子成员查看主页(1允许) */
+    @Excel(name = "允许圈子成员查看主页(1允许)")
+    @TableField("look_page")
+    private Long lookPage;
+
+    /** 自动接受邀请(1是) */
+    @Excel(name = "自动接受邀请(1是)")
+    @TableField("auto_accept")
+    private Long autoAccept;
+
+    /** 0.冻结 1.激活 */
+    @Excel(name = "0.冻结 1.激活")
+    @TableField("status")
+    private Long status;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /** 删除标识 */
+    @Excel(name = "删除标识")
+    @TableField("delete_flag")
+    private Long deleteFlag;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("nickname", getNickname())
+            .append("password", getPassword())
+            .append("phone", getPhone())
+            .append("realname", getRealname())
+            .append("shareCard", getShareCard())
+            .append("lookPage", getLookPage())
+            .append("autoAccept", getAutoAccept())
+            .append("status", getStatus())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("deleteFlag", getDeleteFlag())
+            .toString();
+    }
+}

+ 110 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/PersonalHomepageInfo.java

@@ -0,0 +1,110 @@
+package com.iotechn.unimall.data.domain.unimall;
+
+import com.iotechn.unimall.data.domain.SuperDO;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 个人主页对象 personal_homepage_info
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+@Data
+@TableName("personal_homepage_info")
+public class PersonalHomepageInfo extends SuperDO {
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /** 个人id */
+    @Excel(name = "个人id")
+    @TableField("common_id")
+    private Long commonId;
+
+    /** 公司名 */
+    @Excel(name = "公司名")
+    @TableField("company_name")
+    private String companyName;
+
+    /** 公司简介 */
+    @Excel(name = "公司简介")
+    @TableField("company_introduction")
+    private String companyIntroduction;
+
+    /** 业务范围 */
+    @Excel(name = "业务范围")
+    @TableField("scope_of_business")
+    private String scopeOfBusiness;
+
+    /** 公司地址 */
+    @Excel(name = "公司地址")
+    @TableField("company_address")
+    private String companyAddress;
+
+    /** 联系电话 */
+    @Excel(name = "联系电话")
+    @TableField("phone")
+    private String phone;
+
+    /** 传真 */
+    @Excel(name = "传真")
+    @TableField("portraiture")
+    private String portraiture;
+
+    /** 邮箱 */
+    @Excel(name = "邮箱")
+    @TableField("postbox")
+    private String postbox;
+
+    /** 企业风采 */
+    @Excel(name = "企业风采")
+    @TableField("address_url")
+    private String addressUrl;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /** 删除标识 */
+    @Excel(name = "删除标识")
+    @TableField("delete_flag")
+    private Long deleteFlag;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("commonId", getCommonId())
+            .append("companyName", getCompanyName())
+            .append("companyIntroduction", getCompanyIntroduction())
+            .append("scopeOfBusiness", getScopeOfBusiness())
+            .append("companyAddress", getCompanyAddress())
+            .append("phone", getPhone())
+            .append("portraiture", getPortraiture())
+            .append("postbox", getPostbox())
+            .append("addressUrl", getAddressUrl())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("deleteFlag", getDeleteFlag())
+            .toString();
+    }
+}

+ 74 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/SearchRecordsInfo.java

@@ -0,0 +1,74 @@
+package com.iotechn.unimall.data.domain.unimall;
+
+import com.iotechn.unimall.data.domain.SuperDO;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 搜索记录对象 search_records_info
+ * 
+ * @author searchRecordsInfo
+ * @date 2023-04-10
+ */
+@Data
+@TableName("search_records_info")
+public class SearchRecordsInfo extends SuperDO {
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /** 个人id */
+    @Excel(name = "个人id")
+    @TableField("common_id")
+    private Long commonId;
+
+    /** 搜索内容 */
+    @Excel(name = "搜索内容")
+    @TableField("search_content")
+    private String searchContent;
+
+    /** 功能类型 */
+    @Excel(name = "功能类型")
+    @TableField("function_type")
+    private String functionType;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /** 删除标识 */
+    @Excel(name = "删除标识")
+    @TableField("delete_flag")
+    private Long deleteFlag;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("commonId", getCommonId())
+            .append("searchContent", getSearchContent())
+            .append("functionType", getFunctionType())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("deleteFlag", getDeleteFlag())
+            .toString();
+    }
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CardClassifyInfoMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.unimall;
+
+import com.iotechn.unimall.data.domain.unimall.CardClassifyInfo;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 名片分类Mapper接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+public interface CardClassifyInfoMapper extends BaseMapper<CardClassifyInfo>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CardHolderInfoMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.unimall;
+
+import com.iotechn.unimall.data.domain.unimall.CardHolderInfo;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 名片夹Mapper接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+public interface CardHolderInfoMapper extends BaseMapper<CardHolderInfo>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CardManagementInfoMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.unimall;
+
+import com.iotechn.unimall.data.domain.unimall.CardManagementInfo;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 名片管理Mapper接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+public interface CardManagementInfoMapper extends BaseMapper<CardManagementInfo>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CertificateManagementInfoMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.unimall;
+
+import com.iotechn.unimall.data.domain.unimall.CertificateManagementInfo;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 证件管理Mapper接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+public interface CertificateManagementInfoMapper extends BaseMapper<CertificateManagementInfo>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CircleCardInfoMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.unimall;
+
+import com.iotechn.unimall.data.domain.unimall.CircleCardInfo;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 圈子个人关系Mapper接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+public interface CircleCardInfoMapper extends BaseMapper<CircleCardInfo>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CircleManagementInfoMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.unimall;
+
+import com.iotechn.unimall.data.domain.unimall.CircleManagementInfo;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 圈子管理Mapper接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+public interface CircleManagementInfoMapper extends BaseMapper<CircleManagementInfo>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/CommonUserInfoMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.unimall;
+
+import com.iotechn.unimall.data.domain.unimall.CommonUserInfo;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 用户管理Mapper接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+public interface CommonUserInfoMapper extends BaseMapper<CommonUserInfo>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/PersonalHomepageInfoMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.unimall;
+
+import com.iotechn.unimall.data.domain.unimall.PersonalHomepageInfo;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 个人主页Mapper接口
+ * 
+ * @author jlb
+ * @date 2023-04-10
+ */
+public interface PersonalHomepageInfoMapper extends BaseMapper<PersonalHomepageInfo>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/SearchRecordsInfoMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.unimall;
+
+import com.iotechn.unimall.data.domain.unimall.SearchRecordsInfo;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 搜索记录Mapper接口
+ * 
+ * @author searchRecordsInfo
+ * @date 2023-04-10
+ */
+public interface SearchRecordsInfoMapper extends BaseMapper<SearchRecordsInfo>{
+
+}

+ 1 - 1
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/tools/gen/GenTableMapper.java

@@ -12,7 +12,7 @@ public interface GenTableMapper extends BaseMapper<GenTable>{
 	
 	/**
      * 查询据库列表
-     * 
+     *
      * @param tableNames 表名称组
      * @return 数据库表集合
      */

+ 9 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CardClassifyInfoMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.unimall.CardClassifyInfoMapper">
+    
+
+
+</mapper>

+ 9 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CardHolderInfoMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.unimall.CardHolderInfoMapper">
+    
+
+
+</mapper>

+ 9 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CardManagementInfoMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.unimall.CardManagementInfoMapper">
+    
+
+
+</mapper>

+ 9 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CertificateManagementInfoMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.unimall.CertificateManagementInfoMapper">
+    
+
+
+</mapper>

+ 9 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CircleCardInfoMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.unimall.CircleCardInfoMapper">
+    
+
+
+</mapper>

+ 9 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CircleManagementInfoMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.unimall.CircleManagementInfoMapper">
+    
+
+
+</mapper>

+ 9 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/CommonUserInfoMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.unimall.CommonUserInfoMapper">
+    
+
+
+</mapper>

+ 9 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/PersonalHomepageInfoMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.unimall.PersonalHomepageInfoMapper">
+    
+
+
+</mapper>

+ 9 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/SearchRecordsInfoMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.unimall.SearchRecordsInfoMapper">
+    
+
+
+</mapper>

+ 24 - 24
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/tools/gen/GenTableColumnMapper.xml

@@ -3,30 +3,30 @@
 <mapper
 	namespace="com.iotechn.unimall.data.mapper.tools.gen.GenTableColumnMapper">
 
-	<resultMap type="GenTableColumn" id="GenTableColumnResult">
-		<id property="columnId" column="column_id" />
-		<result property="tableId" column="table_id" />
-		<result property="columnName" column="column_name" />
-		<result property="columnComment" column="column_comment" />
-		<result property="columnType" column="column_type" />
-		<result property="javaType" column="java_type" />
-		<result property="javaField" column="java_field" />
-		<result property="isPk" column="is_pk" />
-		<result property="isIncrement" column="is_increment" />
-		<result property="isRequired" column="is_required" />
-		<result property="isInsert" column="is_insert" />
-		<result property="isEdit" column="is_edit" />
-		<result property="isList" column="is_list" />
-		<result property="isQuery" column="is_query" />
-		<result property="queryType" column="query_type" />
-		<result property="htmlType" column="html_type" />
-		<result property="dictType" column="dict_type" />
-		<result property="sort" column="sort" />
-		<result property="createBy" column="create_by" />
-		<result property="createTime" column="create_time" />
-		<result property="updateBy" column="update_by" />
-		<result property="updateTime" column="update_time" />
-	</resultMap>
+<!--	<resultMap type="GenTableColumn" id="GenTableColumnResult">-->
+<!--		<id property="columnId" column="column_id" />-->
+<!--		<result property="tableId" column="table_id" />-->
+<!--		<result property="columnName" column="column_name" />-->
+<!--		<result property="columnComment" column="column_comment" />-->
+<!--		<result property="columnType" column="column_type" />-->
+<!--		<result property="javaType" column="java_type" />-->
+<!--		<result property="javaField" column="java_field" />-->
+<!--		<result property="isPk" column="is_pk" />-->
+<!--		<result property="isIncrement" column="is_increment" />-->
+<!--		<result property="isRequired" column="is_required" />-->
+<!--		<result property="isInsert" column="is_insert" />-->
+<!--		<result property="isEdit" column="is_edit" />-->
+<!--		<result property="isList" column="is_list" />-->
+<!--		<result property="isQuery" column="is_query" />-->
+<!--		<result property="queryType" column="query_type" />-->
+<!--		<result property="htmlType" column="html_type" />-->
+<!--		<result property="dictType" column="dict_type" />-->
+<!--		<result property="sort" column="sort" />-->
+<!--		<result property="createBy" column="create_by" />-->
+<!--		<result property="createTime" column="create_time" />-->
+<!--		<result property="updateBy" column="update_by" />-->
+<!--		<result property="updateTime" column="update_time" />-->
+<!--	</resultMap>-->
 	<sql id="selectDictTypeVo">
 		SELECT
 		table_id AS tableId,

+ 52 - 52
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/tools/gen/IMarketCaseAppService.xml → unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/tools/gen/GenTableMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.iotechn.unimall.data.mapper.tools.gen.GenTableMapper">
 
 	<resultMap type="GenTable" id="GenTableResult">
-	    <id     property="tableId"        column="table_id"        />
+		<id     property="tableId"        column="table_id"        />
 		<result property="tableName"      column="table_name"      />
 		<result property="tableComment"   column="table_comment"   />
 		<result property="className"      column="class_name"      />
@@ -23,29 +23,29 @@
 	</resultMap>
 
 	<resultMap type="GenTableColumn" id="GenTableColumnResult">
-        <id     property="columnId"       column="column_id"      />
-        <result property="tableId"        column="table_id"       />
-        <result property="columnName"     column="column_name"    />
-        <result property="columnComment"  column="column_comment" />
-        <result property="columnType"     column="column_type"    />
-        <result property="javaType"       column="java_type"      />
-        <result property="javaField"      column="java_field"     />
-        <result property="isPk"           column="is_pk"          />
-        <result property="isIncrement"    column="is_increment"   />
-        <result property="isRequired"     column="is_required"    />
-        <result property="isInsert"       column="is_insert"      />
-        <result property="isEdit"         column="is_edit"        />
-        <result property="isList"         column="is_list"        />
-        <result property="isQuery"        column="is_query"       />
-        <result property="queryType"      column="query_type"     />
-        <result property="htmlType"       column="html_type"      />
-        <result property="dictType"       column="dict_type"      />
-        <result property="sort"           column="sort"           />
-        <result property="createBy"       column="create_by"      />
-        <result property="createTime"     column="create_time"    />
-        <result property="updateBy"       column="update_by"      />
-        <result property="updateTime"     column="update_time"    />
-    </resultMap>
+		<id     property="columnId"       column="column_id"      />
+		<result property="tableId"        column="table_id"       />
+		<result property="columnName"     column="column_name"    />
+		<result property="columnComment"  column="column_comment" />
+		<result property="columnType"     column="column_type"    />
+		<result property="javaType"       column="java_type"      />
+		<result property="javaField"      column="java_field"     />
+		<result property="isPk"           column="is_pk"          />
+		<result property="isIncrement"    column="is_increment"   />
+		<result property="isRequired"     column="is_required"    />
+		<result property="isInsert"       column="is_insert"      />
+		<result property="isEdit"         column="is_edit"        />
+		<result property="isList"         column="is_list"        />
+		<result property="isQuery"        column="is_query"       />
+		<result property="queryType"      column="query_type"     />
+		<result property="htmlType"       column="html_type"      />
+		<result property="dictType"       column="dict_type"      />
+		<result property="sort"           column="sort"           />
+		<result property="createBy"       column="create_by"      />
+		<result property="createTime"     column="create_time"    />
+		<result property="updateBy"       column="update_by"      />
+		<result property="updateTime"     column="update_time"    />
+	</resultMap>
 	<sql id="selectDictTypeVo">
 		SELECT
 			table_id AS tableId,
@@ -68,35 +68,35 @@
 	</sql>
 	<select id="selectDbTableListByNames"  resultType="com.iotechn.unimall.data.domain.tools.gen.GenTable">
 		SELECT
-        table_name as tableName,
-        table_comment as tableComment,
-        create_time as createTime,
-        update_time as updateTime
+		table_name as tableName,
+		table_comment as tableComment,
+		create_time as createTime,
+		update_time as updateTime
 		FROM
-			information_schema.TABLES
+		information_schema.TABLES
 		WHERE
-			table_schema = ( SELECT DATABASE ( ) )
-			AND table_name NOT LIKE 'qrtz_%'
-			AND table_name NOT LIKE 'gen_%'
-			AND table_name NOT IN ( SELECT table_name FROM sys_gen_table )
-			AND table_name in
-			<foreach  item="item" collection="array" index="index"  open="(" separator="," close=")">
+		table_schema = ( SELECT DATABASE ( ) )
+		AND table_name NOT LIKE 'qrtz_%'
+		AND table_name NOT LIKE 'gen_%'
+		AND table_name NOT IN ( SELECT table_name FROM sys_gen_table )
+		AND table_name in
+		<foreach  item="item" collection="array" index="index"  open="(" separator="," close=")">
 			#{item}
-			</foreach>
+		</foreach>
 	</select>
 	<select id="selectDbTableList" parameterType="GenTable" resultType="com.iotechn.unimall.data.domain.tools.gen.GenTable">
 		SELECT
-			table_name as tableName,
-			table_comment as tableComment,
-			create_time as createTime,
-			update_time as updateTime
+		table_name as tableName,
+		table_comment as tableComment,
+		create_time as createTime,
+		update_time as updateTime
 		FROM
-			information_schema.TABLES
+		information_schema.TABLES
 		WHERE
-			table_schema = ( SELECT DATABASE ( ) )
-			AND table_name NOT LIKE 'qrtz_%'
-			AND table_name NOT LIKE 'gen_%'
-			AND table_name NOT IN ( SELECT table_name FROM sys_gen_table )
+		table_schema = ( SELECT DATABASE ( ) )
+		AND table_name NOT LIKE 'qrtz_%'
+		AND table_name NOT LIKE 'gen_%'
+		AND table_name NOT IN ( SELECT table_name FROM sys_gen_table )
 		<if test="tableName != null and tableName != ''">
 			AND lower(table_name) like lower(concat('%', #{tableName}, '%'))
 		</if>
@@ -106,14 +106,14 @@
 	</select>
 	<select id="selectDbTableCount" parameterType="GenTable" resultType="java.lang.Integer">
 		SELECT
-			COUNT(*)
+		COUNT(*)
 		FROM
-			information_schema.TABLES
+		information_schema.TABLES
 		WHERE
-			table_schema = ( SELECT DATABASE ( ) )
-			AND table_name NOT LIKE 'qrtz_%'
-			AND table_name NOT LIKE 'gen_%'
-			AND table_name NOT IN ( SELECT table_name FROM sys_gen_table )
+		table_schema = ( SELECT DATABASE ( ) )
+		AND table_name NOT LIKE 'qrtz_%'
+		AND table_name NOT LIKE 'gen_%'
+		AND table_name NOT IN ( SELECT table_name FROM sys_gen_table )
 		<if test="tableName != null and tableName != ''">
 			AND lower(table_name) like lower(concat('%', #{tableName}, '%'))
 		</if>
@@ -121,5 +121,5 @@
 			AND lower(table_comment) like lower(concat('%', #{tableComment}, '%'))
 		</if>
 	</select>
-	
+
 </mapper>

+ 1 - 1
unimall-launcher/src/main/java/com/iotechn/unimall/launcher/controller/CommonController.java

@@ -90,7 +90,7 @@ public class CommonController {
         response.reset();
         response.setHeader("Content-Disposition", "attachment; filename=\""+tables+".zip\"");
         response.setHeader("Access-Control-Allow-Credentials", "true");
-        response.setHeader("Access-Control-Allow-Origin", "http://localhost:9527");
+        response.setHeader("Access-Control-Allow-Origin", "http://localhost:9528");
         response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
         response.addHeader("Content-Length", "" + data.length);
         response.setContentType("application/octet-stream; charset=UTF-8");

+ 2 - 2
unimall-launcher/src/main/resources/application.properties

@@ -10,9 +10,9 @@ logging.level.root=info
 ###MySql (MySqlConfiguration)
 ########################################################
 spring.druid.driverClassName=com.mysql.jdbc.Driver
-spring.druid.url=jdbc:mysql://106.14.75.12/market?createDatabaseIfNotExist=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useSSL=false
+spring.druid.url=jdbc:mysql://47.100.3.209/card?createDatabaseIfNotExist=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useSSL=false
 spring.druid.username=root
-spring.druid.password=Ccj841968545
+spring.druid.password=Ccj841968545.
 spring.druid.maxActive=30
 spring.druid.minIdle=5
 spring.druid.maxWait=10000

+ 4 - 0
xiaochengxu/.hbuilderx/launch.json

@@ -6,6 +6,10 @@
      	{
      		"launchtype" : "local"
      	},
+     	"h5" : 
+     	{
+     		"launchtype" : "local"
+     	},
      	"mp-weixin" : 
      	{
      		"launchtype" : "local"

+ 143 - 0
xiaochengxu/components/ossutil/base64.js

@@ -0,0 +1,143 @@
+
+var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+var base64DecodeChars = new Array(
+    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
+    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
+    -1, 0, 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, -1, -1, -1, -1, -1,
+    -1, 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, -1, -1, -1, -1, -1);
+function encode(str) {
+    var out, i, len;
+    var c1, c2, c3;
+    len = str.length;
+    i = 0;
+    out = "";
+    while (i < len) {
+        c1 = str.charCodeAt(i++) & 0xff;
+        if (i == len) {
+            out += base64EncodeChars.charAt(c1 >> 2);
+            out += base64EncodeChars.charAt((c1 & 0x3) << 4);
+            out += "==";
+            break;
+        }
+        c2 = str.charCodeAt(i++);
+        if (i == len) {
+            out += base64EncodeChars.charAt(c1 >> 2);
+            out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
+            out += base64EncodeChars.charAt((c2 & 0xF) << 2);
+            out += "=";
+            break;
+        }
+        c3 = str.charCodeAt(i++);
+        out += base64EncodeChars.charAt(c1 >> 2);
+        out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
+        out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
+        out += base64EncodeChars.charAt(c3 & 0x3F);
+    }
+    return out;
+}
+function decode(str) {
+    var c1, c2, c3, c4;
+    var i, len, out;
+    len = str.length;
+    i = 0;
+    out = "";
+    while (i < len) {
+        /* c1 */
+        do {
+            c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
+        } while (i < len && c1 == -1);
+        if (c1 == -1)
+            break;
+        /* c2 */
+        do {
+            c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
+        } while (i < len && c2 == -1);
+        if (c2 == -1)
+            break;
+        out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
+        /* c3 */
+        do {
+            c3 = str.charCodeAt(i++) & 0xff;
+            if (c3 == 61)
+                return out;
+            c3 = base64DecodeChars[c3];
+        } while (i < len && c3 == -1);
+        if (c3 == -1)
+            break;
+        out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
+        /* c4 */
+        do {
+            c4 = str.charCodeAt(i++) & 0xff;
+            if (c4 == 61)
+                return out;
+            c4 = base64DecodeChars[c4];
+        } while (i < len && c4 == -1);
+        if (c4 == -1)
+            break;
+        out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
+    }
+    return out;
+}
+
+
+function utf16to8(str) {
+    var out, i, len, c;
+    out = "";
+    len = str.length;
+    for (i = 0; i < len; i++) {
+        c = str.charCodeAt(i);
+        if ((c >= 0x0001) && (c <= 0x007F)) {
+            out += str.charAt(i);
+        } else if (c > 0x07FF) {
+            out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
+            out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
+            out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
+        } else {
+            out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
+            out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
+        }
+    }
+    return out;
+}
+function utf8to16(str) {
+    var out, i, len, c;
+    var char2, char3;
+    out = "";
+    len = str.length;
+    i = 0;
+    while (i < len) {
+        c = str.charCodeAt(i++);
+        switch (c >> 4) {
+            case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
+                // 0xxxxxxx
+                out += str.charAt(i - 1);
+                break;
+            case 12: case 13:
+                // 110x xxxx 10xx xxxx
+                char2 = str.charCodeAt(i++);
+                out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
+                break;
+            case 14:
+                // 1110 xxxx 10xx xxxx 10xx xxxx
+                char2 = str.charCodeAt(i++);
+                char3 = str.charCodeAt(i++);
+                out += String.fromCharCode(((c & 0x0F) << 12) |
+                    ((char2 & 0x3F) << 6) |
+                    ((char3 & 0x3F) << 0));
+                break;
+        }
+    }
+    return out;
+}
+
+
+module.exports = {
+    encode: encode,
+    decode: decode,
+    utf16to8: utf16to8,
+    utf8to16: utf8to16
+}

+ 9 - 0
xiaochengxu/components/ossutil/config.js

@@ -0,0 +1,9 @@
+var fileHost = 'https://taohaoliang.oss-cn-beijing.aliyuncs.com';//你的阿里云地址最后面跟上一个/   在你当前小程序的后台的uploadFile 合法域名也要配上这个域名
+var config = {
+   //aliyun OSS config
+  uploadImageUrl: `${fileHost}`, // 默认存在根目录,可根据需求改
+  AccessKeySecret: 'FpClTp4OVrRRtHEfi3lBOWUoLxKieW',        // AccessKeySecret 去你的阿里云上控制台上找
+  OSSAccessKeyId: 'LTAI4G9c14PgKvM23WZ9zrpc',         // AccessKeyId 去你的阿里云上控制台上找
+   timeout: 87600 //这个是上传文件时Policy的失效时间
+};
+module.exports = config

+ 178 - 0
xiaochengxu/components/ossutil/crypto.js

@@ -0,0 +1,178 @@
+const Crypto = {};
+
+(function(){
+
+var base64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+
+// Crypto utilities
+var util = Crypto.util = {
+
+	// Bit-wise rotate left
+	rotl: function (n, b) {
+		return (n << b) | (n >>> (32 - b));
+	},
+
+	// Bit-wise rotate right
+	rotr: function (n, b) {
+		return (n << (32 - b)) | (n >>> b);
+	},
+
+	// Swap big-endian to little-endian and vice versa
+	endian: function (n) {
+
+		// If number given, swap endian
+		if (n.constructor == Number) {
+			return util.rotl(n,  8) & 0x00FF00FF |
+			       util.rotl(n, 24) & 0xFF00FF00;
+		}
+
+		// Else, assume array and swap all items
+		for (var i = 0; i < n.length; i++)
+			n[i] = util.endian(n[i]);
+		return n;
+
+	},
+
+	// Generate an array of any length of random bytes
+	randomBytes: function (n) {
+		for (var bytes = []; n > 0; n--)
+			bytes.push(Math.floor(Math.random() * 256));
+		return bytes;
+	},
+
+	// Convert a string to a byte array
+	stringToBytes: function (str) {
+		var bytes = [];
+		for (var i = 0; i < str.length; i++)
+			bytes.push(str.charCodeAt(i));
+		return bytes;
+	},
+
+	// Convert a byte array to a string
+	bytesToString: function (bytes) {
+		var str = [];
+		for (var i = 0; i < bytes.length; i++)
+			str.push(String.fromCharCode(bytes[i]));
+		return str.join("");
+	},
+
+	// Convert a string to big-endian 32-bit words
+	stringToWords: function (str) {
+		var words = [];
+		for (var c = 0, b = 0; c < str.length; c++, b += 8)
+			words[b >>> 5] |= str.charCodeAt(c) << (24 - b % 32);
+		return words;
+	},
+
+	// Convert a byte array to big-endian 32-bits words
+	bytesToWords: function (bytes) {
+		var words = [];
+		for (var i = 0, b = 0; i < bytes.length; i++, b += 8)
+			words[b >>> 5] |= bytes[i] << (24 - b % 32);
+		return words;
+	},
+
+	// Convert big-endian 32-bit words to a byte array
+	wordsToBytes: function (words) {
+		var bytes = [];
+		for (var b = 0; b < words.length * 32; b += 8)
+			bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);
+		return bytes;
+	},
+
+	// Convert a byte array to a hex string
+	bytesToHex: function (bytes) {
+		var hex = [];
+		for (var i = 0; i < bytes.length; i++) {
+			hex.push((bytes[i] >>> 4).toString(16));
+			hex.push((bytes[i] & 0xF).toString(16));
+		}
+		return hex.join("");
+	},
+
+	// Convert a hex string to a byte array
+	hexToBytes: function (hex) {
+		var bytes = [];
+		for (var c = 0; c < hex.length; c += 2)
+			bytes.push(parseInt(hex.substr(c, 2), 16));
+		return bytes;
+	},
+
+	// Convert a byte array to a base-64 string
+	bytesToBase64: function (bytes) {
+
+		// Use browser-native function if it exists
+		// if (typeof btoa == "function") return btoa(util.bytesToString(bytes));
+
+		var base64 = [],
+		    overflow;
+
+		for (var i = 0; i < bytes.length; i++) {
+			switch (i % 3) {
+				case 0:
+					base64.push(base64map.charAt(bytes[i] >>> 2));
+					overflow = (bytes[i] & 0x3) << 4;
+					break;
+				case 1:
+					base64.push(base64map.charAt(overflow | (bytes[i] >>> 4)));
+					overflow = (bytes[i] & 0xF) << 2;
+					break;
+				case 2:
+					base64.push(base64map.charAt(overflow | (bytes[i] >>> 6)));
+					base64.push(base64map.charAt(bytes[i] & 0x3F));
+					overflow = -1;
+			}
+		}
+
+		// Encode overflow bits, if there are any
+		if (overflow != undefined && overflow != -1)
+			base64.push(base64map.charAt(overflow));
+
+		// Add padding
+		while (base64.length % 4 != 0) base64.push("=");
+
+		return base64.join("");
+
+	},
+
+	// Convert a base-64 string to a byte array
+	base64ToBytes: function (base64) {
+
+		// Use browser-native function if it exists
+		if (typeof atob == "function") return util.stringToBytes(atob(base64));
+
+		// Remove non-base-64 characters
+		base64 = base64.replace(/[^A-Z0-9+\/]/ig, "");
+
+		var bytes = [];
+
+		for (var i = 0; i < base64.length; i++) {
+			switch (i % 4) {
+				case 1:
+					bytes.push((base64map.indexOf(base64.charAt(i - 1)) << 2) |
+					           (base64map.indexOf(base64.charAt(i)) >>> 4));
+					break;
+				case 2:
+					bytes.push(((base64map.indexOf(base64.charAt(i - 1)) & 0xF) << 4) |
+					           (base64map.indexOf(base64.charAt(i)) >>> 2));
+					break;
+				case 3:
+					bytes.push(((base64map.indexOf(base64.charAt(i - 1)) & 0x3) << 6) |
+					           (base64map.indexOf(base64.charAt(i))));
+					break;
+			}
+		}
+
+		return bytes;
+
+	}
+
+};
+
+// Crypto mode namespace
+Crypto.mode = {};
+
+})();
+
+module.exports = Crypto;

+ 34 - 0
xiaochengxu/components/ossutil/hmac.js

@@ -0,0 +1,34 @@
+const Crypto = require('./crypto.js');
+
+(function(){
+
+// Shortcut
+var util = Crypto.util;
+
+Crypto.HMAC = function (hasher, message, key, options) {
+
+	// Allow arbitrary length keys
+	key = key.length > hasher._blocksize * 4 ?
+	      hasher(key, { asBytes: true }) :
+	      util.stringToBytes(key);
+
+	// XOR keys with pad constants
+	var okey = key,
+	    ikey = key.slice(0);
+	for (var i = 0; i < hasher._blocksize * 4; i++) {
+		okey[i] ^= 0x5C;
+		ikey[i] ^= 0x36;
+	}
+
+	var hmacbytes = hasher(util.bytesToString(okey) +
+	                       hasher(util.bytesToString(ikey) + message, { asString: true }),
+	                       { asBytes: true });
+	return options && options.asBytes ? hmacbytes :
+	       options && options.asString ? util.bytesToString(hmacbytes) :
+	       util.bytesToHex(hmacbytes);
+
+};
+
+})();
+
+module.exports = Crypto;

+ 79 - 0
xiaochengxu/components/ossutil/sha1.js

@@ -0,0 +1,79 @@
+const Crypto = require('./crypto.js');
+
+(function(){
+
+// Shortcut
+var util = Crypto.util;
+
+// Public API
+var SHA1 = Crypto.SHA1 = function (message, options) {
+	var digestbytes = util.wordsToBytes(SHA1._sha1(message));
+	return options && options.asBytes ? digestbytes :
+	       options && options.asString ? util.bytesToString(digestbytes) :
+	       util.bytesToHex(digestbytes);
+};
+
+// The core
+SHA1._sha1 = function (message) {
+
+	var m  = util.stringToWords(message),
+	    l  = message.length * 8,
+	    w  =  [],
+	    H0 =  1732584193,
+	    H1 = -271733879,
+	    H2 = -1732584194,
+	    H3 =  271733878,
+	    H4 = -1009589776;
+
+	// Padding
+	m[l >> 5] |= 0x80 << (24 - l % 32);
+	m[((l + 64 >>> 9) << 4) + 15] = l;
+
+	for (var i = 0; i < m.length; i += 16) {
+
+		var a = H0,
+		    b = H1,
+		    c = H2,
+		    d = H3,
+		    e = H4;
+
+		for (var j = 0; j < 80; j++) {
+
+			if (j < 16) w[j] = m[i + j];
+			else {
+				var n = w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16];
+				w[j] = (n << 1) | (n >>> 31);
+			}
+
+			var t = ((H0 << 5) | (H0 >>> 27)) + H4 + (w[j] >>> 0) + (
+			         j < 20 ? (H1 & H2 | ~H1 & H3) + 1518500249 :
+			         j < 40 ? (H1 ^ H2 ^ H3) + 1859775393 :
+			         j < 60 ? (H1 & H2 | H1 & H3 | H2 & H3) - 1894007588 :
+			                  (H1 ^ H2 ^ H3) - 899497514);
+
+			H4 =  H3;
+			H3 =  H2;
+			H2 = (H1 << 30) | (H1 >>> 2);
+			H1 =  H0;
+			H0 =  t;
+
+		}
+
+		H0 += a;
+		H1 += b;
+		H2 += c;
+		H3 += d;
+		H4 += e;
+
+	}
+
+	return [H0, H1, H2, H3, H4];
+
+};
+
+// Package private blocksize
+SHA1._blocksize = 16;
+
+})();
+
+module.exports = Crypto;

+ 394 - 0
xiaochengxu/components/ossutil/signature.js

@@ -0,0 +1,394 @@
+class Handwriting {
+  // 内置数据
+  ctx = '';
+  canvasWidth = 300;
+  canvasHeight = 900;
+  linePrack = []; //划线轨迹 ; 生成线条的实际点
+  currentLine = [];
+  transparent = 1; // 透明度
+  pressure = 0.5; // 默认压力
+  smoothness = 100; //顺滑度,用60的距离来计算速度
+  lineSize = 1.5; // 笔记倍数
+  lineMin = 0.5; // 最小笔画半径
+  lineMax = 2; // 最大笔画半径
+  currentPoint = {};
+  firstTouch = true; // 第一次触发
+  radius = 1; //画圆的半径
+  cutArea = {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0
+  }; //裁剪区域
+  lastPoint = 0;
+  chirography = []; //笔迹
+  startY = 0;
+  deltaY = 0;
+  startValue = 0;
+  constructor(opts) {
+    this.lineColor = opts.lineColor || '#1A1A1A' // 颜色
+    this.slideValue = opts.slideValue || 50
+		this.canvasName = opts.canvasName || 'handWriting'
+    this.init()
+  }
+  init() {
+    this.ctx = uni.createCanvasContext(this.canvasName)
+    var query = uni.createSelectorQuery();
+    query.select('.handCenter').boundingClientRect(rect => {
+      console.log(rect)
+	  if(rect){
+		 this.canvasWidth = rect.width;
+		 this.canvasHeight = rect.height; 
+	  }
+      
+    }).exec();
+    this.selectSlideValue(this.slideValue);
+  }
+
+  // 笔迹开始
+  uploadScaleStart(event) {
+		let e = event.mp
+    if (e.type != 'touchstart') return false;
+    this.ctx.setFillStyle(this.lineColor); // 初始线条设置颜色
+    this.ctx.setGlobalAlpha(this.transparent); // 设置半透明
+    this.currentPoint = {
+      x: e.touches[0].x,
+      y: e.touches[0].y
+    }
+    this.currentLine.unshift({
+      time: new Date().getTime(),
+      dis: 0,
+      x: this.currentPoint.x,
+      y: this.currentPoint.y
+    })
+    if (this.firstTouch) {
+      this.cutArea = {
+        top: this.currentPoint.y,
+        right: this.currentPoint.x,
+        bottom: this.currentPoint.y,
+        left: this.currentPoint.x
+      }
+      this.firstTouch = false
+    }
+    this.pointToLine(this.currentLine);
+  }
+  // 笔迹移动
+  uploadScaleMove(event) {
+		let e = event.mp
+    if (e.type != 'touchmove') return false;
+    if (e.cancelable) {
+      // 判断默认行为是否已经被禁用
+      if (!e.defaultPrevented) {
+        e.preventDefault();
+      }
+    }
+    let point = {
+      x: e.touches[0].x,
+      y: e.touches[0].y
+    }
+    //测试裁剪
+    if (point.y < this.cutArea.top) {
+      this.cutArea.top = point.y;
+    }
+    if (point.y < 0) this.cutArea.top = 0;
+
+    if (point.x > this.cutArea.right) {
+      this.cutArea.right = point.x;
+    }
+    if (this.canvasWidth - point.x <= 0) {
+      this.cutArea.right = this.canvasWidth;
+    }
+    if (point.y > this.cutArea.bottom) {
+      this.cutArea.bottom = point.y;
+    }
+    if (this.canvasHeight - point.y <= 0) {
+      this.cutArea.bottom = this.canvasHeight;
+    }
+    if (point.x < this.cutArea.left) {
+      this.cutArea.left = point.x;
+    }
+    if (point.x < 0) this.cutArea.left = 0;
+
+    this.lastPoint = this.currentPoint;
+    this.currentPoint = point
+    this.currentLine.unshift({
+      time: new Date().getTime(),
+      dis: this.distance(this.currentPoint, this.lastPoint, 'move'),
+      x: point.x,
+      y: point.y
+    })
+    this.pointToLine(this.currentLine);
+  }
+  // 笔迹结束
+  uploadScaleEnd(event) {
+		let e = event.mp
+    if (e.type != 'touchend') return 0;
+    let point = {
+      x: e.changedTouches[0].x,
+      y: e.changedTouches[0].y
+    }
+		
+    this.lastPoint = this.currentPoint;
+    this.currentPoint = point
+    this.currentLine.unshift({
+      time: new Date().getTime(),
+      dis: this.distance(this.currentPoint, this.lastPoint, 'end'),
+      x: point.x,
+      y: point.y
+    })
+    if (this.currentLine.length > 2) {
+      var info = (this.currentLine[0].time - this.currentLine[this.currentLine.length - 1].time) / this.currentLine.length;
+      //$("#info").text(info.toFixed(2));
+    }
+    //一笔结束,保存笔迹的坐标点,清空,当前笔迹
+    //增加判断是否在手写区域;
+    this.pointToLine(this.currentLine);
+    var currentChirography = {
+      lineSize: this.lineSize,
+      lineColor: this.lineColor
+    };
+    this.chirography.unshift(currentChirography);
+    this.linePrack.unshift(this.currentLine);
+    this.currentLine = []
+  }
+  retDraw() {
+    this.ctx.clearRect(0, 0, 700, 730)
+    this.ctx.draw()
+  }
+
+  //画两点之间的线条;参数为:line,会绘制最近的开始的两个点;
+  pointToLine(line) {
+    this.calcBethelLine(line);
+    // this.calcBethelLine1(line);
+    return;
+  }
+  //计算插值的方式;
+  calcBethelLine(line) {
+    if (line.length <= 1) {
+      line[0].r = this.radius;
+      return;
+    }
+    let x0, x1, x2, y0, y1, y2, r0, r1, r2, len, lastRadius, dis = 0,
+      time = 0,
+      curveValue = 0.5;
+    if (line.length <= 2) {
+      x0 = line[1].x
+      y0 = line[1].y
+      x2 = line[1].x + (line[0].x - line[1].x) * curveValue;
+      y2 = line[1].y + (line[0].y - line[1].y) * curveValue;
+      //x2 = line[1].x;
+      //y2 = line[1].y;
+      x1 = x0 + (x2 - x0) * curveValue;
+      y1 = y0 + (y2 - y0) * curveValue;;
+
+    } else {
+      x0 = line[2].x + (line[1].x - line[2].x) * curveValue;
+      y0 = line[2].y + (line[1].y - line[2].y) * curveValue;
+      x1 = line[1].x;
+      y1 = line[1].y;
+      x2 = x1 + (line[0].x - x1) * curveValue;
+      y2 = y1 + (line[0].y - y1) * curveValue;
+    }
+    //从计算公式看,三个点分别是(x0,y0),(x1,y1),(x2,y2) ;(x1,y1)这个是控制点,控制点不会落在曲线上;实际上,这个点还会手写获取的实际点,却落在曲线上
+    len = this.distance({
+      x: x2,
+      y: y2
+    }, {
+      x: x0,
+      y: y0
+    }, 'calc');
+    lastRadius = this.radius;
+    for (let n = 0; n < line.length - 1; n++) {
+      dis += line[n].dis;
+      time += line[n].time - line[n + 1].time;
+      if (dis > this.smoothness) break;
+    }
+    this.radius = Math.min(time / len * this.pressure + this.lineMin, this.lineMax) * this.lineSize
+    line[0].r = this.radius;
+    //计算笔迹半径;
+    if (line.length <= 2) {
+      r0 = (lastRadius + this.radius) / 2;
+      r1 = r0;
+      r2 = r1;
+      //return;
+    } else {
+      r0 = (line[2].r + line[1].r) / 2;
+      r1 = line[1].r;
+      r2 = (line[1].r + line[0].r) / 2;
+    }
+    let n = 5;
+    let point = [];
+    for (let i = 0; i < n; i++) {
+      let t = i / (n - 1);
+      let x = (1 - t) * (1 - t) * x0 + 2 * t * (1 - t) * x1 + t * t * x2;
+      let y = (1 - t) * (1 - t) * y0 + 2 * t * (1 - t) * y1 + t * t * y2;
+      let r = lastRadius + (this.radius - lastRadius) / n * i;
+      point.push({
+        x: x,
+        y: y,
+        r: r
+      });
+      if (point.length == 3) {
+        let a = this.ctaCalc(point[0].x, point[0].y, point[0].r, point[1].x, point[1].y, point[1].r, point[2].x, point[2].y, point[2].r);
+        a[0].color = this.lineColor;
+        this.bethelDraw(a, 1);
+        point = [{
+          x: x,
+          y: y,
+          r: r
+        }];
+      }
+    }
+  }
+  //求两点之间距离
+  distance(a, b, type) {
+    let x = b.x - a.x;
+    let y = b.y - a.y;
+    return Math.sqrt(x * x + y * y) * 5;
+  }
+  ctaCalc(x0, y0, r0, x1, y1, r1, x2, y2, r2) {
+    let a = [],
+      vx01, vy01, norm, n_x0, n_y0, vx21, vy21, n_x2, n_y2;
+    vx01 = x1 - x0;
+    vy01 = y1 - y0;
+    norm = Math.sqrt(vx01 * vx01 + vy01 * vy01 + 0.0001) * 2;
+    vx01 = vx01 / norm * r0;
+    vy01 = vy01 / norm * r0;
+    n_x0 = vy01;
+    n_y0 = -vx01;
+    vx21 = x1 - x2;
+    vy21 = y1 - y2;
+    norm = Math.sqrt(vx21 * vx21 + vy21 * vy21 + 0.0001) * 2;
+    vx21 = vx21 / norm * r2;
+    vy21 = vy21 / norm * r2;
+    n_x2 = -vy21;
+    n_y2 = vx21;
+    a.push({
+      mx: x0 + n_x0,
+      my: y0 + n_y0,
+      color: "#1A1A1A"
+    });
+    a.push({
+      c1x: x1 + n_x0,
+      c1y: y1 + n_y0,
+      c2x: x1 + n_x2,
+      c2y: y1 + n_y2,
+      ex: x2 + n_x2,
+      ey: y2 + n_y2
+    });
+    a.push({
+      c1x: x2 + n_x2 - vx21,
+      c1y: y2 + n_y2 - vy21,
+      c2x: x2 - n_x2 - vx21,
+      c2y: y2 - n_y2 - vy21,
+      ex: x2 - n_x2,
+      ey: y2 - n_y2
+    });
+    a.push({
+      c1x: x1 - n_x2,
+      c1y: y1 - n_y2,
+      c2x: x1 - n_x0,
+      c2y: y1 - n_y0,
+      ex: x0 - n_x0,
+      ey: y0 - n_y0
+    });
+    a.push({
+      c1x: x0 - n_x0 - vx01,
+      c1y: y0 - n_y0 - vy01,
+      c2x: x0 + n_x0 - vx01,
+      c2y: y0 + n_y0 - vy01,
+      ex: x0 + n_x0,
+      ey: y0 + n_y0
+    });
+    a[0].mx = a[0].mx.toFixed(1);
+    a[0].mx = parseFloat(a[0].mx);
+    a[0].my = a[0].my.toFixed(1);
+    a[0].my = parseFloat(a[0].my);
+    for (let i = 1; i < a.length; i++) {
+      a[i].c1x = a[i].c1x.toFixed(1);
+      a[i].c1x = parseFloat(a[i].c1x);
+      a[i].c1y = a[i].c1y.toFixed(1);
+      a[i].c1y = parseFloat(a[i].c1y);
+      a[i].c2x = a[i].c2x.toFixed(1);
+      a[i].c2x = parseFloat(a[i].c2x);
+      a[i].c2y = a[i].c2y.toFixed(1);
+      a[i].c2y = parseFloat(a[i].c2y);
+      a[i].ex = a[i].ex.toFixed(1);
+      a[i].ex = parseFloat(a[i].ex);
+      a[i].ey = a[i].ey.toFixed(1);
+      a[i].ey = parseFloat(a[i].ey);
+    }
+    return a;
+  }
+  bethelDraw(point, is_fill, color) {
+    this.ctx.beginPath();
+    this.ctx.moveTo(point[0].mx, point[0].my);
+    if (undefined != color) {
+      this.ctx.setFillStyle(color);
+      this.ctx.setStrokeStyle(color);
+    } else {
+      this.ctx.setFillStyle(point[0].color);
+      this.ctx.setStrokeStyle(point[0].color);
+    }
+    for (let i = 1; i < point.length; i++) {
+      this.ctx.bezierCurveTo(point[i].c1x, point[i].c1y, point[i].c2x, point[i].c2y, point[i].ex, point[i].ey);
+    }
+    this.ctx.stroke();
+    if (undefined != is_fill) {
+      this.ctx.fill(); //填充图形 ( 后绘制的图形会覆盖前面的图形, 绘制时注意先后顺序 )
+    }
+    this.ctx.draw(true)
+  }
+
+  selectColorEvent(lineColor) {
+    this.lineColor = lineColor;
+  }
+
+  selectSlideValue(slideValue) {
+    switch (slideValue) {
+      case 0:
+        this.lineSize = 0.1;
+        this.lineMin = 0.1;
+        this.lineMax = 0.1;
+        break;
+      case 25:
+        this.lineSize = 1;
+        this.lineMin = 0.5;
+        this.lineMax = 2;
+        break;
+      case 50:
+        this.lineSize = 1.5;
+        this.lineMin = 1;
+        this.lineMax = 3;
+        break;
+      case 75:
+        this.lineSize = 1.5;
+        this.lineMin = 2;
+        this.lineMax = 3.5;
+        break;
+      case 100:
+        this.lineSize = 3;
+        this.lineMin = 2;
+        this.lineMax = 3.5;
+        break;
+    }
+  }
+	
+	saveCanvas(){
+		 return new Promise((resolve,rej) => {
+			uni.canvasToTempFilePath({
+				canvasId: this.canvasName,
+				success: function(res) {
+					console.log(res.tempFilePath)
+					resolve(res.tempFilePath);
+				},
+				 fail:function(err){
+					 console.log('图片生成失败:'+err)
+					 rej(err);
+				 }
+			})
+		})	
+	}	
+}
+
+export default Handwriting;

+ 86 - 0
xiaochengxu/components/ossutil/uploadFile.js

@@ -0,0 +1,86 @@
+const env = require('./config.js'); //配置文件,在这文件里配置你的OSS keyId和KeySecret,timeout:87600;
+
+const base64 = require('./base64.js');//Base64,hmac,sha1,crypto相关算法
+require('./hmac.js');
+require('./sha1.js');
+const Crypto = require('./crypto.js');
+
+/*
+ *上传文件到阿里云oss
+ *@param - filePath :图片的本地资源路径
+ *@param - dir:表示要传到哪个目录下
+ *@param - successc:成功回调
+ *@param - failc:失败回调
+ */ 
+const uploadFile = function (filePath, dir, successc, failc) {
+  if (!filePath || filePath.length < 9) {
+    uni.showModal({
+      title: '图片错误',
+      content: '请重试',
+      showCancel: false,
+    })
+    return;
+  }
+  
+  //图片名字 可以自行定义,     这里是采用当前的时间戳 + 150内的随机数来给图片命名的
+  const aliyunFileKey = dir + new Date().getTime() + Math.floor(Math.random() * 150) + '.png';
+  
+  const aliyunServerURL = env.uploadImageUrl;//OSS地址,需要https
+  const accessid = env.OSSAccessKeyId;
+  const policyBase64 = getPolicyBase64();
+  const signature = getSignature(policyBase64);//获取签名
+ 
+  uni.uploadFile({
+    url: aliyunServerURL,//开发者服务器 url
+    filePath: filePath,//要上传文件资源的路径
+    name: 'file',//必须填file
+    formData: {
+      'key': aliyunFileKey,
+      'policy': policyBase64,
+      'OSSAccessKeyId': accessid,
+      'signature': signature,
+      'success_action_status': '200',
+    },
+    success: function (res) {
+			console.log(res);
+      if (res.statusCode != 200) {
+        failc(new Error('上传错误:' + JSON.stringify(res)))
+        return;
+      }
+       successc(aliyunServerURL+"/"+aliyunFileKey);
+    },
+    fail: function (err) {
+      err.wxaddinfo = aliyunServerURL;
+      failc(err);
+    },
+  })
+}
+
+const getPolicyBase64 = function () {
+  let date = new Date();
+  date.setHours(date.getHours() + env.timeout);
+  let srcT = date.toISOString();
+  const policyText = {
+    "expiration": srcT, //设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了 
+    "conditions": [
+      ["content-length-range", 0, 5 * 1024 * 1024] // 设置上传文件的大小限制,5mb
+    ]
+  };
+
+  const policyBase64 = base64.encode(JSON.stringify(policyText));
+	console.log(policyBase64);
+  return policyBase64;
+}
+
+const getSignature = function (policyBase64) {
+  const accesskey = env.AccessKeySecret;
+
+  const bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, {
+    asBytes: true
+  });
+  const signature = Crypto.util.bytesToBase64(bytes);
+console.log(signature);
+  return signature;
+}
+
+module.exports = uploadFile;

+ 11 - 2
xiaochengxu/pages.json

@@ -124,7 +124,7 @@
 		}, {
 			"path": "pages/mySet/myInfo",
 			"style": {
-				"navigationBarTitleText": "",
+				"navigationBarTitleText": "我的名片",
 				"enablePullDownRefresh": false
 			}
 
@@ -145,7 +145,16 @@
 
 		}
 
-	],
+	    ,{
+            "path" : "pages/mySet/newCard",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "新增名片",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+    ],
 	"tabBar": {
 		"custom": false,
 		"color": "#656765",

+ 106 - 5
xiaochengxu/pages/mySet/myInfo.vue

@@ -1,19 +1,120 @@
 <template>
-	<view>
-		
+	<view class="content">
+		<view class="card-list">
+			<view class="row" v-for="(item,index) in cardList" :key="index">
+				<view class="title-name">
+					名称
+				</view>
+				<view class="flex card-list-item">
+					<view class="left">
+						<view class="top flex-row-center">
+							<image src="../../static/uni.png" mode="widthFix" class="img"></image>
+						</view>
+						<view class="bottom flex flex-evenly">
+							<uni-icons type="home" size="20"></uni-icons>
+							<text>默</text>
+							<uni-icons type="redo" size="20"></uni-icons>
+						</view>
+					</view>
+					<view class="right">
+						<view class="row1 flex">
+							<text>张三</text>
+							<text class="line"></text>
+							<text>总经理</text>
+						</view>
+						<view class="row2">
+							北京xxx有限公司
+						</view>
+						<view class="row3" @click="toMap">
+							<uni-icons type="redo" size="20"></uni-icons>
+							<text>北京市朝阳区幸福大街8号</text>
+						</view>
+						<view class="row3">
+							<uni-icons type="redo" size="20"></uni-icons>
+							<text>13333333333</text>
+						</view>
+						<view class="row3">
+							<uni-icons type="redo" size="20"></uni-icons>
+							<text>我是备注</text>
+						</view>
+					</view>
+				</view>
+				<view class="car-bottom flex">
+					<button>置顶</button>
+					<button>删除</button>
+					<button>编辑</button>
+				</view>
+			</view>
+		</view>
+		<view class="upload">
+			<view class="solids" @click="addCard">
+				<text class=''>添加新名片</text>
+			</view>
+		</view>
 	</view>
 </template>
 
 <script>
+	import uploadImage from '@/components/ossutil/uploadFile.js';
 	export default {
 		data() {
 			return {
-				
+				cardList: [{},
+					{}
+				]
 			};
+		},
+		methods:{
+			addCard(){
+				
+			}
+			// chooseImage(){
+			// 	uni.chooseImage({
+			// 		success: (res) => {
+			// 			uploadImage(res.tempFilePaths[0], 'cardImages/',
+			// 				result => {
+			// 					// this.trainImg = result
+			// 					uni.hideLoading();
+			// 				}
+			// 			)
+			// 		}
+			// 	});
+			// }
 		}
 	}
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
+	.card-list-item {
+		border: 1px solid #ccc;
+		border-radius: 30rpx;
+		padding: 40rpx;
+		box-sizing: border-box;
+
+		.left {
+			width: 30%;
+
+			.top {
+
+				margin-bottom: 20rpx;
+			}
 
-</style>
+			.img {
+				width: 80%;
+			}
+
+			.bottom {}
+		}
+
+		.right {
+			.row1 {
+				.line {
+					width: 1px;
+					height: 20px;
+					margin: 0 20rpx;
+					background: black;
+				}
+			}
+		}
+	}
+</style>

+ 19 - 0
xiaochengxu/pages/mySet/newCard.vue

@@ -0,0 +1,19 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+<style lang="scss">
+
+</style>

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
xiaochengxu/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
xiaochengxu/unpackage/dist/dev/.sourcemap/mp-weixin/pages/mySet/myInfo.js.map


+ 2 - 1
xiaochengxu/unpackage/dist/dev/mp-weixin/app.json

@@ -17,7 +17,8 @@
     "pages/mySet/set",
     "pages/mySet/myInfo",
     "pages/mySet/myAccount",
-    "pages/mySet/help"
+    "pages/mySet/help",
+    "pages/mySet/newCard"
   ],
   "subPackages": [],
   "window": {

+ 520 - 0
xiaochengxu/unpackage/dist/dev/mp-weixin/common/vendor.js

@@ -29247,6 +29247,526 @@ var _default = {
 exports.default = _default;
 /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 2)["default"]))
 
+/***/ }),
+/* 567 */,
+/* 568 */,
+/* 569 */,
+/* 570 */
+/*!*************************************************************************!*\
+  !*** D:/demo/businessCard/xiaochengxu/components/ossutil/uploadFile.js ***!
+  \*************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+/* WEBPACK VAR INJECTION */(function(uni) {var env = __webpack_require__(/*! ./config.js */ 571); //配置文件,在这文件里配置你的OSS keyId和KeySecret,timeout:87600;
+
+var base64 = __webpack_require__(/*! ./base64.js */ 572); //Base64,hmac,sha1,crypto相关算法
+__webpack_require__(/*! ./hmac.js */ 573);
+__webpack_require__(/*! ./sha1.js */ 575);
+var Crypto = __webpack_require__(/*! ./crypto.js */ 574);
+
+/*
+ *上传文件到阿里云oss
+ *@param - filePath :图片的本地资源路径
+ *@param - dir:表示要传到哪个目录下
+ *@param - successc:成功回调
+ *@param - failc:失败回调
+ */
+var uploadFile = function uploadFile(filePath, dir, successc, failc) {
+  if (!filePath || filePath.length < 9) {
+    uni.showModal({
+      title: '图片错误',
+      content: '请重试',
+      showCancel: false
+    });
+    return;
+  }
+
+  //图片名字 可以自行定义,     这里是采用当前的时间戳 + 150内的随机数来给图片命名的
+  var aliyunFileKey = dir + new Date().getTime() + Math.floor(Math.random() * 150) + '.png';
+  var aliyunServerURL = env.uploadImageUrl; //OSS地址,需要https
+  var accessid = env.OSSAccessKeyId;
+  var policyBase64 = getPolicyBase64();
+  var signature = getSignature(policyBase64); //获取签名
+
+  uni.uploadFile({
+    url: aliyunServerURL,
+    //开发者服务器 url
+    filePath: filePath,
+    //要上传文件资源的路径
+    name: 'file',
+    //必须填file
+    formData: {
+      'key': aliyunFileKey,
+      'policy': policyBase64,
+      'OSSAccessKeyId': accessid,
+      'signature': signature,
+      'success_action_status': '200'
+    },
+    success: function success(res) {
+      console.log(res);
+      if (res.statusCode != 200) {
+        failc(new Error('上传错误:' + JSON.stringify(res)));
+        return;
+      }
+      successc(aliyunServerURL + "/" + aliyunFileKey);
+    },
+    fail: function fail(err) {
+      err.wxaddinfo = aliyunServerURL;
+      failc(err);
+    }
+  });
+};
+var getPolicyBase64 = function getPolicyBase64() {
+  var date = new Date();
+  date.setHours(date.getHours() + env.timeout);
+  var srcT = date.toISOString();
+  var policyText = {
+    "expiration": srcT,
+    //设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了 
+    "conditions": [["content-length-range", 0, 5 * 1024 * 1024] // 设置上传文件的大小限制,5mb
+    ]
+  };
+
+  var policyBase64 = base64.encode(JSON.stringify(policyText));
+  console.log(policyBase64);
+  return policyBase64;
+};
+var getSignature = function getSignature(policyBase64) {
+  var accesskey = env.AccessKeySecret;
+  var bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, {
+    asBytes: true
+  });
+  var signature = Crypto.util.bytesToBase64(bytes);
+  console.log(signature);
+  return signature;
+};
+module.exports = uploadFile;
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 2)["default"]))
+
+/***/ }),
+/* 571 */
+/*!*********************************************************************!*\
+  !*** D:/demo/businessCard/xiaochengxu/components/ossutil/config.js ***!
+  \*********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+var fileHost = 'https://taohaoliang.oss-cn-beijing.aliyuncs.com'; //你的阿里云地址最后面跟上一个/   在你当前小程序的后台的uploadFile 合法域名也要配上这个域名
+var config = {
+  //aliyun OSS config
+  uploadImageUrl: "".concat(fileHost),
+  // 默认存在根目录,可根据需求改
+  AccessKeySecret: 'FpClTp4OVrRRtHEfi3lBOWUoLxKieW',
+  // AccessKeySecret 去你的阿里云上控制台上找
+  OSSAccessKeyId: 'LTAI4G9c14PgKvM23WZ9zrpc',
+  // AccessKeyId 去你的阿里云上控制台上找
+  timeout: 87600 //这个是上传文件时Policy的失效时间
+};
+
+module.exports = config;
+
+/***/ }),
+/* 572 */
+/*!*********************************************************************!*\
+  !*** D:/demo/businessCard/xiaochengxu/components/ossutil/base64.js ***!
+  \*********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+var base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 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, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1);
+function encode(str) {
+  var out, i, len;
+  var c1, c2, c3;
+  len = str.length;
+  i = 0;
+  out = "";
+  while (i < len) {
+    c1 = str.charCodeAt(i++) & 0xff;
+    if (i == len) {
+      out += base64EncodeChars.charAt(c1 >> 2);
+      out += base64EncodeChars.charAt((c1 & 0x3) << 4);
+      out += "==";
+      break;
+    }
+    c2 = str.charCodeAt(i++);
+    if (i == len) {
+      out += base64EncodeChars.charAt(c1 >> 2);
+      out += base64EncodeChars.charAt((c1 & 0x3) << 4 | (c2 & 0xF0) >> 4);
+      out += base64EncodeChars.charAt((c2 & 0xF) << 2);
+      out += "=";
+      break;
+    }
+    c3 = str.charCodeAt(i++);
+    out += base64EncodeChars.charAt(c1 >> 2);
+    out += base64EncodeChars.charAt((c1 & 0x3) << 4 | (c2 & 0xF0) >> 4);
+    out += base64EncodeChars.charAt((c2 & 0xF) << 2 | (c3 & 0xC0) >> 6);
+    out += base64EncodeChars.charAt(c3 & 0x3F);
+  }
+  return out;
+}
+function decode(str) {
+  var c1, c2, c3, c4;
+  var i, len, out;
+  len = str.length;
+  i = 0;
+  out = "";
+  while (i < len) {
+    /* c1 */
+    do {
+      c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
+    } while (i < len && c1 == -1);
+    if (c1 == -1) break;
+    /* c2 */
+    do {
+      c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
+    } while (i < len && c2 == -1);
+    if (c2 == -1) break;
+    out += String.fromCharCode(c1 << 2 | (c2 & 0x30) >> 4);
+    /* c3 */
+    do {
+      c3 = str.charCodeAt(i++) & 0xff;
+      if (c3 == 61) return out;
+      c3 = base64DecodeChars[c3];
+    } while (i < len && c3 == -1);
+    if (c3 == -1) break;
+    out += String.fromCharCode((c2 & 0XF) << 4 | (c3 & 0x3C) >> 2);
+    /* c4 */
+    do {
+      c4 = str.charCodeAt(i++) & 0xff;
+      if (c4 == 61) return out;
+      c4 = base64DecodeChars[c4];
+    } while (i < len && c4 == -1);
+    if (c4 == -1) break;
+    out += String.fromCharCode((c3 & 0x03) << 6 | c4);
+  }
+  return out;
+}
+function utf16to8(str) {
+  var out, i, len, c;
+  out = "";
+  len = str.length;
+  for (i = 0; i < len; i++) {
+    c = str.charCodeAt(i);
+    if (c >= 0x0001 && c <= 0x007F) {
+      out += str.charAt(i);
+    } else if (c > 0x07FF) {
+      out += String.fromCharCode(0xE0 | c >> 12 & 0x0F);
+      out += String.fromCharCode(0x80 | c >> 6 & 0x3F);
+      out += String.fromCharCode(0x80 | c >> 0 & 0x3F);
+    } else {
+      out += String.fromCharCode(0xC0 | c >> 6 & 0x1F);
+      out += String.fromCharCode(0x80 | c >> 0 & 0x3F);
+    }
+  }
+  return out;
+}
+function utf8to16(str) {
+  var out, i, len, c;
+  var char2, char3;
+  out = "";
+  len = str.length;
+  i = 0;
+  while (i < len) {
+    c = str.charCodeAt(i++);
+    switch (c >> 4) {
+      case 0:
+      case 1:
+      case 2:
+      case 3:
+      case 4:
+      case 5:
+      case 6:
+      case 7:
+        // 0xxxxxxx
+        out += str.charAt(i - 1);
+        break;
+      case 12:
+      case 13:
+        // 110x xxxx 10xx xxxx
+        char2 = str.charCodeAt(i++);
+        out += String.fromCharCode((c & 0x1F) << 6 | char2 & 0x3F);
+        break;
+      case 14:
+        // 1110 xxxx 10xx xxxx 10xx xxxx
+        char2 = str.charCodeAt(i++);
+        char3 = str.charCodeAt(i++);
+        out += String.fromCharCode((c & 0x0F) << 12 | (char2 & 0x3F) << 6 | (char3 & 0x3F) << 0);
+        break;
+    }
+  }
+  return out;
+}
+module.exports = {
+  encode: encode,
+  decode: decode,
+  utf16to8: utf16to8,
+  utf8to16: utf8to16
+};
+
+/***/ }),
+/* 573 */
+/*!*******************************************************************!*\
+  !*** D:/demo/businessCard/xiaochengxu/components/ossutil/hmac.js ***!
+  \*******************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Crypto = __webpack_require__(/*! ./crypto.js */ 574);
+(function () {
+  // Shortcut
+  var util = Crypto.util;
+  Crypto.HMAC = function (hasher, message, key, options) {
+    // Allow arbitrary length keys
+    key = key.length > hasher._blocksize * 4 ? hasher(key, {
+      asBytes: true
+    }) : util.stringToBytes(key);
+
+    // XOR keys with pad constants
+    var okey = key,
+      ikey = key.slice(0);
+    for (var i = 0; i < hasher._blocksize * 4; i++) {
+      okey[i] ^= 0x5C;
+      ikey[i] ^= 0x36;
+    }
+    var hmacbytes = hasher(util.bytesToString(okey) + hasher(util.bytesToString(ikey) + message, {
+      asString: true
+    }), {
+      asBytes: true
+    });
+    return options && options.asBytes ? hmacbytes : options && options.asString ? util.bytesToString(hmacbytes) : util.bytesToHex(hmacbytes);
+  };
+})();
+module.exports = Crypto;
+
+/***/ }),
+/* 574 */
+/*!*********************************************************************!*\
+  !*** D:/demo/businessCard/xiaochengxu/components/ossutil/crypto.js ***!
+  \*********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+var Crypto = {};
+(function () {
+  var base64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+  // Crypto utilities
+  var util = Crypto.util = {
+    // Bit-wise rotate left
+    rotl: function rotl(n, b) {
+      return n << b | n >>> 32 - b;
+    },
+    // Bit-wise rotate right
+    rotr: function rotr(n, b) {
+      return n << 32 - b | n >>> b;
+    },
+    // Swap big-endian to little-endian and vice versa
+    endian: function endian(n) {
+      // If number given, swap endian
+      if (n.constructor == Number) {
+        return util.rotl(n, 8) & 0x00FF00FF | util.rotl(n, 24) & 0xFF00FF00;
+      }
+
+      // Else, assume array and swap all items
+      for (var i = 0; i < n.length; i++) {
+        n[i] = util.endian(n[i]);
+      }
+      return n;
+    },
+    // Generate an array of any length of random bytes
+    randomBytes: function randomBytes(n) {
+      for (var bytes = []; n > 0; n--) {
+        bytes.push(Math.floor(Math.random() * 256));
+      }
+      return bytes;
+    },
+    // Convert a string to a byte array
+    stringToBytes: function stringToBytes(str) {
+      var bytes = [];
+      for (var i = 0; i < str.length; i++) {
+        bytes.push(str.charCodeAt(i));
+      }
+      return bytes;
+    },
+    // Convert a byte array to a string
+    bytesToString: function bytesToString(bytes) {
+      var str = [];
+      for (var i = 0; i < bytes.length; i++) {
+        str.push(String.fromCharCode(bytes[i]));
+      }
+      return str.join("");
+    },
+    // Convert a string to big-endian 32-bit words
+    stringToWords: function stringToWords(str) {
+      var words = [];
+      for (var c = 0, b = 0; c < str.length; c++, b += 8) {
+        words[b >>> 5] |= str.charCodeAt(c) << 24 - b % 32;
+      }
+      return words;
+    },
+    // Convert a byte array to big-endian 32-bits words
+    bytesToWords: function bytesToWords(bytes) {
+      var words = [];
+      for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
+        words[b >>> 5] |= bytes[i] << 24 - b % 32;
+      }
+      return words;
+    },
+    // Convert big-endian 32-bit words to a byte array
+    wordsToBytes: function wordsToBytes(words) {
+      var bytes = [];
+      for (var b = 0; b < words.length * 32; b += 8) {
+        bytes.push(words[b >>> 5] >>> 24 - b % 32 & 0xFF);
+      }
+      return bytes;
+    },
+    // Convert a byte array to a hex string
+    bytesToHex: function bytesToHex(bytes) {
+      var hex = [];
+      for (var i = 0; i < bytes.length; i++) {
+        hex.push((bytes[i] >>> 4).toString(16));
+        hex.push((bytes[i] & 0xF).toString(16));
+      }
+      return hex.join("");
+    },
+    // Convert a hex string to a byte array
+    hexToBytes: function hexToBytes(hex) {
+      var bytes = [];
+      for (var c = 0; c < hex.length; c += 2) {
+        bytes.push(parseInt(hex.substr(c, 2), 16));
+      }
+      return bytes;
+    },
+    // Convert a byte array to a base-64 string
+    bytesToBase64: function bytesToBase64(bytes) {
+      // Use browser-native function if it exists
+      // if (typeof btoa == "function") return btoa(util.bytesToString(bytes));
+
+      var base64 = [],
+        overflow;
+      for (var i = 0; i < bytes.length; i++) {
+        switch (i % 3) {
+          case 0:
+            base64.push(base64map.charAt(bytes[i] >>> 2));
+            overflow = (bytes[i] & 0x3) << 4;
+            break;
+          case 1:
+            base64.push(base64map.charAt(overflow | bytes[i] >>> 4));
+            overflow = (bytes[i] & 0xF) << 2;
+            break;
+          case 2:
+            base64.push(base64map.charAt(overflow | bytes[i] >>> 6));
+            base64.push(base64map.charAt(bytes[i] & 0x3F));
+            overflow = -1;
+        }
+      }
+
+      // Encode overflow bits, if there are any
+      if (overflow != undefined && overflow != -1) base64.push(base64map.charAt(overflow));
+
+      // Add padding
+      while (base64.length % 4 != 0) {
+        base64.push("=");
+      }
+      return base64.join("");
+    },
+    // Convert a base-64 string to a byte array
+    base64ToBytes: function base64ToBytes(base64) {
+      // Use browser-native function if it exists
+      if (typeof atob == "function") return util.stringToBytes(atob(base64));
+
+      // Remove non-base-64 characters
+      base64 = base64.replace(/[^A-Z0-9+\/]/ig, "");
+      var bytes = [];
+      for (var i = 0; i < base64.length; i++) {
+        switch (i % 4) {
+          case 1:
+            bytes.push(base64map.indexOf(base64.charAt(i - 1)) << 2 | base64map.indexOf(base64.charAt(i)) >>> 4);
+            break;
+          case 2:
+            bytes.push((base64map.indexOf(base64.charAt(i - 1)) & 0xF) << 4 | base64map.indexOf(base64.charAt(i)) >>> 2);
+            break;
+          case 3:
+            bytes.push((base64map.indexOf(base64.charAt(i - 1)) & 0x3) << 6 | base64map.indexOf(base64.charAt(i)));
+            break;
+        }
+      }
+      return bytes;
+    }
+  };
+
+  // Crypto mode namespace
+  Crypto.mode = {};
+})();
+module.exports = Crypto;
+
+/***/ }),
+/* 575 */
+/*!*******************************************************************!*\
+  !*** D:/demo/businessCard/xiaochengxu/components/ossutil/sha1.js ***!
+  \*******************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Crypto = __webpack_require__(/*! ./crypto.js */ 574);
+(function () {
+  // Shortcut
+  var util = Crypto.util;
+
+  // Public API
+  var SHA1 = Crypto.SHA1 = function (message, options) {
+    var digestbytes = util.wordsToBytes(SHA1._sha1(message));
+    return options && options.asBytes ? digestbytes : options && options.asString ? util.bytesToString(digestbytes) : util.bytesToHex(digestbytes);
+  };
+
+  // The core
+  SHA1._sha1 = function (message) {
+    var m = util.stringToWords(message),
+      l = message.length * 8,
+      w = [],
+      H0 = 1732584193,
+      H1 = -271733879,
+      H2 = -1732584194,
+      H3 = 271733878,
+      H4 = -1009589776;
+
+    // Padding
+    m[l >> 5] |= 0x80 << 24 - l % 32;
+    m[(l + 64 >>> 9 << 4) + 15] = l;
+    for (var i = 0; i < m.length; i += 16) {
+      var a = H0,
+        b = H1,
+        c = H2,
+        d = H3,
+        e = H4;
+      for (var j = 0; j < 80; j++) {
+        if (j < 16) w[j] = m[i + j];else {
+          var n = w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16];
+          w[j] = n << 1 | n >>> 31;
+        }
+        var t = (H0 << 5 | H0 >>> 27) + H4 + (w[j] >>> 0) + (j < 20 ? (H1 & H2 | ~H1 & H3) + 1518500249 : j < 40 ? (H1 ^ H2 ^ H3) + 1859775393 : j < 60 ? (H1 & H2 | H1 & H3 | H2 & H3) - 1894007588 : (H1 ^ H2 ^ H3) - 899497514);
+        H4 = H3;
+        H3 = H2;
+        H2 = H1 << 30 | H1 >>> 2;
+        H1 = H0;
+        H0 = t;
+      }
+      H0 += a;
+      H1 += b;
+      H2 += c;
+      H3 += d;
+      H4 += e;
+    }
+    return [H0, H1, H2, H3, H4];
+  };
+
+  // Package private blocksize
+  SHA1._blocksize = 16;
+})();
+module.exports = Crypto;
+
 /***/ })
 ]]);
 //# sourceMappingURL=../../.sourcemap/mp-weixin/common/vendor.js.map

Fichier diff supprimé car celui-ci est trop grand
+ 123 - 19
xiaochengxu/unpackage/dist/dev/mp-weixin/pages/mySet/myInfo.js


+ 4 - 2
xiaochengxu/unpackage/dist/dev/mp-weixin/pages/mySet/myInfo.json

@@ -1,5 +1,7 @@
 {
-  "navigationBarTitleText": "",
+  "navigationBarTitleText": "我的名片",
   "enablePullDownRefresh": false,
-  "usingComponents": {}
+  "usingComponents": {
+    "uni-icons": "/uni_modules/uni-icons/components/uni-icons/uni-icons"
+  }
 }

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
xiaochengxu/unpackage/dist/dev/mp-weixin/pages/mySet/myInfo.wxml


Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff