report.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <template>
  2. <div class="ele-body">
  3. <el-card>
  4. <div class="page-title">
  5. <el-page-header @back="$router.go(-1)">
  6. <div slot="content" class="pageContent">
  7. <div>生产报工</div>
  8. </div>
  9. </el-page-header>
  10. </div>
  11. <el-collapse-transition>
  12. <el-descriptions
  13. title=""
  14. direction="vertical"
  15. :column="7"
  16. border
  17. v-if="descriptionsShow"
  18. >
  19. <el-descriptions-item label="工单号">{{
  20. infoData.code
  21. }}</el-descriptions-item>
  22. <el-descriptions-item label="生产版本">{{
  23. infoData.produceVersionName
  24. }}</el-descriptions-item>
  25. <el-descriptions-item label="工单类型">{{
  26. infoData.workOrderType
  27. }}</el-descriptions-item>
  28. <el-descriptions-item label="产线">{{
  29. infoData.productLine
  30. }}</el-descriptions-item>
  31. <el-descriptions-item label="工艺路线版本">{{
  32. infoData.routingVersion
  33. }}</el-descriptions-item>
  34. <el-descriptions-item label="计划编号">{{
  35. infoData.productionPlanCode
  36. }}</el-descriptions-item>
  37. <el-descriptions-item label="计划类型">{{
  38. infoData.planType
  39. }}</el-descriptions-item>
  40. <el-descriptions-item label="产品编码">{{
  41. infoData.productCode
  42. }}</el-descriptions-item>
  43. <el-descriptions-item label="产品名称">{{
  44. infoData.productName
  45. }}</el-descriptions-item>
  46. <el-descriptions-item label="牌号 | 型号"
  47. >{{ infoData.brandNo }}|{{ infoData.model }}</el-descriptions-item
  48. >
  49. <el-descriptions-item label="要求成型数量(PCS)">{{
  50. infoData.number
  51. }}</el-descriptions-item>
  52. <el-descriptions-item label="要求成型重量(KG)">{{
  53. infoData.formingWeight
  54. }}</el-descriptions-item>
  55. <el-descriptions-item label="计划开始时间">{{
  56. infoData.planStartTime
  57. }}</el-descriptions-item>
  58. <el-descriptions-item label="实际开始时间">{{
  59. infoData.startTime
  60. }}</el-descriptions-item>
  61. <el-descriptions-item label="已成型数量(PCS)">{{
  62. infoData.formedNum
  63. }}</el-descriptions-item>
  64. <el-descriptions-item label="已成型重量(KG)">{{
  65. infoData.formedWeight
  66. }}</el-descriptions-item>
  67. <el-descriptions-item label="已交付数量(PCS)">{{
  68. infoData.deliveredQuantity
  69. }}</el-descriptions-item>
  70. <el-descriptions-item label="已交付重量(KG)">{{
  71. infoData.deliveredWeight
  72. }}</el-descriptions-item>
  73. <el-descriptions-item label="工单状态">{{
  74. infoData.status
  75. }}</el-descriptions-item>
  76. <el-descriptions-item label="完成时间">{{
  77. infoData.completeTime
  78. }}</el-descriptions-item>
  79. <el-descriptions-item label="生产周期">{{
  80. infoData.ssss
  81. }}</el-descriptions-item>
  82. </el-descriptions>
  83. </el-collapse-transition>
  84. <div>
  85. <el-button
  86. class="w100"
  87. type="primary"
  88. size="mini"
  89. plain
  90. @click="descriptionsShow = !descriptionsShow"
  91. >
  92. <i
  93. class="el-icon el-icon-d-arrow-left"
  94. :class="[descriptionsShow ? 'slideDown-icon' : 'slideUp-icon']"
  95. ></i>
  96. </el-button>
  97. </div>
  98. </el-card>
  99. <el-card>
  100. <el-tabs v-model="activeName" type="card">
  101. <el-tab-pane
  102. :label="item.name"
  103. :name="index + ''"
  104. v-for="(item, index) in tabList"
  105. :key="item.id"
  106. ></el-tab-pane>
  107. <!--<el-tab-pane label="挤压成型" name="挤压成型"></el-tab-pane>
  108. <el-tab-pane label="自然干燥" name="自然干燥"></el-tab-pane>
  109. <el-tab-pane label="升温干燥" name="升温干燥"></el-tab-pane>
  110. <el-tab-pane label="半加定长" name="半加定长"></el-tab-pane>
  111. <el-tab-pane label="备炉" name="备炉"></el-tab-pane>
  112. <el-tab-pane label="烧结" name="烧结"></el-tab-pane>
  113. <el-tab-pane label="深加工" name="深加工"></el-tab-pane>
  114. <el-tab-pane label="包装" name="包装"></el-tab-pane>
  115. <el-tab-pane label="入库" name="入库"></el-tab-pane> -->
  116. </el-tabs>
  117. <components
  118. v-if="tabList.length"
  119. ref="reportRef"
  120. :is="componentsList[tabList[activeName].name] || 'Common'"
  121. :key="activeName"
  122. :infoData="infoData"
  123. :taskInfo="{
  124. ...tabList[activeName],
  125. lastTaskCode:
  126. tabList[activeName > 0 ? activeName - 1 : activeName].code
  127. }"
  128. ></components>
  129. <div class="footer">
  130. <el-button type="primary" @click="handleReport">一键报工</el-button>
  131. </div>
  132. </el-card>
  133. </div>
  134. </template>
  135. <script>
  136. import { getById, report } from '@/api/produceOrder/index.js';
  137. import { getTaskListById } from '@/api/mainData/index.js';
  138. import Extrusion from './components/report/Extrusion';
  139. import Drying from './components/report/Drying';
  140. import Heating from './components/report/Heating';
  141. import HalfAdded from './components/report/HalfAdded';
  142. import Common from './components/report/Common';
  143. import Package from './components/report/Package';
  144. import Warehousing from './components/report/Warehousing';
  145. import Sinter from './components/report/Sinter';
  146. import Furnace from './components/report/Furnace';
  147. export default {
  148. components: {
  149. Extrusion,
  150. Drying,
  151. Heating,
  152. HalfAdded,
  153. Common,
  154. Package,
  155. Sinter,
  156. Furnace,
  157. Warehousing
  158. },
  159. data () {
  160. return {
  161. infoData: {},
  162. descriptionsShow: true,
  163. activeName: '0',
  164. tabList: [],
  165. componentsList: {
  166. 挤压成型: 'Extrusion',
  167. 自然干燥: 'Drying',
  168. 升温干燥: 'Heating',
  169. 半加定长: 'HalfAdded',
  170. 备炉: 'Furnace',
  171. 烧结: 'Common', //'Sinter',
  172. 深加工: 'Common',
  173. 包装: 'Package',
  174. 入库: 'Warehousing'
  175. }
  176. };
  177. },
  178. created () {
  179. this.getDetail(this.$route.query.id);
  180. },
  181. methods: {
  182. handleReport () {
  183. this.$refs.reportRef.report(async (data) => {
  184. // data.workReportCategoryList = data.workReportCategoryList || [
  185. // {
  186. // code: this.infoData.productCode,
  187. // name: this.infoData.productName,
  188. // rootCategoryLevelId: '1',
  189. // batchNo: '',
  190. // brandNum: this.infoData.brandNo
  191. // }
  192. // ];
  193. if (data.workReport) {
  194. data.workReport.taskCode = this.tabList[this.activeName].code;
  195. data.workReport.taskName = this.tabList[this.activeName].name;
  196. data.workReport.taskSort = this.tabList[this.activeName].sortNum;
  197. data.workReport.workOrderId = this.infoData.id;
  198. }
  199. const params = {
  200. isSapReportState: 0,
  201. lastTaskCode:
  202. this.tabList[
  203. this.activeName > 0 ? this.activeName - 1 : this.activeName
  204. ].code,
  205. ...data
  206. };
  207. await report(params);
  208. });
  209. },
  210. async getDetail (id) {
  211. const res = await getById(id);
  212. this.infoData = res;
  213. // 获取工序
  214. const res1 = await getTaskListById(res.produceVersionId);
  215. this.tabList = [...res1, { name: '自然干燥' }, { name: '升温干燥' }];
  216. this.activeName = '0';
  217. }
  218. }
  219. };
  220. </script>
  221. <style lang="scss" scoped>
  222. .el-tabs {
  223. margin-top: 20px;
  224. }
  225. .el-button {
  226. margin-top: 10px;
  227. }
  228. .slideUp-icon {
  229. transform: rotate(-90deg);
  230. }
  231. .slideDown-icon {
  232. transform: rotate(90deg);
  233. }
  234. .footer {
  235. text-align: center;
  236. padding: 20px;
  237. }
  238. </style>