detailModel.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  1. <template>
  2. <div class="detail-model">
  3. <!-- 线下开发票 -->
  4. <Modal title="线下开发票" v-model="iShow" class-name="order-model piao-model" :mask-closable="false" @on-visible-change="visibleChange">
  5. <Select placeholder="请选择发票类型" v-model="invoice.type" style="width:100%;margin: 20px 0">
  6. <Option v-for="item in invoType" :value="item.n" :key="item.v">{{ item.n }}</Option>
  7. </Select>
  8. <div slot="footer">
  9. <Button type="primary" size="large" @click="invoSave" :disabled="isDisable">提交</Button>
  10. <Button size="large" @click="iShow = false">取消</Button>
  11. </div>
  12. </Modal>
  13. <!-- 新增回款信息 -->
  14. <Modal title="新增回款信息" v-model="backShow" class-name="order-model back-model" :mask-closable="false" @on-visible-change="visibleChange1">
  15. <Form ref="backed" :model="backed" :rules="backRuleValidate" :label-width="110">
  16. <FormItem label="回款状态" prop="return_status">
  17. <Select v-model="backed.return_status" placeholder="请选择回款状态">
  18. <Option v-for="item in backSats" :value="item.v" :key="item.v">{{ item.n }}</Option>
  19. </Select>
  20. </FormItem>
  21. <FormItem label="回款交易详情" class="back-list">
  22. <Form ref="returned" :model="returned" :rules="backDetailValidate">
  23. <Row :gutter="10" class="back-row">
  24. <Col span="8">
  25. <FormItem prop="returnTime">
  26. <date-sigle ref="sigleRef" :placeholderd="'请选择回款时间'" @startDate="startDate" :overTime="0"></date-sigle>
  27. </FormItem>
  28. </Col>
  29. <Col span="8">
  30. <FormItem prop="returnMoney">
  31. <Input
  32. v-model="returned.returnMoney"
  33. type="text"
  34. placeholder="请输入回款金额"
  35. :maxlength="9"
  36. @on-keyup="returned.returnMoney=inptReg(returned.returnMoney)"
  37. ></Input>
  38. </FormItem>
  39. </Col>
  40. <Col span="8">
  41. <FormItem prop="">
  42. <Input
  43. v-model="returned.returnRemark"
  44. type="text"
  45. placeholder="请输入回款说明(选填)"
  46. ></Input>
  47. </FormItem>
  48. </Col>
  49. </Row>
  50. <Row :gutter="10" class="back-row">
  51. <Col span="8">
  52. <FormItem prop="returnType">
  53. <Select v-model="returned.returnType" placeholder="请选择支付方式">
  54. <Option v-for="item in backPayType" :value="item.v" :key="item.v">{{ item.n }}</Option>
  55. </Select>
  56. </FormItem>
  57. </Col>
  58. <Col span="8">
  59. <FormItem prop="returnCode">
  60. <Input
  61. v-model="returned.returnCode"
  62. type="text"
  63. placeholder="请输入支付单号"
  64. ></Input>
  65. </FormItem>
  66. </Col>
  67. <Col span="8">
  68. <FormItem prop="returnInvoiceStatus">
  69. <Select v-model="returned.returnInvoiceStatus" placeholder="请选择发票状态">
  70. <Option v-for="item in backInvoStas" :value="item.v" :key="item.v">{{ item.n }}</Option>
  71. </Select>
  72. </FormItem>
  73. </Col>
  74. </Row>
  75. <FormItem prop="">
  76. <b-upload
  77. ref="uploadRef1"
  78. @fileData="fileData"
  79. :placeholdered="'请上传凭证'"
  80. :accepted="'.jpg,.png,.jpeg'"
  81. :formated="['jpg','png','jpeg']"
  82. :multipled="false"
  83. :validateVar="returned.returnVoucherUrl"
  84. ></b-upload>
  85. </FormItem>
  86. </Form>
  87. </FormItem>
  88. </Form>
  89. <div slot="footer">
  90. <Button type="primary" size="large" @click="backSave" :disabled="isDisable">提交</Button>
  91. <Button size="large" @click="backCancel">取消</Button>
  92. </div>
  93. </Modal>
  94. <!-- 上传合同 -->
  95. <Modal title="上传合同" v-model="pShow" class-name="order-model contract-model" :mask-closable="false" @on-visible-change="visibleChange">
  96. <b-upload
  97. ref="uploadRef2"
  98. @fileData="contractFile"
  99. :placeholdered="'请上传合同'"
  100. :accepted="'.doc,.pdf,.docx,.rar,.zip,.jpg,.png,.jpeg'"
  101. :formated="['doc','pdf','docx','rar','zip','jpg','png','jpeg']"
  102. :multipled="false"
  103. ></b-upload>
  104. <div slot="footer">
  105. <Button type="primary" size="large" @click="pingSub" :disabled="isDisable">提交</Button>
  106. <Button size="large" @click="pingCancel">取消</Button>
  107. </div>
  108. </Modal>
  109. <!-- 审核 -->
  110. <Modal title="审核" v-model="sShow" class-name="shen-model" :mask-closable="false" @on-visible-change="visibleChange">
  111. <p>请确认此订单审核结果!</p>
  112. <Input type="tel" placeholder="请输入实付金额(元)" v-model="funds.sum" :maxlength="9" @on-keyup="funds.sum=inptReg(funds.sum)"></Input>
  113. <div slot="footer">
  114. <Button type="primary" size="large" @click="subConfirm">通过</Button>
  115. <Button type="error" size="large" @click="defeated">失败</Button>
  116. <Button size="large" @click="sShow = false">取消</Button>
  117. </div>
  118. </Modal>
  119. <!-- 退款登记 -->
  120. <Modal title="退款登记" v-model="tShow" class-name="order-model tui-model" @on-visible-change="visibleChange">
  121. <Form ref="models" :model="models" :rules="refundRuleValidate" :label-width="110">
  122. <FormItem label="退款金额" prop="refundMoney">
  123. <Input v-model="models.refundMoney" type="text" :maxlength="9" placeholder="请输入退款金额" @on-keyup="models.refundMoney=inptReg(models.refundMoney)"></Input>
  124. </FormItem>
  125. <FormItem label="退款原因" prop="refundReason">
  126. <Input v-model="models.refundReason" type="textarea" size="large" :autosize="{minRows: 2,maxRows: 5}" placeholder="请填写退款原因"></Input>
  127. </FormItem>
  128. </Form>
  129. <div slot="footer">
  130. <Button type="primary" size="large" @click="subSave('models')" :disabled="isDisable">提交</Button>
  131. <Button size="large" @click="tShow = false">取消</Button>
  132. </div>
  133. </Modal>
  134. </div>
  135. </template>
  136. <script>
  137. import dateSigle from '@/components/dateSigle.vue'
  138. import bUpload from '@/components/uploadFile.vue'
  139. export default {
  140. props: {
  141. orderDetail: {},
  142. contractData: {},
  143. returnRes: {},
  144. returnInfo: {},
  145. isStatus: String,
  146. payMoney: Number
  147. },
  148. components: {
  149. dateSigle,
  150. bUpload
  151. },
  152. methods: {
  153. inited() {
  154. this.invoice.type = ''
  155. this.funds.sum = ''
  156. this.models.refundReason = ''
  157. this.contract.contractFileUrl = ''
  158. this.returned.returnVoucherUrl = ''
  159. this.returned.returnRemark = ''
  160. this.$refs.sigleRef.initd()
  161. this.$refs['backed'].resetFields()
  162. this.$refs['returned'].resetFields()
  163. this.$refs['models'].resetFields()
  164. this.$refs.uploadRef1.uploadShow = false
  165. this.$refs.uploadRef1.payHtml = ''
  166. this.$refs.uploadRef2.uploadShow = false
  167. this.$refs.uploadRef2.payHtml = ''
  168. },
  169. inptReg(val) {
  170. return val.match(/\d+(\.\d{0,2})?/) ? val.match(/\d+(\.\d{0,2})?/)[0] : ''
  171. },
  172. visibleChange1(val) {
  173. if (val == false) {
  174. setTimeout(() => {
  175. this.inited()
  176. },500)
  177. } else {
  178. this.isDisable = false
  179. }
  180. },
  181. visibleChange(val) {
  182. if (val == false) {
  183. setTimeout(() => {
  184. this.inited()
  185. },500)
  186. } else {
  187. this.isDisable = false
  188. }
  189. },
  190. invoSave() {// 线下开发票
  191. if (this.invoice.type == '') {
  192. this.$Message.warning('请选择发票类型')
  193. return
  194. }
  195. this.isDisable = true
  196. this.$request('/order/openInvoice').data({
  197. orderCode: this.orderDetail.order_code,
  198. invoiceType: this.invoice.type,
  199. userId: this.orderDetail.user_id
  200. }).showSuccessTip().success(() => {
  201. this.$parent.ordered()
  202. this.iShow = false
  203. this.inited()
  204. setTimeout(() => {
  205. this.isDisable = false
  206. },1000)
  207. }).error(() => {
  208. this.isDisable = false
  209. }).post()
  210. },
  211. fileData(val) {
  212. this.returned.returnVoucherUrl = val
  213. },
  214. contractFile(val) {
  215. this.contract.contractFileUrl = val
  216. },
  217. startDate(val) {
  218. this.returned.returnTime = val
  219. },
  220. backSave() {// 新增回款信息提交
  221. let obj = {
  222. id: parseInt(this.orderDetail.id),
  223. orderCode: this.orderDetail.order_code,
  224. return_status: parseInt(this.backed.return_status?this.backed.return_status:0),
  225. returnTime: this.returned.returnTime,
  226. returnMoney: parseInt(this.returned.returnMoney?this.returned.returnMoney * 100:0),
  227. returnRemark: this.returned.returnRemark,
  228. returnType: parseInt(this.returned.returnType?this.returned.returnType:0),
  229. returnCode: this.returned.returnCode,
  230. returnInvoiceStatus: parseInt(this.returned.returnInvoiceStatus?this.returned.returnInvoiceStatus:0),
  231. returnVoucherUrl: this.returned.returnVoucherUrl
  232. }
  233. this.$refs.backed.validate((valid) => {
  234. if (!valid) {
  235. return
  236. }
  237. })
  238. this.$refs.returned.validate((valid) => {
  239. if (valid) {
  240. this.isDisable = true
  241. this.$request('/order/editReturnInfo').data(
  242. obj
  243. ).showSuccessTip().success(() => {
  244. this.backShow = false
  245. this.$parent.ordered()
  246. this.inited()
  247. setTimeout(() => {
  248. this.isDisable = false
  249. },1000)
  250. }).error(() => {
  251. this.isDisable = false
  252. }).post()
  253. }
  254. })
  255. },
  256. backCancel() {
  257. this.backShow = false
  258. setTimeout(() => {
  259. this.inited()
  260. },500)
  261. },
  262. pingSub() {// 上传合同
  263. if (!this.contract.contractFileUrl) {
  264. this.$Message.warning('请上传合同')
  265. return
  266. }
  267. this.isDisable = true
  268. this.$request('/order/uploadContractFile').data({
  269. contractId: $.isEmptyObject(this.contractData) == false?this.contractData.id:'',
  270. orderCode: this.orderDetail.order_code,
  271. contractFileUrl: this.contract.contractFileUrl
  272. }).showSuccessTip().success(() => {
  273. this.$parent.ordered()
  274. this.pShow = false
  275. this.inited()
  276. setTimeout(() => {
  277. this.isDisable = false
  278. },1000)
  279. }).error(() => {
  280. this.isDisable = false
  281. }).post()
  282. },
  283. pingCancel() {
  284. this.pShow = false
  285. setTimeout(() => {
  286. this.inited()
  287. },500)
  288. },
  289. audFunc(num) {
  290. this.isDisable = true
  291. this.$request('/order/orderList/transferAccounts').data({
  292. pay_money: parseInt(this.funds.sum * 100),
  293. order_code: this.orderDetail.order_code,
  294. courseStatus: num
  295. }).showSuccessTip().success(() => {
  296. this.$parent.ordered()
  297. this.sShow = false
  298. this.inited()
  299. setTimeout(() => {
  300. this.isDisable = false
  301. },1000)
  302. }).error(() => {
  303. this.isDisable = false
  304. }).post()
  305. },
  306. subConfirm() {// 订单审核通过
  307. if (this.funds.sum == '') {
  308. this.$Message.warning('实付金额为必填项')
  309. return
  310. }
  311. this.audFunc(4)
  312. },
  313. defeated() {// 订单审核失败
  314. this.audFunc(3)
  315. },
  316. subSave (name) {// 退款
  317. let sums = 0
  318. this.returnRes.forEach(v => {
  319. sums = sums + v.return_money
  320. })
  321. if (parseInt(this.models.refundMoney) > sums / 100) {
  322. this.$Message.warning('退款金额不能大于实收金额')
  323. return
  324. }
  325. let obj = {
  326. orderCode: this.orderDetail.order_code,
  327. refundMoney: parseInt(this.models.refundMoney * 100),
  328. refundReason: this.models.refundReason,
  329. isOffline: this.isStatus == 'qmx'? 1 : 0,
  330. refundStatus: this.payMoney == this.models.refundMoney ? 1 : 2
  331. }
  332. this.$refs[name].validate((valid) => {
  333. if (valid) {
  334. this.isDisable = true
  335. this.$request('/order/orderList/confirmRefund').data(
  336. obj
  337. ).showSuccessTip().success(() => {
  338. this.tShow = false
  339. this.models.refundReason = ''
  340. this.$parent.ordered()
  341. setTimeout(() => {
  342. this.isDisable = false
  343. },1000)
  344. }).error(() => {
  345. this.isDisable = false
  346. }).get()
  347. }
  348. })
  349. }
  350. },
  351. data() {
  352. return {
  353. iShow: false,
  354. backShow: false,
  355. pShow: false,
  356. sShow: false,
  357. tShow: false,
  358. isDisable: false,
  359. invoice: {
  360. type: ''
  361. },
  362. invoType:[
  363. {v: '1', n: '普通发票(纸质发票)'},
  364. {v: '2', n: '普通发票(电子发票)'},
  365. {v: '3', n: '专用发票(纸质发票)'}
  366. ],
  367. contract: {
  368. contractFileUrl: ''
  369. },
  370. funds: {
  371. sum: '',
  372. shCode: ''
  373. },
  374. models: {
  375. refundMoney: '',
  376. refundReason: ''
  377. },
  378. backed: {
  379. return_status: '',
  380. },
  381. returned: {
  382. returnTime: '',
  383. returnRemark: '',
  384. returnCode: '',
  385. returnInvoiceStatus: '',
  386. returnMoney: '',
  387. returnType: '',
  388. returnVoucherUrl: ''
  389. },
  390. backSats: [
  391. // {v: '0', n: '未回款'},
  392. {v: '1', n: '全额回款'},
  393. {v: '2', n: '部分回款'}
  394. ],
  395. backPayType: [
  396. {v: '1', n: '微信'},
  397. {v: '2', n: '支付宝'},
  398. {v: '3', n: '对公转账'}
  399. ],
  400. backInvoStas: [
  401. {v: '0', n: '未申请'},
  402. {v: '1', n: '已申请'},
  403. {v: '2', n: '已开具'}
  404. ],
  405. backRuleValidate: {
  406. return_status: [
  407. { required: true, message: '请选择回款状态', trigger: 'change' }
  408. ]
  409. },
  410. backDetailValidate: {
  411. returnTime: [
  412. { required: true, message: '请选择回款时间', trigger: 'change' }
  413. ],
  414. returnMoney: [
  415. { required: true, message: '请输入回款金额', trigger: 'change' }
  416. ],
  417. returnType: [
  418. { required: true, message: '请选择支付方式', trigger: 'change' }
  419. ],
  420. returnCode: [
  421. { required: true, message: '请输入支付单号', trigger: 'change' }
  422. ],
  423. returnInvoiceStatus: [
  424. { required: true, message: '请选择发票状态', trigger: 'change' }
  425. ],
  426. returnVoucherUrl: [
  427. { required: true, message: '请上传凭证', trigger: 'change' }
  428. ]
  429. },
  430. refundRuleValidate: {
  431. refundMoney: [
  432. { required: true, message: '退款金额不能为空', trigger: 'change' }
  433. ]
  434. }
  435. }
  436. }
  437. }
  438. </script>