applyPayDetails.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672
  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. prop="orderId"
  33. >
  34. <el-select
  35. v-model="formData.orderId"
  36. disabled
  37. filterable
  38. placeholder="采购单号"
  39. @change="selectOutOrderDetails"
  40. >
  41. <el-option
  42. v-for="(item,index) in OutOrderList"
  43. :key="index"
  44. :label="item.custName+item.orderNo"
  45. :value="item.id"
  46. >
  47. <span style="float: left">{{ item.custName }}</span>
  48. <span style="float: right; color: #8492a6; font-size: 13px">
  49. {{ item.orderNo }}
  50. </span>
  51. </el-option>
  52. </el-select>
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="12">
  56. <el-form-item label="关联项目名称" label-width="160px" prop="projectName">
  57. <el-input v-model="formData.projectName" readonly/>
  58. </el-form-item>
  59. </el-col>
  60. <el-col :span="12">
  61. <el-form-item label="客户名称" label-width="160px" prop="custName">
  62. <el-input v-model="formData.custName" readonly/>
  63. </el-form-item>
  64. </el-col>
  65. <el-col :span="12">
  66. <el-form-item label="发包日期" label-width="160px" prop="dealAt">
  67. <el-date-picker
  68. v-model="formData.dealAt"
  69. placeholder="发包日期"
  70. readonly
  71. style="width: 100%"
  72. type="datetime"
  73. value-format="yyyy-MM-dd HH:mm:ss"
  74. />
  75. </el-form-item>
  76. </el-col>
  77. <el-col :span="12">
  78. <el-form-item label="要求完成时间" label-width="160px" prop="outTimeline">
  79. <el-date-picker
  80. v-model="formData.outTimeline"
  81. placeholder="要求完成时间"
  82. readonly
  83. style="width: 100%"
  84. type="datetime"
  85. value-format="yyyy-MM-dd HH:mm:ss"
  86. />
  87. </el-form-item>
  88. </el-col>
  89. <el-col :span="12">
  90. <el-form-item label="供应商" label-width="160px" prop="bizName">
  91. <el-input v-model="formData.supplierName" readonly/>
  92. </el-form-item>
  93. </el-col>
  94. <el-col :span="12">
  95. <el-form-item label="联系人" label-width="160px" prop="bizBy">
  96. <el-select
  97. v-model="formData.bizBy"
  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" prop="payType">
  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" prop="dealBy">
  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" prop="remark">
  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. <h3 style="margin-top: 8px;"><span style="color: red">*</span>支付信息</h3>
  175. <el-row :gutter="15">
  176. <el-col :span="12">
  177. <el-form-item
  178. label="项目累计已回款金额(元)"
  179. prop="totalReturnMoney"
  180. >
  181. <div style="line-height: 40px;height: 40px">{{ formData.totalReturnMoney }}</div>
  182. <!-- <el-input-->
  183. <!-- v-model="formData.totalReturnMoney"-->
  184. <!-- :style="{width: '100%'}"-->
  185. <!-- clearable placeholder="请输入项目累计已回款金额(元)"-->
  186. <!-- readonly-->
  187. <!-- />-->
  188. </el-form-item>
  189. </el-col>
  190. <el-col :span="12">
  191. <el-form-item label="订单累计已支付金额(元)" prop="totalPayMoney">
  192. <div style="line-height: 40px;height: 40px">{{ formData.totalPayMoney }}</div>
  193. <!-- <el-input-->
  194. <!-- v-model="formData.totalPayMoney"-->
  195. <!-- :style="{width: '100%'}"-->
  196. <!-- clearable placeholder="请输入订单累计已支付金额(元)"-->
  197. <!-- readonly-->
  198. <!-- />-->
  199. </el-form-item>
  200. </el-col>
  201. <el-col :span="12">
  202. <el-form-item label="付款名称" prop="payName">
  203. <el-input
  204. v-model="formData.payName"
  205. :style="{width: '100%'}"
  206. clearable
  207. placeholder="请输入付款名称"
  208. readonly
  209. />
  210. </el-form-item>
  211. </el-col>
  212. <el-col :span="12">
  213. <el-form-item label="付款金额" prop="payMoney">
  214. <el-input
  215. v-model="formData.payMoney"
  216. :style="{width: '100%'}"
  217. clearable
  218. placeholder="请输入付款金额"
  219. readonly
  220. />
  221. </el-form-item>
  222. </el-col>
  223. <!-- <el-col :span="24">-->
  224. <!-- <el-form-item label="费用成本归属" prop="costsType">-->
  225. <!-- <el-select-->
  226. <!-- v-model="formData.costsType"-->
  227. <!-- clearable-->
  228. <!-- disabled-->
  229. <!-- filterable-->
  230. <!-- placeholder="请选择"-->
  231. <!-- >-->
  232. <!-- <el-option-->
  233. <!-- v-for="item in dc_data.BUDGET_CB"-->
  234. <!-- :key="item.value"-->
  235. <!-- :label="item.label"-->
  236. <!-- :value="item.value"-->
  237. <!-- />-->
  238. <!-- </el-select>-->
  239. <!-- </el-form-item>-->
  240. <!-- </el-col>-->
  241. </el-row>
  242. </el-card>
  243. <el-card style="padding:0px 20px;margin-bottom: 25px">
  244. <h3 style="margin-top: 8px;">
  245. <span style="color: red">*</span>
  246. 发票信息
  247. </h3>
  248. <el-row :gutter="15">
  249. <el-col :span="12">
  250. <el-form-item label="发票类型" label-width="160px" prop="billType">
  251. <el-radio-group v-model="formData.billType" disabled size="mini">
  252. <el-radio
  253. v-for="(item, index) in billTypeOptions"
  254. :key="index"
  255. :disabled="item.disabled"
  256. :label="item.value"
  257. >
  258. {{ item.label }}
  259. </el-radio>
  260. </el-radio-group>
  261. </el-form-item>
  262. </el-col>
  263. <el-col :span="12">
  264. <el-form-item label="开票金额" label-width="160px" prop="billMoney">
  265. <el-input
  266. v-model="formData.billMoney"
  267. :style="{width: '100%'}"
  268. clearable
  269. placeholder="请输入开票金额"
  270. readonly
  271. />
  272. </el-form-item>
  273. </el-col>
  274. <el-col :span="12">
  275. <el-form-item label="发票号" label-width="160px" prop="billNumber">
  276. <el-input
  277. v-model="formData.billNumber"
  278. :style="{width: '100%'}"
  279. clearable
  280. placeholder="请输入发票号"
  281. readonly
  282. />
  283. </el-form-item>
  284. </el-col>
  285. <el-col :span="12">
  286. <el-form-item label="税率" label-width="160px" prop="billRate">
  287. <el-input
  288. v-model="formData.billRate"
  289. :style="{width: '100%'}"
  290. clearable
  291. placeholder="请输入税率"
  292. readonly
  293. />
  294. </el-form-item>
  295. </el-col>
  296. <el-col :span="24">
  297. <el-form-item label="上传" label-width="160px" prop="fileUrlList">
  298. <el-upload
  299. :action="$constant.BASE_URI+'/FileController/upload'"
  300. :file-list="formData.fileUrlList"
  301. class="upload-demo"
  302. disabled
  303. multiple
  304. show-file-list
  305. >
  306. <el-button size="small" type="primary">点击上传</el-button>
  307. <div slot="file" slot-scope="{file}">
  308. <a :href="file.url">{{ file.name }}</a>
  309. <span class="el-upload-list__item-actions"/>
  310. </div>
  311. </el-upload>
  312. </el-form-item>
  313. </el-col>
  314. <el-col :span="24">
  315. <el-form-item label="抄送" label-width="160px" prop="selectList">
  316. <user-select
  317. ref="defaultSelect"
  318. :default-select="selectList"
  319. :multiple="true"
  320. disab
  321. width="700"
  322. @selectValue="parentMethod"
  323. />
  324. </el-form-item>
  325. </el-col>
  326. </el-row>
  327. </el-card>
  328. </el-form>
  329. </el-card>
  330. <el-card style="margin-top: 10px;">
  331. <h3 style="margin:0">支付复核 </h3>
  332. <el-form
  333. ref="confirmForm"
  334. :model="formData"
  335. class="cost_form"
  336. label-width="100px"
  337. style="width: 100%;padding: 5px"
  338. >
  339. <el-row :gutter="10">
  340. <el-col :span="24">
  341. <el-form-item label="实际支付日期" style="margin-bottom: 15px">
  342. <el-date-picker
  343. disabled
  344. v-model="formData.payTime"
  345. placeholder="处理日期"
  346. style="width: 100%"
  347. type="date"
  348. value-format="yyyy-MM-dd"
  349. />
  350. </el-form-item>
  351. </el-col>
  352. <el-col :span="24">
  353. <el-form-item label="备注" style="margin-bottom: 0">
  354. <el-input readonly v-model="formData.payRemark" style="margin-top:10px" type="textarea"/>
  355. </el-form-item>
  356. </el-col>
  357. </el-row>
  358. </el-form>
  359. </el-card>
  360. <h3>流程历史</h3>
  361. <el-card>
  362. <div class="tableDom">
  363. <el-table
  364. :data="tableData"
  365. :header-cell-style="{
  366. background:'#1890FF !important',
  367. color:'white'
  368. }"
  369. border
  370. style="width: 100%"
  371. >
  372. <el-table-column fixed label="序号" type="index" width="60"/>
  373. <el-table-column
  374. label="节点名称"
  375. prop="nodeName"
  376. width="180"
  377. />
  378. <el-table-column
  379. label="处理人"
  380. prop="auditUserName"
  381. width="180"
  382. />
  383. <el-table-column
  384. label="审核结果"
  385. prop="auditResultString"
  386. />
  387. <el-table-column
  388. label="审核意见"
  389. prop="auditContent"
  390. />
  391. <el-table-column
  392. label="发起/审核时间"
  393. prop="createdAt"
  394. >
  395. <template slot-scope="scope">
  396. {{ $common.transTime(scope.row.createdAt) }}
  397. </template>
  398. </el-table-column>
  399. </el-table>
  400. </div>
  401. </el-card>
  402. </el-tab-pane>
  403. <el-tab-pane label="流程图 " name="second">
  404. <pay-canvas ref="PayCanvas"/>
  405. </el-tab-pane>
  406. </el-tabs>
  407. </div>
  408. <div slot="footer">
  409. <el-button @click="closeDianlog()">关 闭</el-button>
  410. </div>
  411. </el-dialog>
  412. </template>
  413. <script>
  414. import Base from '@/views/base/base'
  415. import BaseData from '@/views/base/baseData'
  416. import UserSelect from '@/views/components/UserSelect'
  417. import PayCanvas from '@/views/workflow/components/myProcess/payCanvas.vue'
  418. const intiData = {}
  419. export default {
  420. name: 'ApplyPay',
  421. components: {
  422. PayCanvas,
  423. UserSelect
  424. },
  425. mixins: [Base, BaseData],
  426. data() {
  427. return {
  428. row: {},
  429. zffhStatus: false,
  430. tableData: [],
  431. fileError: false,
  432. bizByList: [],
  433. selectList: [],
  434. detailsForm: {},
  435. buttonLoading: false,
  436. // 查询的时候用的字典========================================
  437. dc_key: ['PAY_TYPE', 'BUDGET_CB', 'RECEIPT_TYPE'],
  438. fileDataIdsAction: 'https://jsonplaceholder.typicode.com/posts/',
  439. formData: {},
  440. billTypeOptions: [
  441. { 'label': '增票', 'value': 1 },
  442. { 'label': '普票', 'value': 2 },
  443. { 'label': '发票候补', 'value': 3 }
  444. ],
  445. onlineForm: {},
  446. dialogTitle: '付款申请-查看详情',
  447. dialogVisible: false,
  448. form: {},
  449. activeName: 'first',
  450. OutOrderList: [],
  451. rules: {
  452. fileDataIds: [{ required: false, message: '请上传发票文件', trigger: 'change' }],
  453. totalPayMoney: [{ required: true, message: '请输入订单累计已支付金额', trigger: 'change' }],
  454. payName: [{ required: true, message: '请输入付款名称', trigger: 'change' }],
  455. payMoney: [{ required: true, message: '请输入付款金额', trigger: 'change' }]
  456. // costsType: [{required: true, message: '请选择', trigger: 'change'}]
  457. }
  458. }
  459. },
  460. mounted() {
  461. const _this = this
  462. _this.initDict(_this.dc_key).then((res) => {
  463. })
  464. _this.getOutOrderList()
  465. _this.getBizeUserList()
  466. // /webServer/BugLibraryController/listBizUserAll
  467. },
  468. methods: {
  469. handleClick(tab, event) {
  470. if (this.activeName == 'second') this.$refs.PayCanvas.createNodeCanvas(this.row)
  471. },
  472. closeDianlog() {
  473. this.dialogVisible = false
  474. this.formData = {}
  475. },
  476. // uploadFile: function (param) {
  477. // upload(param, true).then((res) => {
  478. // this.formData.fileUrlList.push(res)
  479. // })
  480. // },
  481. downloadFaPiao(url) {
  482. window.open(url)
  483. },
  484. parentMethod(val) {
  485. if (val.length > 0) {
  486. this.formData.ccList = val.join(',')
  487. }
  488. },
  489. async getBizeUserList() {
  490. const { data } = await this.baseRequest1('BugLibraryController', 'listBizUserAll', {})
  491. this.bizByList = data
  492. },
  493. async selectOutOrderDetails(e) {
  494. debugger
  495. console.log(e)
  496. const postData = { id: e }
  497. const { data } = await this.baseRequest1('OutOrderMainController', 'getVoById', postData)
  498. console.log(data.dealAt)
  499. this.formData = data
  500. this.formData.projectName = this.formData.proName
  501. this.formData.customerName = this.formData.custName
  502. // this.formData.supplierName = this.formData.bizName
  503. this.formData.dealAt = this.$common.transServDate(data.dealAt)
  504. this.formData.outTimeline = this.$common.transServDate(data.outTimeline)
  505. this.formData.orderNo = data.custName + '-' + data.orderNo
  506. },
  507. // /webServer/OutOrderMainController/list
  508. async getOutOrderList() {
  509. // 获取采购订单号下拉数据
  510. const postData = {
  511. pageNum: 1,
  512. pageSize: 10000,
  513. shouldAmount: 0
  514. }
  515. const { data } = await this.baseRequest1('OutOrderMainController', 'list', postData)
  516. this.OutOrderList = data.rows
  517. },
  518. baseRequest1(prefix, opUrl, postData) {
  519. return this.$channel.globleRequest(prefix, opUrl, postData, 'project task')
  520. },
  521. async setVisible(status, row) {
  522. const { data } = await this.baseRequest1('ApplyPaymentController', 'getInfoByFlowMainId', { flowMainId: row.id })
  523. const { data: formData } = await this.baseRequest1('OutOrderMainController', 'getVoById', { id: data.orderId })
  524. this.selectList = data.flowMainCcList.map((e) => {
  525. return e.ccUser
  526. })
  527. const { data: flowHistroy } = await this.baseRequest1('FlowMainController', 'getFlowHistroyByFlowMainId', { flowMainId: row.id })
  528. this.tableData = flowHistroy
  529. this.formData = { ...data, ...formData }
  530. this.formData.payTime = data.payTime ? this.$common.transDate(data.payTime) :
  531. this.formData.projectName = formData.proName
  532. this.formData.dealAt = this.$common.transServDate(this.formData.dealAt)
  533. this.formData.outTimeline = this.$common.transServDate(this.formData.outTimeline)
  534. if (data.fileDataIds) {
  535. const { data: fileTaoTaoList } = await this.baseRequest1('FileZtController', 'findFileInfoByIds/' + data.fileDataIds, '')
  536. console.log(fileTaoTaoList.data)
  537. this.formData.fileUrlList = fileTaoTaoList.data.map((e) => {
  538. return {
  539. url: this.$constant.BASE_URI + '/FileController/download/' + e.id,
  540. name: e.fileName,
  541. data: e.id,
  542. uid: new Date().getTime()
  543. }
  544. })
  545. console.log(this.form.fileUrlList)
  546. } else {
  547. this.formData.fileUrlList = []
  548. }
  549. this.row = row
  550. this.dialogVisible = status
  551. }
  552. }
  553. }
  554. </script>
  555. <style lang="scss">
  556. .mb25 {
  557. margin-bottom: 25px;
  558. }
  559. .pdtopbottom16 {
  560. padding: 0px 16px;
  561. }
  562. .pdtop16px {
  563. padding-top: 16px;
  564. }
  565. .elformdom {
  566. label {
  567. text-align: right;
  568. font-size: 16px;
  569. font-family: 微软雅黑;
  570. padding-right: 10px;
  571. line-height: 40px;
  572. word-break: keep-all;
  573. white-space: nowrap;
  574. -webkit-font-smoothing: antialiased;
  575. color: #303133;
  576. text-rendering: optimizeLegibility;
  577. font-weight: 400;
  578. }
  579. .el-radio {
  580. height: 15px;
  581. margin-top: -19px;
  582. }
  583. }
  584. .payform {
  585. .el-form-item__label {
  586. text-align: right;
  587. font-size: 16px;
  588. font-family: 微软雅黑;
  589. padding-right: 10px;
  590. line-height: 40px;
  591. word-break: keep-all;
  592. white-space: nowrap;
  593. font-weight: 400;
  594. }
  595. }
  596. .tabsdom {
  597. .el-tabs__header {
  598. text-align: center !important;
  599. width: 139px !important;
  600. text-align: center !important;
  601. display: block !important;
  602. margin: auto !important;
  603. margin-bottom: 15px !important;
  604. }
  605. .el-tabs__nav-wrap::after {
  606. display: none;
  607. }
  608. }
  609. .cost_form {
  610. .col-input {
  611. font-weight: 400;
  612. }
  613. .el-form-item__label {
  614. text-align: right;
  615. font-size: 16px;
  616. font-family: 微软雅黑;
  617. padding-right: 10px;
  618. line-height: 40px;
  619. word-break: keep-all;
  620. white-space: nowrap;
  621. color: #606266;
  622. text-rendering: optimizeLegibility;
  623. font-weight: 400;
  624. }
  625. .el-form-item__label .moneydetails {
  626. text-align: right;
  627. font-size: 16px;
  628. font-family: 微软雅黑;
  629. padding-right: 10px;
  630. line-height: 40px;
  631. word-break: keep-all;
  632. white-space: nowrap;
  633. color: #606266;
  634. text-rendering: optimizeLegibility;
  635. font-weight: 400;
  636. }
  637. }
  638. </style>