expenseMobile.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495
  1. <template>
  2. <div class="expenseMobile-all">
  3. <el-dialog top="20vh" custom-class="selfDialog" width="95%" title="详情" :visible.sync="expenseMobileVisible">
  4. <div class="dialog-title">详情</div>
  5. <div class="dialog-info">
  6. <div class="dialog-info-ms">费用描述:{{dailydata.instructions}}</div>
  7. <div class="dialog-info-zj">费用总计:{{townum(dailydata.sumPrice)}}</div>
  8. <div class="dialog-info-sh">
  9. <div>财务审核:{{dailydata.fAuditDesc}}</div>
  10. <div>总经理审核:{{dailydata.mAuditDesc}}</div>
  11. <div>是否付款:{{ dailydata.isPay==1?'已付款':'未付款' }}</div>
  12. </div>
  13. </div>
  14. <div class="dialog-title">具体费用</div>
  15. <div class="dialog-list">
  16. <div v-for="(items,index) in dailydata.feeContents" :key="index" class="dialog-list-li">
  17. <div>费用项目:{{items.priceName}}</div>
  18. <div class="info-sl">
  19. <div>数量:{{items.quantity}}</div>
  20. <div>单价(CNY):{{townum(items.price)}}</div>
  21. <div>小计(CNY):{{townum(items.itemTotal)}}</div>
  22. </div>
  23. <div>备注:{{items.remark}}</div>
  24. </div>
  25. </div>
  26. </el-dialog>
  27. <div v-if="platejudgment==1">
  28. <div class="expenseMobile-top">
  29. <div class="expenseMobile-title">{{this.portType!=2?'日常付款申请':''}}</div>
  30. <div class="expenseMobile-search">
  31. <el-input clearable placeholder="请输入费用描述" v-model="input" class="input-with-select">
  32. <el-button @click="searchbtn" slot="append" icon="el-icon-search"></el-button>
  33. </el-input>
  34. </div>
  35. </div>
  36. <div id="scroll-div" ref="element" class="daily-box">
  37. <div class="daily-card" v-for="(item,index) in tableData" :key="index">
  38. <div class="card-description">费用描述:{{item.instructions}}</div>
  39. <div class="card-date">申请时间:{{item.createTime}}</div>
  40. <div class="card-expense">
  41. <span>费用总计:{{townum(item.sumPrice)}}</span>
  42. <span>申请人:{{item.createUser}}</span>
  43. </div>
  44. <div class="card-btn">
  45. <el-button @click="infobtn(item)" size="mini">详情</el-button>
  46. <el-button size="mini" @click="PostDelDailyPaymentAudit(item.id,1)" type="primary">通过</el-button>
  47. <el-button size="mini" @click="PostDelDailyPaymentAudit(item.id,2)" type="danger">拒绝</el-button>
  48. </div>
  49. </div>
  50. </div>
  51. <div id="tshezi" style="padding-bottom: 65px;">
  52. <div v-if="!zwgd" class="expenseMobile-zwgd">暂无更多</div>
  53. <div v-if="zwgd" class="expenseMobile-zwgd">加载中!</div>
  54. </div>
  55. </div>
  56. <div v-else>
  57. <div class="expenseMobile-top">
  58. <div class="expenseMobile-title">{{this.portType!=2?'费用审核':''}}</div>
  59. <div class="expenseMobile-search">
  60. <el-input clearable placeholder="请输入团组名称" v-model="value" class="input-with-select">
  61. <el-button @click="searchexamine" slot="append" icon="el-icon-search"></el-button>
  62. </el-input>
  63. </div>
  64. </div>
  65. <div id="examine-div" class="examine-box">
  66. <div v-for="(info,index) in groupData" :key="index" class="examine-card">
  67. <div class="examine-card-name">团组名称:{{info.teamName}}</div>
  68. <div class="examine-card-date">出访时间:{{cltade(info.visitDate)}}</div>
  69. <div class="examine-card-client">客户名称:{{info.clientName}}</div>
  70. <div class="examine-card-operator">
  71. <div>天数/人数:{{info.visitDays}}/{{info.visitPNumber}}</div>
  72. <div>接团操作人:{{info.jietuanOperator}}</div>
  73. </div>
  74. <div class="examine-card-btn">
  75. <el-button @click="CheckCost(info)" size="mini" type="primary">查看费用</el-button>
  76. </div>
  77. </div>
  78. </div>
  79. </div>
  80. <div class="expenseMobile-tabtn">
  81. <div class="tabtn-box">
  82. <div @click="rcbtn">
  83. <div v-if="platejudgment==1"><i style="font-size:22px;" class="el-icon-s-goods"></i></div>
  84. <div v-else><i style="font-size:20px;" class="el-icon-goods"></i></div>
  85. <div style="font-size:14px;">日常</div>
  86. </div>
  87. <div @click="tzbtn">
  88. <div v-if="platejudgment==2"><i style="font-size:22px;" class="el-icon-s-goods"></i></div>
  89. <div v-else><i style="font-size:20px;" class="el-icon-goods"></i></div>
  90. <div style="font-size:14px;">团组</div>
  91. </div>
  92. </div>
  93. </div>
  94. </div>
  95. </template>
  96. <script>
  97. export default {
  98. data () {
  99. return {
  100. uid:'',
  101. portType:0,
  102. tableData:[],
  103. input:'',
  104. expenseMobileVisible:false,
  105. dailydata:{},
  106. pageIndex:1,
  107. pageIndexExamine:1,
  108. loadflagExamine:false,
  109. loadflag:false,
  110. zwgd:true,
  111. platejudgment:2,
  112. value:'',
  113. groupData:[],
  114. }
  115. },
  116. methods:{
  117. //保留两位小数
  118. townum(val){
  119. val=Number(val);
  120. return val.toFixed(2);
  121. },
  122. //保留两位小数
  123. cltade(val){
  124. return val.split(" ")[0];
  125. },
  126. //翻页
  127. PageTurning(){
  128. this.pageIndex++;
  129. this.postPageDailyPaymentList();
  130. },
  131. //翻页Examine
  132. PageTurningExamine(){
  133. this.pageIndexExamine++;
  134. this.PostExpenseAuditGroupPageItems();
  135. },
  136. //获取列表
  137. postPageDailyPaymentList() {
  138. var url = "/api/Financial/PostPageSearchDailyPaymentList"
  139. var that = this
  140. this.$axios({
  141. method: 'post',
  142. url: url,
  143. headers: {
  144. Authorization: 'Bearer ' + this.token
  145. },
  146. data: {
  147. portType: 1,
  148. pageIndex: that.pageIndex,
  149. pageSize: 10,
  150. companyId: -1,
  151. financialAuditStatus: -1,//财务审核
  152. managerAuditStatus: that.uid==21?0:-1, //总经理审核
  153. feeTypeId: -1, //费用类型
  154. feeSubTypeId: -1, //费用子类型
  155. feeDesc: that.input, //描述
  156. createUserId: -1, //申请人
  157. isPaySign:-1 //是否支付
  158. }
  159. }).then(function (res) {
  160. if (res.data.code == 200) {
  161. var magarr=res.data.data.dataList;
  162. if(magarr.length<10){
  163. that.zwgd=false;
  164. }
  165. for(let j=0;j<magarr.length;j++){
  166. that.tableData.push(magarr[j])
  167. }
  168. that.loadflag=true;
  169. // that.tableData = res.data.data.dataList;
  170. }
  171. })
  172. },
  173. //审核
  174. PostDelDailyPaymentAudit(val1,val2){
  175. var url = "/api/Financial/PostDelDailyPaymentAudit"
  176. var that = this
  177. this.$axios({
  178. method: 'post',
  179. url: url,
  180. headers: {
  181. Authorization: 'Bearer ' + that.token
  182. },
  183. data: {
  184. id: val1,
  185. auditType:that.uid==21?2:1,
  186. auditStatus:val2
  187. }
  188. }).then(function (res) {
  189. if (res.data.code == 200) {
  190. that.$message({
  191. message: res.data.msg,
  192. type: 'success',
  193. offset:50
  194. });
  195. that.zwgd=true;
  196. that.tableData=[];
  197. that.pageIndex=1;
  198. that.postPageDailyPaymentList()
  199. }else{
  200. that.$message.error(res.data.msg);
  201. }
  202. })
  203. },
  204. //详情按钮
  205. infobtn(val){
  206. this.expenseMobileVisible=true;
  207. this.dailydata={};
  208. this.getPostSearchDailyPaymentInfo(val.id);
  209. },
  210. //获取详情
  211. getPostSearchDailyPaymentInfo(val){
  212. var url = "/api/Financial/PostSearchDailyPaymentInfo"
  213. var that = this
  214. this.$axios({
  215. method: 'post',
  216. url: url,
  217. headers: {
  218. Authorization: 'Bearer ' + that.token
  219. },
  220. data: {
  221. PortType: 1,
  222. id:val
  223. }
  224. }).then(function (res) {
  225. if (res.data.code == 200) {
  226. that.dailydata=res.data.data;
  227. }
  228. })
  229. },
  230. //搜索
  231. searchbtn(){
  232. this.zwgd=true;
  233. this.pageIndex=1;
  234. this.tableData=[];
  235. this.postPageDailyPaymentList();
  236. },
  237. //搜索examine
  238. searchexamine(){
  239. this.pageIndexExamine=1;
  240. this.groupData=[];
  241. this.PostExpenseAuditGroupPageItems();
  242. localStorage.setItem("Examinevalue",this.value );
  243. },
  244. scrollBottomExamine(e) {
  245. let scrollTop=document.documentElement.scrollTop || document.body.scrollTop;
  246. let clientHeight=document.documentElement.clientHeight || document.body.clientHeight;
  247. let scrollHeight=document.documentElement.scrollHeight || document.body.scrollHeight;
  248. if (Math.abs(scrollHeight-clientHeight-scrollTop) < 1&&this.loadflagExamine) {
  249. this.PageTurningExamine()
  250. }
  251. },
  252. scrollBottom(e) {
  253. let scrollTop=document.documentElement.scrollTop || document.body.scrollTop;
  254. let clientHeight=document.documentElement.clientHeight || document.body.clientHeight;
  255. let scrollHeight=document.documentElement.scrollHeight || document.body.scrollHeight;
  256. if(Math.abs(scrollHeight-clientHeight-scrollTop) < 1&&this.loadflag&&this.zwgd){
  257. this.PageTurning()
  258. }
  259. // if (Math.floor(scrollTop + clientHeight) == scrollHeight&&this.loadflag) {
  260. // this.PageTurning()
  261. // }
  262. },
  263. //日常切换
  264. rcbtn(){
  265. this.loadflag=false;
  266. this.platejudgment=1;
  267. this.zwgd=true;
  268. this.pageIndex=1;
  269. this.tableData=[];
  270. window.addEventListener('scroll', this.scrollBottom, true);
  271. window.removeEventListener('scroll', this.scrollBottomExamine, true);
  272. this.postPageDailyPaymentList();
  273. },
  274. //tuanzhuqiehuan
  275. tzbtn(){
  276. this.loadflagExamine=false;
  277. this.platejudgment=2;
  278. this.pageIndexExamine=1;
  279. this.groupData=[];
  280. window.addEventListener('scroll', this.scrollBottomExamine, true);
  281. window.removeEventListener('scroll', this.scrollBottom, true);
  282. this.PostExpenseAuditGroupPageItems();
  283. },
  284. //费用审核列表
  285. PostExpenseAuditGroupPageItems(){
  286. var url = "/api/Groups/PostExpenseAuditGroupPageItems"
  287. var that = this
  288. this.$axios({
  289. method: 'post',
  290. url: url,
  291. headers: {
  292. Authorization: 'Bearer ' + this.token
  293. },
  294. data: {
  295. portType: 1,
  296. pageId:47,
  297. userId:21,
  298. pageIndex: that.pageIndexExamine,
  299. pageSize: 10,
  300. isSure: -1,
  301. searchCriteria: that.value,
  302. }
  303. }).then(function (res) {
  304. if (res.data.code == 200) {
  305. var groupDatas=res.data.data.data;
  306. for(let j=0;j<groupDatas.length;j++){
  307. that.groupData.push(groupDatas[j])
  308. }
  309. that.loadflagExamine=true;
  310. }
  311. })
  312. },
  313. //查看费用
  314. CheckCost(row){
  315. this.$router.push({path: '/expenseMobileinfo?id=' + row.id +''});
  316. }
  317. },
  318. watch:{
  319. },
  320. mounted(){
  321. this.uid = this.$route.query.uid;
  322. this.portType = this.$route.query.portType?this.$route.query.portType:0;
  323. console.log(this.portType);
  324. // if(localStorage.getItem('Examinevalue')!=""){
  325. // this.value=localStorage.getItem('Examinevalue');
  326. // }
  327. // console.log(localStorage.getItem('Examinevalue'));
  328. // this.token=JSON.parse(localStorage.getItem('Examinevalue'));
  329. if(this.platejudgment==1){
  330. window.addEventListener('scroll', this.scrollBottom, true)
  331. window.removeEventListener('scroll', this.scrollBottomExamine, true)
  332. this.postPageDailyPaymentList();
  333. }else{
  334. window.addEventListener('scroll', this.scrollBottomExamine, true)
  335. window.removeEventListener('scroll', this.scrollBottom, true)
  336. this.PostExpenseAuditGroupPageItems();
  337. }
  338. },
  339. destroyed(){
  340. window.removeEventListener('scroll', this.scrollBottomExamine, true);
  341. window.removeEventListener('scroll', this.scrollBottom, true);
  342. }
  343. }
  344. </script>
  345. <style>
  346. *{
  347. margin: 0;
  348. padding: 0;
  349. }EntryDetails
  350. .expenseMobile-all{
  351. background-color: #fff;
  352. color: #555;
  353. }
  354. .expenseMobile-all .el-dialog__header{
  355. display: none;
  356. }
  357. .expenseMobile-all .el-dialog__body{
  358. padding: 10px;
  359. }
  360. .daily-box{
  361. padding: 8px;
  362. padding-top: 93px;
  363. }
  364. .examine-box{
  365. padding: 8px;
  366. padding-top: 93px;
  367. padding-bottom: 65px;
  368. }
  369. .card-description{
  370. font-weight: 600;
  371. }
  372. .daily-card{
  373. padding: 8px;
  374. box-shadow: 0 0 10px #0005;
  375. border-radius:5px ;
  376. font-size: 14px;
  377. margin-bottom: 10px;
  378. }
  379. .examine-card{
  380. padding: 8px;
  381. box-shadow: 0 0 10px #0005;
  382. border-radius:5px ;
  383. font-size: 14px;
  384. margin-bottom: 10px;
  385. }
  386. .card-date{
  387. margin: 5px 0;
  388. }
  389. .card-expense{
  390. display: flex;
  391. justify-content: space-between;
  392. }
  393. .card-btn{
  394. margin-top: 10px;
  395. text-align: right;
  396. }
  397. .expenseMobile-top{
  398. position: fixed;
  399. top: 0;
  400. background-color: #fff;
  401. width: 100%;
  402. text-align: center;
  403. border-bottom: 1px solid #ede8e8;
  404. }
  405. .expenseMobile-title{
  406. margin: 10px;
  407. margin-bottom:0px;
  408. font-size: 17px;
  409. font-weight:600 ;
  410. }
  411. .expenseMobile-search{
  412. padding: 8px;
  413. }
  414. .expenseMobile-tabtn{
  415. position: fixed;
  416. bottom: 0;
  417. background-color: #fff;
  418. width: 100%;
  419. padding: 8px;
  420. text-align: center;
  421. border-top: 1px solid #ede8e8;
  422. }
  423. .tabtn-box{
  424. display: flex;
  425. justify-content: space-around;
  426. }
  427. .tabtn-box div{
  428. width: 15%;
  429. }
  430. .tabtn-box div div{
  431. width: 100%;
  432. }
  433. .expenseMobile-all .dialog-title{
  434. font-weight: 600;
  435. margin-bottom: 10px;
  436. }
  437. .expenseMobile-all .dialog-info{
  438. margin-bottom: 10px;
  439. }
  440. .dialog-info-zj{
  441. margin: 5px 0;
  442. }
  443. .dialog-info-sh{
  444. display: flex;
  445. flex-wrap: wrap;
  446. justify-content:space-between;
  447. }
  448. .dialog-info-sh div{
  449. width: 50%;
  450. margin-bottom: 5px;
  451. }
  452. .info-sl{
  453. margin: 5px 0;
  454. display: flex;
  455. justify-content: space-between;
  456. flex-wrap:wrap ;
  457. }
  458. .dialog-list-li{
  459. padding: 5px 0;
  460. border-top: 1px dotted #afadad;
  461. }
  462. .dialog-list-li:last-child{
  463. border-bottom: 1px dotted #afadad;
  464. }
  465. .expenseMobile-all .dialog-list{
  466. max-height: 240px;
  467. overflow: auto;
  468. }
  469. .expenseMobile-zwgd{
  470. font-size: 14px;
  471. font-weight: 600;
  472. text-align: center;
  473. }
  474. .examine-card-operator{
  475. display: flex;
  476. justify-content: space-between;
  477. }
  478. .examine-card-btn{
  479. text-align: right;
  480. }
  481. .examine-card-date{
  482. margin: 5px 0;
  483. }
  484. .examine-card-operator{
  485. margin: 5px 0;
  486. }
  487. .examine-card-name{
  488. font-weight: 600;
  489. }
  490. </style>