weekDetail.jsp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <jsp:include page="../common/common-meta-include.jsp"></jsp:include>
  8. <jsp:include page="../common/common-js-include.jsp"></jsp:include>
  9. <jsp:include page="../common/common-css-include.jsp"></jsp:include>
  10. <!--[if lt IE 9]>
  11. <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
  12. <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
  13. <![endif]-->
  14. </head>
  15. <body>
  16. <div id="app"></div>
  17. <template id="template">
  18. <div class="layui-layout layui-layout-admin detail" style="padding: 0 20px 150px;overflow: auto">
  19. <!-- 内容区域 -->
  20. <div class="right_title">
  21. <div class="layui-collapse">
  22. <div class="layui-colla-item">
  23. <h2 class="layui-colla-title return">
  24. <button class="btn" @click="backHis">返回</button>
  25. </h2>
  26. </div>
  27. </div>
  28. <form class="layui-form" lay-filter="searchForm">
  29. <input type="hidden" id="subId" value="${subId }">
  30. <input type="hidden" id="beginDate" value="${beginDate }">
  31. <div class="layui-form-item">
  32. <label class="layui-form-label" style="width:95px;"><span class="red">*</span>周报期间</label>
  33. <div class="layui-input-block" >
  34. <input type="text" name="kjMonth" disabled class="layui-input" style="background-color: #F6F6F6; color: #ccc;" v-model="info.kjMonth" >
  35. </div>
  36. </div>
  37. <div class="layui-form-item">
  38. <label class="layui-form-label" style="width:95px;"><span class="red">*</span>项目名称</label>
  39. <div class="layui-input-block" >
  40. <input type="text" name="projName" v-model="info.projName" disabled class="layui-input" style="background-color: #F6F6F6; color: #ccc;">
  41. </div>
  42. </div>
  43. <!-- <div class="layui-form-item">
  44. <label class="layui-form-label" style="width:95px;">当前阶段</label>
  45. <div class="layui-input-block" >
  46. <select name="subPlanId" lay-filter="subPlanId" id="subPlanId">
  47. <option value="">--请选择--</option>
  48. <option v-for="(item,index) in currPlan" :index="index" :value="item.id">{{item.beginDate}} 至 {{item.endDate}}</option>
  49. </select>
  50. </div>
  51. </div>
  52. <div class="layui-form-item" v-if="currPlanIndex != null">
  53. <label class="layui-form-label" style="width:95px;">计划内容</label>
  54. <div class="layui-input-block" >
  55. <textarea class="layui-textarea" readonly="readonly">{{currPlan[currPlanIndex-1].content}}</textarea>
  56. </div>
  57. </div> -->
  58. <div class="layui-form-item">
  59. <label class="layui-form-label" style="width:95px;"><span class="red">*</span>进度比例(%)</label>
  60. <div class="layui-input-block" >
  61. <input type="number" name="numBl" min="0" v-model="info.numBl" max="100" placeholder="请输入比例范围在0-100 单位%" class="layui-input">
  62. </div>
  63. </div>
  64. <!-- <div class="layui-form-item">
  65. <label class="layui-form-label" style="width:95px;"><span class="red">*</span>本实周际投资(万元)</label>
  66. <div class="layui-input-block" >
  67. <input type="number" name="amt" placeholder="请输入金额" class="layui-input">
  68. </div>
  69. </div> -->
  70. <div class="layui-form-item">
  71. <label class="layui-form-label" style="width:95px;"><span class="red">*</span>项目进展情况</label>
  72. <div class="layui-input-block" >
  73. <textarea placeholder="请输入内容" style="height: 80px;width: 400px; " v-model="info.content" name="content" class="layui-textarea"></textarea>
  74. </div>
  75. </div>
  76. <div class="layui-form-item">
  77. <label class="layui-form-label" style="width:95px;"><span class="red"></span>项目延期原因</label>
  78. <div class="layui-input-block" >
  79. <textarea placeholder="请输入内容" style="height: 80px;width: 400px;" name="reason" v-model="info.reason" class="layui-textarea"></textarea>
  80. </div>
  81. </div>
  82. <div class="layui-form-item" >
  83. <div class="table_box" style="margin-left: 20px">
  84. <div class="con_title">*附件信息</div>
  85. <ul class="img_ls">
  86. <li v-for="(item, index) in imgLs" :key="index">
  87. <div class="img" id="attachDiv" :title="showTitle(item)" >
  88. <img :id="item.fileAddre" :src="picShow(item.fileAddre,item.fileType)" @click="showImage(item.fileAddre,item.fileType, item.createTime)" :alt="item.fileName" />
  89. <div class="download_icon" @click="download(item.fileAddre,item.fileName)"></div>
  90. <i class="layui-icon layui-icon-close-fill" @click="delPic(index)"></i>
  91. </div>
  92. {{item.fileName}}
  93. </li>
  94. <li class="add" id="addPic">
  95. <div class="bg"><i class="layui-icon layui-icon-add-circle"></i></div>
  96. </li>
  97. </ul>
  98. </div>
  99. </div>
  100. <div class="layui-form-item">
  101. <div class="layui-input-block">
  102. <button type="button" class="layui-btn" @click="save">保存</button>
  103. </div>
  104. </div>
  105. </form>
  106. </div>
  107. </div>
  108. </template>
  109. <script>
  110. new Vue({
  111. el: "#app",
  112. template: "#template",
  113. data: {
  114. winH: 0,
  115. imgLs: [],
  116. imgLsDel:[],
  117. tableName : 'test',
  118. info:"",
  119. pageNo : 1,
  120. pageSize : 10
  121. },
  122. mounted : function() {
  123. this.init();
  124. },
  125. methods: {
  126. init : function() {
  127. this.winH = document.body.clientHeight;
  128. const { laydate, table, laypage,util } = layui;
  129. var self = this;
  130. App.common.utils.uploadFile('#addPic', App.getUrl('/static/file/upload'), {
  131. acceptMime: 'image/png,video/mp4,image/jpg,image/jpeg,application/pdf,application/msword,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
  132. ,exts: 'png|jpg|jpeg|pdf|xls|xlsx|doc|docx|mp4'
  133. },null, function(res){
  134. for(var i=0;i<res.resultList.length;i++){
  135. var pic = {};
  136. pic.fileAddre = res.resultList[i].id;
  137. pic.fileName = res.resultList[i].name;
  138. pic.fileType = res.resultList[i].ftype;
  139. pic.logicDeleteFlag = 0;
  140. self.imgLs.push(pic);
  141. }
  142. });
  143. window.showImage = this.showImage;
  144. this.getData();
  145. },
  146. getData : function(){
  147. var self = this;
  148. var subId = $("#subId").val();
  149. var beginDate = $("#beginDate").val();
  150. // var year= beginDate.getFullYear();
  151. // if (year==null||year==undefined){
  152. var year=beginDate.split("-")[0];
  153. // }
  154. App.postJson("/api/weekReport/getInfoById",{subId : subId,startDate:beginDate,year:year}, function(res) {
  155. if(res.success) {
  156. self.info = res.data;
  157. self.imgLs = res.data.listFile;
  158. layui.form.render();
  159. }
  160. });
  161. },
  162. showTitle(obj){
  163. return "附件名称:" + obj.fileName;
  164. },
  165. delPic(index){
  166. this.imgLs[index].logicDeleteFlag=1;
  167. this.imgLsDel.push(this.imgLs[index]);
  168. this.imgLs.splice(index,1);
  169. },
  170. download(fileId,fileName){
  171. var url="static/file/download/"+fileId;
  172. App.common.utils.downFile(App.getUrl(url));
  173. },
  174. showImage: function(fileId,type,createTime) {
  175. var imageUrl ="";
  176. var realUrl ="";
  177. var mp4Url="";
  178. if(type == 8) {
  179. imageUrl= "${domain}/static/file/"+fileId+"/showfile";
  180. }else if(type==null||type==""){
  181. }else if (type==101||type==102||type==103||type==104||type==105) {
  182. imageUrl= "${domain}/static/file/"+fileId+"/showfile";
  183. }else if (type==4 || type==5 ) {
  184. imageUrl= "${WebSite.asset}/css/images/excel.png";
  185. realUrl= "/static/file/download/"+fileId+"";
  186. }else if (type==2||type==3) {
  187. imageUrl= "${WebSite.asset}/css/images/word.png";
  188. realUrl= "/static/file/download/"+fileId+"";
  189. }else{
  190. imageUrl = '<video width="100%" height="100%" controls="controls" autobuffer="autobuffer" autoplay="autoplay" loop="loop"><source src="${domain}/static/file/'+fileId+'/showfile" type="video/mp4"></source></video>';
  191. }
  192. if(imageUrl) {
  193. if (type==2||type==3||type==4 || type==5){
  194. window.location.href=App.getUrl(realUrl);
  195. }else if (type==203){
  196. layer.open({
  197. type: 1,
  198. title: '播放视频',
  199. content: imageUrl,
  200. offset: 'auto',
  201. area: ['60%', '60%'],
  202. shade: 0.5,
  203. shadeClose: true
  204. });
  205. } else{
  206. if(type == 8) {
  207. // var pdfIndex = layer.open({
  208. // type: 2,
  209. // content: imageUrl,
  210. // area: ['80%','80%'],
  211. // offset: 'auto'
  212. // });
  213. // layer.full(pdfIndex);
  214. window.open(imageUrl)
  215. } else {
  216. App.common.utils.imageWater(imageUrl, createTime, function(image) {
  217. layer.photos({
  218. photos: {
  219. "title":"",
  220. "id": fileId,
  221. "start": 0,
  222. "data": [
  223. {
  224. "alt": "",
  225. "pid": fileId,
  226. "src": image,
  227. "thumb": imageUrl
  228. }
  229. ]
  230. },
  231. anim: 5
  232. });
  233. });
  234. }
  235. }
  236. }
  237. },
  238. picShow(fileId,type){
  239. var tempId="#"+fileId;
  240. if(type == 8) {
  241. return "${WebSite.asset}/css/images/pdf.png";
  242. }else if(type==null||type==""){
  243. }else if (type==101||type==102||type==103||type==104||type==105) {
  244. return "${domain}/static/file/"+fileId+"/showfile";
  245. }else if (type==4 || type==5 ) {
  246. return "${WebSite.asset}/css/images/excel.png";
  247. }else if (type==2||type==3) {
  248. return "${WebSite.asset}/css/images/word.png";
  249. }else if (type==203) {
  250. return "${WebSite.asset}/css/images/video.png";
  251. }
  252. },
  253. picShow1(fileId){
  254. return "${domain}/static/file/"+fileId+"/showfile";
  255. },
  256. save : function(){
  257. var self=this;
  258. var formData = layui.form.getValue("searchForm");
  259. self.info.subId=$("#subId").val();
  260. self.info.beginDate = self.info.kjMonth.split("~")[0];
  261. self.info.endDate = self.info.kjMonth.split("~")[1];
  262. self.info.year=self.info.kjMonth.split("-")[0];
  263. for (var i=0;i<self.imgLsDel.length;i++){
  264. self.imgLs.push(self.imgLsDel[i]);
  265. }
  266. self.info.listFile=self.imgLs;
  267. if(!self.isNum(self.info.numBl) || Number(self.info.numBl) < 0 || Number(self.info.numBl) > 100){
  268. App.msg.warn("请输入0到100的进度比例");
  269. return false;
  270. }
  271. if(self.info.content == ""){
  272. layer.msg("请先填写周报内容");
  273. return false;
  274. }else{
  275. App.postJson("/api/weekReport/saveReport",self.info,function(res){
  276. if(res.success){
  277. layer.msg("保存成功");
  278. window.history.back(-1);
  279. }
  280. });
  281. }
  282. },
  283. isNum(num){
  284. var regPos = /^\d+(\.\d+)?$/;
  285. if(regPos.test(num)){
  286. return true;
  287. }else{
  288. return false;
  289. }
  290. },
  291. backHis: function() {
  292. window.history.back(-1);
  293. }
  294. },
  295. });
  296. </script>
  297. </body>
  298. </html>