approvalPage.vue 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141
  1. <template>
  2. <div class="approvalPage">
  3. <div class="approvalPage-min" v-if="pageType == 1">
  4. <div class="title-box">
  5. <p>化学品申购</p>
  6. <p class="reset-button-one button-p" @click="backPage">返回</p>
  7. <!--已拒绝/已撤销时显示-->
  8. <p class="inquire-button-one button-p" v-if="dataInfo.approvalStatus==2||dataInfo.approvalStatus==3" @click="goEditPage">编辑</p>
  9. </div>
  10. <div class="page-max-box scrollbar-box">
  11. <div class="text-box-one">
  12. <p>编号:</p>
  13. <p>{{dataInfo.applyNum}}</p>
  14. <p>申购人:{{dataInfo.applyUserName}}</p>
  15. <p :class="dataInfo.approvalStatus==0?'colorA':(dataInfo.approvalStatus==1?'colorB':(dataInfo.approvalStatus==2?'colorC':(dataInfo.approvalStatus==3?'colorD':'')))"
  16. >{{dataInfo.approvalStatus==0&&approvalPagePropsData.userType==1?'等待我审批':(dataInfo.approvalStatus==0&&approvalPagePropsData.userType!=1?'等待审批':(dataInfo.approvalStatus==1?'已通过':(dataInfo.approvalStatus==2?'已拒绝':(dataInfo.approvalStatus==3?'已撤销':''))))}}</p>
  17. </div>
  18. <div class="text-box-two">
  19. <p>申购原因:</p>
  20. <p>{{dataInfo.applyReason}}</p>
  21. </div>
  22. <div class="text-box-one">
  23. <p>实验室:</p>
  24. <p style="flex:1;">{{dataInfo.subName}}</p>
  25. </div>
  26. <div class="text-box-three">
  27. <p class="el-icon-info"></p>
  28. <p>勾选的化学品为已同意申购</p>
  29. </div>
  30. <!--审批单-->
  31. <div class="table-title-box-one" v-if="approvalPagePropsData.type == 2">
  32. <img @click="allCheckClick" :class="approvalPagePropsData.type==1?'cursor-img':''" v-if="!allCheckType" src="@/assets/ZDimages/medicUniversity-3_1/icon_sp_wxz.png">
  33. <img @click="allCheckClick" :class="approvalPagePropsData.type==1?'cursor-img':''" v-if="allCheckType" src="@/assets/ZDimages/medicUniversity-3_1/icon_ytg_xz.png">
  34. <p>全选</p>
  35. <p>化学品名</p>
  36. <p>化学品柜</p>
  37. <p>位置</p>
  38. <p>申购人剩余可存放量</p>
  39. <p>本次申购量</p>
  40. </div>
  41. <div class="table-list-box-one" v-if="approvalPagePropsData.type == 2" v-for="(item,index) in dataInfo.actHxpapplyDetailList" :key="index">
  42. <img @click="checkClick(item)" :class="approvalPagePropsData.type==1?'cursor-img':''" v-if="!item.checkType" src="@/assets/ZDimages/medicUniversity-3_1/icon_sp_wxz.png">
  43. <img @click="checkClick(item)" :class="approvalPagePropsData.type==1?'cursor-img':''" v-if="item.checkType" src="@/assets/ZDimages/medicUniversity-3_1/icon_ytg_xz.png">
  44. <p></p>
  45. <p>{{item.chemicalName}}</p>
  46. <el-tooltip class="item" effect="dark" :content="item.cabinetName" placement="top">
  47. <p>{{item.cabinetName}}</p>
  48. </el-tooltip>
  49. <el-tooltip class="item" effect="dark" :content="item.posi" placement="top">
  50. <p>{{item.posi}}</p>
  51. </el-tooltip>
  52. <p>{{item.remainingStorage}}</p>
  53. <p>{{item.applyNum}}</p>
  54. </div>
  55. <!--审批-->
  56. <div class="table-title-box-two" v-if="approvalPagePropsData.type == 1">
  57. <img @click="allCheckClick" :class="approvalPagePropsData.type==1?'cursor-img':''" v-if="!allCheckType" src="@/assets/ZDimages/medicUniversity-3_1/icon_sp_wxz.png">
  58. <img @click="allCheckClick" :class="approvalPagePropsData.type==1?'cursor-img':''" v-if="allCheckType" src="@/assets/ZDimages/medicUniversity-3_1/icon_ytg_xz.png">
  59. <p>全选</p>
  60. <p>化学品名</p>
  61. <p>化学品柜</p>
  62. <p>位置</p>
  63. <p>学院库存</p>
  64. <p>实验室库存</p>
  65. <p>化学品库存</p>
  66. <p>申购人剩余可存放量</p>
  67. <p>本次申购量</p>
  68. <p>操作</p>
  69. </div>
  70. <div class="table-list-box-two" v-if="approvalPagePropsData.type == 1" v-for="(item,index) in dataInfo.actHxpapplyDetailList" :key="index">
  71. <img @click="checkClick(item)" :class="approvalPagePropsData.type==1?'cursor-img':''" v-if="!item.checkType" src="@/assets/ZDimages/medicUniversity-3_1/icon_sp_wxz.png">
  72. <img @click="checkClick(item)" :class="approvalPagePropsData.type==1?'cursor-img':''" v-if="item.checkType" src="@/assets/ZDimages/medicUniversity-3_1/icon_ytg_xz.png">
  73. <p></p>
  74. <p>{{item.chemicalName}}</p>
  75. <el-tooltip class="item" effect="dark" :content="item.cabinetName" placement="top">
  76. <p>{{item.cabinetName}}</p>
  77. </el-tooltip>
  78. <el-tooltip class="item" effect="dark" :content="item.posi" placement="top">
  79. <p>{{item.posi}}</p>
  80. </el-tooltip>
  81. <p>{{item.collegeInventory}}</p>
  82. <p>{{item.subInventory}}</p>
  83. <p>{{item.cabinetStorage}}</p>
  84. <p>{{item.remainingStorage}}</p>
  85. <p>{{item.applyNum}}</p>
  86. <p @click="pageToggle(2,item)">化学品</p>
  87. <p @click="getHxpChemicalInfo(item.chemicalId)">化学品详情</p>
  88. </div>
  89. <p class="approval-title-p">审批流程</p>
  90. <!--审批流程-->
  91. <div class="approval-list-max-box">
  92. <div class="approval-for-box">
  93. <div class="approval-for-box-min">
  94. <div class="left-max-box">
  95. <div class="left-top-box">
  96. <img src="">
  97. <!--<img src="">-->
  98. <div class="left-top-text-box">
  99. <p>发起申请</p>
  100. <p>{{dataInfo.applyUserName}}</p>
  101. </div>
  102. </div>
  103. <p class="left-bottom-p"></p>
  104. <img class="left-position-img" src="@/assets/ZDimages/medicUniversity-3_1/icon_cgsq_ytg.png">
  105. </div>
  106. <div class="right-max-box" style="border:none;">
  107. </div>
  108. </div>
  109. </div>
  110. <div class="approval-for-box" v-if="dataInfo.approvalStatus!=3" v-for="(item,index) in dataInfo.configInfoList" :key="index">
  111. <div class="approval-for-box-min">
  112. <div class="left-max-box">
  113. <div class="left-top-box" v-if="item.auditType == 1">
  114. <img v-if="item.actApplytaskNodeList[1]" src="@/assets/ZDimages/medicUniversity-3_1/icon_cgsq_ycsp.png">
  115. <img v-if="!item.actApplytaskNodeList[1]" :src="item.actApplytaskNodeList[0].applyUserList[0].avatar">
  116. <div class="left-top-text-box">
  117. <p>{{item.actApplytaskNodeList[1]?'依次审批':item.actApplytaskNodeList[0].applyUserList[0].postName}}</p>
  118. <p>{{item.approvalName}}</p>
  119. </div>
  120. </div>
  121. <div class="left-top-box" v-if="item.auditType == 2">
  122. <img v-if="item.actApplytaskNodeList[0].applyUserList[1]" src="@/assets/ZDimages/medicUniversity-3_1/icon_cgsq_ycsp.png">
  123. <img v-if="!item.actApplytaskNodeList[0].applyUserList[1]" :src="item.actApplytaskNodeList[0].applyUserList[0].avatar">
  124. <div class="left-top-text-box">
  125. <p>{{item.actApplytaskNodeList[0].applyUserList[1]?'或签':item.actApplytaskNodeList[0].applyUserList[0].postName}}</p>
  126. <p>{{item.approvalName}}</p>
  127. </div>
  128. </div>
  129. <p class="left-bottom-p" v-if="index!=dataInfo.configInfoList.length-1"></p>
  130. <img class="left-position-img" v-if="item.applyTaskStatus == 1" src="@/assets/ZDimages/medicUniversity-3_1/icon_cgsq_ytg.png">
  131. <img class="left-position-img" v-if="item.applyTaskStatus == 2" src="@/assets/ZDimages/medicUniversity-3_1/icon_cgsq_yjj.png">
  132. </div>
  133. <!--依次审批-->
  134. <div class="right-max-box" v-if="item.auditType == 1">
  135. <div class="right-for-name-box" v-for="(minItem,minIndex) in item.actApplytaskNodeList" :key="minIndex">
  136. <div class="right-for-name-box-min">
  137. <img :src="minItem.applyUserList[0].avatar">
  138. <p>{{minItem.applyUserList[0].name}}</p>
  139. <img class="right-min-img" src="@/assets/ZDimages/medicUniversity-3_1/icon_bz_1.png" v-if="minItem.nodeStatus == 1&&minIndex!=item.actApplytaskNodeList.length-1">
  140. <img class="right-min-img" src="@/assets/ZDimages/medicUniversity-3_1/icon_bz_2.png" v-if="!minItem.nodeStatus == 1&&minIndex!=item.actApplytaskNodeList.length-1">
  141. <img class="position-min-img" src="@/assets/ZDimages/medicUniversity-3_1/icon_cgsq_ytg.png" v-if="minItem.nodeStatus == 1">
  142. <img class="position-min-img" src="@/assets/ZDimages/medicUniversity-3_1/icon_cgsq_yjj.png" v-if="minItem.nodeStatus == 2">
  143. </div>
  144. </div>
  145. </div>
  146. <!--或审-->
  147. <div class="right-max-box" v-if="item.auditType == 2">
  148. <div class="right-for-name-box" v-for="(minItem,minIndex) in item.actApplytaskNodeList[0].applyUserList" :key="minIndex">
  149. <div class="right-for-name-box-min">
  150. <img :src="minItem.avatar">
  151. <p>{{minItem.name}}</p>
  152. <img class="right-min-img" src="@/assets/ZDimages/medicUniversity-3_1/icon_bz_1.png" v-if="item.actApplytaskNodeList[0].applyUserid == minItem.id&&minIndex!=item.actApplytaskNodeList[0].applyUserList.length-1">
  153. <img class="right-min-img" src="@/assets/ZDimages/medicUniversity-3_1/icon_bz_2.png" v-if="item.actApplytaskNodeList[0].applyUserid != minItem.id&&minIndex!=item.actApplytaskNodeList[0].applyUserList.length-1">
  154. <img class="position-min-img" src="@/assets/ZDimages/medicUniversity-3_1/icon_cgsq_ytg.png" v-if="item.actApplytaskNodeList[0].applyUserid == minItem.id">
  155. </div>
  156. </div>
  157. </div>
  158. </div>
  159. </div>
  160. <div class="approval-for-box" v-if="dataInfo.approvalStatus==3">
  161. <div class="approval-for-box-min">
  162. <div class="left-max-box">
  163. <div class="left-top-box">
  164. <img src="">
  165. <!--<img src="">-->
  166. <div class="left-top-text-box">
  167. <p>已撤销</p>
  168. <p>{{dataInfo.applyUserName}}</p>
  169. </div>
  170. </div>
  171. </div>
  172. <div class="right-max-box" style="border:none;">
  173. </div>
  174. </div>
  175. </div>
  176. <p class="approval-for-min-p" v-if="dataInfo.approvalStatus==2">{{refuseContentText}}</p>
  177. </div>
  178. <div class="bottom-button-box" v-if="approvalPagePropsData.type == 1">
  179. <p class="add-button-two-90" @click="rejectButton" v-hasPermi="['chemical:refuseApplytask:edit']">拒绝</p>
  180. <p class="inquire-button-one" @click="agreeButton" v-hasPermi="['chemical:applytask:edit']">同意</p>
  181. </div>
  182. </div>
  183. </div>
  184. <el-dialog title="化学品详情" :visible.sync="infoDialogType" v-if="infoDialogType" width="900px" append-to-body class="approvalPage-info-dialog-box">
  185. <div class="approvalPage-info-dialog-text-big-box">
  186. <div class="approvalPage-info-dialog-box-text-box">
  187. <p>化学品名:</p>
  188. <p>{{infoDialogData.chemicalName}}</p>
  189. </div>
  190. <div class="approvalPage-info-dialog-box-text-box">
  191. <p>化学品ID:</p>
  192. <p>{{infoDialogData.id}}</p>
  193. </div>
  194. </div>
  195. <div class="approvalPage-info-dialog-text-big-box">
  196. <div class="approvalPage-info-dialog-box-text-box">
  197. <p>CAS:</p>
  198. <p>{{infoDialogData.casNum}}</p>
  199. </div>
  200. <div class="approvalPage-info-dialog-box-text-box">
  201. <p>别名:</p>
  202. <p>{{infoDialogData.anotherName}}</p>
  203. </div>
  204. </div>
  205. <div class="approvalPage-info-dialog-text-big-box">
  206. <div class="approvalPage-info-dialog-box-text-box">
  207. <p>分类:</p>
  208. <p>{{infoDialogData.chemicalClassify}}</p>
  209. </div>
  210. <div class="approvalPage-info-dialog-box-text-box">
  211. <p>属性:</p>
  212. <p>{{infoDialogData.classifyAttribute}}</p>
  213. </div>
  214. </div>
  215. <div class="approvalPage-info-dialog-text-big-box">
  216. <div class="approvalPage-info-dialog-box-text-box">
  217. <p>纯度:</p>
  218. <p>{{infoDialogData.purity}}</p>
  219. </div>
  220. <div class="approvalPage-info-dialog-box-text-box">
  221. <p>形态:</p>
  222. <p>{{infoDialogData.chemicalShape}}</p>
  223. </div>
  224. </div>
  225. <div slot="footer" class="dialog-footer">
  226. <el-button type="primary" @click="getHxpChemicalInfoOff">确 定</el-button>
  227. </div>
  228. </el-dialog>
  229. <el-dialog title="拒绝审批意见" :visible.sync="approvalTextType" v-if="approvalTextType" width="900px" append-to-body class="approvalPage-info-dialog-box">
  230. <el-form :model="formData" ref="form" :inline="true" label-width="120px">
  231. <el-form-item label="拒绝意见:" prop="refuseContent">
  232. <el-input
  233. maxlength="50"
  234. style="width:500px;"
  235. v-model="refuseContent"
  236. placeholder="请输入拒绝意见"
  237. clearable
  238. size="small"/>
  239. </el-form-item>
  240. </el-form>
  241. <div slot="footer" class="dialog-footer">
  242. <el-button @click="rejectButton">取 消</el-button>
  243. <el-button type="primary" @click="rejectDialogButton">确 定</el-button>
  244. </div>
  245. </el-dialog>
  246. <list-page-one :listPropsData="listPropsData" v-if="pageType == 2"></list-page-one>
  247. </div>
  248. </template>
  249. <script>
  250. import listPageOne from "./listPageOne.vue"
  251. import { classifyList,hxpapplyAudit,hxpapply,approvalTask,approvalRefuse,getHxpChemicalInfo } from "@/api/medicUniversity-3_1/index";
  252. export default {
  253. name: "approvalPage",
  254. components: {
  255. listPageOne
  256. },
  257. props:{
  258. approvalPagePropsData:{},
  259. },
  260. data(){
  261. return{
  262. //页面状态
  263. pageType:0,
  264. //详情展示弹窗开关
  265. infoDialogType:false,
  266. //拒绝审批开关
  267. approvalTextType:false,
  268. formData:{},
  269. refuseContent:"",
  270. dataInfo:{},
  271. //全选状态
  272. allCheckType:false,
  273. refuseContentText:"",
  274. //化学品详情
  275. infoDialogData:{},
  276. //化学品形态
  277. optionsList:[],
  278. //化学品分类列表
  279. optionsListOne:[],
  280. //属性列表
  281. optionsListTwo:[],
  282. //机柜页面传参
  283. listPropsData:{}
  284. }
  285. },
  286. created() {
  287. },
  288. mounted(){
  289. this.classifyList();
  290. this.getDicts("chemical_shape").then(response => {
  291. this.optionsList = response.data;
  292. })
  293. this.getDicts("hxp_classifyattribute").then(response => {
  294. this.optionsListTwo = response.data;
  295. })
  296. this.hxpapplyAudit();
  297. },
  298. methods: {
  299. //同意审批
  300. agreeButton(){
  301. let self = this;
  302. let list = [];
  303. for(let i=0;i<self.dataInfo.actHxpapplyDetailList.length;i++){
  304. if(self.dataInfo.actHxpapplyDetailList[i].checkType){
  305. let obj = {
  306. chemicalId:self.dataInfo.actHxpapplyDetailList[i].chemicalId
  307. };
  308. list.push(obj);
  309. }
  310. }
  311. if(!list[0]){
  312. this.msgError('请选择通过审批的化学品')
  313. return
  314. }
  315. self.$confirm(`是否确认审批通过?`, "提示", {
  316. confirmButtonText: "确定",
  317. cancelButtonText: "取消",
  318. type: "warning"
  319. }).then(async () => {
  320. let obj = {
  321. taskId:self.dataInfo.id,
  322. actHxpapplyDetailList:list,
  323. };
  324. approvalTask(obj).then(response => {
  325. this.msgSuccess(response.msg);
  326. this.backPage();
  327. });
  328. }).catch(() => {})
  329. },
  330. //拒绝审批
  331. rejectButton(){
  332. this.approvalTextType = !this.approvalTextType;
  333. },
  334. rejectDialogButton(){
  335. let self = this;
  336. // self.$confirm(`是否确认拒绝通过?`, "提示", {
  337. // confirmButtonText: "确定",
  338. // cancelButtonText: "取消",
  339. // type: "warning"
  340. // }).then(async () => {
  341. // let obj = {
  342. // taskId:self.dataInfo.id,
  343. // refuseContent:self.refuseContent,
  344. // };
  345. // approvalRefuse(obj).then(response => {
  346. // this.msgSuccess(response.msg);
  347. // this.backPage();
  348. // });
  349. // }).catch(() => {})
  350. let obj = {
  351. taskId:self.dataInfo.id,
  352. refuseContent:self.refuseContent,
  353. };
  354. approvalRefuse(obj).then(response => {
  355. this.msgSuccess(response.msg);
  356. this.backPage();
  357. });
  358. },
  359. //获取审批详情
  360. hxpapplyAudit(){
  361. let userId = localStorage.getItem('userId')
  362. if(this.approvalPagePropsData.type == 1){
  363. hxpapplyAudit(this.approvalPagePropsData.id).then(response => {
  364. //处理添加勾选状态
  365. for(let i=0;i<response.data.actHxpapplyDetailList.length;i++){
  366. response.data.actHxpapplyDetailList[i].checkType = false;
  367. }
  368. for(let i=0;i<response.data.configInfoList.length;i++){
  369. if(response.data.configInfoList[i].auditType == 1){
  370. //依次审批
  371. for(let o=0;o<response.data.configInfoList[i].actApplytaskNodeList.length;o++){
  372. if(response.data.configInfoList[i].applyTaskStatus == 0){
  373. if(response.data.actApplytask.nowStep == response.data.configInfoList[i].actApplytaskNodeList[o].id){
  374. //进行中
  375. if(response.data.configInfoList[i].actApplytaskNodeList[o].nodeStatus == 0){
  376. if(userId == response.data.configInfoList[i].actApplytaskNodeList[o].id){
  377. response.data.configInfoList[i].approvalName = '我(审批中)'
  378. break
  379. }else{
  380. response.data.configInfoList[i].approvalName = response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList[0].name+'(审批中)'
  381. break
  382. }
  383. }
  384. }else{
  385. //未进行的
  386. if(response.data.configInfoList[i].actApplytaskNodeList[o].nodeStatus == 0){
  387. if(userId == response.data.configInfoList[i].actApplytaskNodeList[o].id){
  388. response.data.configInfoList[i].approvalName = '我(审批人)'
  389. break
  390. }else{
  391. response.data.configInfoList[i].approvalName = response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList[0].name+'(审批人)'
  392. break
  393. }
  394. }
  395. }
  396. }else if(response.data.configInfoList[i].applyTaskStatus == 1){
  397. if(response.data.configInfoList[i].actApplytaskNodeList[1]){
  398. response.data.configInfoList[i].approvalName = '已通过'
  399. break
  400. }else{
  401. response.data.configInfoList[i].approvalName = response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList[0].name+'(已通过)'
  402. break
  403. }
  404. }else if(response.data.configInfoList[i].applyTaskStatus == 2){
  405. if(userId == response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList[0].id){
  406. response.data.configInfoList[i].approvalName = '我(已拒绝)'
  407. break
  408. }else{
  409. response.data.configInfoList[i].approvalName = response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList[0].name+'(已拒绝)'
  410. break
  411. }
  412. }
  413. }
  414. }else if(response.data.configInfoList[i].auditType == 2){
  415. //或签审批
  416. for(let o=0;o<response.data.configInfoList[i].actApplytaskNodeList.length;o++) {
  417. let minNum = 0;
  418. for(let x=0;x<response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList.length;x++){
  419. if(userId == response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList[x].id){
  420. minNum++
  421. }
  422. }
  423. if(minNum == 0){
  424. //没自己
  425. if(response.data.configInfoList[i].applyTaskStatus == 0){
  426. //未审批
  427. if(response.data.actApplytask.nowStep == response.data.configInfoList[i].actApplytaskNodeList[o].id){
  428. response.data.configInfoList[i].approvalName = "审批中";
  429. }else{
  430. response.data.configInfoList[i].approvalName = "待审批";
  431. }
  432. }else if(response.data.configInfoList[i].applyTaskStatus == 1){
  433. //已通过
  434. response.data.configInfoList[i].approvalName = "已通过";
  435. }else if(response.data.configInfoList[i].applyTaskStatus == 2){
  436. //已拒绝
  437. response.data.configInfoList[i].approvalName = "已拒绝";
  438. }
  439. }else{
  440. //有自己
  441. if(response.data.configInfoList[i].applyTaskStatus == 0){
  442. //未审批
  443. if(response.data.actApplytask.nowStep == response.data.configInfoList[i].actApplytaskNodeList[o].id){
  444. response.data.configInfoList[i].approvalName = "我(审批中)";
  445. }else{
  446. response.data.configInfoList[i].approvalName = "我(审批人)";
  447. }
  448. }else if(response.data.configInfoList[i].applyTaskStatus == 1){
  449. //已通过
  450. response.data.configInfoList[i].approvalName = "我(已通过)";
  451. }else if(response.data.configInfoList[i].applyTaskStatus == 2){
  452. //已拒绝
  453. response.data.configInfoList[i].approvalName = "我(已拒绝)";
  454. }
  455. }
  456. }
  457. }
  458. }
  459. this.$set(this,'dataInfo',response.data);
  460. this.$set(this,'pageType',1);
  461. });
  462. }else if(this.approvalPagePropsData.type == 2){
  463. hxpapply(this.approvalPagePropsData.id).then(response => {
  464. //处理添加勾选状态
  465. for(let i=0;i<response.data.actHxpapplyDetailList.length;i++){
  466. if(response.data.actHxpapplyDetailList[i].tickStatus == 1){
  467. response.data.actHxpapplyDetailList[i].checkType = true;
  468. }else{
  469. response.data.actHxpapplyDetailList[i].checkType = false;
  470. }
  471. }
  472. for(let i=0;i<response.data.configInfoList.length;i++){
  473. if(response.data.configInfoList[i].auditType == 1){
  474. //依次审批
  475. for(let o=0;o<response.data.configInfoList[i].actApplytaskNodeList.length;o++){
  476. if(response.data.configInfoList[i].applyTaskStatus == 0){
  477. if(response.data.actApplytask.nowStep == response.data.configInfoList[i].actApplytaskNodeList[o].id){
  478. //进行中
  479. if(response.data.configInfoList[i].actApplytaskNodeList[o].nodeStatus == 0){
  480. if(userId == response.data.configInfoList[i].actApplytaskNodeList[o].id){
  481. response.data.configInfoList[i].approvalName = '我(审批中)'
  482. break
  483. }else{
  484. response.data.configInfoList[i].approvalName = response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList[0].name+'(审批中)'
  485. break
  486. }
  487. }
  488. }else{
  489. //未进行的
  490. if(response.data.configInfoList[i].actApplytaskNodeList[o].nodeStatus == 0){
  491. if(userId == response.data.configInfoList[i].actApplytaskNodeList[o].id){
  492. response.data.configInfoList[i].approvalName = '我(审批人)'
  493. break
  494. }else{
  495. response.data.configInfoList[i].approvalName = response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList[0].name+'(审批人)'
  496. break
  497. }
  498. }
  499. }
  500. }else if(response.data.configInfoList[i].applyTaskStatus == 1){
  501. if(response.data.configInfoList[i].actApplytaskNodeList[1]){
  502. response.data.configInfoList[i].approvalName = '已通过'
  503. break
  504. }else{
  505. response.data.configInfoList[i].approvalName = response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList[0].name+'(已通过)'
  506. break
  507. }
  508. }else if(response.data.configInfoList[i].applyTaskStatus == 2){
  509. this.refuseContentText = response.data.configInfoList[i].refuseContent;
  510. if(userId == response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList[0].id){
  511. response.data.configInfoList[i].approvalName = '我(已拒绝)'
  512. break
  513. }else{
  514. response.data.configInfoList[i].approvalName = response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList[0].name+'(已拒绝)'
  515. break
  516. }
  517. }
  518. }
  519. }else if(response.data.configInfoList[i].auditType == 2){
  520. //或签审批
  521. for(let o=0;o<response.data.configInfoList[i].actApplytaskNodeList.length;o++) {
  522. let minNum = 0;
  523. for(let x=0;x<response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList.length;x++){
  524. if(userId == response.data.configInfoList[i].actApplytaskNodeList[o].applyUserList[x].id){
  525. minNum++
  526. }
  527. }
  528. if(minNum == 0){
  529. //没自己
  530. if(response.data.configInfoList[i].applyTaskStatus == 0){
  531. //未审批
  532. if(response.data.actApplytask.nowStep == response.data.configInfoList[i].actApplytaskNodeList[o].id){
  533. response.data.configInfoList[i].approvalName = "审批中";
  534. }else{
  535. response.data.configInfoList[i].approvalName = "待审批";
  536. }
  537. }else if(response.data.configInfoList[i].applyTaskStatus == 1){
  538. //已通过
  539. response.data.configInfoList[i].approvalName = "已通过";
  540. }else if(response.data.configInfoList[i].applyTaskStatus == 2){
  541. //已拒绝
  542. this.refuseContentText = response.data.configInfoList[i].refuseContent;
  543. response.data.configInfoList[i].approvalName = "已拒绝";
  544. }
  545. }else{
  546. //有自己
  547. if(response.data.configInfoList[i].applyTaskStatus == 0){
  548. //未审批
  549. if(response.data.actApplytask.nowStep == response.data.configInfoList[i].actApplytaskNodeList[o].id){
  550. response.data.configInfoList[i].approvalName = "我(审批中)";
  551. }else{
  552. response.data.configInfoList[i].approvalName = "我(审批人)";
  553. }
  554. }else if(response.data.configInfoList[i].applyTaskStatus == 1){
  555. //已通过
  556. response.data.configInfoList[i].approvalName = "我(已通过)";
  557. }else if(response.data.configInfoList[i].applyTaskStatus == 2){
  558. //已拒绝
  559. this.refuseContentText = response.data.configInfoList[i].refuseContent;
  560. response.data.configInfoList[i].approvalName = "我(已拒绝)";
  561. }
  562. }
  563. }
  564. }
  565. }
  566. this.$set(this,'dataInfo',response.data);
  567. this.$set(this,'pageType',1);
  568. });
  569. }
  570. },
  571. //返回
  572. backPage(){
  573. this.$parent.pageToggle(1);
  574. },
  575. goEditPage(){
  576. let obj = {
  577. id:this.approvalPagePropsData.id
  578. }
  579. this.$parent.pageToggle(5,obj);
  580. },
  581. //勾选处理
  582. checkClick(item){
  583. let self = this;
  584. if(self.approvalPagePropsData.type != 1){
  585. return
  586. }
  587. item.checkType = !item.checkType;
  588. let num = 0;
  589. for(let i=0;i<self.dataInfo.actHxpapplyDetailList.length;i++){
  590. if(self.dataInfo.actHxpapplyDetailList[i].checkType){
  591. num++
  592. }
  593. }
  594. this.allCheckType = num == self.dataInfo.actHxpapplyDetailList.length;
  595. },
  596. //全选
  597. allCheckClick(){
  598. let self = this;
  599. if(self.approvalPagePropsData.type != 1){
  600. return
  601. }
  602. if(this.allCheckType){
  603. this.allCheckType = false;
  604. for(let i=0;i<self.dataInfo.actHxpapplyDetailList.length;i++){
  605. self.dataInfo.actHxpapplyDetailList[i].checkType = false;
  606. }
  607. }else{
  608. this.allCheckType = true;
  609. for(let i=0;i<self.dataInfo.actHxpapplyDetailList.length;i++){
  610. self.dataInfo.actHxpapplyDetailList[i].checkType = true;
  611. }
  612. }
  613. },
  614. //化学品详情
  615. getHxpChemicalInfo(id){
  616. let self = this;
  617. getHxpChemicalInfo(id).then(response => {
  618. //化学品形态
  619. for(let i=0;i<self.optionsList.length;i++){
  620. if(response.data.chemicalShape == self.optionsList[i].dictValue){
  621. this.$set(response.data,'chemicalShape',self.optionsList[i].dictLabel);
  622. }
  623. }
  624. //化学品分类列表
  625. for(let i=0;i<self.optionsListOne.length;i++){
  626. if(response.data.chemicalClassify == self.optionsListOne[i].id){
  627. this.$set(response.data,'chemicalClassify',self.optionsListOne[i].classifyName);
  628. }
  629. }
  630. //属性列表
  631. let list = response.data.classifyAttribute.split(',');
  632. console.log("list",list);
  633. let newText = '';
  634. for(let o=0;o<list.length;o++){
  635. for(let i=0;i<self.optionsListTwo.length;i++){
  636. if(list[o] == self.optionsList[i].dictValue){
  637. if(o == 0){
  638. newText = self.optionsList[i].dictLabel
  639. }else{
  640. newText = newText + ',' +self.optionsList[i].dictLabel
  641. }
  642. }
  643. }
  644. }
  645. this.$set(response.data,'classifyAttribute',newText);
  646. this.infoDialogData = response.data;
  647. this.infoDialogType = true;
  648. });
  649. },
  650. getHxpChemicalInfoOff(){
  651. this.infoDialogType = false;
  652. },
  653. //获取化学品分类列表
  654. classifyList(){
  655. classifyList().then(response => {
  656. this.optionsListOne = response.rows;
  657. });
  658. },
  659. pageToggle(type,item){
  660. if(type == 1){
  661. this.pageType = 1;
  662. }else if(type == 2){
  663. let obj = {
  664. cabinetName:item.chemicalName,
  665. posi:item.posi,
  666. safeUserName:item.safeUserNames,
  667. id:item.cabinetId,
  668. };
  669. this.$set(this,'listPropsData',obj);
  670. this.pageType = 2;
  671. }
  672. }
  673. }
  674. }
  675. </script>
  676. <style scoped lang="scss">
  677. .approvalPage{
  678. flex:1;
  679. display: flex;
  680. flex-direction: column;
  681. overflow: hidden;
  682. p{
  683. margin:0;
  684. padding:0;
  685. }
  686. .approvalPage-min{
  687. flex:1;
  688. display: flex;
  689. flex-direction: column;
  690. overflow: hidden;
  691. .title-box{
  692. display: flex;
  693. height:90px;
  694. border-bottom: 1px solid #D8D8D8;
  695. p:nth-child(1){
  696. flex:1;
  697. font-size:16px;
  698. line-height:90px;
  699. margin-left:18px;
  700. color:#0045AF;
  701. }
  702. .button-p{
  703. margin:25px 25px 0 0;
  704. }
  705. }
  706. .page-max-box{
  707. flex:1;
  708. display: flex;
  709. flex-direction: column;
  710. padding:20px 80px;
  711. .text-box-one{
  712. display: flex;
  713. margin-bottom:10px;
  714. font-size:16px;
  715. p{
  716. color:#333;
  717. line-height:50px;
  718. }
  719. p:nth-child(1){
  720. width:85px;
  721. text-align: right;
  722. }
  723. p:nth-child(2){
  724. width:205px;
  725. padding-left:10px;
  726. }
  727. p:nth-child(3){
  728. flex:1;
  729. }
  730. p:nth-child(4){
  731. }
  732. .colorA{
  733. color:#FF8C00;
  734. }
  735. .colorB{
  736. color:#25C402;
  737. }
  738. .colorC{
  739. color:#FA5151;
  740. }
  741. .colorD{
  742. color:#666666;
  743. }
  744. }
  745. .text-box-two{
  746. display: flex;
  747. margin-bottom:10px;
  748. font-size:16px;
  749. p{
  750. color:#333;
  751. line-height:50px;
  752. }
  753. p:nth-child(1){
  754. width:85px;
  755. text-align: right;
  756. }
  757. p:nth-child(2){
  758. padding-left:10px;
  759. flex:1;
  760. background: #F5F5F5;
  761. border-radius:4px;
  762. }
  763. }
  764. .text-box-three{
  765. display: flex;
  766. font-size:14px;
  767. p:nth-child(1){
  768. font-size:14px;
  769. width:14px;
  770. height:14px;
  771. margin:14px 11px 14px 14px;
  772. text-align: center;
  773. color:#ffb400;
  774. border-radius:50%;
  775. }
  776. p:nth-child(2){
  777. flex:1;
  778. line-height:42px;
  779. }
  780. }
  781. .table-title-box-one{
  782. display: flex;
  783. background: #f5f5f5;
  784. margin-bottom:10px;
  785. .cursor-img{
  786. cursor: pointer;
  787. }
  788. img:nth-child(1){
  789. width:16px;
  790. height:16px;
  791. margin:17px 17px 0 29px;
  792. }
  793. p{
  794. line-height: 50px;
  795. font-size:16px;
  796. }
  797. p:nth-child(2){
  798. width:130px;
  799. }
  800. p:nth-child(3){
  801. width:184px;
  802. }
  803. p:nth-child(4){
  804. width:299px;
  805. }
  806. p:nth-child(5){
  807. width:288px;
  808. }
  809. p:nth-child(6){
  810. flex:1;
  811. }
  812. p:nth-child(7){
  813. width:145px;
  814. }
  815. }
  816. .table-list-box-one{
  817. display: flex;
  818. .cursor-img{
  819. cursor: pointer;
  820. }
  821. img:nth-child(1){
  822. width:16px;
  823. height:16px;
  824. margin:13px 17px 0 29px;
  825. }
  826. p{
  827. line-height: 42px;
  828. font-size:14px;
  829. }
  830. p:nth-child(2){
  831. width:130px;
  832. }
  833. p:nth-child(3){
  834. width:184px;
  835. }
  836. p:nth-child(4){
  837. width:299px;
  838. padding-right:20px;
  839. display:block;
  840. overflow:hidden;
  841. text-overflow:ellipsis;
  842. white-space:nowrap;
  843. }
  844. p:nth-child(5){
  845. width:288px;
  846. padding-right:20px;
  847. display:block;
  848. overflow:hidden;
  849. text-overflow:ellipsis;
  850. white-space:nowrap;
  851. }
  852. p:nth-child(6){
  853. flex:1;
  854. }
  855. p:nth-child(7){
  856. width:145px;
  857. color: #0045AF;
  858. }
  859. }
  860. .table-title-box-two{
  861. display: flex;
  862. background: #f5f5f5;
  863. margin-bottom:10px;
  864. .cursor-img{
  865. cursor: pointer;
  866. }
  867. img:nth-child(1){
  868. width:16px;
  869. height:16px;
  870. margin:17px 17px 0 18px;
  871. }
  872. p{
  873. line-height: 50px;
  874. font-size:16px;
  875. }
  876. p:nth-child(2){
  877. width:72px;
  878. }
  879. p:nth-child(3){
  880. width:113px;
  881. }
  882. p:nth-child(4){
  883. width:121px;
  884. }
  885. p:nth-child(5){
  886. width:165px;
  887. }
  888. p:nth-child(6){
  889. width:121px;
  890. }
  891. p:nth-child(7){
  892. width:136px;
  893. }
  894. p:nth-child(8){
  895. width:132px;
  896. }
  897. p:nth-child(9){
  898. width:169px;
  899. }
  900. p:nth-child(10){
  901. flex:1;
  902. }
  903. p:nth-child(11){
  904. width:145px;
  905. margin-left:55px;
  906. }
  907. }
  908. .table-list-box-two{
  909. display: flex;
  910. .cursor-img{
  911. cursor: pointer;
  912. }
  913. img:nth-child(1){
  914. width:16px;
  915. height:16px;
  916. margin:17px 17px 0 18px;
  917. }
  918. p{
  919. line-height: 50px;
  920. font-size:14px;
  921. }
  922. p:nth-child(2){
  923. width:72px;
  924. }
  925. p:nth-child(3){
  926. width:113px;
  927. }
  928. p:nth-child(4){
  929. width:121px;
  930. padding-right:20px;
  931. display:block;
  932. overflow:hidden;
  933. text-overflow:ellipsis;
  934. white-space:nowrap;
  935. }
  936. p:nth-child(5){
  937. width:165px;
  938. padding-right:20px;
  939. display:block;
  940. overflow:hidden;
  941. text-overflow:ellipsis;
  942. white-space:nowrap;
  943. }
  944. p:nth-child(6){
  945. width:121px;
  946. }
  947. p:nth-child(7){
  948. width:136px;
  949. }
  950. p:nth-child(8){
  951. width:132px;
  952. }
  953. p:nth-child(9){
  954. width:169px;
  955. }
  956. p:nth-child(10){
  957. flex:1;
  958. }
  959. p:nth-child(11){
  960. width:80px;
  961. height:28px;
  962. line-height:28px;
  963. margin-right:14px;
  964. color:#0045af;
  965. border:1px solid #0045af;
  966. border-radius:4px;
  967. text-align: center;
  968. margin-top:11px;
  969. cursor: pointer;
  970. }
  971. p:nth-child(12){
  972. width:100px;
  973. height:28px;
  974. line-height:28px;
  975. margin-right:14px;
  976. color:#0045af;
  977. border:1px solid #0045af;
  978. border-radius:4px;
  979. text-align: center;
  980. margin-top:11px;
  981. cursor: pointer;
  982. }
  983. }
  984. .approval-title-p{
  985. font-size:16px;
  986. background: #f5f5f5;
  987. line-height: 50px;
  988. margin-bottom:23px;
  989. padding-left:20px;
  990. margin-top:10px;
  991. }
  992. .approval-list-max-box{
  993. .approval-for-box{
  994. .approval-for-box-min{
  995. display: flex;
  996. .left-max-box{
  997. display: flex;
  998. flex-direction: column;
  999. width:219px;
  1000. position: relative;
  1001. .left-top-box{
  1002. display: flex;
  1003. img{
  1004. width:60px;
  1005. height:60px;
  1006. border-radius:4px;
  1007. margin-right:30px;
  1008. }
  1009. .left-top-text-box{
  1010. p{
  1011. line-height:30px;
  1012. font-size:14px;
  1013. color:#333;
  1014. }
  1015. }
  1016. }
  1017. .left-bottom-p{
  1018. width:2px;
  1019. flex:1;
  1020. background: #e0e0e0;
  1021. margin-left:29px;
  1022. }
  1023. .left-position-img{
  1024. width:20px;
  1025. height:20px;
  1026. position: absolute;
  1027. top:50px;
  1028. left:50px;
  1029. }
  1030. }
  1031. .right-max-box{
  1032. flex:1;
  1033. min-height:80px;
  1034. border:1px solid #e0e0e0;
  1035. margin-bottom:27px;
  1036. padding:19px 14px 0;
  1037. .right-for-name-box{
  1038. display: inline-block;
  1039. margin-bottom:17px;
  1040. .right-for-name-box-min{
  1041. display: flex;
  1042. position: relative;
  1043. img:nth-child(1){
  1044. width:40px;
  1045. height:40px;
  1046. border-radius:4px;
  1047. margin-right:8px;
  1048. }
  1049. p:nth-child(2){
  1050. line-height:44px;
  1051. font-size:14px;
  1052. }
  1053. .right-min-img{
  1054. width:12px;
  1055. height:10px;
  1056. margin:16px 17px 0 13px;
  1057. }
  1058. .position-min-img{
  1059. width:20px;
  1060. height:20px;
  1061. position: absolute;
  1062. top:30px;
  1063. left:30px;
  1064. }
  1065. }
  1066. }
  1067. }
  1068. .right-max-box-border-none{
  1069. border:none;
  1070. }
  1071. .right-max-end{
  1072. margin-bottom:0;
  1073. }
  1074. }
  1075. }
  1076. .approval-for-min-p{
  1077. margin:20px 95px;
  1078. font-size:14px;
  1079. line-height:20px;
  1080. color:#666666;
  1081. background: #F5F5F5;
  1082. padding:10px 35px;
  1083. word-wrap:break-word;
  1084. word-break:break-all;
  1085. overflow: hidden;
  1086. }
  1087. }
  1088. .bottom-button-box{
  1089. display: flex;
  1090. width:217px;
  1091. margin:30px auto;
  1092. p{
  1093. width:100px;
  1094. }
  1095. p:nth-child(1){
  1096. margin-right:17px;
  1097. }
  1098. }
  1099. }
  1100. }
  1101. }
  1102. </style>
  1103. <style lang="scss">
  1104. .approvalPage-info-dialog-box{
  1105. p{
  1106. margin:0;
  1107. }
  1108. .approvalPage-info-dialog-text-big-box{
  1109. display: flex;
  1110. .approvalPage-info-dialog-box-text-box:nth-child(1){
  1111. margin-right:100px;
  1112. margin-left:20px;
  1113. }
  1114. .approvalPage-info-dialog-box-text-box{
  1115. width:357px;
  1116. display: flex;
  1117. p{
  1118. line-height:50px;
  1119. color:#333;
  1120. font-size:16px;
  1121. }
  1122. p:nth-child(1){
  1123. width:80px;
  1124. text-align: right;
  1125. }
  1126. p:nth-child(2){
  1127. flex:1;
  1128. text-align: right;
  1129. }
  1130. }
  1131. }
  1132. .el-dialog__footer{
  1133. text-align:center;
  1134. }
  1135. }
  1136. </style>