detailView.jsp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags"%>
  4. <%@ page isELIgnored="false"%>
  5. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  6. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
  7. <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
  8. <!DOCTYPE html>
  9. <html>
  10. <head>
  11. <meta charset="utf-8" />
  12. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  13. <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
  14. <title>项目信息</title>
  15. </head>
  16. <jsp:include page="../../common/common-meta-include.jsp"></jsp:include>
  17. <jsp:include page="../../common/common-js-include.jsp"></jsp:include>
  18. <jsp:include page="../../common/common-css-include.jsp"></jsp:include>
  19. <style>
  20. .project-title{
  21. width:100%;
  22. margin:17px 0;
  23. font-weight: 500;
  24. font-size: 27px;
  25. color: #333333;
  26. text-align:center;
  27. }
  28. .project-status{
  29. display:flex;
  30. align-items:center;
  31. justify-content:center;
  32. width:100%;
  33. height: 45px;
  34. font-weight: 400;
  35. font-size: 14px;
  36. color: #333333;
  37. background: rgba(28,86,163,0.05);
  38. }
  39. .project-status-light img{
  40. margin-left:5px;
  41. margin-right:5px;
  42. }
  43. .project-status-offset,
  44. .project-status-info{
  45. height:14px;
  46. margin-left:10px;
  47. padding-left:10px;
  48. line-height:14px;
  49. box-sizing:border-box;
  50. color: #999999;
  51. font-size: 12px;
  52. }
  53. .project-status-info button{
  54. width:fit-content;
  55. height:18px;
  56. margin:-2px 2px 0 2px;
  57. padding:2px;
  58. box-sizing:border-box;
  59. line-height:14px;
  60. color:#fff;
  61. border-radius:2px;
  62. cursor:pointer;
  63. }
  64. .project-status-plan{
  65. display:flex;
  66. align-items:center;
  67. }
  68. .plan-box{
  69. display:flex;
  70. align-items:center;
  71. height:14px;
  72. margin-left:10px;
  73. padding-left:10px;
  74. line-height:14px;
  75. box-sizing:border-box;
  76. }
  77. .plan-icon{
  78. display: flex;
  79. justify-content: center;
  80. align-items: center;
  81. width: 16px;
  82. height: 16px;
  83. margin-right:3px;
  84. border-radius: 50%;
  85. color: #fff;
  86. background: gray;
  87. }
  88. .plan-icon-done{
  89. background: #4979cf;
  90. }
  91. .light-rgb{
  92. width:32px;
  93. height:32px;
  94. margin: auto;
  95. }
  96. .light-rgb-red{
  97. width:32px;
  98. height:32px;
  99. margin: auto;
  100. animation: blink 2s infinite; /* 调用动画,持续1秒,重复无限次 */
  101. }
  102. /* 定义闪烁的动画 */
  103. @keyframes blink {
  104. 0% {
  105. opacity: 1; /* 不透明 */
  106. }
  107. 50% {
  108. opacity: 0; /* 透明 */
  109. }
  110. 100% {
  111. opacity: 1; /* 不透明 */
  112. }
  113. }
  114. .project-status-lights {
  115. display: flex;
  116. justify-content: center; /* 居中显示 */
  117. align-items: center;
  118. margin-top: 10px; /* 与上方偏离度有间隔 */
  119. flex-wrap: wrap;
  120. }
  121. .light-item {
  122. display: flex;
  123. flex-direction: column;
  124. align-items: center; /* 水平居中 */
  125. margin: 10px; /* 每个灯之间的间隔 */
  126. text-align: center;
  127. }
  128. .light-item img {
  129. width: 32px; /* 调整灯的宽度 */
  130. height: 32px; /* 调整灯的高度 */
  131. }
  132. .light-name {
  133. margin-top: 5px;
  134. font-size: 14px;
  135. color: #333;
  136. font-weight: 400;
  137. }
  138. .page-table{
  139. margin: 0 0 22px !important;
  140. }
  141. .table_box .table1 .label{
  142. color:#999;
  143. }
  144. .right_title{
  145. /*margin-bottom: 20px;*/
  146. }
  147. .layui-layout::-webkit-scrollbar{
  148. width: 0;
  149. }
  150. .amt-value{
  151. font-weight: bold;
  152. color: #1C56A3;
  153. }
  154. .amt-rate{
  155. color: #FF3300;
  156. }
  157. </style>
  158. <body>
  159. <div id="app"></div>
  160. <template id="template">
  161. <div class="layui-layout layui-layout-admin" style=" padding: 0 20px 0px;overflow: auto">
  162. <input type="hidden" id="subId" value="${sunInfo.id }"/>
  163. <input type="hidden" id="projectName" value="${sunInfo.sub_name }"/>
  164. <input type="hidden" id="unitName" value="${sunInfo.unitName }"/>
  165. <!-- 内容区域 -->
  166. <%-- <div class="right_title">
  167. <div class="project-title">
  168. <c:choose>
  169. <c:when test="${sunInfo.isBl == '1'}">
  170. <div>${sunInfo.sub_name}</div>
  171. </c:when>
  172. <c:otherwise>
  173. <div>${sunInfo.sub_name}</div>
  174. </c:otherwise>
  175. </c:choose>
  176. </div>
  177. <div class="project-status">
  178. <div class="project-status-offset">偏离度:<span class="amt-value">${sunInfo.offset}%</span></div>
  179. <div class="project-status-info">项目状况:<span class="amt-value">${sunInfo.statusName}</span></div>
  180. <div class="project-status-plan">
  181. <div class="project-status-offset">总投资:<span class="amt-value">${totalAmt }亿</span></div>
  182. <div class="project-status-offset">已完成投资:<span class="amt-value">${allEndAmt }亿</span>(<span class="amt-rate">${allEndAmtRate }%</span>)</div>
  183. <div class="project-status-offset">年度计划投资:<span class="amt-value">${yearAmt}亿</span></div>
  184. <div class="project-status-offset">年度完成投资:<span class="amt-value">${yearAmtSj }亿</span>(<span class="amt-rate">${yearEndAmtRate }%</span>)</div>
  185. <div class="project-status-offset">应完成投资:<span class="amt-value">${yearPlanAmt}亿</span></div>
  186. </div>
  187. </div>
  188. <!-- 灯显示区域,单独一行 -->
  189. <div class="project-status-lights">
  190. <div class="light-item" @click="monthReportEdit()">
  191. <img v-if="warningLight.yb === 0" class="light-rgb" src="${WebSite.asset}/css/images/light-green.png" />
  192. <img v-if="warningLight.yb === 1" class="light-rgb-red" src="${WebSite.asset}/css/images/light-yellow.png" />
  193. <img v-if="warningLight.yb === 2" class="light-rgb-red" src="${WebSite.asset}/css/images/light-red.png" />
  194. <div class="light-name">月报警示灯</div>
  195. </div>
  196. <div class="light-item" @click="detail()">
  197. <img v-if="warningLight.kg === 0" class="light-rgb" src="${WebSite.asset}/css/images/light-green.png" />
  198. <img v-if="warningLight.kg === 1" class="light-rgb-red" src="${WebSite.asset}/css/images/light-yellow.png" />
  199. <img v-if="warningLight.kg === 2" class="light-rgb-red" src="${WebSite.asset}/css/images/light-red.png" />
  200. <div class="light-name">开工警示灯</div>
  201. </div>
  202. <div class="light-item" @click="toPre()">
  203. <img v-if="warningLight.qq === 0" class="light-rgb" src="${WebSite.asset}/css/images/light-green.png" />
  204. <img v-if="warningLight.qq === 1" class="light-rgb-red" src="${WebSite.asset}/css/images/light-yellow.png" />
  205. <img v-if="warningLight.qq === 2" class="light-rgb-red" src="${WebSite.asset}/css/images/light-red.png" />
  206. <div class="light-name">手续警示灯</div>
  207. </div>
  208. <div class="light-item" @click="detail()">
  209. <img v-if="warningLight.jg === 0" class="light-rgb" src="${WebSite.asset}/css/images/light-green.png" />
  210. <img v-if="warningLight.jg === 1" class="light-rgb-red" src="${WebSite.asset}/css/images/light-yellow.png" />
  211. <img v-if="warningLight.jg === 2" class="light-rgb-red" src="${WebSite.asset}/css/images/light-red.png" />
  212. <div class="light-name">竣工警示灯</div>
  213. </div>
  214. <div class="light-item" @click="onChangeActive(2)">
  215. &lt;%&ndash; 偏离度显示 &ndash;%&gt;
  216. <c:choose>
  217. <c:when test="${sunInfo.status_fgw == '2'}">
  218. <img class="light-rgb-red" src="${WebSite.asset}/css/images/light-red.png" title="${not empty sunInfo.problemReason ? sunInfo.problemReason : '暂无描述'}"></img>
  219. </c:when>
  220. <c:when test="${sunInfo.status_fgw == '1'}">
  221. <div><img class="light-rgb-red" src="${WebSite.asset}/css/images/light-yellow.png" title="${not empty sunInfo.problemReason ? sunInfo.problemReason : '暂无描述'}"></img></div>
  222. </c:when>
  223. <c:otherwise>
  224. <div><img class="light-rgb" src="${WebSite.asset}/css/images/light-green.png"></img></div>
  225. </c:otherwise>
  226. </c:choose>
  227. <div class="light-name">偏离度警示灯</div>
  228. </div>
  229. </div>
  230. </div>--%>
  231. <div class="tab-group" style="position: relative;">
  232. <button class="btn btn1" :class="{active: tabActive === 1}" @click="onChangeActive(1)">项目信息</button>
  233. <button class="btn btn2" :class="{active: tabActive === 2}" @click="onChangeActive(2)">项目进度</button>
  234. <!-- <button class="btn btn2" :class="{active: tabActive === 3}" @click="onChangeActive(3)">历史记录</button> -->
  235. <!-- <button class="btn btn2" :class="{active: tabActive === 4}" @click="onChangeActive(4)">周报</button>
  236. <button class="btn btn2" :class="{active: tabActive === 5}" @click="onChangeActive(5)">年度计划</button> -->
  237. <button class="btn btn2" :class="{active: tabActive === 6}" @click="onChangeActive(6)">项目前期手续办理情况</button>
  238. <button class="btn btn2" :class="{active: tabActive === 7}" @click="onChangeActive(7)">问题督办</button>
  239. <!-- <button class="btn btn2" :class="{active: tabActive === 8}" @click="onChangeActive(8)">牵头领导及部门</button> -->
  240. <button class="btn btn2" :class="{active: tabActive === 9}" @click="onChangeActive(9)">项目图片及影像</button>
  241. <button class="btn btn2" :class="{active: tabActive === 11}" @click="onChangeActive(11)">重大事项</button>
  242. <!-- <button class="btn btn2" :class="{active: tabActive === 12}" @click="onChangeActive(12)">短信发送</button>
  243. <button class="btn btn2" :class="{active: tabActive === 13}" @click="onChangeActive(13)">项目日志</button> -->
  244. <%--竣工项目 才有竣工报告--%>
  245. <c:if test="${completeCheck}">
  246. <button class="btn btn2" :class="{active: tabActive === 10}" @click="onChangeActive(10)">竣工报告</button>
  247. </c:if>
  248. <button class="layui-btn layui-btn-normal" style="position:relative;z-index:9;float: right" @click="backHis()">返回</button>
  249. </div>
  250. <iframe :src="iframeUrl" style="min-height:430px;border:none;margin-top: 30px"></iframe>
  251. </div>
  252. </template>
  253. <script>
  254. new Vue({
  255. el: "#app",
  256. template: "#template",
  257. data: {
  258. winH: 0,
  259. iframeUrl: "",
  260. subId: "${subId}",
  261. collapse: false,
  262. tabActive: 1,
  263. warningLight: {
  264. "qq": 0, //前期手续办理 0绿灯 1黄灯 2红灯
  265. "yb": 0, //月报
  266. "kg": 0, //开工
  267. "jg": 0 //竣工
  268. }
  269. },
  270. mounted: function() {
  271. this.init()
  272. },
  273. methods: {
  274. init: function() {
  275. this.winH = document.body.clientHeight;
  276. this.onChangeActive(1);
  277. this.getWarningStatus();
  278. },
  279. monthReportEdit() {
  280. window.location.href = App.getUrl("/monthReport/view");
  281. },
  282. detail() {
  283. var self = this;
  284. var subId = this.subId;
  285. window.location.href=App.getUrl("/subject/subInfo/detail?subId=" + subId);
  286. },
  287. toPre() {
  288. var self = this;
  289. var subId = this.subId;
  290. window.location.href=App.getUrl("/subPreNew/sbTodo?subId="+subId);
  291. },
  292. getWarningStatus() {
  293. var self = this;
  294. var subId = this.subId;
  295. // 使用路径传递参数
  296. const url = '/api/subInfo/query/getWarningBySubId/' + subId;
  297. App.postJson(url, {}, function (res) {
  298. if (res.success) {
  299. console.log("获取到的数据:",res.data)
  300. self.warningLight = res.data
  301. }
  302. });
  303. },
  304. backHis(){
  305. if(${layer}) {
  306. App.closeCurrentLayer();
  307. }else {
  308. window.location.href="${lastUrl}";
  309. }
  310. },
  311. changeSide() {
  312. this.collapse = !this.collapse
  313. },
  314. onChangeActive(index) {
  315. var subId = this.subId;
  316. this.tabActive = index
  317. if (index === 1) {
  318. this.iframeUrl = App.getUrl("/overdue/projectInfo2?layer=${layer}&subId="+subId + "&queryYear=${queryYear}&lastUrl=${lastUrl}");
  319. }else if(index === 2){
  320. this.iframeUrl = App.getUrl("/rptCont/viewBySub?layer=${layer}&subId="+subId + "&queryYear=${queryYear}&lastUrl=${lastUrl}");
  321. }else if(index === 4){
  322. this.iframeUrl = App.getUrl("/weekReport/detailView?layer=${layer}&subId="+subId + "&queryYear=${queryYear}&lastUrl=${lastUrl}");
  323. }else if(index === 5){
  324. this.iframeUrl = App.getUrl("/amtPlan/detailView?layer=${layer}&subId="+subId + "&queryYear=${queryYear}&lastUrl=${lastUrl}");
  325. }/* else{
  326. window.location.href = App.getUrl("/overdue/projHistory?layer=${layer}&subId="+subId + "&lastUrl=${lastUrl}");
  327. } */
  328. else if(index === 6) {
  329. //项目前期
  330. this.iframeUrl = App.getUrl("/subPreNew/subList?layer=${layer}&subId="+subId + "&queryYear=${queryYear}&lastUrl=${lastUrl}");
  331. } else if(index === 7) {
  332. //问题督办
  333. this.iframeUrl = App.getUrl("/problemreport/subDetail?layer=${layer}&subId="+subId + "&queryYear=${queryYear}&lastUrl=${lastUrl}");
  334. } else if(index === 8) {
  335. //牵头领导
  336. this.iframeUrl = App.getUrl("/secUserSub/subDetail?layer=${layer}&subId="+subId + "&queryYear=${queryYear}&lastUrl=${lastUrl}");
  337. } else if(index === 9) {
  338. //现场影像
  339. this.iframeUrl = App.getUrl("/rptCont/fileDetail?layer=${layer}&subId="+subId + "&queryYear=${queryYear}&lastUrl=${lastUrl}");
  340. } else if(index === 10) {
  341. //竣工报告
  342. this.iframeUrl = App.getUrl("/subComplete/view?layer=${layer}&subId="+subId + "&queryYear=${queryYear}&lastUrl=${lastUrl}");
  343. } else if(index === 11) {
  344. //重大事项
  345. this.iframeUrl = App.getUrl("/meetingRecords/listBySubId?layer=${layer}&subId="+subId + "&queryYear=${queryYear}&lastUrl=${lastUrl}");
  346. } else if(index === 12) {
  347. //短信发送
  348. this.iframeUrl = App.getUrl("/msgLog/subDetail?layer=${layer}&subId="+subId+"&queryYear=${queryYear}&lastUrl=${lastUrl}");
  349. } else if(index === 13) {
  350. //项目日志
  351. this.iframeUrl = App.getUrl("/subDataLog/subList?layer=${layer}&subId="+subId+"&queryYear=${queryYear}&lastUrl=${lastUrl}");
  352. }
  353. }
  354. }
  355. })
  356. </script>
  357. </body>
  358. </html>