detailDialog.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. <!-- 预付款新增/编辑弹窗 -->
  2. <template>
  3. <el-form
  4. ref="form"
  5. :model="form"
  6. :rules="rules"
  7. label-width="120px"
  8. v-show="activeComp == 'main'"
  9. >
  10. <!-- 基本信息 -->
  11. <headerTitle title="基本信息" size="16px"></headerTitle>
  12. <el-row :gutter="20">
  13. <el-col :span="8">
  14. <el-form-item label="预付日期:" prop="prepayDate">
  15. <el-date-picker
  16. v-model="form.prepayDate"
  17. type="date"
  18. placeholder="请选择"
  19. value-format="yyyy-MM-dd"
  20. style="width: 100%"
  21. :disabled="isDetail"
  22. />
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="8">
  26. <el-form-item label="预付金额:" prop="prepayTotalPrice">
  27. <el-input
  28. v-model="form.prepayTotalPrice"
  29. placeholder="请输入"
  30. :disabled="isDetail"
  31. >
  32. <template slot="append">元</template>
  33. </el-input>
  34. </el-form-item>
  35. </el-col>
  36. <el-col :span="8">
  37. <el-form-item label="会计科目:" prop="accountingSubjectId">
  38. <ele-tree-select
  39. clearable
  40. :disabled="isDetail"
  41. filterable
  42. ref="treeSelect"
  43. :data="accountingSubjectList"
  44. v-model="form.accountingSubjectId"
  45. valueKey="id"
  46. labelKey="name"
  47. placeholder="请选择"
  48. @change="changeSubjectInfo"
  49. default-expand-all
  50. />
  51. </el-form-item>
  52. </el-col>
  53. </el-row>
  54. <el-row :gutter="20">
  55. <el-col :span="8">
  56. <el-form-item label="供应商名称:" prop="contactName">
  57. <el-input
  58. clearable
  59. v-model="form.contactName"
  60. @click.native="$refs.parentRef.open()"
  61. placeholder="请选择"
  62. readonly
  63. :disabled="isDetail"
  64. />
  65. </el-form-item>
  66. </el-col>
  67. <el-col :span="8">
  68. <el-form-item label="来源类型:" prop="sourceType">
  69. <el-select
  70. v-model="form.sourceType"
  71. placeholder="请选择"
  72. style="width: 100%"
  73. :disabled="isDetail"
  74. >
  75. <el-option label="采购订单" :value="3"></el-option>
  76. <el-option label="合同" :value="2"></el-option>
  77. </el-select>
  78. </el-form-item>
  79. </el-col>
  80. <el-col :span="8">
  81. <el-form-item label="来源编码:" prop="sourceCode">
  82. <!-- <el-select
  83. v-model="form.sourceCode"
  84. placeholder="请选择"
  85. style="width: 100%"
  86. :disabled="isDetail"
  87. filterable
  88. >
  89. <el-option
  90. v-for="item in sourceCodeOptions"
  91. :key="item.value"
  92. :label="item.label"
  93. :value="item.value"
  94. />
  95. </el-select> -->
  96. <el-input
  97. clearable
  98. v-model="form.sourceCode"
  99. @click.native="openSource"
  100. placeholder="请选择"
  101. :disabled="isDetail"
  102. readonly
  103. />
  104. </el-form-item>
  105. </el-col>
  106. </el-row>
  107. <el-row :gutter="20">
  108. <el-col :span="8">
  109. <el-form-item label="款项类型:" prop="fundType">
  110. <DictSelection
  111. dictName="预收款款项类型"
  112. clearable
  113. v-model="form.fundType"
  114. :disabled="isDetail"
  115. >
  116. </DictSelection>
  117. </el-form-item>
  118. </el-col>
  119. <el-col :span="8">
  120. <el-form-item label="付款条件:" prop="paymentConditionName">
  121. <!-- <el-select
  122. v-model="form.paymentConditionName"
  123. placeholder="请选择"
  124. style="width: 100%"
  125. :disabled="isDetail"
  126. >
  127. <el-option
  128. v-for="item in paymentTermsOptions"
  129. :key="item.value"
  130. :label="item.label"
  131. :value="item.value"
  132. />
  133. </el-select> -->
  134. <el-input
  135. clearable
  136. v-model="form.paymentConditionName"
  137. @click.native="openReceiveTerms"
  138. placeholder="请选择"
  139. :disabled="isDetail"
  140. readonly
  141. />
  142. </el-form-item>
  143. </el-col>
  144. </el-row>
  145. <el-row :gutter="20">
  146. <el-col :span="8">
  147. <el-form-item label="备注:" prop="remark">
  148. <el-input
  149. v-model="form.remark"
  150. placeholder="请输入"
  151. :disabled="isDetail"
  152. />
  153. </el-form-item>
  154. </el-col>
  155. <el-col :span="8">
  156. <el-form-item label="附件:" prop="files">
  157. <fileMain v-model="form.files" type="view"></fileMain>
  158. </el-form-item>
  159. </el-col>
  160. </el-row>
  161. <!-- 物品清单 -->
  162. <headerTitle title="物品清单" size="16px" style="margin-top: 20px"></headerTitle>
  163. <inventoryTableDetails
  164. ref="inventoryTableDetailsRef"
  165. :isAllPrice="true"
  166. :isDiscountTotalPrice="true"
  167. :showSummary="true"
  168. :isSelected="false"
  169. cacheKeyUrl="eos-prepayment-inventoryTableDetails"
  170. :countObj="{
  171. countKey: 'totalCount',
  172. unitKey: 'saleUnit',
  173. unitIdKey: 'saleUnitId'
  174. }"
  175. ></inventoryTableDetails>
  176. <!-- 付款信息 -->
  177. <!-- <div style="margin-top: 20px" v-if="isDetail">
  178. <headerTitle title="付款信息"></headerTitle>
  179. <div style="margin: 10px 0; font-size: 14px; color: #606266;">
  180. <span>预付金额:{{ form.amount || 0 }} 元</span>
  181. <span style="margin-left: 20px;">已付金额:{{ paidAmount }} 元</span>
  182. <span style="margin-left: 20px;">未付金额:{{ unpaidAmount }} 元</span>
  183. </div>
  184. <ele-pro-table
  185. ref="table"
  186. :needPage="false"
  187. :columns="columns"
  188. :datasource="form.detailList"
  189. :toolkit="[]"
  190. >
  191. <template v-slot:files="{ row: r }">
  192. <fileMain v-model="r.files" type="view" :limit="1"></fileMain>
  193. </template>
  194. </ele-pro-table>
  195. </div> -->
  196. </el-form>
  197. </template>
  198. <script>
  199. import headerTitle from '@/components/header-title';
  200. import inventoryTableDetails from '@/BIZComponents/inventoryTableDetails.vue';
  201. import fileMain from '@/components/addDoc/index.vue';
  202. import { getPrepaymentInfo } from '@/api/bpm/components/financialManage/payableManage/index.js';
  203. import { getTreeByPid } from '@/api/classifyManage';
  204. export default {
  205. components: {
  206. headerTitle,
  207. inventoryTableDetails,
  208. fileMain,
  209. },
  210. props: {
  211. businessId: {
  212. type: String,
  213. default: ''
  214. }
  215. },
  216. data() {
  217. return {
  218. activeComp: 'main',
  219. visible: false,
  220. loading: false,
  221. isUpdate: false,
  222. isDetail: true,
  223. processSubmitDialogFlag: false,
  224. supplierOptions: [],
  225. sourceCodeOptions: [],
  226. paymentTermsOptions: [],
  227. accountingSubjectList: [],
  228. form: {
  229. id: null,
  230. code: '',
  231. prepayDate: '',
  232. prepayTotalPrice: '',
  233. accountingSubjectId: '1779719367139791007',
  234. accountingSubjectCode: '1123',
  235. accountingSubjectName: '预付账款',
  236. contactName: '',
  237. contactId: '',
  238. sourceType: 3,
  239. sourceCode: '',
  240. sourceId: '',
  241. fundType: "1",
  242. paymentConditionName: '',
  243. paymentConditionId: '',
  244. remark: '',
  245. files: []
  246. },
  247. rules: {
  248. prepayDate: [{ required: true, message: '请选择预付日期', trigger: 'change' }],
  249. prepayTotalPrice: [{ required: true, message: '请输入预付金额', trigger: 'blur' }],
  250. accountingSubjectId: [{ required: true, message: '请选择会计科目', trigger: 'change' }],
  251. contactName: [{ required: true, message: '请选择供应商名称', trigger: 'change' }],
  252. sourceType: [{ required: true, message: '请选择来源类型', trigger: 'change' }],
  253. sourceCode: [{ required: true, message: '请选择来源编码', trigger: 'change' }],
  254. fundType: [{ required: true, message: '请选择款项类型', trigger: 'change' }]
  255. },
  256. columns: [
  257. {
  258. type: 'index',
  259. label: '序号',
  260. width: 55,
  261. align: 'center',
  262. fixed: 'left'
  263. },
  264. {
  265. prop: 'paidDate',
  266. label: '付款时间',
  267. align: 'center',
  268. minWidth: 160
  269. },
  270. {
  271. prop: 'paidTotalPrice',
  272. label: '已付金额',
  273. align: 'center',
  274. minWidth: 140
  275. },
  276. {
  277. prop: 'paymentTypeName',
  278. label: '支付类型',
  279. align: 'center',
  280. minWidth: 140
  281. },
  282. {
  283. prop: 'files',
  284. label: '附件',
  285. align: 'center',
  286. minWidth: 120,
  287. slot: 'files'
  288. },
  289. {
  290. prop: 'remark',
  291. label: '备注',
  292. align: 'center',
  293. minWidth: 140
  294. }
  295. ]
  296. };
  297. },
  298. mounted() {
  299. this.open();
  300. },
  301. methods: {
  302. async open() {
  303. this.form = await getPrepaymentInfo(this.businessId);
  304. this.form.fundType = String(this.form.fundType);
  305. this.$nextTick(() => {
  306. this.$refs.inventoryTableDetailsRef &&
  307. this.$refs.inventoryTableDetailsRef.putTableValue(this.form || []);
  308. });
  309. this.$nextTick(() => {
  310. this.$refs.form && this.$refs.form.clearValidate();
  311. });
  312. },
  313. openReceiveTerms() {
  314. this.$refs.receiveTermsDialogRef.open();
  315. },
  316. changeReceiveTerms(row, index) {
  317. console.log('changeReceiveTerms~~~', row)
  318. this.form.paymentConditionId = row.id;
  319. this.form.paymentConditionName = row.name;
  320. console.log('changeReceiveTerms!!!', this.form)
  321. this.$forceUpdate()
  322. },
  323. async changeContract(row) {
  324. console.log(row, 'dadas');
  325. this.form.sourceCode = row.contractNumber;
  326. this.form.sourceId = row.id;
  327. const { productList, receiptPaymentList, contractVO } = await getDetail(
  328. row.id
  329. );
  330. this.$refs.inventoryTableDetailsRef.putTableValue({ productList });
  331. this.form.prepayTotalPrice = contractVO.discountTotalPrice;
  332. },
  333. async changeOrder(row) {
  334. this.form.sourceCode = row.orderNo;
  335. this.form.sourceId = row.id;
  336. const { productList, receiptPaymentList, payAmount } =
  337. await getByIdCondition(row.id, 2);
  338. this.$refs.inventoryTableDetailsRef.putTableValue({ productList });
  339. this.form.prepayTotalPrice = payAmount;
  340. },
  341. openSource() {
  342. if (!this.form.contactName) {
  343. this.$message.error('请选择供应商');
  344. return;
  345. }
  346. if (!this.form.sourceType) {
  347. this.$message.error('请选择来源类型');
  348. return;
  349. }
  350. if (this.form.sourceType == 3) {
  351. this.$refs.orderListDialogRef.open()
  352. } else {
  353. this.$refs.selectContractRef.open();
  354. }
  355. },
  356. //获取分类管理中的数据
  357. async getClassifyList(id, listName) {
  358. let res = await getTreeByPid(id);
  359. this[listName] = res.data;
  360. },
  361. changeSubjectInfo(val) {
  362. const { code, name } = this.$refs.treeSelect.getNodeByValue(val);
  363. this.form.accountingSubjectCode = code;
  364. this.form.accountingSubjectName = name;
  365. },
  366. async changeParent(obj) {
  367. this.form.contactName = obj.name;
  368. this.form.contactId = obj.id;
  369. },
  370. resetForm() {
  371. this.form = {
  372. id: null,
  373. code: '',
  374. prepayDate: '',
  375. prepayTotalPrice: '',
  376. accountingSubjectId: '1779719367139791007',
  377. accountingSubjectCode: '1123',
  378. accountingSubjectName: '预付账款',
  379. contactName: '',
  380. contactId: '',
  381. sourceType: 3,
  382. sourceCode: '',
  383. sourceId: '',
  384. fundType: "1",
  385. paymentConditionName: '',
  386. paymentConditionId: '',
  387. remark: '',
  388. files: []
  389. };
  390. },
  391. reload() {
  392. this.updateVisible(false);
  393. this.$emit('done');
  394. },
  395. updateVisible(value) {
  396. this.visible = value;
  397. if (!value) {
  398. this.resetForm();
  399. }
  400. }
  401. }
  402. };
  403. </script>