Overspendedit.vue 20 KB

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