detailDialog.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  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
  122. label="公司名称"
  123. prop="contactName"
  124. >
  125. <el-input disabled v-model="form.contactName"></el-input>
  126. </el-form-item>
  127. </el-col>
  128. <el-col :span="12">
  129. <el-form-item label="附件">
  130. <fileMain v-model="form.files" type="view"></fileMain>
  131. </el-form-item>
  132. </el-col>
  133. </el-row>
  134. <headerTitle title="付款信息"></headerTitle>
  135. <info-table ref="feeRelatedInfoTable" dialog-type="view" v-if="form.id" :form.sync="form" @invoiceChange="init"></info-table>
  136. <headerTitle title="对账明细" style="margin-top: 30px"></headerTitle>
  137. <account-detail-table
  138. ref="accountDetailTableRef"
  139. :datasource.sync="datasource"
  140. dialogType="view"
  141. :queryDimension="form.queryDimension"
  142. @totalChange="handleTotalChange"
  143. @countChange="handleCountChange"
  144. ></account-detail-table>
  145. </el-form>
  146. </div>
  147. <bpmDetail v-if="activeComp === 'bpm' && form.processInstanceId" :id="form.processInstanceId"></bpmDetail>
  148. </div>
  149. <div slot="footer">
  150. <el-button @click="cancel">返回</el-button>
  151. </div>
  152. </ele-modal>
  153. </template>
  154. <script>
  155. import {getFile} from '@/api/system/file';
  156. import dictMixins from '@/mixins/dictMixins';
  157. // import fileMain from '@/components/addDoc/index.vue';
  158. import {getFinPayableInfoAPI} from "@/api/financialManage/payableManage";
  159. import {getTreeByPid} from "@/api/classifyManage";
  160. import infoTable from "@/views/financialManage/payableManage/components/infoTable.vue";
  161. import bpmDetail from "@/views/bpm/processInstance/detail.vue";
  162. import { payAndReceiveEnum } from "@/enum/dict";
  163. import AccountDetailTable from '@/views/saleManage/saleOrder/accountstatement/components/accountDetailTable.vue';
  164. export default {
  165. mixins: [dictMixins],
  166. components: {
  167. bpmDetail,
  168. infoTable,
  169. AccountDetailTable,
  170. // fileMain
  171. },
  172. data() {
  173. return {
  174. activeComp: 'main',
  175. payAndReceiveEnum,
  176. tabOptions: [
  177. {key: 'main', name: '付款详情'},
  178. {key: 'bpm', name: '流程详情'}
  179. ],
  180. dialogType: '',
  181. form: {
  182. accountingSubjectCode: "",
  183. accountingSubjectId: '',
  184. accountingSubjectName: "",
  185. contactId: '',
  186. contactName: "",
  187. files: [],
  188. id: '',
  189. invoiceCode: "",
  190. receivableDate: "",
  191. payableTotalPrice: '',
  192. paidTotalPrice: '',
  193. remark: "",
  194. sourceCode: "",
  195. sourceId: "",
  196. sourceType: '',
  197. unpaidTotalPrice: 0
  198. },
  199. accountingSubjectList: [],
  200. datasource: [],
  201. rules: {
  202. accountingSubjectId: {required: true, message: '请选择', trigger: 'change'},
  203. receivableDate: {required: true, message: '请选择', trigger: 'change'},
  204. }
  205. };
  206. },
  207. props: {
  208. detailDialogFlag: {
  209. type: Boolean,
  210. default: false,
  211. },
  212. },
  213. async created() {
  214. },
  215. methods: {
  216. //获取详情
  217. async init(id, type) {
  218. this.dialogType = type;
  219. await this.getClassifyList(24, 'accountingSubjectList')
  220. const data = await getFinPayableInfoAPI(id)
  221. this.form = {
  222. ...this.form,
  223. ...data
  224. }
  225. this.datasource = data.productList || []
  226. this.$nextTick(()=>{
  227. this.$refs.feeRelatedInfoTable.init()
  228. })
  229. },
  230. handleTotalChange(total) {
  231. this.form.amountTotalPrice = total;
  232. },
  233. handleCountChange(count) {
  234. this.form.totalStatementCount = count;
  235. },
  236. downloadFile(file) {
  237. getFile({objectName: file.storePath}, file.name);
  238. },
  239. //获取分类管理中的数据
  240. async getClassifyList(id, listName) {
  241. let res = await getTreeByPid(id)
  242. this[listName] = res.data
  243. },
  244. //获取会计科目选中数据
  245. changeSubjectInfo(val) {
  246. if (!val) return this.form.accountingSubjectName = ''
  247. let data = this.$refs.treeSelect?.$refs?.tree?.getCurrentNode() || {}
  248. this.form.accountingSubjectName = data.name
  249. },
  250. cancel() {
  251. this.$emit('update:detailDialogFlag', false)
  252. }
  253. }
  254. };
  255. </script>
  256. <style scoped lang="scss">
  257. .ele-dialog-form {
  258. .el-form-item {
  259. margin-bottom: 10px;
  260. }
  261. }
  262. :deep(.payable-amount-input .el-input__inner) {
  263. text-align: left;
  264. }
  265. .headbox {
  266. display: flex;
  267. justify-content: flex-start;
  268. align-items: center;
  269. .amount {
  270. font-size: 14px;
  271. font-weight: bold;
  272. margin-right: 20px;
  273. }
  274. }
  275. </style>