gitextract_6d5po4kp/ ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── dependabot.yml │ └── workflows/ │ ├── blank.yml │ └── codeql-analysis.yml ├── .gitignore ├── .travis.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── SECURITY.md ├── back/ │ ├── .gitignore │ ├── LICENSE │ ├── README-zh.md │ ├── README.md │ ├── pom.xml │ ├── resetDB.sh │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── msy/ │ │ │ └── plus/ │ │ │ ├── Application.java │ │ │ ├── aspect/ │ │ │ │ └── ControllerLogAspect.java │ │ │ ├── controller/ │ │ │ │ ├── AccountController.java │ │ │ │ ├── AnalysisController.java │ │ │ │ ├── CustomerFollowUpHistoryController.java │ │ │ │ ├── CustomerHandoverController.java │ │ │ │ ├── CustomerManagerController.java │ │ │ │ ├── DepartmentController.java │ │ │ │ ├── DictionaryContentsController.java │ │ │ │ ├── DictionaryDetailsController.java │ │ │ │ ├── EmployeeController.java │ │ │ │ ├── PermissionController.java │ │ │ │ └── RoleController.java │ │ │ ├── core/ │ │ │ │ ├── cache/ │ │ │ │ │ ├── CacheExpire.java │ │ │ │ │ └── MyRedisCacheManager.java │ │ │ │ ├── config/ │ │ │ │ │ ├── JasyptConfig.java │ │ │ │ │ ├── RedisCacheConfig.java │ │ │ │ │ ├── RedisConfig.java │ │ │ │ │ ├── Swagger3Config.java │ │ │ │ │ ├── ValidatorConfig.java │ │ │ │ │ ├── WebMvcConfig.java │ │ │ │ │ ├── WebSecurityConfig.java │ │ │ │ │ └── YamlPropertySourceFactory.java │ │ │ │ ├── constant/ │ │ │ │ │ └── ProjectConstant.java │ │ │ │ ├── dto/ │ │ │ │ │ └── AbstractConverter.java │ │ │ │ ├── exception/ │ │ │ │ │ ├── ExceptionResolver.java │ │ │ │ │ ├── ResourcesNotFoundException.java │ │ │ │ │ ├── RsaException.java │ │ │ │ │ ├── ServiceException.java │ │ │ │ │ ├── UsernameNotFoundException2.java │ │ │ │ │ └── YamlNotFoundException.java │ │ │ │ ├── jasypt/ │ │ │ │ │ └── MyEncryptablePropertyDetector.java │ │ │ │ ├── jwt/ │ │ │ │ │ ├── JwtConfigurationProperties.java │ │ │ │ │ └── JwtUtil.java │ │ │ │ ├── mapper/ │ │ │ │ │ └── MyMapper.java │ │ │ │ ├── response/ │ │ │ │ │ ├── Result.java │ │ │ │ │ ├── ResultCode.java │ │ │ │ │ └── ResultGenerator.java │ │ │ │ ├── rsa/ │ │ │ │ │ ├── RsaConfigurationProperties.java │ │ │ │ │ └── RsaUtils.java │ │ │ │ ├── service/ │ │ │ │ │ ├── AbstractService.java │ │ │ │ │ └── Service.java │ │ │ │ └── upload/ │ │ │ │ └── UploadConfigurationProperties.java │ │ │ ├── dto/ │ │ │ │ ├── AccountDTO.java │ │ │ │ ├── AccountLoginDTO.java │ │ │ │ ├── AnalysisQuery.java │ │ │ │ ├── CustomerHandoverList.java │ │ │ │ ├── CustomerManagerList.java │ │ │ │ ├── LoginResultDTO.java │ │ │ │ ├── RoleDTO.java │ │ │ │ └── RoleWithPermissionDTO.java │ │ │ ├── entity/ │ │ │ │ ├── AccountDO.java │ │ │ │ ├── AccountWithRoleDO.java │ │ │ │ ├── Analysis.java │ │ │ │ ├── CFUHSearch.java │ │ │ │ ├── CustomerFollowUpHistory.java │ │ │ │ ├── CustomerHandover.java │ │ │ │ ├── CustomerManager.java │ │ │ │ ├── Department.java │ │ │ │ ├── DictionaryContents.java │ │ │ │ ├── DictionaryDetails.java │ │ │ │ ├── Employee.java │ │ │ │ ├── EmployeeDetail.java │ │ │ │ ├── EmployeeWithRoleDO.java │ │ │ │ ├── LoginResultDO.java │ │ │ │ ├── Permission.java │ │ │ │ ├── RoleDO.java │ │ │ │ ├── RolePermissionDO.java │ │ │ │ ├── RoleWithPermissionDO.java │ │ │ │ └── Test.java │ │ │ ├── filter/ │ │ │ │ ├── AuthenticationFilter.java │ │ │ │ ├── CorsFilter.java │ │ │ │ ├── MyAuthenticationEntryPoint.java │ │ │ │ └── RequestWrapper.java │ │ │ ├── mapper/ │ │ │ │ ├── AccountMapper.java │ │ │ │ ├── CustomerFollowUpHistoryMapper.java │ │ │ │ ├── CustomerHandoverMapper.java │ │ │ │ ├── CustomerManagerMapper.java │ │ │ │ ├── DepartmentMapper.java │ │ │ │ ├── DictionaryContentsMapper.java │ │ │ │ ├── DictionaryDetailsMapper.java │ │ │ │ ├── EmployeeMapper.java │ │ │ │ ├── PermissionMapper.java │ │ │ │ └── RoleMapper.java │ │ │ ├── query/ │ │ │ │ └── AccountQuery.java │ │ │ ├── service/ │ │ │ │ ├── AccountService.java │ │ │ │ ├── CustomerFollowUpHistoryService.java │ │ │ │ ├── CustomerHandoverService.java │ │ │ │ ├── CustomerManagerService.java │ │ │ │ ├── DepartmentService.java │ │ │ │ ├── DictionaryContentsService.java │ │ │ │ ├── DictionaryDetailsService.java │ │ │ │ ├── EmployeeService.java │ │ │ │ ├── PermissionService.java │ │ │ │ ├── RoleService.java │ │ │ │ └── impl/ │ │ │ │ ├── AccountServiceImpl.java │ │ │ │ ├── CustomerFollowUpHistoryServiceImpl.java │ │ │ │ ├── CustomerHandoverServiceImpl.java │ │ │ │ ├── CustomerManagerServiceImpl.java │ │ │ │ ├── DepartmentServiceImpl.java │ │ │ │ ├── DictionaryContentsServiceImpl.java │ │ │ │ ├── DictionaryDetailsServiceImpl.java │ │ │ │ ├── EmployeeServiceImpl.java │ │ │ │ ├── PermissionServiceImpl.java │ │ │ │ ├── RoleServiceImpl.java │ │ │ │ └── UserDetailsServiceImpl.java │ │ │ └── util/ │ │ │ ├── AssertUtils.java │ │ │ ├── ContextUtils.java │ │ │ ├── DateUtils.java │ │ │ ├── FileUtils.java │ │ │ ├── IdCardUtils.java │ │ │ ├── IdUtils.java │ │ │ ├── IpUtils.java │ │ │ ├── JsonUtils.java │ │ │ ├── RedisUtils.java │ │ │ └── UrlUtils.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ ├── spring-devtools.yml │ │ │ └── swagger3.yml │ │ ├── application-dev.yml │ │ ├── application-test.yml │ │ ├── application.yml │ │ ├── banner.txt │ │ ├── mapper/ │ │ │ ├── AccountMapper.xml │ │ │ ├── CustomerFollowUpHistoryMapper.xml │ │ │ ├── CustomerHandoverMapper.xml │ │ │ ├── CustomerManagerMapper.xml │ │ │ ├── DepartmentMapper.xml │ │ │ ├── DictionaryContentsMapper.xml │ │ │ ├── DictionaryDetailsMapper.xml │ │ │ ├── EmployeeMapper.xml │ │ │ ├── PermissionMapper.xml │ │ │ └── RoleMapper.xml │ │ └── rsa/ │ │ ├── private-key.pem │ │ └── public-key.pem │ └── test/ │ ├── java/ │ │ ├── CodeGenerator.java │ │ ├── JasyptStringEncryptor.java │ │ ├── PasswordEncryptor.java │ │ ├── RsaEncryptor.java │ │ └── com/ │ │ └── msy/ │ │ └── plus/ │ │ ├── AccountControllerTest.java │ │ ├── BaseControllerTest.java │ │ ├── WithCustomSecurityContextFactory.java │ │ ├── WithCustomUser.java │ │ └── util/ │ │ └── JsonUtilsTest.java │ ├── resources/ │ │ ├── generator/ │ │ │ └── template/ │ │ │ ├── controller-restful.ftl │ │ │ ├── controller.ftl │ │ │ ├── service-impl.ftl │ │ │ └── service.ftl │ │ └── sql/ │ │ └── dev/ │ │ ├── account.sql │ │ ├── account_role.sql │ │ └── role.sql │ └── rest-test/ │ └── upload.http ├── docs/ │ ├── CRM需求模拟.docx │ ├── JAVA实训方案-CRM(10天)-高级.docx │ ├── crm商业计划书.pptx │ ├── 员工信息模板.xlsx │ └── 项目需求文档.docx ├── front/ │ ├── .github/ │ │ └── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── .gitignore │ ├── LICENSE │ ├── README.en-US.md │ ├── README.md │ ├── babel.config.js │ ├── docs/ │ │ ├── .vuepress/ │ │ │ ├── components/ │ │ │ │ ├── Alert.vue │ │ │ │ ├── Color.vue │ │ │ │ └── ColorList.vue │ │ │ ├── config.js │ │ │ ├── plugins/ │ │ │ │ └── alert/ │ │ │ │ ├── Alert.vue │ │ │ │ ├── alertMixin.js │ │ │ │ ├── clientRootMixin.js │ │ │ │ ├── enhanceApp.js │ │ │ │ └── index.js │ │ │ └── styles/ │ │ │ ├── index.styl │ │ │ └── palette.styl │ │ ├── README.md │ │ ├── advance/ │ │ │ ├── README.md │ │ │ ├── api.md │ │ │ ├── async.md │ │ │ ├── authority.md │ │ │ ├── chart.md │ │ │ ├── error.md │ │ │ ├── guard.md │ │ │ ├── i18n.md │ │ │ ├── interceptors.md │ │ │ ├── login.md │ │ │ ├── skill.md │ │ │ └── theme.md │ │ ├── develop/ │ │ │ ├── README.md │ │ │ ├── layout.md │ │ │ ├── mock.md │ │ │ ├── page.md │ │ │ ├── router.md │ │ │ ├── service.md │ │ │ └── theme.md │ │ ├── other/ │ │ │ ├── README.md │ │ │ ├── community.md │ │ │ └── upgrade.md │ │ └── start/ │ │ ├── README.md │ │ ├── faq.md │ │ └── use.md │ ├── package.json │ ├── public/ │ │ └── index.html │ ├── src/ │ │ ├── App.vue │ │ ├── bootstrap.js │ │ ├── components/ │ │ │ ├── cache/ │ │ │ │ └── AKeepAlive.js │ │ │ ├── card/ │ │ │ │ └── ChartCard.vue │ │ │ ├── chart/ │ │ │ │ ├── Bar.vue │ │ │ │ ├── MiniArea.vue │ │ │ │ ├── MiniBar.vue │ │ │ │ ├── MiniProgress.vue │ │ │ │ ├── Radar.vue │ │ │ │ ├── RankingList.vue │ │ │ │ ├── Trend.vue │ │ │ │ └── index.less │ │ │ ├── checkbox/ │ │ │ │ ├── ColorCheckbox.vue │ │ │ │ ├── ImgCheckbox.vue │ │ │ │ └── index.js │ │ │ ├── exception/ │ │ │ │ ├── ExceptionPage.vue │ │ │ │ └── typeConfig.js │ │ │ ├── form/ │ │ │ │ └── FormRow.vue │ │ │ ├── input/ │ │ │ │ └── IInput.vue │ │ │ ├── menu/ │ │ │ │ ├── Contextmenu.vue │ │ │ │ ├── SideMenu.vue │ │ │ │ ├── index.less │ │ │ │ └── menu.js │ │ │ ├── page/ │ │ │ │ └── header/ │ │ │ │ ├── PageHeader.vue │ │ │ │ └── index.less │ │ │ ├── result/ │ │ │ │ └── Result.vue │ │ │ ├── setting/ │ │ │ │ ├── Setting.vue │ │ │ │ ├── SettingItem.vue │ │ │ │ └── i18n.js │ │ │ ├── table/ │ │ │ │ ├── StandardTable.vue │ │ │ │ ├── advance/ │ │ │ │ │ ├── ActionColumns.vue │ │ │ │ │ ├── ActionSize.vue │ │ │ │ │ ├── AdvanceTable.vue │ │ │ │ │ ├── SearchArea.vue │ │ │ │ │ └── index.js │ │ │ │ └── api/ │ │ │ │ └── ApiTable.vue │ │ │ ├── task/ │ │ │ │ ├── TaskGroup.vue │ │ │ │ └── TaskItem.vue │ │ │ ├── tool/ │ │ │ │ ├── AStepItem.vue │ │ │ │ ├── AvatarList.vue │ │ │ │ ├── DetailList.vue │ │ │ │ ├── Drawer.vue │ │ │ │ ├── FooterToolBar.vue │ │ │ │ ├── HeadInfo.vue │ │ │ │ ├── TagSelect.vue │ │ │ │ └── TagSelectOption.vue │ │ │ └── transition/ │ │ │ └── PageToggleTransition.vue │ │ ├── config/ │ │ │ ├── config.js │ │ │ ├── default/ │ │ │ │ ├── admin.config.js │ │ │ │ ├── animate.config.js │ │ │ │ ├── antd.config.js │ │ │ │ ├── index.js │ │ │ │ └── setting.config.js │ │ │ ├── index.js │ │ │ └── replacer/ │ │ │ ├── index.js │ │ │ └── resolve.config.js │ │ ├── layouts/ │ │ │ ├── AdminLayout.vue │ │ │ ├── BlankView.vue │ │ │ ├── CommonLayout.vue │ │ │ ├── PageLayout.vue │ │ │ ├── PageView.vue │ │ │ ├── footer/ │ │ │ │ └── PageFooter.vue │ │ │ ├── header/ │ │ │ │ ├── AdminHeader.vue │ │ │ │ ├── HeaderAvatar.vue │ │ │ │ ├── HeaderNotice.vue │ │ │ │ ├── HeaderSearch.vue │ │ │ │ └── index.less │ │ │ └── tabs/ │ │ │ ├── TabsHead.vue │ │ │ ├── TabsView.vue │ │ │ ├── i18n.js │ │ │ └── index.js │ │ ├── main.js │ │ ├── mock/ │ │ │ ├── common/ │ │ │ │ ├── activityData.js │ │ │ │ ├── index.js │ │ │ │ └── tableData.js │ │ │ ├── goods/ │ │ │ │ └── index.js │ │ │ ├── index.js │ │ │ ├── user/ │ │ │ │ ├── login.js │ │ │ │ └── routes.js │ │ │ └── workplace/ │ │ │ └── index.js │ │ ├── pages/ │ │ │ ├── analysis/ │ │ │ │ └── index.vue │ │ │ ├── components/ │ │ │ │ ├── Palette.vue │ │ │ │ ├── TaskCard.vue │ │ │ │ └── table/ │ │ │ │ ├── Api.vue │ │ │ │ ├── Table.vue │ │ │ │ └── index.js │ │ │ ├── customer/ │ │ │ │ ├── followHistory.vue │ │ │ │ ├── handoverHistory.vue │ │ │ │ ├── manager.vue │ │ │ │ ├── official.vue │ │ │ │ └── resource.vue │ │ │ ├── dashboard/ │ │ │ │ └── workplace/ │ │ │ │ ├── WorkPlace.vue │ │ │ │ ├── i18n.js │ │ │ │ ├── index.js │ │ │ │ └── index.less │ │ │ ├── department/ │ │ │ │ └── index.vue │ │ │ ├── dictionary/ │ │ │ │ ├── contents.vue │ │ │ │ └── details.vue │ │ │ ├── employee/ │ │ │ │ └── index.vue │ │ │ ├── exception/ │ │ │ │ ├── 403.vue │ │ │ │ ├── 404.vue │ │ │ │ └── 500.vue │ │ │ ├── login/ │ │ │ │ ├── Login.vue │ │ │ │ └── index.js │ │ │ ├── permission/ │ │ │ │ └── index.vue │ │ │ ├── result/ │ │ │ │ ├── Error.vue │ │ │ │ └── Success.vue │ │ │ └── role/ │ │ │ └── index.vue │ │ ├── plugins/ │ │ │ ├── authority-plugin.js │ │ │ ├── i18n-extend.js │ │ │ ├── index.js │ │ │ └── tabs-page-plugin.js │ │ ├── router/ │ │ │ ├── async/ │ │ │ │ ├── config.async.js │ │ │ │ └── router.map.js │ │ │ ├── config.js │ │ │ ├── guards.js │ │ │ ├── i18n.js │ │ │ └── index.js │ │ ├── services/ │ │ │ ├── analysis.js │ │ │ ├── api.js │ │ │ ├── customerFollowUpHistory.js │ │ │ ├── customerHandover.js │ │ │ ├── customerManager.js │ │ │ ├── dataSource.js │ │ │ ├── department.js │ │ │ ├── dictionaryContents.js │ │ │ ├── dictionaryDetails.js │ │ │ ├── employee.js │ │ │ ├── index.js │ │ │ ├── permission.js │ │ │ ├── role.js │ │ │ └── user.js │ │ ├── store/ │ │ │ ├── index.js │ │ │ └── modules/ │ │ │ ├── account.js │ │ │ ├── index.js │ │ │ └── setting.js │ │ ├── theme/ │ │ │ ├── antd/ │ │ │ │ ├── ant-menu.less │ │ │ │ ├── ant-message.less │ │ │ │ ├── ant-table.less │ │ │ │ ├── ant-time-picker.less │ │ │ │ └── index.less │ │ │ ├── default/ │ │ │ │ ├── color.less │ │ │ │ ├── index.less │ │ │ │ ├── nprogress.less │ │ │ │ └── style.less │ │ │ ├── index.less │ │ │ └── theme.less │ │ └── utils/ │ │ ├── Objects.js │ │ ├── authority-utils.js │ │ ├── axios-interceptors.js │ │ ├── colors.js │ │ ├── formatter.js │ │ ├── i18n.js │ │ ├── request.js │ │ ├── routerUtil.js │ │ ├── theme-color-replacer-extend.js │ │ ├── themeUtil.js │ │ ├── util.js │ │ └── validators.js │ └── vue.config.js └── mysql/ ├── dev.sql └── prod.sql