order-detail.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. <!-- 任务单详情 -->
  2. <template>
  3. <div>
  4. <div class="my-title">查看</div>
  5. <div style="margin-left: 20px;margin-right: 20px">
  6. <!-- 工作流 -->
  7. <div v-show="dataForm.workFlowBusinessExt">
  8. <el-steps :active="activeNo" finish-status="success" align-center style="margin-bottom: 20px">
  9. <template v-for="(item, i) in stepList">
  10. <el-step :icon="item.icon" :title="item.title" :description="item.description"></el-step>
  11. </template>
  12. </el-steps>
  13. <el-collapse style="margin-bottom: 20px">
  14. <el-collapse-item>
  15. <template slot="title">
  16. <span style="color: red">审批日志(展开查看更多):</span>
  17. </template>
  18. <template v-for="(item, i) in logList">
  19. <div>{{++i}}:{{item.approverName}} {{item.createTime}} {{item.approvalValue}}</div>
  20. </template>
  21. </el-collapse-item>
  22. </el-collapse>
  23. </div>
  24. <div v-if="isFlow">
  25. <approve-component ref="approve" @approveFinished="approveFinished"/>
  26. </div>
  27. <e-desc title="基本信息" column="3">
  28. <e-desc-item label="公司任务单编码">{{dataForm.orderCode}}</e-desc-item>
  29. <e-desc-item label="合同号">{{dataForm.contractNumber}}</e-desc-item>
  30. <e-desc-item label="客户名称">{{dataForm.customerName}}</e-desc-item>
  31. <e-desc-item label="业务员">{{dataForm.salesmanName}}</e-desc-item>
  32. <e-desc-item label="合同交期">{{dataForm.deliveryDate?dataForm.deliveryDate.substring(0,10):''}}</e-desc-item>
  33. <e-desc-item label="备注说明" span="3">{{dataForm.notes}}</e-desc-item>
  34. </e-desc>
  35. <e-desc title="物料清单明细">
  36. <el-table
  37. :data="productDetails"
  38. row-key="productId"
  39. border
  40. :indent='20'
  41. lazy
  42. :load="loadingData"
  43. style="width: 100%;">
  44. <el-table-column
  45. label="序号"
  46. type="index"
  47. width="50"
  48. align="center">
  49. </el-table-column>
  50. <el-table-column
  51. prop="productName"
  52. header-align="center"
  53. align="left"
  54. width="160"
  55. :show-tooltip-when-overflow="true"
  56. label="物料名称">
  57. </el-table-column>
  58. <el-table-column
  59. prop="productSpecifications"
  60. header-align="center"
  61. align="center"
  62. width="120"
  63. :show-tooltip-when-overflow="true"
  64. label="规格">
  65. </el-table-column>
  66. <el-table-column
  67. prop="cnt"
  68. header-align="center"
  69. align="center"
  70. width="80"
  71. label="数量">
  72. </el-table-column>
  73. <el-table-column
  74. prop="cnt"
  75. header-align="center"
  76. align="center"
  77. width="80"
  78. label="单位">
  79. </el-table-column>
  80. <el-table-column
  81. prop="productNumber"
  82. header-align="center"
  83. align="center"
  84. width="120"
  85. :show-tooltip-when-overflow="true"
  86. label="生产编号">
  87. </el-table-column>
  88. <el-table-column
  89. prop="batchNumber"
  90. header-align="center"
  91. align="center"
  92. width="120"
  93. :show-tooltip-when-overflow="true"
  94. label="批次号">
  95. </el-table-column>
  96. <el-table-column
  97. prop="produceRequire"
  98. header-align="center"
  99. align="center"
  100. width="160"
  101. :show-tooltip-when-overflow="true"
  102. label="生产要求">
  103. </el-table-column>
  104. <el-table-column
  105. prop="price"
  106. header-align="center"
  107. align="center"
  108. width="80"
  109. label="含税单价">
  110. </el-table-column>
  111. <el-table-column
  112. prop="amount"
  113. header-align="center"
  114. align="center"
  115. width="80"
  116. label="含税总价">
  117. <template slot-scope="scope">
  118. <span>{{ (scope.row.cnt*scope.row.price).toFixed(1) }}</span>
  119. </template>
  120. </el-table-column>
  121. <el-table-column
  122. prop="rate"
  123. header-align="center"
  124. align="center"
  125. width="100"
  126. label="税率">
  127. <template slot-scope="scope">
  128. {{scope.row.rate}}%
  129. </template>
  130. </el-table-column>
  131. <el-table-column
  132. prop="mapNumber"
  133. header-align="center"
  134. align="center"
  135. min-width="100"
  136. :show-tooltip-when-overflow="true"
  137. label="主图号">
  138. </el-table-column>
  139. <el-table-column
  140. header-align="center"
  141. align="center"
  142. min-width="100"
  143. :show-tooltip-when-overflow="true"
  144. label="简图">
  145. <template slot-scope="scope">
  146. <div v-for="(item, index) in scope.row.attachList2" style="display: inline">
  147. <span v-if="index > 0">,</span>
  148. <a :key="item.fileName + index" type="primary" href="#" @click="previewFile(item.fileName, item.url)">{{ item.fileName }}</a>
  149. </div>
  150. </template>
  151. </el-table-column>
  152. <el-table-column
  153. prop="noticeChangeRecord"
  154. header-align="center"
  155. align="center"
  156. min-width="120"
  157. :show-tooltip-when-overflow="true"
  158. label="产品变更记录">
  159. </el-table-column>
  160. <el-table-column
  161. header-align="center"
  162. align="center"
  163. min-width="100"
  164. :show-tooltip-when-overflow="true"
  165. label="技术文件">
  166. <template slot-scope="scope">
  167. <el-button :disabled="!scope.row.attachList || scope.row.attachList.length === 0" type="text" size="small" @click="attachDetails(scope.row)">查看</el-button>
  168. </template>
  169. </el-table-column>
  170. <el-table-column
  171. header-align="center"
  172. align="center"
  173. label="对应图纸">
  174. <template slot-scope="scope">
  175. <el-button :disabled="!scope.row.drawingList || scope.row.drawingList.length === 0" type="text" size="small" @click="drawDetails(scope.row)">查看</el-button>
  176. </template>
  177. </el-table-column>
  178. <el-table-column
  179. prop="techName"
  180. header-align="center"
  181. align="center"
  182. min-width="100"
  183. :show-tooltip-when-overflow="true"
  184. label="工艺名称">
  185. </el-table-column>
  186. <el-table-column
  187. prop="relatedProduct"
  188. header-align="center"
  189. align="center"
  190. width="120"
  191. :show-tooltip-when-overflow="true"
  192. label="物料关联">
  193. </el-table-column>
  194. <el-table-column
  195. prop="appraisal"
  196. header-align="center"
  197. align="center"
  198. width="120"
  199. :show-tooltip-when-overflow="true"
  200. label="首件鉴定">
  201. <template slot-scope="scope">
  202. <span>{{!scope.row.appraisal?'':(Number(scope.row.appraisal) === 2?'是':'否')}}</span>
  203. </template>
  204. </el-table-column>
  205. <el-table-column
  206. prop="notes"
  207. header-align="center"
  208. align="center"
  209. min-width="120"
  210. :show-tooltip-when-overflow="true"
  211. label="备注">
  212. </el-table-column>
  213. </el-table>
  214. </e-desc>
  215. <e-desc title="任务工单派发">
  216. <el-table
  217. :data="workInfoDetails"
  218. border
  219. style="width: 100%;">
  220. <el-table-column
  221. label="序号"
  222. type="index"
  223. width="50"
  224. align="center">
  225. </el-table-column>
  226. <el-table-column
  227. prop="taskType"
  228. header-align="center"
  229. align="center"
  230. min-width="80"
  231. :show-tooltip-when-overflow="true"
  232. label="工单类型">
  233. </el-table-column>
  234. <el-table-column
  235. prop="taskName"
  236. header-align="center"
  237. align="center"
  238. width="120"
  239. :show-tooltip-when-overflow="true"
  240. label="工单名称">
  241. </el-table-column>
  242. <el-table-column
  243. prop="ranks"
  244. header-align="center"
  245. align="center"
  246. min-width="50"
  247. label="级别">
  248. </el-table-column>
  249. <el-table-column
  250. prop="content"
  251. header-align="center"
  252. align="center"
  253. width="160"
  254. :show-tooltip-when-overflow="true"
  255. label="工单内容">
  256. </el-table-column>
  257. <el-table-column
  258. prop="receiverName"
  259. header-align="center"
  260. align="center"
  261. min-width="100"
  262. label="任务接收人">
  263. </el-table-column>
  264. <el-table-column
  265. prop="planCompletionTime"
  266. header-align="center"
  267. align="center"
  268. min-width="80"
  269. label="要求完成时间">
  270. </el-table-column>
  271. <el-table-column
  272. prop="attachList"
  273. header-align="center"
  274. align="center"
  275. label="工单附件">
  276. <template slot-scope="scope">
  277. <div v-for="(item, index) in scope.row.attachList" style="display: inline">
  278. <span v-if="index > 0">,</span>
  279. <a :key="item.fileName + index" type="primary" href="#" @click="previewFile(item.fileName, item.url)">{{ item.fileName }}</a>
  280. </div>
  281. </template>
  282. </el-table-column>
  283. <el-table-column
  284. prop="notes"
  285. header-align="center"
  286. align="center"
  287. width="120"
  288. :show-tooltip-when-overflow="true"
  289. label="备注">
  290. </el-table-column>
  291. </el-table>
  292. </e-desc>
  293. </div>
  294. <span slot="footer" class="dialog-footer">
  295. <el-button @click="onChose">返回</el-button>
  296. </span>
  297. <!-- 文件预览 -->
  298. <preview-component v-if="previewVisible" ref="preview"/>
  299. <product-draw-detail-dialog v-if="drawVisible" ref="drawDetail"/>
  300. <attach-detail-dialog v-if="attachVisible" ref="attachDetail"/>
  301. </div>
  302. </template>
  303. <script>
  304. import EDesc from '../common/e-desc'
  305. import EDescItem from '../common/e-desc-item'
  306. import { dealStepData, dealStepLogs } from '@/api/util'
  307. import { getOrderDetail } from '@/api/sale'
  308. import { getChildren } from '@/api/product'
  309. import uploadComponent from '../common/upload-component'
  310. import ApproveComponent from '../common/approve-component'
  311. import PreviewComponent from '@/views/modules/common/preview-component'
  312. import ProductDrawDetailDialog from '@/views/modules/tech/product-draw-detail-dialog'
  313. import AttachDetailDialog from '@/views/modules/common/attach-detail-dialog'
  314. export default {
  315. name: 'order-detail',
  316. components: {
  317. AttachDetailDialog,
  318. ProductDrawDetailDialog,
  319. PreviewComponent,
  320. EDesc,
  321. EDescItem,
  322. uploadComponent,
  323. ApproveComponent
  324. },
  325. data () {
  326. return {
  327. visible: false,
  328. isFlow: false,
  329. previewVisible: false,
  330. id: 0,
  331. dataForm: {},
  332. productDetails: [],
  333. workInfoDetails: [],
  334. activeNo: 0,
  335. stepList: [],
  336. logList: [],
  337. drawVisible: false,
  338. attachVisible: false
  339. }
  340. },
  341. methods: {
  342. onChose () {
  343. this.$emit('onChose')
  344. },
  345. async init (id, businessType) {
  346. this.visible = true
  347. this.isFlow = !!(businessType && businessType !== '')
  348. this.id = id || 0
  349. this.dataForm = {
  350. workFlowBusinessExt: null
  351. }
  352. this.productDetails = []
  353. this.stepList = []
  354. this.logList = []
  355. this.getDetails(businessType)
  356. },
  357. getDetails (businessType) {
  358. getOrderDetail(this.id).then(({data}) => {
  359. if (data && data.code === '200') {
  360. this.dataForm = data.data
  361. // 流程图展示
  362. if (data.data.workFlowBusinessExt.workFlowProcessStepList) {
  363. dealStepData(data.data.workFlowBusinessExt.workFlowProcessStepList, this.stepList)
  364. }
  365. if (data.data.workFlowBusinessExt.processLogList) {
  366. dealStepLogs(data.data.workFlowBusinessExt.processLogList, this.logList)
  367. }
  368. if (data.data.workFlowProcessStepList) {
  369. this.activeNo = Number(data.data.workFlowProcessStepList.activeNo)
  370. }
  371. // 任务单物料明细
  372. if (data.data.saleROrderProductList) {
  373. this.productDetails = data.data.saleROrderProductList
  374. }
  375. // 任务工单派发
  376. if (data.data.workInfoList) {
  377. this.workInfoDetails = data.data.workInfoList
  378. }
  379. // 初始化审批Form
  380. this.showApproveForm(businessType, this.id)
  381. }
  382. })
  383. },
  384. // 初始化审批Form
  385. showApproveForm (businessType, businessId) {
  386. if (this.isFlow) {
  387. this.$nextTick(() => {
  388. this.$refs.approve.init(businessType, businessId)
  389. })
  390. }
  391. },
  392. // 审批完成
  393. approveFinished () {
  394. this.onChose()
  395. this.$emit('approveFinished')
  396. },
  397. // 对应图纸
  398. drawDetails (row) {
  399. this.drawVisible = true
  400. this.$nextTick(() => {
  401. this.$refs.drawDetail.init(row.drawingList)
  402. })
  403. },
  404. // 预览
  405. previewFile (fileName, url) {
  406. this.previewVisible = true
  407. this.$nextTick(() => {
  408. this.$refs.preview.init(fileName, url)
  409. })
  410. },
  411. loadingData (row, treeNode, resolve) {
  412. getChildren(row.productId).then(({data}) => {
  413. if (data && data.code === '200') {
  414. resolve(data.data)
  415. } else {
  416. this.$message.error(data.msg)
  417. }
  418. })
  419. },
  420. // 物料技术文件
  421. attachDetails (row) {
  422. this.attachVisible = true
  423. this.$nextTick(() => {
  424. this.$refs.attachDetail.init(row.attachList)
  425. })
  426. }
  427. }
  428. }
  429. </script>
  430. <style scoped>
  431. .my-line{
  432. border-bottom: 1px solid #c0c4cc;
  433. margin-bottom: 10px;
  434. }
  435. .title{
  436. padding: 10px 0 ;
  437. }
  438. </style>