AnalysisHandleSituation.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  1. <template>
  2. <div id="analysis-handle-situation" class="block h100">
  3. <div class="black-title">
  4. <span class="header_info">提醒及督办情况</span>
  5. <span class="table_info">共有{{totalCount}}条记录</span>
  6. </div>
  7. <div v-loading="loading" element-loading-text="数据加载中"
  8. element-loading-spinner="el-icon-loading"
  9. element-loading-background="rgba(3, 30, 57, 0.8)">
  10. <div class="time_content">
  11. <div class="time_content_title">
  12. <div class="single_content_title" v-for="(item,index) in timeList" :key="index" >
  13. <div class="single_content">
  14. <div :class="item.color"></div>
  15. <span class="circle_name">{{item.name}}</span>
  16. </div>
  17. </div>
  18. </div>
  19. <div v-if="analysisObject['analysisForthLevel']!=''" class="first_list" :key="1">
  20. <!-- <div v-if="analysisObject['analysisForthLevel']!=''" @mouseenter="pauseTimer" @mouseleave="continueTimer" class="first_list" :key="1">-->
  21. <div v-if="situationList.length >0" ref="situation_list" class="list flex4">
  22. <ul ref="scroll-list">
  23. <li v-for="(item,index) in situationList" :key="index" class="item" :class="[item.chosen?'item_choose':'']">
  24. <span class="nameStatus" @click="chooseStep(item.SITUATION_CODE)">{{item.NAME.slice(0,20)}}</span>
  25. <span class="circle_4 circle_width"></span>
  26. <span class="fr-countStatus" @click="chooseSingleSituation(item.SITUATION_CODE,'1','1')">{{ item.acceptRemind}}</span>
  27. <span class="circle_3 circle_width"></span>
  28. <span class="fr-countStatus" @click="chooseSingleSituation(item.SITUATION_CODE,'1','2')">{{ item.acceptUrge}}</span>
  29. <span class="circle_2 circle_width"></span>
  30. <span class="fr-countStatus" @click="chooseSingleSituation(item.SITUATION_CODE,'2','1')">{{ item.handleRemind}}</span>
  31. <span class="circle_1 circle_width"></span>
  32. <span class="fr-countStatus" @click="chooseSingleSituation(item.SITUATION_CODE,'2','2')">{{ item.handleUrge}}</span>
  33. </li>
  34. </ul>
  35. </div>
  36. <div v-else class="else_div">
  37. <span>暂无数据</span>
  38. </div>
  39. </div>
  40. <div v-if="analysisObject['analysisForthLevel']==''" class="first_list" :key="2">
  41. <div v-if="basicList.length >0" class="list flex4">
  42. <ul ref="scroll-list">
  43. <li v-for="item in basicList" :key="item.RN" class="item" :class="[item.chosen?'item_choose':'']">
  44. <span class="nameStatus" @click="chooseBasicStep(item.MATTER_CODE)">{{item.NAME.slice(0,20)}}</span>
  45. <span class="circle_4 circle_width"></span>
  46. <span class="fr-countStatus" @click="chooseSingleMatter(item.MATTER_CODE,'1','1')">{{ item.acceptRemind}}</span>
  47. <span class="circle_3 circle_width"></span>
  48. <span class="fr-countStatus" @click="chooseSingleMatter(item.MATTER_CODE,'1','2')">{{ item.acceptUrge}}</span>
  49. <span class="circle_2 circle_width"></span>
  50. <span class="fr-countStatus" @click="chooseSingleMatter(item.MATTER_CODE,'2','1')">{{ item.handleRemind}}</span>
  51. <span class="circle_1 circle_width"></span>
  52. <span class="fr-countStatus" @click="chooseSingleMatter(item.MATTER_CODE,'2','2')">{{ item.handleUrge}}</span>
  53. </li>
  54. </ul>
  55. </div>
  56. <div v-else class="else_div">
  57. <span>暂无数据</span>
  58. </div>
  59. </div>
  60. </div>
  61. </div>
  62. </div>
  63. </template>
  64. <script>
  65. import {continueScroll, rescrollFun, scrollFun, stopScroll} from "@/scroll";
  66. import{mapState,mapMutations} from 'vuex';
  67. export default {
  68. name: "AnalysisHandleSituation",
  69. data(){
  70. return{
  71. loading: true,
  72. totalCount:0,
  73. timeList:[
  74. {
  75. id:'4',
  76. code:'sltx',
  77. color:'circle_4',
  78. name:'受理提醒',
  79. },
  80. {
  81. id:'3',
  82. code:'sldb',
  83. color:'circle_3',
  84. name:'受理督办',
  85. },
  86. {
  87. id:'2',
  88. code:'bjtx',
  89. color:'circle_2',
  90. name:'办结提醒',
  91. },
  92. {
  93. id:'1',
  94. code:'bjdb',
  95. color:'circle_1',
  96. name:'办结督办',
  97. },
  98. ],
  99. itemList:[],
  100. situationList:[],
  101. basicList:[],
  102. }
  103. },
  104. computed:{
  105. ...mapState({
  106. analysisObject:'analysis',
  107. reFresh:'analysisRefresh',
  108. })
  109. },
  110. mounted() {
  111. this.typeShow()
  112. },
  113. filters:{
  114. stateType(state){
  115. let obj = {
  116. '1':'网上申报',
  117. '2':'网上预审',
  118. '3':'收件',
  119. '4':'补正',
  120. '5':'受理',
  121. '6':'特别程序',
  122. '7':'决定',
  123. '8':'制发证',
  124. '9':'审查',
  125. }
  126. return obj[state]
  127. }
  128. },
  129. methods:{
  130. chooseSingleSituation(code,status,type){
  131. this.$router.push('/origion/handleSituation');
  132. this.handleSituationRefresh(false);
  133. this.$nextTick(() => {
  134. this.handleSituationSingleChange([
  135. {
  136. name:'handleSituationForthLevel',
  137. value:this.analysisObject['analysisForthLevel']
  138. },
  139. {
  140. name:'handleSituationFifthLevel',
  141. value:code
  142. },
  143. {
  144. name:'handleSituationSixthLevel',
  145. value:status
  146. },
  147. {
  148. name:'handleSituationSeventhLevel',
  149. value:type
  150. },
  151. {
  152. name:'handleSituationEighthLevel',
  153. value:''
  154. },
  155. ])
  156. })
  157. },
  158. chooseSingleMatter(code,status,type){
  159. this.$router.push('/origion/handleSituation');
  160. this.handleSituationRefresh(false);
  161. this.$nextTick(() => {
  162. this.handleSituationSingleChange([
  163. {
  164. name:'handleSituationForthLevel',
  165. value:code
  166. },
  167. {
  168. name:'handleSituationFifthLevel',
  169. value:''
  170. },
  171. {
  172. name:'handleSituationSixthLevel',
  173. value:status
  174. },
  175. {
  176. name:'handleSituationSeventhLevel',
  177. value:type
  178. },
  179. {
  180. name:'handleSituationEighthLevel',
  181. value:''
  182. },
  183. ])
  184. })
  185. },
  186. chooseBasicStep(index){
  187. for(let i=0;i<this.basicList.length;i++){
  188. if(index == this.basicList[i].MATTER_CODE){
  189. this.basicList[i].chosen = true;
  190. }else{
  191. this.basicList[i].chosen = false;
  192. }
  193. }
  194. this.analysisSingleChange([
  195. {
  196. name:'analysisForthLevel',
  197. value:index
  198. },
  199. {
  200. name:'analysisFifthLevel',
  201. value:''
  202. },
  203. ])
  204. },
  205. chooseStep(index){
  206. for(let i=0;i<this.situationList.length;i++){
  207. if(index == this.situationList[i].SITUATION_CODE){
  208. this.situationList[i].chosen = true;
  209. }else{
  210. this.situationList[i].chosen = false;
  211. }
  212. }
  213. this.analysisSingleChange([
  214. {
  215. name:'analysisFifthLevel',
  216. value:index
  217. },
  218. ])
  219. // this.analysisFifthLevel(index);
  220. },
  221. chooseStepOrigion(index){
  222. for(let i=0;i<this.situationList.length;i++){
  223. if(index == this.situationList[i].SITUATION_CODE){
  224. this.stopHight(i);
  225. this.situationList[i].chosen = true;
  226. }else{
  227. this.situationList[i].chosen = false;
  228. }
  229. }
  230. // this.analysisFifthLevel(index);
  231. },
  232. typeShow(){
  233. if(this.analysisObject['analysisForthLevel']==''){
  234. this.basicShow();
  235. }else if(this.analysisObject['analysisForthLevel']!=''){
  236. this.situationShow();
  237. }
  238. },
  239. basicShow(){
  240. this.loading=true;
  241. this.$request({
  242. url:'/YWTBApi/queryRemindInfoListOneLevel',
  243. method:'post',
  244. data:{
  245. "DATA_TYPE":this.analysisObject['analysisFirstLevel'],
  246. "ORGANIZATION":this.analysisObject['analysisSecondLevel'],
  247. 'TYPE':this.analysisObject['analysisThirdLevel'],
  248. "UNIT_NAME":this.analysisObject['analysisUnit'],
  249. "SORT_FIELD":this.analysisObject['analysisUrgeType'],
  250. //'DAY_COUNT':this.dayCount
  251. }
  252. }).then(response => {
  253. let dataArr = response.data.msg[0].Rows
  254. if(dataArr.length > 0){
  255. this.basicList = [];
  256. for(let i=0;i<dataArr.length;i++){
  257. let tempdata = {
  258. NAME: dataArr[i].NAME, //事项名称
  259. handleUrge: dataArr[i].BJ_DB!=undefined?dataArr[i].BJ_DB.toString():'0', //办结督办
  260. handleRemind: dataArr[i].BJ_TX!=undefined?dataArr[i].BJ_TX.toString():'0', //办结提醒
  261. acceptUrge: dataArr[i].SL_DB!=undefined?dataArr[i].SL_DB.toString():'0', //受理督办
  262. acceptRemind: dataArr[i].SL_TX!=undefined?dataArr[i].SL_TX.toString():'0', //受理提醒
  263. MATTER_CODE: dataArr[i].MATTER_CODE,
  264. chosen:false,
  265. }
  266. this.basicList.push(tempdata);
  267. }
  268. this.totalCount = response.data.msg[0].TotalRowCount;
  269. }else{
  270. this.basicList = [];
  271. this.totalCount =0;
  272. }
  273. this.$nextTick(() => {
  274. this.loading=false;
  275. // this.stopTimer();
  276. // if(this.basicList.length > 0){
  277. // this.startTimer()
  278. // }
  279. })
  280. })
  281. },
  282. itemShow(){
  283. this.loading=true;
  284. this.$request({
  285. url:'/YWTBApi/queryBanjianListGroupMatterCode',
  286. //url:'/YWTBApi/queryBanjianListGroupMatterCode',
  287. method:'post',
  288. data:{
  289. "ORGANIZATION":this.analysisObject['analysisSecondLevel'],
  290. 'TYPE':this.analysisObject['analysisThirdLevel'],
  291. 'MATTER_CODE':this.analysisObject['analysisForthLevel'],
  292. 'DAY_COUNT':this.analysisObject['analysisTimer'],
  293. }
  294. }).then(response => {
  295. let dataArr = response.data.msg[0].Rows
  296. if(dataArr.length > 0){
  297. this.itemList = [];
  298. for(let i=0;i<dataArr.length;i++){
  299. if(dataArr[i].NAME!=undefined){
  300. this.itemList.push(dataArr[i]);
  301. }
  302. }
  303. this.totalCount = response.data.msg[0].TotalRowCount;
  304. }else{
  305. this.itemList = [];
  306. this.totalCount = 0;
  307. }
  308. this.$nextTick(() => {
  309. this.loading=false;
  310. // this.stopTimer();
  311. // if(this.itemList.length > 0){
  312. // this.startTimer()
  313. // }
  314. })
  315. })
  316. },
  317. situationShow(){
  318. this.loading=true;
  319. this.$request({
  320. url:'/YWTBApi/queryRemindInfoListTwoLevel',
  321. method:'post',
  322. data:{
  323. // 'ORGANIZATION':this.secondLevel,
  324. // 'TYPE':this.thirdLevel,
  325. 'MATTER_CODE':this.analysisObject['analysisForthLevel'],
  326. // 'DAY_COUNT':this.dayCount
  327. }
  328. }).then(response => {
  329. let dataArr = response.data.msg[0].Rows
  330. if(dataArr.length > 0){
  331. this.situationList = [];
  332. for(let i=0;i<dataArr.length;i++){
  333. let tempdata = {
  334. NAME: dataArr[i].SITUATION, //事项名称
  335. handleUrge: dataArr[i].BD!=undefined?dataArr[i].BD.toString():'0', //办结督办
  336. handleRemind: dataArr[i].BT!=undefined?dataArr[i].BT.toString():'0', //办结提醒
  337. acceptUrge: dataArr[i].SD!=undefined?dataArr[i].SD.toString():'0', //受理督办
  338. acceptRemind: dataArr[i].ST!=undefined?dataArr[i].ST.toString():'0', //受理提醒
  339. SITUATION_CODE: dataArr[i].SITUATION_CODE,
  340. chosen:false,
  341. }
  342. this.situationList.push(tempdata);
  343. }
  344. this.totalCount = response.data.msg[0].TotalRowCount;
  345. }else{
  346. this.situationList = [];
  347. this.totalCount = 0;
  348. }
  349. this.$nextTick(() => {
  350. if(this.analysisObject['analysisFifthLevel']!=''){
  351. this.chooseStepOrigion(this.analysisObject['analysisFifthLevel']);
  352. }
  353. this.loading=false;
  354. // this.stopTimer();
  355. // if(this.situationList.length > 0){
  356. // this.startTimer()
  357. // }
  358. })
  359. })
  360. },
  361. stopHight(index) {
  362. // 拿到表格挂载后的真实DOM
  363. const table = this.$refs['situation_list'];
  364. // 拿到表格中承载数据的div元素
  365. //const divData = table.clientHeight;
  366. // 拿到元素后,对元素进行增加距离顶部距离,实现滚动效果
  367. // 元素自增距离顶部像素
  368. // divData.scrollTop += this.rollPx;
  369. // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度)
  370. this.$nextTick(() => {
  371. table.scrollTop = (index) * 36;
  372. })
  373. },
  374. startTimer(){
  375. if(this.$refs['scroll-list'].clientHeight * 1 > this.$refs['scroll-list'].parentElement.clientHeight * 1) {
  376. scrollFun(this.$refs['scroll-list'], 'top', -this.$refs['scroll-list'].clientHeight + this.$refs['scroll-list'].parentElement.clientHeight)
  377. }
  378. },
  379. stopTimer(){
  380. if(this.$refs['scroll-list']!=undefined)
  381. rescrollFun(this.$refs['scroll-list'],'top')
  382. },
  383. pauseTimer(){
  384. if(this.$refs['scroll-list']!=undefined)
  385. stopScroll(this.$refs['scroll-list'].timer)
  386. },
  387. continueTimer(){
  388. if(this.$refs['scroll-list'].clientHeight * 1 > this.$refs['scroll-list'].parentElement.clientHeight * 1) {
  389. continueScroll(this.$refs['scroll-list'], 'top', -this.$refs['scroll-list'].clientHeight + this.$refs['scroll-list'].parentElement.clientHeight)
  390. }
  391. },
  392. ...mapMutations(['analysis','analysisRefresh','analysisSingleChange','handleSituation','handleSituationRefresh','handleSituationSingleChange'])
  393. },
  394. watch: {
  395. analysisObject(){
  396. this.typeShow()
  397. // this.chooseStepOrigion(val['analysisFifthLevel']);
  398. },
  399. }
  400. }
  401. </script>
  402. <style scoped lang="scss">
  403. #analysis-handle-situation{
  404. .black-title{
  405. height: 32px;
  406. display: flex;
  407. color: #fff;
  408. font-size: 20px;
  409. font-weight: bold;
  410. justify-content: flex-end;
  411. align-items: center;
  412. .header_info{
  413. width: 40%;
  414. display: flex;
  415. align-items: center;
  416. justify-content:center;
  417. }
  418. .table_info{
  419. width:30%;
  420. font-size: 12px;
  421. font-weight: normal;
  422. display: flex;
  423. align-items:flex-end;
  424. justify-content:flex-end;
  425. }
  426. }
  427. .time_content{
  428. padding-top: 5px;
  429. width: 100%;
  430. height:100%;
  431. display: flex;
  432. flex-direction: column;
  433. justify-content: center;
  434. align-items: center;
  435. .time_content_title{
  436. width: 100%;
  437. height: 15%;
  438. display: flex;
  439. flex-direction: row;
  440. justify-content: flex-end;
  441. align-items: center;
  442. .table_info{
  443. padding: 8px 10px 4px;
  444. color: #fff;
  445. }
  446. .single_content_title{
  447. width: 13%;
  448. height: 100%;
  449. display: flex;
  450. justify-content: center;
  451. align-items: center;
  452. .single_content{
  453. display: flex;
  454. flex-direction: row;
  455. justify-content: center;
  456. align-items: center;
  457. .circle_name{
  458. color: #FFF;
  459. font-size: 12px;
  460. }
  461. }
  462. }
  463. }
  464. .first_list{
  465. width: 100%;
  466. height: 100%;
  467. }
  468. }
  469. ul{
  470. width: 100%;
  471. position: absolute;
  472. cursor: pointer;
  473. .item_choose{
  474. color: #fdbf00;
  475. }
  476. li{
  477. padding-left: 10px;
  478. padding-right: 10px;
  479. color: #fff;
  480. height: 40px;
  481. line-height: 40px;
  482. .nameStatus{
  483. width: 56%;
  484. float: left;
  485. margin-right: 15px;
  486. }
  487. .fr-typeStatus{
  488. width: 7%;
  489. float: right;
  490. margin-right: 20px;
  491. }
  492. .fr-countStatus{
  493. width: 6%;
  494. float: left;
  495. margin-right: 10px;
  496. display: flex;
  497. flex-direction: row;
  498. justify-content: flex-end;
  499. }
  500. .name{
  501. margin-right: 6px;
  502. }
  503. &:nth-child(2n+1){
  504. background:linear-gradient(to right,#093972, #093972);
  505. }
  506. }
  507. li:hover{
  508. color: #fdbf00;
  509. }
  510. }
  511. .else_div{
  512. padding-top: 50px;
  513. width: 100%;
  514. height: 100%;
  515. display: flex;
  516. flex-direction: row;
  517. justify-content: center;
  518. align-items: center;
  519. span{
  520. color: #00d8ff;
  521. }
  522. }
  523. .circle_1{
  524. background-color: #eca378;
  525. width: 5px;
  526. height: 5px;
  527. border-radius: 2.5px;
  528. margin-right: 5px;
  529. }
  530. .circle_2{
  531. background-color: #b5d571;
  532. width: 5px;
  533. height: 5px;
  534. border-radius: 2.5px;
  535. margin-right: 5px;
  536. }
  537. .circle_3{
  538. background-color: #7ec6f6;
  539. width: 5px;
  540. height: 5px;
  541. border-radius: 2.5px;
  542. margin-right: 5px;
  543. }
  544. .circle_4{
  545. background-color: #e60114;
  546. width: 5px;
  547. height: 5px;
  548. border-radius: 2.5px;
  549. margin-right: 5px;
  550. }
  551. .circle_5{
  552. background-color: #e3620a;
  553. width: 5px;
  554. height: 5px;
  555. border-radius: 2.5px;
  556. margin-right: 5px;
  557. }
  558. .circle_6{
  559. background-color: #f9fc01;
  560. width: 5px;
  561. height: 5px;
  562. border-radius: 2.5px;
  563. margin-right: 5px;
  564. }
  565. .circle_7{
  566. background-color: #63c2a2;
  567. width: 5px;
  568. height: 5px;
  569. border-radius: 2.5px;
  570. margin-right: 5px;
  571. }
  572. .circle_width{
  573. float:left;
  574. margin-top: 18px;
  575. }
  576. }
  577. </style>