detailDialog1.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. <template>
  2. <ele-modal
  3. custom-class="ele-dialog-form long-dialog-form"
  4. :centered="true"
  5. v-if="visible"
  6. :visible.sync="visible"
  7. :title="title"
  8. :close-on-click-modal="false"
  9. :append-to-body="true"
  10. width="70%"
  11. :fullscreen="fullscreen"
  12. @close="cancel"
  13. >
  14. <template slot="title">
  15. <modalTitle
  16. :title="title"
  17. @setFullscreen="fullscreen = !fullscreen"
  18. ></modalTitle>
  19. </template>
  20. <div class="switch">
  21. <div class="switch_left">
  22. <ul>
  23. <li
  24. v-for="item in tabOptions"
  25. :key="item.key"
  26. :class="{ active: activeComp == item.key }"
  27. @click="changeK(item.key)"
  28. >
  29. {{ item.name }}
  30. </li>
  31. </ul>
  32. </div>
  33. </div>
  34. <div v-if="activeComp === 'main'">
  35. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  36. <headerTitle title="合同信息"></headerTitle>
  37. <el-row>
  38. <el-col :span="12">
  39. <el-form-item label="合同类型:" prop="type">
  40. <el-input v-model="form.categoryName" disabled>
  41. <template slot="prepend">{{ form.typeName }}</template>
  42. </el-input>
  43. </el-form-item>
  44. <el-form-item
  45. label="核价单:"
  46. prop="sourceName"
  47. v-if="form.sourceType == 2"
  48. >
  49. <el-input v-model="form.sourceName" disabled></el-input>
  50. </el-form-item>
  51. <el-form-item
  52. label="报价单:"
  53. prop="sourceName"
  54. v-if="form.sourceType == 1"
  55. >
  56. <el-input v-model="form.sourceName" disabled></el-input>
  57. </el-form-item>
  58. <el-form-item
  59. label="计划名称:"
  60. prop="sourceName"
  61. v-if="form.sourceType == 3"
  62. >
  63. <el-input v-model="form.sourceName" disabled></el-input>
  64. </el-form-item>
  65. <el-form-item
  66. label="商机名称:"
  67. prop="sourceName"
  68. v-if="form.sourceType == 4"
  69. >
  70. <el-input v-model="form.sourceName" disabled></el-input>
  71. </el-form-item>
  72. <el-form-item label="合同名称:" prop="contractName">
  73. <el-input v-model="form.contractName" disabled></el-input>
  74. </el-form-item>
  75. <el-form-item label="需求类型:" v-if="form.type==2" prop="requireSourceTypeName">
  76. <el-input v-model="form.requireSourceTypeName" disabled></el-input>
  77. </el-form-item>
  78. <el-form-item label="需求部门:" v-if="form.type==2" prop="requireDeptName">
  79. <el-input v-model="form.requireDeptName" disabled></el-input>
  80. </el-form-item>
  81. <el-form-item label="编码:" prop="contractNo">
  82. <el-input v-model="form.contractNo" disabled></el-input>
  83. </el-form-item>
  84. <el-form-item label="合同编号:" prop="contractNumber">
  85. <el-input v-model="form.contractNumber" disabled></el-input>
  86. </el-form-item>
  87. </el-col>
  88. <el-col :span="12">
  89. <el-form-item label="签订日期:" prop="contractStartDate">
  90. <el-input v-model="form.contractStartDate" disabled></el-input>
  91. </el-form-item>
  92. <el-form-item label="结束日期:" prop="contractEndDate">
  93. <el-input v-model="form.contractEndDate" disabled></el-input>
  94. </el-form-item>
  95. <!-- <el-form-item label="计价方式:" prop="payWay">
  96. <el-select v-model="form.pricingWay" disabled style="width: 100%">
  97. <el-option :value="1" label="按数量计费"></el-option>
  98. <el-option :value="2" label="按重量计费"></el-option>
  99. </el-select>
  100. </el-form-item> -->
  101. <el-form-item label="结算方式:" prop="payWay">
  102. <el-input v-model="form.settlementModeName" disabled></el-input>
  103. </el-form-item>
  104. <el-form-item label="需求人:" prop="requireUserId" v-if="form.type == 2">
  105. <el-input v-model="form.requireUserName" disabled></el-input>
  106. </el-form-item>
  107. <el-form-item prop="contractFile" label="合同附件:">
  108. <fileMain v-model="form.fileId" type="view"></fileMain>
  109. </el-form-item>
  110. </el-col>
  111. </el-row>
  112. <headerTitle title="基本信息"></headerTitle>
  113. <el-row>
  114. <el-col :span="12">
  115. <el-form-item label="甲方名称:" prop="partaName">
  116. <el-input v-model="form.partaName" disabled></el-input>
  117. </el-form-item>
  118. <el-form-item
  119. label="甲方统一社会信用代码:"
  120. prop="partaUnifiedSocialCreditCode"
  121. class="form_item_label"
  122. >
  123. <el-input
  124. v-model="form.partaUnifiedSocialCreditCode"
  125. disabled
  126. ></el-input>
  127. </el-form-item>
  128. <el-form-item label="甲方联系人:" prop="partaLinkName">
  129. <el-input v-model="form.partaLinkName" disabled></el-input>
  130. </el-form-item>
  131. <el-form-item label="甲方电话:" prop="partaTel">
  132. <el-input v-model="form.partaTel" disabled></el-input>
  133. </el-form-item>
  134. <el-form-item label="甲方传真:" prop="partaFax">
  135. <el-input v-model="form.partaFax" disabled></el-input>
  136. </el-form-item>
  137. <el-form-item label=" 甲方Email:" prop="partaEmail">
  138. <el-input v-model="form.partaEmail" disabled></el-input>
  139. </el-form-item>
  140. <el-form-item label="甲方地址:" prop="partaAddress">
  141. <el-input v-model="form.partaAddress" disabled></el-input>
  142. </el-form-item>
  143. <!-- <el-form-item
  144. label="甲方税号"
  145. prop="contactAddress"
  146. >
  147. <el-input
  148. clearable
  149. v-model="form.contactAddress"
  150. placeholder="请输入"
  151. />
  152. </el-form-item> -->
  153. </el-col>
  154. <el-col :span="12">
  155. <el-form-item label="乙方名称:" prop="partbName">
  156. <el-input v-model="form.partbName" disabled></el-input>
  157. </el-form-item>
  158. <el-form-item
  159. label="乙方统一社会信用代码:"
  160. prop="partbUnifiedSocialCreditCode"
  161. class="form_item_label"
  162. >
  163. <el-input
  164. v-model="form.partbUnifiedSocialCreditCode"
  165. disabled
  166. ></el-input>
  167. </el-form-item>
  168. <el-form-item label="乙方联系人:" prop="partbLinkName">
  169. <el-input v-model="form.partbLinkName" disabled></el-input>
  170. </el-form-item>
  171. <el-form-item prop="partbTel" label="乙方联系电话:">
  172. <el-input v-model="form.partbTel" disabled></el-input>
  173. </el-form-item>
  174. <el-form-item prop="partbFax" label="乙方传真:">
  175. <el-input v-model="form.partbFax" disabled></el-input>
  176. </el-form-item>
  177. <el-form-item label="乙方Email:" prop="partbEmail">
  178. <el-input v-model="form.partbEmail" disabled></el-input>
  179. </el-form-item>
  180. <el-form-item label="乙方地址:" prop="partbAddress">
  181. <el-input v-model="form.partbAddress" disabled></el-input>
  182. </el-form-item>
  183. <!-- <el-form-item
  184. label="乙方税号"
  185. prop="contactAddress"
  186. >
  187. <el-input
  188. clearable
  189. v-model="form.contactAddress"
  190. placeholder="请输入"
  191. />
  192. </el-form-item> -->
  193. </el-col>
  194. </el-row>
  195. </el-form>
  196. <el-tabs v-model="activeName" style="margin-top: 15px" type="border-card">
  197. <el-tab-pane label="物品清单" name="1">
  198. <inventoryTabledetail
  199. ref="inventoryTabledetailRef"
  200. :isCustomerMark="form.type == '1'"
  201. :isDiscountTotalPrice="true"
  202. :contractBookType="form.type"
  203. :pricingWay="form.pricingWay"
  204. :isChangeCount="false"
  205. ></inventoryTabledetail>
  206. </el-tab-pane>
  207. <el-tab-pane label="带料清单" name="2">
  208. <inventoryTabledetail
  209. ref="rawDetailListRef"
  210. :isCustomerMark="true"
  211. :contractBookType="form.type"
  212. ></inventoryTabledetail>
  213. </el-tab-pane>
  214. <el-tab-pane label="产出清单" name="3">
  215. <inventoryTabledetail
  216. ref="outputDetailListRef"
  217. :isCustomerMark="true"
  218. :contractBookType="form.type"
  219. ></inventoryTabledetail>
  220. </el-tab-pane>
  221. </el-tabs>
  222. <!-- <headerTitle title="产品清单"></headerTitle> -->
  223. <headerTitle
  224. :title="form.type == '2' ? '付款方式' : '收款方式'"
  225. style="margin-top: 30px"
  226. ></headerTitle>
  227. <ele-pro-table
  228. ref="table"
  229. :needPage="false"
  230. :columns="receiptPaymentListcolumns"
  231. :datasource="detailData.receiptPaymentList"
  232. row-key="id"
  233. >
  234. </ele-pro-table>
  235. </div>
  236. <bpmDetail
  237. v-if="activeComp === 'bpm' && form.processInstanceId"
  238. :id="form.processInstanceId"
  239. ></bpmDetail>
  240. <changeList
  241. v-if="activeComp === 'changeList'"
  242. ref="changeList"
  243. ></changeList>
  244. <div slot="footer" class="footer">
  245. <el-button @click="cancel">返回</el-button>
  246. </div>
  247. </ele-modal>
  248. </template>
  249. <script>
  250. import { getDetail, getExport } from '@/api/contractManage/contractBook';
  251. import { getFile } from '@/api/system/file';
  252. import dictMixins from '@/mixins/dictMixins';
  253. import { copyObj } from '@/utils/util';
  254. import bpmDetail from '@/views/bpm/processInstance/detail.vue';
  255. import inventoryTabledetail from '@/BIZComponents/inventoryTableDetails.vue';
  256. import fileMain from '@/components/addDoc/index';
  257. import modalTitle from '@/BIZComponents/modalTitle.vue';
  258. import changeList from './changeList.vue';
  259. export default {
  260. mixins: [dictMixins],
  261. components: {
  262. inventoryTabledetail,
  263. bpmDetail,
  264. fileMain,
  265. modalTitle,
  266. changeList
  267. },
  268. data() {
  269. return {
  270. fullscreen: false,
  271. activeName: '1',
  272. activeComp: 'main',
  273. tabOptions: [
  274. { key: 'main', name: '合同详情' },
  275. { key: 'bpm', name: '流程详情' },
  276. // { key: 'changeList', name: '变更记录' }
  277. // { key: 'dversion', name: '历史版本' },
  278. ],
  279. visible: false,
  280. detailId: '',
  281. title: '详情',
  282. row: {},
  283. form: {},
  284. rules: {},
  285. detailData: {},
  286. receiptPaymentListcolumns: [
  287. {
  288. width: 45,
  289. type: 'index',
  290. columnKey: 'index',
  291. align: 'center',
  292. fixed: 'left'
  293. },
  294. {
  295. width: 200,
  296. prop: 'moneyName',
  297. label: '款项名称',
  298. slot: 'moneyName',
  299. align: 'center'
  300. },
  301. {
  302. width: 100,
  303. prop: 'price',
  304. label: '金额',
  305. slot: 'price',
  306. formatter: (_row, _column, cellValue) => {
  307. return _row.price + '元';
  308. },
  309. align: 'center'
  310. },
  311. {
  312. width: 100,
  313. prop: 'ratio',
  314. label: '比例',
  315. slot: 'ratio',
  316. formatter: (_row, _column, cellValue) => {
  317. return _row.ratio + '%';
  318. },
  319. align: 'center'
  320. },
  321. {
  322. width: 160,
  323. prop: 'deadLine',
  324. label: '截止日期',
  325. slot: 'deadLine',
  326. align: 'center'
  327. },
  328. {
  329. prop: 'remark',
  330. label: '说明',
  331. slot: 'remark',
  332. align: 'center'
  333. }
  334. ]
  335. };
  336. },
  337. methods: {
  338. //导出
  339. async exportTable() {
  340. this.loading = true;
  341. const response = await getExport(this.detailId);
  342. },
  343. async open(row) {
  344. this.form = row;
  345. this.visible = true;
  346. this.activeName = '1';
  347. this.getDetailData(row.id);
  348. this.detailId = row.id;
  349. },
  350. changeK(key) {
  351. this.activeComp = key;
  352. if (key == 'main') {
  353. this.$nextTick(() => {
  354. this.$refs.inventoryTabledetailRef &&
  355. this.$refs.inventoryTabledetailRef.putTableValue({
  356. ...this.detailData,
  357. ...this.detailData.contractVO
  358. });
  359. this.$refs.rawDetailListRef &&
  360. this.$refs.rawDetailListRef.putTableValueNew(this.form.rawList); //原料
  361. this.$refs.outputDetailListRef &&
  362. this.$refs.outputDetailListRef.putTableValueNew(
  363. this.form.outputList
  364. );
  365. });
  366. }
  367. if (key == 'changeList') {
  368. this.$nextTick(() => {
  369. this.$refs.changeList.init(this.form.id)
  370. });
  371. }
  372. },
  373. cancel() {
  374. this.$nextTick(() => {
  375. // 关闭后,销毁所有的表单数据
  376. (this.form = copyObj(this.formDef)),
  377. (this.otherForm = copyObj(this.otherFormDef)),
  378. (this.tableBankData = []);
  379. this.tableLinkData = [];
  380. this.visible = false;
  381. });
  382. },
  383. downloadFile(file) {
  384. getFile({ objectName: file.storePath }, file.name);
  385. },
  386. async getDetailData(id) {
  387. this.loading = true;
  388. const data = await getDetail(id);
  389. this.loading = false;
  390. if (data) {
  391. data.productList.forEach((item) => {
  392. item['pricingWay'] = item.pricingWay || data.contractVO?.pricingWay;
  393. });
  394. this.detailData = data;
  395. this.form = data.contractVO;
  396. // if (this.form.fileId) {
  397. // this.form.fileId = JSON.parse(this.form.fileId);
  398. // } else {
  399. // this.form.fileId = [];
  400. // }
  401. this.$nextTick(() => {
  402. this.$refs.inventoryTabledetailRef &&
  403. this.$refs.inventoryTabledetailRef.putTableValue({
  404. ...data,
  405. ...data.contractVO
  406. });
  407. this.$refs.rawDetailListRef &&
  408. this.$refs.rawDetailListRef.putTableValueNew(this.form.rawList); //原料
  409. this.$refs.outputDetailListRef &&
  410. this.$refs.outputDetailListRef.putTableValueNew(
  411. this.form.outputList
  412. );
  413. });
  414. }
  415. }
  416. }
  417. };
  418. </script>
  419. <style scoped lang="scss">
  420. .ele-dialog-form {
  421. .el-form-item {
  422. margin-bottom: 10px;
  423. }
  424. }
  425. .headbox {
  426. display: flex;
  427. justify-content: flex-start;
  428. align-items: center;
  429. .amount {
  430. font-size: 14px;
  431. font-weight: bold;
  432. margin-right: 20px;
  433. }
  434. }
  435. </style>