Bläddra i källkod

Merge branch 'master' of http://47.100.37.243:10080/wutt/manHourHousekeeper

ggooalice 2 år sedan
förälder
incheckning
91b1d5a2e8
44 ändrade filer med 1387 tillägg och 23 borttagningar
  1. 810 0
      fhKeeper/formulahousekeeper/inva_4_tivo/css/followup.css
  2. 1 1
      fhKeeper/formulahousekeeper/inva_4_tivo/css/projectt.css
  3. 420 0
      fhKeeper/formulahousekeeper/inva_4_tivo/followup.html
  4. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/backk.jpg
  5. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/bannar.png
  6. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/dibuBon.jpg
  7. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huaban1.png
  8. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huaban2.png
  9. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huaban3.png
  10. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huaban4.png
  11. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huaban5.png
  12. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huabanIon.png
  13. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huoConTilIon.png
  14. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huoLeft.jpg
  15. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/imgg.png
  16. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing1.png
  17. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing3.png
  18. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing4.png
  19. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing5.png
  20. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing6.png
  21. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing7.png
  22. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing9.png
  23. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiFive.png
  24. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiFour.png
  25. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiOne.png
  26. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiSeven.png
  27. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiSix.png
  28. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiThree.png
  29. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiTwo.png
  30. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/suifang.png
  31. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/suifangs1.png
  32. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/suifangs2.png
  33. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/suifangs3.png
  34. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/suifangs4.png
  35. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/suifangs5.png
  36. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/toxOne.png
  37. 1 1
      fhKeeper/formulahousekeeper/inva_4_tivo/index.html
  38. 104 0
      fhKeeper/formulahousekeeper/inva_4_tivo/js/followup.js
  39. 1 1
      fhKeeper/formulahousekeeper/inva_4_tivo/project.html
  40. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  41. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  42. 4 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Task.java
  43. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  44. 40 14
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

+ 810 - 0
fhKeeper/formulahousekeeper/inva_4_tivo/css/followup.css

@@ -0,0 +1,810 @@
+@charset "utf-8";
+
+html {font-size: 10px; -webkit-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0,0,0,0);}
+@media screen and (min-width:320px){html{font-size:    10px;}}
+@media screen and (min-width:360px){html{font-size: 11.25px;}}
+@media screen and (min-width:375px){html{font-size: 11.7px;}}
+@media screen and (min-width:480px){html{font-size:    15px;}}
+@media screen and (min-width:414px){html{font-size:  13px;}}
+@media screen and (min-width:560px){html{font-size:  17.5px;}}
+@media screen and (min-width:640px){html{font-size:    20px;}}
+
+.contentes {
+    width: 81.25rem;
+    margin: auto;
+    position: relative;
+}
+.contentes img {
+    width: 100%;
+    height: 100%;
+}
+/* 质询图标 */
+.consulting {
+    width: 3.125rem;
+    height: 3.125rem;
+    border-radius: 50%;
+    background: #fff;
+    position: fixed;
+    bottom: 3.75rem;
+    right: 6.25rem;
+    z-index: 4;
+    box-shadow: 0 0 1.25rem 0px #cbcbcb;
+    cursor:pointer;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+.consulting:hover {
+    background: #3396FB;
+}
+.conImgConImg {
+    width: 2.5rem;
+    height: 2.5rem;
+    position: relative;
+    margin-top: 1.5625rem;
+    margin-left: 1.125rem;
+}
+.conImgConImg img{
+    width: 100%;
+}
+/* 咨询 */
+.zhixun {
+    display: block;
+    position: fixed;
+    bottom: 7.5rem;
+    right: 2.5rem;
+    padding: 1rem;
+    background: #fff;
+    box-shadow: .1875rem .1875rem .625rem #ccc;
+    z-index: 99999999;
+    text-align: center;
+}
+.zhixun p {
+    margin: 8px 0;
+}
+.zhixun img {
+    width: 8rem;
+}
+
+.tabOn {
+    background: #fff;
+    color: #20a0ff !important;
+}
+.white{
+    background: #fff !important;
+}
+/* 产品介绍 */
+.product {
+    width: 100%;
+    position: fixed;
+    z-index: 10;
+    top: 6.25rem;
+    left: 0;
+    background: #fff;
+    height: 18.75rem;
+    border-top: .0625rem solid rgb(163, 163, 163);
+    box-shadow: 1px 3px 5px 0px #ddd;
+}
+.connont {
+    width: 81.25rem;
+    margin: auto;
+}
+
+.tils::before {
+    content:"";
+    height: .125rem;
+    width: 100%;
+    bottom: 0;
+    left: 0;
+    background: #37B8FF;
+    position: absolute;
+}
+/* 导航下拉 */
+.management {
+    margin-top: 1.25rem;
+    width: 33.75rem;
+    font-size: 1rem;
+}
+.management h3 {
+    width: 100%;
+    font-size: 1rem;
+    font-weight: normal;
+    color: #333333;
+    line-height: 2.5rem;
+    border-bottom: .0625rem solid rgb(180, 180, 180);
+    margin-left: 1.25rem;
+}
+.management ul {
+    margin-top: .625rem;
+    width: 11.25rem;
+}
+.management li{
+    margin-top: .625rem;
+    line-height: 2.5rem;
+    cursor:pointer;
+    padding-left: 1.25rem;
+}
+.management a {
+    color: #333;
+}
+.management li:hover {
+    background: #F0F4FF;
+    border-radius: .625rem;
+    color: #3370FF;
+}
+
+/* js锁添加的样式 */
+.tils::before {
+    content:"";
+    height: .125rem;
+    width: 100%;
+    bottom: 0;
+    left: 0;
+    background: #37B8FF;
+    position: absolute;
+}
+.hanAll {
+    background: #fff !important;
+    box-shadow: .0625rem .1875rem .3125rem 0px #ddd;
+}
+.abc .til {
+    color: #fff !important;
+}
+.abc .til a{
+    color: #fff !important;
+}
+.navigationBarBack {
+    /* background: #f6fef9; */
+    background-color:transparent !important;
+}
+.navigationBar {
+    box-shadow:none;
+}
+.navigationTitle a {
+    color: #333 !important;
+}
+.navigationTitle {
+    color: #333 !important;
+}
+
+/* bannar */
+.bannar {
+    width: 100%;
+    margin: auto;
+    position: relative;
+}
+.bannar img {
+    width: 100%;
+}
+.bannarCon {
+    position: absolute;
+    z-index: 1;
+    top: 15.625rem;
+    left:  50%;
+    width: 81.25rem;
+    margin-left: -40.625rem;
+}
+.bannarConTil {
+    font-size: 3.75rem;
+    color: #fff;
+    letter-spacing: .375rem;
+}
+.bannarConTilP  {
+    font-size: 1.5rem;
+    color: #fff;
+    letter-spacing: .25rem;
+    margin-top: 2.5rem;
+    margin-bottom: 10.3125rem;
+}
+.bannBtn {
+    width: 12.5rem;
+    height: 3.875rem;
+    border-radius: 3.875rem;
+    border: .125rem solid #fff;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    font-size: 1.375rem;
+}
+.bannarCon a {
+    color: #fff;
+    letter-spacing: .1875rem;
+}
+/* 随访管家 */
+.collaborationTeam {
+    width: 100%;
+    background: #ffffff;
+    height: 250vh;
+}
+.collTeam {
+    height: 100vh;
+    box-sizing: border-box;
+    position: sticky;
+    top: 6.375rem;
+    background: url(../image/followup/backk.jpg) no-repeat center;
+    background-size: 100% 114%;
+}
+.collCent {
+    display: flex;
+    justify-content: center;
+    flex-wrap: wrap;
+    box-sizing: border-box;
+    padding-top: 12.5rem;
+}
+.collCentDiv {
+
+}
+.collCentImg {
+    width: 8.125rem;
+    height: 8.125rem;
+    position: relative;
+    z-index: 2;
+}
+.collCentFonts {
+    font-size: 2.25rem;
+    color: #333;
+    overflow: hidden;
+    width: 100%;
+    /* padding-left: 2.5rem; */
+    text-align: center;
+    padding-top: 1.5625rem;
+}
+.collCentFonts span {
+    color: #5e95f8;
+}
+
+/* 专业流程 */
+.professional {
+    width: 100%;
+    background: #fbfefb;
+}
+.professionalBox {
+    position: relative;
+    width: 100%;
+    height: 46.25rem;
+    padding-top: 3.75rem;
+}
+.professionalBoxTil {
+    position: absolute;
+    font-size: 3.125rem;
+    font-family: '黑体';
+    line-height: 5.625rem;
+    padding-top: 2.5rem;
+}
+.professionalBoxTil span {
+    font-size: 4.0625rem;
+}
+.professionalBoxTil i {
+    font-style: normal;
+    color: #7669f6;
+}
+.professionalBoxTilRight {
+    position: relative;
+    width: 54.8rem;
+    height: 46.25rem;
+}
+.proList, .proListLeft {
+    font-size: 1.25rem;
+    color: #6b5cf5;
+    line-height: 2.5rem;
+}
+.proList {
+    position: absolute;
+    right: 0rem;
+    top: 8.2496rem
+}
+.proListLeft {
+    position: absolute;
+    left: 0;
+    bottom: 4.375rem;
+}
+.proList span, .proListLeft span {
+    display: inline-block;
+    margin-right: .625rem;
+    font-size: 1.875rem;
+}
+.collections {
+    width: 43.75rem;
+    height: 38.4375rem;
+    position: relative;
+}
+.huabanOne {
+    width: 10rem;
+    height: 15rem;
+    background-size: 100%;
+    margin: auto;
+    box-sizing: border-box;
+    padding-top: 2.5rem;
+}
+.huabanOne div {
+    text-align: center;
+    margin-top: .5rem;
+    font-size: 1.375rem;
+    font-family: '黑体';
+    color: #fff;
+}
+.rotating {
+    position:absolute;
+    top: 0;
+    left: 50%;
+    margin-left: 5rem;
+    height: 46.5rem;
+    margin: auto;
+    width: 10rem;
+}
+.huanOne {
+    background: url(../image/followup/huaban1.png) no-repeat center;
+}
+.huanOneIon {
+    background: url(../image/followup/huabanIon.png) no-repeat -295px 0;
+	width: 42px;
+	height: 41px;
+    margin: auto;
+}
+
+.huanTwo {
+    background: url(../image/followup/huaban2.png) no-repeat center;
+}
+.huanTwoIon {
+    background: url(../image/followup/huabanIon.png) no-repeat -517px -77px;
+	width: 44px;
+	height: 44px;
+    margin: auto;
+}
+
+.huanThere {
+    background: url(../image/followup/huaban3.png) no-repeat center;
+}
+.huanThereIon {
+    background: url(../image/followup/huabanIon.png) no-repeat -579px -303px;
+	width: 43px;
+	height: 46px;
+    margin: auto;
+}
+
+.huanFour {
+    background: url(../image/followup/huaban4.png) no-repeat center;
+}
+.huanFourIon {
+    background: url(../image/followup/huabanIon.png) no-repeat -467px -499px;
+	width: 45px;
+	height: 44px;
+    margin: auto;
+}
+
+.huanFive {
+    background: url(../image/followup/huaban2.png) no-repeat center;
+}
+.huanFiveIon {
+    background: url(../image/followup/huabanIon.png) no-repeat -130px -499px;
+	width: 55px;
+	height: 44px;
+    margin: auto;
+}
+
+.huanXis {
+    background: url(../image/followup/huaban3.png) no-repeat center;
+}
+.huanXisIon {
+    background: url(../image/followup/huabanIon.png) no-repeat 0 -307px;
+	width: 45px;
+	height: 46px;
+    margin: auto;
+}
+
+.huanSeven {
+    background: url(../image/followup/huaban1.png) no-repeat center;
+}
+.huanSevenIon {
+    background: url(../image/followup/huabanIon.png) no-repeat -68px -77px;
+	width: 46px;
+	height: 44px;
+    margin: auto;
+}
+
+/* 轻松管理 */
+.easyMan {
+    font-family: '黑体';
+}
+.easyMan h2{
+    width: 100%;
+    text-align: center;
+    font-size: 3.125rem;
+    color: #333333;
+    font-weight: normal;
+    margin: 3.75rem 0;
+}
+.easyMan span{
+    color: #6b5cf5;
+}
+.easyManBox {
+    width: 75rem;
+    height: 31.875rem;
+    margin: auto;
+    box-shadow: 4px 6px 20px 0px #c1c1c1;
+    margin-bottom: 6.875rem;
+    display: flex;
+    justify-content: flex-end;
+    box-sizing: border-box;
+    /* padding-top: 2.9375rem; */
+    position: relative;
+}
+.easyManBox img {
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    top: 0;
+    left: 0;
+}
+.easyManBoxCon {
+    margin-top: 2.9375rem;
+    width: 39.1875rem;
+    height: 23.4375rem;
+    position: relative;
+    z-index: 1;
+    margin-right: 2rem;
+}
+.easyManBoxCon img{
+    width: 34.375rem;
+    height: 21.125rem;
+    position: absolute;
+    top: 2.125rem;
+    left: 2.8125rem;
+}
+.easyManBoxConCli {
+    width: 100%;
+    display: flex;
+    justify-content: space-between;
+    flex-wrap: wrap;
+}
+.easyManBoxConCliOne {
+    width: 11.6875rem;
+    height: 4.125rem;
+    border-radius: .625rem;
+    overflow: hidden;
+    box-sizing: border-box;
+    background: #fff;
+    border: .0625rem solid #bebebe;
+    position: relative;
+    z-index: 1;
+    margin-bottom: 5.3125rem;
+    cursor: pointer;
+}
+.easyManBoxConCliOne span {
+    display: inline-block;
+    width: .875rem;
+    height: .875rem;
+    border-radius: 50%;
+    margin: .25rem 0 0 .875rem;
+    background: #fff;
+}
+.easyManBoxConCliOneTil {
+    width: 100%;
+    height: 1.25rem;
+}
+.easyManBoxConCliOneCen {
+    width: 100%;
+    text-align: center;
+    line-height: 2.5rem;
+    color: #595959;
+    font-size: 1.25rem;
+}
+.easyOn {
+    border: .0625rem solid #3475c5;
+}
+.easyOn span {
+    background: #3475c5;
+}
+.easyOn .easyManBoxConCliOneCen {
+    color: #ada6f9;
+}
+/* 随访管家 */
+.housekeeper {
+    background: #f3f3fd;
+    padding: 7.5rem 0;
+}
+.housekeeperCon {
+    height: 36.25rem;
+    width: 68.75rem;
+    /* margin: auto; */
+    border-radius: 1.25rem;
+    border: 1px solid #b3b3b3;
+    position: relative;
+    overflow: hidden;
+    background: #fff;
+    display: flex;
+    box-shadow: .125rem .125rem .625rem .0625rem #cfcfcf;;
+}
+.housekCon {
+    width: 75rem;
+    margin: auto;
+    position: relative;
+}
+.housekeeperConZuo {
+    display: inline-block;
+    width: 14.5rem;
+    border-right: .0625rem solid #e5e6e8;
+    background: #f7f8fa;
+    height: 36.25rem;
+}
+.housekeeperConZuoUl, .housekeeperConZuoLi {
+    display: flex;
+    align-items: center;
+    height: 4.5rem;
+    color: #333;
+    font-family: '黑体';
+    border-bottom: .0625rem solid #e5e6e8;
+}
+.housekeeperConZuoUl {
+    font-size: 1.5rem;
+    font-weight: bold;
+}
+.housekeeperConZuoLi {
+    font-size: 1rem;
+    cursor: pointer;
+}
+.housekeeperConZuoUl img, .housekeeperConZuoLi img{
+    width: 2.25rem;
+    height: 2.25rem;
+    margin: 0 .9375rem 0 1.375rem;
+}
+.housekeeperOn {
+    background: #e5e6e8;
+}
+.housekeeperConYou {
+    width: 54.0625rem;
+    display: inline-block;
+    height: 36.25rem;
+    background: url(../image/followup/huoLeft.jpg) no-repeat left;
+    background-size: 15.625rem 100%;
+    position: relative;
+}
+.housekeeperConYouTil {
+    font-size: 3.125rem;
+    color: #555555;
+    font-family: '黑体';
+    font-weight: bold;
+    position: absolute;
+    top: 50%;
+    margin-top: -6.125rem;
+    left: 3.75rem;
+}
+.housekeeperConYouTil span {
+    color: #6f5ff4;
+}
+.housekeeperConYouCon {
+    width: 38.75rem;
+    height: 35rem;
+    border-radius: 1.25rem;
+    overflow: hidden;
+    border: .0625rem solid #b3b3b3;
+    position: absolute;
+    right: .875rem;
+    top: .5625rem;
+    background: #f6f8f9;
+    box-shadow: .0625rem .0625rem .375rem 0 #d1d1d1
+}
+.housekeeperConYouConTli {
+    width: 100%;
+    background: #fff;
+    height: 3.75rem;
+    display: flex;
+    border-bottom: .0625rem solid #e5e6e8;
+    font-size: 1.375rem;
+    font-family: '黑体';
+    color: #6f5ff4;
+    align-items: center;
+    font-weight: bold;
+}
+.housekeeperConYouConTli img {
+    width: 1.25rem;
+    height: 1.25rem;
+    display: inline-block;
+    margin: 0 1.25rem;
+}
+.housekeeperConYouConBon {
+    width: 100%;
+    height: 31.25rem;
+    background: url(../image/followup/dibuBon.jpg) no-repeat bottom;
+    background-size: 100% 6.375rem;
+}
+.housekConImg {
+    width: 49.375rem;
+    height: 25.625rem;
+    position: absolute;
+    top: 5.75rem;
+    right: 0;
+    box-shadow: .25rem .1875rem 1.25rem .1875rem #d1d1d1;
+}
+.housekConImg img {
+    width: 100%;
+    height: 100%;
+}
+
+/* 客户评价 */
+.evaluation {
+    width: 100%;
+    height: 81.25rem;
+    background-image: linear-gradient(#fff, #d8cef6);
+}
+.evaluationKehuTil {
+    text-align: center;
+    font-family: '黑体';
+}
+.evaluationKehuTil h2 {
+    text-align: center;
+    font-size: 3.125rem;
+    font-weight: normal;
+    color: #1381ea;
+    padding: 3.5rem 0 .9375rem 0;
+}
+.evaluationKehuTil p {
+    text-align: center;
+    font-size: 1.625rem;
+    color: #595959;
+    margin-bottom: 5.5rem;
+}
+.evaluationKehuCon {
+    width: 76.25rem;
+    margin: auto;
+    display: flex;
+    justify-content: space-around;
+}
+.evaluationKehuConLi {
+    width: 16.875rem;
+    height: 28.5rem;
+    border-radius: 1.25rem;
+    overflow: hidden;
+    cursor: pointer;
+}
+.evaluationKehuConImg {
+    width: 10.6875rem;
+    height: 10.6875rem;
+    margin: auto;
+    border-radius: 10.6875rem;
+    margin-top: 3.125rem;
+    box-sizing: border-box;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+.evaluationKehuCon h3 {
+    font-weight: normal;
+    font-family: '黑体';
+    font-size: 1.75rem;
+    margin-top: 1.5rem;
+    margin-bottom: 2.9375rem;
+    padding-left: 3rem;
+}
+.evaluationKehuCon p {
+    width: 100%;
+    font-size: 1rem;
+    color: #555555;
+    /* font-family: '黑体'; */
+    text-align: center;
+    line-height: 1.5rem;
+}
+.evaluationKehuConLi:hover {
+    background: #5931db;
+}
+.evaluationKehuConLi:hover img {
+    border: .3125rem solid #6bbdd9;
+    border-radius: 50%;
+}
+.evaluationKehuConLi:hover h3 {
+    color: #fff;
+}
+.evaluationKehuConLi:hover p {
+    color: #fff;
+}
+
+/* 产品定价 */
+.pricing {
+    width: 75rem;
+    margin: auto;
+    margin-top: 3.125rem;
+}
+.pricing h2 {
+    /* font-weight: normal; */
+    font-size: 2.8125rem;
+    color: #333;
+    margin-bottom: 2.8125rem;
+}
+.pricingsConTop {
+    display: flex;
+    flex-wrap: wrap;
+    box-shadow: 0 0 20px 1px #b1b1b1;
+    border-radius: .625rem;
+    /* border-bottom: 1px solid #333; */
+    /* border-right: 1px solid #333;  */
+}
+.pricingsConTop div {
+    color: #333333;
+    width: 50%;
+    line-height: 3.75rem;
+    text-align: center;
+    font-size: 1.25rem;
+    box-sizing: border-box;
+    border-top: 1px solid #939393;
+    /* border-left: 1px solid #333; */
+}
+
+
+/* 底部 */
+.footer-frame {
+	width: 100%;
+	height: 24px;
+}
+
+.footer {
+	padding-top: 48px;
+	padding-bottom: 8px;
+	background-color: #20a0ff;
+    margin-top: -0.125rem;
+}
+
+.footer .footer-col {
+	margin-bottom: 36px;
+}
+
+.footer h4 {
+	margin-bottom: 10px;
+	color: #fff;
+}
+
+.footer .list-unstyled,
+.footer p {
+	color: #f3f7fd;
+}
+
+.footer .footer-col.middle .list-unstyled .fas {
+	color: #fff;
+	font-size: 8px;
+	line-height: 24px;
+}
+
+.footer .footer-col.middle .list-unstyled .media-body {
+	margin-left: 8px;
+}
+
+.footer .footer-col.last .list-unstyled .fas {
+	color: #fff;
+	font-size: 14px;
+	line-height: 24px;
+}
+
+.footer .footer-col.last .list-unstyled .media-body {
+	margin-left: 10px;
+}
+
+.footer .footer-col.last .list-unstyled .fas.fa-globe {
+	margin-left: 16px;
+	margin-right: 10px;
+}
+
+.navbar {
+    padding: 0 !important;
+}
+
+.ulss {
+    display: inline-block;
+}
+.alss {
+    display: flex;
+    justify-content: space-around;
+    width: 87.5rem;
+    margin: auto;
+}
+.footsst {
+    background: #d7cef6;
+}
+
+.copyright {
+    width: 100%;
+    text-align: center;
+    line-height: 2.5rem;
+    color: #fff;
+    font-size: 1rem;
+    background: #20a0ff;
+    border-top: 1px solid #565656;
+}

+ 1 - 1
fhKeeper/formulahousekeeper/inva_4_tivo/css/projectt.css

@@ -795,7 +795,7 @@ html {font-size: 10px; -webkit-text-size-adjust:none; -webkit-tap-highlight-colo
     display: block;
     position: fixed;
     bottom: 7.5rem;
-    right: 1.25rem;
+    right: 2.5rem;
     padding: 1rem;
     background: #fff;
     box-shadow: .1875rem .1875rem .625rem #ccc;

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 420 - 0
fhKeeper/formulahousekeeper/inva_4_tivo/followup.html


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/backk.jpg


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/bannar.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/dibuBon.jpg


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huaban1.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huaban2.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huaban3.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huaban4.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huaban5.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huabanIon.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huoConTilIon.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/huoLeft.jpg


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/imgg.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing1.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing3.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing4.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing5.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing6.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing7.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/qing9.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiFive.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiFour.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiOne.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiSeven.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiSix.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiThree.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/shuiTwo.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/suifang.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/suifangs1.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/suifangs2.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/suifangs3.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/suifangs4.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/suifangs5.png


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/followup/toxOne.png


+ 1 - 1
fhKeeper/formulahousekeeper/inva_4_tivo/index.html

@@ -76,7 +76,7 @@
                     <h3>管家</h3>
                     <ul>
                         <a href="./index.html"><li>工时管家</li></a>
-                        <li>随访管家</li>
+                        <a href="./followup.html"><li>随访管家</li></a>
                         <a href="./project.html"><li>项目管家</li></a> 
                     </ul>
                 </div>

+ 104 - 0
fhKeeper/formulahousekeeper/inva_4_tivo/js/followup.js

@@ -0,0 +1,104 @@
+// 屏幕试图的高度
+let screenHeight = $(window).height()
+
+// 智能随访
+let collaborationTeamHight =  $('#collaborationTeam').offset().top
+
+$(window).scroll(function () {
+    // 当前滚动的高度
+    let currentTop = $(window).scrollTop()
+    if(currentTop < 2) {
+        $('#all').removeClass('hanAll')
+        $('#abc').addClass('abc')
+        $('#navigationBar').removeClass('white')
+    } else {
+        $("#all").addClass("hanAll");
+        $("#abc").removeClass("abc");
+        $("#navigationBar").addClass("white");
+    }
+    // 智能随访滚动计算
+    if(currentTop > collaborationTeamHight && currentTop < (collaborationTeamHight + screenHeight)) {
+        let teamOffset = (currentTop - collaborationTeamHight) / screenHeight
+        console.log(teamOffset, '透明度')
+        $('#collCentImg').css({'transform': `translate(0, ${(1 - teamOffset) * 250}px)`})
+        $('#collCentFonts').css({'opacity': teamOffset})
+    }
+})
+
+
+// 导航下划线
+$('.aus li').hover(function () {
+    let i = $(this).index()
+    $(".aus li").eq(i).addClass('tils')
+},function () {
+    let i = $(this).index()
+    $(".aus li").eq(i).removeClass('tils')
+
+})
+
+$('.auss li').hover(function () {
+    let i = $(this).index()
+    $(".auss li").eq(i).addClass('tils')
+},function () {
+    let i = $(this).index()
+    $(".auss li").eq(i).removeClass('tils')
+})
+
+// 客服hover
+$('#zhixun').hover(function () {
+    $("#zhixun").show()
+    $("#consultigImg").attr("src", './image/ions/kefu1.png')
+},function () {
+    $("#zhixun").hide()
+    $("#consultigImg").attr("src", './image/ions/kefu2.png')
+})
+$('#consulting').hover(function () {
+    $("#zhixun").show()
+    $("#consultigImg").attr("src", './image/ions/kefu1.png')
+},function () {
+    $("#zhixun").hide()
+    $("#consultigImg").attr("src", './image/ions/kefu2.png')
+})
+
+// 产品鼠标移入移出
+let fls = true
+$('#productHov').hover(function () {$("#product").show()},function () {
+    setTimeout(function() {
+        if(fls) {
+            $("#product").hide()
+        }
+    }, 200)
+})
+$('#product').hover(function () {
+    fls = false
+    $("#product").show()
+},function () {
+    fls = true
+    $("#product").hide()
+})
+
+// 轻松管理 
+$('#easyManBoxConCli .easyManBoxConCliOne').click(function () {
+    let index = $(this).index()
+    let arr = $('#easyManBoxConCli .easyManBoxConCliOne')
+    if(index != '1' && index != '7') {
+       for(let i in arr) {
+            $('#easyManBoxConCli .easyManBoxConCliOne').removeClass('easyOn')
+       }
+       $(this).addClass("easyOn")
+       $('#easyManBoxConImg').attr("src", './image/followup/qing'+(+index + 1)+'.png')
+    }
+})
+
+// 随访管家
+$('#housekeeperConZuo .housekeeperConZuoLi').click(function () {
+    let index = $(this).index()
+    let arr = $('#housekeeperConZuo .housekeeperConZuoLi')
+    for(let i in arr) {
+         $('#housekeeperConZuo .housekeeperConZuoLi').removeClass('housekeeperOn')
+    }
+    $(this).addClass("housekeeperOn")
+    $('#housekeeperrText').text($(this).text())
+    console.log(index)
+    $('#housekConImg').attr("src", './image/followup/suifangs'+ index +'.png')
+})

+ 1 - 1
fhKeeper/formulahousekeeper/inva_4_tivo/project.html

@@ -68,7 +68,7 @@
                     <h3>管家</h3>
                     <ul>
                         <a href="./index.html"><li>工时管家</li></a>
-                        <li>随访管家</li>
+                        <a href="./followup.html"><li>随访管家</li></a>
                         <a href="./project.html"><li>项目管家</li></a> 
                     </ul>
                 </div>

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -81,8 +81,8 @@ public class ProjectController {
     public HttpRespMsg getProjectPage(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, String keyword,
                                       @RequestParam(required = false, defaultValue = "1") Integer searchField,
                                       Integer projectId, //可以直接传projectId来进行匹配
-                                      Integer status, Integer category,Integer projectMainId,Integer deptId, String sortProp, Integer sortOrder) {
-        return projectService.getProjectPage(pageIndex, pageSize, keyword,searchField, status, category, projectId,projectMainId,deptId, sortProp, sortOrder, request);
+                                      Integer status, Integer category,Integer projectMainId,Integer deptId, String sortProp, Integer sortOrder,String inchagerId) {
+        return projectService.getProjectPage(pageIndex, pageSize, keyword,searchField, status, category, projectId,projectMainId,deptId, sortProp, sortOrder,inchagerId, request);
     }
 
     @RequestMapping("/saveBatchAccoDegrees")

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java

@@ -186,6 +186,9 @@ public class TaskController {
                         .map(TaskExecutor::getExecutorId).collect(Collectors.toList());
             }
         }
+        System.out.println(task.getStartDate());
+        System.out.println(task.getEndDate());
+        System.out.println(task.getFinishDate());
         taskService.saveOrUpdate(task);
         if (task.getExecutorId() == null) {
             //清空执行人

+ 4 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Task.java

@@ -1,5 +1,6 @@
 package com.management.platform.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -98,7 +99,7 @@ public class Task extends Model<Task> {
     /**
      * 截止时间
      */
-    @TableField("end_date")
+    @TableField(fill = FieldFill.UPDATE)
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate endDate;
@@ -167,7 +168,7 @@ public class Task extends Model<Task> {
     /**
      * 完成日期
      */
-    @TableField("finish_date")
+    @TableField(fill = FieldFill.UPDATE)
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate finishDate;
@@ -188,7 +189,7 @@ public class Task extends Model<Task> {
     /**
      * 开始日期
      */
-    @TableField("start_date")
+    @TableField(fill = FieldFill.UPDATE)
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate startDate;

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java

@@ -21,7 +21,7 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg getProjectList(Integer forReport, HttpServletRequest request);
 
     HttpRespMsg getProjectPage(Integer pageIndex, Integer pageSize, String keyword, Integer searchField,
-                               Integer status, Integer category, Integer projectId,Integer projectMainId,Integer deptId, String sortProp, Integer sortOrder, HttpServletRequest request);
+                               Integer status, Integer category, Integer projectId,Integer projectMainId,Integer deptId, String sortProp, Integer sortOrder,String inchagerId, HttpServletRequest request);
 
     HttpRespMsg editProject(Integer id, String name, String code, String[] userIds, String inchargerId,
                             Integer isPublic,

+ 40 - 14
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -155,6 +155,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     SubUserCustomMapper subUserCustomMapper;
     @Resource
     OperationRecordService operationRecordService;
+    @Resource
+    ProjectBasecostService projectBasecostService;
 
 
     @Resource
@@ -195,7 +197,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     //分页获取项目列表
     @Override
     public HttpRespMsg getProjectPage(Integer pageIndex, Integer pageSize, String keyword, Integer searchField,
-                                      Integer status, Integer category, Integer projectId,Integer projectMainId,Integer deptId,  String sortProp, Integer sortOrder, HttpServletRequest request) {
+                                      Integer status, Integer category, Integer projectId,Integer projectMainId,Integer deptId,  String sortProp, Integer sortOrder,String inchagerId, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             //通过公司id获取该公司所有的项目列表
@@ -241,13 +243,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     queryWrapper.like("project_name", keyword);
                 } else if (searchField == 2){
                     queryWrapper.like("project_code", keyword);
-                }else if(searchField == 3){
-                    List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("job_number", keyword));
-                    if(userList.size()>0){
-                        queryWrapper.eq("incharger_id",userList.get(0).getId());
-                    }else queryWrapper.eq("incharger_id",0);
                 }
             }
+            if(!StringUtils.isEmpty(inchagerId)){
+                queryWrapper.eq("incharger_id",inchagerId);
+            }
             if (status != null && status != 0) {
                 queryWrapper.eq("status", status);
             }
@@ -658,7 +658,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     timer.setProjectName(name);
                     projectTimerMapper.update(timer, new QueryWrapper<ProjectTimer>().eq("project_id", id));
                     if (projectBaseCostData != null) {
-                        List<ProjectBasecost> costList = updateProjectBaseCostData(projectBaseCostData, p.getId());
+                        HttpRespMsg respMsg = updateProjectBaseCostData(projectBaseCostData, p.getId());
+                        List<ProjectBasecost> costList = (List<ProjectBasecost>) respMsg.data;
+                        if(costList==null){
+                            return respMsg;
+                        }
 
                         //如果不存在基线成本快照,则生成
                         List<EarningSnapshot> earningSnapshots = earningSnapshotMapper.selectList(new QueryWrapper<EarningSnapshot>().eq("project_id", p.getId()).orderByDesc("id").last("limit 1"));
@@ -871,17 +875,28 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     }
 
     //更新项目的基线成本数据
-    private List<ProjectBasecost> updateProjectBaseCostData(String data, Integer projectId) {
+    private HttpRespMsg updateProjectBaseCostData(String data, Integer projectId) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
         JSONArray array = JSONArray.parseArray(data);
-        projectBasecostMapper.delete(new QueryWrapper<ProjectBasecost>().eq("project_id", projectId));
+        List<ProjectCurrentcost> projectCurrentcostList = projectCurrentcostMapper.selectList(new QueryWrapper<ProjectCurrentcost>().eq("project_id", projectId));
         List<ProjectBasecost> costList = new ArrayList<>();
         for (int i=0;i<array.size(); i++) {
             ProjectBasecost projectBasecost = JSONObject.toJavaObject(array.getJSONObject(i), ProjectBasecost.class);
             projectBasecost.setProjectId(projectId);
-            projectBasecostMapper.insert(projectBasecost);
+            Optional<ProjectCurrentcost> first = projectCurrentcostList.stream().filter(pc -> pc.getBaseId().equals(projectBasecost.getBaseId())).findFirst();
+            if(first.isPresent()){
+                ProjectCurrentcost projectCurrentcost = first.get();
+                if(projectCurrentcost.getBaseAmount()>projectBasecost.getBaseAmount()){
+                    httpRespMsg.setError("成本基线"+projectBasecost.getBaseName()+"预算小于当前基线预算");
+                    return httpRespMsg;
+                }
+            }
             costList.add(projectBasecost);
         }
-        return costList;
+        projectBasecostMapper.delete(new QueryWrapper<ProjectBasecost>().eq("project_id", projectId));
+        projectBasecostService.saveBatch(costList);
+        httpRespMsg.data=costList;
+        return httpRespMsg;
     }
 
     private int getNotNullInt(Integer integer) {
@@ -1421,16 +1436,27 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             return msg;
         }
         //计算项目总成本
-        projectBasecostMapper.delete(new QueryWrapper<ProjectBasecost>().eq("project_id", project.getId()));
         JSONArray array = JSONArray.parseArray(baseCostData);
         double totalBudget = 0;
+        List<ProjectCurrentcost> projectCurrentcostList = projectCurrentcostMapper.selectList(new QueryWrapper<ProjectCurrentcost>().eq("project_id", id));
+        List<ProjectBasecost> projectBasecostList=new ArrayList<>();
         for (int i=0;i<array.size(); i++) {
             JSONObject obj = array.getJSONObject(i);
             ProjectBasecost cost = JSONObject.toJavaObject(obj, ProjectBasecost.class);
             cost.setProjectId(project.getId());
-            projectBasecostMapper.insert(cost);
+            Optional<ProjectCurrentcost> first = projectCurrentcostList.stream().filter(pc -> pc.getBaseId().equals(cost.getBaseId())).findFirst();
+            if(first.isPresent()){
+                ProjectCurrentcost projectCurrentcost = first.get();
+                if(projectCurrentcost.getBaseAmount()>cost.getBaseAmount()){
+                    msg.setError("成本基线"+cost.getBaseName()+"预算小于当前基线预算");
+                    return msg;
+                }
+            }
+            projectBasecostList.add(cost);
             totalBudget += cost.getBaseAmount();
         }
+        projectBasecostMapper.delete(new QueryWrapper<ProjectBasecost>().eq("project_id", project.getId()));
+        projectBasecostService.saveBatch(projectBasecostList);
         project.setBudget(totalBudget);
         projectMapper.updateById(project);
         //增加基线快照
@@ -3533,7 +3559,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             userId = user.getId();
         }
         List<HashMap<String, Object>> list = projectMapper.getExportData(user.getCompanyId(), userId);
-        HttpRespMsg projectPage = getProjectPage(null, null, null, null, null, null, null, null,null, null, null, request);
+        HttpRespMsg projectPage = getProjectPage(null, null, null, null, null, null, null, null,null, null, null,null, request);
         Map<String,Object> resultMap= (Map<String, Object>) projectPage.data;
         List<ProjectVO> projectVOList= (List<ProjectVO>) resultMap.get("records");
         List<String> nameList= (List<String>) resultMap.get("nameList");