infoPage.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529
  1. <!--准入审核详情-->
  2. <template>
  3. <div class="info-page" v-if="pageType">
  4. <div class="top-title-box">
  5. <p>准入信息</p>
  6. <p class="button-p reset-button-one" @click="backPage">返回</p>
  7. </div>
  8. <!--<div class="item-max-box" style="margin-top:30px;">-->
  9. <!--<div class="item-title-box">{{subjectData.labSecurityApply.userType == '11'?'教师信息(关联教师信息材料):':(subjectData.labSecurityApply.userType == '22'?'学生信息(关联学生信息材料):':'')}}</div>-->
  10. <!--<div class="item-user-box">-->
  11. <!--<div>姓名:{{subjectData.labSecurityApply.userName}}</div>-->
  12. <!--<div>{{subjectData.labSecurityApply.userType == '11'?'工号:':(subjectData.labSecurityApply.userType == '22'?'学号:':'')}}{{subjectData.labSecurityApply.userNumber}}</div>-->
  13. <!--<div>学院:{{subjectData.labSecurityApply.deptName}}</div>-->
  14. <!--<div v-if="subjectData.labSecurityApply.userType == '22'">专业:{{subjectData.labSecurityApply.major}}</div>-->
  15. <!--</div>-->
  16. <!--</div>-->
  17. <div class="admittance_info">
  18. <li>申请实验室:<i>{{subjectData.labSecurityApply.laboratoryDeptName}}-{{subjectData.labSecurityApply.subjectName}}</i></li>
  19. <li>实验室负责人:<i>{{subjectData.fzrsysUser[0].nick_name}}</i></li>
  20. <li>申请时间:<i>{{subjectData.labSecurityApply.creatTime}} {{subjectData.labSecurityApply.hi}}</i></li>
  21. <li>有效期:<i>{{subjectData.labSecurityApply.validBeginTime}} 至 {{subjectData.labSecurityApply.validEndTime}}</i></li>
  22. <li>申请状态:<i>{{subjectData.labSecurityApply.auditStatus == 0?'待审核':(subjectData.labSecurityApply.auditStatus == 1?'已驳回':(subjectData.labSecurityApply.auditStatus == 2?'已通过':''))}}</i></li>
  23. <li v-if="isLook">审核时间:<i>{{subjectData.labSecurityApply.auditTime}}</i></li>
  24. <li v-if="isLook">审核人:<i>{{subjectData.labSecurityApply.auditName}}</i></li>
  25. <li v-if="isLook">审核备注:<i>{{subjectData.labSecurityApply.rejectCause}}</i></li>
  26. </div>
  27. <div class="admittance_materials">
  28. <p class="admittance_materials_title">准入材料</p>
  29. <div v-for="(item,index) in subjectData.listTemp" :key="index">
  30. <div class="item-title-box" v-if="item.materialType==2&&item.relationType==1"><i style="color: #F56C6C;">*</i>身份信息:(关联学生信息材料)</div>
  31. <div class="identity" v-if="item.materialType==2&&item.relationType==1">
  32. <li>姓名:<i>{{subjectData.sysUser.nickName}}</i></li>
  33. <li>学号:<i>{{subjectData.sysUser.userName}}</i></li>
  34. <li>卡号:<i>{{subjectData.sysUser.cardNum}}</i></li>
  35. <li>联系方式:<i>{{subjectData.sysUser.phonenumber}}</i></li>
  36. <li>导师:<i>{{subjectData.sysUser.tutorUserName}}</i></li>
  37. <li>班级:<i>{{subjectData.sysUser.grade}}</i></li>
  38. <li>学院:<i>{{subjectData.labSecurityApply.deptName}}</i></li>
  39. <li>专业:<i>{{subjectData.sysUser.major}}</i></li>
  40. <li>申请备注:<i>{{subjectData.labSecurityApply.applyCause}}</i></li>
  41. </div>
  42. <div class="item-title-box" v-if="item.materialType==1"><i style="color: #F56C6C;">*</i>{{item.materialName}}</div>
  43. <div class="file_list" v-for="(minItem,minIndex) in item.upList">
  44. <el-checkbox @change="checkedImg(minItem)" v-if="isLook" >{{minItem.name}}</el-checkbox>
  45. <i v-if="!isLook" >{{minItem.name}}</i>
  46. <i class="file_list_look" @click="lookFile(minItem)">查看</i>
  47. <!-- <a class="file_list_look" :href="item2.dataUrl.split(';')[1].replace(/,/g,'')" target="_blank">查看</a>-->
  48. <i v-if="isLook" class="file_list_look" @click="handleExport(1,minItem)">下载</i>
  49. </div>
  50. </div>
  51. <div class="item-title-box" v-if="subjectData.labSecurityApply.auditStatus!=2">审核备注:</div>
  52. <el-input type="textarea" style="margin-top: 20px" v-model="rejectCause" placeholder="请输入审核备注" maxlength="50" v-if="subjectData.labSecurityApply.auditStatus!=2"/>
  53. <div class="btn_list">
  54. <p v-if="isLook" class="button-p reset-button-one" style="width:100px;" @click="handleExport(2,'')">打包下载</p>
  55. <p v-if="isLook&&subjectData.labSecurityApply.auditStatus!=2" class="inquire-button-one" style="width:100px;" @click="backPage()">确定</p>
  56. <p v-if="!isLook" class="button-p reset-button-one" style="width:100px;" @click="auditClick(1)">驳回</p>
  57. <p v-if="!isLook" class="inquire-button-one" style="width:100px;" @click="auditClick(2)">通过</p>
  58. </div>
  59. </div>
  60. <div v-for="(item,index) in subjectData.listTemp" :key="index">
  61. <!-- <div class="item-max-box" style="margin-top:30px;" v-if="item.materialType==2&&item.relationType==1">
  62. <div class="item-title-box">{{subjectData.labSecurityApply.userType == '11'?'教师信息(关联教师信息材料):':(subjectData.labSecurityApply.userType == '22'?'学生信息(关联学生信息材料):':'')}}</div>
  63. <div class="item-user-box">
  64. <div>
  65. <p>姓名:</p>
  66. <p>{{subjectData.labSecurityApply.userName}}</p>
  67. </div>
  68. <div>
  69. <p>{{subjectData.labSecurityApply.userType == '11'?'工号:':(subjectData.labSecurityApply.userType == '22'?'学号:':'')}}</p>
  70. <p>{{subjectData.labSecurityApply.userNumber}}</p>
  71. </div>
  72. <div>
  73. <p>学院:</p>
  74. <p>{{subjectData.labSecurityApply.deptName}}</p>
  75. </div>
  76. <div v-if="subjectData.labSecurityApply.userType == '22'">
  77. <p>专业:</p>
  78. <p>{{subjectData.labSecurityApply.userMajor}}</p>
  79. </div>
  80. </div>
  81. </div>-->
  82. <!-- <div class="item-max-box" v-if="item.materialType==2&&item.relationType==2&&subjectData.labSecurityApply.userType == '22'">
  83. <div class="item-title-box">安全考试证书:</div>
  84. <img v-if="subjectData.listcert[0]" class="item-img-box" :src="subjectData.listcert[0].cert_url">
  85. <p v-if="!subjectData.listcert[0]" style="margin-left:40px;color:#999;font-size:14px;">暂无证书</p>
  86. </div>
  87. <div class="item-max-box" v-if="item.materialType==1">
  88. <div class="item-title-box">{{item.materialName}}:</div>
  89. <div class="item-for-text-box">
  90. <p :class="iframeSrc[index].forIndex == minIndex ?'color-p':''" v-for="(minItem,minIndex) in item.upList" @click="forClick(minItem,minIndex,index)">{{minItem.name}}</p>
  91. </div>
  92. <iframe
  93. class="item-html-box"
  94. :src="iframeSrc[index].url" scrolling="auto" frameborder="0">
  95. </iframe>
  96. </div>-->
  97. </div>
  98. <!-- 添加或修改安全准入申请材料配置对话框 -->
  99. <el-dialog title="准入资格审核-未通过" :visible.sync="open" width="500px" append-to-body>
  100. <el-form ref="form" :model="form" :rules="rules" label-width="100px">
  101. <el-form-item label="未通过材料" prop="materialName">
  102. <el-checkbox-group v-model="checkList">
  103. <el-checkbox :label="item.id" style="display: block" v-for="(item,index) in subjectData.listTemp" :key="index">{{item.materialName}}</el-checkbox>
  104. </el-checkbox-group>
  105. </el-form-item>
  106. <el-form-item label="未通过原因" prop="rejectCause">
  107. <el-input type="textarea" v-model="form.rejectCause" placeholder="请输入未通过原因" maxlength="100"/>
  108. </el-form-item>
  109. </el-form>
  110. <div slot="footer" class="dialog-footer">
  111. <el-button type="primary" @click="laboratoryApply(1)">确 定</el-button>
  112. <!--<el-button @click="cancel">取 消</el-button>-->
  113. </div>
  114. </el-dialog>
  115. </div>
  116. </template>
  117. <script>
  118. let Base64 = require('js-base64').Base64;
  119. import {downloadwBatch, getDetails, laboratoryApply} from "@/api/laboratory/approval";
  120. import {optionHazard} from "@/api/laboratory/hazard";
  121. export default {
  122. name: "info-page",
  123. props:{
  124. infoData: {},
  125. },
  126. data() {
  127. return {
  128. pageType:false,
  129. forIndex:0,
  130. subjectData:{},
  131. iframeSrc:[],
  132. open:false,
  133. form:{},
  134. checkList:[],
  135. rejectCause:'',//审核备注
  136. isLook:false,//判断是查看还是审核
  137. //打包下载查询参数
  138. packDown:{
  139. userName:'',
  140. userNumber:'',
  141. subjectName:'',
  142. fileList:'',
  143. },
  144. mrList:[],
  145. // 表单校验
  146. rules: {
  147. name: [
  148. { required: true, message: "请输入检查项名称", trigger: "blur" },
  149. { required: true, message: "请输入检查项名称", validator: this.spaceJudgment, trigger: "blur" }
  150. ],
  151. code: [
  152. { required: true, message: "请输入条款号", trigger: "blur" },
  153. { required: true, message: "请输入条款号", validator: this.spaceJudgment, trigger: "blur" }
  154. ],
  155. },
  156. };
  157. },
  158. created() {
  159. if(this.infoData.type==0){
  160. this.isLook=false;
  161. }else if(this.infoData.type==1){
  162. this.isLook=true;
  163. }
  164. this.getDetails();
  165. },
  166. methods: {
  167. lookFile(item){
  168. let visitUrl=window.location.href.split('://')[0]+'://'+process.env.VUE_APP_BASE_API+'/admin/'+item.url;
  169. console.log(visitUrl)
  170. window.open(localStorage.getItem('filePreviewUrl') + '/onlinePreview?url='+encodeURIComponent(Base64.encode(visitUrl)));
  171. },
  172. /** 导出按钮操作 */
  173. handleExport(type,item) {
  174. console.log(item)
  175. if(type==1){//单个
  176. this.packDown.userName=this.subjectData.sysUser.nickName
  177. this.packDown.userNumber=this.subjectData.sysUser.userName
  178. this.packDown.subjectName=this.subjectData.labSecurityApply.subjectName
  179. let visitUrl=item.name+';'+item.url+',';
  180. this.packDown.fileList=visitUrl
  181. this.download('/laboratory/apply/downloadwBatch', {
  182. ...this.packDown
  183. }, this.packDown.userName+'_'+this.packDown.userNumber+'_'+this.packDown.subjectName+`.zip`)
  184. }else if(type==2){// 打包下载
  185. console.log(this.mrList)
  186. if(this.mrList.length<=0){
  187. this.msgInfo("请先勾选需要打包下载的文件!");
  188. }else{
  189. let list=[];
  190. this.mrList.forEach(function (item){
  191. list.push(item+',')
  192. })
  193. console.log(list)
  194. this.packDown.userName=this.subjectData.sysUser.nickName
  195. this.packDown.userNumber=this.subjectData.sysUser.userName
  196. this.packDown.subjectName=this.subjectData.labSecurityApply.subjectName
  197. this.packDown.fileList= list.join('@@')
  198. this.download('/laboratory/apply/downloadwBatch', {
  199. ...this.packDown
  200. }, this.packDown.userName+'_'+this.packDown.userNumber+'_'+this.packDown.subjectName+`.zip`)
  201. }
  202. }
  203. },
  204. checkedImg(item){
  205. console.log(item)
  206. if(event.target.checked==false){
  207. this.mrList.splice(this.mrList.indexOf(item.url),1);
  208. }else{
  209. this.mrList.push(item.name+';'+item.url)
  210. }
  211. console.log(this.mrList)
  212. },
  213. //审核按钮
  214. auditClick(type){
  215. let self = this;
  216. if(type == 1){
  217. this.open = true;
  218. }else if(type == 2){
  219. this.$confirm('是否确认审核?', "", {
  220. confirmButtonText: "确定",
  221. cancelButtonText: "取消",
  222. type: "warning"
  223. }).then(function() {
  224. self.laboratoryApply(type);
  225. }).then(() => {}).catch(() => {});
  226. }
  227. },
  228. laboratoryApply(type){
  229. let obj = {
  230. id:this.infoData.list.id,
  231. auditStatus:type,
  232. rejectCause:this.rejectCause
  233. };
  234. if(type == 1){
  235. obj.rejectCause = this.form.rejectCause;
  236. obj.rejectMaterial = this.checkList + '';
  237. }
  238. laboratoryApply(obj).then(response => {
  239. if(response.code==200){
  240. this.msgSuccess("操作成功");
  241. this.$parent.tableClick(1);
  242. }else if(response.code==205){
  243. this.$confirm(response.msg, "警告", {
  244. confirmButtonText: "确定",
  245. cancelButtonText: "取消",
  246. type: "warning"
  247. }).then(() => {
  248. // 确定
  249. this.$router.push({ path: '/comprehensive/laboratoryManagement/accessAuthorization-KDNH' });
  250. }).catch(function() {
  251. // 取消
  252. this.$parent.tableClick(1);
  253. });
  254. }
  255. })
  256. },
  257. //点击切换文件
  258. forClick(item,index,bigIndex){
  259. this.iframeSrc[bigIndex].forIndex = index;
  260. this.iframeSrc[bigIndex].url = this.urlJudge(item.url)
  261. },
  262. //获取数据
  263. getDetails(){
  264. let self = this;
  265. getDetails({id:this.infoData.list.id}).then(response => {
  266. let dataList = [];
  267. for(let i=0;i<response.data.listTemp.length;i++){
  268. if(response.data.listTemp[i].materialType == 2 && response.data.listTemp[i].materialType == 2){
  269. dataList.unshift(response.data.listTemp[i]);
  270. }
  271. }
  272. for(let i=0;i<response.data.listTemp.length;i++){
  273. if(response.data.listTemp[i].materialType == 1){
  274. dataList.push(response.data.listTemp[i]);
  275. }
  276. }
  277. for(let i=0;i<response.data.listTemp.length;i++){
  278. if(response.data.listTemp[i].materialType == 2 && response.data.listTemp[i].materialType == 1){
  279. dataList.unshift(response.data.listTemp[i]);
  280. }
  281. }
  282. this.$set(response.data,'listTemp',dataList);
  283. let newList = [];
  284. for(let i=0;i<response.data.listTemp.length;i++){
  285. if(response.data.listTemp[i].materialType == 1){
  286. let maxList = [];
  287. for(let o=0;o<response.data.listTemp[i].listMr.length;o++){
  288. let bigList = response.data.listTemp[i].listMr[o].dataUrl.split(',');
  289. for(let x=0;x<bigList.length;x++){
  290. if(bigList[x]){
  291. let minList = bigList[x].split(';');
  292. let obj = {
  293. name:minList[0],
  294. url:minList[1],
  295. };
  296. maxList.push(obj);
  297. }
  298. }
  299. }
  300. response.data.listTemp[i].upList = maxList;
  301. let obj ={};
  302. if(maxList.length>0){
  303. obj = {
  304. forIndex:0,
  305. url:this.urlJudge(maxList[0].url)
  306. }
  307. }
  308. newList.push(obj);
  309. }else{
  310. let obj = {
  311. forIndex:"",
  312. url:""
  313. }
  314. newList.push(obj);
  315. }
  316. }
  317. this.$set(this,"iframeSrc",newList);
  318. this.$set(this,"subjectData",response.data);
  319. //审核备注
  320. if(this.isLook){
  321. this.rejectCause=response.data.labSecurityApply.rejectCause
  322. }
  323. this.$forceUpdate()
  324. this.pageType = true;
  325. })
  326. },
  327. //返回
  328. backPage(){
  329. if(this.isLook){
  330. this.$parent.tableClick(2);
  331. }else{
  332. this.$parent.tableClick(1);
  333. }
  334. },
  335. }
  336. };
  337. </script>
  338. <style scoped lang="scss">
  339. .info-page {
  340. flex:1;
  341. display: flex!important;
  342. flex-direction: column;
  343. /*box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);*/
  344. /*border-radius:10px;*/
  345. .top-title-box{
  346. display: flex;
  347. border-bottom: 1px solid #E0E0E0;
  348. /*padding-top:20px;*/
  349. p:nth-child(1){
  350. flex: 1;
  351. line-height:60px;
  352. color: #0045AF;
  353. font-size:18px;
  354. margin:0 0 0 40px;
  355. }
  356. p:nth-child(2){
  357. margin-right:20px;
  358. }
  359. p:nth-child(3){
  360. margin-right:20px;
  361. }
  362. p:nth-child(4){
  363. margin-right:20px;
  364. }
  365. }
  366. /*准入信息*/
  367. .admittance_info{
  368. display: flex;
  369. justify-content: flex-start;
  370. flex-wrap: wrap;
  371. padding-left: 80px;
  372. box-sizing: border-box;
  373. >li{
  374. list-style-type:none;
  375. font-size: 16px;
  376. font-family: Microsoft YaHei;
  377. font-weight: 500;
  378. color: #999999;
  379. line-height: 70px;
  380. margin-right: 20px;
  381. >i{
  382. margin-left: 10px;
  383. display: inline-block;
  384. font-style:normal;
  385. font-size: 16px;
  386. font-family: Microsoft YaHei;
  387. font-weight: 500;
  388. color: #333333;
  389. line-height: 70px;
  390. }
  391. }
  392. }
  393. /*准入材料*/
  394. .admittance_materials{
  395. padding-left: 40px;
  396. box-sizing: border-box;
  397. .admittance_materials_title{
  398. flex: 1;
  399. line-height:60px;
  400. color: #0045AF;
  401. font-size:18px;
  402. border-bottom: 1px solid #E0E0E0;
  403. margin-top: 0;
  404. }
  405. .identity{
  406. display: flex;
  407. justify-content: flex-start;
  408. flex-wrap: wrap;
  409. padding-left: 40px;
  410. box-sizing: border-box;
  411. >li{
  412. list-style-type:none;
  413. font-size: 16px;
  414. font-family: Microsoft YaHei;
  415. font-weight: 500;
  416. color: #999999;
  417. line-height: 70px;
  418. margin-right: 20px;
  419. >i{
  420. margin-left: 10px;
  421. display: inline-block;
  422. font-style:normal;
  423. font-size: 16px;
  424. font-family: Microsoft YaHei;
  425. font-weight: 500;
  426. color: #333333;
  427. line-height: 70px;
  428. }
  429. }
  430. }
  431. .file_list{
  432. padding-left: 80px;
  433. box-sizing: border-box;
  434. >i{
  435. font-style: normal;
  436. font-size: 14px;
  437. font-family: Microsoft YaHei;
  438. font-weight: bold;
  439. color: #0183FA;
  440. line-height: 70px;
  441. }
  442. .file_list_look{
  443. padding-left: 40px;
  444. cursor: pointer;
  445. font-style: normal;
  446. font-size: 14px;
  447. font-family: Microsoft YaHei;
  448. font-weight: bold;
  449. color: #0183FA;
  450. line-height: 70px;
  451. }
  452. }
  453. .btn_list{
  454. text-align: center;
  455. margin-top: 40px;
  456. >p{
  457. margin-right: 20px;
  458. }
  459. }
  460. }
  461. .item-max-box{
  462. .item-title-box{
  463. margin-left:50px;
  464. font-size:16px;
  465. line-height:80px;
  466. }
  467. .item-user-box{
  468. display: flex;
  469. margin-left:65px;
  470. div{
  471. display: flex;
  472. margin-right:60px;
  473. font-size:14px;
  474. }
  475. }
  476. .item-img-box{
  477. width:240px;
  478. margin-left:50px;
  479. }
  480. .item-for-text-box{
  481. margin-left:77px;
  482. p{
  483. display: inline-block;
  484. font-size:14px;
  485. line-height:40px;
  486. margin:0 57px 0 0;
  487. }
  488. .color-p{
  489. color:#0045AF;
  490. }
  491. }
  492. .item-html-box{
  493. margin:20px 0 40px 58px;
  494. width:900px;
  495. height:900px;
  496. background: #F5F5F5;
  497. }
  498. }
  499. }
  500. </style>