expenseMobile.vue 16 KB

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