applyAgainPay.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631
  1. <template>
  2. <!-- 发起付款申请 -->
  3. <el-dialog
  4. :close-on-click-modal="false"
  5. :close-on-press-escape="false"
  6. :title="dialogTitle"
  7. :visible.sync="dialogVisible"
  8. top="50px"
  9. width="75%"
  10. >
  11. <div class="tabsdom">
  12. <el-tabs v-model="activeName" @tab-click="handleClick">
  13. <el-tab-pane label="付款申请" name="first">
  14. <el-card shadow="always" style="padding: 15px 5px 5px 15px">
  15. <el-form
  16. ref="elformData"
  17. :model="formData"
  18. :rules="rules"
  19. class="payform"
  20. label-width="200px"
  21. size="medium"
  22. >
  23. <el-card style="padding:0px 20px;margin-bottom: 25px">
  24. <h3 style="margin-top: 8px;"><span style="color: red">*</span> 订单详情</h3>
  25. <el-row :gutter="15">
  26. <el-col :span="24">
  27. <el-form-item
  28. :style="{width: '100%'}"
  29. clearable
  30. label="采购单号"
  31. label-width="160px"
  32. >
  33. <el-select
  34. v-model="formData.orderId"
  35. disabled
  36. filterable
  37. placeholder="采购单号"
  38. @change="selectOutOrderDetails"
  39. >
  40. <el-option
  41. v-for="(item,index) in OutOrderList"
  42. :key="index"
  43. :label="item.custName+item.orderNo"
  44. :value="item.id"
  45. >
  46. <span style="float: left">{{ item.custName }}</span>
  47. <span style="float: right; color: #8492a6; font-size: 13px">
  48. {{ item.orderNo }}
  49. </span>
  50. </el-option>
  51. </el-select>
  52. </el-form-item>
  53. </el-col>
  54. <el-col :span="12">
  55. <el-form-item label="关联项目名称" label-width="160px" prop="proId">
  56. <el-input v-model="formData.projectName" readonly/>
  57. </el-form-item>
  58. </el-col>
  59. <el-col :span="12">
  60. <el-form-item label="客户名称" label-width="160px">
  61. <el-input v-model="formData.custName" readonly/>
  62. </el-form-item>
  63. </el-col>
  64. <el-col :span="12">
  65. <el-form-item label="发包日期" label-width="160px">
  66. <el-date-picker
  67. v-model="formData.dealAt"
  68. placeholder="发包日期"
  69. readonly
  70. style="width: 100%"
  71. type="datetime"
  72. value-format="yyyy-MM-dd HH:mm:ss"
  73. />
  74. </el-form-item>
  75. </el-col>
  76. <el-col :span="12">
  77. <el-form-item label="要求完成时间" label-width="160px">
  78. <el-date-picker
  79. v-model="formData.outTimeline"
  80. placeholder="要求完成时间"
  81. readonly
  82. style="width: 100%"
  83. type="datetime"
  84. value-format="yyyy-MM-dd HH:mm:ss"
  85. />
  86. </el-form-item>
  87. </el-col>
  88. <el-col :span="12">
  89. <el-form-item label="供应商" label-width="160px" prop="bizId">
  90. <el-input v-model="formData.bizName" readonly/>
  91. </el-form-item>
  92. </el-col>
  93. <el-col :span="12">
  94. <el-form-item label="联系人" label-width="160px" prop="bizBy">
  95. <el-select
  96. v-model="formData.bizBy"
  97. disabled
  98. disabled
  99. placeholder="选择联系人"
  100. >
  101. <el-option
  102. v-for="item in bizByList"
  103. :key="item.id"
  104. :label="item.username"
  105. :value="item.id"
  106. />
  107. </el-select>
  108. </el-form-item>
  109. </el-col>
  110. <el-col :span="12">
  111. <el-form-item label="订单总金额" label-width="160px" prop="orderAmount">
  112. <el-input v-model="formData.orderAmount" readonly type="number"/>
  113. </el-form-item>
  114. </el-col>
  115. <el-col :span="12">
  116. <el-form-item label="税率(%)" label-width="160px" prop="taxRate">
  117. <el-input v-model="formData.taxRate" readonly type="number"/>
  118. </el-form-item>
  119. </el-col>
  120. <el-col :span="12">
  121. <el-form-item label="支付方式" label-width="160px">
  122. <el-select v-model="formData.payType" disabled placeholder="支付方式">
  123. <el-option
  124. v-for="item in dc_data.PAY_TYPE"
  125. :key="item.value"
  126. :label="item.label"
  127. :value="item.value"
  128. />
  129. </el-select>
  130. </el-form-item>
  131. </el-col>
  132. <el-col :span="12">
  133. <el-form-item label="下单人" label-width="160px">
  134. <el-input v-model="formData.dealBy" readonly/>
  135. </el-form-item>
  136. </el-col>
  137. <el-col :span="24">
  138. <el-form-item label="支付说明" label-width="160px">
  139. <el-input
  140. v-model="formData.remark"
  141. :rows="3"
  142. readonly
  143. type="textarea"
  144. />
  145. </el-form-item>
  146. </el-col>
  147. </el-row>
  148. <!-- <el-row v-if="isPayInfo">-->
  149. <!-- <el-col style="padding-bottom: 10px">-->
  150. <!-- <span class="card_title">支付列表</span>-->
  151. <!-- <el-card shadow="always" style="padding:0px 20px 20px 20px">-->
  152. <!-- <el-row>-->
  153. <!-- <el-col :span="24">-->
  154. <!-- <el-table-->
  155. <!-- :data="payDetailData"-->
  156. <!-- row-class-name="g_table_row"-->
  157. <!-- stripe-->
  158. <!-- >-->
  159. <!-- <el-table-column label="支付日期" prop="payAt"/>-->
  160. <!-- <el-table-column label="付款名称" prop="payName"/>-->
  161. <!-- <el-table-column label="付款金额" prop="payAmount"/>-->
  162. <!-- <el-table-column label="发票号" prop="invoiceNo"/>-->
  163. <!-- <el-table-column label="发票金额" prop="invoiceAmount"/>-->
  164. <!-- <el-table-column label="申请人" prop="applyByName"/>-->
  165. <!-- <el-table-column label="申请日期" prop="applyTime"/>-->
  166. <!-- </el-table>-->
  167. <!-- </el-col>-->
  168. <!-- </el-row>-->
  169. <!-- </el-card>-->
  170. <!-- </el-col>-->
  171. <!-- </el-row>-->
  172. </el-card>
  173. <el-card style="padding:0px 20px;margin-bottom: 25px">
  174. <el-row :gutter="15">
  175. <h3 style="margin-top: 8px;"><span style="color: red">*</span>支付信息</h3>
  176. <el-col :span="12">
  177. <el-form-item
  178. label="项目累计已回款金额(元)"
  179. >
  180. <div style="line-height: 40px;height: 40px">{{ formData.totalReturnMoney }}</div>
  181. <!-- <el-input-->
  182. <!-- v-model="formData.totalReturnMoney"-->
  183. <!-- :style="{width: '100%'}"-->
  184. <!-- clearable-->
  185. <!-- placeholder="请输入项目累计已回款金额(元)"-->
  186. <!-- />-->
  187. </el-form-item>
  188. </el-col>
  189. <el-col :span="12">
  190. <el-form-item label="订单累计已支付金额(元)" prop="totalPayMoney">
  191. <div style="line-height: 40px;height: 40px">{{ formData.totalPayMoney }}</div>
  192. <!-- <el-input-->
  193. <!-- v-model="formData.totalPayMoney"-->
  194. <!-- :style="{width: '100%'}"-->
  195. <!-- clearable-->
  196. <!-- placeholder="请输入订单累计已支付金额(元)"-->
  197. <!-- />-->
  198. </el-form-item>
  199. </el-col>
  200. <el-col :span="12">
  201. <el-form-item label="付款名称" prop="payName">
  202. <el-input
  203. v-model="formData.payName"
  204. :style="{width: '100%'}"
  205. clearable
  206. placeholder="请输入付款名称"
  207. />
  208. </el-form-item>
  209. </el-col>
  210. <el-col :span="12">
  211. <el-form-item label="付款金额" prop="payMoney">
  212. <el-input
  213. v-model="formData.payMoney"
  214. :style="{width: '100%'}"
  215. clearable
  216. placeholder="请输入付款金额"
  217. />
  218. </el-form-item>
  219. </el-col>
  220. <!-- <el-col :span="24">-->
  221. <!-- <el-form-item label="费用成本归属" prop="costsType">-->
  222. <!-- <el-select-->
  223. <!-- v-model="formData.costsType"-->
  224. <!-- clearable-->
  225. <!-- filterable-->
  226. <!-- placeholder="请选择"-->
  227. <!-- >-->
  228. <!-- <el-option-->
  229. <!-- v-for="item in dc_data.BUDGET_CB"-->
  230. <!-- :key="item.value"-->
  231. <!-- :label="item.label"-->
  232. <!-- :value="item.value"-->
  233. <!-- />-->
  234. <!-- </el-select>-->
  235. <!-- </el-form-item>-->
  236. <!-- </el-col>-->
  237. </el-row>
  238. </el-card>
  239. <el-card style="padding:0px 20px;margin-bottom: 25px">
  240. <h3 style="margin-top: 8px;">
  241. <span style="color: red">*</span>
  242. 发票信息
  243. </h3>
  244. <el-row :gutter="15">
  245. <el-col :span="12">
  246. <el-form-item label="发票类型" label-width="160px" prop="billType">
  247. <el-radio-group v-model="formData.billType" size="mini">
  248. <el-radio
  249. v-for="(item, index) in billTypeOptions"
  250. :key="index"
  251. :label="item.value"
  252. >
  253. {{ item.label }}
  254. </el-radio>
  255. </el-radio-group>
  256. </el-form-item>
  257. </el-col>
  258. <el-col :span="12">
  259. <el-form-item label="开票金额" label-width="160px" prop="billMoney">
  260. <el-input
  261. v-model="formData.billMoney"
  262. :style="{width: '100%'}"
  263. clearable
  264. placeholder="请输入开票金额"
  265. />
  266. </el-form-item>
  267. </el-col>
  268. <el-col :span="12">
  269. <el-form-item label="发票号" label-width="160px" prop="billNumber">
  270. <el-input
  271. v-model="formData.billNumber"
  272. :style="{width: '100%'}"
  273. clearable
  274. placeholder="请输入发票号"
  275. />
  276. </el-form-item>
  277. </el-col>
  278. <el-col :span="12">
  279. <el-form-item label="税率" label-width="160px" prop="billRate">
  280. <el-input
  281. v-model="formData.billRate"
  282. :style="{width: '100%'}"
  283. clearable
  284. placeholder="请输入税率"
  285. />
  286. </el-form-item>
  287. </el-col>
  288. <el-col :span="24">
  289. <el-form-item label="上传" label-width="160px" prop="fileDataIds">
  290. <el-upload
  291. :action="$constant.BASE_URI+'/FileController/upload'"
  292. :file-list="formData.fileUrlList"
  293. class="upload-demo"
  294. multiple
  295. show-file-list
  296. >
  297. <el-button size="small" type="primary">点击上传</el-button>
  298. <div slot="file" slot-scope="{file}">
  299. <a :href="file.url">{{ file.name }}</a>
  300. <span class="el-upload-list__item-actions">
  301. <i class="el-icon-delete" @click="handlePictureRemove(file,formData.fileUrlList)"/>
  302. </span>
  303. </div>
  304. </el-upload>
  305. </el-form-item>
  306. </el-col>
  307. <el-col :span="24">
  308. <el-form-item label="抄送" label-width="160px" prop="field119">
  309. <user-select
  310. ref="defaultSelect"
  311. :default-select="selectList"
  312. :multiple="true"
  313. width="700"
  314. @selectValue="parentMethod"
  315. />
  316. </el-form-item>
  317. </el-col>
  318. </el-row>
  319. </el-card>
  320. </el-form>
  321. </el-card>
  322. </el-tab-pane>
  323. <el-tab-pane label="流程图 " name="second">
  324. <pay-canvas ref="PayCanvas"/>
  325. </el-tab-pane>
  326. </el-tabs>
  327. </div>
  328. <div slot="footer">
  329. <el-button @click="dialogVisible=false">取 消</el-button>
  330. <el-button :loading="buttonLoading" type="primary" @click="confirmSubmit()">确 定</el-button>
  331. </div>
  332. </el-dialog>
  333. </template>
  334. <script>
  335. import Base from '@/views/base/base'
  336. import BaseData from '@/views/base/baseData'
  337. import UserSelect from '@/views/components/UserSelect'
  338. import PayCanvas from '@/views/workflow/components/myProcess/payCanvas.vue'
  339. const intiData = {}
  340. export default {
  341. name: 'ApplyPay',
  342. components: {
  343. PayCanvas,
  344. UserSelect
  345. },
  346. mixins: [Base, BaseData],
  347. data() {
  348. return {
  349. row: {},
  350. fileError: false,
  351. bizByList: [],
  352. selectList: [],
  353. detailsForm: {},
  354. buttonLoading: false,
  355. // 查询的时候用的字典========================================
  356. dc_key: ['PAY_TYPE', 'BUDGET_CB', 'RECEIPT_TYPE'],
  357. fileDataIdsAction: 'https://jsonplaceholder.typicode.com/posts/',
  358. formData: {},
  359. billTypeOptions: [
  360. { 'label': '增票', 'value': 1 },
  361. { 'label': '普票', 'value': 2 },
  362. { 'label': '发票候补', 'value': 3 }
  363. ],
  364. onlineForm: {},
  365. dialogTitle: '付款申请-重新发起',
  366. dialogVisible: false,
  367. form: {},
  368. activeName: 'first',
  369. OutOrderList: [],
  370. rules: {
  371. fileDataIds: [{ required: false, message: '请上传发票文件', trigger: 'change' }],
  372. totalPayMoney: [{ required: true, message: '请输入订单累计已支付金额', trigger: 'change' }],
  373. payName: [{ required: true, message: '请输入付款名称', trigger: 'change' }],
  374. payMoney: [{ required: true, message: '请输入付款金额', trigger: 'change' }],
  375. costsType: [{ required: true, message: '请选择', trigger: 'change' }]
  376. }
  377. }
  378. },
  379. mounted() {
  380. const _this = this
  381. _this.initDict(_this.dc_key).then((res) => {
  382. })
  383. _this.getOutOrderList()
  384. _this.getBizeUserList()
  385. },
  386. methods: {
  387. handleClick(tab, event) {
  388. this.canVasStatus = false
  389. if (this.activeName == 'second') {
  390. this.canVasStatus = true
  391. this.$nextTick(() => {
  392. this.$refs.PayCanvas.createNodeCanvas(this.row)
  393. })
  394. }
  395. },
  396. handlePictureRemove(file, fileList) {
  397. var index = fileList.indexOf(file)
  398. fileList.splice(index, 1)
  399. },
  400. closeDianlog() {
  401. this.dialogVisible = false
  402. this.formData = {}
  403. },
  404. // uploadFile: function (param) {
  405. // upload(param, true).then((res) => {
  406. // this.formData.fileUrlList.push(res)
  407. // })
  408. // },
  409. downloadFaPiao(url) {
  410. window.open(url)
  411. },
  412. parentMethod(val) {
  413. if (val.length > 0) {
  414. this.formData.ccList = val.join(',')
  415. }
  416. },
  417. async getBizeUserList() {
  418. const { data } = await this.baseRequest1('BugLibraryController', 'listBizUserAll', {})
  419. this.bizByList = data
  420. },
  421. async selectOutOrderDetails(e) {
  422. const postData = { id: e }
  423. const { data } = await this.baseRequest1('OutOrderMainController', 'getVoById', postData)
  424. let index = this.OutOrderList.findIndex((a) => a.id == e)
  425. const res = await this.baseRequest1('ApplyPaymentController', 'getTotalMoneyByProId', { proId: this.OutOrderList[index].proId })
  426. const res2 = await this.baseRequest1('ApplyPaymentController', 'getTotalPayMoneyByOrderNo', { orderNo: this.OutOrderList[index].orderNo })
  427. this.formData = data
  428. this.formData.projectName = this.formData.proName
  429. this.formData.customerName = this.formData.custName
  430. // this.formData.supplierName = this.formData.bizName
  431. this.formData.dealAt = this.$common.transServDate(data.dealAt)
  432. this.formData.outTimeline = this.$common.transServDate(data.outTimeline)
  433. this.formData.orderNo = data.custName + '-' + data.orderNo
  434. this.formData.totalReturnMoney = res.data.data
  435. this.formData.totalPayMoney = res2.data.data
  436. },
  437. // /webServer/OutOrderMainController/list
  438. async getOutOrderList() {
  439. // 获取采购订单号下拉数据
  440. const postData = {
  441. pageNum: 1,
  442. pageSize: 10000,
  443. shouldAmount: 0
  444. }
  445. const { data } = await this.baseRequest1('OutOrderMainController', 'list', postData)
  446. this.OutOrderList = data.rows
  447. },
  448. baseRequest1(prefix, opUrl, postData) {
  449. return this.$channel.globleRequest(prefix, opUrl, postData, 'project task')
  450. },
  451. async confirmSubmit() {
  452. this.$refs.elformData.validate(async(valid) => {
  453. if (valid) {
  454. this.buttonLoading = true
  455. delete this.formData.flowMainCcList
  456. const { data } = await this.baseRequest1(
  457. 'ApplyPaymentController',
  458. 'addApplyPaymentAgain',
  459. { ...this.formData })
  460. this.buttonLoading = false
  461. if (data.code == 200) {
  462. this.$message.success('流程已发起')
  463. this.dialogVisible = false
  464. this.$refs.elformData.clearValidate()
  465. this.$emit('getData')
  466. }
  467. //
  468. } else {
  469. }
  470. })
  471. },
  472. async setVisible(status, row) {
  473. this.activeName = 'first'
  474. if (this.$refs.elformData) {
  475. this.$refs.elformData.clearValidate()
  476. }
  477. const { data } = await this.baseRequest1('ApplyPaymentController', 'getInfoByFlowMainId', { flowMainId: row.id })
  478. const { data: formData } = await this.baseRequest1('OutOrderMainController', 'getVoById', { id: data.orderId })
  479. this.selectList = data.flowMainCcList.map((e) => {
  480. return e.ccUser
  481. })
  482. formData.projectName = formData.proName
  483. this.formData = { ...data, ...formData }
  484. this.formData.dealAt = this.$common.transServDate(this.formData.dealAt)
  485. this.formData.outTimeline = this.$common.transServDate(this.formData.outTimeline)
  486. if (data.fileDataIds) {
  487. const { data: fileTaoTaoList } = await this.baseRequest1('FileZtController', 'findFileInfoByIds/' + data.fileDataIds, '')
  488. console.log(fileTaoTaoList.data)
  489. this.formData.fileUrlList = fileTaoTaoList.data.map((e) => {
  490. return {
  491. url: this.$constant.BASE_URI + '/FileController/download/' + e.id,
  492. name: e.fileName,
  493. data: e.id,
  494. uid: new Date().getTime()
  495. }
  496. })
  497. console.log(this.form.fileUrlList)
  498. } else {
  499. this.formData.fileUrlList
  500. }
  501. this.dialogVisible = status
  502. this.row = row
  503. }
  504. }
  505. }
  506. </script>
  507. <style lang="scss">
  508. .mb25 {
  509. margin-bottom: 25px;
  510. }
  511. .pdtopbottom16 {
  512. padding: 0px 16px;
  513. }
  514. .pdtop16px {
  515. padding-top: 16px;
  516. }
  517. .elformdom {
  518. label {
  519. text-align: right;
  520. font-size: 16px;
  521. font-family: 微软雅黑;
  522. padding-right: 10px;
  523. line-height: 40px;
  524. word-break: keep-all;
  525. white-space: nowrap;
  526. -webkit-font-smoothing: antialiased;
  527. color: #303133;
  528. text-rendering: optimizeLegibility;
  529. font-weight: 400;
  530. }
  531. .el-radio {
  532. height: 15px;
  533. margin-top: -19px;
  534. }
  535. }
  536. .payform {
  537. .el-form-item__label {
  538. text-align: right;
  539. font-size: 16px;
  540. font-family: 微软雅黑;
  541. padding-right: 10px;
  542. line-height: 40px;
  543. word-break: keep-all;
  544. white-space: nowrap;
  545. font-weight: 400;
  546. }
  547. }
  548. .tabsdom {
  549. .el-tabs__header {
  550. text-align: center !important;
  551. width: 139px !important;
  552. text-align: center !important;
  553. display: block !important;
  554. margin: auto !important;
  555. margin-bottom: 15px !important;
  556. }
  557. .el-tabs__nav-wrap::after {
  558. display: none;
  559. }
  560. }
  561. .cost_form {
  562. .col-input {
  563. font-weight: 400;
  564. }
  565. .el-form-item__label {
  566. text-align: right;
  567. font-size: 16px;
  568. font-family: 微软雅黑;
  569. padding-right: 10px;
  570. line-height: 40px;
  571. word-break: keep-all;
  572. white-space: nowrap;
  573. color: #606266;
  574. text-rendering: optimizeLegibility;
  575. font-weight: 400;
  576. }
  577. .el-form-item__label .moneydetails {
  578. text-align: right;
  579. font-size: 16px;
  580. font-family: 微软雅黑;
  581. padding-right: 10px;
  582. line-height: 40px;
  583. word-break: keep-all;
  584. white-space: nowrap;
  585. color: #606266;
  586. text-rendering: optimizeLegibility;
  587. font-weight: 400;
  588. }
  589. }
  590. </style>