report.vue 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  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. typeList[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.formingNum
  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. statusList[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.productionCycle
  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="componentName"
  121. :key="activeName + isUpdate"
  122. :infoData="infoData"
  123. :formData="formData"
  124. :firstInfo="tabList[0]"
  125. :currentInfo="tabList[activeName]"
  126. :taskInfo="{
  127. ...tabList[activeName],
  128. lastTaskCode:
  129. tabList[activeName > 0 ? activeName - 1 : activeName].code
  130. }"
  131. ></components>
  132. <div class="footer">
  133. <el-button type="primary" @click="handleReport">报工</el-button>
  134. </div>
  135. </el-card>
  136. </div>
  137. </template>
  138. <script>
  139. import { getById, report } from '@/api/produceOrder/index.js';
  140. import { getTaskListById } from '@/api/mainData/index.js';
  141. import { getInfo } from '@/api/operationControl/index.js';
  142. import Extrusion from './components/report/Extrusion';
  143. import Drying from './components/report/Drying';
  144. import Heating from './components/report/Heating';
  145. import HalfAdded from './components/report/HalfAdded';
  146. import Common from './components/report/Common';
  147. import Package from './components/report/Package';
  148. import Warehousing from './components/report/Warehousing';
  149. import Sinter from './components/report/Sinter';
  150. import Furnace from './components/report/Furnace';
  151. export default {
  152. components: {
  153. Extrusion,
  154. Drying,
  155. Heating,
  156. HalfAdded,
  157. Common,
  158. Package,
  159. Sinter,
  160. Furnace,
  161. Warehousing
  162. },
  163. data() {
  164. return {
  165. infoData: {},
  166. isUpdate: true,
  167. descriptionsShow: true,
  168. activeName: '0',
  169. tabList: [],
  170. statusList: {
  171. 4: '待生产',
  172. 5: '生产中',
  173. 6: '已完成',
  174. 7: '已延期'
  175. },
  176. typeList: {
  177. 1: '内销订单',
  178. 2: '外销订单',
  179. 3: '预制订单'
  180. },
  181. componentsList: {
  182. 挤压成型: 'Extrusion',
  183. 自然干燥: 'Drying',
  184. 升温干燥: 'Heating',
  185. 半加: 'HalfAdded',
  186. 备炉: 'Furnace',
  187. 烧结: 'Common', //'Sinter',
  188. 深加工: 'Common',
  189. 包装: 'Package',
  190. 入库: 'Warehousing'
  191. },
  192. formData: {}
  193. };
  194. },
  195. computed: {
  196. componentName() {
  197. const { name } = this.tabList[this.activeName];
  198. if (name.includes('半加')) {
  199. return 'HalfAdded';
  200. }
  201. return (
  202. this.componentsList[this.tabList[this.activeName].name] || 'Common'
  203. );
  204. }
  205. },
  206. created() {
  207. this.init();
  208. this.getInfoData();
  209. },
  210. methods: {
  211. handleReport() {
  212. this.$refs.reportRef.report(async (data) => {
  213. // data.workReportCategoryList = data.workReportCategoryList || [
  214. // {
  215. // code: this.infoData.productCode,
  216. // name: this.infoData.productName,
  217. // rootCategoryLevelId: '1',
  218. // batchNo: '',
  219. // brandNum: this.infoData.brandNo
  220. // }
  221. // ];
  222. if (data.workReport) {
  223. data.workReport.taskCode = this.tabList[this.activeName].code;
  224. data.workReport.taskName = this.tabList[this.activeName].name;
  225. data.workReport.taskSort = this.tabList[this.activeName].sortNum;
  226. data.workReport.workOrderId = this.infoData.id;
  227. }
  228. const params = {
  229. isSapReportState: 2, //sap报工状态(0:不调用SAP接口报工;1:投料;2:报工;3:入库)
  230. lastTaskCode:
  231. this.tabList[
  232. this.activeName > 0 ? this.activeName - 1 : this.activeName
  233. ].code,
  234. ...data
  235. };
  236. await report(params).then((res) => {
  237. this.$message.success('报工成功!');
  238. this.getDetail();
  239. this.isUpdate = !this.isUpdate;
  240. return res;
  241. });
  242. });
  243. },
  244. async init() {
  245. await this.getDetail();
  246. await this._getTaskListById();
  247. },
  248. async getDetail() {
  249. const res = await getById(this.$route.query.id);
  250. this.infoData = res;
  251. },
  252. async _getTaskListById() {
  253. // 获取工序
  254. const res1 = await getTaskListById(this.infoData.produceVersionId);
  255. this.tabList = res1;
  256. this.tabList.push({
  257. name: '入库',
  258. code: '999999',
  259. sortNum: 99
  260. });
  261. this.activeName = '0';
  262. },
  263. async getInfoData() {
  264. const res = await getInfo();
  265. if (typeof res != 'string') {
  266. this.formData = res;
  267. } else {
  268. this.formData = {};
  269. }
  270. }
  271. }
  272. };
  273. </script>
  274. <style lang="scss" scoped>
  275. .el-tabs {
  276. margin-top: 20px;
  277. }
  278. .el-button {
  279. margin-top: 10px;
  280. }
  281. .slideUp-icon {
  282. transform: rotate(-90deg);
  283. }
  284. .slideDown-icon {
  285. transform: rotate(90deg);
  286. }
  287. .footer {
  288. text-align: center;
  289. padding: 20px;
  290. }
  291. </style>