expenseMobileinfo.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. <template>
  2. <div class="expenseMobileinfo-all" v-loading.fullscreen.lock="fullscreenLoading">
  3. <el-dialog 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. }
  74. },
  75. methods:{
  76. //chili
  77. chuli(val){
  78. val=val+""
  79. return val.split(' ')[0]
  80. },
  81. //获取分类
  82. PostGroupDirectionalClassificationInit() {
  83. this.fullscreenLoading=true;
  84. var url = "/api/Business/PostGroupDirectionalClassificationInit"
  85. var that = this
  86. this.$axios({
  87. method: 'post',
  88. url: url,
  89. headers: {
  90. Authorization: 'Bearer ' + that.token
  91. },
  92. }).then(function (res) {
  93. if (res.data.code == 200) {
  94. that.classify=res.data.data;
  95. setTimeout(function () {
  96. that.thisID=that.classify[0].id;
  97. that.menuliclick(that.thisID,0)
  98. },500)
  99. }else{
  100. that.fullscreenLoading=false;
  101. }
  102. })
  103. },
  104. //获取团组详情
  105. PostShareGroupInfo(){
  106. var url = "/api/Business/PostShareGroupInfo"
  107. var that = this
  108. this.$axios({
  109. method: 'post',
  110. url: url,
  111. headers: {
  112. Authorization: 'Bearer ' + that.userid
  113. },
  114. data:{
  115. portType:1,
  116. id: that.diid
  117. }
  118. }).then(function (res) {
  119. if(res.data.code==200){
  120. that.GroupInfo=res.data.data;
  121. }else{
  122. that.$message.error(res.data.msg);
  123. }
  124. })
  125. },
  126. //menu-li click
  127. menuliclick(id,index){
  128. this.formtype=[];
  129. this.tabledata=[];
  130. this.thisID=id;
  131. var boxes = document.getElementsByClassName('expenseMobileinfo-menu-li');
  132. for(let i=0;i<boxes.length;i++){
  133. boxes[index].style.backgroundColor="#ede8e8";
  134. boxes[index].style.color="#000";
  135. boxes[i].style.color="#555";
  136. boxes[i].style.backgroundColor="#FFF";
  137. }
  138. this.getPostSearchGrpCreditCardPayment(this.thisID);
  139. },
  140. //获取详情
  141. getPostSearchGrpCreditCardPayment(val) {
  142. this.fullscreenLoading=true;
  143. var url = "/api/Groups/PostSearchGrpCreditCardPayment"
  144. var that = this
  145. this.$axios({
  146. method: 'post',
  147. url: url,
  148. headers: {
  149. Authorization: 'Bearer ' + that.token
  150. },
  151. data: {
  152. portType: 1,
  153. userId: 21,
  154. pageId: 47,
  155. diId: that.diid,
  156. label: val,
  157. auditStatus: -1
  158. }
  159. }).then(function (res) {
  160. if (res.data.code == 200) {
  161. that.tabledata=res.data.data.data.detailList;
  162. let divbox=(document.getElementsByClassName('expenseMobileinfo-group')[0].offsetHeight)+62;
  163. document.getElementsByClassName('expenseMobileinfo-content')[0].style.height=(document.documentElement.clientHeight)-divbox+'px' || (document.body.clientHeight)-divbox+'px'
  164. that.fullscreenLoading=false;
  165. }else{
  166. that.fullscreenLoading=false;
  167. }
  168. })
  169. },
  170. back(){
  171. this.$router.back();
  172. // this.$router.push({path: '/expenseMobile'});
  173. },
  174. passbtn(val,type){
  175. this.noPostAuditGrpCreditCardPayment(val,type)
  176. },
  177. nopassbtn(val,type){
  178. this.noPostAuditGrpCreditCardPayment(val,type)
  179. },
  180. //单独审批
  181. noPostAuditGrpCreditCardPayment(val, num) {
  182. if(this.uid==undefined||this.uid!=21||this.uid==22){
  183. return this.$message.error("无审核权限");
  184. }
  185. var url = "/api/Groups/PostAuditGrpCreditCardPayment"
  186. var that = this
  187. this.$axios({
  188. method: 'post',
  189. url: url,
  190. headers: {
  191. Authorization: 'Bearer ' + that.token
  192. },
  193. data: {
  194. portType:1,
  195. userId:that.uid,
  196. pageId:47,
  197. CreditIdStr: val + '',
  198. auditCode: num,//1审核通过,2审核未通过
  199. }
  200. }).then(function (res) {
  201. if (res.data.code == 200) {
  202. that.$message({
  203. message: res.data.msg,
  204. type: 'success',
  205. offset: 50
  206. });
  207. that.getPostSearchGrpCreditCardPayment(that.thisID);
  208. }else{
  209. that.$message({
  210. message: res.data.msg,
  211. type: 'warning',
  212. offset: 50
  213. });
  214. }
  215. })
  216. },
  217. //多选审批
  218. PostAuditGrpCreditCardPayment(val) {
  219. if(this.formtypestring==""){
  220. this.$message({
  221. message: "未勾选费用",
  222. type: 'warning',
  223. offset: 50
  224. });
  225. return
  226. }
  227. if(this.uid==undefined||this.uid!=21||this.uid==22){
  228. return this.$message.error("无审核权限");
  229. }
  230. var url = "/api/Groups/PostAuditGrpCreditCardPayment"
  231. var that = this
  232. this.$axios({
  233. method: 'post',
  234. url: url,
  235. headers: {
  236. Authorization: 'Bearer ' + that.token
  237. },
  238. data: {
  239. portType:1,
  240. userId:that.uid,
  241. pageId:47,
  242. CreditIdStr: that.formtypestring,
  243. auditCode: val,//1审核通过,2审核未通过
  244. }
  245. }).then(function (res) {
  246. if (res.data.code == 200) {
  247. that.formtype=[],
  248. that.$message({
  249. message: res.data.msg,
  250. type: 'success',
  251. offset: 50
  252. });
  253. that.getPostSearchGrpCreditCardPayment(that.thisID);
  254. }else{
  255. that.$message({
  256. message: res.data.msg,
  257. type: 'warning',
  258. offset: 50
  259. });
  260. }
  261. })
  262. },
  263. //费用明细
  264. expensedetail(val){
  265. this.fymxVisible=true;
  266. this.fymx=val;
  267. },
  268. lookformtype(){
  269. this.formtypestring='';
  270. for (var i = 0; i < this.formtype.length; i++) {
  271. this.formtypestring += this.formtype[i] + ','
  272. }
  273. this.formtypestring = this.formtypestring.substring(0, this.formtypestring.length - 1)
  274. }
  275. },
  276. mounted(){
  277. this.diid = this.$route.query.id;
  278. this.uid = this.$route.query.uid;
  279. this.PostShareGroupInfo();
  280. this.PostGroupDirectionalClassificationInit();
  281. // document.getElementsByClassName('expenseMobileinfo-list')[0].style.height=(document.documentElement.clientHeight)-divbox+'px' || (document.body.clientHeight)-divbox+'px'
  282. }
  283. }
  284. </script>
  285. <style>
  286. *{
  287. margin: 0;
  288. padding: 0;
  289. }
  290. .expenseMobileinfo-all{
  291. background-color: #fff;
  292. font-size: 14px;
  293. color: #555;
  294. }
  295. .expenseMobileinfo-top{
  296. position: fixed;
  297. top: 0;
  298. background-color: #fff;
  299. width: 100%;
  300. text-align: center;
  301. border-bottom: 1px solid #ede8e8;
  302. }
  303. .back{
  304. position: absolute;
  305. top: 10px;
  306. left: 10px;
  307. font-size: 16px;
  308. }
  309. .expenseMobileinfo-title{
  310. margin: 10px 0;
  311. font-size: 17px;
  312. font-weight:600 ;
  313. }
  314. .expenseMobileinfo-box{
  315. padding-top: 43px;
  316. }
  317. .expenseMobileinfo-menu{
  318. width: 100px;
  319. border-bottom: 1px solid #ede8e8;
  320. border-right: 1px solid #ede8e8;
  321. border-left: 1px solid #ede8e8;
  322. overflow: auto;
  323. }
  324. .expenseMobileinfo-menu-li{
  325. text-align: center;
  326. padding: 10px 0;
  327. }
  328. .expenseMobileinfo-menu-li{
  329. border-bottom: 1px solid #ede8e8;
  330. }
  331. .expenseMobileinfo-group{
  332. padding: 5px;
  333. border-bottom: 1px solid #ede8e8;
  334. }
  335. .expenseMobileinfo-group-client{
  336. margin: 5px 0;
  337. }
  338. .expenseMobileinfo-group-date{
  339. margin: 5px 0;
  340. }
  341. .expenseMobileinfo-content{
  342. display: flex;
  343. }
  344. .expenseMobileinfo-list-card{
  345. padding: 5px;
  346. border-radius:5px ;
  347. box-shadow: 0 0 10px #0005;
  348. margin-top:5px ;
  349. }
  350. .expenseMobileinfo-list{
  351. overflow: auto;
  352. padding: 5px;
  353. flex: 2;
  354. }
  355. .expenseMobileinfo-list-card div{
  356. margin-bottom: 5px;
  357. }
  358. .ex-card-btn{
  359. text-align: right;
  360. }
  361. .expenseMobileinfo-all .el-dialog__header{
  362. display: none;
  363. }
  364. .expenseMobileinfo-all .el-dialog__body{
  365. padding: 10px;
  366. }
  367. .fymxinfo{
  368. max-height: 300px;
  369. overflow: auto;
  370. }
  371. .expenseMobileinfo-all .dialog-title{
  372. margin-bottom: 10px;
  373. }
  374. .expenseMobileinfo-list .el-checkbox__label{
  375. display: none;
  376. }
  377. .expenseMobileinfo-group-btn{
  378. text-align: right;
  379. }
  380. </style>