luotong.vue 40 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027
  1. <template>
  2. <div class="app-container" style="width: 100%;">
  3. <!--表格-->
  4. <el-table
  5. :data="tableData"
  6. ref="tableRef">
  7. <el-table-column prop="machineId" fixed label="线号" header-align="center" align="center" width="111px" ></el-table-column>
  8. <el-table-column prop="productionDigit" fixed label="生产位数" header-align="center" align="center" width="111.2px"></el-table-column>
  9. <el-table-column label="在机产品" header-align="center" >
  10. <el-table-column prop="productTypeName" fixed label="产品类型" header-align="center" align="center" width="111.2px"></el-table-column>
  11. <el-table-column prop="currentColorCode" label="色号" header-align="center" width="90px" align="center"></el-table-column>
  12. <el-table-column prop="currentSpecification" label="规格" header-align="center" width="90px" align="center"></el-table-column>
  13. <el-table-column prop="currentLotNumber" label="批号" header-align="center" width="90px" align="center"></el-table-column>
  14. <el-table-column prop="number" label="数量" header-align="center" width="90px" align="center"></el-table-column>
  15. <el-table-column prop="startTime" label="上机时间" header-align="center" width="90px" align="center"></el-table-column>
  16. <el-table-column prop="plannedEndTime" label="下机时间" header-align="center" width="90px" align="center"></el-table-column>
  17. </el-table-column>
  18. <el-table-column prop="plannedProduction" label="待生产产品列表" header-align="center" align="center" >
  19. <template v-slot:default="scope">
  20. <div v-if="scope.row.plannedProduction && scope.row.plannedProduction.length > 0">
  21. <div v-for="(chunk, chunkIndex) in splitList(scope.row.plannedProduction, 5)" :key="`chunk-${chunkIndex}`">
  22. <span v-for="(item, index) in chunk" :key="`item-${chunkIndex}-${index}`">
  23. {{ item }}, <!-- 替换为实际显示每个产品的代码 -->
  24. </span>
  25. </div>
  26. </div>
  27. <div v-else>
  28. </div>
  29. </template>
  30. </el-table-column>
  31. <el-table-column fixed="right" label="操作" header-align="center" align="center" width="150px" >
  32. <template v-slot:default="scope">
  33. <el-dropdown>
  34. <el-button type="primary">
  35. 操作
  36. <i class="el-icon-arrow-down el-icon--right"></i>
  37. </el-button>
  38. <el-dropdown-menu slot="dropdown">
  39. <el-dropdown-item @click.native.prevent="handleAddPlan(scope.row)">新增计划</el-dropdown-item>
  40. <el-dropdown-item @click.native.prevent="handleEditPlan(scope.row)">修改计划</el-dropdown-item>
  41. </el-dropdown-menu>
  42. </el-dropdown>
  43. </template>
  44. </el-table-column>
  45. </el-table>
  46. <!--新增计划弹窗-->
  47. <el-dialog title="新增计划" :visible.sync="nanInsertDialogTableVisible" width="1500px">
  48. <el-table :data="tableData2" @row-click.self="handleRowClick">
  49. <el-table-column prop="productId" label="产品" header-align="center" align="center" width="150px">
  50. <template v-slot:default="scope">
  51. <el-select v-model="scope.row.productId" placeholder="请选择待排产产品" @change="selectedChangeDate(scope.row,scope.row.productId)">
  52. <el-option v-for="product in productsInfo" :key="product.id" :label="product.productName" :value="product.id" ></el-option>
  53. </el-select>
  54. </template>
  55. </el-table-column>
  56. <el-table-column prop="currentColorCode" label="色号" header-align="center" align="center">
  57. <template v-slot:default="scope">
  58. <el-select v-model="scope.row.currentColorCode" filterable placeholder="请选择母粒编码" @change="selectedML(scope.row)">
  59. <el-option
  60. v-for="(item,index) in options"
  61. :key="index"
  62. :label="item.label"
  63. :value="item.value">
  64. </el-option>
  65. </el-select>
  66. <!-- &lt;!&ndash; 如果当前行正在编辑,则显示输入框 &ndash;&gt;-->
  67. <!-- <el-input v-if="scope.row.isEditing" disabled="disabled" v-model="scope.row.currentColorCode" placeholder="请输入色号" @blur.stop.prevent="handleInputBlur(scope.row)" ></el-input>-->
  68. <!-- &lt;!&ndash; 否则显示普通文本 &ndash;&gt;-->
  69. <!-- <span v-else>{{ scope.row.currentColorCode }}</span>-->
  70. </template>
  71. </el-table-column>
  72. <el-table-column prop="productionDigit" label="生产位数" header-align="center" align="center">
  73. <template v-slot:default="scope">
  74. <el-input v-if="scope.row.isEditing" v-model="scope.row.productionDigit" placeholder="请输入生产位数" @blur.stop.prevent="handleInputBlur(scope.row)">></el-input>
  75. <span v-else>{{ scope.row.productionDigit }}</span>
  76. </template>
  77. </el-table-column>
  78. <el-table-column prop="currentSpecification" label="规格" header-align="center" align="center">
  79. <template v-slot:default="scope">
  80. <!-- 如果当前行正在编辑,则显示输入框 -->
  81. <el-input v-if="scope.row.isEditing" disabled="disabled" v-model="scope.row.currentSpecification" placeholder="请输入规格" @blur.stop.prevent="handleInputBlur(scope.row)">></el-input>
  82. <!-- 否则显示普通文本 -->
  83. <span v-else>{{ scope.row.currentSpecification }}</span>
  84. </template>
  85. </el-table-column>
  86. <el-table-column prop="currentLotNumber" label="批号" header-align="center" align="center">
  87. <template v-slot:default="scope">
  88. <el-input v-if="scope.row.isEditing" :disabled="isDisabled" v-model="scope.row.currentLotNumber" placeholder="请输入批号" @blur.stop.prevent="handleInputBlur(scope.row)">></el-input>
  89. <span v-else>{{ scope.row.currentLotNumber }}</span>
  90. </template>
  91. </el-table-column>
  92. <!-- 新增筒重、箱重、管色字段 -->
  93. <el-table-column
  94. prop="tubeweight"
  95. label="筒重"
  96. header-align="center"
  97. align="center"
  98. >
  99. <template v-slot:default="scope">
  100. <el-select
  101. v-model="scope.row.tubeweight"
  102. clearable
  103. filterable
  104. allow-create
  105. default-first-option
  106. >
  107. <el-option
  108. v-for="item in dropDownData.drum_weight"
  109. :key="item.id"
  110. :label="item.codeName"
  111. :value="item.codeName"
  112. >
  113. </el-option>
  114. </el-select>
  115. </template>
  116. </el-table-column>
  117. <el-table-column
  118. prop="boxweight"
  119. label="箱重"
  120. header-align="center"
  121. align="center"
  122. >
  123. <template v-slot:default="scope">
  124. <el-select
  125. v-model="scope.row.boxweight"
  126. clearable
  127. filterable
  128. allow-create
  129. default-first-option
  130. >
  131. <el-option
  132. v-for="item in dropDownData.box_weight"
  133. :key="item.id"
  134. :label="item.codeName"
  135. :value="item.codeName"
  136. >
  137. </el-option>
  138. </el-select>
  139. </template>
  140. </el-table-column>
  141. <el-table-column
  142. prop="tubecolor"
  143. label="管色"
  144. header-align="center"
  145. align="center"
  146. >
  147. <template v-slot:default="scope">
  148. <el-select
  149. v-model="scope.row.tubecolor"
  150. clearable
  151. filterable
  152. allow-create
  153. default-first-option
  154. >
  155. <el-option
  156. v-for="item in dropDownData.tube_color"
  157. :key="item.id"
  158. :label="item.codeName"
  159. :value="item.codeName"
  160. >
  161. </el-option>
  162. </el-select>
  163. </template>
  164. </el-table-column>
  165. <!-- 新增筒重、箱重、管色字段 -->
  166. <el-table-column prop="number" label="数量" header-align="center" align="center">
  167. <template v-slot:default="scope">
  168. <el-input v-if="scope.row.isEditing" v-model="scope.row.number" placeholder="请输入数量" @blur.stop.prevent="handleInputBlur(scope.row)">></el-input>
  169. <span v-else>{{ scope.row.number }}</span>
  170. </template>
  171. </el-table-column>
  172. <el-table-column prop="startTime" label="上机时间" header-align="center" align="center">
  173. <template v-slot:default="scope">
  174. <el-input v-if="scope.row.isEditing" v-model="scope.row.startTime" placeholder="请输入上机时间" @blur.stop.prevent="handleInputBlur(scope.row)">></el-input>
  175. <span v-else>{{ scope.row.startTime }}</span>
  176. </template>
  177. </el-table-column>
  178. <el-table-column prop="plannedEndTime" label="计划下机时间" header-align="center" align="center">
  179. <template v-slot:default="scope">
  180. <el-input v-if="scope.row.isEditing" :ref="'input'+scope.$index" v-model="scope.row.plannedEndTime" placeholder="请输入计划下机时间" @blur="handleInputBlur(scope.row)">></el-input>
  181. <span v-else>{{ scope.row.plannedEndTime }}</span>
  182. </template>
  183. </el-table-column>
  184. <el-table-column prop="planStatus" label="计划状态" header-align="center" align="center" width="100px">
  185. <template v-slot:default="scope">
  186. <el-select v-model="scope.row.planStatus" placeholder="计划状态" >
  187. <el-option v-for="stateItem in stateList0" :key="stateItem.id" :label="stateItem.name" :value="stateItem.id" ></el-option>
  188. </el-select>
  189. </template>
  190. </el-table-column>
  191. <el-table-column label="操作" align="center">
  192. <template slot-scope="scope">
  193. <el-button
  194. size="mini"
  195. type="danger"
  196. @click.stop.prevent="handleDelete(scope.$index, scope.row)">删除</el-button>
  197. </template>
  198. </el-table-column>
  199. </el-table>
  200. <el-button type="primary" style="width: 100%;margin-top: 30px" @click="addEditableRow">新增计划产品</el-button>
  201. <span slot="footer" class="dialog-footer">
  202. <el-button @click="nanInsertDialogTableVisible = false">取 消</el-button>
  203. <el-button type="primary" @click="addPlanInfo">确 定</el-button>
  204. </span>
  205. </el-dialog>
  206. <!--修改计划弹窗-->
  207. <el-dialog title="修改计划" :visible.sync="nanUpdateDialogTableVisible" width="1500px">
  208. <!--查询条件-->
  209. <el-form ref="form" :model="formData" label-width="80px" :inline="true">
  210. <el-form-item label="计划状态:">
  211. <el-select v-model="formData.planStatus" placeholder="请选择计划状态">
  212. <el-option v-for="stateListItem in stateList2" :key="product.id" :label="stateListItem.name" :value="stateListItem.id" ></el-option>
  213. </el-select>
  214. </el-form-item>
  215. <el-form-item>
  216. <el-button type="primary" @click="onSubmit">查询</el-button>
  217. <el-button @click="reset">重置</el-button>
  218. </el-form-item>
  219. </el-form>
  220. <!--表格-->
  221. <el-table :data="tableData2" @row-click.self="handleRowClick">
  222. <el-table-column prop="productId" label="产品" header-align="center" align="center" width="150px">
  223. <template slot-scope="scope">
  224. {{ getProductChineseName(scope.row.productId) }}
  225. </template>
  226. </el-table-column>
  227. <el-table-column prop="productionDigit" label="生产位数" header-align="center" align="center">
  228. <template v-slot:default="scope">
  229. <el-input v-if="scope.row.isEditing" v-model="scope.row.productionDigit" placeholder="请输入生产位数" @blur.stop.prevent="handleInputBlur(scope.row)">></el-input>
  230. <span v-else>{{ scope.row.productionDigit }}</span>
  231. </template>
  232. </el-table-column>
  233. <el-table-column prop="currentColorCode" label="色号" header-align="center" align="center">
  234. <template v-slot:default="scope">
  235. <!-- 如果当前行正在编辑,则显示输入框 -->
  236. <el-input v-if="scope.row.isEditing" disabled="disabled" v-model="scope.row.currentColorCode" placeholder="请输入色号" @blur.stop.prevent="handleInputBlur(scope.row)" ></el-input>
  237. <!-- 否则显示普通文本 -->
  238. <span v-else>{{ scope.row.currentColorCode }}</span>
  239. </template>
  240. </el-table-column>
  241. <el-table-column prop="currentSpecification" label="规格" header-align="center" align="center">
  242. <template v-slot:default="scope">
  243. <!-- 如果当前行正在编辑,则显示输入框 -->
  244. <el-input v-if="scope.row.isEditing" :disabled="false" v-model="scope.row.currentSpecification" placeholder="请输入规格" @blur.stop.prevent="handleInputBlur(scope.row)">></el-input>
  245. <!-- 否则显示普通文本 -->
  246. <span v-else>{{ scope.row.currentSpecification }}</span>
  247. </template>
  248. </el-table-column>
  249. <el-table-column prop="currentLotNumber" label="批号" header-align="center" align="center">
  250. <template v-slot:default="scope">
  251. <el-input v-if="scope.row.isEditing" v-model="scope.row.currentLotNumber" placeholder="请输入批号" @blur.stop.prevent="handleInputBlur(scope.row)">></el-input>
  252. <span v-else>{{ scope.row.currentLotNumber }}</span>
  253. </template>
  254. </el-table-column>
  255. <!-- 新增筒重、箱重、管色字段 -->
  256. <el-table-column
  257. prop="tubeweight"
  258. label="筒重"
  259. header-align="center"
  260. align="center"
  261. >
  262. <template v-slot:default="scope">
  263. <el-select
  264. v-model="scope.row.tubeweight"
  265. clearable
  266. filterable
  267. allow-create
  268. default-first-option
  269. >
  270. <el-option
  271. v-for="item in dropDownData.drum_weight"
  272. :key="item.id"
  273. :label="item.codeName"
  274. :value="item.codeName"
  275. >
  276. </el-option>
  277. </el-select>
  278. </template>
  279. </el-table-column>
  280. <el-table-column
  281. prop="boxweight"
  282. label="箱重"
  283. header-align="center"
  284. align="center"
  285. >
  286. <template v-slot:default="scope">
  287. <el-select
  288. v-model="scope.row.boxweight"
  289. clearable
  290. filterable
  291. allow-create
  292. default-first-option
  293. >
  294. <el-option
  295. v-for="item in dropDownData.box_weight"
  296. :key="item.id"
  297. :label="item.codeName"
  298. :value="item.codeName"
  299. >
  300. </el-option>
  301. </el-select>
  302. </template>
  303. </el-table-column>
  304. <el-table-column
  305. prop="tubecolor"
  306. label="管色"
  307. header-align="center"
  308. align="center"
  309. >
  310. <template v-slot:default="scope">
  311. <el-select
  312. v-model="scope.row.tubecolor"
  313. clearable
  314. filterable
  315. allow-create
  316. default-first-option
  317. >
  318. <el-option
  319. v-for="item in dropDownData.tube_color"
  320. :key="item.id"
  321. :label="item.codeName"
  322. :value="item.codeName"
  323. >
  324. </el-option>
  325. </el-select>
  326. </template>
  327. </el-table-column>
  328. <!-- 新增筒重、箱重、管色字段 -->
  329. <el-table-column prop="number" label="数量" header-align="center" align="center">
  330. <template v-slot:default="scope">
  331. <el-input v-if="scope.row.isEditing" v-model="scope.row.number" placeholder="请输入数量" @blur.stop.prevent="handleInputBlur(scope.row)">></el-input>
  332. <span v-else>{{ scope.row.number }}</span>
  333. </template>
  334. </el-table-column>
  335. <el-table-column prop="startTime" label="上机时间" header-align="center" align="center">
  336. <template v-slot:default="scope">
  337. <el-input v-if="scope.row.isEditing" v-model="scope.row.startTime" placeholder="请输入上机时间" @blur.stop.prevent="handleInputBlur(scope.row)">></el-input>
  338. <span v-else>{{ scope.row.startTime }}</span>
  339. </template>
  340. </el-table-column>
  341. <el-table-column prop="plannedEndTime" label="计划下机时间" header-align="center" align="center">
  342. <template v-slot:default="scope">
  343. <el-input v-if="scope.row.isEditing" :ref="'input'+scope.$index" v-model="scope.row.plannedEndTime" placeholder="请输入计划下机时间" @blur="handleInputBlur(scope.row)">></el-input>
  344. <span v-else>{{ scope.row.plannedEndTime }}</span>
  345. </template>
  346. </el-table-column>
  347. <el-table-column prop="planStatus" label="计划状态" header-align="center" align="center" width="100px">
  348. <template v-slot:default="scope">
  349. <!--上机变停机待机-->
  350. <el-select v-if="scope.row.planStatus==1" v-model="scope.row.planStatus" placeholder="计划状态" >
  351. <el-option v-for="stateItem in stateList1" :key="stateItem.id" :label="stateItem.name" :value="stateItem.id" ></el-option>
  352. </el-select>
  353. <!--待机可以上机-->
  354. <el-select v-if="scope.row.planStatus==0" v-model="scope.row.planStatus" placeholder="计划状态" >
  355. <el-option v-for="stateItem in stateList0" :key="stateItem.id" :label="stateItem.name" :value="stateItem.id" ></el-option>
  356. </el-select>
  357. <!--停机变上机-->
  358. <el-select v-if="scope.row.planStatus==2" v-model="scope.row.planStatus" placeholder="计划状态" >
  359. <el-option v-for="stateItem in stateList2" :key="stateItem.id" :label="stateItem.name" :value="stateItem.id" ></el-option>
  360. </el-select>
  361. </template>
  362. </el-table-column>
  363. <el-table-column label="操作" align="center" width="200px">
  364. <template v-slot:default="scope">
  365. <el-button
  366. size="mini"
  367. type="danger"
  368. @click.stop.prevent="updateStatus(scope.$index, scope.row,scope.row.planStatus)">确认修改</el-button>
  369. <el-button
  370. size="mini"
  371. type="danger"
  372. @click.stop.prevent="deletePlan(scope.$index, scope.row)">删除</el-button>
  373. </template>
  374. </el-table-column>
  375. </el-table>
  376. <!--按钮信息-->
  377. <span slot="footer" class="dialog-footer">
  378. <el-button @click="nanUpdateDialogTableVisible = false">取 消</el-button>
  379. <el-button type="primary" @click="nanUpdateDialogTableVisible = false">确 定</el-button>
  380. </span>
  381. </el-dialog>
  382. </div>
  383. </template>
  384. <script>
  385. import {
  386. getProductsInfo,
  387. getProductsAll,
  388. getMaterielInfo,
  389. spinningFrameWinding,
  390. getSpinningPlanList,
  391. addSpinningPlanList,
  392. getPlanSpinningInfo,
  393. updateSpinningInfoPlanOne,
  394. getCurrentProductionLineSuperior,
  395. getIsTheOrderProductProduced,
  396. getOptionLsit
  397. } from "@/api/plan/paln.js";
  398. export default {
  399. data() {
  400. return {
  401. options: [],
  402. //
  403. isDisabled:true,
  404. //选中的是那个车间
  405. tableData:[],
  406. form: {
  407. product:"",
  408. },
  409. formzdsj:{machineToolNo: "", //机台编号
  410. // 表单参数
  411. packaging: "", //包装
  412. machineTool: "", //机台
  413. workShifts: "", //班次
  414. productionDate: "", //生产日期
  415. levels: "", //等级
  416. foreignTradeNumber: "", //外贸号
  417. canisterWeight: "", //筒重
  418. boxWeight: "", //箱重-车重
  419. canisterNum: "", //筒数
  420. tubeColor: "", //管色
  421. comPort: "", //端口
  422. printFormat: "", //格式
  423. grossWeight: 0, //毛重
  424. remark: "", //备注
  425. },
  426. dropDownData: {},
  427. previousMachineId: undefined,
  428. currentRowspan: 1,
  429. prevRow: {},
  430. tableData2: [],
  431. tableDataStatus: [],
  432. nanInsertDialogTableVisible:false,
  433. nanUpdateDialogTableVisible:false,
  434. beiInsertDialogTableVisible:false,
  435. beiUpdateDialogTableVisible:false,
  436. editingRowIndex: -1,
  437. lastEditLine:0,
  438. isEditLine:false,
  439. productsInfo:[],
  440. salesmanInfo:[],
  441. product:{},
  442. materiel:{},
  443. //机台号
  444. machineId:"",
  445. macId:"",
  446. // 待机/上机/停产
  447. stateList0:[
  448. {"id":0,"name":"待机"},
  449. {"id":1,"name":"上机"},
  450. ],
  451. stateList1:[
  452. {"id":0,"name":"待机"},
  453. {"id":2,"name":"停机"},
  454. {"id":1,"name":"上机"},
  455. ],
  456. stateList2:[
  457. {"id":0,"name":"待机"},
  458. {"id":2,"name":"停机"},
  459. {"id":1,"name":"上机"},
  460. ],
  461. formData:{
  462. updateSelectedProductCategory:"",
  463. updateSelectedProductState:""
  464. },
  465. }
  466. },
  467. mounted() {
  468. // 得到排产计划信息
  469. this.getSpinningPlanList();
  470. this.getSelectOptions();
  471. },
  472. methods: {
  473. selectedML(row){
  474. console.log(row.currentColorCode)
  475. if(row.currentColorCode){
  476. let tarName=this.options.find(item=>item.value==row.currentColorCode).colourNumber
  477. console.log("aaaaa=============",tarName)
  478. row.colourNumber=tarName;
  479. console.log("aaaaa=============",row)
  480. }
  481. },
  482. getProductChineseName(productId) {
  483. return this.productsInfo.find(product => product.id == productId).productName;
  484. },
  485. //修改计划里的删除计划
  486. deletePlan($index,row){
  487. console.log(row)
  488. getIsTheOrderProductProduced({"id":row.id}).then(resp=>{
  489. // if(resp.data.length>0){
  490. // this.$message({message: '当前计划订单产品在生产中已经不能删除', type: 'warning'});
  491. // return;//证明有在上级的产品--zhi能有一个上级产品
  492. // }else {
  493. //没有开始生产可以删除
  494. spinningFrameWinding(row.id).then(res=>{
  495. if(res.code==200){
  496. this.$message({
  497. message: '删除成功',
  498. type: 'success'
  499. });
  500. }
  501. this.onSubmit();
  502. this.getSpinningPlanList();
  503. })
  504. // }
  505. });
  506. },
  507. // 待机产品合并(五个显示为一排)
  508. splitList(list, chunkSize) {
  509. const chunks = [];
  510. for (let i = 0; i < list.length; i += chunkSize) {
  511. chunks.push(list.slice(i, i + chunkSize));
  512. }
  513. return chunks;
  514. },
  515. // 查询排产信息
  516. getSpinningPlanList() {
  517. getSpinningPlanList({"productionLineDepartment":"络筒部"}).then((response) => {
  518. this.tableData = response.rows
  519. });
  520. },
  521. // 新增计划是得到产品信息
  522. getProductsInfo() {
  523. getProductsInfo("LT-").then((response) => {
  524. this.productsInfo = response.data;
  525. this.productsInfo.forEach(item => {
  526. // item.productName = item.productName+"—"+item.materieEncoding+item.materieColorNumber
  527. item.productName = item.productName+"—"+item.colours;
  528. });
  529. })
  530. },
  531. // 获取下拉数据
  532. async getSelectOptions() {
  533. try {
  534. let res = await getOptionLsit();
  535. if (res.code == 200) {
  536. this.dropDownData = res.data || {};
  537. // 初始化默认值
  538. if (
  539. this.dropDownData.work_shifts?.length > 0 &&
  540. this.excuteType == 1
  541. ) {
  542. this.formzdsj.workShifts = this.dropDownData.work_shifts[0].codeName;
  543. }
  544. if (this.dropDownData.level?.length > 0 && this.excuteType == 1) {
  545. this.formzdsj.levels = this.dropDownData.level[0].codeName;
  546. }
  547. if (
  548. this.dropDownData.drum_weight?.length > 0 &&
  549. this.excuteType == 1
  550. ) {
  551. this.formzdsj.canisterWeight =
  552. this.dropDownData.drum_weight[0].codeName;
  553. }
  554. if (
  555. this.dropDownData.box_weight?.length > 0 &&
  556. this.excuteType == 1
  557. ) {
  558. this.formzdsj.boxWeight = this.dropDownData.box_weight[0].codeName;
  559. }
  560. if (
  561. this.dropDownData.tube_color?.length > 0 &&
  562. this.excuteType == 1
  563. ) {
  564. this.formzdsj.tubeColor = this.dropDownData.tube_color[0].codeName;
  565. }
  566. } else {
  567. this.$message.error("网络异常!");
  568. }
  569. } catch (error) {}
  570. },
  571. // 下拉框数据改变查询色号批号信息
  572. selectedChangeDate(row,selectedProduct) {
  573. //选择的那个销售产品
  574. this.product = this.productsInfo.find(product => product.id === selectedProduct);
  575. //得到选择的商品
  576. this.form.product=selectedProduct;
  577. //通过母粒编码查询到对应的母粒信息
  578. // let queryParams = {
  579. // "materielCode": this.product.colourNumber
  580. // }
  581. // //得到对应的母粒信息
  582. // getMaterielInfo(queryParams).then((response) => {
  583. // if (response.data!=null) {
  584. // this.materiel = response.data;
  585. // console.log(response.data,"规格")
  586. // //色号 母粒编码+色号
  587. // row.currentColorCode = this.materiel.materieEncoding+"("+this.materiel.materieColorNumber+")";
  588. // }
  589. // });
  590. let queryParams = {
  591. // "materielCode": this.product.colourNumber,
  592. "materielSpecies":"1"
  593. }
  594. //得到对应的母粒信息
  595. getMaterielInfo(queryParams).then((response) => {
  596. if (response.data!=null) {
  597. let mls = response.data
  598. mls.forEach(dataKey => {
  599. this.options.push({
  600. "label":dataKey.materieEncoding+"("+dataKey.materieColorNumber+")",
  601. "value":dataKey.materieEncoding+"("+dataKey.materieColorNumber+")",
  602. "colourNumber":dataKey.materielCode
  603. })
  604. });
  605. //色号 母粒编码+色号
  606. // row.currentColorCode = this.materiel.materieEncoding+"("+this.materiel.materieColorNumber+")";
  607. }
  608. });
  609. //isDisabled(有批号就用,没批号就自己输入)
  610. if(this.product.lotNumber!=undefined&&this.product.lotNumber!=""){
  611. row.currentLotNumber=this.product.lotNumber;
  612. this.isDisabled=true;
  613. }else {
  614. this.isDisabled=false;
  615. row.currentLotNumber="";
  616. }
  617. //产品规格
  618. row.currentSpecification= this.product.productSpecifications;
  619. //合同号--销售单编号(以前打算存的是业务员信息后来存的是销售单编号)
  620. row.salesmanId=this.product.saleOrderNo;
  621. //数量
  622. row.number=this.product.productNumber;
  623. },
  624. // 新增计划产品信息
  625. handleAddPlan(row) {
  626. this.getProductsInfo();
  627. this.nanInsertDialogTableVisible = true
  628. this.tableData2=[]
  629. //先清空
  630. this.machineId=""
  631. //当前操作机台号
  632. this.machineId=row.machineId;
  633. //机台id
  634. this.macId=row.macId;
  635. },
  636. // 新增删除行
  637. handleDelete(index, row) {
  638. // console.log(index,row)
  639. // this.tableData2[a];
  640. this.tableData2.splice(index, 1);
  641. // 把上一编辑行置回-1
  642. this.editingRowIndex = -1;
  643. },
  644. // 点击编辑行
  645. handleRowClick(row) {
  646. this.isEditLine = true;
  647. //找到当前行的编辑索引
  648. var rowIndex = this.tableData2.indexOf(row);
  649. console.log(rowIndex)
  650. if (this.lastEditLine != 0 &&
  651. this.editingRowIndex !== rowIndex &&
  652. this.editingRowIndex !== -1 &&
  653. !this.isRowFilled(this.tableData2[this.lastEditLine])) {
  654. this.$message({
  655. message: '请先完成上一条数据的填写',
  656. type: 'warning'
  657. });
  658. return;
  659. }
  660. //编辑索引不等于当前编辑行索引
  661. if (this.editingRowIndex !== rowIndex) {
  662. // alert(this.editingRowIndex);
  663. if (this.editingRowIndex !== -1) {
  664. //把当前行变成不可编辑的
  665. this.tableData2[this.editingRowIndex].isEditing = false;
  666. }
  667. //把当前行变成可编辑的
  668. row.isEditing = true;
  669. this.editingRowIndex = rowIndex;
  670. }else {
  671. //把当前行变成可编辑的
  672. row.isEditing = true;
  673. this.editingRowIndex = rowIndex;
  674. }
  675. },
  676. // 光标失去焦点变成不可编辑
  677. handleInputBlur(row) {
  678. // let rowIndex = this.tableData2.indexOf(row);
  679. // //编辑索引不等于当前编辑行索引
  680. // if(row.isEditing="true"){
  681. // row.isEditing = false;
  682. // //对于整个表格来说
  683. // this.isEditLine = false;
  684. // //当前编辑行置为-1
  685. // this.editingRowIndex = -1;
  686. // }
  687. //编辑索引不等于当前编辑行索引
  688. // if (this.editingRowIndex !== rowIndex) {
  689. // if (this.isRowFilled(row)) {
  690. // row.isEditing = false;
  691. // //对于整个表格来说
  692. // this.isEditLine = false;
  693. // //当前编辑行置为-1
  694. // this.editingRowIndex = -1;
  695. // }
  696. // }
  697. },
  698. // 检查行是否填写完毕的示例方法
  699. isRowFilled(row) {
  700. return row.productionDigit &&
  701. row.currentColorCode &&
  702. row.currentSpecification &&
  703. row.currentLotNumber&&
  704. row.number&&
  705. row.tubecolor &&
  706. row.boxweight &&
  707. row.tubeweight;
  708. },
  709. // 新增一行标记为可编辑
  710. addEditableRow() {
  711. this.getProductsInfo();
  712. // 检查当前编辑行是否已填写完毕
  713. if(this.tableData2.length!=0){
  714. if (this.editingRowIndex !== -1 && !this.isRowFilled(this.tableData2[this.editingRowIndex])) {
  715. this.$message({
  716. message: '请先完成上一条数据的填写',
  717. type: 'warning'
  718. });
  719. return;
  720. }
  721. //新增行之前先让以前的行不能编辑
  722. this.tableData2.forEach(item => {
  723. item.isEditing = false;
  724. })
  725. }
  726. this.tableData2.push({
  727. currentColorCode: '',
  728. currentSpecification: '',
  729. currentLotNumber: '',
  730. productionDigit: '',
  731. number:'',
  732. startTime: '',
  733. plannedEndTime:'',
  734. planStatus:0,
  735. productId:'',
  736. salesmanId:'',
  737. isEditing: true, // 标记为正在编辑状态
  738. planType:"络筒计划",
  739. colourNumber:"",
  740. });
  741. this.editingRowIndex = this.tableData2.length - 1; // 更新当前编辑的行索引
  742. this.lastEditLine = this.tableData2.length - 1
  743. },
  744. // 添加计划
  745. addPlanInfo(){
  746. if(this.tableData2.length<=0){
  747. this.$message({message: '请先添加表格数据', type: 'warning'});
  748. }
  749. var flag=true;
  750. this.tableData2.forEach(item=>{
  751. if(!this.isRowFilled(item)){
  752. flag=false
  753. }
  754. })
  755. if(flag==false){
  756. this.$message({message: '请完善表格行数据', type: 'warning'});
  757. return ;
  758. }
  759. const datatime=Date.now()+this.machineId;
  760. let i=0
  761. //处理表格数据
  762. this.tableData2.forEach(item=>{
  763. item.timestampRandomCode=datatime;
  764. item.macId=this.macId;
  765. item.machineId=this.machineId;
  766. if(item.planStatus==1){
  767. i++
  768. }
  769. })
  770. if(i>=2){
  771. this.$message({
  772. message: '不能同时添加俩上机计划',
  773. type: 'warning'
  774. });
  775. return;
  776. }
  777. //先查询计划表中有没有正在上机的
  778. getPlanSpinningInfo({"machineId":this.machineId,"macId":this.macId,"planStatus":1}).then(response => {
  779. if(i>=1&&response.data.length>0){
  780. this.$message({
  781. message: '只能有一个产品的状态为上机',
  782. type: 'warning'
  783. });
  784. return;
  785. }else {
  786. //添加计划信息
  787. addSpinningPlanList(this.tableData2).then(response => {
  788. if (response.code == 200) {
  789. this.$message({
  790. message: '添加成功',
  791. type: 'success'
  792. });
  793. this.getSpinningPlanList();
  794. //最后把弹窗关掉
  795. this.nanInsertDialogTableVisible=false
  796. } else {
  797. this.$message({
  798. message: '添加失败',
  799. type: 'error'
  800. });
  801. //最后把弹窗关掉
  802. this.nanInsertDialogTableVisible=false
  803. }
  804. });
  805. }
  806. });
  807. },
  808. // 修改计划
  809. handleEditPlan(row) {
  810. //已经在待机列表了,isNull过滤掉了
  811. getProductsAll(row.macId).then((response) => {
  812. this.productsInfo = response.data;
  813. this.productsInfo.forEach(item => {
  814. item.productName = item.productName+"—"+item.materieEncoding+item.materieColorNumber
  815. });
  816. //当前操作机台号
  817. this.machineId=row.machineId;
  818. //机台id
  819. this.macId=row.macId;
  820. this.tableData2=[];
  821. //弹窗
  822. this.nanUpdateDialogTableVisible = true
  823. getPlanSpinningInfo({"macId":row.macId}).then((response) => {
  824. //得到生产中,停产的,待产的
  825. response.data.forEach(item => {
  826. item.isEditing=false;
  827. item.planStatus=parseInt(item.planStatus);
  828. item.productId=parseInt(item.productId)
  829. })
  830. this.tableData2=response.data;
  831. })
  832. })
  833. },
  834. // 弹窗里边的点击查询
  835. onSubmit(){
  836. this.formData.macId=this.macId;
  837. getPlanSpinningInfo(this.formData).then(response => {
  838. //得到生产中,停产的,待产的
  839. response.data.forEach(item => {
  840. item.isEditing=false;
  841. item.planStatus=parseInt(item.planStatus);
  842. })
  843. this.tableData2=response.data;
  844. });
  845. },
  846. // 重置
  847. reset(){
  848. this.formData.planStatus='';
  849. getPlanSpinningInfo({"macId":this.macId}).then(response => {
  850. //得到生产中,停产的,待产的
  851. response.data.forEach(item => {
  852. item.isEditing=false;
  853. item.planStatus=parseInt(item.planStatus);
  854. })
  855. this.tableData2=response.data;
  856. });
  857. },
  858. // 更新状态
  859. updateStatus(ind, row){
  860. row.planType="络筒计划"
  861. if(!this.isRowFilled(row)){
  862. this.$message({message: '请完善当前行数据', type: 'warning'});
  863. return;
  864. }
  865. if(row.planStatus=="2"){
  866. //如果说我要去停机一个产品我只需要去鉴别你这个产线上有没有停机或者上其他上机的产品
  867. getCurrentProductionLineSuperior({"id":row.id,"macId":row.macId,"planStatus":row.planStatus}).then(response => {
  868. if(response.data.length>0) {
  869. this.$message({message: '已有停机产品不能在停机', type: 'warning'});
  870. return;//证明有在上级的产品--只能有一个上级或者停机的产品
  871. }else {
  872. getCurrentProductionLineSuperior({"id":row.id,"macId":row.macId,"planStatus":"1"}).then(response => {
  873. if(response.data.length>0){
  874. this.$message({message: '已有一个其他产品正在上机,不能在停机,如需要停机,请停机在机产品', type: 'warning'});
  875. return;//证明有在上级的产品--zhi能有一个上级产品
  876. }else {
  877. updateSpinningInfoPlanOne(row).then(response=>{
  878. if (response.code == 200) {
  879. this.$message({
  880. message: '修改成功',
  881. type: 'success'
  882. });
  883. this.getSpinningPlanList();
  884. //最后把弹窗关掉
  885. this.nanInsertDialogTableVisible=false
  886. } else {
  887. this.$message({
  888. message: '修改失败',
  889. type: 'error'
  890. });
  891. //最后把弹窗关掉
  892. this.nanInsertDialogTableVisible=false
  893. }
  894. })
  895. }
  896. })
  897. }
  898. });
  899. return;
  900. }
  901. //判断当前计划是否已经投产
  902. getIsTheOrderProductProduced({"id":row.id}).then(resp=>{
  903. // if(resp.data.length>0){
  904. // this.$message({message: '当前计划订单产品在生产中已经不能修改', type: 'warning'});
  905. // return;//证明有在上级的产品--zhi能有一个上级产品
  906. // }
  907. //不等于0待机才去校验是否重复
  908. if(row.planStatus!=0){
  909. //先查询计划表中有没有正在上机的或者停机的
  910. getCurrentProductionLineSuperior({"id":row.id,"macId":row.macId,"planStatus":row.planStatus}).then(response => {
  911. if(response.data.length>0){
  912. if(row.planStatus==1){
  913. this.$message({message: '只能有一个产品的状态为上机', type: 'warning'});
  914. return;//证明有在上级的产品--zhi能有一个上级产品
  915. }else {
  916. this.$message({message: '已停机不能在停机', type: 'warning'});
  917. return;//证明有在上级的产品--zhi能有一个上级产品
  918. }
  919. }else {
  920. if(row.planStatus==1){
  921. getCurrentProductionLineSuperior({"id":row.id,"macId":row.macId,"planStatus":"2"}).then(response => {
  922. if(response.data.length>0){
  923. this.$message({message: '已停机,请先处理停机产品,然后上机', type: 'warning'});
  924. return;//证明有在上级的产品--zhi能有一个上级产品
  925. }else {
  926. updateSpinningInfoPlanOne(row).then(response=>{
  927. if (response.code == 200) {
  928. this.$message({
  929. message: '修改成功',
  930. type: 'success'
  931. });
  932. this.getSpinningPlanList();
  933. //最后把弹窗关掉
  934. this.nanInsertDialogTableVisible=false
  935. } else {
  936. this.$message({
  937. message: '修改失败',
  938. type: 'error'
  939. });
  940. //最后把弹窗关掉
  941. this.nanInsertDialogTableVisible=false
  942. }
  943. })
  944. }
  945. })
  946. }
  947. if(row.planStatus==2){
  948. getCurrentProductionLineSuperior({"id":row.id,"macId":row.macId,"planStatus":"1"}).then(response => {
  949. if(response.data.length>0){
  950. this.$message({message: '已有一个其他产品正在上机,不能在停机,如需要停机,请停机在机产品', type: 'warning'});
  951. return;//证明有在上级的产品--zhi能有一个上级产品
  952. }else {
  953. updateSpinningInfoPlanOne(row).then(response=>{
  954. if (response.code == 200) {
  955. this.$message({
  956. message: '修改成功',
  957. type: 'success'
  958. });
  959. this.getSpinningPlanList();
  960. //最后把弹窗关掉
  961. this.nanInsertDialogTableVisible=false
  962. } else {
  963. this.$message({
  964. message: '修改失败',
  965. type: 'error'
  966. });
  967. //最后把弹窗关掉
  968. this.nanInsertDialogTableVisible=false
  969. }
  970. })
  971. }
  972. })
  973. }
  974. }
  975. });
  976. }else {
  977. //修改待机的话直接修改
  978. updateSpinningInfoPlanOne(row).then(response=>{
  979. if (response.code == 200) {
  980. this.$message({
  981. message: '修改成功',
  982. type: 'success'
  983. });
  984. this.getSpinningPlanList();
  985. //最后把弹窗关掉
  986. this.nanInsertDialogTableVisible=false
  987. } else {
  988. this.$message({
  989. message: '修改失败',
  990. type: 'error'
  991. });
  992. //最后把弹窗关掉
  993. this.nanInsertDialogTableVisible=false
  994. }
  995. })
  996. }
  997. })
  998. }
  999. }
  1000. }
  1001. </script>
  1002. <style scoped>
  1003. .el-tabs--border-card >>> .el-tabs__content {
  1004. padding: 0 !important;
  1005. }
  1006. .el-table__body-wrapper {
  1007. cursor: grab;
  1008. }
  1009. .el-table__body-wrapper.grabbing {
  1010. cursor: grabbing;
  1011. }
  1012. .container >>> .el-table .cell {
  1013. white-space: pre-line;
  1014. }
  1015. </style>