workbranch.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698
  1. <template>
  2. <view>
  3. <gui-page :custom-header="true" :is-header-sized="false" :header-class="['gui-bg-gray', 'gui-dark-bg-level-1']">
  4. <template #gHeader>
  5. <view style="height:44px;" class="gui-flex gui-nowrap gui-rows gui-align-items-center">
  6. <!-- 导航文本此处也可以是其他自定义内容 -->
  7. <text class="gui-h4 gui-blod gui-flex1 gui-text-center gui-ellipsis gui-primary-text">工作台</text>
  8. <!-- 此处加一个右侧展位元素与左侧同宽,实现标题居中 -->
  9. <!-- 实际宽度请根据自己情况设置 -->
  10. <!-- 如果右侧有其他内容可以利用条件编译和定位来实现-->
  11. </view>
  12. </template>
  13. <template #gBody>
  14. <view class="uni-margin-wrap">
  15. <!-- <swiper class="swiper" circular indicator-dots="indicatorDots" interval="2000" duration="500">
  16. <swiper-item>
  17. <image class="adapt-image" src="@/static/material/156017341021.jpg" mode="aspectFill"></image>
  18. </swiper-item>
  19. <swiper-item>
  20. <image class="adapt-image" src="@/static/material/wallhaven-k7v9yq.png" mode="aspectFill">
  21. </image>
  22. </swiper-item>
  23. <swiper-item>
  24. <image class="adapt-image" src="@/static/material/wallhaven-m9xyg8.jpg" mode="aspectFill">
  25. </image>
  26. </swiper-item>
  27. </swiper> -->
  28. </view>
  29. <div class="gridBody">
  30. <!-- v-show="$permission('home:system:list')" -->
  31. <div class="grid-box">
  32. <view class="panel">
  33. <text class="panel-title">系统管理</text>
  34. </view>
  35. <view
  36. class="grid-list"
  37. :style="[isPad == true?'grid-template-columns: repeat(5, 1fr)':
  38. isPhone == true?'grid-template-columns: repeat(4, 1fr)':
  39. 'grid-template-columns: repeat(3, 1fr)']"
  40. >
  41. <view v-for="(item, key) in systemList" :key="key" class="gui-grid">
  42. <view class="gui-grid-item" @click="handleTap(item)">
  43. <text
  44. :class="['gui-grid-icon', item.iconClass ?? 'font-icons']"
  45. >{{ item.iconBase }}</text>
  46. <text class="gui-grid-text gui-color-black">{{ item.name }}</text>
  47. </view>
  48. </view>
  49. <!-- <view class="gui-grid">
  50. <view class="gui-grid-item" @click="takePhoto">
  51. <text :class="['gui-grid-icon','font-icons']">&#xe6d4;</text>
  52. <text class="gui-grid-text gui-color-black">测试拍照</text>
  53. </view>
  54. </view>
  55. <image v-for="item in srcs" :src="item" mode="aspectFit" /> -->
  56. </view>
  57. </div>
  58. <div class="grid-box">
  59. <view class="panel">
  60. <text class="panel-title">仓库管理</text>
  61. </view>
  62. <view
  63. class="grid-list"
  64. :style="[isPad == true?'grid-template-columns: repeat(5, 1fr)':
  65. isPhone == true?'grid-template-columns: repeat(4, 1fr)':
  66. 'grid-template-columns: repeat(3, 1fr)']"
  67. >
  68. <view
  69. v-for="(item, key) in WMSList"
  70. v-show="$permission(item.permission)"
  71. :key="key"
  72. class="gui-grid"
  73. >
  74. <view class="gui-grid-item" @click="handleTap(item)">
  75. <text
  76. :class="['gui-grid-icon', item.iconClass ?? 'font-icons']"
  77. >{{ item.iconBase }}</text>
  78. <text class="gui-grid-text gui-color-black">{{ item.name }}</text>
  79. </view>
  80. </view>
  81. </view>
  82. </div>
  83. <div class="grid-box">
  84. <view class="panel">
  85. <text class="panel-title">生产管理</text>
  86. </view>
  87. <view
  88. class="grid-list"
  89. :style="[isPad == true?'grid-template-columns: repeat(5, 1fr)':
  90. isPhone == true?'grid-template-columns: repeat(4, 1fr)':
  91. 'grid-template-columns: repeat(3, 1fr)']"
  92. >
  93. <view
  94. v-for="(item, key) in MESList"
  95. v-show="$permission(item.permission)"
  96. :key="key"
  97. class="gui-grid"
  98. >
  99. <view class="gui-grid-item" @click="handleTap(item)">
  100. <text
  101. :class="['gui-grid-icon', item.iconClass ?? 'font-icons']"
  102. style="background-color: #2cb755;"
  103. >{{ item.iconBase }}</text>
  104. <text class="gui-grid-text gui-color-black">{{ item.name }}</text>
  105. </view>
  106. </view>
  107. </view>
  108. </div>
  109. <div class="grid-box">
  110. <view class="panel">
  111. <text class="panel-title">设备管理</text>
  112. </view>
  113. <view
  114. class="grid-list"
  115. :style="[isPad == true?'grid-template-columns: repeat(5, 1fr)':
  116. isPhone == true?'grid-template-columns: repeat(4, 1fr)':
  117. 'grid-template-columns: repeat(3, 1fr)']"
  118. >
  119. <view v-for="(item, key) in ETMList" :key="key" class="gui-grid">
  120. <view class="gui-grid-item" @click="handleTap(item)">
  121. <text
  122. :class="['gui-grid-icon', item.iconClass ?? 'font-icons']"
  123. style="background-color: #30c6c8;"
  124. >{{ item.iconBase }}</text>
  125. <text class="gui-grid-text gui-color-black">{{ item.name }}</text>
  126. </view>
  127. </view>
  128. </view>
  129. </div>
  130. <div class="grid-box">
  131. <view class="panel">
  132. <text class="panel-title">供应商管理</text>
  133. </view>
  134. <view
  135. class="grid-list"
  136. :style="[isPad == true?'grid-template-columns: repeat(5, 1fr)':
  137. isPhone == true?'grid-template-columns: repeat(4, 1fr)':
  138. 'grid-template-columns: repeat(3, 1fr)']"
  139. >
  140. <view v-for="(item, key) in SRMList" :key="key" class="gui-grid">
  141. <view class="gui-grid-item" @click="handleTap(item)">
  142. <text
  143. :class="['gui-grid-icon', item.iconClass ?? 'font-icons']"
  144. style="background-color: #ff800e;"
  145. >{{ item.iconBase }}</text>
  146. <text class="gui-grid-text gui-color-black">{{ item.name }}</text>
  147. </view>
  148. </view>
  149. </view>
  150. </div>
  151. </div>
  152. <uni-popup ref="errorTip" type="dialog">
  153. <uni-popup-dialog
  154. type="error"
  155. cancel-text="关闭"
  156. confirm-text="确认"
  157. title="提示"
  158. :content="errorTipMessage"
  159. @confirm="handleCloseErrorTipsModal"
  160. @close="handleCloseErrorTipsModal"
  161. />
  162. </uni-popup>
  163. </template>
  164. </gui-page>
  165. </view>
  166. </template>
  167. <script>
  168. // import { getCLodop } from "../../unit/CLodopfuncs2.js"
  169. import {
  170. ref,
  171. getCurrentInstance
  172. } from 'vue'
  173. export default {
  174. setup() {
  175. const {
  176. proxy
  177. } = getCurrentInstance()
  178. console.log(proxy)
  179. const errorTip = ref('')
  180. const errorTipMessage = ref('')
  181. const srcs = ref([])
  182. const systemList = ref([
  183. {
  184. iconClass: 'font-icons',
  185. iconBase: '\ue6aa',
  186. name: '打印测试'
  187. },
  188. // {
  189. // iconClass: 'font-icons',
  190. // iconBase: '\ue673',
  191. // name: '扫码'
  192. // },
  193. // {
  194. // iconClass: "font-icons",
  195. // iconBase: "\ue6d4",
  196. // name: "蓝牙测试"
  197. // },
  198. {
  199. iconClass: 'font-icons',
  200. iconBase: '\ue6d8',
  201. name: '蓝牙配置'
  202. }
  203. ])
  204. const SRMList = ref([{
  205. iconClass: 'font-icons',
  206. iconBase: '\ue692',
  207. name: '预收单'
  208. }])
  209. const ETMList = ref([{
  210. iconClass: 'font-icons',
  211. iconBase: '\ue7f2',
  212. name: '模具保养'
  213. }])
  214. const MESList = ref([{
  215. iconClass: 'font-icons',
  216. iconBase: '\ue692',
  217. permission: 'system:home:glue',
  218. name: '点胶机'
  219. }, {
  220. iconClass: 'font-icons',
  221. iconBase: '\ue692',
  222. permission: 'system:home:ipqc',
  223. name: 'IPQC检验'
  224. }, {
  225. iconClass: 'font-icons',
  226. iconBase: '\ue692',
  227. permission: 'system:home:oqc',
  228. name: 'FQC检验'
  229. }, {
  230. iconClass: 'font-icons',
  231. iconBase: '\ue692',
  232. permission: 'system:home:cutting',
  233. name: '分切'
  234. }, {
  235. iconClass: 'font-icons',
  236. iconBase: '\ue692',
  237. permission: '',
  238. name: '工序执行'
  239. }, {
  240. iconClass: 'font-icons',
  241. iconBase: '\ue692',
  242. permission: '',
  243. name: '全检执行'
  244. }])
  245. const WMSList = ref([
  246. // {
  247. // iconClass: "font-icons",
  248. // iconBase: "\ue613",
  249. // name: "基础设置"
  250. // },
  251. // {
  252. // iconClass: "font-icons",
  253. // iconBase: "\ue7da",
  254. // name: "报表中心"
  255. // },
  256. {
  257. iconClass: 'font-icons',
  258. iconBase: '\ue7d4',
  259. permission: '',
  260. name: '来料登记'
  261. },
  262. {
  263. iconClass: 'font-icons',
  264. iconBase: '\ue660',
  265. permission: '',
  266. name: '物料上架'
  267. },
  268. {
  269. iconClass: 'font-icons',
  270. iconBase: '\ue660',
  271. permission: '',
  272. name: '入库申请'
  273. },
  274. {
  275. iconClass: 'font-icons',
  276. iconBase: '\ue660',
  277. permission: '',
  278. name: '分切备料'
  279. },
  280. {
  281. iconClass: 'font-icons',
  282. iconBase: '\ue660',
  283. permission: '',
  284. name: '送货单回签'
  285. },
  286. {
  287. iconClass: 'font-icons',
  288. iconBase: '\uebb6',
  289. permission: '',
  290. name: '退料申请'
  291. },
  292. {
  293. iconClass: 'font-icons',
  294. iconBase: '\ue7eb',
  295. permission: '',
  296. name: '货位调整'
  297. },
  298. {
  299. iconClass: 'font-icons',
  300. iconBase: '\ue64c',
  301. permission: '',
  302. name: '栈板拆合批'
  303. },
  304. {
  305. iconClass: 'font-icons',
  306. iconBase: '\ue64a',
  307. permission: '',
  308. name: '成品拆合箱'
  309. },
  310. {
  311. iconClass: 'font-icons',
  312. iconBase: '\ue64d',
  313. permission: '',
  314. name: '物料拆合批'
  315. },
  316. {
  317. iconClass: 'font-icons',
  318. iconBase: '\ue7dd',
  319. permission: '',
  320. name: '生产领料'
  321. },
  322. {
  323. iconClass: 'font-icons',
  324. iconBase: '\ue7dd',
  325. permission: '',
  326. name: '委外备料'
  327. },
  328. // {
  329. // iconClass: 'font-icons',
  330. // iconBase: '\uebb6',
  331. // permission: '',
  332. // name: '生产发料'
  333. // },
  334. {
  335. iconClass: 'font-icons',
  336. iconBase: '\ue697',
  337. permission: '',
  338. name: '条码拆分'
  339. },
  340. {
  341. iconClass: 'font-icons',
  342. iconBase: '\ue681',
  343. permission: '',
  344. name: '条码合并'
  345. },
  346. // {
  347. // iconClass: 'font-icons',
  348. // iconBase: '\ue60e',
  349. // permission: '',
  350. // name: '出货标签'
  351. // },
  352. {
  353. iconClass: 'font-icons',
  354. iconBase: '\ue641',
  355. permission: '',
  356. name: '出货列表'
  357. },
  358. {
  359. iconClass: 'font-icons',
  360. iconBase: '\ue60e',
  361. // permission: 'wms:sale-out-order:permission',
  362. permission: '',
  363. name: '销售出货'
  364. },
  365. {
  366. iconClass: 'font-icons',
  367. iconBase: '\ue60e',
  368. permission: '',
  369. name: '出入冷库'
  370. },
  371. {
  372. iconClass: 'font-icons',
  373. iconBase: '\ue60e',
  374. permission: '',
  375. name: '半成品流转'
  376. }
  377. ])
  378. const handleTap = function(row) {
  379. uni.$grace.msg(row.name + '模块正在火速开发中')
  380. // #ifdef APP-PLUS
  381. const mpaasScanModule = uni.requireNativePlugin('Mpaas-Scan-Module')
  382. // #endif
  383. switch (row.name) {
  384. case '扫码':
  385. // #ifdef APP-PLUS
  386. mpaasScanModule.mpaasScan({
  387. // 扫码识别类型,参数可多选,qrCode、barCode,不设置,默认识别所有
  388. 'scanType': ['qrCode', 'barCode'],
  389. // 是否隐藏相册,默认false不隐藏
  390. 'hideAlbum': false
  391. },
  392. (ret) => {
  393. uni.showModal({
  394. title: '弹窗标题',
  395. // 返回值中,resp_code 表示返回结果值,10:用户取消,11:其他错误,1000:成功
  396. // 返回值中,resp_message 表示返回结果信息
  397. // 返回值中,resp_result 表示扫码结果,只有成功才会有返回
  398. content: JSON.stringify(ret),
  399. showCancel: false,
  400. confirmText: '确定'
  401. })
  402. })
  403. // #endif
  404. break
  405. case '打印测试':
  406. uni.navigateTo({
  407. url: "/pages/tabbar/printTest"
  408. })
  409. // // #ifdef APP-PLUS
  410. // const Activity = plus.android.runtimeMainActivity()
  411. // const Intent = plus.android.importClass('android.content.Intent')
  412. // const Uri = plus.android.importClass('android.net.Uri')
  413. // const browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(`${uni.$baseUrl}/jmreport/view/828502348750999552?token=32701364ce02496ba2b8a5f17c06dae4`))
  414. // Activity.startActivity(browserIntent)
  415. // // #endif
  416. // // #ifdef H5
  417. // const dom = document.createElement('a')
  418. // dom.setAttribute('href',
  419. // `http://192.168.1.101:48080/jmreport/view/828502348750999552?hotPressId=1664178203920498689`
  420. // )
  421. // dom.setAttribute('target', '_blank')
  422. // dom.click()
  423. // // #endif
  424. break
  425. case '蓝牙测试':
  426. uni.navigateTo({
  427. url: '/pages/workbranch/system/bluetooth'
  428. })
  429. break
  430. case '蓝牙配置':
  431. uni.navigateTo({
  432. url: '/pages/workbranch/system/bluetoothConfig'
  433. })
  434. break
  435. case '生产领料':
  436. uni.navigateTo({
  437. url: '/pages/workbranch/warehouse/production/prepareMaterials'
  438. })
  439. break
  440. case '委外备料':
  441. uni.navigateTo({
  442. url: '/pages/workbranch/warehouse/outSourceMaterial/outSourceList'
  443. })
  444. break
  445. case '来料登记':
  446. uni.navigateTo({
  447. url: '/pages/workbranch/warehouse/materialRegister/registerType'
  448. })
  449. break
  450. case '物料上架':
  451. uni.navigateTo({
  452. url: '/pages/workbranch/warehouse/feeding/shelfType'
  453. })
  454. break
  455. case '入库申请':
  456. uni.navigateTo({
  457. url: '/pages/workbranch/warehouse/warehousing/warehousingType'
  458. })
  459. break
  460. case '退料申请':
  461. uni.navigateTo({
  462. url: '/pages/workbranch/warehouse/returnMaterial/returnMaterialType'
  463. })
  464. break
  465. case '送货单回签':
  466. uni.navigateTo({
  467. url: '/pages/workbranch/warehouse/deliveryNote/deliveryNoteList'
  468. })
  469. break
  470. case '分切备料':
  471. uni.navigateTo({
  472. url: '/pages/workbranch/production/cutting/cuttingMaterialPreparation'
  473. })
  474. break
  475. case '货位调整':
  476. uni.navigateTo({
  477. url: '/pages/workbranch/warehouse/location/locationPage'
  478. })
  479. break
  480. case '物料拆合批':
  481. uni.navigateTo({
  482. url: '/pages/workbranch/warehouse/materialDisass/materialWorkBranch'
  483. })
  484. break
  485. case '栈板拆合批':
  486. uni.navigateTo({
  487. url: '/pages/workbranch/warehouse/trestle/trestleList'
  488. })
  489. break
  490. case '成品拆合箱':
  491. uni.navigateTo({
  492. url: '/pages/workbranch/warehouse/box/boxList'
  493. })
  494. break
  495. // case '生产发料':
  496. // uni.navigateTo({
  497. // url: '/pages/workbranch/warehouse/productionIssue/productionIssue'
  498. // })
  499. // break
  500. case '条码拆分':
  501. uni.navigateTo({
  502. url: '/pages/workbranch/warehouse/codeSplitOrMerge/codeSplit'
  503. })
  504. break
  505. case '条码合并':
  506. uni.navigateTo({
  507. url: '/pages/workbranch/warehouse/codeSplitOrMerge/codeMerge'
  508. })
  509. break
  510. case '出货标签':
  511. uni.navigateTo({
  512. url: '/pages/workbranch/production/shipment/shipmentPage'
  513. })
  514. break
  515. case '出货列表':
  516. uni.navigateTo({
  517. url: '/pages/workbranch/production/shipment/shipmentPatchworkPage'
  518. })
  519. break
  520. case '销售出货':
  521. uni.navigateTo({
  522. url: '/pages/workbranch/production/shipmentMHT/shipmentPage'
  523. })
  524. break
  525. case '预收单':
  526. // uni.navigateTo({
  527. // url: "/pages/workbranch/productionIssue/productionIssue"
  528. // })
  529. break
  530. case '点胶机':
  531. uni.navigateTo({
  532. url: '/pages/workbranch/production/glue/indexPage'
  533. })
  534. break
  535. case 'IPQC检验':
  536. uni.navigateTo({
  537. url: '/pages/workbranch/production/IPQC/ipqcList'
  538. })
  539. break
  540. case 'FQC检验':
  541. uni.navigateTo({
  542. url: '/pages/workbranch/production/FQC/fqcList'
  543. })
  544. break
  545. case '分切':
  546. uni.navigateTo({
  547. url: '/pages/workbranch/production/cutting/cuttingList'
  548. })
  549. break
  550. case '工序执行':
  551. uni.navigateTo({
  552. url: '/pages/workbranch/production/processExecution/processList'
  553. })
  554. break
  555. case '全检执行':
  556. uni.navigateTo({
  557. url: '/pages/workbranch/production/processExecution/processFullInspection'
  558. })
  559. break
  560. case '模具保养':
  561. uni.navigateTo({
  562. url: '/pages/workbranch/ETM/moldPreserve/indexPage'
  563. })
  564. break
  565. case '出入冷库':
  566. uni.navigateTo({
  567. url: '/pages/workbranch/warehouse/coldStorage/indexPage'
  568. })
  569. break
  570. case '半成品流转':
  571. uni.navigateTo({
  572. url: '/pages/workbranch/warehouse/SemiFinishedProducts/indexPage'
  573. })
  574. break
  575. }
  576. }
  577. const takePhoto = function() {
  578. uni.chooseImage({
  579. count: 6, // count: 6, //默认9
  580. sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
  581. sourceType: ['album', 'camera'], // 从相册选择
  582. success: function(res) {
  583. srcs.value = res.tempFilePaths
  584. console.log(res, JSON.stringify(res.tempFilePaths))
  585. }
  586. })
  587. }
  588. // 关闭错误信息弹窗
  589. const handleCloseErrorTipsModal = async function() {
  590. errorTip.value.close()
  591. }
  592. return {
  593. WMSList,
  594. systemList,
  595. MESList,
  596. SRMList,
  597. ETMList,
  598. handleTap,
  599. srcs,
  600. takePhoto,
  601. errorTip,
  602. errorTipMessage,
  603. handleCloseErrorTipsModal
  604. }
  605. }
  606. }
  607. </script>
  608. <style lang="scss" scoped>
  609. .gridBody {
  610. margin: 80px 0;
  611. overflow-y: scroll;
  612. }
  613. .grid-box {
  614. width: calc(100vw - 16px);
  615. margin: 14px 8px;
  616. display: flex;
  617. flex-direction: column;
  618. border-radius: 4px;
  619. box-shadow: 0 0 9px 0 rgba(121, 118, 118, 0.34);
  620. .panel {
  621. height: 2.2rem;
  622. width: calc(100vw - 32px);
  623. padding-left: 16px;
  624. border-top-left-radius: 4px;
  625. border-top-right-radius: 4px;
  626. background: linear-gradient(to right, rgb(78, 188, 250), rgb(0, 239, 239));
  627. .panel-title {
  628. width: calc(100vw / 4 - 2px);
  629. height: inherit;
  630. line-height: 2.2rem;
  631. text-align: center;
  632. font-size: 16px;
  633. color: white;
  634. }
  635. }
  636. .grid-list {
  637. width: calc(100vw - 16px);
  638. /* 设置容器布局为grid布局 */
  639. display: grid;
  640. /* 指定每一行的宽度 每个宽度中间用空格隔开 */
  641. grid-template-rows: auto;
  642. /* 指定每一列的宽度 每个宽度中间用空格隔开 */
  643. grid-template-columns: 1fr 1fr 1fr;
  644. border-bottom-left-radius: 10px;
  645. border-bottom-right-radius: 10px;
  646. background-color: white;
  647. .gui-grid {
  648. display: flex;
  649. justify-content: center;
  650. .font-icons {
  651. width: 40px;
  652. height: 40px;
  653. border-radius: 6px;
  654. display: flex;
  655. justify-content: center;
  656. align-items: center;
  657. font-size: 26px;
  658. color: #f4f4f4;
  659. box-shadow: 2px 2px 1px 0 #d5dffd;
  660. background-color: #539cf8;
  661. }
  662. .gui-grid-item {
  663. width: 85px;
  664. height: 85px;
  665. margin-top: 4px;
  666. display: flex;
  667. justify-content: center;
  668. align-items: center;
  669. uni-text:nth-of-type(2) {
  670. padding-top: 4px;
  671. padding-left: 3px;
  672. font-size: 14px;
  673. }
  674. }
  675. }
  676. }
  677. }
  678. .adapt-image {
  679. width: 750rpx;
  680. }
  681. </style>