detailDialog.vue 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370
  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. width="70%"
  10. @close="cancel"
  11. :maxable="true"
  12. :resizable="true"
  13. :modal="modal"
  14. append-to-body
  15. >
  16. <div class="card">
  17. <div>
  18. <span> 订单数量</span>
  19. <span class="value"
  20. >{{ orderNoCountData.orderQuantity }}
  21. &nbsp;&nbsp;
  22. </span>
  23. </div>
  24. <div>
  25. <span> 订单金额</span>
  26. <span class="value"
  27. >{{ orderNoCountData.orderAmount }}
  28. &nbsp;&nbsp;元
  29. </span>
  30. </div>
  31. <div>
  32. <span> 收货数量</span>
  33. <span class="value"
  34. >{{ orderNoCountData.receivedQuantity }}
  35. &nbsp;&nbsp;
  36. </span>
  37. </div>
  38. <div>
  39. <span> 付款金额</span>
  40. <span class="value"
  41. >{{ orderNoCountData.receivedAmount }}
  42. &nbsp;&nbsp;元
  43. </span>
  44. </div>
  45. <div>
  46. <span> 未收数量</span>
  47. <span class="value"
  48. >{{ orderNoCountData.unReceivedQuantity }}
  49. &nbsp;&nbsp;
  50. </span>
  51. </div>
  52. <div>
  53. <span> 未付金额</span>
  54. <span class="value"
  55. >{{ orderNoCountData.unReceivedAmount }}
  56. &nbsp;&nbsp;元
  57. </span>
  58. </div>
  59. </div>
  60. <div class="switch">
  61. <div class="switch_left">
  62. <ul>
  63. <li
  64. v-for="item in tabOptions"
  65. :key="item.key"
  66. :class="{ active: activeComp == item.key }"
  67. @click="activeComp = item.key"
  68. >
  69. {{ item.name }}
  70. </li>
  71. </ul>
  72. </div>
  73. </div>
  74. <div v-show="activeComp == 'order'">
  75. <el-form
  76. ref="form"
  77. :model="form"
  78. :rules="rules"
  79. class="el-form-box"
  80. label-width="120px"
  81. >
  82. <headerTitle title="订单信息"> </headerTitle>
  83. <el-row>
  84. <el-col :span="8">
  85. <el-form-item label="订单编号:" prop="orderNo">
  86. <el-input v-model="form.orderNo" disabled></el-input>
  87. </el-form-item>
  88. <el-form-item label="来源类型" prop="relationType">
  89. <el-select
  90. v-model="form.relationType"
  91. filterable
  92. clearable
  93. disabled
  94. style="width: 100%"
  95. >
  96. <el-option :value="1" label="采购需求单"></el-option>
  97. <el-option :value="2" label="采购计划单"></el-option>
  98. <el-option :value="3" label="采购核价单"></el-option>
  99. <el-option :value="4" label="采购合同"></el-option>
  100. </el-select>
  101. </el-form-item>
  102. <el-form-item
  103. v-if="form.relationType == 1"
  104. label="采购需求单"
  105. prop="relationName"
  106. >
  107. <el-input
  108. disabled
  109. v-model="form.relationName"
  110. placeholder="请选择"
  111. ></el-input>
  112. </el-form-item>
  113. <el-form-item
  114. v-if="form.relationType == 2"
  115. label="采购计划单"
  116. prop="relationName"
  117. >
  118. <!-- <el-input-->
  119. <!-- @click.native="handPurchasePlan"-->
  120. <!-- v-model="form.purchasePlanName"-->
  121. <!-- placeholder="请选择"-->
  122. <!-- ></el-input> -->
  123. <el-input
  124. disabled
  125. v-model="form.relationName"
  126. placeholder="请选择"
  127. ></el-input>
  128. </el-form-item>
  129. <el-form-item
  130. v-if="form.relationType == 3"
  131. label="采购核价单"
  132. prop="relationName"
  133. >
  134. <el-input
  135. disabled
  136. v-model="form.relationName"
  137. placeholder="请选择"
  138. ></el-input>
  139. </el-form-item>
  140. <el-form-item
  141. v-if="form.relationType == 4"
  142. label="选择合同"
  143. prop="contractName"
  144. >
  145. <el-input
  146. clearable
  147. v-model="form.contractName"
  148. disabled
  149. placeholder="请输入"
  150. />
  151. </el-form-item>
  152. <el-form-item label="需求部门:" prop="requireDeptName">
  153. <el-input v-model="form.requireDeptName" disabled></el-input>
  154. </el-form-item>
  155. <el-form-item label="采购部门:" prop="purchaseDeptName">
  156. <el-input v-model="form.purchaseDeptName" disabled></el-input>
  157. </el-form-item>
  158. <el-form-item label="订单类型:" prop="sourceTypeName">
  159. <el-input v-model="form.sourceTypeName" disabled></el-input>
  160. </el-form-item>
  161. <el-form-item label="付款条件:" prop="collectionConditionName">
  162. <el-input v-model="form.collectionConditionName" disabled></el-input>
  163. </el-form-item>
  164. <el-form-item label="交易方式" prop="transactionMode">
  165. <el-select
  166. v-model="form.transactionMode"
  167. placeholder="请选择"
  168. style="width: 100%"
  169. disabled
  170. >
  171. <el-option
  172. v-for="item in transactionMethodsOp"
  173. :key="item.value"
  174. :label="item.label"
  175. :value="item.value"
  176. >
  177. </el-option>
  178. </el-select>
  179. </el-form-item>
  180. <el-form-item prop="remark" label="备注:">
  181. <el-input
  182. type="textarea"
  183. v-model="form.remark"
  184. disabled
  185. ></el-input>
  186. </el-form-item>
  187. <el-form-item prop="orderFiles" label="附件:">
  188. <fileMain v-model="form.orderFiles" type="view"></fileMain>
  189. </el-form-item>
  190. </el-col>
  191. <el-col :span="8">
  192. <el-form-item label="采购计划名称:" prop="purchasePlanName">
  193. <el-input v-model="form.purchasePlanName" disabled></el-input>
  194. </el-form-item>
  195. <el-form-item label="项目名称:" prop="projectName">
  196. <el-input v-model="form.projectName" disabled></el-input>
  197. </el-form-item>
  198. <el-form-item label="结算方式:" prop="settlementModeName">
  199. <el-input
  200. v-model="detailData.settlementModeName"
  201. disabled
  202. ></el-input>
  203. </el-form-item>
  204. <el-form-item v-if="form.settlementMode == 1" label="结算日期范围" prop="settlementDate">
  205. <el-date-picker
  206. style="width: 100%"
  207. v-model="form.settlementDate"
  208. type="daterange"
  209. value-format="yyyy-MM-dd"
  210. range-separator="至"
  211. start-placeholder="开始日期"
  212. end-placeholder="结束日期"
  213. disabled
  214. >
  215. </el-date-picker>
  216. </el-form-item>
  217. <el-form-item v-if="form.settlementMode == 2" label="结算月份范围" prop="settlementDate">
  218. <el-date-picker
  219. v-model="form.settlementDate"
  220. type="monthrange"
  221. range-separator="至"
  222. start-placeholder="开始月份"
  223. end-placeholder="结束月份"
  224. value-format="yyyy-MM"
  225. style="width: 100%"
  226. disabled
  227. >
  228. </el-date-picker>
  229. </el-form-item>
  230. <el-form-item v-if="form.settlementMode == 2" label="收款日期" prop="receiptDate">
  231. <el-input type="number" :min="1" :max="31" disabled placeholder="请输入" v-model="form.receiptDate">
  232. <template slot="prepend">每月</template>
  233. <template slot="append">日</template>
  234. </el-input>
  235. </el-form-item>
  236. <el-form-item
  237. v-if="form.isGeneratePaymentPlan != 0"
  238. label="期数"
  239. prop="issueNumber"
  240. >
  241. <el-input type="number" :min="1" disabled v-model="form.issueNumber">
  242. <template slot="append">
  243. <span>期</span>
  244. </template>
  245. </el-input>
  246. </el-form-item>
  247. <el-form-item
  248. prop="outsourceScene"
  249. label="委外场景"
  250. v-if="
  251. orderSourceType.includes(form.sourceType) && form.outsourceScene
  252. "
  253. >
  254. <el-select
  255. v-model="form.outsourceScene"
  256. disabled
  257. style="width: 100%"
  258. >
  259. <el-option
  260. :value="item.value"
  261. :label="item.label"
  262. v-for="item in outsourceSceneList"
  263. :key="item.value"
  264. >
  265. </el-option>
  266. </el-select>
  267. </el-form-item>
  268. <el-form-item label="需求人:" prop="requireUserName">
  269. <el-input v-model="form.requireUserName" disabled></el-input>
  270. </el-form-item>
  271. <el-form-item label="采购员:" prop="purchaseUserName">
  272. <el-input v-model="form.purchaseUserName" disabled></el-input>
  273. </el-form-item>
  274. <el-form-item label="签订日期:" prop="contractStartDate">
  275. <el-input v-model="form.contractStartDate" disabled></el-input>
  276. </el-form-item>
  277. <el-form-item label="优惠后总金额:" prop="payAmount">
  278. <el-input v-model="form.payAmount" disabled>
  279. <template slot="append">元</template>
  280. </el-input>
  281. </el-form-item>
  282. <el-form-item label="订单总金额:" prop="totalAmount">
  283. <el-input v-model="form.totalAmount" disabled>
  284. <template slot="append">元</template>
  285. </el-input>
  286. </el-form-item>
  287. </el-col>
  288. <el-col :span="8">
  289. <el-form-item label="订单总金额" prop="orderTotalPrice">
  290. <el-input v-model="form.orderTotalPrice" disabled />
  291. </el-form-item>
  292. <el-form-item label="发货总金额" prop="sendTotalPrice">
  293. <el-input v-model="form.sendTotalPrice" disabled />
  294. </el-form-item>
  295. <el-form-item label="发货总数量" prop="sendTotalCount">
  296. <el-input v-model="form.sendTotalCount" disabled />
  297. </el-form-item>
  298. <el-form-item label="收货总金额" prop="receiveTotalPrice">
  299. <el-input v-model="form.receiveTotalPrice" disabled />
  300. </el-form-item>
  301. <el-form-item label="收货总数量" prop="receiveTotalCount">
  302. <el-input v-model="form.receiveTotalCount" disabled />
  303. </el-form-item>
  304. <el-form-item label="退货总金额" prop="returnTotalPrice">
  305. <el-input v-model="form.returnTotalPrice" disabled />
  306. </el-form-item>
  307. <el-form-item label="退货总数量" prop="returnTotalCount">
  308. <el-input v-model="form.returnTotalCount" disabled />
  309. </el-form-item>
  310. <el-form-item label="收货模式" prop="deliveryMode">
  311. <el-select
  312. v-model="form.deliveryMode"
  313. placeholder="请选择"
  314. style="width: 100%"
  315. disabled
  316. >
  317. <el-option
  318. v-for="item in shippingModePurchaseOp"
  319. :key="item.value"
  320. :label="item.label"
  321. :value="item.value"
  322. >
  323. </el-option>
  324. </el-select>
  325. </el-form-item>
  326. <el-form-item label="生成付款计划表" prop="isGeneratePaymentPlan">
  327. <el-radio-group v-model="form.isGeneratePaymentPlan" @change="generatePlanChange" disabled>
  328. <el-radio :label="1">是</el-radio>
  329. <el-radio :label="0">否</el-radio>
  330. </el-radio-group>
  331. </el-form-item>
  332. </el-col>
  333. </el-row>
  334. <headerTitle title="基本信息"></headerTitle>
  335. <el-row>
  336. <el-col :span="12">
  337. <el-form-item label="采购方名称:" prop="partaName">
  338. <el-input v-model="form.partaName" disabled> </el-input>
  339. </el-form-item>
  340. <el-form-item
  341. label="采购方统一社会信用代码:"
  342. prop="partaUnifiedSocialCreditCode"
  343. class="form_item_label"
  344. >
  345. <el-input v-model="form.partaUnifiedSocialCreditCode" disabled>
  346. </el-input>
  347. </el-form-item>
  348. <el-form-item label="采购方联系人:" prop="partaLinkName">
  349. <el-input v-model="form.partaLinkName" disabled> </el-input>
  350. </el-form-item>
  351. <el-form-item label="采购方电话:" prop="partaTel">
  352. <el-input v-model="form.partaTel" disabled> </el-input>
  353. </el-form-item>
  354. <el-form-item label="采购方传真:" prop="partaFax">
  355. <el-input v-model="form.partaFax" disabled></el-input>
  356. </el-form-item>
  357. <el-form-item label=" 采购方Email:" prop="partaEmail">
  358. <el-input v-model="form.partaEmail" disabled></el-input>
  359. </el-form-item>
  360. <el-form-item label="采购方地址:" prop="partaAddress">
  361. <el-input v-model="form.partaAddress" disabled></el-input>
  362. </el-form-item>
  363. </el-col>
  364. <el-col :span="12">
  365. <el-form-item label="供应商名称:" prop="partbName">
  366. <el-input v-model="form.partbName" disabled></el-input>
  367. </el-form-item>
  368. <el-form-item
  369. label="供应商统一社会信用代码:"
  370. prop="partbUnifiedSocialCreditCode"
  371. class="form_item_label"
  372. >
  373. <el-input
  374. v-model="form.partbUnifiedSocialCreditCode"
  375. disabled
  376. ></el-input>
  377. </el-form-item>
  378. <el-form-item label="供应商联系人:" prop="partbLinkName">
  379. <el-input v-model="form.partbLinkName" disabled></el-input>
  380. </el-form-item>
  381. <el-form-item
  382. prop="partbTel"
  383. label="供应商联系电话:"
  384. class="form_item_label"
  385. >
  386. <el-input v-model="form.partbTel" disabled></el-input>
  387. </el-form-item>
  388. <el-form-item prop="partbFax" label="供应商传真:">
  389. <el-input v-model="form.partbFax" disabled></el-input>
  390. </el-form-item>
  391. <el-form-item label="供应商Email:" prop="partbEmail">
  392. <el-input v-model="form.partbEmail" disabled></el-input>
  393. </el-form-item>
  394. <el-form-item label="供应商地址:" prop="partbAddress">
  395. <el-input v-model="form.partbAddress" disabled></el-input>
  396. </el-form-item>
  397. <!-- <el-form-item
  398. label="售出方税号"
  399. prop="contactAddress"
  400. >
  401. <el-input
  402. clearable
  403. v-model="form.contactAddress"
  404. placeholder="请输入"
  405. />
  406. </el-form-item> -->
  407. </el-col>
  408. </el-row>
  409. </el-form>
  410. <el-tabs v-model="activeName" style="margin-top: 15px" type="border-card">
  411. <el-tab-pane label="物品清单" name="1">
  412. <ele-pro-table
  413. ref="table"
  414. :needPage="false"
  415. :columns="columns"
  416. @columns-change="handleColumnChange"
  417. :cache-key="cacheKeyUrl"
  418. :datasource="detailData.productList"
  419. row-key="id"
  420. max-height="500px"
  421. @header-dragend="handleHeaderDragend"
  422. >
  423. <template v-slot:toolbar>
  424. <div class="headbox">
  425. <span class="amount">总计:{{ detailData.totalAmount }}元</span>
  426. <span class="amount"
  427. >应付金额:{{ detailData.payAmount }}元</span
  428. >
  429. </div>
  430. </template>
  431. <template v-slot:technicalDrawings="{ row }">
  432. <fileMain v-model="row.technicalDrawings" type="view" lazy-render></fileMain>
  433. </template>
  434. <template v-slot:requirementTotalCount="{ row, $index }">
  435. <el-button type="text" @click="handleGetBillDetail(row, 1)">{{
  436. row.requirementTotalCount
  437. }}</el-button>
  438. <span v-if="row.requirementTotalCount">{{
  439. row.measuringUnit || ''
  440. }}</span>
  441. </template>
  442. <template v-slot:planTotalCount="{ row, $index }">
  443. <el-button type="text" @click="handleGetBillDetail(row, 2)">{{
  444. row.planTotalCount
  445. }}</el-button>
  446. <span v-if="row.planTotalCount">{{
  447. row.measuringUnit || ''
  448. }}</span>
  449. </template>
  450. <template v-slot:inquiryTotalCount="{ row, $index }">
  451. <el-button type="text" @click="handleGetBillDetail(row, 3)">{{
  452. row.inquiryTotalCount
  453. }}</el-button>
  454. <span v-if="row.inquiryTotalCount">{{
  455. row.measuringUnit || ''
  456. }}</span>
  457. </template>
  458. <template v-slot:contractTotalCount="{ row, $index }">
  459. <el-button type="text" @click="handleGetBillDetail(row, 4)">{{
  460. row.contractTotalCount
  461. }}</el-button>
  462. <span v-if="row.contractTotalCount">{{
  463. row.measuringUnit || ''
  464. }}</span>
  465. </template>
  466. <template v-slot:doneTotalCount="{ row, $index }">
  467. <el-button type="text" @click="handleGetBillDetail(row, 5)">{{
  468. row.doneTotalCount
  469. }}</el-button>
  470. <span v-if="row.doneTotalCount">{{
  471. row.measuringUnit || ''
  472. }}</span>
  473. </template>
  474. <template v-slot:waitTotalCount="{ row, $index }">
  475. <el-button type="text" @click="handleGetBillDetail(row, 6)">{{
  476. row.waitTotalCount
  477. }}</el-button>
  478. <span v-if="row.waitTotalCount">{{
  479. row.measuringUnit || ''
  480. }}</span>
  481. </template>
  482. </ele-pro-table>
  483. </el-tab-pane>
  484. <el-tab-pane
  485. label="带料清单"
  486. name="2"
  487. v-if="orderSourceType.includes(form.sourceType)"
  488. >
  489. <ele-pro-table
  490. ref="table"
  491. :needPage="false"
  492. :columns="subColumns"
  493. :toolkit="[]"
  494. :datasource="detailData.rawList"
  495. row-key="id"
  496. @header-dragend="onSubHeaderDragend"
  497. >
  498. <template v-slot:technicalDrawings="{ row }">
  499. <fileMain v-model="row.technicalDrawings" type="view" lazy-render></fileMain>
  500. </template>
  501. </ele-pro-table>
  502. </el-tab-pane>
  503. <el-tab-pane
  504. label="产出清单"
  505. name="3"
  506. v-if="orderSourceType.includes(form.sourceType)"
  507. >
  508. <ele-pro-table
  509. ref="table"
  510. :needPage="false"
  511. :columns="subColumns"
  512. :toolkit="[]"
  513. :datasource="detailData.outputList"
  514. row-key="id"
  515. @header-dragend="onSubHeaderDragend"
  516. >
  517. <template v-slot:technicalDrawings="{ row }">
  518. <fileMain v-model="row.technicalDrawings" type="view" lazy-render></fileMain>
  519. </template>
  520. </ele-pro-table>
  521. </el-tab-pane>
  522. </el-tabs>
  523. <!-- v-if="form.isGeneratePaymentPlan != 0" -->
  524. <div>
  525. <headerTitle
  526. title="付款计划"
  527. style="margin-top: 30px"
  528. ></headerTitle>
  529. <PaymentCollectionPlan
  530. ref="paymentCollectionPlanRef"
  531. menu="purchase"
  532. type="view"
  533. :isAll="true"
  534. ></PaymentCollectionPlan>
  535. </div>
  536. </div>
  537. <bpmDetail
  538. v-if="activeComp === 'bpm' && form.processInstanceId"
  539. :id="form.processInstanceId"
  540. ></bpmDetail>
  541. <div v-if="activeComp == 'invoice'">
  542. <invoiceList :orderId="detailId"></invoiceList>
  543. </div>
  544. <div v-if="activeComp == 'outSourceSend'">
  545. <outSourceSendList :orderId="detailId"></outSourceSendList>
  546. </div>
  547. <div v-if="activeComp == 'returnorder'">
  548. <returnGoodsList :orderId="detailId"></returnGoodsList>
  549. </div>
  550. <div v-if="activeComp == 'accountstatement'">
  551. <accountstatementList :orderId="detailId"></accountstatementList>
  552. </div>
  553. <div v-if="activeComp == 'adjustNote'">
  554. <adjustNoteList :orderId="detailId"></adjustNoteList>
  555. </div>
  556. <div slot="footer" class="footer">
  557. <el-button @click="cancel">返回</el-button>
  558. </div>
  559. <bill-detail-dialog
  560. :bill-detail-dialog-flag.sync="billDetailDialogFlag"
  561. v-if="billDetailDialogFlag"
  562. ref="billDetailDialogRef"
  563. ></bill-detail-dialog>
  564. </ele-modal>
  565. </template>
  566. <script>
  567. import {
  568. // getpurchaseorderDetail,
  569. getpurchaseorderDetail,
  570. queryOrderNoCount
  571. } from '@/api/purchasingManage/purchaseOrder';
  572. import invoiceList from '@/views/purchasingManage/purchaseOrder/orderAssociation/invoiceList.vue';
  573. import returnGoodsList from '@/views/purchasingManage/purchaseOrder/orderAssociation/returnGoodsList.vue';
  574. import accountstatementList from '@/views/purchasingManage/purchaseOrder/orderAssociation/accountstatementList.vue';
  575. import outSourceSendList from '@/views/purchasingManage/purchaseOrder/orderAssociation/outSourceSendList.vue';
  576. import { getFile } from '@/api/system/file';
  577. import dictMixins from '@/mixins/dictMixins';
  578. import { copyObj } from '@/utils/util';
  579. import bpmDetail from '@/views/bpm/processInstance/detail.vue';
  580. // import fileMain from '@/components/addDoc/index.vue';
  581. import billDetailDialog from '@/views/purchasingManage/purchaseOrder/components/billDetailDialog.vue';
  582. import { orderSourceType, outsourceSceneList, lbjtList,pricingWayList,levelList } from '@/enum/dict';
  583. import tabMixins from '@/mixins/tableColumnsMixin';
  584. import { shippingModePurchaseOp, transactionMethodsOp, quoteTypeOp } from '@/enum/dict.js';
  585. import PaymentCollectionPlan from '@/BIZComponents/paymentCollectionPlan/Index.vue'
  586. import adjustNoteList from '@/views/purchasingManage/purchaseOrder/orderAssociation/adjustNoteList.vue'
  587. export default {
  588. mixins: [dictMixins, tabMixins],
  589. components: {
  590. billDetailDialog,
  591. outSourceSendList,
  592. invoiceList,
  593. returnGoodsList,
  594. accountstatementList,
  595. bpmDetail,
  596. PaymentCollectionPlan,
  597. adjustNoteList
  598. },
  599. props: {
  600. modal: {
  601. type: Boolean,
  602. default: true
  603. }
  604. },
  605. data() {
  606. return {
  607. orderSourceType,
  608. outsourceSceneList,
  609. cacheKeyUrl: 'eos-purchasingManage-purchaseOrder-inventoryTableDetail',
  610. processList: [
  611. {
  612. label: '是',
  613. value: 1
  614. },
  615. {
  616. label: '否',
  617. value: 0
  618. }
  619. ],
  620. shippingModePurchaseOp,
  621. transactionMethodsOp,
  622. quoteTypeOp,
  623. activeComp: 'order',
  624. billDetailDialogFlag: false,
  625. fullscreen: false,
  626. tabOptions: [
  627. { key: 'order', name: '订单详情' },
  628. { key: 'bpm', name: '流程详情' },
  629. { key: 'outSourceSend', name: '发货列表' },
  630. { key: 'invoice', name: '收货列表' },
  631. { key: 'returnorder', name: '退货列表' },
  632. { key: 'accountstatement', name: '对账列表' },
  633. { key: 'adjustNote', name: '冲差列表' }
  634. ],
  635. visible: false,
  636. detailId: '',
  637. title: '详情',
  638. row: {},
  639. activeName: '1',
  640. form: {
  641. orderFiles: [{ name: '222' }]
  642. },
  643. rules: {},
  644. detailData: {},
  645. columns: [
  646. {
  647. width: 45,
  648. type: 'index',
  649. columnKey: 'index',
  650. align: 'center',
  651. fixed: 'left'
  652. },
  653. {
  654. width: 200,
  655. prop: 'productName',
  656. label: '名称',
  657. slot: 'productName',
  658. align: 'center'
  659. },
  660. {
  661. width: 120,
  662. prop: 'productCode',
  663. label: '编码',
  664. slot: 'productCode',
  665. align: 'center'
  666. },
  667. {
  668. width: 200,
  669. prop: 'productCategoryName',
  670. label: '类型',
  671. slot: 'productCategoryName',
  672. align: 'center'
  673. },
  674. {
  675. width: 160,
  676. prop: 'productBrand',
  677. label: '牌号',
  678. slot: 'productBrand',
  679. align: 'center'
  680. },
  681. {
  682. width: 120,
  683. prop: 'modelType',
  684. label: '型号',
  685. slot: 'modelType',
  686. align: 'center'
  687. },
  688. {
  689. width: 120,
  690. prop: 'supplierMark',
  691. label: '供应商代号',
  692. slot: 'supplierMark',
  693. align: 'center'
  694. },
  695. {
  696. width: 120,
  697. prop: 'specification',
  698. label: '规格',
  699. slot: 'specification',
  700. align: 'center'
  701. },
  702. {
  703. minWidth: 200,
  704. prop: 'taskName',
  705. label: '工序',
  706. slot: 'taskName',
  707. align: 'center'
  708. },
  709. {
  710. width: 120,
  711. prop: 'requirementTotalCount',
  712. label: '采购需求数量',
  713. slot: 'requirementTotalCount',
  714. align: 'center'
  715. },
  716. {
  717. width: 120,
  718. prop: 'planTotalCount',
  719. label: '采购计划数量',
  720. slot: 'planTotalCount',
  721. align: 'center'
  722. },
  723. {
  724. width: 120,
  725. prop: 'inquiryTotalCount',
  726. label: '采购核价数量',
  727. slot: 'inquiryTotalCount',
  728. align: 'center'
  729. },
  730. {
  731. width: 120,
  732. prop: 'contractTotalCount',
  733. label: '采购合同数量',
  734. slot: 'contractTotalCount',
  735. align: 'center'
  736. },
  737. {
  738. width: 80,
  739. prop: 'doneTotalCount',
  740. label: '已采数量',
  741. slot: 'doneTotalCount',
  742. align: 'center'
  743. },
  744. {
  745. width: 100,
  746. prop: 'waitTotalCount',
  747. label: '待采数量',
  748. // slot: 'waitTotalCount',
  749. align: 'center',
  750. formatter: (row, column) => {
  751. if (row.waitTotalCount) {
  752. return row.waitTotalCount + ' ' + row.measuringUnit;
  753. }
  754. }
  755. },
  756. {
  757. width: 100,
  758. prop: 'doneReceiveCount',
  759. label: '已收货数量',
  760. align: 'center',
  761. formatter: (row, column) => {
  762. if (row.doneReceiveCount) {
  763. return row.doneReceiveCount + ' ' + (row.measuringUnit || '');
  764. }
  765. }
  766. },
  767. {
  768. width: 100,
  769. prop: 'waitReceiveCount',
  770. label: '未收货数量',
  771. align: 'center',
  772. formatter: (row, column) => {
  773. if (row.waitReceiveCount) {
  774. return row.waitReceiveCount + ' ' + (row.measuringUnit || '');
  775. }
  776. }
  777. },
  778. {
  779. width: 170,
  780. prop: 'purchaseCount',
  781. label: '数量',
  782. align: 'center',
  783. formatter: (row, column) => {
  784. if (row.purchaseCount) {
  785. return row.purchaseCount + ' ' + (row.purchaseUnit || '');
  786. }
  787. }
  788. },
  789. {
  790. minWidth: 180,
  791. prop: 'packingSpecification',
  792. align: 'center',
  793. label: '包装规格',
  794. showOverflowTooltip: true
  795. },
  796. {
  797. width: 150,
  798. prop: 'totalCount',
  799. label: '计量数量',
  800. slot: 'totalCount',
  801. align: 'center',
  802. formatter: (row, column) => {
  803. if (row.totalCount) {
  804. return row.totalCount + ' ' + (row.measuringUnit || '');
  805. }
  806. }
  807. },
  808. {
  809. width: 120,
  810. prop: 'produceType',
  811. align: 'center',
  812. label: '属性类型',
  813. showOverflowTooltip: true,
  814. formatter: (row, column) => {
  815. if (row.produceType) {
  816. return row.produceType
  817. .map((item) => {
  818. return lbjtList[item];
  819. })
  820. .toString();
  821. }
  822. }
  823. },
  824. {
  825. width: 120,
  826. prop: 'singleWeight',
  827. label: '单重',
  828. slot: 'singleWeight',
  829. align: 'center',
  830. formatter: (row, column) => {
  831. if (row.singleWeight) {
  832. return row.singleWeight + ' ' + (row.weightUnit || '');
  833. }
  834. }
  835. },
  836. {
  837. width: 120,
  838. prop: 'totalWeight',
  839. label: '总重',
  840. slot: 'totalWeight',
  841. align: 'center',
  842. formatter: (row, column) => {
  843. if (row.totalWeight) {
  844. return row.totalWeight + ' ' + (row.weightUnit || '');
  845. }
  846. }
  847. },
  848. {
  849. width: 140,
  850. prop: 'pricingWay',
  851. label: '计价方式',
  852. align: 'center',
  853. fixed: 'left',
  854. formatter: (row, column) => {
  855. return pricingWayList.find((item) => item.id == row.pricingWay)
  856. ?.name;
  857. }
  858. },
  859. {
  860. minWidth: 120,
  861. prop: 'goodsLevel',
  862. label: '物品级别',
  863. formatter: (_row, _column, cellValue) => {
  864. return levelList.find((item) => item.value == _row.goodsLevel)
  865. ?.label;
  866. },
  867. align: 'center'
  868. },
  869. {
  870. width: 160,
  871. prop: 'singlePrice',
  872. label: '单价',
  873. slot: 'singlePrice',
  874. align: 'center'
  875. },
  876. {
  877. width: 120,
  878. prop: 'taxRate',
  879. label: '税率',
  880. formatter: (row, column) => {
  881. return row.taxRate && row.taxRate + '%';
  882. },
  883. align: 'center'
  884. },
  885. {
  886. width: 150,
  887. prop: 'notaxSinglePrice',
  888. label: '不含税单价',
  889. align: 'center'
  890. },
  891. {
  892. width: 160,
  893. prop: 'quoteWay',
  894. label: '报价方式',
  895. align: 'center',
  896. formatter: (_row, _column, cellValue) => {
  897. return this.quoteTypeOp.find((item) => item.value == _row.quoteWay)
  898. ?.label || '';
  899. }
  900. },
  901. {
  902. width: 160,
  903. prop: 'discountRatio',
  904. label: '折后比例',
  905. align: 'center',
  906. formatter: (row) => {
  907. return row.discountRatio ? row.discountRatio + '%' : '';
  908. }
  909. },
  910. {
  911. width: 160,
  912. prop: 'discountSinglePrice',
  913. label: '折后单价',
  914. slot: 'discountSinglePrice',
  915. align: 'center'
  916. },
  917. {
  918. width: 120,
  919. prop: 'totalPrice',
  920. label: '合计',
  921. slot: 'totalPrice',
  922. formatter: (_row, _column, cellValue) => {
  923. return _row.totalPrice + '元';
  924. },
  925. align: 'center'
  926. },
  927. {
  928. width: 120,
  929. prop: 'discountTotalPrice',
  930. label: '折后合计',
  931. slot: 'discountTotalPrice',
  932. formatter: (_row, _column, cellValue) => {
  933. return _row.discountTotalPrice + '元';
  934. },
  935. align: 'center'
  936. },
  937. {
  938. width: 110,
  939. prop: 'batchNo',
  940. label: '批次号',
  941. slot: 'batchNo',
  942. align: 'center'
  943. },
  944. {
  945. prop: 'provenance',
  946. label: '产地',
  947. slot: 'provenance',
  948. align: 'center',
  949. minWidth: 200,
  950. showOverflowTooltip: true,
  951. formatter: (row, column) => {
  952. return row.provenance && row.provenance.length
  953. ? row.provenance
  954. .map((item) => this.getDictValue('产地', item))
  955. .join(',')
  956. : '';
  957. }
  958. },
  959. {
  960. minWidth: 120,
  961. prop: 'modelKey',
  962. label: '机型',
  963. showOverflowTooltip: true,
  964. align: 'center'
  965. },
  966. {
  967. minWidth: 120,
  968. prop: 'colorKey',
  969. showOverflowTooltip: true,
  970. label: '颜色',
  971. align: 'center'
  972. },
  973. {
  974. width: 160,
  975. prop: 'deliveryDeadline',
  976. label: '交期截止日期',
  977. slot: 'deliveryDeadline',
  978. align: 'center'
  979. },
  980. {
  981. width: 200,
  982. prop: 'guaranteePeriod',
  983. label: '有效期',
  984. slot: 'guaranteePeriod',
  985. formatter: (_row, _column, cellValue) => {
  986. return (
  987. (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
  988. );
  989. },
  990. align: 'center'
  991. },
  992. {
  993. width: 160,
  994. prop: 'guaranteePeriodDeadline',
  995. label: '有效期截止日期',
  996. slot: 'guaranteePeriodDeadline',
  997. align: 'center'
  998. },
  999. {
  1000. width: 120,
  1001. prop: 'technicalAnswerName',
  1002. label: '技术答疑人',
  1003. slot: 'technicalAnswerName',
  1004. align: 'center'
  1005. },
  1006. {
  1007. width: 220,
  1008. prop: 'technicalParams',
  1009. label: '技术参数',
  1010. slot: 'technicalParams',
  1011. align: 'center'
  1012. },
  1013. {
  1014. width: 240,
  1015. prop: 'technicalDrawings',
  1016. label: '技术图纸',
  1017. slot: 'technicalDrawings',
  1018. formatter: (_row, _column, cellValue) => {
  1019. return (
  1020. (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
  1021. );
  1022. },
  1023. align: 'center'
  1024. },
  1025. {
  1026. width: 220,
  1027. prop: 'remark',
  1028. label: '备注',
  1029. slot: 'remark',
  1030. align: 'center'
  1031. }
  1032. ],
  1033. competAnalysisListcolumns1: [
  1034. {
  1035. width: 45,
  1036. type: 'index',
  1037. columnKey: 'index',
  1038. align: 'center',
  1039. fixed: 'left'
  1040. },
  1041. {
  1042. width: 200,
  1043. prop: 'productName',
  1044. label: '名称',
  1045. slot: 'productName',
  1046. align: 'center'
  1047. },
  1048. {
  1049. width: 120,
  1050. prop: 'productCode',
  1051. label: '编码',
  1052. slot: 'productCode',
  1053. align: 'center'
  1054. },
  1055. {
  1056. width: 200,
  1057. prop: 'productCategoryName',
  1058. label: '类型',
  1059. slot: 'productCategoryName',
  1060. align: 'center'
  1061. },
  1062. {
  1063. width: 160,
  1064. prop: 'productBrand',
  1065. label: '牌号',
  1066. slot: 'productBrand',
  1067. align: 'center'
  1068. },
  1069. {
  1070. width: 120,
  1071. prop: 'modelType',
  1072. label: '型号',
  1073. slot: 'modelType',
  1074. align: 'center'
  1075. },
  1076. {
  1077. width: 120,
  1078. prop: 'supplierMark',
  1079. label: '供应商代号',
  1080. slot: 'supplierMark',
  1081. align: 'center'
  1082. },
  1083. {
  1084. width: 120,
  1085. prop: 'specification',
  1086. label: '规格',
  1087. slot: 'specification',
  1088. align: 'center'
  1089. },
  1090. {
  1091. minWidth: 200,
  1092. prop: 'taskName',
  1093. label: '工序',
  1094. slot: 'taskName',
  1095. align: 'center'
  1096. },
  1097. {
  1098. width: 150,
  1099. prop: 'totalCount',
  1100. label: '计量数量',
  1101. slot: 'totalCount',
  1102. align: 'center',
  1103. formatter: (row, column) => {
  1104. if (row.totalCount) {
  1105. return row.totalCount + ' ' + (row.measuringUnit || '');
  1106. }
  1107. }
  1108. },
  1109. // {
  1110. // width: 120,
  1111. // prop: 'measuringUnit',
  1112. // label: '计量单位',
  1113. // slot: 'measuringUnit',
  1114. // align: 'center'
  1115. // },
  1116. {
  1117. width: 120,
  1118. prop: 'singleWeight',
  1119. label: '单重',
  1120. slot: 'singleWeight',
  1121. align: 'center',
  1122. formatter: (row, column) => {
  1123. if (row.singleWeight) {
  1124. return row.singleWeight + ' ' + (row.weightUnit || '');
  1125. }
  1126. }
  1127. },
  1128. {
  1129. width: 120,
  1130. prop: 'totalWeight',
  1131. label: '总重',
  1132. slot: 'totalWeight',
  1133. align: 'center',
  1134. formatter: (row, column) => {
  1135. if (row.totalWeight) {
  1136. return row.totalWeight + ' ' + (row.weightUnit || '');
  1137. }
  1138. }
  1139. },
  1140. {
  1141. width: 110,
  1142. prop: 'batchNo',
  1143. label: '批次号',
  1144. slot: 'batchNo',
  1145. align: 'center'
  1146. },
  1147. {
  1148. prop: 'provenance',
  1149. label: '产地',
  1150. slot: 'provenance',
  1151. align: 'center',
  1152. minWidth: 200,
  1153. showOverflowTooltip: true,
  1154. formatter: (row, column) => {
  1155. return row.provenance && row.provenance.length
  1156. ? row.provenance
  1157. .map((item) => this.getDictValue('产地', item))
  1158. .join(',')
  1159. : '';
  1160. }
  1161. },
  1162. // {
  1163. // width: 120,
  1164. // prop: 'deliveryDays',
  1165. // label: '交期(天)',
  1166. // slot: 'deliveryDays'
  1167. // },
  1168. {
  1169. width: 160,
  1170. prop: 'deliveryDeadline',
  1171. label: '交期截止日期',
  1172. slot: 'deliveryDeadline',
  1173. align: 'center'
  1174. },
  1175. {
  1176. width: 200,
  1177. prop: 'guaranteePeriod',
  1178. label: '有效期',
  1179. slot: 'guaranteePeriod',
  1180. formatter: (_row, _column, cellValue) => {
  1181. return (
  1182. (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
  1183. );
  1184. },
  1185. align: 'center'
  1186. },
  1187. {
  1188. width: 160,
  1189. prop: 'guaranteePeriodDeadline',
  1190. label: '有效期截止日期',
  1191. slot: 'guaranteePeriodDeadline',
  1192. align: 'center'
  1193. },
  1194. {
  1195. width: 120,
  1196. prop: 'technicalAnswerName',
  1197. label: '技术答疑人',
  1198. slot: 'technicalAnswerName',
  1199. align: 'center'
  1200. },
  1201. {
  1202. width: 220,
  1203. prop: 'technicalParams',
  1204. label: '技术参数',
  1205. slot: 'technicalParams',
  1206. align: 'center'
  1207. },
  1208. {
  1209. width: 240,
  1210. prop: 'technicalDrawings',
  1211. label: '技术图纸',
  1212. slot: 'technicalDrawings',
  1213. formatter: (_row, _column, cellValue) => {
  1214. return (
  1215. (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
  1216. );
  1217. },
  1218. align: 'center'
  1219. },
  1220. {
  1221. width: 220,
  1222. prop: 'remark',
  1223. label: '备注',
  1224. slot: 'remark',
  1225. align: 'center'
  1226. }
  1227. ],
  1228. orderNoCountData: {
  1229. orderAmount: '', //订单金额
  1230. orderQuantity: '', //订单数量
  1231. receivedQuantity: '', //已货数量
  1232. unReceivedQuantity: '', //未收货数量
  1233. receivedAmount: '', //已货金额
  1234. unReceivedAmount: '', //未收货金额
  1235. }
  1236. };
  1237. },
  1238. created() {
  1239. this.requestDict('产地');
  1240. // 副表(带料/产出清单)列宽缓存,独立 key,拖拽后刷新能恢复
  1241. this.loadScopedColumnWidth('sub');
  1242. },
  1243. computed: {
  1244. // 副表列:带料清单与产出清单共用同一套列定义和列宽
  1245. subColumns() {
  1246. return this.applyScopedColumnWidth(this.competAnalysisListcolumns1, 'sub');
  1247. }
  1248. },
  1249. methods: {
  1250. // 副表拖拽列宽持久化
  1251. onSubHeaderDragend(newWidth, oldWidth, column) {
  1252. this.persistScopedColumnWidth(
  1253. 'sub',
  1254. column && (column.property || column.columnKey),
  1255. newWidth
  1256. );
  1257. },
  1258. async open(row) {
  1259. this.activeName = '1';
  1260. this.activeComp = 'order';
  1261. this.form = row;
  1262. this.visible = true;
  1263. this.orderNoCountData = await queryOrderNoCount(row.orderNo);
  1264. await this.getDetailData(row.id);
  1265. this.detailId = row.id;
  1266. },
  1267. handleGetBillDetail(row, type) {
  1268. this.billDetailDialogFlag = true;
  1269. this.$nextTick(() => {
  1270. this.$refs.billDetailDialogRef.open(row, type);
  1271. });
  1272. },
  1273. cancel() {
  1274. this.$nextTick(() => {
  1275. // 关闭后,销毁所有的表单数据
  1276. (this.form = copyObj(this.formDef)),
  1277. (this.otherForm = copyObj(this.otherFormDef)),
  1278. (this.tableBankData = []);
  1279. this.tableLinkData = [];
  1280. this.visible = false;
  1281. });
  1282. },
  1283. downloadFile(file) {
  1284. getFile({ objectName: file.storePath }, file.name);
  1285. },
  1286. async getDetailData(id) {
  1287. this.loading = true;
  1288. const data = await getpurchaseorderDetail(id);
  1289. this.loading = false;
  1290. if (data) {
  1291. this.form = data;
  1292. this.detailData = data;
  1293. this.form.settlementDate = data.startSettlementDate ? [data.startSettlementDate, data.endSettlementDate] : [];
  1294. this.$nextTick(() => {
  1295. this.$refs.paymentCollectionPlanRef && this.$refs.paymentCollectionPlanRef.putTableValue(data);
  1296. })
  1297. }
  1298. }
  1299. }
  1300. };
  1301. </script>
  1302. <style scoped lang="scss">
  1303. .ele-dialog-form {
  1304. .el-form-item {
  1305. margin-bottom: 10px;
  1306. }
  1307. }
  1308. .headbox {
  1309. display: flex;
  1310. justify-content: flex-start;
  1311. align-items: center;
  1312. .amount {
  1313. font-size: 14px;
  1314. font-weight: bold;
  1315. margin-right: 20px;
  1316. }
  1317. }
  1318. .switch_left ul .active {
  1319. border-top: 4px solid var(--color-primary);
  1320. color: var(--color-primary-5);
  1321. }
  1322. .switch {
  1323. padding-bottom: 20px;
  1324. }
  1325. :deep .divider .content {
  1326. justify-content: flex-start;
  1327. }
  1328. .card {
  1329. display: flex;
  1330. padding: 15px;
  1331. font-size: 16px;
  1332. > div {
  1333. flex: 1;
  1334. margin: 0px 40px;
  1335. background: #1890ff;
  1336. color: #fff;
  1337. display: flex;
  1338. flex-direction: column;
  1339. align-items: center;
  1340. justify-content: center;
  1341. padding: 12px;
  1342. border-radius: 10px;
  1343. .value {
  1344. margin-top: 8px;
  1345. }
  1346. }
  1347. }
  1348. </style>