detailDialog.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601
  1. <template>
  2. <div>
  3. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  4. <headerTitle title="合同信息"></headerTitle>
  5. <el-row>
  6. <el-col :span="8">
  7. <el-form-item label="合同类型:" prop="type">
  8. {{ form.typeName }} {{ form.categoryName }}
  9. </el-form-item>
  10. <el-form-item label="来源类型:">
  11. {{
  12. sourceTypeList.find((item) => item.code == form.sourceType)?.name
  13. }}
  14. </el-form-item>
  15. <el-form-item
  16. label="核价单:"
  17. prop="sourceName"
  18. v-if="form.sourceType == 2"
  19. >
  20. {{ form.sourceName }}
  21. </el-form-item>
  22. <el-form-item
  23. label="报价单:"
  24. prop="sourceName"
  25. v-if="form.sourceType == 1"
  26. >
  27. {{ form.sourceName }}
  28. </el-form-item>
  29. <el-form-item
  30. label="计划名称:"
  31. prop="sourceName"
  32. v-if="form.sourceType == 3"
  33. >
  34. {{ form.sourceName }}
  35. </el-form-item>
  36. <el-form-item
  37. label="商机名称:"
  38. prop="sourceName"
  39. v-if="form.sourceType == 4"
  40. >
  41. {{ form.sourceName }}
  42. </el-form-item>
  43. <el-form-item
  44. label="销售订单:"
  45. prop="sourceName"
  46. v-if="form.sourceType == 7"
  47. >
  48. {{ form.sourceName }}
  49. </el-form-item>
  50. <el-form-item label="合同名称:" prop="contractName">
  51. {{ form.contractName }}
  52. </el-form-item>
  53. <el-form-item
  54. label="需求类型:"
  55. prop="requireSourceTypeName"
  56. v-if="form.type == 2"
  57. >
  58. {{ form.requireSourceTypeName }}
  59. </el-form-item>
  60. <el-form-item
  61. label="需求部门:"
  62. prop="requireDeptName"
  63. v-if="form.type == 2"
  64. >
  65. {{ form.requireDeptName }}
  66. </el-form-item>
  67. <el-form-item
  68. :label="form.type == 2 ? '采购部门:' : '销售部门:'"
  69. prop="businessDeptName"
  70. >
  71. {{ form.businessDeptName }}
  72. </el-form-item>
  73. <el-form-item label="编码:" prop="contractNumber">
  74. {{ form.contractNo }}
  75. </el-form-item>
  76. </el-col>
  77. <el-col :span="8">
  78. <el-form-item label="签订日期:" prop="contractStartDate">
  79. {{ form.contractStartDate }}
  80. </el-form-item>
  81. <el-form-item label="结束日期:" prop="contractEndDate">
  82. {{ form.contractEndDate }}
  83. </el-form-item>
  84. <!-- <el-form-item label="结算方式:" prop="payWay">
  85. {{ form.settlementModeName }}
  86. </el-form-item> -->
  87. <el-form-item
  88. label="需求人:"
  89. prop="requireUserId"
  90. v-if="form.type == 2"
  91. >
  92. {{ form.requireUserName }}
  93. </el-form-item>
  94. <el-form-item
  95. :label="form.type == 2 ? '采购员:' : '业务员:'"
  96. prop="businessUserName"
  97. >
  98. {{ form.businessUserName }}
  99. </el-form-item>
  100. <el-form-item label="合同编号:" prop="contractNumber">
  101. {{ form.contractNumber }}
  102. </el-form-item>
  103. <el-form-item prop="contractFile" label="合同附件:">
  104. <fileMain v-model="form.fileId" type="view"></fileMain>
  105. </el-form-item>
  106. <!-- <el-form-item label="生产要求:" prop="productionRequirements">
  107. {{ form.productionRequirements }}
  108. </el-form-item> -->
  109. </el-col>
  110. <el-col :span="8">
  111. <el-form-item label="交易方式:" prop="transactionMode">
  112. {{ transactionMethodsOp.find(item => item.value == form.transactionMode)?.label }}
  113. </el-form-item>
  114. <el-form-item :label="form.type == 2 ? '收货模式:' : '发货模式:'" prop="deliveryMode">
  115. {{ shippingModeOptions.find(item => item.value == form.deliveryMode)?.label }}
  116. </el-form-item>
  117. <el-form-item label="结算方式:" prop="settlementModeName">
  118. {{ form.settlementModeName }}
  119. </el-form-item>
  120. <el-form-item v-if="form.settlementMode == 1" label="结算日期范围:" prop="settlementDate">
  121. {{ form.settlementDate }}
  122. </el-form-item>
  123. <el-form-item v-if="form.settlementMode == 2" label="结算月份范围:" prop="settlementDate">
  124. {{ form.settlementDate }}
  125. </el-form-item>
  126. <el-form-item v-if="form.settlementMode == 2" label="收款日期:" prop="receiptDate">
  127. 每月{{ form.receiptDate }}日
  128. </el-form-item>
  129. <el-form-item
  130. label="期数:"
  131. prop="issueNumber"
  132. >
  133. {{ form.issueNumber }}期
  134. </el-form-item>
  135. </el-col>
  136. </el-row>
  137. <headerTitle title="基本信息"></headerTitle>
  138. <el-row>
  139. <el-col :span="12">
  140. <el-form-item label="甲方名称:" prop="partaName">
  141. {{ form.partaName }}
  142. </el-form-item>
  143. <el-form-item
  144. label="甲方统一社会信用代码:"
  145. prop="partaName"
  146. label-width="180px"
  147. >
  148. {{ form.partaUnifiedSocialCreditCode }}
  149. </el-form-item>
  150. <el-form-item label="甲方联系人:" prop="partaLinkName">
  151. {{ form.partaLinkName }}
  152. </el-form-item>
  153. <el-form-item label="甲方电话:" prop="partaTel">
  154. {{ form.partaTel }}
  155. </el-form-item>
  156. <el-form-item label="甲方传真:" prop="partaFax">
  157. {{ form.partaFax }}
  158. </el-form-item>
  159. <el-form-item label=" 甲方Email:" prop="partaEmail">
  160. {{ form.partaEmail }}
  161. </el-form-item>
  162. <el-form-item label="甲方地址:" prop="partaAddress">
  163. {{ form.partaAddress }}
  164. </el-form-item>
  165. </el-col>
  166. <el-col :span="12">
  167. <el-form-item label="乙方名称:" prop="partbName">
  168. {{ form.partbName }}
  169. </el-form-item>
  170. <el-form-item
  171. label="乙方统一社会信用代码:"
  172. prop="partaName"
  173. label-width="180px"
  174. >
  175. {{ form.partbUnifiedSocialCreditCode }}
  176. </el-form-item>
  177. <el-form-item label="乙方联系人:" prop="partbLinkName">
  178. {{ form.partbLinkName }}
  179. </el-form-item>
  180. <el-form-item prop="partbTel" label="乙方联系电话:">
  181. {{ form.partbTel }}
  182. </el-form-item>
  183. <el-form-item prop="partbFax" label="乙方传真:">
  184. {{ form.partbFax }}
  185. </el-form-item>
  186. <el-form-item label="乙方Email:" prop="partbEmail">
  187. {{ form.partbEmail }}
  188. </el-form-item>
  189. <el-form-item label="乙方地址:" prop="partbAddress">
  190. {{ form.partbAddress }}
  191. </el-form-item>
  192. </el-col>
  193. </el-row>
  194. </el-form>
  195. <headerTitle title="物品清单"></headerTitle>
  196. <inventoryTabledetail
  197. ref="inventoryTabledetailRef"
  198. :isCustomerMark="form.type == '1'"
  199. :isDiscountTotalPrice="true"
  200. :contractBookType="form.type"
  201. :pricingWay="form.pricingWay"
  202. :isChangeCount="false"
  203. :isArrivalWay="true"
  204. :isProductionRequirements="form.type == '1'"
  205. :countObj="{
  206. countKey: 'contractCount',
  207. unitKey: 'contractUnit',
  208. unitIdKey: 'contractUnitId'
  209. }"
  210. >
  211. </inventoryTabledetail>
  212. <headerTitle
  213. :title="form.type == '2' ? '付款计划' : '收款计划'"
  214. style="margin-top: 30px"
  215. ></headerTitle>
  216. <PaymentCollectionPlan
  217. ref="paymentCollectionPlanRef"
  218. :menu="form.type == '2' ? 'purchase' : 'sale'"
  219. type="view"
  220. ></PaymentCollectionPlan>
  221. <!-- <ele-pro-table
  222. ref="table"
  223. :needPage="false"
  224. :columns="receiptPaymentListcolumns"
  225. :toolkit="[]"
  226. :datasource="detailData.receiptPaymentList"
  227. row-key="id"
  228. >
  229. </ele-pro-table> -->
  230. <!-- <fileMain ref="fileMainRef"></fileMain> -->
  231. </div>
  232. </template>
  233. <script>
  234. import { getDetail } from '@/api/bpm/components/contractManage/contractBook';
  235. import { getFile } from '@/api/system/file';
  236. import dictMixins from '@/mixins/dictMixins';
  237. import { copyObj } from '@/utils/util';
  238. import inventoryTabledetail from '@/BIZComponents/inventoryTableDetails.vue';
  239. // import fileMain from '@/components/addDoc/index';
  240. import { shippingModeOp, shippingModePurchaseOp, transactionMethodsOp } from '@/enum/dict.js';
  241. import PaymentCollectionPlan from '@/BIZComponents/paymentCollectionPlan/Index.vue'
  242. const payType = [
  243. {
  244. label: '预付款',
  245. value: 1
  246. },
  247. {
  248. label: '交货款',
  249. value: 2
  250. },
  251. {
  252. label: '质保金',
  253. value: 3
  254. }
  255. ];
  256. export default {
  257. mixins: [dictMixins],
  258. components: {
  259. inventoryTabledetail,
  260. PaymentCollectionPlan
  261. // fileMain
  262. },
  263. props: {
  264. businessId: {
  265. default: ''
  266. }
  267. },
  268. data() {
  269. return {
  270. shippingModeOp,
  271. shippingModePurchaseOp,
  272. transactionMethodsOp,
  273. visible: false,
  274. detailId: '',
  275. title: '详情',
  276. row: {},
  277. activeName: 'base',
  278. form: {},
  279. rules: {},
  280. detailData: {},
  281. sourceTypeList: [
  282. {
  283. code: 1,
  284. name: '报价单',
  285. parentId: '1'
  286. },
  287. {
  288. code: 2,
  289. name: '核价单',
  290. parentId: '2'
  291. },
  292. {
  293. code: 3,
  294. name: '采购计划',
  295. parentId: '2'
  296. },
  297. {
  298. code: 4,
  299. name: '商机',
  300. parentId: '1'
  301. },
  302. {
  303. code: 5,
  304. name: '退货单',
  305. parentId: '1'
  306. },
  307. {
  308. code: 6,
  309. name: '客户',
  310. parentId: '1'
  311. },
  312. {
  313. code: 7,
  314. name: '销售订单',
  315. parentId: '1'
  316. }
  317. ],
  318. receiptPaymentListcolumns: [
  319. {
  320. width: 45,
  321. type: 'index',
  322. columnKey: 'index',
  323. align: 'center',
  324. fixed: 'left'
  325. },
  326. {
  327. width: 200,
  328. prop: 'moneyName',
  329. label: '款项名称',
  330. slot: 'moneyName'
  331. },
  332. {
  333. width: 120,
  334. prop: 'type',
  335. label: '款项类型',
  336. align: 'center',
  337. formatter: (_row, _column, cellValue) => {
  338. return payType.find((item) => item.value == _row.type)?.label;
  339. }
  340. },
  341. {
  342. width: 100,
  343. prop: 'price',
  344. label: '金额',
  345. slot: 'price',
  346. formatter: (_row, _column, cellValue) => {
  347. return _row.price + '元';
  348. }
  349. },
  350. {
  351. width: 100,
  352. prop: 'ratio',
  353. label: '比例',
  354. slot: 'ratio',
  355. formatter: (_row, _column, cellValue) => {
  356. return _row.ratio + '%';
  357. }
  358. },
  359. {
  360. width: 160,
  361. prop: 'deadLine',
  362. label: '截止日期',
  363. slot: 'deadLine'
  364. },
  365. {
  366. prop: 'remark',
  367. label: ' 说明',
  368. slot: 'remark'
  369. }
  370. ],
  371. competAnalysisListcolumns: [
  372. {
  373. width: 45,
  374. type: 'index',
  375. columnKey: 'index',
  376. align: 'center',
  377. fixed: 'left'
  378. },
  379. {
  380. width: 200,
  381. prop: 'productName',
  382. label: '名称',
  383. slot: 'productName'
  384. },
  385. {
  386. width: 120,
  387. prop: 'productCode',
  388. label: '编码',
  389. slot: 'productCode'
  390. },
  391. {
  392. width: 200,
  393. prop: 'productCategoryName',
  394. label: '类型',
  395. slot: 'productCategoryName'
  396. },
  397. {
  398. width: 160,
  399. prop: 'productBrand',
  400. label: '牌号',
  401. slot: 'productBrand'
  402. },
  403. {
  404. width: 120,
  405. prop: 'modelType',
  406. label: '型号',
  407. slot: 'modelType'
  408. },
  409. {
  410. width: 120,
  411. prop: 'specification',
  412. label: '规格',
  413. slot: 'specification'
  414. },
  415. {
  416. width: 160,
  417. prop: 'singlePrice',
  418. label: '单价',
  419. slot: 'singlePrice'
  420. },
  421. {
  422. width: 120,
  423. prop: 'totalCount',
  424. label: '数量',
  425. slot: 'totalCount'
  426. },
  427. {
  428. width: 120,
  429. prop: 'totalPrice',
  430. label: '销售总金额',
  431. slot: 'totalPrice',
  432. formatter: (_row, _column, cellValue) => {
  433. return _row.totalPrice + '元';
  434. }
  435. },
  436. {
  437. width: 120,
  438. prop: 'measuringUnit',
  439. label: '计量单位',
  440. slot: 'measuringUnit'
  441. },
  442. {
  443. width: 120,
  444. prop: 'deliveryDays',
  445. label: '交期(天)',
  446. slot: 'deliveryDays'
  447. },
  448. {
  449. width: 200,
  450. prop: 'guaranteePeriod',
  451. label: '有效期',
  452. slot: 'guaranteePeriod',
  453. formatter: (_row, _column, cellValue) => {
  454. return (
  455. (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
  456. );
  457. }
  458. },
  459. // {
  460. // width: 120,
  461. // prop: 'guaranteePeriodUnitCode',
  462. // label: '',
  463. // slot: 'guaranteePeriodUnitCode'
  464. // },
  465. {
  466. width: 240,
  467. prop: 'customerReqFiles',
  468. label: '技术图纸',
  469. slot: 'customerReqFiles'
  470. },
  471. {
  472. width: 120,
  473. prop: 'technicalAnswerName',
  474. label: '技术答疑人',
  475. slot: 'technicalAnswerName'
  476. },
  477. {
  478. width: 220,
  479. prop: 'technicalParams',
  480. label: '技术参数',
  481. slot: 'technicalParams'
  482. },
  483. {
  484. width: 240,
  485. prop: 'technicalDrawings',
  486. label: '技术图纸',
  487. slot: 'technicalDrawings',
  488. formatter: (_row, _column, cellValue) => {
  489. return (
  490. (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
  491. );
  492. }
  493. },
  494. {
  495. width: 220,
  496. prop: 'remark',
  497. label: '备注',
  498. slot: 'remark'
  499. }
  500. ]
  501. };
  502. },
  503. created() {
  504. this.getDetailData(this.businessId);
  505. },
  506. computed: {
  507. shippingModeOptions() {
  508. return this.form.type == 2 ? shippingModePurchaseOp : shippingModeOp;
  509. },
  510. },
  511. methods: {
  512. //导出
  513. // async exportTable() {
  514. // this.loading = true;
  515. // const response = await getExport(this.detailId);
  516. // },
  517. // async open(row) {
  518. // this.form = row;
  519. // this.visible = true;
  520. // this.getDetailData(row.id);
  521. // this.detailId = row.id;
  522. // },
  523. //文件上传
  524. // fileOpen() {
  525. // this.$refs.fileMainRef.open(this.form.fileId, 'view');
  526. // },
  527. cancel() {
  528. this.$nextTick(() => {
  529. // 关闭后,销毁所有的表单数据
  530. (this.form = copyObj(this.formDef)),
  531. (this.otherForm = copyObj(this.otherFormDef)),
  532. (this.tableBankData = []);
  533. this.tableLinkData = [];
  534. this.visible = false;
  535. });
  536. },
  537. downloadFile(file) {
  538. getFile({ objectName: file.storePath }, file.name);
  539. },
  540. async getDetailData(id) {
  541. this.loading = true;
  542. const data = await getDetail(id);
  543. this.loading = false;
  544. if (data) {
  545. this.detailData = data;
  546. data.contractVO.settlementDate = data.contractVO.startSettlementDate ? [data.contractVO.startSettlementDate, data.contractVO.endSettlementDate] : [];
  547. this.form = data.contractVO;
  548. // if (this.form.fileId) {
  549. // this.form.fileId = JSON.parse(this.form.fileId);
  550. // }
  551. this.$refs.inventoryTabledetailRef &&
  552. this.$refs.inventoryTabledetailRef.putTableValue({
  553. ...data,
  554. ...data.contractVO
  555. });
  556. const receiptData = {
  557. receiptPaymentList: data.receiptPaymentList,
  558. payAmount: data.contractVO.discountTotalPrice
  559. }
  560. this.$refs.paymentCollectionPlanRef && this.$refs.paymentCollectionPlanRef.putTableValue(receiptData);
  561. console.log(this.form.type);
  562. }
  563. }
  564. }
  565. };
  566. </script>
  567. <style scoped lang="scss">
  568. .ele-dialog-form {
  569. .el-form-item {
  570. margin-bottom: 10px;
  571. }
  572. }
  573. :deep(.el-form-item) {
  574. margin-bottom: 4px;
  575. }
  576. .headbox {
  577. display: flex;
  578. justify-content: flex-start;
  579. align-items: center;
  580. .amount {
  581. font-size: 14px;
  582. font-weight: bold;
  583. margin-right: 20px;
  584. }
  585. }
  586. </style>