expenseMobileinfo.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. <template>
  2. <div class="expenseMobileinfo-all" v-loading.fullscreen.lock="fullscreenLoading">
  3. <el-dialog :close-on-click-modal="false" top="20vh" custom-class="selfDialog" width="95%" title="详情" :visible.sync="fymxVisible">
  4. <div class="dialog-title">费用明细</div>
  5. <div class="fymxinfo" v-html="fymx"></div>
  6. </el-dialog>
  7. <div class="expenseMobileinfo-top">
  8. <div @click="back" class="back"><i style="font-weight:600 ;font-size: 16px;" class="el-icon-arrow-left"></i>子项返回</div>
  9. <div class="expenseMobileinfo-title">费用清单</div>
  10. </div>
  11. <div class="expenseMobileinfo-box">
  12. <div class="expenseMobileinfo-group">
  13. <div class="expenseMobileinfo-group-name">团队名称:{{GroupInfo.teamName}}</div>
  14. <div class="expenseMobileinfo-group-client">客户:{{GroupInfo.clientName}}</div>
  15. <div class="expenseMobileinfo-group-nation">出访国家:{{GroupInfo.visitCountry}}</div>
  16. <div style="display: flex;justify-content: space-between;flex-wrap:wrap;">
  17. <div class="expenseMobileinfo-group-date">起止日期:{{chuli(GroupInfo.visitStartDate)}}~{{chuli(GroupInfo.visitEndDate)}}</div>
  18. <div class="expenseMobileinfo-group-day">天数/人数:{{GroupInfo.visitDays}}天 / {{GroupInfo.visitPNumber}}人</div>
  19. </div>
  20. <div class="expenseMobileinfo-group-btn">
  21. <el-button @click="PostAuditGrpCreditCardPayment(1)" size="mini" type="primary">通过</el-button>
  22. <el-button @click="PostAuditGrpCreditCardPayment(2)" size="mini" type="danger">驳回</el-button>
  23. <el-button @click="PostAuditGrpCreditCardPayment(2)" size="mini" type="warning">取消通过</el-button>
  24. </div>
  25. </div>
  26. <div class="expenseMobileinfo-content">
  27. <div class="expenseMobileinfo-menu">
  28. <div v-show="item.name!='文档下载'" @click="menuliclick(item.id,index)" class="expenseMobileinfo-menu-li" v-for="(item,index) in classify" :key="index">{{item.name}}</div>
  29. </div>
  30. <div class="expenseMobileinfo-list">
  31. <div v-for="(items,index) in tabledata" :key="index" class="expenseMobileinfo-list-card">
  32. <el-checkbox-group @change="lookformtype" v-model="formtype">
  33. <el-checkbox :label="items.id"></el-checkbox>
  34. </el-checkbox-group>
  35. <div class="ex-card-name">费用名称:<span @click="expensedetail(items.priceMsgContent)" style="color: #409eff;text-decoration-line:underline">{{items.priceNameContent}}</span></div>
  36. <div class="ex-card-module">费用模块:{{items.priceName}}</div>
  37. <div v-if="thisID==79" class="ex-card-copewith">Bus名称:{{items.busName}}</div>
  38. <div class="ex-card-copewith">应付款金额:{{items.waitPay}}</div>
  39. <div class="ex-card-payment">此次付款金额:{{items.currPay}}</div>
  40. <div class="ex-card-balance">剩余尾款:{{items.balance}}</div>
  41. <div class="ex-card-applicant">申请人:{{items.operatorName}}</div>
  42. <div class="ex-card-auditor">审核人:{{items.auditOperatorName}}</div>
  43. <div class="ex-card-budget">超预算比例:{{items.overBudget}}</div>
  44. <div class="ex-card-paymethod">支付方式:{{items.payType}}</div>
  45. <div class="ex-card-cardtype">卡类型:{{items.cardType}}</div>
  46. <div class="ex-card-btn">
  47. <el-button @click="passbtn(items.id,1)" v-if='items.isAuditGM == 0 || items.isAuditGM == 2' size="mini" type="primary">通过</el-button>
  48. <el-button @click="nopassbtn(items.id,2)" size="mini" type="danger" v-if='items.isAuditGM == 0'>驳回</el-button>
  49. <el-button @click="nopassbtn(items.id,2)" v-if='items.isAuditGM == 1|| items.isAuditGM == 3' size="mini" type="warning">取消通过</el-button>
  50. </div>
  51. </div>
  52. <div style="text-align: center;" v-if="tabledata.length==0">暂无数据</div>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. </template>
  58. <script>
  59. export default {
  60. data () {
  61. return {
  62. uid:'',
  63. classify:[],
  64. diid:'',
  65. GroupInfo:{},
  66. tabledata:[],
  67. fullscreenLoading:false,
  68. thisID:0,
  69. fymx:'',
  70. fymxVisible:false,
  71. formtype:[],
  72. formtypestring:"",
  73. itemId:'',
  74. }
  75. },
  76. methods:{
  77. //chili
  78. chuli(val){
  79. val=val+""
  80. return val.split(' ')[0]
  81. },
  82. //获取分类
  83. PostGroupDirectionalClassificationInit() {
  84. this.fullscreenLoading=true;
  85. var url = "/api/Business/PostGroupDirectionalClassificationInit"
  86. var that = this
  87. this.$axios({
  88. method: 'post',
  89. url: url,
  90. headers: {
  91. Authorization: 'Bearer ' + that.token
  92. },
  93. }).then(function (res) {
  94. var index=0;
  95. if (res.data.code == 200) {
  96. console.log(that.itemId);
  97. that.classify=res.data.data;
  98. setTimeout(function () {
  99. if (that.itemId==undefined) {
  100. that.thisID=that.classify[0].id;
  101. that.menuliclick(that.thisID,0)
  102. }else{
  103. for(let i=0;i<that.classify.length;i++){
  104. if (that.itemId==that.classify[i].id) {
  105. index=i
  106. }
  107. }
  108. that.thisID=that.itemId;
  109. that.menuliclick(that.thisID,index)
  110. }
  111. },500)
  112. }else{
  113. that.fullscreenLoading=false;
  114. }
  115. })
  116. },
  117. //获取团组详情
  118. PostShareGroupInfo(){
  119. var url = "/api/Business/PostShareGroupInfo"
  120. var that = this
  121. this.$axios({
  122. method: 'post',
  123. url: url,
  124. headers: {
  125. Authorization: 'Bearer ' + that.userid
  126. },
  127. data:{
  128. portType:1,
  129. id: that.diid
  130. }
  131. }).then(function (res) {
  132. if(res.data.code==200){
  133. that.GroupInfo=res.data.data;
  134. }else{
  135. that.$message.error(res.data.msg);
  136. }
  137. })
  138. },
  139. //menu-li click
  140. menuliclick(id,index){
  141. this.formtype=[];
  142. this.tabledata=[];
  143. this.thisID=id;
  144. var boxes = document.getElementsByClassName('expenseMobileinfo-menu-li');
  145. for(let i=0;i<boxes.length;i++){
  146. boxes[index].style.backgroundColor="#ede8e8";
  147. boxes[index].style.color="#000";
  148. boxes[i].style.color="#555";
  149. boxes[i].style.backgroundColor="#FFF";
  150. }
  151. this.getPostSearchGrpCreditCardPayment(this.thisID);
  152. },
  153. //获取详情
  154. getPostSearchGrpCreditCardPayment(val) {
  155. this.fullscreenLoading=true;
  156. var url = "/api/Groups/PostSearchGrpCreditCardPayment"
  157. var that = this
  158. this.$axios({
  159. method: 'post',
  160. url: url,
  161. headers: {
  162. Authorization: 'Bearer ' + that.token
  163. },
  164. data: {
  165. portType: 1,
  166. userId: 21,
  167. pageId: 47,
  168. diId: that.diid,
  169. label: val,
  170. auditStatus: -1
  171. }
  172. }).then(function (res) {
  173. if (res.data.code == 200) {
  174. that.tabledata=res.data.data.data.detailList;
  175. let divbox=(document.getElementsByClassName('expenseMobileinfo-group')[0].offsetHeight)+62;
  176. document.getElementsByClassName('expenseMobileinfo-content')[0].style.height=(document.documentElement.clientHeight)-divbox+'px' || (document.body.clientHeight)-divbox+'px'
  177. that.fullscreenLoading=false;
  178. }else{
  179. that.fullscreenLoading=false;
  180. }
  181. })
  182. },
  183. back(){
  184. // this.$router.back();
  185. this.$router.push({path: 'expenseMobile?uid=21'});
  186. },
  187. passbtn(val,type){
  188. this.noPostAuditGrpCreditCardPayment(val,type)
  189. },
  190. nopassbtn(val,type){
  191. this.noPostAuditGrpCreditCardPayment(val,type)
  192. },
  193. //单独审批
  194. noPostAuditGrpCreditCardPayment(val, num) {
  195. if(this.uid==undefined||this.uid!=21||this.uid==22){
  196. return this.$message.error("无审核权限");
  197. }
  198. var url = "/api/Groups/PostAuditGrpCreditCardPayment"
  199. var that = this
  200. this.$axios({
  201. method: 'post',
  202. url: url,
  203. headers: {
  204. Authorization: 'Bearer ' + that.token
  205. },
  206. data: {
  207. portType:1,
  208. userId:that.uid,
  209. pageId:47,
  210. CreditIdStr: val + '',
  211. auditCode: num,//1审核通过,2审核未通过
  212. }
  213. }).then(function (res) {
  214. if (res.data.code == 200) {
  215. that.$message({
  216. message: res.data.msg,
  217. type: 'success',
  218. offset: 50
  219. });
  220. that.getPostSearchGrpCreditCardPayment(that.thisID);
  221. }else{
  222. that.$message({
  223. message: res.data.msg,
  224. type: 'warning',
  225. offset: 50
  226. });
  227. }
  228. })
  229. },
  230. //多选审批
  231. PostAuditGrpCreditCardPayment(val) {
  232. if(this.formtypestring==""){
  233. this.$message({
  234. message: "未勾选费用",
  235. type: 'warning',
  236. offset: 50
  237. });
  238. return
  239. }
  240. if(this.uid==undefined||this.uid!=21||this.uid==22){
  241. return this.$message.error("无审核权限");
  242. }
  243. var url = "/api/Groups/PostAuditGrpCreditCardPayment"
  244. var that = this
  245. this.$axios({
  246. method: 'post',
  247. url: url,
  248. headers: {
  249. Authorization: 'Bearer ' + that.token
  250. },
  251. data: {
  252. portType:1,
  253. userId:that.uid,
  254. pageId:47,
  255. CreditIdStr: that.formtypestring,
  256. auditCode: val,//1审核通过,2审核未通过
  257. }
  258. }).then(function (res) {
  259. if (res.data.code == 200) {
  260. that.formtype=[],
  261. that.$message({
  262. message: res.data.msg,
  263. type: 'success',
  264. offset: 50
  265. });
  266. that.getPostSearchGrpCreditCardPayment(that.thisID);
  267. }else{
  268. that.$message({
  269. message: res.data.msg,
  270. type: 'warning',
  271. offset: 50
  272. });
  273. }
  274. })
  275. },
  276. //费用明细
  277. expensedetail(val){
  278. this.fymxVisible=true;
  279. this.fymx=val;
  280. },
  281. lookformtype(){
  282. this.formtypestring='';
  283. for (var i = 0; i < this.formtype.length; i++) {
  284. this.formtypestring += this.formtype[i] + ','
  285. }
  286. this.formtypestring = this.formtypestring.substring(0, this.formtypestring.length - 1)
  287. }
  288. },
  289. mounted(){
  290. this.diid = this.$route.query.id;
  291. this.uid = this.$route.query.uid;
  292. this.itemId = this.$route.query.itemId;
  293. this.PostShareGroupInfo();
  294. this.PostGroupDirectionalClassificationInit();
  295. // document.getElementsByClassName('expenseMobileinfo-list')[0].style.height=(document.documentElement.clientHeight)-divbox+'px' || (document.body.clientHeight)-divbox+'px'
  296. }
  297. }
  298. </script>
  299. <style>
  300. *{
  301. margin: 0;
  302. padding: 0;
  303. }
  304. .expenseMobileinfo-all{
  305. background-color: #fff;
  306. font-size: 14px;
  307. color: #555;
  308. }
  309. .expenseMobileinfo-top{
  310. position: fixed;
  311. top: 0;
  312. background-color: #fff;
  313. width: 100%;
  314. text-align: center;
  315. border-bottom: 1px solid #ede8e8;
  316. }
  317. .back{
  318. position: absolute;
  319. top: 10px;
  320. left: 10px;
  321. font-size: 16px;
  322. }
  323. .expenseMobileinfo-title{
  324. margin: 10px 0;
  325. font-size: 17px;
  326. font-weight:600 ;
  327. }
  328. .expenseMobileinfo-box{
  329. padding-top: 43px;
  330. }
  331. .expenseMobileinfo-menu{
  332. width: 100px;
  333. border-bottom: 1px solid #ede8e8;
  334. border-right: 1px solid #ede8e8;
  335. border-left: 1px solid #ede8e8;
  336. overflow: auto;
  337. }
  338. .expenseMobileinfo-menu-li{
  339. text-align: center;
  340. padding: 10px 0;
  341. }
  342. .expenseMobileinfo-menu-li{
  343. border-bottom: 1px solid #ede8e8;
  344. }
  345. .expenseMobileinfo-group{
  346. padding: 5px;
  347. border-bottom: 1px solid #ede8e8;
  348. }
  349. .expenseMobileinfo-group-client{
  350. margin: 5px 0;
  351. }
  352. .expenseMobileinfo-group-date{
  353. margin: 5px 0;
  354. }
  355. .expenseMobileinfo-content{
  356. display: flex;
  357. }
  358. .expenseMobileinfo-list-card{
  359. padding: 5px;
  360. border-radius:5px ;
  361. box-shadow: 0 0 10px #0005;
  362. margin-top:5px ;
  363. }
  364. .expenseMobileinfo-list{
  365. overflow: auto;
  366. padding: 5px;
  367. flex: 2;
  368. }
  369. .expenseMobileinfo-list-card div{
  370. margin-bottom: 5px;
  371. }
  372. .ex-card-btn{
  373. text-align: right;
  374. }
  375. .expenseMobileinfo-all .el-dialog__header{
  376. display: none;
  377. }
  378. .expenseMobileinfo-all .el-dialog__body{
  379. padding: 10px;
  380. }
  381. .fymxinfo{
  382. max-height: 300px;
  383. overflow: auto;
  384. }
  385. .expenseMobileinfo-all .dialog-title{
  386. margin-bottom: 10px;
  387. }
  388. .expenseMobileinfo-list .el-checkbox__label{
  389. display: none;
  390. }
  391. .expenseMobileinfo-group-btn{
  392. text-align: right;
  393. }
  394. </style>