Overspendedit.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. <template>
  2. <div>
  3. <div class="overspendedit-all">
  4. <div class="overspendedit-form">
  5. <el-form ref="form" :rules="rules" :model="form" label-width="100px">
  6. <el-form-item label="团队名称">
  7. <el-select filterable @change="getheadtitle" :disabled="disableds" v-model="DiId" placeholder="请选择团队名称">
  8. <el-option v-for="(item,index) in cTablelist" :key="index" :label="item.teamName" :value="item.id"></el-option>
  9. </el-select>
  10. </el-form-item>
  11. <el-form-item label="团 号">
  12. <el-input disabled v-model="form.tourNumber"></el-input>
  13. </el-form-item>
  14. <el-form-item label="客 户">
  15. <el-input disabled v-model="form.customers"></el-input>
  16. </el-form-item>
  17. <el-form-item label="出访国家">
  18. <el-input disabled v-model="form.countriesVisited"></el-input>
  19. </el-form-item>
  20. <el-form-item prop="priceName" label="费用名称">
  21. <el-input v-model="form.priceName"></el-input>
  22. </el-form-item>
  23. <el-form-item prop="nation" label="地区">
  24. <el-select filterable v-model="form.nation" placeholder="请选择地区">
  25. <el-option v-for="(item,index) in nationarr" :key="index" :label="item.country+'-'+item.city" :value="item.id"></el-option>
  26. </el-select>
  27. </el-form-item>
  28. <el-form-item prop="currency" label="费用金额">
  29. <div style="display: flex;justify-content: space-between;">
  30. <el-input-number style="width:60%" :precision="2" placeholder="费用金额" v-model="form.price" :controls='false'>
  31. </el-input-number>
  32. <el-select style="width:38%" v-model="form.currency" filterable placeholder="币种">
  33. <el-option v-for="(item,index) in currencyType" :key="index" :label="item.currencyCode" :value="item.currencyId"></el-option>
  34. </el-select>
  35. </div>
  36. </el-form-item>
  37. <el-form-item prop="priceCount" label="数量">
  38. <el-input-number style="width:100%" :precision="0" placeholder="数量" v-model="form.priceCount" :controls='false'>
  39. </el-input-number>
  40. </el-form-item>
  41. <el-form-item prop="priceDt" label="产生日期">
  42. <el-date-picker
  43. style="width:100%"
  44. v-model="form.priceDt"
  45. type="date"
  46. placeholder="选择日期">
  47. </el-date-picker>
  48. </el-form-item>
  49. <el-form-item prop="payee" label="收款方">
  50. <el-input v-model="form.payee"></el-input>
  51. </el-form-item>
  52. <el-form-item prop="costSign" label="费用标识">
  53. <el-select v-model="form.costSign" placeholder="请选择费用标识">
  54. <el-option label="公转" value='0'></el-option>
  55. <el-option label="私转" value='1'></el-option>
  56. </el-select>
  57. </el-form-item>
  58. <el-form-item prop="payType" label="支付方式">
  59. <el-select v-model="form.payType" placeholder="请选择支付方式">
  60. <el-option v-for="(item,index) in payment" :key="index" :label="item.name" :value="item.id"></el-option>
  61. </el-select>
  62. </el-form-item>
  63. <el-form-item v-if="form.payType==72" prop="payCardId" label="卡类型:">
  64. <el-select v-model="form.payCardId" placeholder="请选择卡类型">
  65. <el-option v-for="(item,index) in cardType" :key="index" :label="item.name" :value="item.id"></el-option>
  66. </el-select>
  67. </el-form-item>
  68. <el-form-item prop="priceType" label="费用类型">
  69. <el-select @change="priceTypechanges" v-model="form.priceType" placeholder="请选择费用类型">
  70. <el-option v-for="(item,index) in priceType" :key="index" :label="item.name" :value="item.id"></el-option>
  71. </el-select>
  72. </el-form-item>
  73. <el-form-item prop="priceDetailType" v-if="priceDetailTypes.length>0" label="详细类型">
  74. <el-select @change="xxtypechange()" v-model="form.priceDetailType" placeholder="请选择详细类型">
  75. <el-option v-for="(item,index) in priceDetailTypes" :key="index" :label="item.name" :value="item.id"></el-option>
  76. </el-select>
  77. </el-form-item>
  78. <el-form-item v-show="userId==22" prop="coefficient" label="费用系数">
  79. <el-input-number style="width:100%" :precision="2" placeholder="费用系数" v-model="form.coefficient" :controls='false'>
  80. </el-input-number>
  81. </el-form-item>
  82. <el-form-item style="width:100%" label="备注">
  83. <el-input type="textarea" :rows="5" v-model="form.remark"></el-input>
  84. </el-form-item>
  85. <el-form-item style="width:100%;text-align: right;">
  86. <el-button type="primary" @click="submitForm('form')">保 存</el-button>
  87. <el-button @click="returnbtn">返 回</el-button>
  88. </el-form-item>
  89. </el-form>
  90. </div>
  91. </div>
  92. </div>
  93. </template>
  94. <script>
  95. export default {
  96. data() {
  97. return {
  98. disableds:true,
  99. DiId:'',
  100. Id:'',
  101. pageId:'',
  102. token:'',
  103. userId:'',
  104. form: {
  105. tourNumber:'',//团号
  106. customers:'',//客户
  107. countriesVisited:'',//出访国家
  108. priceName:'',//费用名称
  109. price:0,//金额
  110. priceType:'',//费用类型Id
  111. priceDetailType:'',//费用详细类型Id
  112. coefficient:1,//系数
  113. currency:'',//费用币种
  114. payee:'',//收款方
  115. costSign:'',//费用标识
  116. payType:'',//支付方式
  117. payCardId:'',//卡类型,支付方式为刷卡时有效
  118. filePath:'',//附件路径
  119. remark:'',//备注
  120. createUser:'',//操作人员
  121. priceCount:1,//数量
  122. priceDt:'',//产生日期
  123. nation:''//国家
  124. },
  125. nationarr:[],
  126. payment:[],
  127. priceType:[],
  128. priceDetailType:[],
  129. priceDetailTypes:[],
  130. cardType:[],
  131. currencyType:[],
  132. cTablelist:[],
  133. rules: {
  134. priceName: [
  135. { required: true, message: '请输入费用名称', trigger: 'blur' },
  136. ],
  137. currency: [
  138. { required: true, message: '请选择币种', trigger: 'change' }
  139. ],
  140. payee: [
  141. { required: true, message: '请输入收款方', trigger: 'blur' }
  142. ],
  143. costSign: [
  144. { required: true, message: '请选择费用标识', trigger: 'change' }
  145. ],
  146. payType: [
  147. {required: true, message: '请选择支付方式', trigger: 'change' }
  148. ],
  149. payCardId: [
  150. { required: true, message: '请选择卡类型', trigger: 'change' }
  151. ],
  152. priceType: [
  153. { required: true, message: '请选择费用类型', trigger: 'change' }
  154. ],
  155. priceDetailType: [
  156. { required: true, message: '请选择详细类型', trigger: 'change' }
  157. ],
  158. coefficient: [
  159. { required: true, message: '请输入费用系数', trigger: 'blur' }
  160. ]
  161. ,
  162. priceCount: [
  163. { required: true, message: '请输入数量', trigger: 'blur' }
  164. ]
  165. ,
  166. priceDt: [
  167. { required: true, message: '请选择日期费', trigger: 'change' }
  168. ],
  169. nation:[
  170. {required: true, message: '国家', trigger: 'change'}
  171. ]
  172. },
  173. coefficientarr:[]
  174. }
  175. },
  176. methods: {
  177. onSubmit() {
  178. this.datetime(this.form.priceDt)
  179. },
  180. //处理日期
  181. datetime(val){
  182. var date=new Date(val);
  183. var y=date.getFullYear();
  184. var m=date.getMonth()+1>=10?date.getMonth()+1:'0'+(date.getMonth()+1).toString();
  185. var d=date.getDate()>=10?date.getDate():'0'+(date.getDate()).toString();
  186. return y+'-'+m+'-'+d
  187. },
  188. //获取国家基础数据
  189. OpCarCityResult(){
  190. var url = "/api/Groups/OpCarCityResult"
  191. var that = this
  192. this.$axios({
  193. method: 'get',
  194. url: url,
  195. headers: {
  196. Authorization: 'Bearer '
  197. },
  198. }).then(function (res) {
  199. if(res.data.code==200){
  200. that.nationarr=res.data.data;
  201. }else{
  202. that.$message({
  203. message:res.data.msg ,
  204. type: 'warning',
  205. });
  206. }
  207. })
  208. },
  209. //切换详细类型
  210. xxtypechange(){
  211. console.log(this.form.priceDetailType);
  212. for(let i=0;i<this.coefficientarr.length;i++){
  213. if(this.form.priceDetailType==this.coefficientarr[i].id){
  214. this.form.coefficient=this.coefficientarr[i].coefficient;
  215. }
  216. }
  217. },
  218. //获取系数
  219. QueryCoefficientConfig(){
  220. var url = "/api/Financial/QueryCoefficientConfig"
  221. var that = this
  222. this.$axios({
  223. method: 'post',
  224. url: url,
  225. headers: {
  226. Authorization: 'Bearer '
  227. },
  228. }).then(function (res) {
  229. if(res.data.code==200){
  230. that.coefficientarr=res.data.data;
  231. }else{
  232. that.$message({
  233. message:res.data.msg ,
  234. type: 'warning',
  235. });
  236. }
  237. })
  238. },
  239. //获取超支基础数据
  240. PostGroupExtraCost_ListDataInit(){
  241. var url = "/api/Financial/PostGroupExtraCost_ListDataInit"
  242. var that = this
  243. this.$axios({
  244. method: 'post',
  245. url: url,
  246. headers: {
  247. Authorization: 'Bearer ' + that.userId
  248. },
  249. data:{
  250. portType:1,
  251. }
  252. }).then(function (res) {
  253. if(res.data.code==200){
  254. that.payment=res.data.data.payment;
  255. that.priceDetailType=res.data.data.priceDetailType;
  256. that.priceType=res.data.data.priceType;
  257. that.cardType=res.data.data.card;
  258. that.OpCarCityResult();
  259. that.QueryCoefficientConfig();
  260. }else{
  261. that.$message({
  262. message:res.data.msg ,
  263. type: 'warning',
  264. });
  265. }
  266. })
  267. },
  268. //费用类型changes
  269. priceTypechanges(val){
  270. this.form.coefficient=1;
  271. this.form.priceDetailType='',
  272. this.priceDetailTypes=[];
  273. var priceDetailTypearr=[];
  274. for(var i=0;i<this.priceDetailType.length;i++){
  275. if(val+''==this.priceDetailType[i].remark){
  276. priceDetailTypearr.push(this.priceDetailType[i])
  277. }
  278. }
  279. this.priceDetailTypes=priceDetailTypearr;
  280. },
  281. //费用类型change
  282. priceTypechange(val){
  283. console.log(val)
  284. // this.form.priceDetailType='',
  285. this.priceDetailTypes=[];
  286. var priceDetailTypearr=[];
  287. for(var i=0;i<this.priceDetailType.length;i++){
  288. if(val+''==this.priceDetailType[i].remark){
  289. priceDetailTypearr.push(this.priceDetailType[i])
  290. }
  291. }
  292. this.priceDetailTypes=priceDetailTypearr;
  293. },
  294. //获取团号
  295. getheadtitle(){
  296. for(let i=0;i<this.cTablelist.length;i++){
  297. if(this.DiId==this.cTablelist[i].id){
  298. this.form.tourNumber=this.cTablelist[i].tourCode;
  299. this.form.customers=this.cTablelist[i].clientName;
  300. this.form.countriesVisited=this.cTablelist[i].visitCountry;
  301. }
  302. }
  303. },
  304. //获取cTable
  305. PostPageLinkCTable(){
  306. var url = "/api/Business/PostPageLinkCTable"
  307. var that = this
  308. this.$axios({
  309. method: 'post',
  310. url: url,
  311. headers: {
  312. Authorization: 'Bearer ' + that.userId
  313. },
  314. data:{
  315. pageId:that.pageId,
  316. }
  317. }).then(function (res) {
  318. if(res.data.code==200){
  319. that.cTable=res.data.data.cTable;
  320. //调用获取币种、
  321. that.PostGroupTeamRateByDiIdAndCTableId()
  322. //调用获取可以操作的团
  323. that.PostGroupListByCTableAndUserId();
  324. }else{
  325. that.$message({
  326. message:res.data.msg ,
  327. type: 'warning',
  328. });
  329. }
  330. })
  331. },
  332. //获取可操作的团
  333. PostGroupListByCTableAndUserId(){
  334. var url = "/api/Business/PostGroupListByCTableAndUserId"
  335. var that = this
  336. this.$axios({
  337. method: 'post',
  338. url: url,
  339. headers: {
  340. Authorization: 'Bearer ' + that.userId
  341. },
  342. data:{
  343. portType:1,
  344. pageIndex:1,
  345. pageSize:10000,
  346. cTable:that.cTable,
  347. userId:that.userId
  348. }
  349. }).then(function (res) {
  350. if(res.data.code==200){
  351. that.cTablelist=res.data.data;
  352. that.getheadtitle();
  353. }else{
  354. that.$message({
  355. message:res.data.msg ,
  356. type: 'warning',
  357. });
  358. }
  359. })
  360. },
  361. //获取详情
  362. PostGroupExtraCost_Detail(){
  363. if(this.Id!=this.Id){
  364. return
  365. }
  366. var url = "/api/Financial/PostGroupExtraCost_Detail"
  367. var that = this
  368. this.$axios({
  369. method: 'post',
  370. url: url,
  371. headers: {
  372. Authorization: 'Bearer ' + that.userId
  373. },
  374. data:{
  375. portType:1,
  376. id:that.Id,
  377. }
  378. }).then(function (res) {
  379. if(res.data.code){
  380. that.form.coefficient=res.data.data.coefficient;
  381. that.form.payee=res.data.data.payee;
  382. that.form.price=res.data.data.price;
  383. that.form.currency=res.data.data.priceCurrency;
  384. that.form.priceName=res.data.data.priceName;
  385. that.form.priceType=res.data.data.priceType;
  386. that.form.priceDetailType=res.data.data.priceDetailType;
  387. that.form.payType=res.data.data.payDId;
  388. that.form.costSign=res.data.data.orbitalPrivateTransfer+'';
  389. that.form.payCardId=res.data.data.ctdId==0?'':res.data.data.ctdId;
  390. that.form.priceCount=res.data.data.priceCount;
  391. that.form.remark=res.data.data.remark;
  392. that.form.priceDt=res.data.data.priceDt;
  393. that.form.nation=res.data.data.area;
  394. that.priceTypechange(that.form.priceType)
  395. // setTimeout(that.priceTypechange(that.form.priceType),5000)
  396. }else{
  397. that.$message({
  398. message:res.data.msg ,
  399. type: 'warning',
  400. });
  401. }
  402. })
  403. },
  404. //获取币种
  405. PostGroupTeamRateByDiIdAndCTableId(){
  406. var url = "/api/Business/PostGroupTeamRateByDiIdAndCTableId"
  407. var that = this
  408. this.$axios({
  409. method: 'post',
  410. url: url,
  411. headers: {
  412. Authorization: 'Bearer ' + that.userId
  413. },
  414. data:{
  415. portType:1,
  416. diId:that.DiId,
  417. cTable:that.cTable,
  418. }
  419. }).then(function (res) {
  420. if(res.data.code){
  421. that.currencyType=res.data.data.teamRates;
  422. if(that.currencyType.length==0){
  423. that.$message({
  424. message:'未设置超支汇率' ,
  425. type: 'warning',
  426. });
  427. }
  428. }else{
  429. that.$message({
  430. message:res.data.msg ,
  431. type: 'warning',
  432. });
  433. }
  434. })
  435. },
  436. //超支费用api
  437. PostGroupExtraCost_Operator(){
  438. var url = "/api/Financial/PostGroupExtraCost_Operator"
  439. var that = this
  440. this.$axios({
  441. method: 'post',
  442. url: url,
  443. headers: {
  444. Authorization: 'Bearer ' + that.userId
  445. },
  446. data:{
  447. portType:1,
  448. editType:that.Id!=that.Id?1:2,
  449. id:that.Id!=that.Id?0:that.Id,
  450. diId:that.DiId,
  451. priceName:that.form.priceName,
  452. price:that.form.price,
  453. priceType:that.form.priceType,
  454. priceDetailType:that.priceDetailTypes.length!=0?that.form.priceDetailType:0,
  455. coefficient:that.form.coefficient,
  456. currency:that.form.currency,
  457. payee:that.form.payee,
  458. costSign:Number(that.form.costSign),
  459. payType:that.form.payType,
  460. payCardId:that.form.payType==72?that.form.payCardId:0,
  461. filePath:'',
  462. remark:that.form.remark,
  463. createUser:that.userId,
  464. priceCount:that.form.priceCount,
  465. area :that.form.nation,
  466. priceDt:that.datetime(that.form.priceDt),
  467. }
  468. }).then(function (res) {
  469. if(res.data.code==200){
  470. that.$message({
  471. message: res.data.msg,
  472. type: 'success'
  473. });
  474. setTimeout(that.returnbtn,1000)
  475. }else{
  476. that.$message({
  477. message:res.data.msg ,
  478. type: 'warning',
  479. });
  480. }
  481. })
  482. },
  483. //保存
  484. submitForm(formName) {
  485. this.$refs[formName].validate((valid) => {
  486. if (valid) {
  487. this.PostGroupExtraCost_Operator();
  488. } else {
  489. this.$message({
  490. message:'请将红框补充完整!',
  491. type: 'warning',
  492. });
  493. }
  494. });
  495. },
  496. //返回
  497. returnbtn(){
  498. this.$router.push({
  499. path: "/home/Overspend",
  500. query: {
  501. DiId: this.DiId,
  502. }
  503. })
  504. }
  505. },
  506. created(){
  507. this.pageId = localStorage.getItem('indexs').split('-')[1];
  508. this.token = JSON.parse(localStorage.getItem('userinif')).token;
  509. this.userId = JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
  510. this.DiId = Number(this.$route.query.DiId);
  511. this.Id = Number(this.$route.query.Id);
  512. if(this.Id!=this.Id){
  513. this.disableds=false
  514. }else{
  515. this.disableds=true
  516. }
  517. //调用获取超支基础数据
  518. this.PostGroupExtraCost_ListDataInit();
  519. },
  520. mounted(){
  521. //hguoquctb
  522. this.PostPageLinkCTable();
  523. //调用获取详情
  524. this.PostGroupExtraCost_Detail();
  525. }
  526. }
  527. </script>
  528. <style>
  529. .overspendedit-all{
  530. background-color: #fff;
  531. padding: 10px;
  532. box-shadow: 0 0 5px #0005;
  533. border-radius: 10px;
  534. height: 100%;
  535. min-height: 830px;
  536. }
  537. .overspendedit-form .el-form-item{
  538. width:25%;
  539. min-width:370px;
  540. }
  541. .overspendedit-form .el-form{
  542. display: flex;
  543. flex-wrap: wrap;
  544. }
  545. .overspendedit-form .el-select{
  546. width: 100%;
  547. }
  548. .overspendedit-form .el-input-number.is-without-controls .el-input__inner{
  549. text-align: left;
  550. }
  551. </style>.