tremble 4 年之前
父節點
當前提交
22df99f822
共有 100 個文件被更改,包括 4727 次插入402 次删除
  1. 301 0
      model-page/css/index.css
  2. 156 0
      model-page/css/main.css
  3. 59 0
      model-page/css/reset.css
  4. 272 0
      model-page/css/wx.css
  5. 二進制
      model-page/images/bgmusic-play-icon.png
  6. 二進制
      model-page/images/icon_home.png
  7. 二進制
      model-page/images/icon_info.png
  8. 二進制
      model-page/images/icon_left.png
  9. 二進制
      model-page/images/icon_right.png
  10. 二進制
      model-page/images/play.png
  11. 1 0
      model-page/js/4dage.js
  12. 4 0
      model-page/js/jquery.js
  13. 40 0
      model-page/model.html
  14. 2 0
      new_backstage/package.json
  15. 1 1
      new_backstage/public/index.html
  16. 2 1
      new_backstage/public/static/tinymce/skins/ui/oxide-dark/skin.css
  17. 1 1
      new_backstage/public/static/tinymce/skins/ui/oxide-dark/skin.min.css
  18. 1 1
      new_backstage/public/static/tinymce/skins/ui/oxide-dark/skin.min.css.map
  19. 3 1
      new_backstage/public/static/tinymce/skins/ui/oxide/skin.css
  20. 3060 1
      new_backstage/public/static/tinymce/skins/ui/oxide/skin.min.css
  21. 1 1
      new_backstage/public/static/tinymce/skins/ui/oxide/skin.min.css.map
  22. 1 1
      new_backstage/public/static/tinymce/themes/silver/theme.min.js
  23. 1 1
      new_backstage/src/assets/font/iconfont.json
  24. 二進制
      new_backstage/src/assets/img/defaultImg.jpg
  25. 8 9
      new_backstage/src/components/Tinymce/index.vue
  26. 1 1
      new_backstage/src/components/Tinymce/plugins.js
  27. 4 2
      new_backstage/src/components/Tinymce/toolbar.js
  28. 1 1
      new_backstage/src/components/editcomponent/editcon.vue
  29. 1 0
      new_backstage/src/components/editcomponent/editdialog.vue
  30. 2 2
      new_backstage/src/components/editcomponent/usereditdialog.vue
  31. 30 19
      new_backstage/src/components/table/index.vue
  32. 4 4
      new_backstage/src/components/uploadFile/index.vue
  33. 22 1
      new_backstage/src/components/uploadThumb/index.vue
  34. 24 2
      new_backstage/src/configue/api.js
  35. 6 9
      new_backstage/src/configue/http.js
  36. 29 4
      new_backstage/src/mixins/index.js
  37. 30 15
      new_backstage/src/pages/content/collection/componets/img.vue
  38. 15 6
      new_backstage/src/pages/content/collection/componets/model.vue
  39. 12 6
      new_backstage/src/pages/content/collection/componets/video.vue
  40. 6 5
      new_backstage/src/pages/content/collection/data.js
  41. 5 1
      new_backstage/src/pages/content/collection/edit.vue
  42. 5 3
      new_backstage/src/pages/content/collection/index.vue
  43. 22 12
      new_backstage/src/pages/content/interaction/componets/questionGroup.vue
  44. 47 22
      new_backstage/src/pages/content/interaction/componets/sensitive.vue
  45. 4 22
      new_backstage/src/pages/content/interaction/data.js
  46. 83 44
      new_backstage/src/pages/content/interaction/edit.vue
  47. 36 9
      new_backstage/src/pages/content/interaction/index.vue
  48. 2 2
      new_backstage/src/pages/content/scene/index.vue
  49. 24 14
      new_backstage/src/pages/content/study/componets/info.vue
  50. 2 7
      new_backstage/src/pages/content/study/componets/share.vue
  51. 5 3
      new_backstage/src/pages/content/study/data.js
  52. 1 1
      new_backstage/src/pages/content/study/edit.vue
  53. 7 4
      new_backstage/src/pages/content/study/index.vue
  54. 17 23
      new_backstage/src/pages/content/sweep/componets/martyr.vue
  55. 4 3
      new_backstage/src/pages/content/sweep/componets/mourn.vue
  56. 1 0
      new_backstage/src/pages/content/sweep/data.js
  57. 12 5
      new_backstage/src/pages/content/sweep/index.vue
  58. 7 2
      new_backstage/src/pages/layout/head.vue
  59. 6 3
      new_backstage/src/pages/login/index.vue
  60. 39 32
      new_backstage/src/pages/system/role/componets/manage.vue
  61. 1 5
      new_backstage/src/pages/system/role/componets/share.vue
  62. 2 1
      new_backstage/src/pages/system/role/data.js
  63. 2 1
      new_backstage/src/pages/system/role/edit/dialog.vue
  64. 13 5
      new_backstage/src/pages/system/role/index.vue
  65. 9 9
      new_backstage/src/pages/system/user/componets/manage.vue
  66. 6 2
      new_backstage/src/pages/system/user/data.js
  67. 6 11
      new_backstage/src/pages/system/user/edit.vue
  68. 39 5
      new_backstage/src/pages/system/user/index.vue
  69. 1 1
      new_backstage/src/pages/system/worklog/index.vue
  70. 154 0
      new_backstage/src/util/file.js
  71. 17 21
      new_backstage/src/util/index.js
  72. 7 2
      web/.eslintrc.js
  73. 5 2
      web/package.json
  74. 2 2
      web/public/index.html
  75. 11 9
      web/public/static/js/main_2020_show.js
  76. 6 8
      web/public/static/js/manage.js
  77. 16 11
      web/src/App.vue
  78. 二進制
      web/src/assets/images/btnlist/bgm.png
  79. 二進制
      web/src/assets/images/btnlist/comment.png
  80. 二進制
      web/src/assets/images/btnlist/game.png
  81. 二進制
      web/src/assets/images/btnlist/like.png
  82. 二進制
      web/src/assets/images/btnlist/question.png
  83. 二進制
      web/src/assets/images/btnlist/新疆军史管-78.png
  84. 二進制
      web/src/assets/images/btnlist/新疆军史管-79.png
  85. 二進制
      web/src/assets/images/btnlist/新疆军史管-80.png
  86. 二進制
      web/src/assets/images/btnlist/新疆军史管-82.png
  87. 二進制
      web/src/assets/images/btnlist/新疆军史管-83.png
  88. 二進制
      web/src/assets/images/btnlist/新疆军史管-84.png
  89. 二進制
      web/src/assets/images/btnlist/新疆军史管-86.png
  90. 二進制
      web/src/assets/images/btnlist/新疆军史管-87.png
  91. 二進制
      web/src/assets/images/btnlist/新疆军史管-88.png
  92. 二進制
      web/src/assets/images/btnlist/新疆军史管-90.png
  93. 二進制
      web/src/assets/images/btnlist/新疆军史管-91.png
  94. 二進制
      web/src/assets/images/btnlist/新疆军史管-92.png
  95. 二進制
      web/src/assets/images/btnlist/新疆军史管-94.png
  96. 二進制
      web/src/assets/images/btnlist/新疆军史管-95.png
  97. 二進制
      web/src/assets/images/btnlist/新疆军史管-96.png
  98. 二進制
      web/src/assets/images/crosshair.cur
  99. 二進制
      web/src/assets/images/icon/iPhone 12、12 Pro – 1_slices/3D模型模式按钮@2x.png
  100. 0 0
      web/src/assets/images/icon/iPhone 12、12 Pro – 1_slices/3D模型模式按钮(选择)@2x.png

+ 301 - 0
model-page/css/index.css

@@ -0,0 +1,301 @@
+html, body {
+    width: 100%;
+    height: 100%;
+    font-family: PingFangSC-Regular, sans-serif;
+}
+
+html, body, h1, h2, h3, h4, h5, h6, div, dl, dt, dd, ul, ol, li, p, blockquote, pre, hr, figure, table, caption, th, td, form, fieldset, legend, input, button, textarea, menu {
+    margin: 0;
+    padding: 0;
+}
+
+/* ::-webkit-scrollbar {
+    display: none;
+} */
+
+iframe {
+    width: 100%;
+    height: 100%;
+}
+
+#ui {
+    position: absolute;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    flex-direction: column;
+    width: 100%;
+    height: 100%;
+    /* color: #494949; */
+    letter-spacing: 3px;
+}
+
+#logoText {
+    z-index: 1;
+    position: absolute;
+    bottom: 20px;
+    font-size: 18px;
+    font-weight: 100;
+    letter-spacing: 4px;
+}
+
+.switch-btn-Wrap {
+    z-index: 1;
+    position: absolute;
+    top: 20px;
+    right: 20px;
+}
+
+.switch-btn-Wrap img {
+    width: 75px;
+    ;
+}
+
+#objName {
+    z-index: 1;
+    position: absolute;
+    top: 20px;
+    left: 32px;
+    font-size: 22px;
+    font-weight: 100;
+    letter-spacing: 4px;
+    color: #ffffff;
+}
+
+#iconWrap {
+    position: absolute;
+    bottom: 30px;
+    width: 200px;
+    display: flex;
+    justify-content: center;
+    z-index: 1;
+}
+
+.mar-right {
+    margin-right: 120px;
+}
+
+#iconLeft {
+    cursor: not-allowed;
+}
+
+#iconRight {
+    cursor: pointer;
+}
+
+#introductionWrap{
+    position: absolute;
+    z-index: 1;
+    display: flex;
+    flex-direction: column;
+    left: 20px;
+    text-align: left;
+    top: 20px;
+    font-size: 16px;
+    color: #ffffff;
+    font-weight: 100;
+    line-height: 30px;
+    letter-spacing: 2px;
+    width: 500px;
+    display:none;
+}
+#companyText{
+    position: absolute;
+    z-index: 1;
+    font-size: 16px;
+    color:rgb(153, 153, 153);
+    font-weight: 100;
+    left: 50%;
+    transform: translateX(-50%);
+    bottom: 20px;
+    letter-spacing: 1px;
+    text-shadow:rgb(51, 51, 51) 0px 1px 1px;
+}
+.bg-audio {
+    display:block;
+    position:absolute;
+    bottom:30px;
+    right:10px;
+    width:30px;
+    height:30px;
+    background:url(../images/bgmusic-play-icon.png)center/100% no-repeat;
+    z-index:99;
+}
+.iconHome{
+    top:30px;
+}
+.iconMenu {
+    position:absolute;
+    z-index:2;
+    right:52px;
+    display:flex;
+    align-items: center;
+    flex-direction: column;
+    text-align: center;
+}
+.iconInfo {
+    top:150px;
+}
+.iconMenu span {
+    color:#fff;
+}
+#time, #size, #content,#excavated_time{
+    margin-top: 8px;
+}
+#content p {
+    text-indent:2em;
+}
+@media screen and (max-width: 600px) {
+     #introductionWrap {
+        width:70%;
+        height:60%;
+        overflow-y:scroll;
+        position:absolute;
+        margin:0 auto;
+        top:10%;
+        font-size:14px;
+        line-height: 20px;
+        display:none;
+    }
+    #time, #size, #content,#excavated_time {
+        margin-top:4px;
+    }
+    #content {
+       
+    }
+    #name {
+        font-weight:bold;
+    }
+    #iconAction {
+        position:absolute;
+        z-index:99;
+    }
+    .iconMenu {
+        width:60px;
+        right:10px;
+    }
+    .iconMenu img {
+        width:50%;
+    }
+    .iconHome {
+
+    }
+    .iconInfo {
+        top:90px;
+    }
+    .iconMenu span {
+        font-size:10px;
+    }
+    #iconWrap {
+        width:50%;
+        z-index:2;
+
+    }
+    #iconLeft,#iconRight {
+        width:30px;
+        height:30px;
+    }
+    #companyText{
+        font-size:13px;
+    }
+}
+@media only screen and (max-height:480px) {
+    .center img, .center-first img {
+        width: 52vw;
+        max-width: 250px;
+        max-height: 110px;
+    }
+    .center:nth-child(8) img {
+        width: 30vw;
+        max-width: 153px;
+        max-height: 127px;
+    }
+    .center:nth-child(17) img {
+        width: 30vw;
+        max-width: 165px;
+        max-height: 176px;
+    }
+   
+}
+.animated {
+    -webkit-animation-duration:1s;
+    animation-duration:1s;
+    -webkit-animation-fill-mode:both;
+    animation-fill-mode:both
+}
+@-webkit-keyframes fadeInRight {
+    0% {
+        opacity:0;
+        -webkit-transform:translate3d(100%, 0, 0);
+        transform:translate3d(100%, 0, 0)
+    }
+    to {
+        opacity:1;
+        -webkit-transform:translateZ(0);
+        transform:translateZ(0)
+    }
+}
+@keyframes fadeInRight {
+    0% {
+        opacity:0;
+        -webkit-transform:translate3d(100%, 0, 0);
+        transform:translate3d(100%, 0, 0)
+    }
+    to {
+        opacity:1;
+        -webkit-transform:translateZ(0);
+        transform:translateZ(0)
+    }
+}
+.fadeInRight {
+    -webkit-animation-name:fadeInRight;
+    animation-name:fadeInRight
+}
+
+@-webkit-keyframes fadeOutRight {
+    0% {
+        opacity:1
+    }
+    to {
+        opacity:0;
+        -webkit-transform:translate3d(100%, 0, 0);
+        transform:translate3d(100%, 0, 0)
+    }
+}
+@keyframes fadeOutRight {
+    0% {
+        opacity:1
+    }
+    to {
+        opacity:0;
+        -webkit-transform:translate3d(100%, 0, 0);
+        transform:translate3d(100%, 0, 0)
+    }
+}
+.fadeOutRight {
+    -webkit-animation-name:fadeOutRight;
+    animation-name:fadeOutRight
+}
+
+@-webkit-keyframes fadeOut {
+    0% {
+        opacity:1
+    }
+    to {
+        opacity:0
+    }
+}
+@keyframes fadeOut {
+    0% {
+        opacity:1
+    }
+    to {
+        opacity:0
+    }
+}
+.fadeOut {
+    -webkit-animation-name:fadeOut;
+    animation-name:fadeOut;
+    -webkit-animation-duration:2s;
+    animation-duration: 2s;
+}

+ 156 - 0
model-page/css/main.css

@@ -0,0 +1,156 @@
+body {
+    background: #dddada;
+    font-family: '微软雅黑';
+}
+
+.containers {
+    width: 1080px;
+    /* overflow: hidden; */
+    min-height: 80vh;
+    margin: 0 auto;
+}
+
+.con-title {
+    font-size: 24px;
+    background: #f9fafc;
+    text-align: center;
+    font-weight: bold;
+    padding-top: 40px;
+}
+
+.con {
+    /* width: 100%; */
+    height: auto;
+    overflow: hidden;
+    background: #f9fafc;
+    margin: 0 auto 0;
+    display: flex;
+    flex-wrap: wrap;
+    padding: 20px 2%;
+    justify-content: center;
+}
+
+.con li {
+    text-align: center;
+    width: 30%;
+    display: inline-block;
+    margin: 25px 10px;
+}
+
+.case {
+    padding: 10px;
+    background: #fff;
+    border-radius: 10px;
+    box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.4);
+    transition: all 0.3s;
+}
+
+.case:hover {
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.6);
+    transform: translateY(-15px);
+}
+
+.case .card-img {
+    width: 100%;
+    height: 180px;
+    background-repeat: no-repeat;
+    background-size: cover;
+    background-position: top center;
+}
+
+.con li p {
+    margin-top: 10px;
+    font-size: 18px;
+    font-weight: 100;
+}
+
+.link-a {
+    width: 100%;
+    height: 100%;
+    display: inline-block;
+}
+
+#introductionWrap{
+    position: absolute;
+    z-index: 1;
+    display: flex;
+    flex-direction: column;
+    right: 20px;
+    text-align: right;
+    top: 20px;
+    font-size: 18px;
+    color: #ffffff;
+    font-weight: 100;
+    line-height: 30px;
+    letter-spacing: 2px;
+}
+#companyText{
+    position: absolute;
+    z-index: 1;
+    font-size: 16px;
+    color:rgb(153, 153, 153);
+    font-weight: 100;
+    left: 50%;
+    transform: translateX(-50%);
+    bottom: 20px;
+    letter-spacing: 1px;
+    text-shadow:rgb(51, 51, 51) 0px 1px 1px;
+}
+@media screen and (max-width: 600px) {
+    .containers {
+        width: 100%;
+    }
+    .con {
+        padding: 0;
+    }
+    .case .card-img {
+        background-size: auto 100%;
+        height: 90px;
+    }
+    .con li {
+        width: 44%;
+    }
+    #introductionWrap{
+        position: absolute;
+        z-index: 1;
+        display: flex;
+        flex-direction: column;
+        right: 10px;
+        text-align: right;
+        top: 16px;
+        font-size: 16px;
+        color: #ffffff;
+        font-weight: 100;
+        line-height: 28px;
+        letter-spacing: 1px;
+    }
+    /* .con li p {
+        font-size: 16px;
+    } */
+}
+
+.hide{
+    display: none;
+}
+
+#companyText{
+    position: absolute;
+    z-index: 1;
+    font-size: 16px;
+    font-weight: 100;
+    left: 50%;
+    transform: translateX(-50%);
+    bottom: 20px;
+    letter-spacing: 1px;
+}
+
+
+@media screen and (max-width: 320px) {
+    .con li {
+        width: 43%;
+    }
+    .con li p {
+        font-size: 16px;
+        font-weight: 100;
+    }
+}

+ 59 - 0
model-page/css/reset.css

@@ -0,0 +1,59 @@
+/* http://meyerweb.com/eric/tools/css/reset/ 
+   v2.0 | 20110126
+   License: none (public domain)
+*/
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed, 
+figure, figcaption, footer, header, hgroup, 
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	font-size: 100%;
+	font: inherit;
+	vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure, 
+footer, header, hgroup, menu, nav, section, main {
+	display: block;
+}
+a{
+  text-decoration: none;
+  color: #000;
+}
+body {
+	line-height: 1;
+}
+ol, ul {
+	list-style: none;
+}
+blockquote, q {
+	quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+	content: '';
+	content: none;
+}
+table {
+	border-collapse: collapse;
+	border-spacing: 0;
+}
+button{outline:none;}
+input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{
+        -webkit-appearance:textfield;
+}
+input[type="number"]{
+        -moz-appearance:textfield;
+}

+ 272 - 0
model-page/css/wx.css

@@ -0,0 +1,272 @@
+html, body {
+    width: 100%;
+    height: 100%;
+    font-family: PingFangSC-Regular, sans-serif;
+}
+* {
+    margin:0;
+    padding:0;
+    list-style-type:none;
+    box-sizing:border-box
+}
+html, body, h1, h2, h3, h4, h5, h6, div, dl, dt, dd, ul, ol, li, p, blockquote, pre, hr, figure, table, caption, th, td, form, fieldset, legend, input, button, textarea, menu {
+    margin: 0;
+    padding: 0;
+}
+img {
+    max-width:100%;
+}
+/* ::-webkit-scrollbar {
+    display: none;
+} */
+.flexs {
+    display:flex;
+    justify-content: space-between;
+    align-items:center;
+}
+.flex {
+    display:flex;
+    justify-content: center;
+    align-items:center;
+}
+iframe {
+    width: 100%;
+    height: 100%;
+}
+#ui {
+    position: absolute;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    flex-direction: column;
+    width: 100%;
+    height: 100%;
+    /* color: #494949; */
+    letter-spacing: 3px;
+}
+.antique-name {
+    font-size:20px;
+    text-align:center;
+    color:#fff;
+    width:70%;
+    margin:21vw auto 0;
+}
+.comment_wrapper {
+    position:relative;
+    z-index:9999;
+    width:83vw;
+    margin:0 auto;
+    display:none;
+}
+.introductionWrap {
+    width:100%;
+    background:#1d1d1d;
+    height:28vw;   
+    font-size:12px;
+    color:#ffffffba;
+    padding:4vw;
+
+}
+.introductionWrap .introduction {
+    overflow:scroll;
+    height: 100%;
+}
+.bg-audio {
+    display:block;
+    position:absolute;
+    z-index:2;
+    top:8.5vw;
+    right:7.4vw;
+    width:7.4vw;
+    height:7.4vw;
+    background:url(../images/bgmusic_icon_play.png)center/100% no-repeat;
+}
+.iconAction {
+    position:relative;
+    width:100%;
+
+    
+}
+.iconAction ul {
+    position: relative;
+    z-index: 999;
+    width:100%;
+    padding:0 17.6vw 9vw;
+;
+}
+.iconAction ul li {
+    width:12vw;
+    text-align:center;
+    cursor:pointer;
+}
+.iconAction ul li i{
+    display:block;
+    width:9vw;
+    height:9vw;
+    width:12vw;
+    margin:0 auto;
+}
+/* .iconAction ul li i.explain_icon{
+    background:url(../images/explain_icon.png)center/100% no-repeat;
+}
+.iconAction ul li i.explain_icon2{
+    background:url(../images/explain_icon2.png)center/100% no-repeat;
+} */
+#explain.active p{
+    color:#9a2e2c;
+}
+#explain .explain_icon {
+    background:url(../images/explain_icon.png)center/100% no-repeat;
+}
+#explain.active .explain_icon {
+    background:url(../images/explain_icon2.png)center/100% no-repeat;
+}
+.iconAction ul li i.comment_icon{
+    background:url(../images/comment_icon.png)center/100% no-repeat;
+}
+#favorite .favorite_icon {
+    background:url(../images/favorite_icon1.png)center/100% no-repeat;
+}
+#favorite.active p {
+    color:#9a2e2c;
+}
+#favorite.active .favorite_icon {
+    background:url(../images/favorite_icon2.png)center/100% no-repeat;
+    
+}
+/* .iconAction ul li i.favorite_icon1{
+    background:url(../images/favorite_icon1.png)center/100% no-repeat;
+}
+.iconAction ul li i.favorite_icon2{
+    background:url(../images/favorite_icon2.png)center/100% no-repeat;
+} */
+.iconAction ul li p {
+    font-size:16px;
+    color:#fff;
+}
+.info_voice {
+    margin:0 auto;
+    text-align:center;    
+}
+.audio_controls .icon_play {
+    display:inline-block;
+    width:3.4vw;
+    margin-right:5px;
+}
+.audio_controls .progress {
+    position:relative;
+    display:inline-block;
+    width:60vw;
+    background:#fff;
+    height:2px;
+}
+.audio_controls .progress i {
+    position:absolute;
+    top:-3px;
+    left:0;
+    display:inline-block;
+    width:8px;
+    height:8px;
+    background:#fff;
+    border-radius:4px;
+    -webkit-border-radius:4px;
+}
+.audio_controls .audio_time {
+    font-size:10px;
+    color:#fff;
+    margin-left:5px;
+}
+/* audio::-webkit-media-controls-panel {
+    background:rgba(255,255,255,1);
+}
+audio::-webkit-media-controls-mute-button {}
+audio::-webkit-media-controls-play-button {}
+audio::-webkit-media-controls-timeline-container {
+    background:none;
+}
+audio::-webkit-media-controls-current-time-display {}
+audio::-webkit-media-controls-time-remaining-display {}
+audio::-webkit-media-controls-timeline {}
+audio::-webkit-media-controls-volume-slider-container {
+    background:none;
+}
+audio::-webkit-media-controls-volume-slider {}
+audio::-webkit-media-controls-seek-back-button {}
+audio::-webkit-media-controls-seek-forward-button {}
+audio::-webkit-media-controls-fullscreen-button {}
+audio::-webkit-media-controls-rewind-button {}
+audio::-webkit-media-controls-return-to-realtime-button {}
+audio::-webkit-media-controls-toggle-closed-captions-button {} */
+.animated {
+    -webkit-animation-duration:1s;
+    animation-duration:1s;
+    -webkit-animation-fill-mode:both;
+    animation-fill-mode:both
+}
+@-webkit-keyframes fadeInBottom {
+    0% {
+        opacity:0;
+        -webkit-transform:translate3d(0, 100%, 0);
+        transform:translate3d(0, 100%, 0)
+    }
+    to {
+        opacity:1;
+        -webkit-transform:translateZ(0);
+        transform:translateZ(0)
+    }
+}
+@keyframes fadeInBottom {
+    0% {
+        opacity:0;
+        -webkit-transform:translate3d(0, 100%, 0);
+        transform:translate3d(0, 100%, 0)
+    }
+    to {
+        opacity:1;
+        -webkit-transform:translateZ(0);
+        transform:translateZ(0)
+    }
+}
+.fadeInBottom {
+    -webkit-animation-name:fadeInBottom;
+    animation-name:fadeInBottom
+}
+
+@-webkit-keyframes fadeOutBottom {
+    0% {
+        opacity:1
+    }
+    to {
+        opacity:0;
+        -webkit-transform:translate3d(0, 100%, 0);
+        transform:translate3d(0, 100%, 0)
+    }
+}
+@keyframes fadeOutBottom {
+    0% {
+        opacity:1
+    }
+    to {
+        opacity:0;
+        -webkit-transform:translate3d(0, 100%, 0);
+        transform:translate3d(0, 100%, 0)
+    }
+}
+.fadeOutBottom {
+    -webkit-animation-name:fadeOutBottom;
+    animation-name:fadeOutBottom
+}
+
+.musicRotate {
+    -webkit-animation: musicRotate 5s linear infinite;
+    animation: musicRotate 5s linear infinite;
+} 
+@keyframes musicRotate {
+    from {
+        transform: rotate(0deg);
+      }
+      to {
+        transform: rotate(360deg);
+        transition: all 5s;
+      }
+}

二進制
model-page/images/bgmusic-play-icon.png


二進制
model-page/images/icon_home.png


二進制
model-page/images/icon_info.png


二進制
model-page/images/icon_left.png


二進制
model-page/images/icon_right.png


二進制
model-page/images/play.png


文件差異過大導致無法顯示
+ 1 - 0
model-page/js/4dage.js


文件差異過大導致無法顯示
+ 4 - 0
model-page/js/jquery.js


+ 40 - 0
model-page/model.html

@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<meta name="viewport"
+    content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
+<link rel="icon" type="image/png" sizes="32x32" href="images/favicon.png" class="keep">
+<html>
+
+<head>
+    <title>新疆生产建设兵团总队</title>
+    <!-- <script src="https://model3d.4dage.com/3D/2018/model/DG/js/4dage.js"></script> -->
+    <script src="./js/4dage.js"></script>
+    <style>
+        html {
+            overflow: hidden;
+        }
+    </style>
+</head>
+
+<body>
+    <script src="./js/jquery.js"></script>
+    <!-- <script src="js/constant.js"></script> -->
+
+    <!-- <script type="text/javascript" src="js/data.js"></script> -->
+    <script>
+        var getQueryVariable = function(variable){
+            var query = window.location.search.substring(1);
+            var vars = query.split("&");
+            for (var i=0;i<vars.length;i++) {
+                    var pair = vars[i].split("=");
+                    if(pair[0] == variable){return pair[1];}
+            }
+            return(false);
+        };
+         var number = getQueryVariable("m");
+        /*  window.autoRotate = true; */   // 是否自动旋转
+        fdage.embed('/goods/model/'+ number, { width: 800, height: 600, autoStart: true, fullFrame: true, pagePreset: false });
+    </script>
+</body>
+
+</html>

+ 2 - 0
new_backstage/package.json

@@ -11,8 +11,10 @@
     "axios": "^0.21.1",
     "axios": "^0.21.1",
     "core-js": "^3.6.5",
     "core-js": "^3.6.5",
     "element-ui": "^2.15.3",
     "element-ui": "^2.15.3",
+    "js-base64": "^3.6.1",
     "vue": "^2.6.11",
     "vue": "^2.6.11",
     "vue-router": "^3.2.0",
     "vue-router": "^3.2.0",
+    "vuedraggable": "^2.24.3",
     "vuex": "^3.6.2"
     "vuex": "^3.6.2"
   },
   },
   "devDependencies": {
   "devDependencies": {

+ 1 - 1
new_backstage/public/index.html

@@ -5,7 +5,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="<%= BASE_URL %>favicon.png">
     <link rel="icon" href="<%= BASE_URL %>favicon.png">
-    <title>新疆生产建设兵团总队</title>
+    <title>中国人民武装警察部队新疆生产建设兵团总部</title>
   </head>
   </head>
   <body>
   <body>
     <noscript>
     <noscript>

+ 2 - 1
new_backstage/public/static/tinymce/skins/ui/oxide-dark/skin.css

@@ -1352,6 +1352,7 @@ button::-moz-focus-inner {
   position: absolute;
   position: absolute;
   width: 100%;
   width: 100%;
   z-index: 1100;
   z-index: 1100;
+  transform:translateX(-50%);left:50%;
 }
 }
 .tox .tox-dialog__body-iframe {
 .tox .tox-dialog__body-iframe {
   display: flex;
   display: flex;
@@ -2358,7 +2359,7 @@ body.tox-dialog__disable-scroll {
 .tox .tox-pop.tox-pop--align-right::after {
 .tox .tox-pop.tox-pop--align-right::after {
   left: calc(100% - 20px);
   left: calc(100% - 20px);
 }
 }
-.tox .tox-sidebar-wrap {
+.tox .tox-sidebar-wrap {pointer-events: auto!important;opacity: 1!important;
   display: flex;
   display: flex;
   flex-direction: row;
   flex-direction: row;
   flex-grow: 1;
   flex-grow: 1;

文件差異過大導致無法顯示
+ 1 - 1
new_backstage/public/static/tinymce/skins/ui/oxide-dark/skin.min.css


文件差異過大導致無法顯示
+ 1 - 1
new_backstage/public/static/tinymce/skins/ui/oxide-dark/skin.min.css.map


+ 3 - 1
new_backstage/public/static/tinymce/skins/ui/oxide/skin.css

@@ -1352,6 +1352,8 @@ button::-moz-focus-inner {
   position: absolute;
   position: absolute;
   width: 100%;
   width: 100%;
   z-index: 1100;
   z-index: 1100;
+  transform: translateX(-50%);
+  left: 50%;
 }
 }
 .tox .tox-dialog__body-iframe {
 .tox .tox-dialog__body-iframe {
   display: flex;
   display: flex;
@@ -2358,7 +2360,7 @@ body.tox-dialog__disable-scroll {
 .tox .tox-pop.tox-pop--align-right::after {
 .tox .tox-pop.tox-pop--align-right::after {
   left: calc(100% - 20px);
   left: calc(100% - 20px);
 }
 }
-.tox .tox-sidebar-wrap {
+.tox .tox-sidebar-wrap {pointer-events: auto!important;opacity: 1!important;
   display: flex;
   display: flex;
   flex-direction: row;
   flex-direction: row;
   flex-grow: 1;
   flex-grow: 1;

文件差異過大導致無法顯示
+ 3060 - 1
new_backstage/public/static/tinymce/skins/ui/oxide/skin.min.css


文件差異過大導致無法顯示
+ 1 - 1
new_backstage/public/static/tinymce/skins/ui/oxide/skin.min.css.map


+ 1 - 1
new_backstage/public/static/tinymce/themes/silver/theme.min.js

@@ -26599,7 +26599,7 @@
       },
       },
       view: {
       view: {
         title: 'View',
         title: 'View',
-        items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments'
+        items: 'code | visualchars visualblocks | spellchecker | preview fullscreen | showcomments'
       },
       },
       insert: {
       insert: {
         title: 'Insert',
         title: 'Insert',

+ 1 - 1
new_backstage/src/assets/font/iconfont.json

@@ -1,6 +1,6 @@
 {
 {
   "id": "1855608",
   "id": "1855608",
-  "name": "新疆生产建设兵团总队",
+  "name": "中国人民武装警察部队新疆生产建设兵团总部",
   "font_family": "iconfont",
   "font_family": "iconfont",
   "css_prefix_text": "icon",
   "css_prefix_text": "icon",
   "description": "展示界面和管理后台",
   "description": "展示界面和管理后台",

二進制
new_backstage/src/assets/img/defaultImg.jpg


+ 8 - 9
new_backstage/src/components/Tinymce/index.vue

@@ -101,37 +101,36 @@ export default {
         },
         },
         file_upload_handler:async (blobInfo,success,failure)=>{
         file_upload_handler:async (blobInfo,success,failure)=>{
           let form = new FormData()
           let form = new FormData()
-          console.log(blobInfo.file)
+          console.log(blobInfo)
           form.append('file',blobInfo.file)
           form.append('file',blobInfo.file)
            await this.$http({
            await this.$http({
             method: "post",
             method: "post",
             data: form,
             data: form,
             headers: {
             headers: {
-              token: window.localStorage.getItem("token"),
               'Content-Type':'multipart/form-data'
               'Content-Type':'multipart/form-data'
             },
             },
-            url: `/manage/file/upload`,
+            url: `cms/news/upload/file`,
           }).then(result=>{
           }).then(result=>{
-            let url = result.data.urlPath;
+            let url = result.data.filePath;
             success(url)
             success(url)
           }).catch(err=>{
           }).catch(err=>{
             failure(err)
             failure(err)
           })
           })
         },
         },
-        images_upload_handler:async (blobInfo,success,failure)=>{
+        images_upload_handler:async (blobInfo,success)=>{
           let form = new FormData()
           let form = new FormData()
-          console.log(failure)
+          console.log(blobInfo.blob(),blobInfo.filename())
           form.append('file',blobInfo.blob(),blobInfo.filename())
           form.append('file',blobInfo.blob(),blobInfo.filename())
+          
           await this.$http({
           await this.$http({
             method: "post",
             method: "post",
             data: form,
             data: form,
             headers: {
             headers: {
-              token: window.localStorage.getItem("token"),
               'Content-Type':'multipart/form-data'
               'Content-Type':'multipart/form-data'
             },
             },
-            url: `/manage/file/upload`,
+            url: `cms/news/upload/img`,
           }).then(result=>{
           }).then(result=>{
-            let url = result.data.urlPath;
+            let url = result.data.filePath;
             success(url)
             success(url)
           }).catch(()=>{
           }).catch(()=>{
             this.$alert("上传失败,请稍后再试", "提示", {
             this.$alert("上传失败,请稍后再试", "提示", {

+ 1 - 1
new_backstage/src/components/Tinymce/plugins.js

@@ -1,5 +1,5 @@
 const plugins = [
 const plugins = [
-    'advlist anchor autolink autosave code indent2em lineheight codesample directionality emoticons fullscreen hr image imagetools importcss insertdatetime link lists media nonbreaking noneditable pagebreak  preview print save searchreplace tabfocus table template  textpattern visualblocks visualchars wordcount paste axupimgs'
+    'advlist anchor autolink autosave code indent2em lineheight codesample directionality emoticons fullscreen hr image imagetools importcss insertdatetime link lists media nonbreaking noneditable pagebreak  preview print save searchreplace tabfocus table  textpattern visualblocks visualchars wordcount paste axupimgs'
   ]
   ]
   
   
 export default plugins
 export default plugins

+ 4 - 2
new_backstage/src/components/Tinymce/toolbar.js

@@ -1,3 +1,5 @@
-const toolbar = ['formatselect fontsizeselect forecolor backcolor bold italic underline strikethrough alignleft aligncenter alignright outdent indent  indent2em lineheight  removeformat  hr undo redo image media axupimgs']
+const toolbar = [
+  "formatselect fontsizeselect forecolor backcolor bold italic underline strikethrough alignleft aligncenter alignright outdent indent  indent2em lineheight  removeformat  hr undo redo image media axupimgs",
+];
 
 
-export default toolbar
+export default toolbar;

+ 1 - 1
new_backstage/src/components/editcomponent/editcon.vue

@@ -22,7 +22,7 @@
 
 
        <template v-else>
        <template v-else>
         <el-button @click="$emit('cancel')">返回</el-button>
         <el-button @click="$emit('cancel')">返回</el-button>
-        <el-button type="primary" @click="$emit('determine')">确定</el-button>
+        <el-button v-if="$route.name=='edit-role'||$route.name=='edit-user'" type="primary" @click="$emit('determine')">确定</el-button>
       </template>
       </template>
     </el-footer>
     </el-footer>
   </el-container>
   </el-container>

+ 1 - 0
new_backstage/src/components/editcomponent/editdialog.vue

@@ -12,6 +12,7 @@
             type="textarea"
             type="textarea"
             :autosize="{ minRows: 2, maxRows: 4}"
             :autosize="{ minRows: 2, maxRows: 4}"
             placeholder="请输入内容"
             placeholder="请输入内容"
+            :maxlength="INPUTLENGTH*2" show-word-limit
             v-model="auditForm.reason">
             v-model="auditForm.reason">
           </el-input>
           </el-input>
         </el-form-item>
         </el-form-item>

+ 2 - 2
new_backstage/src/components/editcomponent/usereditdialog.vue

@@ -9,7 +9,7 @@
       <div class="formcon">
       <div class="formcon">
         <div class="formtop">
         <div class="formtop">
           <div class="left">
           <div class="left">
-            <el-form-item label="用户身份码:" prop="userName">
+            <el-form-item label="身份码:" prop="userName">
               <el-input :disabled="true" v-model="form.userName"></el-input>
               <el-input :disabled="true" v-model="form.userName"></el-input>
             </el-form-item>
             </el-form-item>
 
 
@@ -76,7 +76,7 @@
 import {saveSys} from "@/configue/api";
 import {saveSys} from "@/configue/api";
 
 
 let rule = {
 let rule = {
-  userName: [{ required: true, message: "请输入用户身份码", trigger: "blur" }],
+  userName: [{ required: true, message: "请输入身份码", trigger: "blur" }],
   nickName: [{ required: true, message: "请输入用户昵称", trigger: "blur" }],
   nickName: [{ required: true, message: "请输入用户昵称", trigger: "blur" }],
   unit: [{ required: true, message: "请输入单位名称", trigger: "blur" }],
   unit: [{ required: true, message: "请输入单位名称", trigger: "blur" }],
   roleId: [{ required: true, message: "请选择用户角色", trigger: "change" }],
   roleId: [{ required: true, message: "请选择用户角色", trigger: "change" }],

+ 30 - 19
new_backstage/src/components/table/index.vue

@@ -12,42 +12,52 @@
         :key="idx"
         :key="idx"
         :prop="item.prop"
         :prop="item.prop"
         :label="item.label"
         :label="item.label"
-        :width="item.prop === 'thumb' ? 300 : 'auto'"
+        :width="item.prop === 'thumb' ? 300 : (item.width||'auto')"
       >
       >
         <template slot-scope="scope">
         <template slot-scope="scope">
 
 
           <el-image 
           <el-image 
             v-if="item.prop === 'thumb'"
             v-if="item.prop === 'thumb'"
-            style="min-width:180px;width:auto;height:160px;"
+            style="min-width:180px;width:auto;height:220px;"
             :fit="'cover'"
             :fit="'cover'"
-            :src="scope.row[item.prop]"
+            :src="scope.row[item.prop]||(item.default?require('@/assets/img/defaultImg.jpg'):'')"
           :preview-src-list="[scope.row[item.prop]]">
           :preview-src-list="[scope.row[item.prop]]">
         </el-image>
         </el-image>
 
 
             
             
-        <template v-else-if="item.prop === 'display' && activeSub['是否显示']">
-          <span v-if="!isNull(scope.row.status)&&scope.row.status!=3">-</span>
-          <el-switch
-            v-else
-            @change="(e)=>{handleSwitch(e,scope.row)}"
-            v-model="scope.row[item.prop]">
-          </el-switch>
-        </template>
+        <template v-else-if="item.prop === 'display' ">
+          <span v-if="!activeSub['是否显示']">-</span>
+          <template v-else>
+             <span v-if="!isNull(scope.row.status)&&scope.row.status!=3">-</span>
+            <el-switch
+              v-else
+              @change="(e)=>{handleSwitch(e,scope.row)}"
+              v-model="scope.row[item.prop]">
+            </el-switch>
+          </template>
          
          
-          
-
+        </template>
 
 
-          <el-switch
+        <template v-else-if="item.prop === 'isEnabled'">
+          <span v-if="scope.row.roleKey=='sys_admin'">-</span>
+            <el-switch
             @change="(e)=>{handleDisableSwitch(e,scope.row)}"
             @change="(e)=>{handleDisableSwitch(e,scope.row)}"
-            v-else-if="item.prop === 'isDisable'"
+            v-else
             v-model="scope.row[item.prop]">
             v-model="scope.row[item.prop]">
           </el-switch>
           </el-switch>
+        </template>
+        
 
 
           <template
           <template
             v-else-if="item.prop === 'record'">
             v-else-if="item.prop === 'record'">
             <slot :data="scope.row" name="record"></slot>
             <slot :data="scope.row" name="record"></slot>
           </template>
           </template>
           <span v-else-if="item.prop === 'status'">{{ statusStr[scope.row[item.prop]] || "-" }}</span>
           <span v-else-if="item.prop === 'status'">{{ statusStr[scope.row[item.prop]] || "-" }}</span>
+
+          <template v-else-if="item.canEdit">
+              <slot :name="item.prop" :data="scope.row"></slot>
+          </template>
+          
           <span v-else>{{ scope.row[item.prop] }}</span>
           <span v-else>{{ scope.row[item.prop] }}</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
@@ -61,7 +71,7 @@
 
 
           <template v-else>
           <template v-else>
              <!-- 草稿中 -->  
              <!-- 草稿中 -->  
-            <span v-if="scope.row.status===0 && activeSub['提交']" class="o-span" @click="submit(scope.row,type)">提交</span>
+            <span v-if="scope.row.status===0 && activeSub['提交']" class="o-span" @click="$emit('submit',{item:scope.row,type})">提交</span>
 
 
             <!-- 待审核 -->
             <!-- 待审核 -->
             <span v-if="(scope.row.status==1||scope.row.status==3) && activeSub['查看']" class="o-span" @click="goto(scope.row)">查看</span>
             <span v-if="(scope.row.status==1||scope.row.status==3) && activeSub['查看']" class="o-span" @click="goto(scope.row)">查看</span>
@@ -73,7 +83,8 @@
             <span v-if="(scope.row.status==2||scope.row.status==0) && activeSub['编辑']" class="o-span" @click="goto(scope.row)">编辑</span> 
             <span v-if="(scope.row.status==2||scope.row.status==0) && activeSub['编辑']" class="o-span" @click="goto(scope.row)">编辑</span> 
           </template>
           </template>
           
           
-          <span v-if="activeSub['删除']" :class="{disabletxt:scope.row.display}" class="o-span" @click="$emit('del',{item:scope.row,type})">删除</span>
+          <span v-if="activeSub['删除']||scope.row.status===0" :class="{disabletxt:scope.row.display}" class="o-span" @click="$emit('del',{item:scope.row,type})">删除</span>
+          <span v-if="!activeSub['查看']&&!activeSub['提交']&&!activeSub['审核']&&!activeSub['编辑']&&!activeSub['删除']">-</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
       
       
@@ -129,7 +140,7 @@ export default {
        this.tableData.list && this.tableData.list.forEach((item, i) => {
        this.tableData.list && this.tableData.list.forEach((item, i) => {
         item["idx"] = i + 1 + this.page.size * (this.page.pageNum-1);
         item["idx"] = i + 1 + this.page.size * (this.page.pageNum-1);
         item["display"] = Boolean(item["display"]);
         item["display"] = Boolean(item["display"]);
-        item["isDisable"] = Boolean(item["isDisable"]);
+        item["isEnabled"] = Boolean(item["isEnabled"]);
         item["sexStr"] = item["sex"]==0?'男':'女'
         item["sexStr"] = item["sex"]==0?'男':'女'
       });
       });
       return this.tableData
       return this.tableData
@@ -151,7 +162,7 @@ export default {
       console.log(item);
       console.log(item);
       handleDisable(this.$route.name,{
       handleDisable(this.$route.name,{
         id:item.id,
         id:item.id,
-        isDisable:Number(val),
+        isEnabled:Number(val),
       },()=>{})
       },()=>{})
     },
     },
     handleCurrentChange(data){
     handleCurrentChange(data){

+ 4 - 4
new_backstage/src/components/uploadFile/index.vue

@@ -1,6 +1,6 @@
 <template>
 <template>
   <div>
   <div>
-    <el-input class="fadeDom" v-model="data"></el-input>
+    <el-input class="fadeDom" v-model="filePath"></el-input>
     <el-upload
     <el-upload
       class="upload-demo"
       class="upload-demo"
       drag
       drag
@@ -18,13 +18,13 @@
         <p style="padding:0 10px;">{{desc}}</p>
         <p style="padding:0 10px;">{{desc}}</p>
       </div>
       </div>
     </el-upload>
     </el-upload>
-    <p style="color:#999">{{data}}</p>
+    <slot name="filePath" ></slot>
   </div>
   </div>
 </template>
 </template>
 
 
 <script>
 <script>
 export default {
 export default {
-  props:['data','url','desc'],
+  props:['filePath','url','desc'],
   data(){
   data(){
     return {
     return {
       token:window.localStorage.getItem('token')
       token:window.localStorage.getItem('token')
@@ -62,7 +62,7 @@ export default {
     handleSuccess(res) {
     handleSuccess(res) {
       this.loading.close()
       this.loading.close()
       let { data } = res;
       let { data } = res;
-      this.$emit('update',data.filePath)
+      this.$emit('update',data)
     }
     }
   }
   }
 }
 }

+ 22 - 1
new_backstage/src/components/uploadThumb/index.vue

@@ -10,8 +10,14 @@
       :on-error="handleError"
       :on-error="handleError"
       :before-upload="beforeAvatarUpload"
       :before-upload="beforeAvatarUpload"
     >
     >
-      <img v-if="thumb" :src="thumb" class="avatar" />
+    <template v-if="thumb" >
+      <img :src="thumb" class="avatar" />
+      <div class="del" @click.stop="thumb=''">
+        <i class="el-icon-delete"></i>
+      </div>
+    </template>
       <i v-else class="el-icon-plus avatar-uploader-icon"></i>
       <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+     
     </el-upload>
     </el-upload>
     <span style="color:#999;">格式要求:支持png、jpg、gif和jpeg的图片格式;最大支持20M。</span>
     <span style="color:#999;">格式要求:支持png、jpg、gif和jpeg的图片格式;最大支持20M。</span>
   </div>
   </div>
@@ -68,8 +74,23 @@ export default {
     position: relative;
     position: relative;
     overflow: hidden;
     overflow: hidden;
   }
   }
+  .avatar-uploader {
+    .del{
+      position: absolute;
+      right: 0;
+      top: 0;
+      display: none;
+      width: 40px;
+      >i{
+
+      }
+    }
+  }
   .avatar-uploader .el-upload:hover {
   .avatar-uploader .el-upload:hover {
     border-color: #409EFF;
     border-color: #409EFF;
+    .del{
+      display: block;
+    }
   }
   }
   .avatar-uploader-icon {
   .avatar-uploader-icon {
     font-size: 28px;
     font-size: 28px;

+ 24 - 2
new_backstage/src/configue/api.js

@@ -40,6 +40,18 @@ export function getSysList(type, data, cb) {
   });
   });
 }
 }
 
 
+// 获取用户设置的权限列表
+export function getRoleList(cb) {
+
+  axios({
+    method: "get",
+    url: `sys/user/getRole`,
+  }).then((res) => {
+    cb(res);
+  });
+}
+
+
 
 
 // 保存
 // 保存
 
 
@@ -172,7 +184,7 @@ export function handleDisplay(type, data, cb) {
 export function handleDisable(type, data, cb) {
 export function handleDisable(type, data, cb) {
   axios({
   axios({
     method: "get",
     method: "get",
-    url: `sys/${type}/editStatus/${data.id}/${data.isDisable}`,
+    url: `sys/${type}/editStatus/${data.id}/${data.isEnabled}`,
   }).then((res) => {
   }).then((res) => {
     cb(res);
     cb(res);
   });
   });
@@ -222,7 +234,7 @@ export function delQuestion(data, cb) {
 export function delscene(data, cb) {
 export function delscene(data, cb) {
   axios({
   axios({
     method: "get",
     method: "get",
-    url: `scene/removes/${data.id}`,
+    url: `cms/scene/removes/${data.id}`,
   }).then((res) => {
   }).then((res) => {
     cb(res);
     cb(res);
   });
   });
@@ -239,6 +251,16 @@ export function delSys(type, data, cb) {
   });
   });
 }
 }
 
 
+//删除(sys)
+export function delSysSingle(type, data, cb) {
+  axios({
+    method: "get",
+    url: `sys/${type}/remove/${data.id}`,
+  }).then((res) => {
+    cb(res);
+  });
+}
+
 //重置密码
 //重置密码
 export function resetPass(data, cb) {
 export function resetPass(data, cb) {
   axios({
   axios({

+ 6 - 9
new_backstage/src/configue/http.js

@@ -24,6 +24,10 @@ axios.interceptors.request.use(
       spinner: "el-icon-loading",
       spinner: "el-icon-loading",
       background: "rgba(0, 0, 0, 0.7)",
       background: "rgba(0, 0, 0, 0.7)",
     });
     });
+
+    if(config.headers["Content-Type"]=='multipart/form-data'){
+      return config;
+    }
    
    
     if (config.method === "post") {
     if (config.method === "post") {
       config.data = {
       config.data = {
@@ -35,10 +39,11 @@ axios.interceptors.request.use(
       config.params = {
       config.params = {
         rnd: Math.random(),
         rnd: Math.random(),
         ...config.params,
         ...config.params,
-      };
+      } 
       // config.params = qs.stringify(config.params)
       // config.params = qs.stringify(config.params)
     }
     }
 
 
+   
     return config;
     return config;
   },
   },
   function(error) {
   function(error) {
@@ -67,14 +72,6 @@ axios.interceptors.response.use(
               router.push("/login");
               router.push("/login");
             },
             },
           });
           });
-        } else {
-          vue.$alert("登录状态失效,请重新登录", "提示", {
-            confirmButtonText: "确定",
-            callback: function() {
-              window.localStorage.setItem("userInfo", "");
-              router.push("/login");
-            },
-          });
         }
         }
         return
         return
       case 5002:
       case 5002:

+ 29 - 4
new_backstage/src/mixins/index.js

@@ -11,8 +11,7 @@ Vue.prototype.$http = axios;
 Vue.prototype.isImage = isImage;
 Vue.prototype.isImage = isImage;
 Vue.prototype.isTypeBySend = isTypeBySend;
 Vue.prototype.isTypeBySend = isTypeBySend;
 
 
-Vue.prototype.MAXLENGTH = 200;
-Vue.prototype.FONTLENGTH = 25;
+Vue.prototype.INPUTLENGTH = 25;
 Vue.prototype.PAGESIZES = [25, 50, 75, 100];
 Vue.prototype.PAGESIZES = [25, 50, 75, 100];
 Vue.prototype.loading = {
 Vue.prototype.loading = {
   close() {},
   close() {},
@@ -93,8 +92,20 @@ Vue.prototype.sex = {
   1: "女",
   1: "女",
 };
 };
 
 
+
+
 Vue.prototype.$serverName = serverName; // 挂载到Vue实例上面
 Vue.prototype.$serverName = serverName; // 挂载到Vue实例上面
 
 
+let g_political = [{
+  val:'群众'
+},{
+  val:'团员'
+},{
+  val:'党员'
+},{
+  val:'预备党员'
+}]
+
 import MainTop from "@/components/main-top";
 import MainTop from "@/components/main-top";
 import search from "@/components/search";
 import search from "@/components/search";
 import accordion from "@/components/accordion";
 import accordion from "@/components/accordion";
@@ -115,6 +126,11 @@ Vue.mixin({
     editdialog,
     editdialog,
     vdialog: dialog,
     vdialog: dialog,
   },
   },
+  data(){
+    return {
+      g_political
+    }
+  },
   methods: {
   methods: {
     cloneObject,
     cloneObject,
     isNull,
     isNull,
@@ -209,8 +225,17 @@ Vue.mixin({
         this.alDetail = res;
         this.alDetail = res;
       });
       });
     },
     },
-    submit(item, type) {
-      console.log(item, type);
+    submit(data,hadTwoParam=null) {
+      let item = ''
+      let type = ''
+      if (hadTwoParam) {
+          item = data
+          type = hadTwoParam
+      }
+      else{
+        item = data.item
+        type = data.type
+      }
       this.confirm("提交后,信息将进入审核,是否继续?", () => {
       this.confirm("提交后,信息将进入审核,是否继续?", () => {
         apply(type, { id: item.id }, () => {
         apply(type, { id: item.id }, () => {
           this.$alert("提交成功", "提示", {
           this.$alert("提交成功", "提示", {

+ 30 - 15
new_backstage/src/pages/content/collection/componets/img.vue

@@ -1,22 +1,24 @@
 <template>
 <template>
   <div>
   <div>
     <el-form-item label="标题:" prop="name">
     <el-form-item label="标题:" prop="name">
-      <el-input v-model="form.name"></el-input>
+      <el-input v-model="form.name" :maxlength="INPUTLENGTH" show-word-limit></el-input>
     </el-form-item>
     </el-form-item>
 
 
     <el-form-item label="精品类型:">
     <el-form-item label="精品类型:">
       <el-radio disabled v-model="radio" label="选中且禁用">专题图库</el-radio>
       <el-radio disabled v-model="radio" label="选中且禁用">专题图库</el-radio>
     </el-form-item>
     </el-form-item>
 
 
-    <el-form-item label="是否展示:">
-      <el-switch v-model="form.display"> </el-switch>
-    </el-form-item>
-
     <el-form-item label="图片:" prop="thumb">
     <el-form-item label="图片:" prop="thumb">
+      <el-input v-model="form.thumb" class="fadeDom"></el-input>
       <ul class="tuku">
       <ul class="tuku">
         <li v-for="(item, i) in filelist" :key="i">
         <li v-for="(item, i) in filelist" :key="i">
           <div class="imgcon">
           <div class="imgcon">
-            <img class="img" :src="$serverName + item.filePath" alt="" />
+            <el-image 
+              class="img" 
+              :src="item.filePath"
+              :fit="'cover'"
+              :preview-src-list="[item.filePath]">
+            </el-image>
             <div class="cover" v-if="item.isIndex">封面图片</div>
             <div class="cover" v-if="item.isIndex">封面图片</div>
             <el-button
             <el-button
               @click="del(item, i)"
               @click="del(item, i)"
@@ -48,7 +50,7 @@
 <script>
 <script>
 import uploadImg from "./plugin/uploadimg.vue";
 import uploadImg from "./plugin/uploadimg.vue";
 
 
-import { setCover, delImg } from "@/configue/api";
+import { delImg } from "@/configue/api";
 
 
 export default {
 export default {
   props: ["data", "rule", "filelist"],
   props: ["data", "rule", "filelist"],
@@ -60,14 +62,19 @@ export default {
       thumbUrl: this.$serverName + "cms/goods/uploadImg",
       thumbUrl: this.$serverName + "cms/goods/uploadImg",
     };
     };
   },
   },
+  watch:{
+    'filelist':function (newVal) {
+      if (newVal.length<=0) {
+        this.form.indexId = ''
+        this.form.thumb = ''
+      }
+    }
+  },
   methods: {
   methods: {
     setCover(item) {
     setCover(item) {
-      setCover(
-        {
-          fileId: item.id,
-        },
-        () => {
-          this.filelist.forEach((sub) => {
+      this.form.indexId = item.id
+      this.form.thumb = item.filePath
+      this.filelist.forEach((sub) => {
             //匹配置为0
             //匹配置为0
             if (item.id == sub.id) {
             if (item.id == sub.id) {
               sub.isIndex = 1;
               sub.isIndex = 1;
@@ -75,8 +82,6 @@ export default {
               sub.isIndex = 0;
               sub.isIndex = 0;
             }
             }
           });
           });
-        }
-      );
     },
     },
 
 
     del(item, i) {
     del(item, i) {
@@ -99,10 +104,16 @@ export default {
     reupload() {},
     reupload() {},
 
 
     updateImg(data) {
     updateImg(data) {
+      
       this.filelist.push({
       this.filelist.push({
         ...data,
         ...data,
         isIndex:0
         isIndex:0
       })
       })
+
+      if (this.filelist.length===1) {
+        this.form.indexId = data.id
+        this.form.thumb = data.filePath
+      }
     },
     },
   },
   },
 };
 };
@@ -113,9 +124,11 @@ export default {
 .tuku {
 .tuku {
   display: flex;
   display: flex;
   margin-bottom: @gap;
   margin-bottom: @gap;
+  flex-wrap: wrap;
   li {
   li {
     width: 180px;
     width: 180px;
     margin-right: @gap;
     margin-right: @gap;
+    margin-bottom: @gap;
     .imgcon {
     .imgcon {
       cursor: pointer;
       cursor: pointer;
       width: 100%;
       width: 100%;
@@ -123,6 +136,7 @@ export default {
       margin-bottom: @gap / 2;
       margin-bottom: @gap / 2;
       position: relative;
       position: relative;
       background: #f0f0f0;
       background: #f0f0f0;
+      overflow:hidden;
       .img {
       .img {
         width: 100%;
         width: 100%;
         position: absolute;
         position: absolute;
@@ -141,6 +155,7 @@ export default {
         top: 50%;
         top: 50%;
         left: 0;
         left: 0;
         transform: translateY(-50%);
         transform: translateY(-50%);
+        pointer-events: none;
       }
       }
       button {
       button {
         display: none;
         display: none;

+ 15 - 6
new_backstage/src/pages/content/collection/componets/model.vue

@@ -1,23 +1,23 @@
 <template>
 <template>
   <div>
   <div>
     <el-form-item label="标题:" prop="name">
     <el-form-item label="标题:" prop="name">
-      <el-input v-model="form.name"></el-input>
+      <el-input v-model="form.name" :maxlength="INPUTLENGTH" show-word-limit></el-input>
     </el-form-item>
     </el-form-item>
 
 
     <el-form-item label="精品类型:">
     <el-form-item label="精品类型:">
       <el-radio disabled v-model="radio" label="选中且禁用">实物模型</el-radio>
       <el-radio disabled v-model="radio" label="选中且禁用">实物模型</el-radio>
     </el-form-item>
     </el-form-item>
 
 
-    <el-form-item label="是否展示:">
-      <el-switch v-model="form.display"> </el-switch>
-    </el-form-item>
-
     <el-form-item label="封面图片:" prop="thumb">
     <el-form-item label="封面图片:" prop="thumb">
       <uploadThumb :url="thumbUrl" @update="data=>{form.thumb = data}" :thumb="form.thumb" />
       <uploadThumb :url="thumbUrl" @update="data=>{form.thumb = data}" :thumb="form.thumb" />
     </el-form-item>
     </el-form-item>
 
 
     <el-form-item label="模型文件:" prop="filePath">
     <el-form-item label="模型文件:" prop="filePath">
-      <uploadFile :url="fileUrl" @update="data=>{form.filePath = data}" :data="form.filePath" :desc="'仅支持.4dage格式的模型文件,大小不得超过500m'" />
+      <uploadFile :url="fileUrl" @update="data=>{form.fileName = data.fileName,form.filePath = data.filePath}" :filePath="form.filePath" :desc="'仅支持.4dage格式的模型文件,大小不得超过500m'" >
+        <div slot="filePath" v-if="form.filePath">
+          <iframe :src="`/model-page/model.html?m=${form.fileName}`" frameborder="0"></iframe>
+        </div>
+      </uploadFile>
     </el-form-item>
     </el-form-item>
   </div>
   </div>
 </template>
 </template>
@@ -39,3 +39,12 @@ export default {
   },
   },
 };
 };
 </script>
 </script>
+
+<style lang="less" scoped>
+iframe{
+  width: 50%;
+  height: 400px;
+  pointer-events: auto!important;
+  opacity: 1!important;
+}
+</style>

+ 12 - 6
new_backstage/src/pages/content/collection/componets/video.vue

@@ -1,23 +1,21 @@
 <template>
 <template>
   <div>
   <div>
     <el-form-item label="标题:" prop="name">
     <el-form-item label="标题:" prop="name">
-      <el-input v-model="form.name"></el-input>
+      <el-input v-model="form.name" :maxlength="INPUTLENGTH" show-word-limit></el-input>
     </el-form-item>
     </el-form-item>
 
 
     <el-form-item label="精品类型:">
     <el-form-item label="精品类型:">
       <el-radio disabled v-model="radio" label="选中且禁用">视频档案</el-radio>
       <el-radio disabled v-model="radio" label="选中且禁用">视频档案</el-radio>
     </el-form-item>
     </el-form-item>
 
 
-    <el-form-item label="是否展示:">
-      <el-switch v-model="form.display"> </el-switch>
-    </el-form-item>
-
     <el-form-item label="封面图片:" prop="thumb">
     <el-form-item label="封面图片:" prop="thumb">
       <uploadThumb :url="thumbUrl" @update="data=>{form.thumb = data}" :thumb="form.thumb" />
       <uploadThumb :url="thumbUrl" @update="data=>{form.thumb = data}" :thumb="form.thumb" />
     </el-form-item>
     </el-form-item>
 
 
     <el-form-item label="视频文件:" prop="filePath">
     <el-form-item label="视频文件:" prop="filePath">
-      <uploadFile :url="fileUrl" @update="data=>{form.filePath = data}" :data="form.filePath" :desc="'支持AVI、mov、rmvb、rm、FLV、mp4、3GP等格式的视频文件,大小不超过2GB'" />
+      <uploadFile :url="fileUrl"  @update="data=>{form.fileName = data.fileName,form.filePath = data.filePath}" :filePath="form.filePath" :desc="'支持AVI、mov、rmvb、rm、FLV、mp4、3GP等格式的视频文件,大小不超过2GB'" />
+      <video class="svideo" v-if="form.filePath" controls :src="form.filePath">
+      </video>
     </el-form-item>
     </el-form-item>
   </div>
   </div>
 </template>
 </template>
@@ -40,3 +38,11 @@ export default {
   },
   },
 };
 };
 </script>
 </script>
+
+<style lang="less" scoped>
+.svideo{
+  max-width: 50%;
+  pointer-events: auto!important;
+  opacity: 1!important;
+}
+</style>

+ 6 - 5
new_backstage/src/pages/content/collection/data.js

@@ -135,19 +135,20 @@ let formKey = {
     name:'',
     name:'',
     thumb:'',
     thumb:'',
     filePath:'',
     filePath:'',
-    display: true
+    display: false
   },
   },
   img:{ 
   img:{ 
     name:'',
     name:'',
     thumb:'',
     thumb:'',
     filePath:'',
     filePath:'',
-    display: true
+    display: false,
+    indexId:''
   },
   },
   video:{ 
   video:{ 
     name:'',
     name:'',
     thumb:'',
     thumb:'',
     filePath:'',
     filePath:'',
-    display: true
+    display: false
   }
   }
 }
 }
 
 
@@ -159,12 +160,12 @@ let rules = {
   },
   },
   img:{ 
   img:{ 
     name: [{ required: true, message: "请输入标题", trigger: "blur" }],
     name: [{ required: true, message: "请输入标题", trigger: "blur" }],
-    thumb: [{ required: true, message: "请选择精品类型", trigger: "blur" }],
+    thumb: [{ required: true, message: "请上传图片", trigger: "change" }],
     filePath: [{ required: true, message: "请上传封面图片", trigger: "blur" }]
     filePath: [{ required: true, message: "请上传封面图片", trigger: "blur" }]
   },
   },
   video:{ 
   video:{ 
     name: [{ required: true, message: "请输入标题", trigger: "blur" }],
     name: [{ required: true, message: "请输入标题", trigger: "blur" }],
-    thumb: [{ required: true, message: "请选择精品类型", trigger: "blur" }],
+    thumb: [{ required: true, message: "请上传封面图片", trigger: "blur" }],
     filePath: [{ required: true, message: "请上传封面图片", trigger: "blur" }]
     filePath: [{ required: true, message: "请上传封面图片", trigger: "blur" }]
   }
   }
 }
 }

+ 5 - 1
new_backstage/src/pages/content/collection/edit.vue

@@ -33,6 +33,10 @@ import vvideo from "./componets/video";
 import { formKey, rules } from "./data";
 import { formKey, rules } from "./data";
 import { save, getDetail } from "@/configue/api";
 import { save, getDetail } from "@/configue/api";
 
 
+import {randomWord} from "@/util/index.js";
+
+let ran = randomWord(true,8,8)
+
 export default {
 export default {
   components: {
   components: {
     vmodel,
     vmodel,
@@ -71,7 +75,7 @@ export default {
       this.validate(() => {
       this.validate(() => {
         let fileIds = this.filelist.map((item) => item.id).join(",");
         let fileIds = this.filelist.map((item) => item.id).join(",");
         let params = {
         let params = {
-          code: "",
+          code: ran,
           description: "",
           description: "",
           fileIds: fileIds,
           fileIds: fileIds,
           fileName: "",
           fileName: "",

+ 5 - 3
new_backstage/src/pages/content/collection/index.vue

@@ -18,7 +18,7 @@
         <status :status="status" @select="selectStatus"></status>
         <status :status="status" @select="selectStatus"></status>
         <search>
         <search>
           <div slot="content" class="searchslot">
           <div slot="content" class="searchslot">
-            <span>发布时间:</span>
+            <span>提交时间:</span>
             <el-date-picker
             <el-date-picker
               v-model="search.date"
               v-model="search.date"
               type="daterange"
               type="daterange"
@@ -31,13 +31,14 @@
             <span>标题:</span>
             <span>标题:</span>
             <el-input
             <el-input
               class="elInput paddingmore"
               class="elInput paddingmore"
-              :maxlength="50"
+              :maxlength="25"
               show-word-limit
               show-word-limit
               v-model="search.inputKey"
               v-model="search.inputKey"
               @keydown.enter.native="getList"
               @keydown.enter.native="getList"
-              placeholder="请输入标题"
+              placeholder="请输入关键字"
             ></el-input>
             ></el-input>
             <el-button @click="getList" type="primary">查询</el-button>
             <el-button @click="getList" type="primary">查询</el-button>
+            <el-button @click="search.date='',search.inputKey='',getList()" >重置</el-button>
           </div>
           </div>
         </search>
         </search>
         <div class="table">
         <div class="table">
@@ -57,6 +58,7 @@
               }
               }
             "
             "
             @del="del"
             @del="del"
+            @submit="submit"
             :tableData="list"
             :tableData="list"
           >
           >
           
           

+ 22 - 12
new_backstage/src/pages/content/interaction/componets/questionGroup.vue

@@ -1,16 +1,15 @@
 <template>
 <template>
   <div>
   <div>
     <el-form-item label="题组标题:" prop="name">
     <el-form-item label="题组标题:" prop="name">
-      <el-input v-model="form.name"></el-input>
-    </el-form-item>
-
-    <el-form-item label="是否展示:">
-      <el-switch v-model="form.display"> </el-switch>
+      <el-input v-model="form.name" :maxlength="INPUTLENGTH" show-word-limit></el-input>
     </el-form-item>
     </el-form-item>
 
 
     <el-form-item prop="answerStr">
     <el-form-item prop="answerStr">
       <el-input class="fadeDom" v-model="form.answerStr"></el-input>
       <el-input class="fadeDom" v-model="form.answerStr"></el-input>
-      <ul class="questsion">
+      <draggable tag="ul"
+            animation="300"
+            v-model="form.answer"
+            class="questsion">
         <li v-for="(item,i) in form.answer" :key="i">
         <li v-for="(item,i) in form.answer" :key="i">
           <div class="xuhao">
           <div class="xuhao">
             <span>第{{i+1}}题</span>
             <span>第{{i+1}}题</span>
@@ -18,22 +17,22 @@
           </div>
           </div>
           <div class="qtitle">
           <div class="qtitle">
             <label class="required">题目:</label>
             <label class="required">题目:</label>
-            <el-input v-model="item.question"></el-input>
+            <el-input v-model="item.question" :maxlength="INPUTLENGTH" show-word-limit></el-input>
           </div>
           </div>
 
 
           <div class="qanswer">
           <div class="qanswer">
             <label class="required">选项:</label>
             <label class="required">选项:</label>
-            <ul>
+            <draggable tag="ul" animation="300" v-model="item.answer">
               <li v-for="(sub,idx) in item.answer" :key="idx">
               <li v-for="(sub,idx) in item.answer" :key="idx">
                 <el-radio v-model="item.correct" :label="sub.val"><span style="display:none">{{idx}}</span></el-radio>
                 <el-radio v-model="item.correct" :label="sub.val"><span style="display:none">{{idx}}</span></el-radio>
-                <input v-model="sub.name" placeholder="请输入选项内容" type="text">
+                <input v-model="sub.name" placeholder="请输入选项内容"  :maxlength="INPUTLENGTH" show-word-limit type="text">
                 <i @click="delAnswer(item,idx)" class="el-icon-close"></i>
                 <i @click="delAnswer(item,idx)" class="el-icon-close"></i>
               </li>
               </li>
               <el-button size="small" @click="addAnswer(item)" type="primary">增加选项<i class="el-icon-plus el-icon--right"></i></el-button>
               <el-button size="small" @click="addAnswer(item)" type="primary">增加选项<i class="el-icon-plus el-icon--right"></i></el-button>
-            </ul>
+            </draggable>
           </div>
           </div>
         </li>
         </li>
-      </ul>
+      </draggable>
       <el-button @click="addquestion" type="primary">增加题目<i class="el-icon-plus el-icon--right"></i></el-button>
       <el-button @click="addquestion" type="primary">增加题目<i class="el-icon-plus el-icon--right"></i></el-button>
     </el-form-item>
     </el-form-item>
 
 
@@ -43,6 +42,7 @@
 <script>
 <script>
 // import { saveQuestion,updateQuestion,delQuestion } from "@/configue/api";
 // import { saveQuestion,updateQuestion,delQuestion } from "@/configue/api";
 import {randomWord} from "@/util/index.js";
 import {randomWord} from "@/util/index.js";
+import draggable from "vuedraggable";
 
 
 let ran = randomWord(true,8,8)
 let ran = randomWord(true,8,8)
 
 
@@ -62,6 +62,7 @@ export default {
       form: this.data
       form: this.data
     };
     };
   },
   },
+  components:{draggable},
   methods:{
   methods:{
     addquestion(){
     addquestion(){
       this.form.answer.push(this.cloneObject(temp))
       this.form.answer.push(this.cloneObject(temp))
@@ -83,7 +84,16 @@ export default {
       this.form.answer.splice(i,1)
       this.form.answer.splice(i,1)
     },
     },
     delAnswer(item,i){
     delAnswer(item,i){
-      item.answer.splice(i,1)
+      let isCorrect = item.answer.find(sub=>sub.val==item.correct)
+      if (item.answer.length<=2) {
+        this.$alert("至少设置两个选项");
+      }
+      else{
+        item.answer.splice(i,1)
+        if (isCorrect) {
+          item.correct=''
+        }
+      }
     }
     }
   },
   },
   watch:{
   watch:{

+ 47 - 22
new_backstage/src/pages/content/interaction/componets/sensitive.vue

@@ -1,33 +1,58 @@
 <template>
 <template>
-  <div class="disable">
-    <el-form-item label="单位名称:">
-      <el-input v-model="form.unit"></el-input>
-    </el-form-item>
-
-    <el-form-item label="真实姓名:">
-      <el-input v-model="form.realName"></el-input>
-    </el-form-item>
-
-    <el-form-item label="致敬烈士姓名:">
-      <el-input v-model="form.martyrId"></el-input>
-    </el-form-item>
-
-    <el-form-item label="缅怀内容:" >
-      <el-input v-model="form.content"
-          type="textarea"
-          :autosize="{ minRows: 2, maxRows: 4 }"></el-input>
-    </el-form-item>
-  </div>
+  <el-dialog title="敏感词新增" @close="$emit('close')" :visible="show">
+    <el-form :model="form" :rules="rules" ref="sensitiveForm">
+      <el-form-item
+        label="敏感词:"
+        :label-width="formLabelWidth"
+        prop="name"
+      >
+        <el-input type="textarea" :rows="2"  :maxlength="INPUTLENGTH" show-word-limit placeholder="请输入内容" v-model="form.name">
+        </el-input>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="$emit('close')">取 消</el-button>
+      <el-button type="primary" @click="saveSensitive">确 定</el-button>
+    </div>
+  </el-dialog>
 </template>
 </template>
 
 
 <script>
 <script>
-
+import { save } from "@/configue/api";
+let rules = {
+  name: [{ required: true, message: "请输入敏感词", trigger: "blur" }]
+};
 export default {
 export default {
-  props: ["data",'rule'],
+  props: {
+    show: {
+      type: Boolean,
+    },
+    form: Object,
+  },
   data() {
   data() {
     return {
     return {
-      form: this.data
+      formLabelWidth: "100px",
+      rules,
     };
     };
   },
   },
+  methods: {
+    saveSensitive() {
+      this.$refs.sensitiveForm.validate((valid) => {
+        if (valid) {
+          let params = {
+            ...this.form
+          };
+          save("sensitive", params, () => {
+            this.$alert("操作成功", "提示", {
+              confirmButtonText: "确定",
+              callback: () => {
+                this.$emit("close", true);
+              },
+            });
+          });
+        }
+      });
+    },
+  },
 };
 };
 </script>
 </script>

+ 4 - 22
new_backstage/src/pages/content/interaction/data.js

@@ -19,6 +19,7 @@ let raw = {
     {
     {
       prop: "content",
       prop: "content",
       label: "留言内容",
       label: "留言内容",
+      width: 350
     },
     },
     {
     {
       prop: "createTime",
       prop: "createTime",
@@ -50,6 +51,7 @@ let raw = {
     {
     {
       prop: "content",
       prop: "content",
       label: "弹幕内容",
       label: "弹幕内容",
+      width:350
     },
     },
     {
     {
       prop: "createTime",
       prop: "createTime",
@@ -141,24 +143,8 @@ let menu = [
 
 
 let formKey = {
 let formKey = {
   comment:{ 
   comment:{ 
-    birthday: "",
-    description: "",
-    dieDay: "",
-    diePlace: "",
-    display: 0,
-    honor: "",
-    nation: "",
-    nativePlace: "",
-    politicsStatus: "",
-    realName: "",
-    sex: 0,
-    thumb: ""
   },
   },
   barrage:{ 
   barrage:{ 
-    realName:'',
-    martyrId:'',
-    unit:'',
-    content:''
   },
   },
   questionGroup:{ 
   questionGroup:{ 
     answer: [],
     answer: [],
@@ -167,22 +153,18 @@ let formKey = {
     name: ""
     name: ""
   },
   },
   sensitive:{ 
   sensitive:{ 
-    realName:'',
-    martyrId:'',
-    unit:'',
-    content:''
+ 
   }
   }
 }
 }
 
 
 
 
 var checkAnswer = (rule, value, callback) => {
 var checkAnswer = (rule, value, callback) => {
-  console.log(value);
   if (!value) {
   if (!value) {
     return callback(new Error('请添加题目'));
     return callback(new Error('请添加题目'));
   }
   }
   setTimeout(() => {
   setTimeout(() => {
     callback();
     callback();
-  }, 1000);
+  }, 500);
 };
 };
 
 
 let rules = {
 let rules = {

+ 83 - 44
new_backstage/src/pages/content/interaction/edit.vue

@@ -10,16 +10,24 @@
       :status="status"
       :status="status"
       @cancel="backList"
       @cancel="backList"
       @save="save"
       @save="save"
-      @submit="submit({id},type)"
+      @submit="submit({ id }, type)"
       @determine="determine"
       @determine="determine"
     >
     >
       <template slot-scope="{ form }" slot="content">
       <template slot-scope="{ form }" slot="content">
-        <component :data="form" :is="cp"/>
+        <component
+          :data="form"
+          :is="cp"
+          :class="{ disable: status !== 0 && status !== 2 }"
+        />
       </template>
       </template>
     </editcon>
     </editcon>
 
 
-    <editdialog :type="type" :show='showAudit' @close="showAudit=false" :id="id"/>
-
+    <editdialog
+      :type="type"
+      :show="showAudit"
+      @close="showAudit = false"
+      :id="id"
+    />
   </div>
   </div>
 </template>
 </template>
 
 
@@ -32,26 +40,26 @@ import vbarrage from "./componets/barrage";
 import vquestionGroup from "./componets/questionGroup";
 import vquestionGroup from "./componets/questionGroup";
 
 
 import { formKey, rules } from "./data";
 import { formKey, rules } from "./data";
-import {save,getDetail,saveQuestion} from "@/configue/api";
-// import { saveQuestion,updateQuestion,delQuestion } from "@/configue/api";
+import { save, getDetail, saveQuestion } from "@/configue/api";
 
 
+// import { saveQuestion,updateQuestion,delQuestion } from "@/configue/api";
 
 
 export default {
 export default {
   components: {
   components: {
     vcomment,
     vcomment,
     vquestionGroup,
     vquestionGroup,
     vsensitive,
     vsensitive,
-    vbarrage
+    vbarrage,
   },
   },
-   data() {
+  data() {
     let { type, id, status } = this.$route.params;
     let { type, id, status } = this.$route.params;
-    
+
     return {
     return {
       type,
       type,
-      id:String(id),
-      status:Number(status),
-      form: '',
-      showAudit:false
+      id: String(id),
+      status: Number(status),
+      form: "",
+      showAudit: false,
     };
     };
   },
   },
   computed: {
   computed: {
@@ -66,48 +74,79 @@ export default {
     },
     },
   },
   },
   mounted() {
   mounted() {
-    this.getDetail()
+    this.getDetail();
   },
   },
   methods: {
   methods: {
     save() {
     save() {
       this.validate(() => {
       this.validate(() => {
-        
-        saveQuestion(this.form.answer,res=>{
-            save(this.type,{
-              answerIds: res.data.join(','),
+        let flag = true;
+        this.form.answer.forEach((item) => {
+          if(!item.correct){
+            flag = false;
+            return
+          }
+          if (!item.question) {
+            flag = false;
+            return
+          } else {
+            if (item.answer.length < 2) {
+              flag = false;
+              return
+            }
+            item.answer.forEach((sub) => {
+              if (!sub.name) {
+                flag = false;
+                return
+              }
+            });
+          }
+        });
+        if (!flag) {
+          return this.$alert("请完善题目和选项(每道题至少设置两个选项,且设置正确答案)");
+        }
+        saveQuestion(this.form.answer, (res) => {
+          save(
+            this.type,
+            {
+              answerIds: res.data.join(","),
               name: this.form.name,
               name: this.form.name,
               id: this.id == "none" ? null : this.id,
               id: this.id == "none" ? null : this.id,
-            },()=>{
-              this.$alert('添加成功', '提示', {
-                  confirmButtonText: '确定',
-                  callback: () => {
-                    this.backList()
-                  }
-                })
-            })
-        })
+            },
+            () => {
+              this.$alert(`${this.id == "none"?'添加成功':'保存成功'}`, "提示", {
+                confirmButtonText: "确定",
+                callback: () => {
+                  this.backList();
+                },
+              });
+            }
+          );
+        });
       });
       });
     },
     },
 
 
-    async getDetail(){
-      if(this.id == 'none'){
-        this.form = this.cloneObject(formKey[this.type])
-      } else{
-        await getDetail(this.type,{id:this.id},res=>{
-          if (this.type == 'questionGroup') {
-            res.data.answer = res.data.answer.map(item=>{
-              item.answer = JSON.parse(item.answer)
-              return item
-            })
-            this.form = {...res.data.entity,answer:res.data.answer,answerStr:JSON.stringify(res.data.answer)}
+    async getDetail() {
+      if (this.id == "none") {
+        this.form = this.cloneObject(formKey[this.type]);
+      } else {
+        await getDetail(this.type, { id: this.id }, (res) => {
+          if (this.type == "questionGroup") {
+            res.data.answer = res.data.answer.map((item) => {
+              item.answer = JSON.parse(item.answer);
+              return item;
+            });
+            this.form = {
+              ...res.data.entity,
+              answer: res.data.answer,
+              answerStr: JSON.stringify(res.data.answer),
+            };
+          } else {
+            this.form = { ...this.form, ...res.data };
           }
           }
-          else{
-            this.form = {...this.form,...res.data}
-          }
-          this.form['display'] = Boolean(this.form['display'])
-        })
+          this.form["display"] = Boolean(this.form["display"]);
+        });
       }
       }
-    }
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 36 - 9
new_backstage/src/pages/content/interaction/index.vue

@@ -7,7 +7,7 @@
             $route.params.type == 'questionGroup' ||
             $route.params.type == 'questionGroup' ||
               $route.params.type == 'sensitive'
               $route.params.type == 'sensitive'
           "
           "
-          @click="goto({ id: 'none',status: 0 })"
+          @click="addData()"
           type="primary"
           type="primary"
           >新增</el-button
           >新增</el-button
         >
         >
@@ -29,7 +29,7 @@
         <search>
         <search>
           <div slot="content" class="searchslot">
           <div slot="content" class="searchslot">
             <template v-if="$route.params.type != 'sensitive'">
             <template v-if="$route.params.type != 'sensitive'">
-              <span>发布时间:</span>
+              <span>提交时间:</span>
               <el-date-picker
               <el-date-picker
                 v-model="search.date"
                 v-model="search.date"
                 type="daterange"
                 type="daterange"
@@ -39,21 +39,22 @@
                 end-placeholder="结束日期"
                 end-placeholder="结束日期"
               >
               >
               </el-date-picker>
               </el-date-picker>
-              <span>标题:</span>
+              <span>{{keyObj[$route.params.type]}}:</span>
               <el-input
               <el-input
                 class="elInput paddingmore"
                 class="elInput paddingmore"
-                :maxlength="50"
+                :maxlength="25"
                 show-word-limit
                 show-word-limit
                 v-model="search.inputKey"
                 v-model="search.inputKey"
-                placeholder="请输入标题"
+                placeholder="请输入关键字"
+                @keydown.enter.native="getList"
               ></el-input>
               ></el-input>
             </template>
             </template>
 
 
             <template v-else>
             <template v-else>
-              <span>敏感词:</span>
+              <span>{{keyObj[$route.params.type]}}:</span>
               <el-input
               <el-input
                 class="elInput paddingmore"
                 class="elInput paddingmore"
-                :maxlength="50"
+                :maxlength="25"
                 show-word-limit
                 show-word-limit
                 v-model="search.inputKey"
                 v-model="search.inputKey"
                 @keydown.enter.native="getList"
                 @keydown.enter.native="getList"
@@ -89,10 +90,11 @@
               }
               }
             "
             "
             @del="del"
             @del="del"
+            @submit="submit"
             :tableData="list"
             :tableData="list"
           >
           >
             <template slot-scope="{data}" slot="record">
             <template slot-scope="{data}" slot="record">
-              <el-button @click="applyDetail(data,'martyr')" type="text">审核详情</el-button>
+              <el-button @click="applyDetail(data,'questionGroup')" type="text">审核详情</el-button>
             </template>
             </template>
 
 
           </vtable>
           </vtable>
@@ -101,6 +103,8 @@
     </div>
     </div>
 
 
     <vdialog :show="showApplyDetail" @close="showApplyDetail=false" :tableData="alDetail"></vdialog>
     <vdialog :show="showApplyDetail" @close="showApplyDetail=false" :tableData="alDetail"></vdialog>
+    <sensitivedialog :show="showSensitiveDetail" @close="getList(),showSensitiveDetail=false" :form="sensitiveWord"/>
+
 
 
   </div>
   </div>
 </template>
 </template>
@@ -111,11 +115,17 @@ import {raw,menu,menuStr} from "./data";
 import { getList } from "@/configue/api";
 import { getList } from "@/configue/api";
 
 
 import { mapGetters } from "vuex";
 import { mapGetters } from "vuex";
+import sensitivedialog from "./componets/sensitive.vue";
 
 
 export default {
 export default {
+  components:{sensitivedialog},
   data() {
   data() {
     return {
     return {
       showApplyDetail:false,
       showApplyDetail:false,
+      showSensitiveDetail:false,
+      sensitiveWord:{
+        name:''
+      },
       alDetail:{},
       alDetail:{},
       search: {
       search: {
         inputKey: "",
         inputKey: "",
@@ -129,10 +139,27 @@ export default {
         size: 25,
         size: 25,
         pageNum: 1,
         pageNum: 1,
       },
       },
+      keyObj:{
+        'comment':'留言内容',
+        'barrage':'弹幕内容',
+        'questionGroup':'题组标题',
+        'sensitive':'敏感词',
+      }
     };
     };
   },
   },
   
   
   methods: {
   methods: {
+    addData(){
+      if (this.$route.params.type == 'questionGroup') {
+        this.goto({ id: 'none',status: 0 })
+      }
+      else{
+        this.showSensitiveDetail = true
+        this.sensitiveWord= {
+            name:''
+          }
+      }
+    },
     selectStatus(item) {
     selectStatus(item) {
       this.status = item.id;
       this.status = item.id;
     },
     },
@@ -193,5 +220,5 @@ export default {
   },
   },
 };
 };
 </script>
 </script>
-tra
+
 <style lang="less" scoped></style>
 <style lang="less" scoped></style>

+ 2 - 2
new_backstage/src/pages/content/scene/index.vue

@@ -10,7 +10,7 @@
             <span>场景名称:</span>
             <span>场景名称:</span>
             <el-input
             <el-input
               class="elInput paddingmore"
               class="elInput paddingmore"
-              :maxlength="50"
+              :maxlength="25"
               show-word-limit
               show-word-limit
               v-model="search.inputKey"
               v-model="search.inputKey"
               @keydown.enter.native="getList"
               @keydown.enter.native="getList"
@@ -97,7 +97,7 @@ export default {
           pageSize: this.page.size,
           pageSize: this.page.size,
           searchKey: inputKey,
           searchKey: inputKey,
         },
         },
-        url: `scene/list`,
+        url: `cms/scene/list`,
       }).then((res) => {
       }).then((res) => {
         this.list = res.data;
         this.list = res.data;
       });
       });

+ 24 - 14
new_backstage/src/pages/content/study/componets/info.vue

@@ -1,28 +1,28 @@
 <template>
 <template>
   <div>
   <div>
-    <el-form-item label="类型:">
-      <el-radio disabled v-model="radio" label="选中且禁用">知识阅览</el-radio>
-    </el-form-item>
-
-    <el-form-item label="标题:" prop="name">
-      <el-input v-model="form.name"></el-input>
-    </el-form-item>
+    <div :class="{disable:status!==0&&status!==2}">
+      <el-form-item label="类型:">
+        <el-radio disabled v-model="radio" label="选中且禁用">知识阅览</el-radio>
+      </el-form-item>
 
 
-    <el-form-item label="内容简介:" >
-      <el-input v-model="form.description"></el-input>
-    </el-form-item>
+      <el-form-item label="标题:" prop="name">
+        <el-input v-model="form.name" :maxlength="INPUTLENGTH" show-word-limit></el-input>
+      </el-form-item>
 
 
-    <el-form-item label="是否展示:">
-      <el-switch v-model="form.display"> </el-switch>
-    </el-form-item>
+      <el-form-item label="内容简介:" prop="description">
+        <el-input v-model="form.description"  :maxlength="INPUTLENGTH*2" show-word-limit></el-input>
+      </el-form-item>
+    </div>
 
 
-    <el-form-item label="信息正文:">
+    <el-form-item label="信息正文:"  prop="content" class="tttttt">
       <tinymce
       <tinymce
         ref="tinymce"
         ref="tinymce"
         :height="500"
         :height="500"
         :htmlstr="form.content"
         :htmlstr="form.content"
         @blur="handleBlur"
         @blur="handleBlur"
+        v-if="form.status!=3"
       />
       />
+      <div class="showHtml" v-else v-html="form.content"></div>
     </el-form-item>
     </el-form-item>
 
 
   </div>
   </div>
@@ -35,8 +35,11 @@ export default {
   props: ["data",'rule'],
   props: ["data",'rule'],
   components:{Tinymce},
   components:{Tinymce},
   data() {
   data() {
+    let {  status } = this.$route.params;
+
     return {
     return {
       form: this.data,
       form: this.data,
+      status:Number(status),
       radio: "选中且禁用"
       radio: "选中且禁用"
     };
     };
   },
   },
@@ -47,3 +50,10 @@ export default {
   }
   }
 };
 };
 </script>
 </script>
+
+<style lang="less" scoped>
+.tttttt{
+  word-break: break-all!important;
+}
+
+</style>

+ 2 - 7
new_backstage/src/pages/content/study/componets/share.vue

@@ -5,11 +5,11 @@
     </el-form-item>
     </el-form-item>
 
 
     <el-form-item label="标题:" prop="name">
     <el-form-item label="标题:" prop="name">
-      <el-input v-model="form.name"></el-input>
+      <el-input v-model="form.name" :maxlength="INPUTLENGTH" show-word-limit></el-input>
     </el-form-item>
     </el-form-item>
 
 
     <el-form-item label="内容简介:" prop="description">
     <el-form-item label="内容简介:" prop="description">
-      <el-input v-model="form.description"></el-input>
+      <el-input v-model="form.description" :maxlength="INPUTLENGTH*2" show-word-limit></el-input>
     </el-form-item>
     </el-form-item>
 
 
    
    
@@ -18,11 +18,6 @@
         <template slot="prepend">Http://</template>
         <template slot="prepend">Http://</template>
       </el-input>
       </el-input>
     </el-form-item>
     </el-form-item>
-
-    <el-form-item label="是否展示:">
-      <el-switch v-model="form.display"> </el-switch>
-    </el-form-item>
-
   </div>
   </div>
 </template>
 </template>
 
 

+ 5 - 3
new_backstage/src/pages/content/study/data.js

@@ -92,19 +92,21 @@ let formKey = {
     name:'',
     name:'',
     thumb:'',
     thumb:'',
     filePath:'',
     filePath:'',
-    display: true
+    display: false
   },
   },
   share:{ 
   share:{ 
     name:'',
     name:'',
     thumb:'',
     thumb:'',
     filePath:'',
     filePath:'',
-    display: true
+    display: false
   }
   }
 }
 }
 
 
 let rules = {
 let rules = {
   info:{
   info:{
-    name: [{ required: true, message: "请输入标题", trigger: "blur" }]
+    name: [{ required: true, message: "请输入标题", trigger: "blur" }],
+    description: [{ required: true, message: "请输入内容简介", trigger: "blur" }],
+    content: [{ required: true, message: "请输入信息正文", trigger: "blur" }],
   },
   },
   share:{ 
   share:{ 
     name: [{ required: true, message: "请输入标题", trigger: "blur" }],
     name: [{ required: true, message: "请输入标题", trigger: "blur" }],

+ 1 - 1
new_backstage/src/pages/content/study/edit.vue

@@ -14,7 +14,7 @@
       @determine="determine"
       @determine="determine"
     >
     >
       <template slot-scope="{ form }" slot="content">
       <template slot-scope="{ form }" slot="content">
-        <component :data="form" :is="cp" :class="{disable:status!==0&&status!==2}" />
+        <component :data="form" :is="cp" :class="{disable:status!==0&&status!==2&&type=='share'}" />
       </template>
       </template>
     </editcon>
     </editcon>
 
 

+ 7 - 4
new_backstage/src/pages/content/study/index.vue

@@ -18,7 +18,7 @@
         <status :status="status" @select="selectStatus"></status>
         <status :status="status" @select="selectStatus"></status>
         <search>
         <search>
           <div slot="content" class="searchslot">
           <div slot="content" class="searchslot">
-            <span>发布时间:</span>
+            <span>提交时间:</span>
             <el-date-picker
             <el-date-picker
               v-model="search.date"
               v-model="search.date"
               type="daterange"
               type="daterange"
@@ -31,13 +31,15 @@
             <span>标题:</span>
             <span>标题:</span>
             <el-input
             <el-input
               class="elInput paddingmore"
               class="elInput paddingmore"
-              :maxlength="50"
+              :maxlength="25"
               show-word-limit
               show-word-limit
               v-model="search.inputKey"
               v-model="search.inputKey"
               @keydown.enter.native="getList"
               @keydown.enter.native="getList"
-              placeholder="请输入标题"
+              placeholder="请输入关键字"
             ></el-input>
             ></el-input>
             <el-button @click="getList" type="primary">查询</el-button>
             <el-button @click="getList" type="primary">查询</el-button>
+            <el-button @click="search.date='',search.inputKey='',getList()" >重置</el-button>
+
           </div>
           </div>
         </search>
         </search>
         <div class="table">
         <div class="table">
@@ -57,6 +59,7 @@
               }
               }
             "
             "
             @del="del"
             @del="del"
+            @submit="submit"
             :tableData="list"
             :tableData="list"
           >
           >
              <template slot-scope="{data}" slot="record">
              <template slot-scope="{data}" slot="record">
@@ -96,7 +99,7 @@ export default {
       page: {
       page: {
         size: 25,
         size: 25,
         pageNum: 1,
         pageNum: 1,
-      },
+      }
     };
     };
   },
   },
   methods: {
   methods: {

+ 17 - 23
new_backstage/src/pages/content/sweep/componets/martyr.vue

@@ -3,33 +3,27 @@
     <div class="formtop">
     <div class="formtop">
       <div class="left">
       <div class="left">
         <el-form-item label="烈士姓名:" prop="realName">
         <el-form-item label="烈士姓名:" prop="realName">
-          <el-input v-model="form.realName"></el-input>
+          <el-input v-model="form.realName" :maxlength="INPUTLENGTH" show-word-limit></el-input>
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="籍贯:" prop="nativePlace">
         <el-form-item label="籍贯:" prop="nativePlace">
-          <el-input v-model="form.nativePlace"></el-input>
+          <el-input v-model="form.nativePlace" :maxlength="INPUTLENGTH" show-word-limit></el-input>
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="出生日期:" prop="birthday">
         <el-form-item label="出生日期:" prop="birthday">
-          <el-input v-model="form.birthday" class="fadeDom"></el-input>
-          <el-date-picker
-            v-model="form.birthday"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择日期">
-          </el-date-picker>
+          <el-input v-model="form.birthday" :maxlength="INPUTLENGTH" show-word-limit></el-input>
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="牺牲地点:" prop="diePlace">
         <el-form-item label="牺牲地点:" prop="diePlace">
-          <el-input v-model="form.diePlace"></el-input>
+          <el-input v-model="form.diePlace" :maxlength="INPUTLENGTH" show-word-limit></el-input>
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="所获荣誉:" prop="honor">
         <el-form-item label="所获荣誉:" prop="honor">
-          <el-input v-model="form.honor"></el-input>
+          <el-input v-model="form.honor" :maxlength="INPUTLENGTH" show-word-limit></el-input>
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="民族:" prop="nation">
         <el-form-item label="民族:" prop="nation">
-          <el-input v-model="form.nation"></el-input>
+          <el-input v-model="form.nation" :maxlength="INPUTLENGTH" show-word-limit></el-input>
         </el-form-item>
         </el-form-item>
       </div>
       </div>
       <div class="right">
       <div class="right">
@@ -41,17 +35,18 @@
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="政治面貌:" prop="politicsStatus">
         <el-form-item label="政治面貌:" prop="politicsStatus">
-          <el-input v-model="form.politicsStatus"></el-input>
+            <el-select v-model="form.politicsStatus" placeholder="请选择">
+              <el-option
+                v-for="(item,i) in g_political"
+                :key="i"
+                :label="item.val"
+                :value="item.val">
+              </el-option>
+            </el-select>
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="牺牲日期:" prop="dieDay">
         <el-form-item label="牺牲日期:" prop="dieDay">
-          <el-input v-model="form.dieDay" class="fadeDom"></el-input>
-          <el-date-picker
-            v-model="form.dieDay"
-            value-format="yyyy-MM-dd"
-            type="date"
-            placeholder="选择日期">
-          </el-date-picker>
+          <el-input v-model="form.dieDay" :maxlength="INPUTLENGTH" show-word-limit></el-input>
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="照片:">
         <el-form-item label="照片:">
@@ -77,12 +72,11 @@
           type="textarea"
           type="textarea"
           :autosize="{ minRows: 2, maxRows: 4 }"
           :autosize="{ minRows: 2, maxRows: 4 }"
           placeholder="请输入内容"
           placeholder="请输入内容"
+          :maxlength="INPUTLENGTH*4" 
+          show-word-limit
         ></el-input>
         ></el-input>
       </el-form-item>
       </el-form-item>
 
 
-      <el-form-item label="是否展示:">
-        <el-switch v-model="form.display"> </el-switch>
-      </el-form-item>
     </div>
     </div>
   </div>
   </div>
 </template>
 </template>

+ 4 - 3
new_backstage/src/pages/content/sweep/componets/mourn.vue

@@ -1,20 +1,21 @@
 <template>
 <template>
   <div class="disable">
   <div class="disable">
     <el-form-item label="单位名称:">
     <el-form-item label="单位名称:">
-      <el-input v-model="form.unit"></el-input>
+      <el-input v-model="form.unit" :maxlength="INPUTLENGTH" show-word-limit></el-input>
     </el-form-item>
     </el-form-item>
 
 
     <el-form-item label="真实姓名:">
     <el-form-item label="真实姓名:">
-      <el-input v-model="form.realName"></el-input>
+      <el-input v-model="form.realName" :maxlength="INPUTLENGTH" show-word-limit></el-input>
     </el-form-item>
     </el-form-item>
 
 
     <el-form-item label="致敬烈士姓名:">
     <el-form-item label="致敬烈士姓名:">
-      <el-input v-model="form.martyrId"></el-input>
+      <el-input v-model="form.martyrId" :maxlength="INPUTLENGTH" show-word-limit></el-input>
     </el-form-item>
     </el-form-item>
 
 
     <el-form-item label="缅怀内容:" >
     <el-form-item label="缅怀内容:" >
       <el-input v-model="form.content"
       <el-input v-model="form.content"
           type="textarea"
           type="textarea"
+           :maxlength="INPUTLENGTH*4" show-word-limit
           :autosize="{ minRows: 2, maxRows: 4 }"></el-input>
           :autosize="{ minRows: 2, maxRows: 4 }"></el-input>
     </el-form-item>
     </el-form-item>
   </div>
   </div>

+ 1 - 0
new_backstage/src/pages/content/sweep/data.js

@@ -11,6 +11,7 @@ let raw = {
     {
     {
       prop: "thumb",
       prop: "thumb",
       label: "照片",
       label: "照片",
+      default: true
     },
     },
     {
     {
       prop: "visit",
       prop: "visit",

+ 12 - 5
new_backstage/src/pages/content/sweep/index.vue

@@ -2,7 +2,7 @@
   <div>
   <div>
     <main-top>
     <main-top>
       <div slot='con'>
       <div slot='con'>
-        <el-button v-if="$route.params.type == 'martyr'" @click="goto({ id: 'none',status: 0 })" type="primary">新增</el-button>
+        <el-button v-if="$route.params.type == 'martyr'" @click="goto({ id: 'none',status: 0 })" type="primary">登记</el-button>
       </div>
       </div>
     </main-top>
     </main-top>
     <div class="tablecon flexcon" >
     <div class="tablecon flexcon" >
@@ -11,7 +11,7 @@
         <status :status="status" v-if="$route.params.type=='martyr'" @select="selectStatus"></status>
         <status :status="status" v-if="$route.params.type=='martyr'" @select="selectStatus"></status>
         <search>
         <search>
           <div slot="content" class="searchslot">
           <div slot="content" class="searchslot">
-            <span>发布时间:</span>
+            <span>提交时间:</span>
             <el-date-picker
             <el-date-picker
               v-model="search.date"
               v-model="search.date"
               type="daterange"
               type="daterange"
@@ -20,11 +20,13 @@
               start-placeholder="开始日期"
               start-placeholder="开始日期"
               end-placeholder="结束日期">
               end-placeholder="结束日期">
             </el-date-picker>
             </el-date-picker>
-            <span>标题:</span>
-            <el-input class="elInput paddingmore" :maxlength="50"
+            <span>{{keyObj[$route.params.type]}}:</span>
+            <el-input class="elInput paddingmore" :maxlength="25"
               @keydown.enter.native="getList"
               @keydown.enter.native="getList"
-                show-word-limit v-model="search.inputKey" placeholder="请输入标题"></el-input>
+                show-word-limit v-model="search.inputKey" placeholder="请输入关键字"></el-input>
             <el-button @click="getList" type="primary">查询</el-button>
             <el-button @click="getList" type="primary">查询</el-button>
+            <el-button @click="search.date='',search.inputKey='',getList()" >重置</el-button>
+
           </div>
           </div>
         </search>
         </search>
         <div class="table">
         <div class="table">
@@ -36,6 +38,7 @@
           @pagechange="data=>{page.pageNum = data}"
           @pagechange="data=>{page.pageNum = data}"
           @pagesizechange="data=>{page.size = data}"
           @pagesizechange="data=>{page.size = data}"
           @del="del"
           @del="del"
+          @submit="submit"
           :tableData="list">
           :tableData="list">
             <template slot-scope="{data}" slot="record">
             <template slot-scope="{data}" slot="record">
               <el-button @click="applyDetail(data,'martyr')" type="text">审核详情</el-button>
               <el-button @click="applyDetail(data,'martyr')" type="text">审核详情</el-button>
@@ -73,6 +76,10 @@ export default {
       page:{
       page:{
         size:25,
         size:25,
         pageNum:1
         pageNum:1
+      },
+      keyObj:{
+        'martyr':'烈士姓名',
+        'mourn':'缅怀内容'
       }
       }
     }
     }
   },
   },

+ 7 - 2
new_backstage/src/pages/layout/head.vue

@@ -3,14 +3,14 @@
 <div class='header card'>
 <div class='header card'>
   <div class="header-title">
   <div class="header-title">
     <img src="@/assets/img/logo.png" alt="">
     <img src="@/assets/img/logo.png" alt="">
-    <span>新疆生产建设兵团总队</span>
+    <span>中国人民武装警察部队新疆生产建设兵团总部</span>
   </div>
   </div>
   <div class="header-user">
   <div class="header-user">
     <div class="avatars" @click="isShowEdit=true,ran=Math.random()">
     <div class="avatars" @click="isShowEdit=true,ran=Math.random()">
       <img v-if="userInfo.img" :src="userInfo.img" alt="">
       <img v-if="userInfo.img" :src="userInfo.img" alt="">
       <span>{{userInfo.nickName}}</span>
       <span>{{userInfo.nickName}}</span>
     </div>
     </div>
-    <div @click="logout" class="logout"><img src="@/assets/img/logout.png" alt="">退出</div>
+    <div @click="logoutcomfirm" class="logout"><img src="@/assets/img/logout.png" alt="">退出</div>
   </div>
   </div>
 
 
   <usereditdialog :key="ran" @logout="logout(true)" :form="userInfo" :show="isShowEdit" @close="isShowEdit=false"/>
   <usereditdialog :key="ran" @logout="logout(true)" :form="userInfo" :show="isShowEdit" @close="isShowEdit=false"/>
@@ -34,6 +34,11 @@ export default {
   },
   },
   watch: {},
   watch: {},
   methods: {
   methods: {
+    logoutcomfirm(){
+      this.confirm('确定退出登录?',()=>{
+        this.logout()
+      })
+    },
     getDetail(){
     getDetail(){
       getSysDetail('user',{id:this.userId},res=>{
       getSysDetail('user',{id:this.userId},res=>{
           this.userInfo = {...res.data}
           this.userInfo = {...res.data}

+ 6 - 3
new_backstage/src/pages/login/index.vue

@@ -4,13 +4,13 @@
   <div class="layout-con">
   <div class="layout-con">
     <div class="logo">
     <div class="logo">
       <img :src="require('@/assets/img/logo.png')" alt="">
       <img :src="require('@/assets/img/logo.png')" alt="">
-      <span>新疆生产建设兵团总队</span>
+      <span>中国人民武装警察部队新疆生产建设兵团总部</span>
     </div>
     </div>
     <img class="bg" :src="require('@/assets/img/bg.jpg')" alt="">
     <img class="bg" :src="require('@/assets/img/bg.jpg')" alt="">
     <div class="mask"></div>
     <div class="mask"></div>
     <div class="middle">
     <div class="middle">
       <div class="middle-left">
       <div class="middle-left">
-        <div>新疆生产建设兵团总队<br/>管理后台</div>
+        <div>中国人民武装警察部队新疆生产建设兵团总部<br/>管理后台</div>
       </div>
       </div>
       <div class="middle-right">
       <div class="middle-right">
         <el-form class="middle-form" :rules="ruleLogin" status-icon :model="formLogin" ref="formLogin">
         <el-form class="middle-form" :rules="ruleLogin" status-icon :model="formLogin" ref="formLogin">
@@ -32,6 +32,9 @@
 </template>
 </template>
 
 
 <script>
 <script>
+import { encodeStr } from '@/util'
+import { Base64 } from 'js-base64'
+
 export default {
 export default {
   components: {},
   components: {},
   data () {
   data () {
@@ -80,7 +83,7 @@ export default {
       this.$refs[formName].validate((valid) => {
       this.$refs[formName].validate((valid) => {
         let data = {
         let data = {
           userName: this.formLogin.username,
           userName: this.formLogin.username,
-          password: this.formLogin.password,
+          password: encodeStr(Base64.encode(this.formLogin.password)),
           from:'cms'
           from:'cms'
         }
         }
         if (valid) {
         if (valid) {

+ 39 - 32
new_backstage/src/pages/system/role/componets/manage.vue

@@ -1,60 +1,67 @@
 <template>
 <template>
   <div>
   <div>
-   <el-form-item label="权限管理:" >
-     <input class="fadeDom" v-model="form.permission"/>
-      <el-tree show-checkbox
-        :default-expand-all='true'
+    <el-form-item label="权限管理:">
+      <input class="fadeDom" v-model="form.permission" />
+      <el-tree
+        show-checkbox
+        :default-expand-all="true"
         :default-checked-keys="form.resources"
         :default-checked-keys="form.resources"
         node-key="id"
         node-key="id"
         @check="handleCheck"
         @check="handleCheck"
-        @check-change="handleCheckChange" :data="form.permission" :props="defaultProps" @node-click="handleNodeClick">
+        @check-change="handleCheckChange"
+        :data="form.permission"
+        :props="defaultProps"
+        @node-click="handleNodeClick"
+      >
       </el-tree>
       </el-tree>
-  </el-form-item>
-
+    </el-form-item>
   </div>
   </div>
 </template>
 </template>
 
 
 <script>
 <script>
-
 export default {
 export default {
-  props: ["data",'rule'],
+  props: ["data", "rule"],
   data() {
   data() {
-
-    let tmp = []
-    this.data.permission.forEach(item => {
-      item.children&&item.children.forEach(sub=>{
-        sub.children&&sub.children.forEach(son=>{
-          if(son.authority){
-            tmp.push(son.id)
+    let tmp = [];
+    this.data.permission.forEach((item) => {
+      item.children &&
+        item.children.forEach((sub) => {
+          if (sub.children) {
+            sub.children.forEach((son) => {
+              if (son.authority) {
+                tmp.push(son.id);
+              }
+            });
+          } else {
+            if (sub.authority) {
+              tmp.push(sub.id);
+            }
           }
           }
-        })
-      })
+        });
     });
     });
 
 
-    this.data.resources = tmp
+    this.data.resources = tmp;
+
+    console.log(this.data.resources);
 
 
     return {
     return {
       form: this.data,
       form: this.data,
       defaultProps: {
       defaultProps: {
-        children: 'children',
-        label: 'name'
-      }
+        children: "children",
+        label: "name",
+      },
     };
     };
   },
   },
-  methods:{
-    handleCheckChange(){
+  methods: {
+    handleCheckChange() {
       // console.log(data,data1,data2);
       // console.log(data,data1,data2);
       // this.form.content = data
       // this.form.content = data
     },
     },
-    handleNodeClick(){
-
-    },
-    handleCheck(data,data1){
-      this.form.resources = data1.checkedKeys
+    handleNodeClick() {},
+    handleCheck(data, data1) {
+      this.form.resources = data1.checkedKeys;
     },
     },
-    
   },
   },
-  mounted(){
-  }
+  mounted() {},
 };
 };
 </script>
 </script>

+ 1 - 5
new_backstage/src/pages/system/role/componets/share.vue

@@ -5,7 +5,7 @@
     </el-form-item>
     </el-form-item>
 
 
     <el-form-item label="标题:" prop="name">
     <el-form-item label="标题:" prop="name">
-      <el-input v-model="form.name"></el-input>
+      <el-input v-model="form.name" :maxlength="INPUTLENGTH" show-word-limit></el-input>
     </el-form-item>
     </el-form-item>
 
 
     <el-form-item label="内容简介:" prop="description">
     <el-form-item label="内容简介:" prop="description">
@@ -19,10 +19,6 @@
       </el-input>
       </el-input>
     </el-form-item>
     </el-form-item>
 
 
-    <el-form-item label="是否展示:">
-      <el-switch v-model="form.display"> </el-switch>
-    </el-form-item>
-
   </div>
   </div>
 </template>
 </template>
 
 

+ 2 - 1
new_backstage/src/pages/system/role/data.js

@@ -11,13 +11,14 @@ let raw = {
     {
     {
       prop: "count",
       prop: "count",
       label: "成员数量",
       label: "成员数量",
+      canEdit: true
     },
     },
     {
     {
       prop: "createTime",
       prop: "createTime",
       label: "添加时间",
       label: "添加时间",
     },
     },
     {
     {
-      prop: "isDisable",
+      prop: "isEnabled",
       label: "是否启用"
       label: "是否启用"
     },
     },
   ]
   ]

+ 2 - 1
new_backstage/src/pages/system/role/edit/dialog.vue

@@ -6,7 +6,7 @@
         :label-width="formLabelWidth"
         :label-width="formLabelWidth"
         prop="roleName"
         prop="roleName"
       >
       >
-        <el-input placeholder="请输入角色名称" v-model="form.roleName">
+        <el-input placeholder="请输入角色名称" v-model="form.roleName" :maxlength="INPUTLENGTH" show-word-limit>
         </el-input>
         </el-input>
       </el-form-item>
       </el-form-item>
       <el-form-item
       <el-form-item
@@ -18,6 +18,7 @@
           type="textarea"
           type="textarea"
           :autosize="{ minRows: 2, maxRows: 4 }"
           :autosize="{ minRows: 2, maxRows: 4 }"
           placeholder="请输入职能描述"
           placeholder="请输入职能描述"
+          :maxlength="INPUTLENGTH*2" show-word-limit
           v-model="form.roleDesc"
           v-model="form.roleDesc"
         >
         >
         </el-input>
         </el-input>

+ 13 - 5
new_backstage/src/pages/system/role/index.vue

@@ -14,13 +14,15 @@
             <span>角色名称:</span>
             <span>角色名称:</span>
             <el-input
             <el-input
               class="elInput paddingmore"
               class="elInput paddingmore"
-              :maxlength="50"
+              :maxlength="25"
               show-word-limit
               show-word-limit
               @keydown.enter.native="getList"
               @keydown.enter.native="getList"
               v-model="search.inputKey"
               v-model="search.inputKey"
               placeholder="请输入角色名称"
               placeholder="请输入角色名称"
             ></el-input>
             ></el-input>
             <el-button @click="getList" type="primary">查询</el-button>
             <el-button @click="getList" type="primary">查询</el-button>
+            <el-button @click="search.inputKey='',getList()" >重置</el-button>
+
           </div>
           </div>
         </search>
         </search>
         <div class="table">
         <div class="table">
@@ -40,6 +42,9 @@
             "
             "
             :tableData="list"
             :tableData="list"
           >
           >
+            <template slot-scope="{data}" slot="count">
+              <el-button @click="gtoUser(data)" type="text">{{data.count}}</el-button>
+            </template>
             <template slot-data="data" slot="record">
             <template slot-data="data" slot="record">
               <el-button type="text">审核详情</el-button>
               <el-button type="text">审核详情</el-button>
             </template>
             </template>
@@ -66,7 +71,7 @@
 import vdialog from "./edit/dialog.vue";
 import vdialog from "./edit/dialog.vue";
 
 
 import { raw } from "./data";
 import { raw } from "./data";
-import { getSysList, delSys } from "@/configue/api";
+import { getSysList, delSysSingle } from "@/configue/api";
 
 
 import { mapGetters } from "vuex";
 import { mapGetters } from "vuex";
 
 
@@ -93,7 +98,7 @@ export default {
   methods: {
   methods: {
     handleDialogClose(data){
     handleDialogClose(data){
       this.showRoleDetail = false
       this.showRoleDetail = false
-      data&&this.getSysList()
+      data&&this.getList()
     },
     },
     gotoEdit(item) {
     gotoEdit(item) {
       let { type } = this.$route.params;
       let { type } = this.$route.params;
@@ -102,9 +107,9 @@ export default {
         params: { id: item.id, type: type },
         params: { id: item.id, type: type },
       });
       });
     },
     },
-    del(item) {
+    delSys(item) {
       this.confirm("删除后,信息将无法恢复,是否继续?", () => {
       this.confirm("删除后,信息将无法恢复,是否继续?", () => {
-        delSys(
+        delSysSingle(
           "role",
           "role",
           {
           {
             id: item.id,
             id: item.id,
@@ -138,6 +143,9 @@ export default {
     openDilog(item=null){
     openDilog(item=null){
       this.showRoleDetail = true,
       this.showRoleDetail = true,
       this.currentForm = item?item:{}
       this.currentForm = item?item:{}
+    },
+    gtoUser(item){
+      this.$router.push({path:'/user/manage',query:{roleId:item.id}})
     }
     }
   },
   },
   computed: {
   computed: {

+ 9 - 9
new_backstage/src/pages/system/user/componets/manage.vue

@@ -2,24 +2,24 @@
   <div class="formcon">
   <div class="formcon">
     <div class="formtop">
     <div class="formtop">
       <div class="left">
       <div class="left">
-        <el-form-item label="用户身份码:" prop="userName">
-          <el-input :disabled="id!='none'" v-model="form.userName"></el-input>
+        <el-form-item label="身份码:" prop="userName">
+          <el-input :disabled="id!='none'" :maxlength="INPUTLENGTH" show-word-limit v-model="form.userName"></el-input>
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="用户昵称:" prop="nickName">
         <el-form-item label="用户昵称:" prop="nickName">
-          <el-input v-model="form.nickName"></el-input>
+          <el-input v-model="form.nickName" :maxlength="INPUTLENGTH" show-word-limit></el-input>
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="单位名称:" prop="unit">
         <el-form-item label="单位名称:" prop="unit">
-          <el-input v-model="form.unit"></el-input>
+          <el-input v-model="form.unit" :maxlength="INPUTLENGTH" show-word-limit></el-input>
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="联系电话:" prop="phone">
         <el-form-item label="联系电话:" prop="phone">
-          <el-input v-model="form.phone"></el-input>
+          <el-input maxlength="11" show-word-limit v-model.number="form.phone"></el-input>
         </el-form-item>
         </el-form-item>
 
 
-        <el-form-item label="是否启用:">
-          <el-switch v-model="form.isDisable"> </el-switch>
+        <el-form-item label="是否启用:" v-if="form.roleKey!='sys_admin'">
+          <el-switch v-model="form.isEnabled" > </el-switch>
         </el-form-item>
         </el-form-item>
       </div>
       </div>
       <div class="right">
       <div class="right">
@@ -36,11 +36,11 @@
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="真实姓名:" prop="realName">
         <el-form-item label="真实姓名:" prop="realName">
-          <el-input v-model="form.realName"></el-input>
+          <el-input v-model="form.realName" :maxlength="INPUTLENGTH" show-word-limit></el-input>
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="通讯地址:" prop="address">
         <el-form-item label="通讯地址:" prop="address">
-          <el-input v-model="form.address"></el-input>
+          <el-input v-model="form.address" :maxlength="INPUTLENGTH" show-word-limit></el-input>
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="性别:" prop="sex">
         <el-form-item label="性别:" prop="sex">

+ 6 - 2
new_backstage/src/pages/system/user/data.js

@@ -13,6 +13,10 @@ let raw = {
       label: "用户昵称",
       label: "用户昵称",
     },
     },
     {
     {
+      prop: "roleName",
+      label: "用户角色",
+    },
+    {
       prop: "realName",
       prop: "realName",
       label: "真实姓名",
       label: "真实姓名",
     },
     },
@@ -37,7 +41,7 @@ let raw = {
       label: "注册时间",
       label: "注册时间",
     },
     },
     {
     {
-      prop: "isDisable",
+      prop: "isEnabled",
       label: "启用状态"
       label: "启用状态"
     },
     },
   ]
   ]
@@ -61,7 +65,7 @@ let formKey = {
 
 
 let rules = {
 let rules = {
   manage:{
   manage:{
-    userName: [{ required: true, message: "请输入用户身份码", trigger: "blur" }],
+    userName: [{ required: true, message: "请输入身份码", trigger: "blur" }],
     nickName: [{ required: true, message: "请输入用户昵称", trigger: "blur" }],
     nickName: [{ required: true, message: "请输入用户昵称", trigger: "blur" }],
     unit: [{ required: true, message: "请输入单位名称", trigger: "blur" }],
     unit: [{ required: true, message: "请输入单位名称", trigger: "blur" }],
     roleId: [{ required: true, message: "请选择用户角色", trigger: "change" }],
     roleId: [{ required: true, message: "请选择用户角色", trigger: "change" }],

+ 6 - 11
new_backstage/src/pages/system/user/edit.vue

@@ -21,7 +21,7 @@
 import vmanage from "./componets/manage";
 import vmanage from "./componets/manage";
 
 
 import { formKey, rules } from "./data";
 import { formKey, rules } from "./data";
-import {saveSys,getSysList,getSysDetail} from "@/configue/api";
+import {saveSys,getRoleList,getSysDetail} from "@/configue/api";
 
 
 export default {
 export default {
   components: {
   components: {
@@ -95,10 +95,10 @@ export default {
           "userName": "",
           "userName": "",
           "id": this.id=='none'?null :this.id,
           "id": this.id=='none'?null :this.id,
           ...this.form,
           ...this.form,
-          isDisable:Number(this.form.isDisable)
+          isEnabled:Number(this.form.isEnabled)
         }
         }
         saveSys(this.val,params,()=>{
         saveSys(this.val,params,()=>{
-          this.$alert('编辑成功', '提示', {
+          this.$alert('编辑成功(默认密码123456)', '提示', {
               confirmButtonText: '确定',
               confirmButtonText: '确定',
               callback: () => {
               callback: () => {
                 this.backList()
                 this.backList()
@@ -109,14 +109,9 @@ export default {
     },
     },
 
 
     getRoleList() {
     getRoleList() {
-      getSysList(
-        "role",
-        {
-          pageNum: 0,
-          pageSize: 10000,
-        },
+      getRoleList(
         (data) => {
         (data) => {
-          this.roleList = data.data.list;
+          this.roleList = data.data;
         }
         }
       );
       );
     },
     },
@@ -126,7 +121,7 @@ export default {
         this.form = this.cloneObject(formKey[this.$route.params.type])
         this.form = this.cloneObject(formKey[this.$route.params.type])
       } else{
       } else{
         await getSysDetail(this.val,{id:this.id},res=>{
         await getSysDetail(this.val,{id:this.id},res=>{
-          this.form = {...this.form,...res.data}
+          this.form = {...this.form,...res.data,isEnabled:Boolean(res.data.isEnabled)}
         })
         })
       }
       }
 
 

+ 39 - 5
new_backstage/src/pages/system/user/index.vue

@@ -11,7 +11,7 @@
       <div class="tablebody">
       <div class="tablebody">
         <search>
         <search>
           <div slot="content" class="searchslot">
           <div slot="content" class="searchslot">
-            <span>发布时间:</span>
+            <span>提交时间:</span>
             <el-date-picker
             <el-date-picker
               v-model="search.date"
               v-model="search.date"
               type="daterange"
               type="daterange"
@@ -24,13 +24,25 @@
             <span>标题:</span>
             <span>标题:</span>
             <el-input
             <el-input
               class="elInput paddingmore"
               class="elInput paddingmore"
-              :maxlength="50"
+              :maxlength="25"
               show-word-limit
               show-word-limit
               @keydown.enter.native="getList"
               @keydown.enter.native="getList"
               v-model="search.inputKey"
               v-model="search.inputKey"
-              placeholder="请输入场景名称"
+              placeholder="请输入真实姓名"
             ></el-input>
             ></el-input>
+
+            <span>用户角色:</span>
+            <el-select v-model="search.roleId" placeholder="请选择">
+              <el-option label="全部"  value="" key=""></el-option>
+              <el-option
+                v-for="item in rolelist"
+                :key="item.roleName"
+                :label="item.roleName"
+                :value="item.id">
+              </el-option>
+            </el-select>
             <el-button @click="getList" type="primary">查询</el-button>
             <el-button @click="getList" type="primary">查询</el-button>
+            <el-button @click="search.date='',search.roleId='',search.inputKey='',getList()" >重置</el-button>
           </div>
           </div>
         </search>
         </search>
         <div class="table">
         <div class="table">
@@ -76,6 +88,7 @@ export default {
         inputKey: "",
         inputKey: "",
         date: "",
         date: "",
         state: "",
         state: "",
+        roleId:''
       },
       },
       type:'user',
       type:'user',
       list: {},
       list: {},
@@ -83,6 +96,7 @@ export default {
         size: 25,
         size: 25,
         pageNum: 1,
         pageNum: 1,
       },
       },
+      rolelist:[]
     };
     };
   },
   },
   methods: {
   methods: {
@@ -114,14 +128,27 @@ export default {
         }}
         }}
       )
       )
     },
     },
+    getRoleList() {
+      getSysList(
+        "role",
+        {
+          pageNum: 1,
+          pageSize: 1000,
+        },
+        (data) => {
+          this.rolelist = data.data.list;
+        }
+      );
+    },
     getList() {
     getList() {
-      let { inputKey } = this.search;
+      let { inputKey,roleId } = this.search;
       getSysList(
       getSysList(
         this.type,
         this.type,
         {
         {
           pageNum: this.page.pageNum,
           pageNum: this.page.pageNum,
           pageSize: this.page.size,
           pageSize: this.page.size,
-          searchKey: inputKey
+          searchKey: inputKey,
+          roleId
         },
         },
         (data) => {
         (data) => {
           this.list = data.data;
           this.list = data.data;
@@ -144,8 +171,15 @@ export default {
         this.getList();
         this.getList();
       },
       },
     },
     },
+    '$route.query.roleId':{
+      immediate:true,
+      handler: function (newVal) {
+        newVal && (this.search.roleId = Number(newVal))
+      }
+    }
   },
   },
   mounted() {
   mounted() {
+    this.getRoleList()
     this.getList();
     this.getList();
   },
   },
 };
 };

+ 1 - 1
new_backstage/src/pages/system/worklog/index.vue

@@ -20,7 +20,7 @@
             <span>操作人员:</span>
             <span>操作人员:</span>
             <el-input
             <el-input
               class="elInput paddingmore"
               class="elInput paddingmore"
-              :maxlength="50"
+              :maxlength="25"
               show-word-limit
               show-word-limit
               @keydown.enter.native="getList"
               @keydown.enter.native="getList"
               v-model="search.inputKey"
               v-model="search.inputKey"

+ 154 - 0
new_backstage/src/util/file.js

@@ -0,0 +1,154 @@
+// 媒体名称
+export const mediaTypes = {
+    "image": '图片',
+    "video": "视频",
+    "audio": "音频"
+}
+
+// 媒体扩展类型
+export const mediaMimes = {
+    "image": ["jpg", "png", "jpeg", "bmp", "gif"],
+    "audio": ["mp3", "aac", "ogg", "wav" /* , "m4a" */],
+    "video": ["mp4", "mov", "quicktime" /* ,"webm", "rmvb", "wmv" */] //ios:mov
+}
+
+// 媒体大小显示(MB)
+export const mediaMaxSize = {
+    "image": 10,
+    "video": 20,
+    "audio": 5
+}
+
+/**
+ * 获取媒体扩展类型
+ * @param {Stirng} filename 文件名称
+ */
+export const getMime = filename => {
+    if (!filename || filename.indexOf('.') === -1) {
+        return ''
+    }
+
+    return filename.split('.').pop().toLowerCase()
+}
+
+/**
+ * 在路径中获取文件名
+ * @param {*} path 
+ */
+export const getFilename = path => {
+    const segment = (path || '').split('/')
+    return segment[segment.length - 1]
+}
+
+
+
+/**
+ * 检测媒体文件是否超过预设限制
+ * @param {String} type 媒体类型
+ * @param {Number} size 文件大小
+ */
+export const checkSizeLimit = (type, size) => {
+
+    size = size / 1024 / 1024
+
+    return size <= mediaMaxSize[type]
+}
+
+export const checkSizeLimitFree = (size, limit) => {
+
+    size = size / 1024 / 1024
+
+    return size <= limit
+}
+
+/**
+ * 检测媒体类型
+ * @param {String} type 媒体类型
+ * @param {String} filename 文件名称
+ */
+export const checkMediaMime = (type, filename) => {
+    const mime = getMime(filename)
+    const find = mediaMimes[type]
+    if (!find) {
+        return false
+    }
+
+    return find.indexOf(mime) !== -1
+}
+
+export const base64ToBlob = base64 => {
+    let arr = base64.split(','),
+        mime = arr[0].match(/:(.*?);/)[1],
+        bstr = atob(arr[1]),
+        n = bstr.length,
+        u8arr = new Uint8Array(n);
+    while (n--) {
+        u8arr[n] = bstr.charCodeAt(n);
+    }
+    return new Blob([u8arr], { type: mime });
+}
+
+export const base64ToDataURL = base64 => {
+    return window.URL.createObjectURL(base64ToBlob(base64));
+}
+
+export const blobToBase64 = function (blob) {
+    return new Promise(resolve => {
+        var reader = new FileReader();
+        reader.onload = function () {
+            resolve(reader.result);
+        };
+        reader.readAsDataURL(blob);
+    })
+};
+
+/**
+ * 获取图片文件尺寸
+ * @param {*} file 
+ */
+export const getImgWH = (data) => {
+    let file = data.file
+
+    return new Promise((resolve) => {
+        var reader = new FileReader();
+        //读取图片文件
+        reader.readAsDataURL(file);
+        reader.onload = function (e) {
+            //初始化JavaScript图片对象
+            var image = new Image();
+            //FileReader获得Base64字符串
+            image.src = e.target.result;
+            image.onload = function () {
+                //获得图片高宽
+                var height = this.height;
+                var width = this.width;
+                resolve({
+                    WH: {
+                        height,
+                        width
+                    },
+                    list:data.list,
+                    file
+                })
+            };
+        }
+    })
+
+
+}
+
+
+/**
+ * 转化字节单位
+ * @param {*} file 
+ */
+export const changeByteUnit = (x) => {
+    const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
+    let l = 0, n = parseInt(x, 10) || 0;
+
+    while (n >= 1024 && ++l) {
+        n = n / 1024;
+    }
+    return (n.toFixed(n < 10 && l > 0 ? 2 : 0) + units[l]);
+
+}

+ 17 - 21
new_backstage/src/util/index.js

@@ -176,27 +176,6 @@ module.exports = {
     );
     );
   },
   },
 
 
-  encodeStr: function(str, strv = "") {
-    const NUM = 2;
-    const front = randomWord(false, 8);
-    const middle = randomWord(false, 8);
-    const end = randomWord(false, 8);
-
-    let str1 = str.substring(0, NUM);
-    let str2 = str.substring(NUM);
-
-    if (strv) {
-      let strv1 = strv.substring(0, NUM);
-      let strv2 = strv.substring(NUM);
-      return [
-        front + str2 + middle + str1 + end,
-        front + strv2 + middle + strv1 + end,
-      ];
-    }
-
-    return front + str2 + middle + str1 + end;
-  },
-
   isImage: function(fileName) {
   isImage: function(fileName) {
     if (typeof fileName !== "string") return;
     if (typeof fileName !== "string") return;
     let name = fileName.toLowerCase();
     let name = fileName.toLowerCase();
@@ -247,5 +226,22 @@ module.exports = {
   },
   },
   isNull(arg1) {
   isNull(arg1) {
     return !arg1 && arg1 !== 0 && typeof arg1 !== "boolean" ? true : false;
     return !arg1 && arg1 !== 0 && typeof arg1 !== "boolean" ? true : false;
+  },
+  encodeStr: function (str, strv = '') {
+    const NUM = 2
+    const front = randomWord(false, 8)
+    const middle = randomWord(false, 8)
+    const end = randomWord(false, 8)
+
+    let str1 = str.substring(0, NUM)
+    let str2 = str.substring(NUM)
+
+    if (strv) {
+      let strv1 = strv.substring(0, NUM)
+      let strv2 = strv.substring(NUM)
+      return [front + str2 + middle + str1 + end, front + strv2 + middle + strv1 + end]
+    }
+
+    return front + str2 + middle + str1 + end
   }
   }
 };
 };

+ 7 - 2
web/.eslintrc.js

@@ -11,7 +11,12 @@ module.exports = {
     parser: 'babel-eslint'
     parser: 'babel-eslint'
   },
   },
   rules: {
   rules: {
-    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
-    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
+    'no-console': process.env.NODE_ENV === 'production' ? 'off' : 'off',
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'off' : 'off',
+    'no-undef': 'off',
+    'vue/no-unused-vars': 'off',
+    'vue/require-v-for-key': 'off',
+    'no-unused-vars': 'off',
+    'vue/no-unused-components': 'off'
   }
   }
 }
 }

+ 5 - 2
web/package.json

@@ -10,10 +10,13 @@
   "dependencies": {
   "dependencies": {
     "axios": "^0.19.2",
     "axios": "^0.19.2",
     "core-js": "^3.6.5",
     "core-js": "^3.6.5",
-    "swiper": "^6.1.1",
+    "js-base64": "^3.6.1",
     "vue": "^2.6.11",
     "vue": "^2.6.11",
-    "vue-awesome-swiper": "^4.1.1",
+    "vue-chat-scroll": "^1.4.0",
     "vue-router": "^3.2.0",
     "vue-router": "^3.2.0",
+    "swiper": "^5.3.8",
+    "v-viewer": "^1.6.4",
+    "vue-awesome-swiper": "^4.1.1",
     "vuex": "^3.5.1"
     "vuex": "^3.5.1"
   },
   },
   "devDependencies": {
   "devDependencies": {

+ 2 - 2
web/public/index.html

@@ -24,8 +24,8 @@
     <script src="<%= VUE_APP_STATIC_DIR %>/js/myShow.js"></script>
     <script src="<%= VUE_APP_STATIC_DIR %>/js/myShow.js"></script>
     <script src="<%= VUE_APP_STATIC_DIR %>/js/overlay.js"></script>
     <script src="<%= VUE_APP_STATIC_DIR %>/js/overlay.js"></script>
     <script src="<%= VUE_APP_STATIC_DIR %>/js/main_2020_show.js"></script>
     <script src="<%= VUE_APP_STATIC_DIR %>/js/main_2020_show.js"></script>
-    <script src="<%= VUE_APP_STATIC_DIR %>/js/CAD/bundle.js"></script>
-    <script src="<%= VUE_APP_STATIC_DIR %>/js/CAD/loadCAD.js"></script>
+    <!-- <script src="<%= VUE_APP_STATIC_DIR %>/js/CAD/bundle.js"></script>
+    <script src="<%= VUE_APP_STATIC_DIR %>/js/CAD/loadCAD.js"></script> -->
     <div id="app"></div>
     <div id="app"></div>
   </body>
   </body>
 </html>
 </html>

+ 11 - 9
web/public/static/js/main_2020_show.js

@@ -1,3 +1,5 @@
+window.hadLoad = false
+
 window.loadMainJs = ()=>{
 window.loadMainJs = ()=>{
     /* 许钟文修改的  标记 xzw    
     /* 许钟文修改的  标记 xzw    
     另外 	所有"matter"字样已被我删除				原因:删除matterport信息
     另外 	所有"matter"字样已被我删除				原因:删除matterport信息
@@ -3389,8 +3391,8 @@ window.loadMainJs = ()=>{
                 e.addEventListener("pointerup", this.onPointerUp.bind(this)),
                 e.addEventListener("pointerup", this.onPointerUp.bind(this)),
                 e.addEventListener("pointerout", this.onPointerCancel.bind(this)),
                 e.addEventListener("pointerout", this.onPointerCancel.bind(this)),
                 e.addEventListener("pointercancel", this.onPointerCancel.bind(this)),
                 e.addEventListener("pointercancel", this.onPointerCancel.bind(this)),
-                document.addEventListener("keydown", this.onKeyDown.bind(this)),
-                document.addEventListener("keyup", this.onKeyUp.bind(this)),
+                !window.hadLoad&&document.addEventListener("keydown", this.onKeyDown.bind(this)),
+                !window.hadLoad&&document.addEventListener("keyup", this.onKeyUp.bind(this)),
                 t.on(d.ActiveModelChanged, function(e) {
                 t.on(d.ActiveModelChanged, function(e) {
                     this.setModelForControls(e.model)
                     this.setModelForControls(e.model)
                 }
                 }
@@ -6889,7 +6891,7 @@ window.loadMainJs = ()=>{
                     var i = Q.pageTitle;
                     var i = Q.pageTitle;
                     // 2 !== K.valueFromHash("mls", 0) && (i = e.name + " - " + i),
                     // 2 !== K.valueFromHash("mls", 0) && (i = e.name + " - " + i),
                     2 !== K.valueFromHash("mls", 0) && e.name && (i = e.name),
                     2 !== K.valueFromHash("mls", 0) && e.name && (i = e.name),
-                    document.title = i ,
+                    // document.title = i ,
                     K.isMobile() ? $("#gui-fullscreen").css("display", "none") : ($("[rel=tooltip]").tooltip({
                     K.isMobile() ? $("#gui-fullscreen").css("display", "none") : ($("[rel=tooltip]").tooltip({
                         delay: {
                         delay: {
                             show: 50,
                             show: 50,
@@ -7051,7 +7053,7 @@ window.loadMainJs = ()=>{
                                 a.removeClass("active recent");
                                 a.removeClass("active recent");
                         o(t, i)
                         o(t, i)
                     }),
                     }),
-                    document.addEventListener("keydown", function(n) {
+                    !window.hadLoad&&document.addEventListener("keydown", function(n) {
                         switch (J.updateInteraction(Se.InteractionKey),
                         switch (J.updateInteraction(Se.InteractionKey),
                         n.which) {
                         n.which) {
                         case we.ZERO:
                         case we.ZERO:
@@ -7108,7 +7110,7 @@ window.loadMainJs = ()=>{
                         !0
                         !0
                     }
                     }
                     .bind(this)),
                     .bind(this)),
-                    document.addEventListener("keyup", function(e) {
+                    !window.hadLoad&&document.addEventListener("keyup", function(e) {
                         switch (e.which) {
                         switch (e.which) {
                         case we.PLUSEQUALS:
                         case we.PLUSEQUALS:
                             t.player.deactivatePersistentZooming();
                             t.player.deactivatePersistentZooming();
@@ -9008,7 +9010,7 @@ window.loadMainJs = ()=>{
                     }),
                     }),
                     $("#drawer img").on(e, a)
                     $("#drawer img").on(e, a)
                 }),
                 }),
-                document.addEventListener("keydown", u.bind(this, !1), !0),
+                !window.hadLoad&&document.addEventListener("keydown", u.bind(this, !1), !0),
                 C.on(v.TourStart, function() {
                 C.on(v.TourStart, function() {
                     E.classList.add("playing")
                     E.classList.add("playing")
                 })
                 })
@@ -22108,13 +22110,13 @@ window.loadMainJs = ()=>{
                     e.addEventListener("pointerup", this.onPointerUp.bind(this)),
                     e.addEventListener("pointerup", this.onPointerUp.bind(this)),
                     e.addEventListener("pointerout", this.onPointerOut.bind(this)),
                     e.addEventListener("pointerout", this.onPointerOut.bind(this)),
                     e.addEventListener("pointercancel", this.onPointerCancel.bind(this)),
                     e.addEventListener("pointercancel", this.onPointerCancel.bind(this)),
-                    document.addEventListener("keydown", this.onKeyDown.bind(this)),
+                    (!window.hadLoad&&document.addEventListener("keydown", this.onKeyDown.bind(this))),
                     this.cameraControls.on(_.Move, this.handleControlMove.bind(this)),
                     this.cameraControls.on(_.Move, this.handleControlMove.bind(this)),
                     this.cameraControls.on(_.InputStart, this.handleControlInputStart.bind(this)),
                     this.cameraControls.on(_.InputStart, this.handleControlInputStart.bind(this)),
                     this.cameraControls.on(_.Pinch, this.handleControlPinch.bind(this)),
                     this.cameraControls.on(_.Pinch, this.handleControlPinch.bind(this)),
                     this.cameraControls.on(_.Scroll, this.handleControlScroll.bind(this)),
                     this.cameraControls.on(_.Scroll, this.handleControlScroll.bind(this)),
-                    window.addEventListener("snapshotBegin", this.getWrapShot.bind(this)),//xzw add
-                    window.addEventListener("tourAudioEnded", this.changeMusic.bind(this));//xzw add
+                    (!window.hadLoad&&window.addEventListener("snapshotBegin", this.getWrapShot.bind(this))),//xzw add
+                    (!window.hadLoad&&window.addEventListener("tourAudioEnded", this.changeMusic.bind(this)));//xzw add
                     
                     
                     // lzb
                     // lzb
                     window.getSeft && getSeft(this);
                     window.getSeft && getSeft(this);

+ 6 - 8
web/public/static/js/manage.js

@@ -114,13 +114,9 @@ Manage.prototype.loadAudio = function() {
   g_bgAudio.oncanplay = () => {
   g_bgAudio.oncanplay = () => {
     this.switchBgmState(true);
     this.switchBgmState(true);
   };
   };
-  document.addEventListener(
-    "WeixinJSBridgeReady",
-    () => {
-      this.switchBgmState(true);
-    },
-    false
-  );
+
+  document.removeEventListener("WeixinJSBridgeReady", play);
+  document.addEventListener("WeixinJSBridgeReady",play);
 
 
   document.addEventListener("touchstart", play); //ios需要加个事件才能播放 不能自动播放;如果还有浏览器不行,换成别的交互事件
   document.addEventListener("touchstart", play); //ios需要加个事件才能播放 不能自动播放;如果还有浏览器不行,换成别的交互事件
   document.addEventListener("click", play);
   document.addEventListener("click", play);
@@ -221,5 +217,7 @@ function randomTime() {
 }
 }
 
 
 window.loadMange = () => {
 window.loadMange = () => {
-  window.manage = new Manage();
+  if (!window.manage) {
+    window.manage =  new Manage();
+  }
 };
 };

+ 16 - 11
web/src/App.vue

@@ -39,17 +39,20 @@ export default {
       document.getElementById('app').className = 'theme2'
       document.getElementById('app').className = 'theme2'
     }
     }
   },
   },
-  watch:{
-    '$route.name':{
-      deep:true,
-        handler:function (newVal) {
-          if (newVal != 'scene') {
-            window.player&&window.player.sceneRenderer.suspend()
-            window.player = ''
-          }
-        }
-    }
-  },
+  // watch:{
+  //   '$route.name':{
+  //       deep:true,
+  //       handler:function (newVal) {
+  //         if (newVal != 'scene') {
+  //           if (window.player) {
+  //             window.player.sceneRenderer.suspend()
+  //             window.player.removeAllListeners()
+  //             window.player = ''
+  //           }
+  //         }
+  //       }
+  //   }
+  // },
   mounted(){
   mounted(){
     this.tips = whatBrowser()
     this.tips = whatBrowser()
     if(broswer.trident){
     if(broswer.trident){
@@ -82,6 +85,8 @@ export default {
 #app {
 #app {
   text-align: center;
   text-align: center;
   color: #2c3e50;
   color: #2c3e50;
+  width: 100%;
+  height: 100%;
 }
 }
 
 
 .banbentips{
 .banbentips{

二進制
web/src/assets/images/btnlist/bgm.png


二進制
web/src/assets/images/btnlist/comment.png


二進制
web/src/assets/images/btnlist/game.png


二進制
web/src/assets/images/btnlist/like.png


二進制
web/src/assets/images/btnlist/question.png


二進制
web/src/assets/images/btnlist/新疆军史管-78.png


二進制
web/src/assets/images/btnlist/新疆军史管-79.png


二進制
web/src/assets/images/btnlist/新疆军史管-80.png


二進制
web/src/assets/images/btnlist/新疆军史管-82.png


二進制
web/src/assets/images/btnlist/新疆军史管-83.png


二進制
web/src/assets/images/btnlist/新疆军史管-84.png


二進制
web/src/assets/images/btnlist/新疆军史管-86.png


二進制
web/src/assets/images/btnlist/新疆军史管-87.png


二進制
web/src/assets/images/btnlist/新疆军史管-88.png


二進制
web/src/assets/images/btnlist/新疆军史管-90.png


二進制
web/src/assets/images/btnlist/新疆军史管-91.png


二進制
web/src/assets/images/btnlist/新疆军史管-92.png


二進制
web/src/assets/images/btnlist/新疆军史管-94.png


二進制
web/src/assets/images/btnlist/新疆军史管-95.png


二進制
web/src/assets/images/btnlist/新疆军史管-96.png


二進制
web/src/assets/images/crosshair.cur


二進制
web/src/assets/images/icon/iPhone 12、12 Pro – 1_slices/3D模型模式按钮@2x.png


+ 0 - 0
web/src/assets/images/icon/iPhone 12、12 Pro – 1_slices/3D模型模式按钮(选择)@2x.png


部分文件因文件數量過多而無法顯示