materialInfoDetails.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888
  1. <template>
  2. <gui-page :custom-header="true" :header-class="['gui-theme-background-color']">
  3. <template #gHeader>
  4. <view style="height:44px;" class="gui-flex gui-nowrap gui-rows gui-align-items-center">
  5. <!-- 使用组件实现返回按钮及返回首页按钮 -->
  6. <text style="font-size:44rpx;" class="gui-header-leader-btns gui-color-white font-icons"
  7. @tap="goBack">&#xe6c5;</text>
  8. <!-- 导航文本此处也可以是其他自定义内容 -->
  9. <text
  10. class="gui-h4 gui-blod gui-flex1 gui-text-center gui-ellipsis gui-color-white gui-primary-text">手工登记</text>
  11. <!-- 此处加一个右侧展位元素与左侧同宽,实现标题居中 -->
  12. <!-- 实际宽度请根据自己情况设置 -->
  13. <view style="width:40px;" />
  14. <!-- 如果右侧有其他内容可以利用条件编译和定位来实现-->
  15. </view>
  16. </template>
  17. <template #gBody>
  18. <view class="list-content">
  19. <view class="card-list-flexbox">
  20. <text class="card-list-title" :style="[isPad?'font-size: 18px':'font-size: 14px']">采购单详情</text>
  21. <view class="card-list-item">
  22. <text>采购单</text>
  23. <text>{{ formData?.erpOrderNo }}</text>
  24. </view>
  25. <view class="card-list-item">
  26. <text>供应商</text>
  27. <text>{{ formData?.supplierName }}</text>
  28. </view>
  29. <view class="card-list-item">
  30. <text>物料编码</text>
  31. <text>{{ formData?.detail?.materialNo }}</text>
  32. </view>
  33. <view class="card-list-item">
  34. <text>数量</text>
  35. <text>{{ formData?.detail?.materialQty }}</text>
  36. </view>
  37. </view>
  38. <div class="form">
  39. <div class="form-title">收货操作</div>
  40. <div class="form-item">
  41. <div class="title">本次收货量</div>
  42. <div class="content">
  43. <uni-easyinput ref="toolingInput" v-model="form.receiptQty" :input-border="true"
  44. :clearable="false" @focus="handleInputFocus" type="text" placeholder="请输入" focus />
  45. <div class="button-add" @click="handleDoubleClick">+</div>
  46. </div>
  47. </div>
  48. <div class="form-item">
  49. <div class="title">供应商送货批号</div>
  50. <div class="content">
  51. <uni-easyinput ref="toolingInput" @focus="handleInputFocus" v-model="form.deliverBatch" :input-border="true"
  52. type="text" placeholder="请输入" />
  53. </div>
  54. </div>
  55. <div class="form-item">
  56. <div class="title">生产日期</div>
  57. <div class="content">
  58. <uni-datetime-picker type="date" v-model="form.produceDate" />
  59. </div>
  60. </div>
  61. <div class="form-item">
  62. <div class="title">规格</div>
  63. <div class="content">
  64. <uni-easyinput ref="toolingInput" v-model="form.size" :input-border="true" type="text"
  65. placeholder="请输入" />
  66. </div>
  67. </div>
  68. </div>
  69. <div class="panel">
  70. <div class="top">
  71. <text>收货量明细</text>
  72. </div>
  73. <div class="content" v-for="(item, key) in form.materials" :key="key">
  74. <uni-swipe-action>
  75. <!-- 基础用法 -->
  76. <uni-swipe-action-item :right-options="options" @click="handleRemoveDetail(item, key)">
  77. <template #left>
  78. <view />
  79. </template>
  80. <div class="row">
  81. <div class="left">
  82. <span>{{ item.count * 1 }}㎡</span>
  83. </div>
  84. <div class="right">
  85. <div class="right-item">
  86. <span>长</span>
  87. <span>{{ item.length }} m</span>
  88. </div>
  89. <div class="right-item">
  90. <span>宽</span>
  91. <span>{{ item.width }} mm</span>
  92. </div>
  93. <div class="right-item">
  94. <span>厚</span>
  95. <span>{{ item.thickness }} mm</span>
  96. </div>
  97. </div>
  98. </div>
  99. </uni-swipe-action-item>
  100. </uni-swipe-action>
  101. </div>
  102. </div>
  103. </view>
  104. <view class="operation-panel">
  105. <button type="primary" :disabled="!form?.materials.length > 0"
  106. style="width: calc(100% - 8px);margin: 0 4px;" @click="handleShipmentBoxPrinter">提交确认</button>
  107. </view>
  108. <!-- 提示窗示例 -->
  109. <uni-popup ref="popup" type="dialog">
  110. <uni-popup-dialog type="success" cancel-text="取消" confirm-text="确认" title="包装明细"
  111. @confirm="handleCounterNum" @close="popup.close()">
  112. <!-- eslint-disable-next-line -->
  113. <template #default="custom">
  114. <view class="form" style="width: 100%;margin: 0;">
  115. <div class="form-item">
  116. <div class="title">到货包数</div>
  117. <div class="content">
  118. <uni-easyinput v-model="popupForm.qty" @focus="handleInputFocus" :input-border="true" type="digit"
  119. placeholder="请输入" />
  120. </div>
  121. </div>
  122. <div class="form-item">
  123. <div class="title">每包长度(m)</div>
  124. <div class="content">
  125. <uni-easyinput v-model="popupForm.length" @focus="handleInputFocus" :input-border="true" type="digit"
  126. placeholder="请输入" />
  127. </div>
  128. </div>
  129. <div class="form-item">
  130. <div class="title">每包宽度(mm)</div>
  131. <div class="content">
  132. <uni-easyinput v-model="popupForm.width" @focus="handleInputFocus" :input-border="true" type="digit"
  133. placeholder="请输入" />
  134. </div>
  135. </div>
  136. <div class="form-item">
  137. <div class="title">每包厚度(mm)</div>
  138. <div class="content">
  139. <uni-easyinput disabled v-model="popupForm.thickness" @focus="handleInputFocus" :input-border="true"
  140. type="digit" placeholder="请输入" />
  141. </div>
  142. </div>
  143. <div class="form-item">
  144. <div class="title">每包数量(㎡)</div>
  145. <div class="content">
  146. <uni-easyinput disabled v-model="computedCount" :input-border="true" type="digit" />
  147. </div>
  148. </div>
  149. </view>
  150. </template>
  151. </uni-popup-dialog>
  152. </uni-popup>
  153. <uni-popup ref="errorTip" type="dialog">
  154. <uni-popup-dialog type="error" cancel-text="关闭" confirm-text="确认" title="提示" :content="errorTipMessage"
  155. @confirm="handleCloseErrorTipsModal" @close="handleCloseErrorTipsModal" />
  156. </uni-popup>
  157. </template>
  158. </gui-page>
  159. </template>
  160. <script>
  161. import {
  162. computed,
  163. defineComponent,
  164. onBeforeMount,
  165. ref,
  166. watch
  167. } from 'vue'
  168. import tsc from '@/unit/CHITEN_SDK_APP/tsc.js'
  169. import {
  170. add,
  171. ride
  172. } from '@/unit/default.js'
  173. export default defineComponent({
  174. setup(options) {
  175. const touchNum = ref(0);
  176. const popup = ref()
  177. const errorState = ref(0)
  178. const easyinput = ref()
  179. const errorTip = ref('')
  180. const errorTipMessage = ref('')
  181. const parseData = JSON.parse(options?.params) ?? {}
  182. const formData = ref()
  183. const cardList = ref([])
  184. const bluetooth = ref()
  185. const blueConfig = ref({
  186. loopBuffer: 0,
  187. currentTime: 1,
  188. lastData: 0,
  189. onBufferSize: 20,
  190. printerNum: 1,
  191. currentPrint: 1,
  192. isLabelSend: false
  193. })
  194. const popupForm = ref({
  195. qty: 0,
  196. length: 0,
  197. width: 0,
  198. thickness: 0
  199. })
  200. const form = ref({
  201. receiptQty: 0, // 到货总数
  202. deliverBatch: '', // 送货批次
  203. purchaseOrderNo: '',
  204. supplierCode: '', // 供应商编码
  205. wmsPurchaseOrderDetailId: '', // 采购订单明细id
  206. materialNo: '', // 物料编码
  207. materialName: '', // 物料名称
  208. size: '', // 规格
  209. receiptType: 1,
  210. produceDate: '',
  211. materials: []
  212. })
  213. // 处理精度
  214. const praseFloatData = function(val) {
  215. return Math.round((parseFloat(val) * 10000000000)) / 10000000000;
  216. }
  217. // 计算每包数量
  218. const computedCount = computed(() => {
  219. // 计算厚度
  220. // if (popupForm.value.thickness * 1 === 0) {
  221. // return ride(ride(popupForm.value.width, 0.001), popupForm.value.length);
  222. // } else {
  223. // return ricd(ride(ride(popupForm.value.width, 0.001), popupForm.value.length, popupForm.value.thickness);
  224. // }
  225. // 不计算厚度
  226. return ride(ride(popupForm.value.width, 0.001), popupForm.value.length);
  227. })
  228. // 计算本次收货量
  229. watch([() => form.value.materials], ([oldVal], newVal) => {
  230. if (Object.prototype.toString.call(oldVal) === "[object Array]") {
  231. form.value.receiptQty = 0;
  232. for (var i = 0; i < oldVal.length; i++) {
  233. form.value.receiptQty += praseFloatData(oldVal[i].count);
  234. }
  235. }
  236. }, {
  237. deep: true
  238. })
  239. onBeforeMount(() => {
  240. // #ifdef APP-PLUS
  241. const bluetoothConfig = uni.getStorageSync('bluetoothConfig')
  242. if ([null, '', undefined].includes(bluetoothConfig)) {
  243. bluetooth.value = {
  244. 'isOpenBle': false,
  245. 'deviceId': '',
  246. 'serviceId': '',
  247. 'writeId': '',
  248. 'notifyId': ''
  249. }
  250. setTimeout(() => {
  251. // #ifdef APP-PLUS
  252. plus.device.beep(2)
  253. // #endif
  254. errorTipMessage.value = '蓝牙打印机未连接'
  255. errorState.value = -1
  256. errorTip.value.open()
  257. }, 800)
  258. } else {
  259. bluetooth.value = JSON.parse(bluetoothConfig)
  260. }
  261. // #endif
  262. formData.value = parseData
  263. form.value.purchaseOrderNo = formData.value.erpOrderNo;
  264. form.value.supplierCode = formData.value.supplierCode;
  265. form.value.materialNo = formData.value?.detail.materialNo;
  266. form.value.materialName = formData.value?.detail.materialName;
  267. form.value.wmsPurchaseOrderDetailId = formData.value.id;
  268. })
  269. const getPrintDataList = function(materialLots) {
  270. uni.$reqGet("getRegisterLabelPrintData", {
  271. materialLots
  272. }, true)
  273. .then((data) => {
  274. const list = data.data ?? []
  275. if (list.length > 0) {
  276. blueConfig.value.currentPrint = 1
  277. blueConfig.value.printNum = list.length
  278. const timer = setInterval(async () => {
  279. const currentPrint = blueConfig.value.currentPrint -
  280. 1
  281. if (blueConfig.value.isLabelSend === false &&
  282. currentPrint <
  283. blueConfig.value.printNum) {
  284. const paramsObj = {
  285. materialName: list[currentPrint]
  286. .materialName ?? '',
  287. materialNo: list[currentPrint]
  288. .materialNo ??
  289. '',
  290. supplierName: list[currentPrint]
  291. .supplierName ??
  292. '',
  293. size: list[currentPrint]
  294. .size ??
  295. '',
  296. createTime: list[currentPrint]
  297. .createTime ??
  298. '',
  299. batchNumber: list[currentPrint]
  300. .batchNumber ??
  301. '',
  302. wmsStockLocationName: list[
  303. currentPrint]
  304. .wmsStockLocationName ??
  305. '',
  306. validityDate: list[currentPrint]
  307. .validityDate ??
  308. '',
  309. createTime: list[currentPrint]
  310. .createTime ??
  311. '',
  312. deliverBatch: list[currentPrint]
  313. .deliverBatch ??
  314. '',
  315. produceDate: list[currentPrint]
  316. .produceDate ??
  317. '',
  318. qrCode: list[currentPrint]
  319. .qrCode ??
  320. '',
  321. qty: list[currentPrint]
  322. .qty ??
  323. ''
  324. }
  325. await labelOuterBoxTest(paramsObj)
  326. }
  327. if (currentPrint === blueConfig.value.printNum) {
  328. await clearInterval(timer)
  329. }
  330. }, 3000)
  331. }
  332. })
  333. }
  334. // 外箱标签补打
  335. const handleShipmentBoxPrinter = function() {
  336. const JsonData = JSON.parse(JSON.stringify(form.value))
  337. JsonData.materials.forEach(ret => {
  338. Reflect.deleteProperty(ret, 'count')
  339. })
  340. uni.$reqPost("createIncomingReceipt", JsonData)
  341. .then(({
  342. code,
  343. data,
  344. msg
  345. }) => {
  346. if (code === 0) {
  347. // 打印
  348. getPrintDataList(data);
  349. } else {
  350. // #ifdef APP-PLUS
  351. plus.device.beep(2)
  352. // #endif
  353. errorTipMessage.value = msg
  354. errorTip.value.open()
  355. }
  356. })
  357. }
  358. const Send = function(buff) {
  359. var currentTime = blueConfig.value.currentTime
  360. var loopBuffer = blueConfig.value.loopBuffer
  361. var lastData = blueConfig.value.lastData
  362. var onBufferSize = blueConfig.value.onBufferSize
  363. var printNum = blueConfig.value.printerNum
  364. var currentPrint = blueConfig.value.currentPrint
  365. var buf
  366. var dataView
  367. if (currentTime < loopBuffer) {
  368. buf = new ArrayBuffer(onBufferSize)
  369. dataView = new DataView(buf)
  370. for (let i = 0; i < onBufferSize; ++i) {
  371. dataView.setUint8(i, buff[(currentTime - 1) * onBufferSize + i])
  372. }
  373. } else {
  374. buf = new ArrayBuffer(lastData)
  375. dataView = new DataView(buf)
  376. for (let i = 0; i < lastData; ++i) {
  377. dataView.setUint8(i, buff[(currentTime - 1) * onBufferSize + i])
  378. }
  379. }
  380. plus.bluetooth.writeBLECharacteristicValue({
  381. deviceId: bluetooth.value.deviceId,
  382. serviceId: bluetooth.value.serviceId,
  383. characteristicId: bluetooth.value.writeId,
  384. value: buf,
  385. success: function(res) {
  386. if (currentPrint <= printNum) {
  387. wx.showToast({
  388. title: '数据打印中',
  389. icon: 'loading'
  390. })
  391. }
  392. // 将complete中处理数据的代码挪过来,增加30ms延迟, 解决蓝牙打印数据传输10007问题
  393. setTimeout(() => {
  394. currentTime += 1
  395. if (currentTime <= loopBuffer) {
  396. blueConfig.value.isLabelSend = true
  397. blueConfig.value.currentTime = currentTime
  398. Send(buff)
  399. }
  400. // end
  401. if (currentTime === loopBuffer) {
  402. blueConfig.value.currentPrint += 1
  403. blueConfig.value.isLabelSend = false
  404. }
  405. }, 10)
  406. },
  407. fail: function(e) {
  408. wx.showToast({
  409. title: '打印第' + currentPrint + '张失败' + 'error: code ' + e
  410. ?.code + ', message ' + e?.message,
  411. icon: 'none',
  412. duration: 4000
  413. })
  414. },
  415. complete: function() {}
  416. })
  417. }
  418. const prepareSend = function(buff) {
  419. var time = blueConfig.value.onBufferSize
  420. var loopBuffer = parseInt(buff.length / time)
  421. var lastData = parseInt(buff.length % time)
  422. blueConfig.value.loopBuffer = loopBuffer + 1
  423. blueConfig.value.lastData = lastData
  424. blueConfig.value.currentTime = 1
  425. Send(buff)
  426. }
  427. const labelOuterBoxTest = function(ret) {
  428. var command = tsc.dlabelPrinter.createNew()
  429. command.setBackFeed(6)
  430. // (640 * 320)dots
  431. command.setSize(80, 40)
  432. command.setCls()
  433. command.setGap(8)
  434. command.setBox(0, 0, 635, 315, 1)
  435. command.setBar(0, 40, 640, 2)
  436. command.setBar(0, 80, 640, 2)
  437. command.setBar(0, 120, 640, 2)
  438. // command.setBar(0, 160, 640, 2)
  439. command.setBar(0, 160, 366, 2)
  440. command.setBar(0, 200, 366, 2)
  441. command.setBar(0, 240, 366, 2)
  442. command.setBar(0, 280, 366, 2)
  443. // command.setBar(0, 280, 640, 2)
  444. // 1
  445. command.setBar(115, 0, 2, 40)
  446. command.setBar(115, 40, 2, 40)
  447. command.setBar(115, 80, 2, 40)
  448. command.setBar(115, 120, 2, 40)
  449. command.setBar(115, 160, 2, 40)
  450. command.setBar(115, 200, 2, 40)
  451. command.setBar(115, 240, 2, 40)
  452. command.setBar(115, 280, 2, 40)
  453. // 2
  454. command.setBar(360, 40, 2, 40)
  455. command.setBar(360, 80, 2, 40)
  456. command.setBar(360, 120, 2, 40)
  457. command.setBar(360, 160, 2, 40)
  458. command.setBar(360, 200, 2, 40)
  459. command.setBar(360, 240, 2, 40)
  460. command.setBar(360, 280, 2, 40)
  461. // 3
  462. command.setBar(475, 40, 2, 40)
  463. command.setBar(475, 80, 2, 40)
  464. // command.setBar(475, 120, 2, 40)
  465. // command.setBar(475, 280, 2, 40)
  466. command.setText(10, 6, 'TSS24.BF2', 0, 1, 1, '物料名称')
  467. command.setText(126, 6, 'TSS24.BF2', 0, 1, 1, ret.materialName)
  468. // row2
  469. command.setText(10, 46, 'TSS24.BF2', 0, 1, 1, '物料编码')
  470. command.setText(126, 46, 'TSS24.BF2', 0, 1, 1, ret.materialNo)
  471. command.setText(366, 46, 'TSS24.BF2', 0, 1, 1, '供应商')
  472. command.setText(481, 46, 'TSS24.BF2', 0, 1, 1, ret.supplierName)
  473. // row3
  474. command.setText(10, 86, 'TSS24.BF2', 0, 1, 1, '物料规格')
  475. command.setText(126, 86, 'TSS24.BF2', 0, 1, 1, ret.size)
  476. command.setText(366, 86, 'TSS24.BF2', 0, 1, 1, '储位')
  477. command.setText(481, 86, 'TSS24.BF2', 0, 1, 1, ret.wmsStockLocationName)
  478. // row4
  479. command.setText(10, 126, 'TSS24.BF2', 0, 1, 1, '厂内批次')
  480. command.setText(126, 126, '1', 0, 1, 1, ret.batchNumber)
  481. // row5
  482. command.setText(10, 166, 'TSS24.BF2', 0, 1, 1, '有效期')
  483. command.setText(126, 166, 'TSS24.BF2', 0, 1, 1, ret.validityDate)
  484. // row6
  485. command.setText(10, 206, 'TSS24.BF2', 0, 1, 1, '收货日期')
  486. command.setText(126, 206, 'TSS24.BF2', 0, 1, 1, ret.createTime)
  487. // row7
  488. command.setText(10, 246, 'TSS24.BF2', 0, 1, 1, '来料批次')
  489. command.setText(126, 246, 'TSS24.BF2', 0, 1, 1, ret.deliverBatch)
  490. // row8
  491. command.setText(10, 286, 'TSS24.BF2', 0, 1, 1, '生产日期')
  492. command.setText(126, 286, 'TSS24.BF2', 0, 1, 1, ret.produceDate)
  493. command.setText(480, 216, '2', 0, 1, 1, ret.qty)
  494. command.setQrcode(366, 166, 'L', 4, 'A', ret.qrCode)
  495. command.setPagePrint()
  496. blueConfig.value.isLabelSend = true
  497. prepareSend(command.getData())
  498. }
  499. // 双击事件
  500. const handleDoubleClick = function() {
  501. // touchNum.value += 1;
  502. // setTimeout(() => {
  503. // if (touchNum.value >= 2) {
  504. // popupForm.value = {
  505. // qty: 0,
  506. // length: 0,
  507. // width: 0
  508. // }
  509. // popup.value.open()
  510. // }
  511. // touchNum.value = 0;
  512. // }, 400);
  513. popupForm.value = {
  514. qty: '',
  515. length: '',
  516. width: '',
  517. thickness: '',
  518. count: ''
  519. }
  520. popup.value.open()
  521. }
  522. // 计算本次收货量
  523. const handleCounterNum = function() {
  524. // 计算厚度
  525. // if (popupForm.value.thickness * 1 === 0) {
  526. // popupForm.value.count = ((popupForm.value.width * 1 * 0.001) * (popupForm.value.length * 1)) *
  527. // popupForm.value.qty * 1;
  528. // } else {
  529. // popupForm.value.count = ((popupForm.value.width * 1 * 0.001) * (popupForm.value.length * 1) * (
  530. // popupForm.value.thickness * 1 * 0.001)) * popupForm.value.qty * 1;
  531. // }
  532. // 不计算厚度
  533. popupForm.value.count = ride(ride(ride(popupForm.value.width, 0.001), popupForm.value.length),
  534. popupForm.value.qty);
  535. for (var i = 0; i < praseFloatData(popupForm.value.qty); i++) {
  536. form.value.materials.push({
  537. width: praseFloatData(popupForm.value.width),
  538. length: praseFloatData(popupForm.value.length),
  539. thickness: praseFloatData(popupForm.value.thickness * 1),
  540. qty: ride(ride(popupForm.value.width, 0.001), popupForm.value.length),
  541. count: ride(ride(popupForm.value.width, 0.001), popupForm.value.length)
  542. })
  543. }
  544. popup.value.close();
  545. }
  546. // 删除收货量明细
  547. const handleRemoveDetail = function(ret, index) {
  548. form.value.materials.splice(index, 1)
  549. }
  550. const goBack = function() {
  551. uni.$goBack('/pages/workbranch/warehouse/materialRegister/Input/materialInputRegister')
  552. }
  553. // 关闭错误信息弹窗
  554. const handleCloseErrorTipsModal = async function() {
  555. errorTip.value.close()
  556. }
  557. // 禁用软键盘
  558. const handleInputFocus = function() {
  559. // #ifdef APP-PLUS
  560. setTimeout(() => {
  561. uni.hideKeyboard()
  562. }, 100)
  563. // #endif
  564. }
  565. return {
  566. options: [{
  567. text: '删除',
  568. style: {
  569. backgroundColor: '#dd524d'
  570. }
  571. }],
  572. popup,
  573. popupForm,
  574. computedCount,
  575. formData,
  576. form,
  577. cardList,
  578. goBack,
  579. easyinput,
  580. errorTip,
  581. errorTipMessage,
  582. handleRemoveDetail,
  583. handleInputFocus,
  584. handleDoubleClick,
  585. handleCounterNum,
  586. handleShipmentBoxPrinter,
  587. handleCloseErrorTipsModal,
  588. }
  589. }
  590. })
  591. </script>
  592. <style lang="scss" scoped>
  593. .gui-header-leader-btns {
  594. color: black;
  595. margin-left: 24rpx;
  596. font-size: 24px !important;
  597. }
  598. .list-content {
  599. margin-top: 80px;
  600. min-height: calc(100vh - 80px);
  601. background-color: #edeeee;
  602. }
  603. .input-200 {
  604. width: 200px;
  605. padding-left: 10px;
  606. }
  607. .icon-scan {
  608. font-size: 20px;
  609. text-align: right;
  610. }
  611. .scan {
  612. height: 45px;
  613. width: calc(100% - 48px);
  614. margin: 12px;
  615. padding: 0 12px;
  616. display: flex;
  617. justify-content: space-between;
  618. align-items: center;
  619. border-radius: 6px;
  620. background-color: white;
  621. .scan-card {
  622. width: 100%;
  623. display: grid;
  624. grid-template-rows: 1fr;
  625. grid-template-columns: 7fr 2fr;
  626. align-items: center;
  627. input {
  628. height: 35px;
  629. line-height: 35px;
  630. }
  631. text {
  632. width: 100%;
  633. text-align: right;
  634. }
  635. }
  636. }
  637. span,
  638. text {
  639. font-size: 12px;
  640. }
  641. .form {
  642. font-size: 14px;
  643. margin: 0 12px 12px 12px;
  644. padding: 4px 8px;
  645. border-radius: 4px;
  646. background-color: white;
  647. .form-title {
  648. height: 32px;
  649. line-height: 32px;
  650. text-align: center;
  651. font-size: 16px;
  652. font-weight: bold;
  653. border-bottom: 2px dashed #edeeee;
  654. }
  655. .form-item {
  656. .title {
  657. height: 32px;
  658. line-height: 32px;
  659. text-align: left;
  660. font-weight: bold;
  661. color: #333;
  662. }
  663. .content {
  664. height: 42px;
  665. line-height: 42px;
  666. margin: 0 0 6px 0;
  667. position: relative;
  668. .button-add {
  669. position: absolute;
  670. width: 37px;
  671. height: 37px;
  672. right: 0;
  673. top: 0;
  674. display: flex;
  675. justify-content: center;
  676. align-items: center;
  677. border-radius: 4px;
  678. color: white;
  679. cursor: pointer;
  680. background-color: #00a0e9;
  681. }
  682. }
  683. }
  684. }
  685. .card-list-flexbox {
  686. width: calc(100vw - 24px);
  687. height: 205px;
  688. margin: 0 12px;
  689. display: flex;
  690. justify-content: center;
  691. flex-direction: column;
  692. align-items: center;
  693. overflow-y: scroll;
  694. .card-list-title {
  695. width: 100%;
  696. height: 35px;
  697. line-height: 35px;
  698. margin: 0 4px 0 4px;
  699. border-radius: 4px 4px 0 0;
  700. text-align: center;
  701. color: white;
  702. background-color: rgba(0, 160, 233, 1.0);
  703. }
  704. .card-list-item,
  705. .card-list-item-operation {
  706. width: 100%;
  707. height: 35px;
  708. margin: 0 4px 3rpx 4px;
  709. border-radius: 4px;
  710. display: flex;
  711. flex-direction: row;
  712. align-items: center;
  713. justify-content: space-between;
  714. background-color: #fff;
  715. uni-text {
  716. font-size: 14px;
  717. height: 50rpx;
  718. text-align: left;
  719. padding: 0 8px;
  720. display: flex;
  721. flex-direction: row;
  722. align-items: center;
  723. }
  724. .text-1 {
  725. flex: 1;
  726. height: 35px;
  727. justify-content: flex-start;
  728. }
  729. .text-2 {
  730. flex: 3;
  731. height: 35px;
  732. justify-content: flex-end;
  733. margin-right: 4px;
  734. padding: 2px 6px;
  735. }
  736. }
  737. }
  738. .printer {
  739. color: white;
  740. background-color: #00a0e9 !important;
  741. }
  742. .operation-panel {
  743. padding: 12px 0;
  744. position: fixed;
  745. bottom: 0;
  746. width: 100%;
  747. display: grid;
  748. grid-template-columns: 1fr;
  749. grid-template-rows: 1fr;
  750. background-color: white;
  751. .operation-title {
  752. height: 40px;
  753. line-height: 40px;
  754. padding: 0 14px;
  755. font-size: 16px;
  756. font-weight: bold;
  757. }
  758. }
  759. .panel {
  760. margin: 5px 0;
  761. padding: 0 8px;
  762. margin: 0 12px 80px 12px;
  763. overflow-y: scroll;
  764. border-radius: 4px;
  765. background-color: white;
  766. .top {
  767. height: 32px;
  768. line-height: 32px;
  769. text {
  770. font-size: 16px;
  771. font-weight: bold;
  772. }
  773. }
  774. .content {
  775. overflow-y: scroll;
  776. border-top: 2px dashed rgba(237, 238, 238, 1);
  777. .row {
  778. display: flex;
  779. background-color: #fbfbfb;
  780. }
  781. .left {
  782. width: 25%;
  783. min-width: 50px;
  784. span {
  785. line-height: 32px;
  786. font-size: 16px;
  787. font-weight: bold;
  788. color: orange;
  789. }
  790. }
  791. .right {
  792. width: 100%;
  793. min-width: 200px;
  794. display: grid;
  795. grid-template-columns: 1fr 1fr;
  796. }
  797. .right-item {
  798. // height: 32px;
  799. line-height: 32px;
  800. padding: 0 6px;
  801. display: flex;
  802. justify-content: space-between;
  803. span:nth-of-type(1) {
  804. min-width: 30%;
  805. }
  806. span:nth-of-type(2) {
  807. min-width: 30%;
  808. padding-right: 8px;
  809. text-align: right;
  810. word-wrap: break-word;
  811. overflow-y: scroll;
  812. }
  813. }
  814. }
  815. }
  816. .font-icons {
  817. font-size: 20px;
  818. font-weight: bold;
  819. color: red;
  820. }
  821. </style>