batchProductJobBom.vue 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732
  1. <template>
  2. <view>
  3. <view class="title_box rx-bc">
  4. <view class="name"> 报工信息: ({{ list.length || 0 }})个</view>
  5. </view>
  6. <view
  7. :class="[
  8. 'material',
  9. it.extInfo.reportWeight && it.extInfo.reportWeight && 'materialBor',
  10. ]"
  11. v-for="(it, idx) in list"
  12. :key="idx"
  13. >
  14. <view class="content_table">
  15. <view class="item rx-sc">
  16. <view class="rx">
  17. <view class="lable lable190 rx-cc" v-if="isDetails">
  18. <view class="round">{{ idx + 1 }}</view>
  19. <uni-icons
  20. custom-prefix="iconfont"
  21. type="icon-shanchu"
  22. size="16"
  23. color="#fa3534"
  24. ></uni-icons>
  25. 物料编码
  26. </view>
  27. <view class="lable lable190 rx-cc" @click="getDelete2(idx)" v-else>
  28. <view class="round">{{ idx + 1 }}</view>
  29. <uni-icons
  30. custom-prefix="iconfont"
  31. type="icon-shanchu"
  32. size="16"
  33. color="#fa3534"
  34. ></uni-icons>
  35. 物料编码
  36. </view>
  37. <view class="content rx-bc">
  38. <view>{{ it.code }} </view>
  39. <view
  40. class="tag_box"
  41. v-if="
  42. Object.prototype.hasOwnProperty.call(it, 'extInfo') &&
  43. Object.prototype.hasOwnProperty.call(
  44. it.extInfo,
  45. 'productionTimes'
  46. ) &&
  47. Object.prototype.hasOwnProperty.call(
  48. it.extInfo.productionTimes,
  49. item.currentTaskDiagram.taskId
  50. )
  51. "
  52. >
  53. {{ it.extInfo.productionTimes[item.currentTaskDiagram.taskId] }}
  54. </view>
  55. </view>
  56. </view>
  57. </view>
  58. <view class="item rx-sc">
  59. <view class="rx">
  60. <view class="lable lable150 rx-cc">名称</view>
  61. <view class="content rx-bc">
  62. <view
  63. >{{ it.name }}
  64. <text
  65. v-if="[2, 23, 9, 28].includes(Number(it.rootCategoryLevelId))"
  66. >
  67. ({{
  68. it.rootCategoryLevelId == 2
  69. ? "在制品"
  70. : it.rootCategoryLevelId == 23
  71. ? "半成品"
  72. : it.rootCategoryLevelId == 9
  73. ? "产品"
  74. : it.rootCategoryLevelId == 28
  75. ? "废品"
  76. : ""
  77. }})
  78. </text>
  79. </view>
  80. <view class="rx-ec">
  81. <view
  82. class="tag_box"
  83. v-if="it.isCache"
  84. style="margin-right: -36rpx; margin-right: 4rpx"
  85. >缓</view
  86. >
  87. <view
  88. class="tag_box"
  89. v-if="
  90. Object.prototype.hasOwnProperty.call(
  91. it.extInfo,
  92. 'isOutsource'
  93. ) && it.extInfo.isOutsource == 1
  94. "
  95. style="margin-right: -36rpx"
  96. >委外</view
  97. >
  98. </view>
  99. </view>
  100. </view>
  101. </view>
  102. <view class="item rx-sc">
  103. <view class="rx">
  104. <view class="lable lable150 rx-cc">型号</view>
  105. <view class="content rx-sc">
  106. <view>{{ it.modelType }}</view>
  107. </view>
  108. </view>
  109. </view>
  110. <view class="item rx-sc">
  111. <view class="rx">
  112. <view class="lable lable150 rx-cc">规格</view>
  113. <view class="content rx-sc">
  114. <view>{{ it.specification }}</view>
  115. </view>
  116. </view>
  117. </view>
  118. <view class="item rx-sc">
  119. <view class="rx ww50">
  120. <view class="lable lable150 rx-cc">批次号</view>
  121. <view class="content content_num">
  122. <view v-if="isDetails">{{ it.batchNo }}</view>
  123. <input class="uni-input" v-else v-model="it.batchNo" />
  124. </view>
  125. </view>
  126. <view class="rx ww50">
  127. <view class="lable lable150 rx-cc">牌号</view>
  128. <view class="content content_num">
  129. <view>{{ it.brandNum }}</view>
  130. </view>
  131. </view>
  132. </view>
  133. <view class="item rx-sc">
  134. <view class="rx ww50">
  135. <view class="lable lable150 rx-cc">物料代号</view>
  136. <view class="content content_num">
  137. <view v-if="isDetails">{{ it.extInfo.materielCode }}</view>
  138. <input
  139. class="uni-input"
  140. v-else
  141. v-model="it.extInfo.materielCode"
  142. />
  143. </view>
  144. </view>
  145. <view class="rx ww50">
  146. <view class="lable lable150 rx-cc">客户代号</view>
  147. <view class="content content_num">
  148. <view v-if="isDetails">{{ it.extInfo.clientCode }}</view>
  149. <input class="uni-input" v-else v-model="it.extInfo.clientCode" />
  150. </view>
  151. </view>
  152. </view>
  153. <view class="item rx-sc">
  154. <view class="rx ww50">
  155. <view class="lable lable150 rx-cc" v-if="clientEnvironmentId != 5"
  156. >刻码</view
  157. >
  158. <view class="lable lable150 rx-cc" v-if="clientEnvironmentId == 5"
  159. >识别码</view
  160. >
  161. <view class="content content_num">
  162. <view v-if="isDetails">{{ it.extInfo.engrave }}</view>
  163. <input class="uni-input" v-else v-model="it.extInfo.engrave" />
  164. </view>
  165. </view>
  166. <view class="rx ww50">
  167. <view class="lable lable150 rx-cc">序列号</view>
  168. <view class="content content_num">
  169. <view v-if="isDetails">{{ it.extInfo.productSequence }}</view>
  170. </view>
  171. </view>
  172. </view>
  173. <view class="item rx-sc">
  174. <view class="rx ww50">
  175. <view class="lable lable150 rx-cc">设备</view>
  176. <view class="content content_num">
  177. <view v-if="isDetails">{{ it.deviceName }}</view>
  178. <zxz-uni-data-select
  179. :localdata="deviceList"
  180. v-model="it.deviceId"
  181. dataValue="instanceId"
  182. format="{name}"
  183. dataKey="instanceId"
  184. filterable
  185. :clear="false"
  186. v-else
  187. ></zxz-uni-data-select>
  188. </view>
  189. <!-- <view class="content ">
  190. <view>{{ it.deviceName || it.extInfo.deviceName }}</view>
  191. </view> -->
  192. </view>
  193. <view class="rx ww50">
  194. <view class="lable lable150 rx-cc">炉次号</view>
  195. <view class="content content_num">
  196. <view v-if="isDetails">{{ it.extInfo.heatNumber }}</view>
  197. <input class="uni-input" v-else v-model="it.extInfo.heatNumber" />
  198. </view>
  199. </view>
  200. </view>
  201. <view class="item rx-sc">
  202. <view class="rx ww50">
  203. <view class="lable lable150 rx-cc">位置</view>
  204. <view class="content content_num">
  205. <view v-if="isDetails">{{ it.extInfo.position }}</view>
  206. <input class="uni-input" v-else v-model="it.extInfo.position" />
  207. </view>
  208. </view>
  209. <view class="rx ww50">
  210. <view class="lable lable150 rx-cc">数量</view>
  211. <view class="content content_num">
  212. <view v-if="isDetails">{{ it.feedQuantity }}</view>
  213. <input class="uni-input" v-else v-model="it.feedQuantity" />
  214. </view>
  215. </view>
  216. </view>
  217. <view class="item rx-sc">
  218. <view class="rx ww50">
  219. <view class="lable lable150 rx-cc">是否合格</view>
  220. <view class="content content_num">
  221. <zxz-uni-data-select
  222. :localdata="isQualifiedList"
  223. v-model="it.extInfo.isQualified"
  224. dataValue="code"
  225. format="{name}"
  226. dataKey="code"
  227. filterable
  228. :disabled="isDetails"
  229. :clear="false"
  230. ></zxz-uni-data-select>
  231. </view>
  232. </view>
  233. <view
  234. class="rx ww50"
  235. v-if="it.extInfo.isQualified && it.extInfo.isQualified == 2"
  236. >
  237. <view class="lable lable150 rx-cc">处置类型</view>
  238. <view class="content">
  239. <zxz-uni-data-select
  240. :localdata="notTypeList"
  241. v-model="it.extInfo.notType"
  242. dataValue="code"
  243. format="{name}"
  244. dataKey="code"
  245. filterable
  246. :disabled="isDetails"
  247. :clear="false"
  248. ></zxz-uni-data-select>
  249. </view>
  250. </view>
  251. </view>
  252. <view class="item rx-sc">
  253. <view class="rx ww50">
  254. <view class="lable lable150 rx-cc">原因/处置</view>
  255. <view
  256. class="content"
  257. v-if="
  258. it.extInfo.isQualified != 1 &&
  259. it.extInfo.notType != 5 &&
  260. it.extInfo.notType != 8 &&
  261. it.extInfo.notType
  262. "
  263. >
  264. <view v-if="isDetails">{{ it.extInfo.notReason }}</view>
  265. <input
  266. class="uni-input content_num"
  267. v-else
  268. v-model="it.extInfo.notReason"
  269. />
  270. </view>
  271. <view
  272. v-if="![1, 2, 3, 4, 6, 9, 7].includes(Number(it.extInfo.notType))"
  273. class="content"
  274. >
  275. <span v-if="isDetails">{{ it.extInfo.taskName }}</span>
  276. <zxz-uni-data-select
  277. :localdata="stepsList"
  278. v-model="it.extInfo.taskId"
  279. dataValue="taskId"
  280. format="{taskTypeName}"
  281. dataKey="taskId"
  282. filterable
  283. :disabled="isDetails"
  284. :clear="false"
  285. >
  286. </zxz-uni-data-select>
  287. </view>
  288. </view>
  289. <view class="rx ww50">
  290. <view class="lable lable150 rx-cc">报工重量</view>
  291. <view class="content content_num">
  292. <view v-if="isDetails">{{ it.extInfo.reportWeight }}</view>
  293. <input
  294. class="uni-input"
  295. v-else
  296. v-model="it.extInfo.reportWeight"
  297. @input="handleInput"
  298. />
  299. </view>
  300. </view>
  301. </view>
  302. <view class="item rx-sc">
  303. <view class="rx ww50">
  304. <view class="lable lable150 rx-cc">损耗</view>
  305. <view class="content content_num">
  306. <view v-if="it.extInfo.isLoss && it.extInfo.isLoss == 1">是</view>
  307. <view v-else>否</view>
  308. </view>
  309. </view>
  310. </view>
  311. <view class="item rx-sc" v-if="!isDetails">
  312. <view class="rx">
  313. <view class="lable lable150 rx-cc">操作</view>
  314. <view class="content rx-bc">
  315. <view style="display: flex">
  316. <u-button
  317. size="small"
  318. class="u-reset-button"
  319. type="primary"
  320. @click="batchClick(it, idx)"
  321. v-if="it.extInfo.sourceQuantity > 1"
  322. >拆批</u-button
  323. >
  324. <u-button
  325. size="small"
  326. class="u-reset-button"
  327. type="error"
  328. @click="deleteBatch(idx)"
  329. style="margin-left: 20px"
  330. >删除</u-button
  331. >
  332. <u-button
  333. size="small"
  334. class="u-reset-button"
  335. type="warning"
  336. style="margin-left: 20px"
  337. @click="openLoss(it, idx)"
  338. v-if="
  339. ![2, 3, 6].includes(Number(item.currentTaskDiagram.type)) &&
  340. !it.extInfo.isLoss &&
  341. item.currentTaskDiagram.isFirstTask != 1
  342. "
  343. >损耗</u-button
  344. >
  345. </view>
  346. </view>
  347. </view>
  348. </view>
  349. </view>
  350. <view
  351. class="content_table2"
  352. v-if="
  353. ![1, 2, 3, 4].includes(Number(it.extInfo.notType)) &&
  354. clientEnvironmentId == 3
  355. "
  356. >
  357. <view class="head row rx-sc">
  358. <view class="item ww25" style="font-size: 20rpx"
  359. >{{ it.extInfo.newWeight ? "上道工序重量" : "物料重量" }}
  360. {{ it.extInfo.weightUnit }}
  361. </view>
  362. <view class="item ww25">报工重量{{ it.extInfo.weightUnit }}</view>
  363. <view class="item ww25" v-if="isFirstTask == 1">质检结果 </view>
  364. <view class="item ww25" :class="[isFirstTask == 1 ? 'ww25' : 'ww50']"
  365. >处置
  366. </view>
  367. </view>
  368. <view class="table">
  369. <view class="tr row rx-sc">
  370. <view
  371. class="item ww25"
  372. v-if="
  373. Object.prototype.hasOwnProperty.call(it.extInfo, 'newWeight') &&
  374. it.extInfo.newWeight
  375. "
  376. >
  377. {{ it.extInfo.newWeight }}
  378. </view>
  379. <view
  380. class="item ww25 content_num"
  381. v-if="
  382. !Object.prototype.hasOwnProperty.call(
  383. it.extInfo,
  384. 'newWeight'
  385. ) ||
  386. it.extInfo.newWeight == null ||
  387. it.extInfo.newWeight == 0
  388. "
  389. >
  390. <input
  391. class="uni-input"
  392. v-model="it.extInfo.weight"
  393. type="digit"
  394. />
  395. </view>
  396. <view class="item ww25 content_num">
  397. <view v-if="isDetails">{{ it.extInfo.reportWeight }}</view>
  398. <input
  399. class="uni-input"
  400. v-else
  401. v-model="it.extInfo.reportWeight"
  402. type="digit"
  403. @input="handleInput"
  404. />
  405. </view>
  406. <view
  407. class="item ww25"
  408. @click="openNumerate(it, idx)"
  409. v-if="isFirstTask == 1"
  410. >
  411. <view class="numerate">点击计算</view>
  412. </view>
  413. <view
  414. class="item"
  415. v-if="isDetails"
  416. :class="[isFirstTask == 1 ? 'ww25' : 'ww50']"
  417. >
  418. {{ it.extInfo.taskName }}
  419. </view>
  420. <view
  421. class="item"
  422. v-else
  423. :class="[isFirstTask == 1 ? 'ww25' : 'ww50']"
  424. >
  425. <zxz-uni-data-select
  426. :localdata="stepsList"
  427. v-model="it.extInfo.taskId"
  428. dataValue="taskId"
  429. format="{taskTypeName}"
  430. dataKey="taskId"
  431. filterable
  432. @change="(e) => (it.extInfo.taskName = e.taskTypeName)"
  433. :clear="false"
  434. ></zxz-uni-data-select>
  435. </view>
  436. </view>
  437. </view>
  438. </view>
  439. </view>
  440. <u-popup
  441. :show="show"
  442. mode="center"
  443. v-if="show"
  444. :closeOnClickOverlay="false"
  445. >
  446. <view class="popup_box">
  447. <view class="title_box rx-bc">
  448. <view class="name">工序计算列表</view>
  449. <view class="btn_box rx-ec">
  450. <view class="btn" @click="handAddParam">新增</view>
  451. </view>
  452. </view>
  453. <view class="content_table2">
  454. <view class="head row rx-sc">
  455. <view class="item ww30">工序名称</view>
  456. <view class="item ww20">坯体密度</view>
  457. <view class="item ww20">密度系数</view>
  458. <view class="item ww20">重量</view>
  459. <view class="item ww10">操作</view>
  460. </view>
  461. <view class="table">
  462. <view
  463. class="tr row rx-sc"
  464. v-for="(it, idx) in paramList"
  465. :key="idx"
  466. >
  467. <view class="item rx-bc ww30">
  468. <zxz-uni-data-select
  469. :localdata="stepsList"
  470. v-model="it.taskId"
  471. dataValue="taskId"
  472. format="{taskTypeName}"
  473. dataKey="taskId"
  474. filterable
  475. @change="(e) => (it.taskName = e.taskTypeName)"
  476. :clear="false"
  477. ></zxz-uni-data-select>
  478. </view>
  479. <view class="item ww20 content_num">
  480. <input
  481. class="uni-input"
  482. v-model="it.billet"
  483. type="digit"
  484. @input="changeInp(it, idx)"
  485. />
  486. </view>
  487. <view class="item ww20 content_num">
  488. <input
  489. class="uni-input"
  490. v-model="it.density"
  491. type="digit"
  492. @input="changeInp(it, idx)"
  493. />
  494. </view>
  495. <view
  496. class="item ww20"
  497. v-if="idx == 0 || idx != paramList.length - 1"
  498. >
  499. < {{ it.CVIWeight }}
  500. </view>
  501. <view
  502. class="item ww20"
  503. v-if="paramList.length > 1 && idx == paramList.length - 1"
  504. >
  505. ≥ {{ it.CVIWeight }}
  506. </view>
  507. <view class="item ww10 rx-cc" @click="getDelete(idx)">
  508. <uni-icons
  509. custom-prefix="iconfont"
  510. type="icon-shanchu"
  511. size="20"
  512. color="#fa3534"
  513. ></uni-icons>
  514. </view>
  515. </view>
  516. </view>
  517. <view class="formula_box"
  518. >计算公式: 物料重量/坯体密度*密度系数
  519. </view>
  520. <view class="rx-cc">
  521. <u-button
  522. size="small"
  523. class="u-reset-button"
  524. style="width: 300rpx; margin: 20rpx"
  525. type="success"
  526. @click="paramSave"
  527. >工序列表保存</u-button
  528. >
  529. </view>
  530. <view class="reportWeight rx-sc">
  531. 物料重量: {{ weight }} ; 报工重量: {{ reportWeight }}
  532. </view>
  533. </view>
  534. <view class="operate_box rx-sc">
  535. <u-button size="small" class="u-reset-button" @click="cancel"
  536. >取消</u-button
  537. >
  538. <u-button
  539. size="small"
  540. class="u-reset-button"
  541. type="success"
  542. @click="save"
  543. >确定</u-button
  544. >
  545. </view>
  546. </view>
  547. </u-popup>
  548. <uni-popup ref="inputDialog" type="center" :animation="false">
  549. <view class="popup-content">
  550. <view style="font-size: 18px; margin-bottom: 10px">拆批</view>
  551. <uni-forms
  552. ref="baseForm"
  553. :modelValue="batchForm"
  554. label-position="left"
  555. label-align="center"
  556. >
  557. <uni-forms-item label="批次号:" label-width="100" prop="batchNo">
  558. <uni-easyinput
  559. v-model="batchForm.batchNo"
  560. placeholder="请输入批次号"
  561. />
  562. </uni-forms-item>
  563. <uni-forms-item label="拆批数:" label-width="100" prop="quantity">
  564. <uni-easyinput
  565. v-model="batchForm.quantity"
  566. placeholder="请输入拆批数"
  567. />
  568. </uni-forms-item>
  569. <uni-forms-item
  570. label="是否合格:"
  571. label-width="100"
  572. prop="isQualified"
  573. >
  574. <zxz-uni-data-select
  575. :localdata="isQualifiedList"
  576. v-model="batchForm.isQualified"
  577. dataValue="code"
  578. format="{name}"
  579. dataKey="code"
  580. filterable
  581. :clear="false"
  582. @change="isChange"
  583. ></zxz-uni-data-select>
  584. </uni-forms-item>
  585. <uni-forms-item
  586. label="不合格类型:"
  587. label-width="100"
  588. prop="notType"
  589. v-if="batchForm.isQualified == 2"
  590. >
  591. <zxz-uni-data-select
  592. :localdata="notTypeList"
  593. v-model="batchForm.notType"
  594. dataValue="code"
  595. format="{name}"
  596. dataKey="code"
  597. filterable
  598. :clear="false"
  599. ></zxz-uni-data-select>
  600. </uni-forms-item>
  601. <uni-forms-item
  602. label="不良原因:"
  603. v-if="
  604. batchForm.isQualified != 1 &&
  605. batchForm.notType &&
  606. batchForm.notType != 5 &&
  607. batchForm.notType != 8
  608. "
  609. prop="notReason"
  610. >
  611. <uni-easyinput
  612. v-model="batchForm.notReason"
  613. placeholder="请输入不良原因"
  614. />
  615. </uni-forms-item>
  616. </uni-forms>
  617. <view class="button-group">
  618. <button type="primary" size="mini" @click="handleClose">取消</button>
  619. <button type="primary" size="mini" @click="timeoutCauseConfirm">
  620. 确定
  621. </button>
  622. </view>
  623. </view>
  624. </uni-popup>
  625. <uni-popup ref="lossDialog" type="center" :animation="false">
  626. <view class="popup-content">
  627. <view style="font-size: 18px; margin-bottom: 10px">损耗数</view>
  628. <uni-forms
  629. ref="lossForm"
  630. :modelValue="lossForm"
  631. label-position="left"
  632. label-align="center"
  633. >
  634. <uni-forms-item label="批次号:" label-width="100" prop="batchNo">
  635. <uni-easyinput
  636. v-model="lossForm.batchNo"
  637. placeholder="请输入批次号"
  638. />
  639. </uni-forms-item>
  640. <uni-forms-item label="损耗数:" label-width="100" prop="quantity">
  641. <uni-easyinput
  642. v-model="lossForm.quantity"
  643. placeholder="请输入损耗数"
  644. />
  645. </uni-forms-item>
  646. </uni-forms>
  647. <view class="button-group">
  648. <button type="primary" size="mini" @click="handleClose">取消</button>
  649. <button type="primary" size="mini" @click="getLossParam">确定</button>
  650. </view>
  651. </view>
  652. </uni-popup>
  653. </view>
  654. </template>
  655. <script>
  656. import { getTaskInstanceList } from "@/api/pda/workOrder.js";
  657. import { saveParam, getComputeParam } from "@/api/pda/tangu.js";
  658. import { splitBatch } from "@/api/pda/feeding";
  659. import SearchPopup from "./searchPopup.vue";
  660. export default {
  661. props: {
  662. item: {
  663. type: Object,
  664. default: () => {},
  665. },
  666. list: {
  667. type: Array,
  668. default: () => [],
  669. },
  670. isDetails: {
  671. type: Boolean,
  672. default: false,
  673. },
  674. equipmentList: {
  675. type: Array,
  676. default: () => [],
  677. },
  678. },
  679. components: {
  680. SearchPopup,
  681. },
  682. watch: {
  683. equipmentList: {
  684. immediate: true,
  685. deep: true,
  686. handler(newVal) {
  687. this.deviceList = newVal;
  688. this.changeHeatNumber();
  689. },
  690. },
  691. list: {
  692. immediate: true,
  693. deep: true,
  694. handler(newVal) {
  695. if (newVal.length) {
  696. console.log(newVal);
  697. this.newList = newVal;
  698. this.sumweight(newVal);
  699. this.sunTj();
  700. }
  701. },
  702. },
  703. },
  704. mounted() {
  705. if (this.deviceList.length > 0) {
  706. this.list.forEach((item) => {
  707. item.deviceId = this.deviceList[0].id
  708. ? this.deviceList[0].id
  709. : this.deviceList[0].instanceId;
  710. });
  711. }
  712. },
  713. data() {
  714. return {
  715. taskTypeName: null,
  716. isFirstTask: null,
  717. stepsList: [],
  718. clientEnvironmentId:
  719. uni.getStorageSync("userInfo") &&
  720. uni.getStorageSync("userInfo").clientEnvironmentId, // *1 主环境-601环境 2 soll-索尔环境 3 tg-碳谷环境
  721. show: false,
  722. rowIt: [],
  723. paramList: [],
  724. paramObj: {},
  725. weight: 0,
  726. reportWeight: 0,
  727. resultObj: {},
  728. resultIdx: 0,
  729. deviceList: [],
  730. isQualifiedList: [
  731. {
  732. code: 1,
  733. name: "合格",
  734. },
  735. {
  736. code: 2,
  737. name: "不合格",
  738. },
  739. ],
  740. notTypeList: [
  741. {
  742. code: 1,
  743. name: "返工",
  744. },
  745. {
  746. code: 2,
  747. name: "返修",
  748. },
  749. {
  750. code: 3,
  751. name: "报废",
  752. },
  753. {
  754. code: 4,
  755. name: "降级使用",
  756. },
  757. {
  758. code: 5,
  759. name: "让步接收",
  760. },
  761. {
  762. code: 6,
  763. name: "留样",
  764. },
  765. {
  766. code: 7,
  767. name: "消耗",
  768. },
  769. {
  770. code: 8,
  771. name: "回用",
  772. },
  773. {
  774. code: 9,
  775. name: "转试销",
  776. },
  777. ],
  778. batchShow: false,
  779. batchForm: {
  780. quantity: "",
  781. batchNo: "",
  782. notReason: "",
  783. isQualified: 1,
  784. notType: "",
  785. },
  786. bacthData: {},
  787. bacthIndex: "",
  788. lossForm: {
  789. batchNo: "",
  790. quantity: "",
  791. unit: "",
  792. isLoss: 1,
  793. },
  794. lossVisible: false,
  795. lossData: {},
  796. lossIndex: "",
  797. };
  798. },
  799. created() {
  800. this.taskTypeName = this.item.currentTaskDiagram.taskTypeName;
  801. this.isFirstTask = this.item.currentTaskDiagram.isFirstTask;
  802. console.log(this.list, "this.list");
  803. this.getSteps();
  804. this.getCompute();
  805. setTimeout(() => {
  806. this.handleInput();
  807. }, 800);
  808. },
  809. methods: {
  810. getSteps() {
  811. getTaskInstanceList(this.item.workOrderId).then((res) => {
  812. res.pop();
  813. this.stepsList = res;
  814. });
  815. },
  816. getCompute() {
  817. getComputeParam(
  818. this.item.workOrderId,
  819. this.item.currentTaskDiagram.taskId
  820. ).then((res) => {
  821. this.paramList = [];
  822. this.paramList = (res && res.paramList) || [];
  823. this.paramObj = res || {};
  824. });
  825. },
  826. handAddParam() {
  827. // billet: null,
  828. // density: null,
  829. // result: null,
  830. // PIPDensity: null,
  831. // volume: null,
  832. // coefficient: null
  833. if (this.isFirstTask == 1) {
  834. this.paramList.push({
  835. taskId: null,
  836. taskName: null,
  837. });
  838. }
  839. },
  840. getDelete(idx) {
  841. this.paramList.splice(idx, 1);
  842. },
  843. changeInp(item, index) {
  844. if (Number(item.billet) && Number(item.density)) {
  845. this.paramList[index].CVIWeight = (
  846. (Number(this.weight) / item.billet) *
  847. item.density
  848. ).toFixed(2);
  849. }
  850. },
  851. paramSave() {
  852. if (this.isFirstTask == 1 && this.paramList.length > 0) {
  853. let bol;
  854. let _i;
  855. bol = this.paramList.every((e, i) => {
  856. _i = i + 1;
  857. return e.taskId && e.billet && e.density;
  858. });
  859. if (!bol) {
  860. uni.showToast({
  861. title: `请完善第${_i}计算数据`,
  862. icon: "none",
  863. });
  864. return false;
  865. }
  866. if (this.paramList.length < 1) {
  867. uni.showToast({
  868. title: `请输入二个以上计算数据`,
  869. icon: "none",
  870. });
  871. return false;
  872. }
  873. }
  874. let param = {};
  875. if (!Object.prototype.hasOwnProperty.call(this.paramObj, "id")) {
  876. param = {
  877. paramList: this.paramList,
  878. workOrderId: this.item.workOrderId,
  879. taskId: this.item.currentTaskDiagram.taskId,
  880. };
  881. } else {
  882. this.paramObj.paramList = this.paramList;
  883. param = this.paramObj;
  884. }
  885. saveParam(param).then((res) => {
  886. uni.showToast({
  887. icon: "none",
  888. title: "操作成功",
  889. });
  890. this.getCompute();
  891. });
  892. },
  893. openNumerate(row, idx) {
  894. if (!row.extInfo.reportWeight) {
  895. uni.showToast({
  896. icon: "none",
  897. title: "请先输入报工重量",
  898. });
  899. return false;
  900. }
  901. this.weight = row.extInfo.weight;
  902. this.reportWeight = row.extInfo.reportWeight;
  903. this.resultIdx = idx;
  904. this.show = true;
  905. },
  906. handleInput() {
  907. let arr = JSON.parse(JSON.stringify(this.list));
  908. this.sumweight(arr);
  909. this.sunTj();
  910. console.log("arr11111112222", this.item);
  911. // console.log('this.list33333',this.list)
  912. },
  913. sumweight(arr) {
  914. // let formedWeight = 0;
  915. // let noFormedWeight = 0;
  916. // arr.map((s, i) => {
  917. // if (s.extInfo.reportWeight) {
  918. // if (s.extInfo.isQualified == 1) {
  919. // formedWeight += s.extInfo.reportWeight * 1;
  920. // } else {
  921. // noFormedWeight += s.extInfo.reportWeight * 1;
  922. // }
  923. // } else {
  924. // s.extInfo.reportWeight = null;
  925. // }
  926. // this.$set(this.list[i].extInfo, "reportWeight", s.extInfo.reportWeight);
  927. // });
  928. // if (this.item.workReportInfo) {
  929. // this.item.workReportInfo.formedWeight = parseFloat(
  930. // formedWeight.toFixed(4)
  931. // );
  932. // this.item.workReportInfo.notFormedWeight = parseFloat(
  933. // noFormedWeight.toFixed(4)
  934. // );
  935. // }
  936. let formedWeight = 0;
  937. let noFormedWeight = 0;
  938. let lossWeight = 0;
  939. arr.map((s, i) => {
  940. if (s.extInfo.reportWeight) {
  941. if (s.extInfo.isQualified == 1 && !s.extInfo.isLoss) {
  942. formedWeight += s.extInfo.reportWeight * 1;
  943. } else if (!s.extInfo.isLoss) {
  944. noFormedWeight += s.extInfo.reportWeight * 1;
  945. } else if (s.extInfo.isLoss == 1) {
  946. lossWeight += s.extInfo.reportWeight * 1;
  947. }
  948. } else {
  949. s.extInfo.reportWeight = null;
  950. }
  951. this.$set(this.list[i].extInfo, "reportWeight", s.extInfo.reportWeight);
  952. });
  953. if (this.item.workReportInfo) {
  954. this.item.workReportInfo.formedWeight = parseFloat(
  955. formedWeight.toFixed(4)
  956. );
  957. this.item.workReportInfo.notFormedWeight = parseFloat(
  958. noFormedWeight.toFixed(4)
  959. );
  960. this.item.workReportInfo.lossWeight = parseFloat(lossWeight.toFixed(4));
  961. }
  962. console.log(this.item.workReportInfo, "this.item.workReportInfo");
  963. },
  964. sunTj() {
  965. if (this.item.workReportInfo && this.item.singleReport == 1) {
  966. this.item.workReportInfo.formedNum = this.newList.filter(
  967. (v) => v.extInfo.isQualified == 1
  968. ).length;
  969. this.item.workReportInfo.notFormedNum = this.newList.filter(
  970. (v) => v.extInfo.isQualified !== 1
  971. ).length;
  972. }
  973. },
  974. openLoss(item, index) {},
  975. cancel() {
  976. this.show = false;
  977. this.reportWeight = 0;
  978. this.weight = 0;
  979. },
  980. taskChange(e) {
  981. console.log(e);
  982. },
  983. getDelete2(idx) {
  984. uni.showModal({
  985. title: "删除",
  986. content: "是否确实删除此物料!",
  987. confirmText: "确认", //这块是确定按钮的文字
  988. success: (rr) => {
  989. if (rr.confirm) {
  990. this.list.splice(idx, 1);
  991. }
  992. if (this.list.length == 0) {
  993. this.$set(this.item.workReportInfo, "formedNum", 0);
  994. this.$set(this.item.workReportInfo, "notFormedNum", 0);
  995. }
  996. this.$forceUpdate();
  997. },
  998. });
  999. },
  1000. batchClick(item, index) {
  1001. this.batchForm.quantity = "";
  1002. this.batchForm.notType = "";
  1003. this.batchForm.notReason = "";
  1004. this.batchForm.isQualified = 1;
  1005. this.bacthData = item;
  1006. this.bacthIndex = index;
  1007. this.batchForm.batchNo = item.batchNo;
  1008. this.$refs.inputDialog.open();
  1009. },
  1010. deleteBatch(index) {
  1011. uni.showModal({
  1012. title: "删除",
  1013. content: "是否确实删除此物料!",
  1014. confirmText: "确认", //这块是确定按钮的文字
  1015. success: (rr) => {
  1016. this.list.splice(index, 1);
  1017. this.$set(this.item, "product", this.list);
  1018. if (this.list.length == 0) {
  1019. this.$set(this.item.workReportInfo, "formedNum", 0);
  1020. this.$set(this.item.workReportInfo, "notFormedNum", 0);
  1021. }
  1022. this.$forceUpdate();
  1023. },
  1024. });
  1025. },
  1026. handleClose() {
  1027. this.$refs.inputDialog.close();
  1028. this.$refs.lossDialog.close();
  1029. },
  1030. async timeoutCauseConfirm() {
  1031. if (!this.batchForm.quantity) {
  1032. uni.showToast({
  1033. title: "请输入拆批的数量",
  1034. icon: "none",
  1035. });
  1036. return;
  1037. }
  1038. if (this.batchForm.quantity == 0) {
  1039. uni.showToast({
  1040. title: "拆批数不能等于0",
  1041. icon: "none",
  1042. });
  1043. return;
  1044. }
  1045. if (!this.batchForm.quantity) {
  1046. uni.showToast({
  1047. title: "拆批数不能为空",
  1048. icon: "none",
  1049. });
  1050. return;
  1051. }
  1052. if (this.bacthData.extInfo.sourceQuantity < this.batchForm.quantity) {
  1053. uni.showToast({
  1054. title: "拆批数不能大于数量",
  1055. icon: "none",
  1056. });
  1057. return;
  1058. }
  1059. if (this.batchForm.isQualified == 2 && !this.batchForm.notType) {
  1060. uni.showToast({
  1061. title: "请选择不合格类型",
  1062. icon: "none",
  1063. });
  1064. return;
  1065. }
  1066. let dataList = [];
  1067. await splitBatch({
  1068. product: this.bacthData,
  1069. splitQt: Number(this.batchForm.quantity),
  1070. batchNo: this.batchForm.batchNo,
  1071. isQualified: this.batchForm.isQualified,
  1072. notType: this.batchForm.notType,
  1073. notReason: this.batchForm.notReason,
  1074. }).then((res) => {
  1075. res.forEach((item) => {
  1076. dataList.push(this.deepCopy(item));
  1077. });
  1078. this.refreshData(dataList, this.batchForm.quantity);
  1079. });
  1080. // this.$refs.inputDialog.close()
  1081. },
  1082. refreshData(list, feedQuantity) {
  1083. const number =
  1084. Number(this.list[this.bacthIndex].extInfo.sourceQuantity) -
  1085. Number(feedQuantity);
  1086. this.list[this.bacthIndex].extInfo.sourceQuantity = number;
  1087. this.list[this.bacthIndex].feedQuantity = number;
  1088. this.list[this.bacthIndex].extInfo.newWeight =
  1089. (Number(this.list[this.bacthIndex].extInfo.newWeight) * 100000) /
  1090. 100000 -
  1091. (Number(list[0].extInfo.newWeight) * 100000) / 100000;
  1092. list.forEach((item) => {
  1093. item.childBatch = 1;
  1094. });
  1095. let _arr = [...this.list, ...list];
  1096. this.$set(this.list, this.list.length, ...list);
  1097. this.$set(this.item, "product", _arr);
  1098. this.$forceUpdate();
  1099. this.$refs.inputDialog.close();
  1100. },
  1101. openLoss(item, index) {
  1102. this.lossForm.quantity = "";
  1103. this.lossForm.unit = "";
  1104. this.lossForm.batchNo = "";
  1105. this.lossData = item;
  1106. this.lossIndex = index;
  1107. this.lossForm.batchNo = item.batchNo;
  1108. this.lossForm.unit = item.unit;
  1109. this.$refs.lossDialog.open();
  1110. },
  1111. async getLossParam() {
  1112. if (this.lossForm.quantity) {
  1113. if (
  1114. Number(this.lossData.feedQuantity) < Number(this.lossForm.quantity)
  1115. ) {
  1116. this.$message.warning("损耗数不能大于数量");
  1117. return;
  1118. }
  1119. let dataList = [];
  1120. await splitBatch({
  1121. product: this.lossData,
  1122. splitQt: Number(this.lossForm.quantity),
  1123. batchNo: this.lossForm.batchNo,
  1124. isLoss: 1,
  1125. }).then((res) => {
  1126. res.forEach((item) => {
  1127. dataList.push(this.deepCopy(item));
  1128. });
  1129. if (dataList.length != 0) {
  1130. this.refreshLossData(dataList);
  1131. }
  1132. });
  1133. }
  1134. this.$refs.lossDialog.close();
  1135. },
  1136. toInteger(num) {
  1137. const len = this.getDecimalLength(num);
  1138. return {
  1139. int: Math.round(num * Math.pow(10, len)),
  1140. factor: Math.pow(10, len),
  1141. };
  1142. },
  1143. add(a, b) {
  1144. const { int: aInt, factor: aFactor } = this.toInteger(a);
  1145. const { int: bInt, factor: bFactor } = this.toInteger(b);
  1146. const maxFactor = Math.max(aFactor, bFactor);
  1147. return (
  1148. (aInt * (maxFactor / aFactor) + bInt * (maxFactor / bFactor)) /
  1149. maxFactor
  1150. );
  1151. },
  1152. sub(a, b) {
  1153. const { int: aInt, factor: aFactor } = this.toInteger(a);
  1154. const { int: bInt, factor: bFactor } = this.toInteger(b);
  1155. const maxFactor = Math.max(aFactor, bFactor);
  1156. return (
  1157. (aInt * (maxFactor / aFactor) - bInt * (maxFactor / bFactor)) /
  1158. maxFactor
  1159. );
  1160. },
  1161. getDecimalLength(num) {
  1162. return (num.toString().split(".")[1] || "").length;
  1163. },
  1164. refreshLossData(list) {
  1165. const number =
  1166. Number(this.list[this.lossIndex].feedQuantity) -
  1167. Number(this.lossForm.quantity);
  1168. this.list[this.lossIndex].extInfo.sourceQuantity = number;
  1169. this.list[this.lossIndex].feedQuantity = number;
  1170. this.list[this.lossIndex].extInfo.newWeight =
  1171. (Number(this.list[this.lossIndex].extInfo.newWeight) * 100000) /
  1172. 100000 -
  1173. (Number(list[0].extInfo.newWeight) * 100000) / 100000;
  1174. list.forEach((item) => {
  1175. item.childBatch = 1;
  1176. });
  1177. const newList = this.list.filter((item) => item.feedQuantity != 0);
  1178. let _arr = [...newList, ...list];
  1179. this.$set(newList, newList.length, ...list);
  1180. this.$set(this.item, "product", _arr);
  1181. this.$forceUpdate();
  1182. this.$refs.inputDialog.close();
  1183. },
  1184. isChange(val) {
  1185. if (val == "合格") {
  1186. this.batchForm.notType = "";
  1187. this.batchForm.notReason = "";
  1188. }
  1189. },
  1190. deepCopy(obj, hash = new WeakMap()) {
  1191. if (obj === null) return null;
  1192. if (obj instanceof Date) return new Date(obj);
  1193. if (obj instanceof RegExp) return new RegExp(obj);
  1194. if (typeof obj !== "object" && typeof obj !== "function") return obj;
  1195. if (hash.has(obj)) return hash.get(obj);
  1196. const result = Array.isArray(obj) ? [] : {};
  1197. hash.set(obj, result);
  1198. return Object.keys(obj).reduce((acc, key) => {
  1199. acc[key] = this.deepCopy(obj[key], hash);
  1200. return acc;
  1201. }, result);
  1202. },
  1203. save() {
  1204. if (this.isFirstTask == 1) {
  1205. this.resultObj = {};
  1206. if (Number(this.reportWeight) < Number(this.paramList[0].CVIWeight)) {
  1207. this.resultObj = this.paramList[0];
  1208. this.setDataSave();
  1209. return false;
  1210. }
  1211. if (
  1212. Number(this.reportWeight) >=
  1213. this.paramList[this.paramList.length - 1].CVIWeight
  1214. ) {
  1215. this.resultObj = this.paramList[this.paramList.length - 1];
  1216. this.setDataSave();
  1217. return false;
  1218. }
  1219. for (let i = 1; i < this.paramList.length; i++) {
  1220. console.log(i);
  1221. console.log(
  1222. 11,
  1223. Number(this.paramList[i - 1].CVIWeight),
  1224. Number(this.reportWeight)
  1225. );
  1226. if (
  1227. Number(this.paramList[i - 1].CVIWeight) <
  1228. Number(this.reportWeight) &&
  1229. Number(this.reportWeight) < Number(this.paramList[i].CVIWeight)
  1230. ) {
  1231. this.resultObj = this.paramList[i];
  1232. break;
  1233. }
  1234. }
  1235. this.setDataSave();
  1236. }
  1237. },
  1238. setDataSave() {
  1239. this.$set(
  1240. this.list[this.resultIdx].extInfo,
  1241. "taskId",
  1242. this.resultObj.taskId
  1243. );
  1244. this.$set(
  1245. this.list[this.resultIdx].extInfo,
  1246. "density",
  1247. this.resultObj.density
  1248. );
  1249. this.$set(
  1250. this.list[this.resultIdx].extInfo,
  1251. "billet",
  1252. this.resultObj.billet
  1253. );
  1254. this.$set(
  1255. this.list[this.resultIdx].extInfo,
  1256. "taskName",
  1257. this.resultObj.taskName
  1258. );
  1259. this.cancel();
  1260. },
  1261. changeHeatNumber() {
  1262. if (this.deviceList.length != 0) {
  1263. this.deviceList.forEach((f) => {
  1264. this.list.forEach((o) => {
  1265. if (
  1266. o.deviceId &&
  1267. f.instanceId == o.deviceId &&
  1268. this.deviceList.length > 1
  1269. ) {
  1270. o.extInfo.heatNumber = f.extInfo.heatNumber;
  1271. o.deviceId = f.instanceId;
  1272. this.$forceUpdate();
  1273. } else if (this.deviceList.length == 1) {
  1274. o.extInfo.heatNumber = this.deviceList[0].extInfo.heatNumber;
  1275. o.deviceId = this.deviceList[0].instanceId;
  1276. this.$forceUpdate();
  1277. } else if (this.deviceList.length > 1) {
  1278. o.extInfo.heatNumber = f.extInfo.heatNumber;
  1279. o.deviceId = f.instanceId;
  1280. this.$forceUpdate();
  1281. }
  1282. });
  1283. });
  1284. }
  1285. },
  1286. },
  1287. };
  1288. </script>
  1289. <style lang="scss" scoped>
  1290. .title_box {
  1291. margin-top: 20rpx;
  1292. .name {
  1293. font-size: 28rpx;
  1294. font-style: normal;
  1295. font-weight: 400;
  1296. color: $theme-color;
  1297. padding-left: 20rpx;
  1298. position: relative;
  1299. &:before {
  1300. position: absolute;
  1301. content: "";
  1302. left: 0rpx;
  1303. top: 0rpx;
  1304. bottom: 0rpx;
  1305. width: 4rpx;
  1306. height: 28rpx;
  1307. background: $theme-color;
  1308. margin: auto;
  1309. }
  1310. }
  1311. .btn_box {
  1312. .btn {
  1313. padding: 0 18rpx;
  1314. height: 50rpx;
  1315. line-height: 50rpx;
  1316. background: $theme-color;
  1317. font-size: 26rpx;
  1318. font-style: normal;
  1319. font-weight: 400;
  1320. font-size: 24rpx;
  1321. color: #fff;
  1322. border-radius: 4rpx;
  1323. margin-left: 24rpx;
  1324. }
  1325. }
  1326. }
  1327. .material {
  1328. margin-top: 16rpx;
  1329. border: 1rpx solid transparent;
  1330. .content_table {
  1331. width: 100%;
  1332. border: 2rpx solid $border-color;
  1333. box-sizing: border-box;
  1334. .item {
  1335. display: flex;
  1336. border-bottom: 2rpx solid $border-color;
  1337. .lable {
  1338. width: 132rpx;
  1339. text-align: center;
  1340. background-color: #f7f9fa;
  1341. font-size: 26rpx;
  1342. border-right: 2rpx solid $border-color;
  1343. flex-shrink: 0;
  1344. }
  1345. .lable150 {
  1346. width: 156rpx !important;
  1347. font-size: 24rpx;
  1348. }
  1349. .lable190 {
  1350. width: 200rpx !important;
  1351. font-size: 24rpx;
  1352. }
  1353. .ww80 {
  1354. width: 80rpx;
  1355. }
  1356. .content {
  1357. width: 518rpx;
  1358. min-height: 64rpx;
  1359. font-size: 28rpx;
  1360. line-height: 28rpx;
  1361. font-style: normal;
  1362. font-weight: 400;
  1363. padding: 18rpx 8rpx;
  1364. box-sizing: border-box;
  1365. word-wrap: break-word;
  1366. flex-grow: 1 !important;
  1367. .unit {
  1368. padding: 0 4rpx;
  1369. font-size: 24rpx;
  1370. color: #404446;
  1371. }
  1372. .penalize {
  1373. width: 160rpx;
  1374. line-height: 60rpx;
  1375. background: $theme-color;
  1376. font-size: 24rpx;
  1377. text-align: center;
  1378. color: #fff;
  1379. }
  1380. }
  1381. .content_H {
  1382. min-height: 92rpx;
  1383. }
  1384. .pd4 {
  1385. padding: 4rpx 8rpx;
  1386. }
  1387. &:last-child {
  1388. border-bottom: none;
  1389. }
  1390. }
  1391. .ww55 {
  1392. width: 55%;
  1393. }
  1394. .ww50 {
  1395. width: 50%;
  1396. }
  1397. .ww45 {
  1398. width: 45%;
  1399. }
  1400. .tag_box {
  1401. padding: 2rpx 10rpx;
  1402. margin-right: 12rpx;
  1403. background: #e6a23c;
  1404. font-size: 22rpx;
  1405. color: #fff;
  1406. border-radius: 4rpx;
  1407. }
  1408. }
  1409. }
  1410. .button-group {
  1411. margin-top: 15px;
  1412. display: flex;
  1413. width: 100%;
  1414. justify-content: space-around;
  1415. }
  1416. .materialBor {
  1417. border: 1rpx solid #157a2c;
  1418. }
  1419. .content_table2 {
  1420. width: 100%;
  1421. .row {
  1422. width: 100%;
  1423. .item {
  1424. color: #404446;
  1425. font-size: 28rpx;
  1426. padding-left: 12rpx;
  1427. }
  1428. .color157 {
  1429. color: $theme-color;
  1430. }
  1431. .ww30 {
  1432. width: 30%;
  1433. }
  1434. .ww20 {
  1435. width: 20%;
  1436. }
  1437. .ww15 {
  1438. width: 15%;
  1439. }
  1440. .ww25 {
  1441. width: 25%;
  1442. }
  1443. .ww50 {
  1444. width: 50%;
  1445. }
  1446. .ww10 {
  1447. width: 10%;
  1448. }
  1449. }
  1450. .head {
  1451. height: 64rpx;
  1452. background: #f7f9fa;
  1453. // border-top: 2rpx solid #E3E5E5;
  1454. border-left: 2rpx solid #e3e5e5;
  1455. box-sizing: border-box;
  1456. .item {
  1457. height: 64rpx;
  1458. line-height: 64rpx;
  1459. border-right: 2rpx solid #e3e5e5;
  1460. box-sizing: border-box;
  1461. font-size: 22rpx;
  1462. }
  1463. }
  1464. .tr {
  1465. border-top: 2rpx solid #e3e5e5;
  1466. border-left: 2rpx solid #e3e5e5;
  1467. .item {
  1468. font-size: 24rpx;
  1469. min-height: 74rpx;
  1470. display: flex;
  1471. align-items: center;
  1472. border-right: 2rpx solid #e3e5e5;
  1473. box-sizing: border-box;
  1474. white-space: normal;
  1475. word-break: break-all;
  1476. }
  1477. &:last-child {
  1478. border-bottom: 2rpx solid #e3e5e5;
  1479. }
  1480. .numerate {
  1481. font-size: 22rpx;
  1482. color: $theme-color;
  1483. }
  1484. }
  1485. }
  1486. .content_num {
  1487. display: flex;
  1488. align-items: center;
  1489. padding: 0 4rpx;
  1490. /deep/ .uni-input-input {
  1491. border: 2rpx solid #f0f8f2;
  1492. background: #f0f8f2;
  1493. color: $theme-color;
  1494. }
  1495. }
  1496. .popup-content {
  1497. @include flex;
  1498. align-items: center;
  1499. justify-content: center;
  1500. flex-direction: column;
  1501. padding: 15px;
  1502. background-color: #fff;
  1503. box-sizing: border-box;
  1504. border-radius: 10px 10px 10px 10px;
  1505. }
  1506. .round {
  1507. width: 32rpx;
  1508. height: 32rpx;
  1509. line-height: 30rpx;
  1510. text-align: center;
  1511. border-radius: 50%;
  1512. background: $theme-color;
  1513. font-size: 24rpx;
  1514. font-style: normal;
  1515. font-weight: 400;
  1516. color: #fff;
  1517. margin-right: 10rpx;
  1518. }
  1519. .popup_box {
  1520. width: 94vw;
  1521. padding: 16rpx 12rpx;
  1522. box-sizing: border-box;
  1523. }
  1524. .operate_box {
  1525. margin-top: 32rpx;
  1526. padding: 10rpx 100rpx;
  1527. /deep/ .u-button {
  1528. width: 160rpx;
  1529. }
  1530. }
  1531. .formula_box {
  1532. font-size: 24rpx;
  1533. font-style: normal;
  1534. font-weight: 400;
  1535. margin-top: 12rpx;
  1536. }
  1537. .reportWeight {
  1538. font-size: 24rpx;
  1539. font-style: normal;
  1540. font-weight: 400;
  1541. margin-top: 30rpx;
  1542. text {
  1543. color: $theme-color;
  1544. }
  1545. }
  1546. ::v-deep .uni-forms-item__label {
  1547. font-size: 12px;
  1548. }
  1549. </style>