detailDialog.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. <template>
  2. <ele-modal
  3. custom-class="ele-dialog-form long-dialog-form"
  4. :centered="true"
  5. :visible.sync="detailDialogFlag"
  6. title="详情"
  7. :append-to-body="true"
  8. :close-on-click-modal="false"
  9. width="60%"
  10. :before-close="cancel"
  11. :maxable="true"
  12. :resizable="true"
  13. >
  14. <div>
  15. <div class="switch_left">
  16. <ul>
  17. <li
  18. v-for="item in tabOptions"
  19. :key="item.key"
  20. :class="{ active: activeComp == item.key }"
  21. @click="activeComp = item.key"
  22. >
  23. {{ item.name }}
  24. </li>
  25. </ul>
  26. </div>
  27. <div v-if="activeComp === 'main'">
  28. <el-form ref="form" :model="form" class="el-form-box" label-width="120px">
  29. <headerTitle title="基本信息"></headerTitle>
  30. <el-row :gutter="12">
  31. <el-col :span="12">
  32. <el-form-item
  33. label="应付日期"
  34. prop="payableDate"
  35. >
  36. <el-date-picker
  37. style="width: 100%"
  38. v-model="form.payableDate"
  39. disabled
  40. type="date"
  41. value-format="yyyy-MM-dd">
  42. </el-date-picker>
  43. </el-form-item>
  44. </el-col>
  45. <el-col :span="12">
  46. <el-form-item
  47. label="应付金额"
  48. prop="payableTotalPrice"
  49. >
  50. <el-input-number disabled v-model="form.payableTotalPrice" :precision="2" :controls="false"
  51. style="width: 100%; text-align: left;"
  52. class="payable-amount-input"
  53. :min="0"></el-input-number>
  54. </el-form-item>
  55. </el-col>
  56. </el-row>
  57. <el-row :gutter="12">
  58. <el-col :span="12">
  59. <el-form-item
  60. label="会计科目"
  61. prop="accountingSubjectId"
  62. >
  63. <ele-tree-select
  64. disabled
  65. clearable
  66. filterable
  67. ref="treeSelect"
  68. :data="accountingSubjectList"
  69. v-model="form.accountingSubjectId"
  70. valueKey="id"
  71. labelKey="name"
  72. placeholder="请选择"
  73. @change="changeSubjectInfo"
  74. default-expand-all
  75. />
  76. </el-form-item>
  77. </el-col>
  78. <el-col :span="12">
  79. <el-form-item
  80. label="发票编码"
  81. prop="invoiceCode"
  82. >
  83. <el-input disabled v-model="form.invoiceCode"></el-input>
  84. </el-form-item>
  85. </el-col>
  86. </el-row>
  87. <el-row :gutter="12">
  88. <el-col :span="12">
  89. <el-form-item
  90. label="来源类型"
  91. prop="sourceType"
  92. >
  93. <el-input :value="payAndReceiveEnum.find(item=>item.value==form.sourceType)?.label" disabled></el-input>
  94. </el-form-item>
  95. </el-col>
  96. <el-col :span="12">
  97. <el-form-item
  98. label="来源编码"
  99. prop="sourceCode"
  100. >
  101. <el-input v-model="form.sourceCode" disabled></el-input>
  102. </el-form-item>
  103. </el-col>
  104. <el-col :span="12">
  105. <el-form-item
  106. label="采购订单号"
  107. prop="orderNo"
  108. >
  109. <el-input v-model="form.orderNo" disabled></el-input>
  110. </el-form-item>
  111. </el-col>
  112. <el-col :span="12">
  113. <el-form-item
  114. label="公司名称"
  115. prop="contactName"
  116. >
  117. <el-input disabled v-model="form.contactName"></el-input>
  118. </el-form-item>
  119. </el-col>
  120. <el-col :span="12">
  121. <el-form-item label="款项类型" prop="paymentTypeName">
  122. <el-input disabled v-model="form.paymentTypeName"></el-input>
  123. </el-form-item>
  124. </el-col>
  125. <el-col :span="12">
  126. <el-form-item label="附件">
  127. <fileMain v-model="form.files" type="view"></fileMain>
  128. </el-form-item>
  129. </el-col>
  130. </el-row>
  131. <headerTitle title="付款信息"></headerTitle>
  132. <info-table ref="feeRelatedInfoTable" dialog-type="view" v-if="form.id" :form.sync="form" @invoiceChange="init"></info-table>
  133. <headerTitle title="对账明细" style="margin-top: 30px"></headerTitle>
  134. <account-detail-table
  135. ref="accountDetailTableRef"
  136. :datasource.sync="datasource"
  137. dialogType="view"
  138. :queryDimension="form.queryDimension"
  139. @totalChange="handleTotalChange"
  140. @countChange="handleCountChange"
  141. :isShowDispatchDate="true"
  142. ></account-detail-table>
  143. </el-form>
  144. </div>
  145. <bpmDetail v-if="activeComp === 'bpm' && form.processInstanceId" :id="form.processInstanceId"></bpmDetail>
  146. </div>
  147. <div slot="footer">
  148. <el-button @click="cancel">返回</el-button>
  149. </div>
  150. </ele-modal>
  151. </template>
  152. <script>
  153. import {getFile} from '@/api/system/file';
  154. import dictMixins from '@/mixins/dictMixins';
  155. // import fileMain from '@/components/addDoc/index.vue';
  156. import {getFinPayableInfoAPI} from "@/api/financialManage/payableManage";
  157. import {getTreeByPid} from "@/api/classifyManage";
  158. import infoTable from "@/views/financialManage/payableManage/components/infoTable.vue";
  159. import bpmDetail from "@/views/bpm/processInstance/detail.vue";
  160. import { payAndReceiveEnum } from "@/enum/dict";
  161. import AccountDetailTable from '@/views/saleManage/saleOrder/accountstatement/components/accountDetailTable.vue';
  162. export default {
  163. mixins: [dictMixins],
  164. components: {
  165. bpmDetail,
  166. infoTable,
  167. AccountDetailTable,
  168. // fileMain
  169. },
  170. data() {
  171. return {
  172. activeComp: 'main',
  173. payAndReceiveEnum,
  174. tabOptions: [
  175. {key: 'main', name: '付款详情'},
  176. {key: 'bpm', name: '流程详情'}
  177. ],
  178. dialogType: '',
  179. form: {
  180. accountingSubjectCode: "",
  181. accountingSubjectId: '',
  182. accountingSubjectName: "",
  183. contactId: '',
  184. contactName: "",
  185. files: [],
  186. id: '',
  187. invoiceCode: "",
  188. receivableDate: "",
  189. payableTotalPrice: '',
  190. paidTotalPrice: '',
  191. remark: "",
  192. sourceCode: "",
  193. sourceId: "",
  194. sourceType: '',
  195. unpaidTotalPrice: 0
  196. },
  197. accountingSubjectList: [],
  198. datasource: [],
  199. rules: {
  200. accountingSubjectId: {required: true, message: '请选择', trigger: 'change'},
  201. receivableDate: {required: true, message: '请选择', trigger: 'change'},
  202. }
  203. };
  204. },
  205. props: {
  206. detailDialogFlag: {
  207. type: Boolean,
  208. default: false,
  209. },
  210. },
  211. async created() {
  212. },
  213. methods: {
  214. //获取详情
  215. async init(id, type) {
  216. this.dialogType = type;
  217. await this.getClassifyList(24, 'accountingSubjectList')
  218. const data = await getFinPayableInfoAPI(id)
  219. this.form = {
  220. ...this.form,
  221. ...data
  222. }
  223. this.datasource = data.productList || []
  224. this.$nextTick(()=>{
  225. this.$refs.feeRelatedInfoTable.init()
  226. })
  227. },
  228. handleTotalChange(total) {
  229. this.form.amountTotalPrice = total;
  230. },
  231. handleCountChange(count) {
  232. this.form.totalStatementCount = count;
  233. },
  234. downloadFile(file) {
  235. getFile({objectName: file.storePath}, file.name);
  236. },
  237. //获取分类管理中的数据
  238. async getClassifyList(id, listName) {
  239. let res = await getTreeByPid(id)
  240. this[listName] = res.data
  241. },
  242. //获取会计科目选中数据
  243. changeSubjectInfo(val) {
  244. if (!val) return this.form.accountingSubjectName = ''
  245. let data = this.$refs.treeSelect?.$refs?.tree?.getCurrentNode() || {}
  246. this.form.accountingSubjectName = data.name
  247. },
  248. cancel() {
  249. this.$emit('update:detailDialogFlag', false)
  250. }
  251. }
  252. };
  253. </script>
  254. <style scoped lang="scss">
  255. .ele-dialog-form {
  256. .el-form-item {
  257. margin-bottom: 10px;
  258. }
  259. }
  260. :deep(.payable-amount-input .el-input__inner) {
  261. text-align: left;
  262. }
  263. .headbox {
  264. display: flex;
  265. justify-content: flex-start;
  266. align-items: center;
  267. .amount {
  268. font-size: 14px;
  269. font-weight: bold;
  270. margin-right: 20px;
  271. }
  272. }
  273. </style>