index.vue 90 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547
  1. <template>
  2. <div class="app-container" style="width: 100%">
  3. <el-tabs
  4. type="border-card"
  5. @tab-click="tabClick"
  6. v-model="selectedWorkshop"
  7. >
  8. <!--南车间-->
  9. <el-tab-pane :label="$t('planTable.southWorkshop')" name="南车间">
  10. <!--表格-->
  11. <el-table :data="tableData" ref="tableRef" :span-method="spanMethod2">
  12. <el-table-column
  13. prop="machineId"
  14. fixed
  15. :label="$t('planTable.machineNo')"
  16. header-align="center"
  17. align="center"
  18. width="111px"
  19. ></el-table-column>
  20. <el-table-column
  21. prop="productType"
  22. fixed
  23. :label="$t('planTable.productCategory')"
  24. header-align="center"
  25. align="center"
  26. width="111.2px"
  27. ></el-table-column>
  28. <el-table-column :label="$t('planTable.inMachineProduct')" header-align="center">
  29. <el-table-column
  30. prop="productTypeName"
  31. fixed
  32. :label="$t('planTable.productType')"
  33. header-align="center"
  34. align="center"
  35. width="111.2px"
  36. ></el-table-column>
  37. <el-table-column
  38. prop="currentColorCode"
  39. :label="$t('planTable.colorNo')"
  40. header-align="center"
  41. width="90px"
  42. align="center"
  43. ></el-table-column>
  44. <el-table-column
  45. prop="currentSpecification"
  46. :label="$t('planTable.specification')"
  47. header-align="center"
  48. width="90px"
  49. align="center"
  50. ></el-table-column>
  51. <el-table-column
  52. prop="currentLotNumber"
  53. :label="$t('planTable.batchNo')"
  54. header-align="center"
  55. width="90px"
  56. align="center"
  57. ></el-table-column>
  58. <el-table-column
  59. prop="number"
  60. :label="$t('planTable.quantity')"
  61. header-align="center"
  62. width="90px"
  63. align="center"
  64. ></el-table-column>
  65. <el-table-column
  66. prop="currentSpindleCount"
  67. :label="$t('planTable.spindleCount')"
  68. header-align="center"
  69. width="90px"
  70. align="center"
  71. ></el-table-column>
  72. <el-table-column
  73. prop="startTime"
  74. :label="$t('planTable.startTime')"
  75. header-align="center"
  76. width="90px"
  77. align="center"
  78. ></el-table-column>
  79. <el-table-column
  80. prop="plannedEndTime"
  81. :label="$t('planTable.endTime')"
  82. header-align="center"
  83. width="90px"
  84. align="center"
  85. ></el-table-column>
  86. </el-table-column>
  87. <!-- <el-table-column label="待上机产品" header-align="center" align="center">-->
  88. <!-- <el-table-column prop="djCurrentColorCode" label="色号" header-align="center" align="center"></el-table-column>-->
  89. <!-- <el-table-column prop="djCurrentSpecification" label="规格" header-align="center" align="center"></el-table-column>-->
  90. <!-- <el-table-column prop="djNumber" label="数量" header-align="center" align="center"></el-table-column>-->
  91. <!-- <el-table-column prop="djCurrentLotNumber" label="原丝批号" header-align="center" align="center"></el-table-column>-->
  92. <!-- </el-table-column>-->
  93. <el-table-column
  94. prop="listOfPendingProduction"
  95. :label="$t('planTable.pendingProductList')"
  96. header-align="center"
  97. align="center"
  98. >
  99. <template slot-scope="scope">
  100. <div v-if="scope.row.listOfPendingProduction">
  101. <span
  102. v-for="(item, index) in scope.row.listOfPendingProduction.split(',')"
  103. :key="index"
  104. >
  105. {{ item }},
  106. <br
  107. v-if="
  108. (index + 1) % 5 === 0 &&
  109. index !==
  110. scope.row.listOfPendingProduction.split(',').length - 1
  111. "
  112. />
  113. </span>
  114. </div>
  115. </template>
  116. </el-table-column>
  117. <el-table-column
  118. fixed="right"
  119. :label="$t('planTable.operation')"
  120. header-align="center"
  121. align="center"
  122. width="150px"
  123. >
  124. <template slot-scope="scope">
  125. <el-dropdown>
  126. <el-button type="primary">
  127. {{ $t('planTable.operation') }}
  128. <i class="el-icon-arrow-down el-icon--right"></i>
  129. </el-button>
  130. <el-dropdown-menu slot="dropdown">
  131. <el-dropdown-item
  132. @click.native.prevent="handleAddPlan(scope.row)"
  133. >{{ $t('planTable.addPlan') }}</el-dropdown-item
  134. >
  135. <el-dropdown-item
  136. @click.native.prevent="handleEditPlan(scope.row)"
  137. >{{ $t('planTable.editPlan') }}</el-dropdown-item
  138. >
  139. </el-dropdown-menu>
  140. </el-dropdown>
  141. </template>
  142. </el-table-column>
  143. </el-table>
  144. <!--新增计划弹窗-->
  145. <el-dialog
  146. :title="$t('planTable.addPlanTitle')"
  147. :visible.sync="nanInsertDialogTableVisible"
  148. width="1500px"
  149. >
  150. <el-table :data="tableData2" @row-click.self="handleRowClick">
  151. <el-table-column
  152. prop="productId"
  153. :label="$t('planTable.product')"
  154. header-align="center"
  155. align="center"
  156. width="150px"
  157. >
  158. <template v-slot:default="scope">
  159. <el-select
  160. filterable
  161. v-model="scope.row.productId"
  162. :placeholder="$t('planTable.selectProduct')"
  163. @change="selectedChangeDate(scope.row, scope.row.productId)"
  164. >
  165. <el-option
  166. v-for="product in productsInfo"
  167. :key="product.id"
  168. :label="product.productName"
  169. :value="product.id"
  170. ></el-option>
  171. </el-select>
  172. </template>
  173. </el-table-column>
  174. <el-table-column
  175. prop="currentColorCode"
  176. :label="$t('planTable.colorNo')"
  177. header-align="center"
  178. align="center"
  179. >
  180. <template v-slot:default="scope">
  181. <el-select
  182. v-model="scope.row.currentColorCode"
  183. filterable
  184. :placeholder="$t('planTable.selectColorCode')"
  185. @change="selectedML(scope.row)"
  186. >
  187. <el-option
  188. v-for="(item, index) in options"
  189. :key="index"
  190. :label="item.label"
  191. :value="item.value"
  192. >
  193. </el-option>
  194. </el-select>
  195. <!-- &lt;!&ndash; 如果当前行正在编辑,则显示输入框 &ndash;&gt;-->
  196. <!-- <el-input v-if="scope.row.isEditing" v-model="scope.row.currentColorCode" placeholder="请输入色号" @blur.stop.prevent="handleInputBlur(scope.row)" ></el-input>-->
  197. <!-- &lt;!&ndash; 否则显示普通文本 &ndash;&gt;-->
  198. <!-- <span v-else>{{ scope.row.currentColorCode }}</span>-->
  199. </template>
  200. </el-table-column>
  201. <el-table-column
  202. prop="currentSpecification"
  203. :label="$t('planTable.specification')"
  204. header-align="center"
  205. align="center"
  206. >
  207. <template v-slot:default="scope">
  208. <!-- 如果当前行正在编辑,则显示输入框 -->
  209. <el-input
  210. v-if="scope.row.isEditing"
  211. disabled="disabled"
  212. v-model="scope.row.currentSpecification"
  213. :placeholder="$t('planTable.specification')"
  214. @blur.stop.prevent="handleInputBlur(scope.row)"
  215. >></el-input
  216. >
  217. <!-- 否则显示普通文本 -->
  218. <span v-else>{{ scope.row.currentSpecification }}</span>
  219. </template>
  220. </el-table-column>
  221. <el-table-column
  222. prop="productType"
  223. :label="$t('planTable.productCategory')"
  224. header-align="center"
  225. align="center"
  226. width="100px"
  227. >
  228. <template v-slot:default="scope">
  229. <el-select
  230. v-model="scope.row.productType"
  231. :placeholder="$t('planTable.selectCategory')"
  232. >
  233. <el-option
  234. v-for="product in productTypeList"
  235. :key="product.value"
  236. :label="product.lable"
  237. :value="product.value"
  238. ></el-option>
  239. </el-select>
  240. </template>
  241. </el-table-column>
  242. <el-table-column
  243. prop="currentLotNumber"
  244. :label="$t('planTable.batchNo')"
  245. header-align="center"
  246. align="center"
  247. >
  248. <template v-slot:default="scope">
  249. <el-input
  250. v-if="scope.row.isEditing"
  251. :disabled="isDisabled"
  252. v-model="scope.row.currentLotNumber"
  253. :placeholder="$t('planTable.inputBatchNo')"
  254. @blur.stop.prevent="handleInputBlur(scope.row)"
  255. >></el-input
  256. >
  257. <span v-else>{{ scope.row.currentLotNumber }}</span>
  258. </template>
  259. </el-table-column>
  260. <!-- 新增筒重、箱重、管色字段 -->
  261. <el-table-column
  262. prop="tubeweight"
  263. label="筒重"
  264. header-align="center"
  265. align="center"
  266. >
  267. <template v-slot:default="scope">
  268. <el-select
  269. v-model="scope.row.tubeweight"
  270. clearable
  271. filterable
  272. allow-create
  273. default-first-option
  274. >
  275. <el-option
  276. v-for="item in dropDownData.drum_weight"
  277. :key="item.id"
  278. :label="item.codeName"
  279. :value="item.codeName"
  280. >
  281. </el-option>
  282. </el-select>
  283. </template>
  284. </el-table-column>
  285. <el-table-column
  286. prop="boxweight"
  287. label="箱重"
  288. header-align="center"
  289. align="center"
  290. >
  291. <template v-slot:default="scope">
  292. <el-select
  293. v-model="scope.row.boxweight"
  294. clearable
  295. filterable
  296. allow-create
  297. default-first-option
  298. >
  299. <el-option
  300. v-for="item in dropDownData.box_weight"
  301. :key="item.id"
  302. :label="item.codeName"
  303. :value="item.codeName"
  304. >
  305. </el-option>
  306. </el-select>
  307. </template>
  308. </el-table-column>
  309. <el-table-column
  310. prop="tubecolor"
  311. label="管色"
  312. header-align="center"
  313. align="center"
  314. >
  315. <template v-slot:default="scope">
  316. <el-select
  317. v-model="scope.row.tubecolor"
  318. clearable
  319. filterable
  320. allow-create
  321. default-first-option
  322. >
  323. <el-option
  324. v-for="item in dropDownData.tube_color"
  325. :key="item.id"
  326. :label="item.codeName"
  327. :value="item.codeName"
  328. >
  329. </el-option>
  330. </el-select>
  331. </template>
  332. </el-table-column>
  333. <!-- 新增筒重、箱重、管色字段 -->
  334. <el-table-column
  335. prop="currentSpindleCount"
  336. :label="$t('planTable.spindleCount')"
  337. header-align="center"
  338. align="center"
  339. >
  340. <template v-slot:default="scope">
  341. <el-input
  342. v-if="scope.row.isEditing"
  343. v-model="scope.row.currentSpindleCount"
  344. :placeholder="$t('planTable.inputSpindleCount')"
  345. @blur.stop.prevent="handleInputBlur(scope.row)"
  346. >></el-input
  347. >
  348. <span v-else>{{ scope.row.currentSpindleCount }}</span>
  349. </template>
  350. </el-table-column>
  351. <el-table-column
  352. prop="number"
  353. :label="$t('planTable.quantity')"
  354. header-align="center"
  355. align="center"
  356. >
  357. <template v-slot:default="scope">
  358. <el-input
  359. v-if="scope.row.isEditing"
  360. v-model="scope.row.number"
  361. :placeholder="$t('planTable.inputQuantity')"
  362. @blur.stop.prevent="handleInputBlur(scope.row)"
  363. >></el-input
  364. >
  365. <span v-else>{{ scope.row.number }}</span>
  366. </template>
  367. </el-table-column>
  368. <el-table-column
  369. prop="startTime"
  370. :label="$t('planTable.startTime')"
  371. header-align="center"
  372. align="center"
  373. >
  374. <template v-slot:default="scope">
  375. <el-input
  376. v-if="scope.row.isEditing"
  377. v-model="scope.row.startTime"
  378. :placeholder="$t('planTable.inputStartTime')"
  379. @blur.stop.prevent="handleInputBlur(scope.row)"
  380. >></el-input
  381. >
  382. <span v-else>{{ scope.row.startTime }}</span>
  383. </template>
  384. </el-table-column>
  385. <el-table-column
  386. prop="plannedEndTime"
  387. :label="$t('planTable.endTime')"
  388. header-align="center"
  389. align="center"
  390. >
  391. <template v-slot:default="scope">
  392. <el-input
  393. v-if="scope.row.isEditing"
  394. :ref="'input' + scope.$index"
  395. v-model="scope.row.plannedEndTime"
  396. :placeholder="$t('planTable.inputEndTime')"
  397. @blur="handleInputBlur(scope.row)"
  398. >></el-input
  399. >
  400. <span v-else>{{ scope.row.plannedEndTime }}</span>
  401. </template>
  402. </el-table-column>
  403. <el-table-column
  404. prop="planStatus"
  405. :label="$t('planTable.planStatus')"
  406. header-align="center"
  407. align="center"
  408. width="100px"
  409. >
  410. <template v-slot:default="scope">
  411. <el-select
  412. v-model="scope.row.planStatus"
  413. :placeholder="$t('planTable.planStatus')"
  414. >
  415. <el-option
  416. v-for="stateItem in stateList0"
  417. :key="stateItem.id"
  418. :label="stateItem.name"
  419. :value="stateItem.id"
  420. ></el-option>
  421. </el-select>
  422. </template>
  423. </el-table-column>
  424. <el-table-column :label="$t('planTable.operation')">
  425. <template slot-scope="scope">
  426. <el-button
  427. size="mini"
  428. type="danger"
  429. @click.stop.prevent="handleDelete(scope.$index, scope.row)"
  430. >{{ $t('planTable.delete') }}</el-button
  431. >
  432. </template>
  433. </el-table-column>
  434. </el-table>
  435. <el-button
  436. type="primary"
  437. style="width: 100%; margin-top: 30px"
  438. @click="addEditableRow"
  439. >{{ $t('planTable.addPlanProduct') }}</el-button
  440. >
  441. <span slot="footer" class="dialog-footer">
  442. <el-button @click="nanInsertDialogTableVisible = false"
  443. >{{ $t('planTable.cancel') }}</el-button
  444. >
  445. <el-button type="primary" @click="addPlanInfo">{{ $t('planTable.confirm') }}</el-button>
  446. </span>
  447. </el-dialog>
  448. <!--修改计划弹窗-->
  449. <el-dialog
  450. :title="$t('planTable.editPlanTitle')"
  451. :visible.sync="nanUpdateDialogTableVisible"
  452. width="1500px"
  453. >
  454. <!--查询条件-->
  455. <el-form
  456. ref="form"
  457. :model="formData"
  458. label-width="80px"
  459. :inline="true"
  460. >
  461. <el-form-item :label="$t('planTable.productCategoryLabel')" prop="productType">
  462. <el-select
  463. v-model="formData.productType"
  464. :placeholder="$t('planTable.selectCategory')"
  465. >
  466. <el-option
  467. v-for="product in productTypeList"
  468. :key="product.value"
  469. :label="product.lable"
  470. :value="product.value"
  471. ></el-option>
  472. </el-select>
  473. </el-form-item>
  474. <el-form-item :label="$t('planTable.planStatusLabel')" prop="planStatus">
  475. <el-select
  476. v-model="formData.planStatus"
  477. :placeholder="$t('planTable.planStatus')"
  478. >
  479. <el-option
  480. v-for="stateListItem in stateList2"
  481. :key="stateListItem.id"
  482. :label="stateListItem.name"
  483. :value="stateListItem.id"
  484. ></el-option>
  485. </el-select>
  486. </el-form-item>
  487. <el-form-item>
  488. <el-button type="primary" @click="onSubmit">{{ $t('planTable.search') }}</el-button>
  489. <el-button @click="reset">{{ $t('planTable.reset') }}</el-button>
  490. </el-form-item>
  491. </el-form>
  492. <!--表格-->
  493. <el-table :data="tableData2" @row-click.self="handleRowClick">
  494. <el-table-column
  495. prop="productId"
  496. label="产品"
  497. header-align="center"
  498. align="center"
  499. width="150px"
  500. >
  501. <template slot-scope="scope">
  502. {{ getProductChineseName(scope.row.productId) }}
  503. </template>
  504. </el-table-column>
  505. <el-table-column
  506. prop="currentColorCode"
  507. label="色号"
  508. header-align="center"
  509. align="center"
  510. >
  511. <template v-slot:default="scope">
  512. <!-- 如果当前行正在编辑,则显示输入框 -->
  513. <el-input
  514. v-if="scope.row.isEditing"
  515. disabled="disabled"
  516. v-model="scope.row.currentColorCode"
  517. placeholder="请输入色号"
  518. @blur.stop.prevent="handleInputBlur(scope.row)"
  519. ></el-input>
  520. <!-- 否则显示普通文本 -->
  521. <span v-else>{{ scope.row.currentColorCode }}</span>
  522. </template>
  523. </el-table-column>
  524. <el-table-column
  525. prop="currentSpecification"
  526. label="规格"
  527. header-align="center"
  528. align="center"
  529. >
  530. <template v-slot:default="scope">
  531. <!-- 如果当前行正在编辑,则显示输入框 -->
  532. <el-input
  533. v-if="scope.row.isEditing"
  534. disabled="disabled"
  535. v-model="scope.row.currentSpecification"
  536. placeholder="请输入规格"
  537. @blur.stop.prevent="handleInputBlur(scope.row)"
  538. >></el-input
  539. >
  540. <!-- 否则显示普通文本 -->
  541. <span v-else>{{ scope.row.currentSpecification }}</span>
  542. </template>
  543. </el-table-column>
  544. <el-table-column
  545. prop="productType"
  546. label="产品类别"
  547. header-align="center"
  548. align="center"
  549. width="100px"
  550. >
  551. <template v-slot:default="scope">
  552. <el-select
  553. v-model="scope.row.productType"
  554. placeholder="请选择产品类别"
  555. >
  556. <el-option
  557. v-for="product in productTypeList"
  558. :key="product.value"
  559. :label="product.lable"
  560. :value="product.value"
  561. ></el-option>
  562. </el-select>
  563. </template>
  564. </el-table-column>
  565. <el-table-column
  566. prop="currentLotNumber"
  567. label="批号"
  568. header-align="center"
  569. align="center"
  570. >
  571. <template v-slot:default="scope">
  572. <el-input
  573. v-if="scope.row.isEditing"
  574. disabled="disabled"
  575. v-model="scope.row.currentLotNumber"
  576. placeholder="请输入批号"
  577. @blur.stop.prevent="handleInputBlur(scope.row)"
  578. >></el-input
  579. >
  580. <span v-else>{{ scope.row.currentLotNumber }}</span>
  581. </template>
  582. </el-table-column>
  583. <!-- 新增筒重、箱重、管色字段 -->
  584. <el-table-column
  585. prop="tubeweight"
  586. label="筒重"
  587. header-align="center"
  588. align="center"
  589. >
  590. <template v-slot:default="scope">
  591. <el-select
  592. v-model="scope.row.tubeweight"
  593. clearable
  594. filterable
  595. allow-create
  596. default-first-option
  597. >
  598. <el-option
  599. v-for="item in dropDownData.drum_weight"
  600. :key="item.id"
  601. :label="item.codeName"
  602. :value="item.codeName"
  603. >
  604. </el-option>
  605. </el-select>
  606. </template>
  607. </el-table-column>
  608. <el-table-column
  609. prop="boxweight"
  610. label="箱重"
  611. header-align="center"
  612. align="center"
  613. >
  614. <template v-slot:default="scope">
  615. <el-select
  616. v-model="scope.row.boxweight"
  617. clearable
  618. filterable
  619. allow-create
  620. default-first-option
  621. >
  622. <el-option
  623. v-for="item in dropDownData.box_weight"
  624. :key="item.id"
  625. :label="item.codeName"
  626. :value="item.codeName"
  627. >
  628. </el-option>
  629. </el-select>
  630. </template>
  631. </el-table-column>
  632. <el-table-column
  633. prop="tubecolor"
  634. label="管色"
  635. header-align="center"
  636. align="center"
  637. >
  638. <template v-slot:default="scope">
  639. <el-select
  640. v-model="scope.row.tubecolor"
  641. clearable
  642. filterable
  643. allow-create
  644. default-first-option
  645. >
  646. <el-option
  647. v-for="item in dropDownData.tube_color"
  648. :key="item.id"
  649. :label="item.codeName"
  650. :value="item.codeName"
  651. >
  652. </el-option>
  653. </el-select>
  654. </template>
  655. </el-table-column>
  656. <!-- 新增筒重、箱重、管色字段 -->
  657. <el-table-column
  658. prop="currentSpindleCount"
  659. label="锭数"
  660. header-align="center"
  661. align="center"
  662. >
  663. <template v-slot:default="scope">
  664. <el-input
  665. v-if="scope.row.isEditing"
  666. v-model="scope.row.currentSpindleCount"
  667. placeholder="请输入锭数"
  668. @blur.stop.prevent="handleInputBlur(scope.row)"
  669. >></el-input
  670. >
  671. <span v-else>{{ scope.row.currentSpindleCount }}</span>
  672. </template>
  673. </el-table-column>
  674. <el-table-column
  675. prop="number"
  676. label="数量"
  677. header-align="center"
  678. align="center"
  679. >
  680. <template v-slot:default="scope">
  681. <el-input
  682. v-if="scope.row.isEditing"
  683. v-model="scope.row.number"
  684. placeholder="请输入数量"
  685. @blur.stop.prevent="handleInputBlur(scope.row)"
  686. >></el-input
  687. >
  688. <span v-else>{{ scope.row.number }}</span>
  689. </template>
  690. </el-table-column>
  691. <el-table-column
  692. prop="startTime"
  693. label="上机时间"
  694. header-align="center"
  695. align="center"
  696. >
  697. <template v-slot:default="scope">
  698. <el-input
  699. v-if="scope.row.isEditing"
  700. v-model="scope.row.startTime"
  701. placeholder="请输入上机时间"
  702. @blur.stop.prevent="handleInputBlur(scope.row)"
  703. >></el-input
  704. >
  705. <span v-else>{{ scope.row.startTime }}</span>
  706. </template>
  707. </el-table-column>
  708. <el-table-column
  709. prop="plannedEndTime"
  710. label="计划下机时间"
  711. header-align="center"
  712. align="center"
  713. >
  714. <template v-slot:default="scope">
  715. <el-input
  716. v-if="scope.row.isEditing"
  717. :ref="'input' + scope.$index"
  718. v-model="scope.row.plannedEndTime"
  719. placeholder="请输入计划下机时间"
  720. @blur="handleInputBlur(scope.row)"
  721. >></el-input
  722. >
  723. <span v-else>{{ scope.row.plannedEndTime }}</span>
  724. </template>
  725. </el-table-column>
  726. <el-table-column
  727. prop="planStatus"
  728. label="计划状态"
  729. header-align="center"
  730. align="center"
  731. width="100px"
  732. >
  733. <template v-slot:default="scope">
  734. <!--上机变停机待机-->
  735. <el-select
  736. v-if="scope.row.planStatus == 1"
  737. v-model="scope.row.planStatus"
  738. :placeholder="$t('planTable.planStatus')"
  739. >
  740. <el-option
  741. v-for="stateItem in stateList1"
  742. :key="stateItem.id"
  743. :label="stateItem.name"
  744. :value="stateItem.id"
  745. ></el-option>
  746. </el-select>
  747. <!--待机可以上机-->
  748. <el-select
  749. v-if="scope.row.planStatus == 0"
  750. v-model="scope.row.planStatus"
  751. :placeholder="$t('planTable.planStatus')"
  752. >
  753. <el-option
  754. v-for="stateItem in stateList0"
  755. :key="stateItem.id"
  756. :label="stateItem.name"
  757. :value="stateItem.id"
  758. ></el-option>
  759. </el-select>
  760. <!--停机变上机-->
  761. <el-select
  762. v-if="scope.row.planStatus == 2"
  763. v-model="scope.row.planStatus"
  764. :placeholder="$t('planTable.planStatus')"
  765. >
  766. <el-option
  767. v-for="stateItem in stateList2"
  768. :key="stateItem.id"
  769. :label="stateItem.name"
  770. :value="stateItem.id"
  771. ></el-option>
  772. </el-select>
  773. </template>
  774. </el-table-column>
  775. <el-table-column label="操作" align="center" width="200px">
  776. <template slot-scope="scope">
  777. <el-button
  778. size="mini"
  779. type="danger"
  780. @click.stop.prevent="updateStatus(scope.$index, scope.row)"
  781. >确认修改</el-button
  782. >
  783. <el-button
  784. size="mini"
  785. type="danger"
  786. @click.stop.prevent="deletePlan(scope.$index, scope.row)"
  787. >删除</el-button
  788. >
  789. </template>
  790. </el-table-column>
  791. </el-table>
  792. <!--操作按钮-->
  793. <span slot="footer" class="dialog-footer">
  794. <el-button @click="nanUpdateDialogTableVisible = false"
  795. >{{ $t('planTable.cancel') }}</el-button
  796. >
  797. <el-button
  798. type="primary"
  799. @click="nanUpdateDialogTableVisible = false"
  800. >{{ $t('planTable.confirm') }}</el-button
  801. >
  802. </span>
  803. </el-dialog>
  804. </el-tab-pane>
  805. <!--北车间-->
  806. <el-tab-pane :label="$t('planTable.northWorkshop')" name="北车间">
  807. <!--表格-->
  808. <el-table :data="tableData" ref="tableRef" :span-method="spanMethod2">
  809. <el-table-column
  810. prop="machineId"
  811. fixed
  812. :label="$t('planTable.machineNo')"
  813. header-align="center"
  814. align="center"
  815. width="111px"
  816. ></el-table-column>
  817. <el-table-column
  818. prop="productType"
  819. fixed
  820. :label="$t('planTable.productCategory')"
  821. header-align="center"
  822. align="center"
  823. width="111.2px"
  824. ></el-table-column>
  825. <el-table-column :label="$t('planTable.inMachineProduct')" header-align="center">
  826. <el-table-column
  827. prop="productTypeName"
  828. fixed
  829. :label="$t('planTable.productType')"
  830. header-align="center"
  831. align="center"
  832. width="111.2px"
  833. ></el-table-column>
  834. <el-table-column
  835. prop="currentColorCode"
  836. :label="$t('planTable.colorNo')"
  837. header-align="center"
  838. width="90px"
  839. align="center"
  840. ></el-table-column>
  841. <el-table-column
  842. prop="currentSpecification"
  843. :label="$t('planTable.specification')"
  844. header-align="center"
  845. width="90px"
  846. align="center"
  847. ></el-table-column>
  848. <el-table-column
  849. prop="currentLotNumber"
  850. :label="$t('planTable.batchNo')"
  851. header-align="center"
  852. width="90px"
  853. align="center"
  854. ></el-table-column>
  855. <el-table-column
  856. prop="number"
  857. :label="$t('planTable.quantity')"
  858. header-align="center"
  859. width="90px"
  860. align="center"
  861. ></el-table-column>
  862. <el-table-column
  863. prop="currentSpindleCount"
  864. :label="$t('planTable.spindleCount')"
  865. header-align="center"
  866. width="90px"
  867. align="center"
  868. ></el-table-column>
  869. <el-table-column
  870. prop="startTime"
  871. :label="$t('planTable.startTime')"
  872. header-align="center"
  873. width="90px"
  874. align="center"
  875. ></el-table-column>
  876. <el-table-column
  877. prop="plannedEndTime"
  878. :label="$t('planTable.endTime')"
  879. header-align="center"
  880. width="90px"
  881. align="center"
  882. ></el-table-column>
  883. </el-table-column>
  884. <el-table-column
  885. prop="listOfPendingProduction"
  886. :label="$t('planTable.pendingProductList')"
  887. header-align="center"
  888. align="center"
  889. >
  890. <template slot-scope="scope">
  891. <div v-if="scope.row.listOfPendingProduction">
  892. <div
  893. v-for="(
  894. item, index
  895. ) in scope.row.listOfPendingProduction.split(',')"
  896. >
  897. {{ item }}
  898. <span
  899. v-if="
  900. (index + 1) % 5 === 0 &&
  901. index !==
  902. scope.row.listOfPendingProduction.split(',').length - 1
  903. "
  904. >,</span
  905. >
  906. <br
  907. v-if="
  908. (index + 1) % 5 === 0 &&
  909. index !==
  910. scope.row.listOfPendingProduction.split(',').length - 1
  911. "
  912. />
  913. </div>
  914. </div>
  915. </template>
  916. </el-table-column>
  917. <el-table-column
  918. fixed="right"
  919. :label="$t('planTable.operation')"
  920. header-align="center"
  921. align="center"
  922. width="150px"
  923. >
  924. <template slot-scope="scope">
  925. <el-dropdown>
  926. <el-button type="primary">
  927. {{ $t('planTable.operation') }}
  928. <i class="el-icon-arrow-down el-icon--right"></i>
  929. </el-button>
  930. <el-dropdown-menu slot="dropdown">
  931. <el-dropdown-item
  932. @click.native.prevent="handleAddPlan(scope.row)"
  933. >{{ $t('planTable.addPlan') }}</el-dropdown-item
  934. >
  935. <el-dropdown-item
  936. @click.native.prevent="handleEditPlan(scope.row)"
  937. >{{ $t('planTable.editPlan') }}</el-dropdown-item
  938. >
  939. <el-dropdown-item
  940. @click.native.prevent="handleStopProductionLine(scope.row)"
  941. >{{ $t('planTable.machineStatus') }}</el-dropdown-item
  942. >
  943. </el-dropdown-menu>
  944. </el-dropdown>
  945. </template>
  946. </el-table-column>
  947. </el-table>
  948. <!--新增计划弹窗-->
  949. <el-dialog
  950. :title="$t('planTable.addPlanTitle')"
  951. :visible.sync="beiInsertDialogTableVisible"
  952. width="1500px"
  953. >
  954. <el-table :data="tableData2" @row-click.self="handleRowClick">
  955. <el-table-column
  956. prop="productId"
  957. :label="$t('planTable.product')"
  958. header-align="center"
  959. align="center"
  960. width="150px"
  961. >
  962. <template v-slot:default="scope">
  963. <el-select
  964. filterable
  965. v-model="scope.row.productId"
  966. :placeholder="$t('planTable.selectProduct')"
  967. @change="selectedChangeDate(scope.row, scope.row.productId)"
  968. >
  969. <el-option
  970. v-for="product in productsInfo"
  971. :key="product.id"
  972. :label="product.productName"
  973. :value="product.id"
  974. ></el-option>
  975. </el-select>
  976. </template>
  977. </el-table-column>
  978. <el-table-column
  979. prop="currentColorCode"
  980. :label="$t('planTable.colorNo')"
  981. header-align="center"
  982. align="center"
  983. >
  984. <template v-slot:default="scope">
  985. <el-select
  986. v-model="scope.row.currentColorCode"
  987. filterable
  988. :placeholder="$t('planTable.selectColorCode')"
  989. @change="selectedML(scope.row)"
  990. >
  991. <el-option
  992. v-for="(item, index) in options"
  993. :key="index"
  994. :label="item.label"
  995. :value="item.value"
  996. >
  997. </el-option>
  998. </el-select>
  999. </template>
  1000. </el-table-column>
  1001. <el-table-column
  1002. prop="currentSpecification"
  1003. :label="$t('planTable.specification')"
  1004. header-align="center"
  1005. align="center"
  1006. >
  1007. <template v-slot:default="scope">
  1008. <el-input
  1009. v-if="scope.row.isEditing"
  1010. disabled="disabled"
  1011. v-model="scope.row.currentSpecification"
  1012. :placeholder="$t('planTable.specification')"
  1013. @blur.stop.prevent="handleInputBlur(scope.row)"
  1014. >></el-input
  1015. >
  1016. <span v-else>{{ scope.row.currentSpecification }}</span>
  1017. </template>
  1018. </el-table-column>
  1019. <el-table-column
  1020. prop="productType"
  1021. :label="$t('planTable.productCategory')"
  1022. header-align="center"
  1023. align="center"
  1024. width="100px"
  1025. >
  1026. <template v-slot:default="scope">
  1027. <el-select
  1028. v-model="scope.row.productType"
  1029. :placeholder="$t('planTable.selectCategory')"
  1030. >
  1031. <el-option
  1032. v-for="product in productTypeList"
  1033. :key="product.value"
  1034. :label="product.lable"
  1035. :value="product.value"
  1036. ></el-option>
  1037. </el-select>
  1038. </template>
  1039. </el-table-column>
  1040. <el-table-column
  1041. prop="currentLotNumber"
  1042. :label="$t('planTable.batchNo')"
  1043. header-align="center"
  1044. align="center"
  1045. >
  1046. <template v-slot:default="scope">
  1047. <el-input
  1048. v-if="scope.row.isEditing"
  1049. :disabled="isDisabled"
  1050. v-model="scope.row.currentLotNumber"
  1051. :placeholder="$t('planTable.inputBatchNo')"
  1052. @blur.stop.prevent="handleInputBlur(scope.row)"
  1053. >></el-input
  1054. >
  1055. <span v-else>{{ scope.row.currentLotNumber }}</span>
  1056. </template>
  1057. </el-table-column>
  1058. <!-- 新增筒重、箱重、管色字段 -->
  1059. <el-table-column
  1060. prop="tubeweight"
  1061. label="筒重"
  1062. header-align="center"
  1063. align="center"
  1064. >
  1065. <template v-slot:default="scope">
  1066. <el-select
  1067. v-model="scope.row.tubeweight"
  1068. clearable
  1069. filterable
  1070. allow-create
  1071. default-first-option
  1072. >
  1073. <el-option
  1074. v-for="item in dropDownData.drum_weight"
  1075. :key="item.id"
  1076. :label="item.codeName"
  1077. :value="item.codeName"
  1078. >
  1079. </el-option>
  1080. </el-select>
  1081. </template>
  1082. </el-table-column>
  1083. <el-table-column
  1084. prop="boxweight"
  1085. label="箱重"
  1086. header-align="center"
  1087. align="center"
  1088. >
  1089. <template v-slot:default="scope">
  1090. <el-select
  1091. v-model="scope.row.boxweight"
  1092. clearable
  1093. filterable
  1094. allow-create
  1095. default-first-option
  1096. >
  1097. <el-option
  1098. v-for="item in dropDownData.box_weight"
  1099. :key="item.id"
  1100. :label="item.codeName"
  1101. :value="item.codeName"
  1102. >
  1103. </el-option>
  1104. </el-select>
  1105. </template>
  1106. </el-table-column>
  1107. <el-table-column
  1108. prop="tubecolor"
  1109. label="管色"
  1110. header-align="center"
  1111. align="center"
  1112. >
  1113. <template v-slot:default="scope">
  1114. <el-select
  1115. v-model="scope.row.tubecolor"
  1116. clearable
  1117. filterable
  1118. allow-create
  1119. default-first-option
  1120. >
  1121. <el-option
  1122. v-for="item in dropDownData.tube_color"
  1123. :key="item.id"
  1124. :label="item.codeName"
  1125. :value="item.codeName"
  1126. >
  1127. </el-option>
  1128. </el-select>
  1129. </template>
  1130. </el-table-column>
  1131. <!-- 新增筒重、箱重、管色字段 -->
  1132. <el-table-column
  1133. prop="currentSpindleCount"
  1134. :label="$t('planTable.spindleCount')"
  1135. header-align="center"
  1136. align="center"
  1137. >
  1138. <template v-slot:default="scope">
  1139. <el-input
  1140. v-if="scope.row.isEditing"
  1141. v-model="scope.row.currentSpindleCount"
  1142. :placeholder="$t('planTable.inputSpindleCount')"
  1143. @blur.stop.prevent="handleInputBlur(scope.row)"
  1144. >></el-input
  1145. >
  1146. <span v-else>{{ scope.row.currentSpindleCount }}</span>
  1147. </template>
  1148. </el-table-column>
  1149. <el-table-column
  1150. prop="number"
  1151. :label="$t('planTable.quantity')"
  1152. header-align="center"
  1153. align="center"
  1154. >
  1155. <template v-slot:default="scope">
  1156. <el-input
  1157. v-if="scope.row.isEditing"
  1158. v-model="scope.row.number"
  1159. :placeholder="$t('planTable.inputQuantity')"
  1160. @blur.stop.prevent="handleInputBlur(scope.row)"
  1161. >></el-input
  1162. >
  1163. <span v-else>{{ scope.row.number }}</span>
  1164. </template>
  1165. </el-table-column>
  1166. <el-table-column
  1167. prop="startTime"
  1168. :label="$t('planTable.startTime')"
  1169. header-align="center"
  1170. align="center"
  1171. >
  1172. <template v-slot:default="scope">
  1173. <el-input
  1174. v-if="scope.row.isEditing"
  1175. v-model="scope.row.startTime"
  1176. :placeholder="$t('planTable.inputStartTime')"
  1177. @blur.stop.prevent="handleInputBlur(scope.row)"
  1178. >></el-input
  1179. >
  1180. <span v-else>{{ scope.row.startTime }}</span>
  1181. </template>
  1182. </el-table-column>
  1183. <el-table-column
  1184. prop="plannedEndTime"
  1185. :label="$t('planTable.endTime')"
  1186. header-align="center"
  1187. align="center"
  1188. >
  1189. <template v-slot:default="scope">
  1190. <el-input
  1191. v-if="scope.row.isEditing"
  1192. :ref="'input' + scope.$index"
  1193. v-model="scope.row.plannedEndTime"
  1194. :placeholder="$t('planTable.inputEndTime')"
  1195. @blur="handleInputBlur(scope.row)"
  1196. >></el-input
  1197. >
  1198. <span v-else>{{ scope.row.plannedEndTime }}</span>
  1199. </template>
  1200. </el-table-column>
  1201. <el-table-column
  1202. prop="planStatus"
  1203. :label="$t('planTable.planStatus')"
  1204. header-align="center"
  1205. align="center"
  1206. width="100px"
  1207. >
  1208. <template v-slot:default="scope">
  1209. <el-select
  1210. v-model="scope.row.planStatus"
  1211. :placeholder="$t('planTable.planStatus')"
  1212. >
  1213. <el-option
  1214. v-for="stateItem in stateList0"
  1215. :key="stateItem.id"
  1216. :label="stateItem.name"
  1217. :value="stateItem.id"
  1218. ></el-option>
  1219. </el-select>
  1220. </template>
  1221. </el-table-column>
  1222. <el-table-column :label="$t('planTable.operation')">
  1223. <template slot-scope="scope">
  1224. <el-button
  1225. size="mini"
  1226. type="danger"
  1227. @click.stop.prevent="handleDelete(scope.$index, scope.row)"
  1228. >{{ $t('planTable.delete') }}</el-button
  1229. >
  1230. </template>
  1231. </el-table-column>
  1232. </el-table>
  1233. <el-button
  1234. type="primary"
  1235. style="width: 100%; margin-top: 30px"
  1236. @click="addEditableRow"
  1237. >{{ $t('planTable.addPlanProduct') }}</el-button
  1238. >
  1239. <span slot="footer" class="dialog-footer">
  1240. <el-button @click="beiInsertDialogTableVisible = false"
  1241. >{{ $t('planTable.cancel') }}</el-button
  1242. >
  1243. <el-button type="primary" @click="addPlanInfo">{{ $t('planTable.confirm') }}</el-button>
  1244. </span>
  1245. </el-dialog>
  1246. <!--修改计划弹窗-->
  1247. <el-dialog
  1248. :title="$t('planTable.editPlanTitle')"
  1249. :visible.sync="beiUpdateDialogTableVisible"
  1250. width="1500px"
  1251. >
  1252. <!--查询条件-->
  1253. <el-form
  1254. ref="form"
  1255. :model="formData"
  1256. label-width="80px"
  1257. :inline="true"
  1258. >
  1259. <el-form-item :label="$t('planTable.productCategoryLabel')" prop="productType">
  1260. <el-select
  1261. filterable
  1262. v-model="formData.productType"
  1263. :placeholder="$t('planTable.selectCategory')"
  1264. >
  1265. <el-option
  1266. v-for="(product, index) in productTypeList"
  1267. :key="index"
  1268. :label="product.lable"
  1269. :value="product.value"
  1270. ></el-option>
  1271. </el-select>
  1272. </el-form-item>
  1273. <el-form-item :label="$t('planTable.planStatusLabel')" prop="planStatus">
  1274. <el-select
  1275. v-model="formData.planStatus"
  1276. :placeholder="$t('planTable.planStatus')"
  1277. >
  1278. <el-option
  1279. v-for="stateListItem in stateList2"
  1280. :key="stateListItem.id"
  1281. :label="stateListItem.name"
  1282. :value="stateListItem.id"
  1283. ></el-option>
  1284. </el-select>
  1285. </el-form-item>
  1286. <el-form-item>
  1287. <el-button type="primary" @click="onSubmit">{{ $t('planTable.search') }}</el-button>
  1288. <el-button @click="reset">{{ $t('planTable.reset') }}</el-button>
  1289. </el-form-item>
  1290. </el-form>
  1291. <!--表格-->
  1292. <el-table :data="tableData2" @row-click.self="handleRowClick">
  1293. <el-table-column
  1294. prop="productId"
  1295. label="产品"
  1296. header-align="center"
  1297. align="center"
  1298. width="150px"
  1299. >
  1300. <template slot-scope="scope">
  1301. {{ getProductChineseName(scope.row.productId) }}
  1302. </template>
  1303. </el-table-column>
  1304. <el-table-column
  1305. prop="currentColorCode"
  1306. label="色号"
  1307. header-align="center"
  1308. align="center"
  1309. >
  1310. <template v-slot:default="scope">
  1311. <!-- 如果当前行正在编辑,则显示输入框 -->
  1312. <el-input
  1313. v-if="scope.row.isEditing"
  1314. disabled="disabled"
  1315. v-model="scope.row.currentColorCode"
  1316. placeholder="请输入色号"
  1317. @blur.stop.prevent="handleInputBlur(scope.row)"
  1318. ></el-input>
  1319. <!-- 否则显示普通文本 -->
  1320. <span v-else>{{ scope.row.currentColorCode }}</span>
  1321. </template>
  1322. </el-table-column>
  1323. <el-table-column
  1324. prop="currentSpecification"
  1325. label="规格"
  1326. header-align="center"
  1327. align="center"
  1328. >
  1329. <template v-slot:default="scope">
  1330. <!-- 如果当前行正在编辑,则显示输入框 -->
  1331. <el-input
  1332. v-if="scope.row.isEditing"
  1333. disabled="disabled"
  1334. v-model="scope.row.currentSpecification"
  1335. placeholder="请输入规格"
  1336. @blur.stop.prevent="handleInputBlur(scope.row)"
  1337. >></el-input
  1338. >
  1339. <!-- 否则显示普通文本 -->
  1340. <span v-else>{{ scope.row.currentSpecification }}</span>
  1341. </template>
  1342. </el-table-column>
  1343. <el-table-column
  1344. prop="productType"
  1345. label="产品类别"
  1346. header-align="center"
  1347. align="center"
  1348. width="100px"
  1349. >
  1350. <template v-slot:default="scope">
  1351. <el-select
  1352. v-model="scope.row.productType"
  1353. placeholder="请选择产品类别"
  1354. >
  1355. <el-option
  1356. v-for="product in productTypeList"
  1357. :key="product.value"
  1358. :label="product.lable"
  1359. :value="product.value"
  1360. ></el-option>
  1361. </el-select>
  1362. </template>
  1363. </el-table-column>
  1364. <el-table-column
  1365. prop="currentLotNumber"
  1366. label="批号"
  1367. header-align="center"
  1368. align="center"
  1369. >
  1370. <template v-slot:default="scope">
  1371. <el-input
  1372. v-if="scope.row.isEditing"
  1373. disabled="disabled"
  1374. v-model="scope.row.currentLotNumber"
  1375. placeholder="请输入批号"
  1376. @blur.stop.prevent="handleInputBlur(scope.row)"
  1377. >></el-input
  1378. >
  1379. <span v-else>{{ scope.row.currentLotNumber }}</span>
  1380. </template>
  1381. </el-table-column>
  1382. <!-- 新增筒重、箱重、管色字段 -->
  1383. <el-table-column
  1384. prop="tubeweight"
  1385. label="筒重"
  1386. header-align="center"
  1387. align="center"
  1388. >
  1389. <template v-slot:default="scope">
  1390. <el-select
  1391. v-model="scope.row.tubeweight"
  1392. clearable
  1393. filterable
  1394. allow-create
  1395. default-first-option
  1396. >
  1397. <el-option
  1398. v-for="item in dropDownData.drum_weight"
  1399. :key="item.id"
  1400. :label="item.codeName"
  1401. :value="item.codeName"
  1402. >
  1403. </el-option>
  1404. </el-select>
  1405. </template>
  1406. </el-table-column>
  1407. <el-table-column
  1408. prop="boxweight"
  1409. label="箱重"
  1410. header-align="center"
  1411. align="center"
  1412. >
  1413. <template v-slot:default="scope">
  1414. <el-select
  1415. v-model="scope.row.boxweight"
  1416. clearable
  1417. filterable
  1418. allow-create
  1419. default-first-option
  1420. >
  1421. <el-option
  1422. v-for="item in dropDownData.box_weight"
  1423. :key="item.id"
  1424. :label="item.codeName"
  1425. :value="item.codeName"
  1426. >
  1427. </el-option>
  1428. </el-select>
  1429. </template>
  1430. </el-table-column>
  1431. <el-table-column
  1432. prop="tubecolor"
  1433. label="管色"
  1434. header-align="center"
  1435. align="center"
  1436. >
  1437. <template v-slot:default="scope">
  1438. <el-select
  1439. v-model="scope.row.tubecolor"
  1440. clearable
  1441. filterable
  1442. allow-create
  1443. default-first-option
  1444. >
  1445. <el-option
  1446. v-for="item in dropDownData.tube_color"
  1447. :key="item.id"
  1448. :label="item.codeName"
  1449. :value="item.codeName"
  1450. >
  1451. </el-option>
  1452. </el-select>
  1453. </template>
  1454. </el-table-column>
  1455. <!-- 新增筒重、箱重、管色字段 -->
  1456. <el-table-column
  1457. prop="currentSpindleCount"
  1458. label="锭数"
  1459. header-align="center"
  1460. align="center"
  1461. >
  1462. <template v-slot:default="scope">
  1463. <el-input
  1464. v-if="scope.row.isEditing"
  1465. v-model="scope.row.currentSpindleCount"
  1466. placeholder="请输入锭数"
  1467. @blur.stop.prevent="handleInputBlur(scope.row)"
  1468. >></el-input
  1469. >
  1470. <span v-else>{{ scope.row.currentSpindleCount }}</span>
  1471. </template>
  1472. </el-table-column>
  1473. <el-table-column
  1474. prop="number"
  1475. label="数量"
  1476. header-align="center"
  1477. align="center"
  1478. >
  1479. <template v-slot:default="scope">
  1480. <el-input
  1481. v-if="scope.row.isEditing"
  1482. v-model="scope.row.number"
  1483. placeholder="请输入数量"
  1484. @blur.stop.prevent="handleInputBlur(scope.row)"
  1485. >></el-input
  1486. >
  1487. <span v-else>{{ scope.row.number }}</span>
  1488. </template>
  1489. </el-table-column>
  1490. <el-table-column
  1491. prop="startTime"
  1492. label="上机时间"
  1493. header-align="center"
  1494. align="center"
  1495. >
  1496. <template v-slot:default="scope">
  1497. <el-input
  1498. v-if="scope.row.isEditing"
  1499. v-model="scope.row.startTime"
  1500. placeholder="请输入上机时间"
  1501. @blur.stop.prevent="handleInputBlur(scope.row)"
  1502. >></el-input
  1503. >
  1504. <span v-else>{{ scope.row.startTime }}</span>
  1505. </template>
  1506. </el-table-column>
  1507. <el-table-column
  1508. prop="plannedEndTime"
  1509. label="计划下机时间"
  1510. header-align="center"
  1511. align="center"
  1512. >
  1513. <template v-slot:default="scope">
  1514. <el-input
  1515. v-if="scope.row.isEditing"
  1516. :ref="'input' + scope.$index"
  1517. v-model="scope.row.plannedEndTime"
  1518. placeholder="请输入计划下机时间"
  1519. @blur="handleInputBlur(scope.row)"
  1520. >></el-input
  1521. >
  1522. <span v-else>{{ scope.row.plannedEndTime }}</span>
  1523. </template>
  1524. </el-table-column>
  1525. <el-table-column
  1526. prop="planStatus"
  1527. :placeholder="$t('planTable.planStatus')"
  1528. header-align="center"
  1529. align="center"
  1530. width="100px"
  1531. >
  1532. <template v-slot:default="scope">
  1533. <!--上机变停机待机-->
  1534. <el-select
  1535. v-if="scope.row.planStatus == 1"
  1536. v-model="scope.row.planStatus"
  1537. :placeholder="$t('planTable.planStatus')"
  1538. >
  1539. <el-option
  1540. v-for="stateItem in stateList1"
  1541. :key="stateItem.id"
  1542. :label="stateItem.name"
  1543. :value="stateItem.id"
  1544. ></el-option>
  1545. </el-select>
  1546. <!--待机可以上机-->
  1547. <el-select
  1548. v-if="scope.row.planStatus == 0"
  1549. v-model="scope.row.planStatus"
  1550. :placeholder="$t('planTable.planStatus')"
  1551. >
  1552. <el-option
  1553. v-for="stateItem in stateList0"
  1554. :key="stateItem.id"
  1555. :label="stateItem.name"
  1556. :value="stateItem.id"
  1557. ></el-option>
  1558. </el-select>
  1559. <!--停机变上机-->
  1560. <el-select
  1561. v-if="scope.row.planStatus == 2"
  1562. v-model="scope.row.planStatus"
  1563. :placeholder="$t('planTable.planStatus')"
  1564. >
  1565. <el-option
  1566. v-for="stateItem in stateList2"
  1567. :key="stateItem.id"
  1568. :label="stateItem.name"
  1569. :value="stateItem.id"
  1570. ></el-option>
  1571. </el-select>
  1572. </template>
  1573. </el-table-column>
  1574. <el-table-column label="操作" align="center" width="200px">
  1575. <template slot-scope="scope">
  1576. <el-button
  1577. size="mini"
  1578. type="danger"
  1579. @click.stop.prevent="updateStatus(scope.$index, scope.row)"
  1580. >确认修改</el-button
  1581. >
  1582. <el-button
  1583. size="mini"
  1584. type="danger"
  1585. @click.stop.prevent="deletePlan(scope.$index, scope.row)"
  1586. >删除</el-button
  1587. >
  1588. </template>
  1589. </el-table-column>
  1590. </el-table>
  1591. <span slot="footer" class="dialog-footer">
  1592. <el-button @click="beiUpdateDialogTableVisible = false"
  1593. >{{ $t('planTable.cancel') }}</el-button
  1594. >
  1595. <el-button
  1596. type="primary"
  1597. @click="beiUpdateDialogTableVisible = false"
  1598. >{{ $t('planTable.confirm') }}</el-button
  1599. >
  1600. </span>
  1601. </el-dialog>
  1602. </el-tab-pane>
  1603. <!--停机弹窗-->
  1604. <el-dialog
  1605. :title="$t('planTable.modifyMachineStatus')"
  1606. :visible.sync="modifyMachineStatus"
  1607. width="500px"
  1608. >
  1609. <el-form
  1610. :model="modifyMachineStatusFrom"
  1611. ref="modifyMachineStatusFrom"
  1612. label-width="100px"
  1613. class="demo-ruleForm"
  1614. >
  1615. <el-form-item :label="$t('planTable.machineStatus')" prop="type">
  1616. <el-checkbox-group v-model="modifyMachineStatusFrom.type">
  1617. <el-checkbox :key="1" label="1" name="type">{{ $t('planTable.stopSideA') }}</el-checkbox>
  1618. <el-checkbox :key="2" label="2" name="type">{{ $t('planTable.stopSideB') }}</el-checkbox>
  1619. </el-checkbox-group>
  1620. </el-form-item>
  1621. <el-form-item>
  1622. <el-button type="primary" @click="confirmStopProductionLine"
  1623. >{{ $t('planTable.confirm') }}</el-button
  1624. >
  1625. <el-button @click="tjqx">{{ $t('planTable.cancel') }}</el-button>
  1626. </el-form-item>
  1627. </el-form>
  1628. </el-dialog>
  1629. </el-tabs>
  1630. </div>
  1631. </template>
  1632. <script>
  1633. import {
  1634. ammunitionPlanInfo,
  1635. getProductsInfo,
  1636. removeBombLoadingPlan,
  1637. getMaterielInfo,
  1638. addMaterielInfo,
  1639. getProductsAll,
  1640. getOptionLsit,
  1641. getAllPlanListByMachineId,
  1642. getAllPlanListByProductTypeAndStatus,
  1643. updatePlanOne,
  1644. whetherTheFeederIsShutDown,
  1645. updateLineStates,
  1646. getIsTheOrderProductProduced,
  1647. getJtIsTheOrderProductProduced,
  1648. getCurrentProductionLineSuperior,
  1649. updateSpinningInfoPlanOne
  1650. } from '@/api/plan/paln.js'
  1651. export default {
  1652. data () {
  1653. return {
  1654. options: [],
  1655. modifyMachineStatusFrom: {
  1656. type: []
  1657. },
  1658. modifyMachineStatus: false,
  1659. //选中的是那个车间
  1660. selectedWorkshop: '南车间',
  1661. tableData: [],
  1662. isDisabled: true,
  1663. form: {
  1664. product: ''
  1665. },
  1666. formzdsj:{machineToolNo: "", //机台编号
  1667. // 表单参数
  1668. packaging: "", //包装
  1669. machineTool: "", //机台
  1670. workShifts: "", //班次
  1671. productionDate: "", //生产日期
  1672. levels: "", //等级
  1673. foreignTradeNumber: "", //外贸号
  1674. canisterWeight: "", //筒重
  1675. boxWeight: "", //箱重-车重
  1676. canisterNum: "", //筒数
  1677. tubeColor: "", //管色
  1678. comPort: "", //端口
  1679. printFormat: "", //格式
  1680. grossWeight: 0, //毛重
  1681. remark: "", //备注
  1682. },
  1683. dropDownData: {},
  1684. previousMachineId: undefined,
  1685. currentRowspan: 1,
  1686. prevRow: {},
  1687. tableData2: [],
  1688. nanInsertDialogTableVisible: false,
  1689. nanUpdateDialogTableVisible: false,
  1690. beiInsertDialogTableVisible: false,
  1691. beiUpdateDialogTableVisible: false,
  1692. editingRowIndex: -1,
  1693. lastEditLine: 0,
  1694. queryParams: {
  1695. productionLineDepartment: '加弹部',
  1696. productionLineWorkshop: '南车间'
  1697. },
  1698. isEditLine: false,
  1699. productsInfo: [],
  1700. salesmanInfo: [],
  1701. product: {},
  1702. materiel: {},
  1703. // 机台号
  1704. machineId: '',
  1705. macId: '', //机台id
  1706. // 待机/上机/停产
  1707. stateList0: [
  1708. { id: 0, name: this.$t('planTable.standby') },
  1709. { id: 1, name: this.$t('planTable.inProduction') }
  1710. ],
  1711. stateList1: [
  1712. { id: 0, name: this.$t('planTable.standby') },
  1713. { id: 2, name: this.$t('planTable.stopped') },
  1714. { id: 1, name: this.$t('planTable.inProduction') }
  1715. ],
  1716. stateList2: [
  1717. { id: 0, name: this.$t('planTable.standby') },
  1718. { id: 2, name: this.$t('planTable.stopped') },
  1719. { id: 1, name: this.$t('planTable.inProduction') }
  1720. ],
  1721. formData: {
  1722. updateSelectedProductCategory: '',
  1723. updateSelectedProductState: ''
  1724. },
  1725. // 产品类别
  1726. productTypeList: [
  1727. { value: this.$t('planTable.sideA'), lable: this.$t('planTable.sideA') },
  1728. { value: this.$t('planTable.sideB'), lable: this.$t('planTable.sideB') }
  1729. ]
  1730. }
  1731. },
  1732. mounted () {
  1733. // 得到排产计划信息
  1734. this.getAmmunitionPlanInfo()
  1735. this.getSelectOptions()
  1736. },
  1737. methods: {
  1738. tjqx () {
  1739. this.modifyMachineStatus = false
  1740. },
  1741. getProductChineseName (productId) {
  1742. console.log(productId, 'id')
  1743. console.log(this.productsInfo, '数组内容')
  1744. let aa = this.productsInfo.find(product => {
  1745. return product.id === productId
  1746. })
  1747. console.log('找到了', aa)
  1748. return aa.productName
  1749. },
  1750. selectedML (row) {
  1751. console.log(row.currentColorCode)
  1752. if (row.currentColorCode) {
  1753. let tarName = this.options.find(
  1754. item => item.value == row.currentColorCode
  1755. ).colourNumber
  1756. console.log('aaaaa=============', tarName)
  1757. row.colourNumber = tarName
  1758. console.log('aaaaa=============', row)
  1759. }
  1760. },
  1761. //删除计划
  1762. deletePlan ($index, row) {
  1763. console.log(row)
  1764. //判断当前计划是否已经投产
  1765. getJtIsTheOrderProductProduced({ id: row.id }).then(resp => {
  1766. if (resp.data.length > 0) {
  1767. this.$message({
  1768. message: this.$t('planTable.currentPlanInProduction'),
  1769. type: 'warning'
  1770. })
  1771. return //证明有在上级的产品--zhi能有一个上级产品
  1772. }
  1773. removeBombLoadingPlan(row.id).then(res => {
  1774. if (res.code == 200) {
  1775. this.$message({
  1776. message: this.$t('planTable.deleteSuccess'),
  1777. type: 'success'
  1778. })
  1779. } else {
  1780. this.$message({ message: this.$t('planTable.deleteFailed'), type: 'error' })
  1781. }
  1782. this.onSubmit()
  1783. this.getAmmunitionPlanInfo()
  1784. })
  1785. })
  1786. },
  1787. //打开修改机台信息
  1788. handleStopProductionLine (row) {
  1789. this.modifyMachineStatus = true
  1790. this.machineId = row.machineId
  1791. this.macId = row.macId //机台id
  1792. //查询当前机台A、面B面的状态
  1793. whetherTheFeederIsShutDown(this.macId).then(res => {
  1794. this.modifyMachineStatusFrom.type = res.data
  1795. })
  1796. },
  1797. //确认修改产线信息
  1798. confirmStopProductionLine () {
  1799. // console.log(this.modifyMachineStatusFrom.type);
  1800. if (this.modifyMachineStatusFrom.type.length == 0) {
  1801. this.modifyMachineStatusFrom.type.push('3')
  1802. }
  1803. //更改状态
  1804. updateLineStates(
  1805. this.macId,
  1806. this.modifyMachineStatusFrom.type.join(',')
  1807. ).then(res => {
  1808. if (res.code == 200) {
  1809. this.$message({
  1810. message: this.$t('planTable.modifyStatusSuccess'),
  1811. type: 'success'
  1812. })
  1813. } else {
  1814. this.$message({ message: this.$t('planTable.modifyStatusFailed'), type: 'error' })
  1815. }
  1816. this.modifyMachineStatus = false
  1817. this.getAmmunitionPlanInfo()
  1818. this.editingRowIndex = -1 // 重置编辑行索引
  1819. this.tableData2.forEach(item => {
  1820. item.isEditing = false // 重置所有行的编辑状态
  1821. })
  1822. })
  1823. // //如果为空代表都不停机
  1824. // if(this.modifyMachineStatusFrom.type.length<=0){
  1825. // this.modifyMachineStatus=false;
  1826. // //发送请求删除,A面-timestampRandomCode="停机" B-timestampRandomCode="停机"的数据、并把所有上机产品的状态改为上机
  1827. // return;
  1828. // }
  1829. // // 包含1A停机---插入一条 timestampRandomCode=停机,状态为停机的数据
  1830. // if (this.modifyMachineStatusFrom.type.includes("1")) {
  1831. // //查询当前机台A、面B面的状态
  1832. // whetherTheFeederIsShutDown(this.machineId).then(res=>{
  1833. // //后台没有虚拟的假数据,就插入
  1834. // if(!res.data.includes("1")){
  1835. // console.log('数组中不包含数字 1');
  1836. // //新增一条数据,
  1837. // let aStopInfo= {
  1838. // currentColorCode: '1',
  1839. // //产品规格
  1840. // currentSpecification: '1',
  1841. // currentLotNumber: '1',
  1842. // currentSpindleCount: '1',
  1843. // number: '1',
  1844. // productType:'A面',
  1845. // startTime: '1',
  1846. // plannedEndTime:'1',
  1847. // planStatus:2,
  1848. // productId:'1',
  1849. // machineId:this.machineId,
  1850. // salesmanId:'1',
  1851. // timestampRandomCode:"停机",
  1852. // }
  1853. // let aStoptableList=[];
  1854. // aStoptableList.push(aStopInfo)
  1855. // //时间戳
  1856. // let data={
  1857. // //机台号
  1858. // machineId: this.machineId,
  1859. // //计划信息
  1860. // detailsOfTheRefuelingPlans: aStoptableList
  1861. // }
  1862. // //添加计划信息
  1863. // addMaterielInfo(data).then(response => {
  1864. // if (response.code == 200) {
  1865. // this.$message({
  1866. // message: '停机成功',
  1867. // type: 'success'
  1868. // });
  1869. // this.getAmmunitionPlanInfo();
  1870. // //最后把弹窗关掉
  1871. // this.nanInsertDialogTableVisible=false
  1872. // //更改订单投产信息的批号,
  1873. // } else {
  1874. // this.$message({
  1875. // message: '停机失败,请联系管理员',
  1876. // type: 'error'
  1877. // });
  1878. // //最后把弹窗关掉
  1879. // this.nanInsertDialogTableVisible=false
  1880. // }
  1881. // });
  1882. // }
  1883. // })
  1884. // }
  1885. // if(this.modifyMachineStatusFrom.type.includes("2")) {
  1886. // whetherTheFeederIsShutDown(this.machineId).then(res=>{
  1887. // if(!res.data.includes("2")) {
  1888. // console.log('数组中不包含数字2');
  1889. // //新增一条数据,
  1890. // let aStopInfo= {
  1891. // currentColorCode: '1',
  1892. // //产品规格
  1893. // currentSpecification: '1',
  1894. // currentLotNumber: '1',
  1895. // currentSpindleCount: '1',
  1896. // number: '1',
  1897. // productType:'B面',
  1898. // startTime: '1',
  1899. // plannedEndTime:'1',
  1900. // planStatus:2,
  1901. // productId:'1',
  1902. // machineId:this.machineId,
  1903. // salesmanId:'1',
  1904. // timestampRandomCode:"停机",
  1905. // }
  1906. // let aStoptableList=[];
  1907. // aStoptableList.push(aStopInfo)
  1908. // //时间戳
  1909. // let data={
  1910. // //机台号
  1911. // machineId: this.machineId,
  1912. // //计划信息
  1913. // detailsOfTheRefuelingPlans: aStoptableList
  1914. // }
  1915. // //添加计划信息
  1916. // addMaterielInfo(data).then(response => {
  1917. // if (response.code == 200) {
  1918. // this.$message({
  1919. // message: '停机成功',
  1920. // type: 'success'
  1921. // });
  1922. // this.getAmmunitionPlanInfo();
  1923. // //最后把弹窗关掉
  1924. // this.nanInsertDialogTableVisible=false
  1925. // //更改订单投产信息的批号,
  1926. // } else {
  1927. // this.$message({
  1928. // message: '停机失败,请联系管理员',
  1929. // type: 'error'
  1930. // });
  1931. // //最后把弹窗关掉
  1932. // this.nanInsertDialogTableVisible=false
  1933. // }
  1934. // });
  1935. // }
  1936. // })
  1937. // }
  1938. },
  1939. // 查询排产信息
  1940. getAmmunitionPlanInfo () {
  1941. ammunitionPlanInfo(this.queryParams).then(response => {
  1942. this.tableData = response.data
  1943. })
  1944. },
  1945. // 合并单元格
  1946. spanMethod2 ({ row, column, rowIndex, columnIndex }) {
  1947. //第二列合并
  1948. if (columnIndex === 1) {
  1949. if (row.productType == null) {
  1950. return
  1951. }
  1952. const prevRow2 = this.tableData[rowIndex - 1] // 上一行数据
  1953. let nextRow2 = this.tableData[rowIndex + 1] // 下一行数据
  1954. // 当上一行的数据(machineId和productType)等于当前行数据时,当前行单元格隐藏
  1955. if (
  1956. prevRow2 &&
  1957. prevRow2.machineId === row.machineId &&
  1958. prevRow2.productType === row.productType
  1959. ) {
  1960. return { rowspan: 0, colspan: 0 }
  1961. } else {
  1962. // 反之,则循环判断若下一行数据(machineId和productType)等于当前行数据,则当前行开始进行合并单元格
  1963. let countRowspan2 = 1 // 用于合并计数多少单元格
  1964. while (
  1965. nextRow2 &&
  1966. nextRow2.machineId === row.machineId &&
  1967. nextRow2.productType === row.productType
  1968. ) {
  1969. nextRow2 = this.tableData[++countRowspan2 + rowIndex]
  1970. }
  1971. if (countRowspan2 > 1) {
  1972. return { rowspan: countRowspan2, colspan: 1 }
  1973. }
  1974. }
  1975. }
  1976. //待生产列表
  1977. if (columnIndex === 9) {
  1978. const prevRow2 = this.tableData[rowIndex - 1] //上一行数据
  1979. let nextRow2 = this.tableData[rowIndex + 1] //下一行数据
  1980. // 当上一行的数据等于当前行数据时,当前行单元格隐藏
  1981. if (
  1982. row.listOfPendingProduction == null ||
  1983. row.listOfPendingProduction == undefined ||
  1984. row.listOfPendingProduction == ''
  1985. ) {
  1986. return
  1987. }
  1988. if (
  1989. prevRow2 &&
  1990. prevRow2.machineId === row.machineId &&
  1991. prevRow2.productType === row.productType
  1992. ) {
  1993. return { rowspan: 0, colspan: 0 }
  1994. } else {
  1995. // 反之,则循环判断若下一行数据等于当前行数据,则当前行开始进行合并单元格
  1996. let countRowspan2 = 1 //用于合并计数多少单元格
  1997. while (
  1998. nextRow2 &&
  1999. nextRow2.listOfPendingProduction === row.listOfPendingProduction &&
  2000. nextRow2.machineId === row.machineId &&
  2001. nextRow2.productType === row.productType
  2002. ) {
  2003. nextRow2 = this.tableData[++countRowspan2 + rowIndex]
  2004. }
  2005. if (countRowspan2 > 1) {
  2006. return { rowspan: countRowspan2, colspan: 1 }
  2007. }
  2008. }
  2009. }
  2010. //合并最后一列操作列
  2011. const lastColumnIndex =
  2012. this.$refs.tableRef.store.states.columns.length - 1 // 获取表格最后一列的索引
  2013. if (columnIndex === lastColumnIndex && column.label === '操作') {
  2014. // 判断是否为最后一列且标签为'操作'
  2015. const machineIdColumnIndex = 0 // 机台号列的索引假定为0
  2016. const currentMachineId = row.machineId
  2017. let countRowspan = 1
  2018. const prevRow = this.tableData[rowIndex - 1]
  2019. if (prevRow && prevRow.machineId === currentMachineId) {
  2020. return { rowspan: 0, colspan: 0 }
  2021. } else {
  2022. let nextRow = this.tableData[rowIndex + 1]
  2023. while (nextRow && nextRow.machineId === currentMachineId) {
  2024. nextRow = this.tableData[++countRowspan + rowIndex]
  2025. }
  2026. if (countRowspan > 1) {
  2027. return { rowspan: countRowspan, colspan: 1 }
  2028. }
  2029. }
  2030. }
  2031. //第一列机台号合并
  2032. if (columnIndex === 0) {
  2033. //定义需要合并的列字段,有哪些列需要合并,就自定义添加字段即可
  2034. const fields = ['machineId']
  2035. // 当前行的数据
  2036. const cellValue = row[column.property]
  2037. let countRowspan = 1 //用于合并计数多少单元格
  2038. // 判断只合并定义字段的列数据
  2039. if (cellValue && fields.includes(column.property)) {
  2040. const prevRow = this.tableData[rowIndex - 1] //上一行数据
  2041. let nextRow = this.tableData[rowIndex + 1] //下一行数据
  2042. // 当上一行的数据等于当前行数据时,当前行单元格隐藏
  2043. if (prevRow && prevRow[column.property] === cellValue) {
  2044. return { rowspan: 0, colspan: 0 }
  2045. } else {
  2046. // 反之,则循环判断若下一行数据等于当前行数据,则当前行开始进行合并单元格
  2047. let countRowspan = 1 //用于合并计数多少单元格
  2048. while (nextRow && nextRow[column.property] === cellValue) {
  2049. nextRow = this.tableData[++countRowspan + rowIndex]
  2050. }
  2051. if (countRowspan > 1) {
  2052. return { rowspan: countRowspan, colspan: 1 }
  2053. }
  2054. }
  2055. }
  2056. }
  2057. },
  2058. getProductsInfo () {
  2059. getProductsInfo('JT-').then(response => {
  2060. this.productsInfo = response.data
  2061. console.log('hmcxzz', this.productsInfo)
  2062. this.productsInfo.forEach(item => {
  2063. // item.productName = item.productName+"—"+item.materieEncoding+item.materieColorNumber
  2064. item.productName = item.productName + '—' + item.colours
  2065. })
  2066. })
  2067. },
  2068. // 下拉框数据改变查询色号批号信息
  2069. selectedChangeDate (row, selectedProduct) {
  2070. this.options = []
  2071. //选择的那个销售产品
  2072. this.product = this.productsInfo.find(
  2073. product => product.id === selectedProduct
  2074. )
  2075. this.form.product = selectedProduct
  2076. //通过母粒编码查询到对应的母粒信息
  2077. let queryParams = {
  2078. // "materielCode": this.product.colourNumber,
  2079. materielSpecies: '1'
  2080. }
  2081. //得到对应的母粒信息
  2082. getMaterielInfo(queryParams).then(response => {
  2083. if (response.data != null) {
  2084. let mls = response.data
  2085. mls.forEach(dataKey => {
  2086. this.options.push({
  2087. label:
  2088. dataKey.materieEncoding +
  2089. '(' +
  2090. dataKey.materieColorNumber +
  2091. ')',
  2092. value:
  2093. dataKey.materieEncoding +
  2094. '(' +
  2095. dataKey.materieColorNumber +
  2096. ')',
  2097. colourNumber: dataKey.materielCode
  2098. })
  2099. })
  2100. //色号 母粒编码+色号
  2101. // row.currentColorCode = this.materiel.materieEncoding+"("+this.materiel.materieColorNumber+")";
  2102. }
  2103. })
  2104. //isDisabled(有批号就用,没批号就自己输入)
  2105. if (this.product.lotNumber != undefined && this.product.lotNumber != '') {
  2106. row.currentLotNumber = this.product.lotNumber
  2107. this.isDisabled = true
  2108. } else {
  2109. this.isDisabled = false
  2110. row.currentLotNumber = ''
  2111. }
  2112. //产品规格
  2113. row.currentSpecification = this.product.productSpecifications
  2114. //销售单编号(以前打算存的是业务员信息后来存的是销售单编号)
  2115. row.salesmanId = this.product.saleOrderNo
  2116. //数量
  2117. row.number = this.product.productNumber
  2118. // console.log(this.product,'ddddddddddddddd')
  2119. },
  2120. // 新增计划产品信息
  2121. handleAddPlan (row) {
  2122. //查询当前机台A、面B面的状态(这个不用改,因为这个是唯一的)
  2123. whetherTheFeederIsShutDown(row.macId).then(res => {
  2124. this.modifyMachineStatusFrom.type = res.data
  2125. if (
  2126. this.modifyMachineStatusFrom.type.includes('2') &&
  2127. this.modifyMachineStatusFrom.type.includes('1')
  2128. ) {
  2129. this.$message({
  2130. message: this.$t('planTable.bothSidesStopped'),
  2131. type: 'warning'
  2132. })
  2133. return
  2134. } else {
  2135. if (this.modifyMachineStatusFrom.type.includes('1')) {
  2136. this.productTypeList = []
  2137. this.productTypeList.push({ value: 'B面', lable: 'B面' })
  2138. }
  2139. if (this.modifyMachineStatusFrom.type.includes('2')) {
  2140. this.productTypeList = []
  2141. this.productTypeList.push({ value: 'A面', lable: 'A面' })
  2142. }
  2143. if (this.modifyMachineStatusFrom.type.length <= 0) {
  2144. this.productTypeList = []
  2145. this.productTypeList.push({ value: 'A面', lable: 'A面' })
  2146. this.productTypeList.push({ value: 'B面', lable: 'B面' })
  2147. }
  2148. //否则就打开弹窗添加计划
  2149. if (this.selectedWorkshop == '南车间') {
  2150. this.nanInsertDialogTableVisible = true
  2151. } else {
  2152. this.beiInsertDialogTableVisible = true
  2153. }
  2154. //查询可以添加的产品信息
  2155. this.getProductsInfo()
  2156. //清空添加的数组对象
  2157. this.tableData2 = []
  2158. //先清空
  2159. this.machineId = ''
  2160. //当前操作机台号
  2161. this.machineId = row.machineId
  2162. this.macId = row.macId
  2163. }
  2164. })
  2165. },
  2166. // tab栏点击切换
  2167. tabClick (tab, event) {
  2168. // console.log('当前点击的标签名称:', tab.name);
  2169. this.selectedWorkshop = tab.name
  2170. // productionLineName getProductionLineNo productionLineDepartment productionLineWorkshop
  2171. this.queryParams.productionLineWorkshop = tab.name
  2172. this.getAmmunitionPlanInfo()
  2173. },
  2174. // 删除行
  2175. handleDelete (index, row) {
  2176. // console.log(index,row)
  2177. // this.tableData2[a];
  2178. this.tableData2.splice(index, 1)
  2179. // 把上一编辑行置回-1
  2180. this.editingRowIndex = -1
  2181. },
  2182. // 点击编辑行
  2183. handleRowClick (row) {
  2184. this.isEditLine = true
  2185. // alert(this.lastEditLine + '编辑行1')
  2186. //找到当前行的编辑索引
  2187. let rowIndex = this.tableData2.indexOf(row)
  2188. // alert(rowIndex + '编辑行2')
  2189. if (
  2190. this.lastEditLine != 0 &&
  2191. this.editingRowIndex !== rowIndex &&
  2192. this.editingRowIndex !== -1 &&
  2193. !this.isRowFilled(this.tableData2[this.lastEditLine])
  2194. ) {
  2195. this.$message({
  2196. message: this.$t('planTable.completePreviousData'),
  2197. type: 'warning'
  2198. })
  2199. return
  2200. }
  2201. //编辑索引不等于当前编辑行索引
  2202. console.log(this.editingRowIndex, rowIndex, 'yxxxxxxxxxxx')
  2203. if (this.editingRowIndex !== rowIndex) {
  2204. // alert(this.editingRowIndex);
  2205. if (this.editingRowIndex !== -1) {
  2206. //把当前行变成不可编辑的
  2207. this.tableData2[this.editingRowIndex].isEditing = false
  2208. }
  2209. //把当前行变成可编辑的
  2210. row.isEditing = true
  2211. this.editingRowIndex = rowIndex
  2212. } else {
  2213. }
  2214. },
  2215. // 光标失去焦点变成不可编辑
  2216. handleInputBlur (row) {
  2217. // let rowIndex = this.tableData2.indexOf(row);
  2218. // //编辑索引不等于当前编辑行索引
  2219. // if (this.editingRowIndex !== rowIndex) {
  2220. // if (this.isRowFilled(row)) {
  2221. // row.isEditing = false;
  2222. // //对于整个表格来说
  2223. // this.isEditLine = false;
  2224. // //当前编辑行置为-1
  2225. // this.editingRowIndex = -1;
  2226. // }
  2227. // }
  2228. },
  2229. // 检查行是否填写完毕的示例方法
  2230. isRowFilled (row) {
  2231. return (
  2232. row.currentSpecification &&
  2233. row.currentSpindleCount &&
  2234. row.currentColorCode &&
  2235. row.productType &&
  2236. row.currentLotNumber &&
  2237. row.number &&
  2238. row.tubecolor &&
  2239. row.boxweight &&
  2240. row.tubeweight
  2241. )
  2242. },
  2243. // 新增一行标记为可编辑
  2244. addEditableRow () {
  2245. // 检查当前编辑行是否已填写完毕
  2246. if (this.tableData2.length != 0) {
  2247. if (
  2248. this.editingRowIndex !== -1 &&
  2249. !this.isRowFilled(this.tableData2[this.editingRowIndex])
  2250. ) {
  2251. this.$message({
  2252. message: this.$t('planTable.completePreviousData'),
  2253. type: 'warning'
  2254. })
  2255. return
  2256. }
  2257. //新增行之前先让以前的行不能编辑
  2258. this.tableData2.forEach(item => {
  2259. item.isEditing = false
  2260. })
  2261. }
  2262. this.tableData2.push({
  2263. currentColorCode: '',
  2264. currentSpecification: '',
  2265. currentLotNumber: '',
  2266. currentSpindleCount: '',
  2267. number: '',
  2268. startTime: '',
  2269. plannedEndTime: '',
  2270. planStatus: 0,
  2271. productId: '',
  2272. salesmanId: '',
  2273. isEditing: true, // 标记为正在编辑状态
  2274. colourNumber: ''
  2275. })
  2276. this.editingRowIndex = this.tableData2.length - 1 // 更新当前编辑的行索引
  2277. this.lastEditLine = this.tableData2.length - 1
  2278. },
  2279. // 添加计划
  2280. addPlanInfo () {
  2281. if (this.tableData2.length > 0) {
  2282. var flag = true
  2283. this.tableData2.forEach(item => {
  2284. if (!this.isRowFilled(item)) {
  2285. this.$message({
  2286. message: this.$t('planTable.completeTableData'),
  2287. type: 'warning'
  2288. })
  2289. flag = false
  2290. }
  2291. })
  2292. if (flag) {
  2293. const datatime = Date.now() + this.machineId
  2294. //处理表格数据
  2295. this.tableData2.forEach(item => {
  2296. item.timestampRandomCode = datatime
  2297. item.machineId = this.machineId
  2298. })
  2299. //时间戳
  2300. let data = {
  2301. //机台号
  2302. machineId: this.machineId,
  2303. macId: this.macId,
  2304. timestampRandomCode: datatime,
  2305. //计划信息
  2306. detailsOfTheRefuelingPlans: this.tableData2
  2307. }
  2308. //添加计划信息
  2309. addMaterielInfo(data).then(response => {
  2310. if (response.code == 200) {
  2311. this.$message({
  2312. message: this.$t('planTable.addSuccess'),
  2313. type: 'success'
  2314. })
  2315. this.getAmmunitionPlanInfo()
  2316. //最后把弹窗关掉
  2317. this.nanInsertDialogTableVisible = false
  2318. this.beiInsertDialogTableVisible = false
  2319. //更改订单投产信息的批号,
  2320. } else {
  2321. this.$message({
  2322. message: this.$t('planTable.addFailed'),
  2323. type: 'error'
  2324. })
  2325. this.nanInsertDialogTableVisible = false
  2326. this.beiInsertDialogTableVisible = false
  2327. //最后把弹窗关掉
  2328. }
  2329. })
  2330. }
  2331. } else {
  2332. this.$message({
  2333. message: this.$t('planTable.addTableData'),
  2334. type: 'warning'
  2335. })
  2336. return
  2337. }
  2338. },
  2339. // 修改产品计划
  2340. handleEditPlan (row) {
  2341. //已经在待机列表了,isNull过滤掉了
  2342. getProductsAll(row.macId).then(response => {
  2343. this.productsInfo = response.data
  2344. this.productsInfo.forEach(item => {
  2345. item.productName =
  2346. item.productName +
  2347. '—' +
  2348. item.materieEncoding +
  2349. item.materieColorNumber
  2350. })
  2351. this.tableData2 = []
  2352. //弹窗
  2353. if (this.selectedWorkshop == '南车间') {
  2354. this.nanUpdateDialogTableVisible = true
  2355. } else {
  2356. this.beiUpdateDialogTableVisible = true
  2357. }
  2358. //先清空--当前操作机台号
  2359. this.machineId = ''
  2360. this.machineId = row.machineId
  2361. this.macId = row.macId
  2362. //查询当前机台下的计划信息
  2363. getAllPlanListByMachineId(this.macId).then(response => {
  2364. //得到生产中,停产的,待产的
  2365. response.data.forEach(item => {
  2366. item.isEditing = false
  2367. item.planStatus = parseInt(item.planStatus)
  2368. item.productId = parseInt(item.productId)
  2369. })
  2370. this.tableData2 = response.data
  2371. // console.log(this.tableData2, 'abc/abc')
  2372. })
  2373. // 重置编辑行索引
  2374. this.editingRowIndex = -1
  2375. // 重置所有行的编辑状态
  2376. this.tableData2.forEach(item => {
  2377. item.isEditing = false
  2378. })
  2379. })
  2380. },
  2381. //重置按钮
  2382. reset () {
  2383. this.formData.productType = ''
  2384. this.formData.planStatus = ''
  2385. this.tableData2 = []
  2386. //弹窗
  2387. if (this.selectedWorkshop == '南车间') {
  2388. this.nanUpdateDialogTableVisible = true
  2389. } else {
  2390. this.beiUpdateDialogTableVisible = true
  2391. }
  2392. console.log(this.macId, 'dddd')
  2393. getAllPlanListByMachineId(this.macId).then(response => {
  2394. //得到生产中,停产的,待产的
  2395. response.data.forEach(item => {
  2396. item.isEditing = false
  2397. item.planStatus = parseInt(item.planStatus)
  2398. item.productId = parseInt(item.productId)
  2399. })
  2400. this.tableData2 = response.data
  2401. // console.log( this.tableData2)
  2402. // 在数据加载完成后,手动触发每个行的第一个下拉框的 change 事件
  2403. // this.$nextTick(() => {
  2404. // // 获取第一个业务员选择框(假设表格只有一行)
  2405. // for (let i = 0; i < this.tableData2.length; i++) {
  2406. // const firstSalesmanSelect = this.$refs['salesmanSelect'+i];
  2407. // // 触发 change 事件
  2408. // if (firstSalesmanSelect) {
  2409. // firstSalesmanSelect.$emit('change', {
  2410. // target: {value: "ddd"},
  2411. // });
  2412. // }
  2413. // }
  2414. // });
  2415. })
  2416. },
  2417. // 获取下拉数据
  2418. async getSelectOptions() {
  2419. try {
  2420. let res = await getOptionLsit();
  2421. if (res.code == 200) {
  2422. this.dropDownData = res.data || {};
  2423. // 初始化默认值
  2424. if (
  2425. this.dropDownData.work_shifts?.length > 0 &&
  2426. this.excuteType == 1
  2427. ) {
  2428. this.formzdsj.workShifts = this.dropDownData.work_shifts[0].codeName;
  2429. }
  2430. if (this.dropDownData.level?.length > 0 && this.excuteType == 1) {
  2431. this.formzdsj.levels = this.dropDownData.level[0].codeName;
  2432. }
  2433. if (
  2434. this.dropDownData.drum_weight?.length > 0 &&
  2435. this.excuteType == 1
  2436. ) {
  2437. this.formzdsj.canisterWeight =
  2438. this.dropDownData.drum_weight[0].codeName;
  2439. }
  2440. if (
  2441. this.dropDownData.box_weight?.length > 0 &&
  2442. this.excuteType == 1
  2443. ) {
  2444. this.formzdsj.boxWeight = this.dropDownData.box_weight[0].codeName;
  2445. }
  2446. if (
  2447. this.dropDownData.tube_color?.length > 0 &&
  2448. this.excuteType == 1
  2449. ) {
  2450. this.formzdsj.tubeColor = this.dropDownData.tube_color[0].codeName;
  2451. }
  2452. } else {
  2453. this.$message.error("网络异常!");
  2454. }
  2455. } catch (error) {}
  2456. },
  2457. //弹窗里边的点击查询
  2458. onSubmit () {
  2459. this.formData.macId = this.macId
  2460. getAllPlanListByProductTypeAndStatus(this.formData).then(response => {
  2461. //得到生产中,停产的,待产的
  2462. response.data.forEach(item => {
  2463. item.isEditing = false
  2464. item.planStatus = parseInt(item.planStatus)
  2465. })
  2466. this.tableData2 = response.data
  2467. })
  2468. },
  2469. //更新状态
  2470. updateStatus (ind, row) {
  2471. if (!this.isRowFilled(row)) {
  2472. this.$message({ message: this.$t('planTable.completeCurrentRow'), type: 'warning' })
  2473. return
  2474. }
  2475. //判断当前计划是否已经投产
  2476. getJtIsTheOrderProductProduced({ id: row.id }).then(resp => {
  2477. // if(resp.data.length>0) {
  2478. // this.$message({message: '当前计划订单产品在生产中已经不能修改', type: 'warning'});
  2479. // return;//证明有在上级的产品--zhi能有一个上级产品
  2480. // }
  2481. //不是生产中中就可以更新了.
  2482. updatePlanOne(row).then(response => {
  2483. if (response.code == 200) {
  2484. this.$message({
  2485. message: this.$t('planTable.modifySuccess'),
  2486. type: 'success'
  2487. })
  2488. this.getAmmunitionPlanInfo()
  2489. } else {
  2490. this.$message({
  2491. message: this.$t('planTable.modifyFailed'),
  2492. type: 'error'
  2493. })
  2494. }
  2495. //关闭弹窗
  2496. this.nanInsertDialogTableVisible = false
  2497. this.beiUpdateDialogTableVisible = false
  2498. this.editingRowIndex = -1 // 重置编辑行索引
  2499. this.tableData2.forEach(item => {
  2500. item.isEditing = false // 重置所有行的编辑状态
  2501. })
  2502. })
  2503. })
  2504. }
  2505. }
  2506. }
  2507. </script>
  2508. <style scoped>
  2509. .el-tabs--border-card >>> .el-tabs__content {
  2510. padding: 0 !important;
  2511. }
  2512. .el-table__body-wrapper {
  2513. cursor: grab;
  2514. }
  2515. .el-table__body-wrapper.grabbing {
  2516. cursor: grabbing;
  2517. }
  2518. .container >>> .el-table .cell {
  2519. white-space: pre-line;
  2520. }
  2521. </style>