Menu.ets 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. import {TimeAndTitle} from "../component/TimeAndTitle"
  2. import {NavigationBar} from '../component/NavigationBar'
  3. import {StorageList} from '../component/MenuView'
  4. import {BoundOrder} from '../params/OrderMaterialsStorageParams'
  5. import RequestParamModel from '../viewmodel/wms/RequestParamModel'
  6. import WmsRequest from '../common/util/request/WmsRequest'
  7. import PageRes from "../viewmodel/wms/InBoundOrderInfo"
  8. import router from '@ohos.router';
  9. import MqttManager from '../common/util/mqtt';
  10. import { MqttClientOptions, MqttConnectOptions } from '@ohos/mqtt';
  11. import CommonConstants from '../common/constants/CommonConstants'
  12. import { getToken, getUserInfo } from '../common/util/request/RequestInstance'
  13. import {UserInfo} from '../viewmodel/wms/UserInfo'
  14. import UserAuthModel from '../common/util/UserAuthModel';
  15. import DictInfo from '../viewmodel/DictInfo'
  16. import connection from '@ohos.net.connection';
  17. const TAG: string = 'MENU'
  18. @Entry
  19. @Component
  20. struct menu {
  21. @State pages: PageRes = {}
  22. @State inBoundOrders: BoundOrder[]=[]
  23. @State outBoundOrders: BoundOrder[]=[]
  24. @State loginName: string = 'admin'
  25. @State password: string = '123456'
  26. loadOrders = async (type: number, targetArray: BoundOrder[]) => {
  27. const pages = await WmsRequest.post('/api/v1/wmsOrder/page', { type } as RequestParamModel) as PageRes;
  28. if (pages?.records) {
  29. for (const record of pages.records) {
  30. targetArray.push({
  31. batchCode: record.batchCode,
  32. materialName: record.materialName,
  33. materialNo: record.materialNo || '',
  34. num: record.num,
  35. created: record.created
  36. });
  37. }
  38. }
  39. }
  40. connectMQTT=async ()=>{
  41. const clientOptions: MqttClientOptions = {
  42. url: 'mqtt://192.168.1.3:1883', // 替换实际IP
  43. clientId: `ohos_client_${Date.now()}`,
  44. persistenceType: 1, // 使用英文逗号 // 建议开启自动重连
  45. };
  46. // MQTT连接配置
  47. const connectOptions: MqttConnectOptions = {
  48. cleanSession: true,
  49. connectTimeout: 30,
  50. keepAliveInterval: 60,
  51. userName: 'optional_username',
  52. password: 'optional_password'
  53. };
  54. try {
  55. MqttManager.init(clientOptions);
  56. const isConnected = await MqttManager.connect(connectOptions);
  57. if (isConnected) {
  58. console.info(TAG, 'MQTT connected successfully');
  59. await MqttManager.subscribe('station100/data/devices');
  60. } else {
  61. console.error(TAG, 'MQTT connection failed');
  62. }
  63. } catch (err) {
  64. console.error(TAG, `MQTT error: ${JSON.stringify(err)}`);
  65. }
  66. }
  67. loginWms=async()=> {
  68. if (this.loginName && this.loginName.length > 0 && this.password && this.password.length > 0) {
  69. await getToken(this.loginName, this.password, 17, '66')
  70. .then(token => {
  71. if (token && token.length > 0) {
  72. CommonConstants.AUTH_TOKEN = token
  73. }
  74. })
  75. if (CommonConstants.AUTH_TOKEN.length <= 0) {
  76. return
  77. }
  78. console.log("tesTag1 ssssss" )
  79. let userInfo = await getUserInfo() as UserInfo
  80. console.log("tesTag1" + JSON.stringify(userInfo))
  81. CommonConstants.USER_ID = userInfo.id!
  82. CommonConstants.USER_NAME = userInfo.userName!
  83. CommonConstants.USER_AVATAR = userInfo.avatar!
  84. CommonConstants.STATION_CODE = userInfo.stationCode!
  85. CommonConstants.STATION_IP = userInfo.stationIp!
  86. CommonConstants.STATION_NANE = '出入库工位'
  87. CommonConstants.STATION_ID = 66
  88. let user = await UserAuthModel.getByUserId(userInfo.id ? userInfo.id : 0)
  89. console.log("tesTag1" + JSON.stringify(user))
  90. if (!user || !user.id) {
  91. // 将后端数据库id作为userId, 默认是保持登录
  92. user = {
  93. userId: userInfo.id,
  94. userName: this.loginName,
  95. password: this.password,
  96. orgId: 17,
  97. stationId: 66,
  98. stationName:'出入库工位',
  99. stationDictValue: '6',
  100. avatar: userInfo.avatar,
  101. maintainLoginStatus: 1,
  102. updateTime: new Date().getTime(),
  103. isLogin: true,
  104. }
  105. let res = await UserAuthModel.addUser(user)
  106. }
  107. CommonConstants.LOGIN_OUT = false
  108. }
  109. this.loadOrders(1, this.inBoundOrders)
  110. this.loadOrders(2, this.outBoundOrders)
  111. }
  112. async aboutToAppear() {
  113. this.loginWms();
  114. this.connectMQTT();
  115. // 查询数据字典放到CommonConstants的DICT_DATA变量中
  116. let res: DictInfo[] = await WmsRequest.post('/api/v1/sys/dictData/all',)
  117. if (res && res.length > 0) {
  118. for (const dict of res) {
  119. CommonConstants.DICT_DATA.set(dict.dictCode, dict.list)
  120. }
  121. }
  122. try {
  123. const netHandle = connection.getDefaultNetSync();
  124. if (netHandle) {
  125. let connectionProperties = await connection.getConnectionProperties(netHandle)
  126. if (connectionProperties && connectionProperties.linkAddresses) {
  127. connectionProperties.linkAddresses.forEach((address: connection.LinkAddress, index: number) => {
  128. console.info('hhtest', "get address info: " + JSON.stringify(address));
  129. })
  130. }
  131. }
  132. } catch (err) {
  133. console.log('hhtest', err);
  134. }
  135. }
  136. build() {
  137. Row() {
  138. Column() {
  139. //时间和导航标
  140. Row(){
  141. TimeAndTitle()
  142. }.width('100%')
  143. .height('3.4%')
  144. .alignItems(VerticalAlign.Bottom)
  145. .justifyContent(FlexAlign.End)
  146. Row(){
  147. Image($r('app.media.general_return'))
  148. .height($r('app.float.virtualSize_22_4'))
  149. .width($r('app.float.virtualSize_22_4'))
  150. .fillColor($r('app.color.FFFFFF'))
  151. Text('智能仓储')
  152. .fontColor($r('app.color.FFFFFF'))
  153. .fontSize($r('app.float.fontSize_15_2'))
  154. }
  155. .height('4%')
  156. .width('100%')
  157. .justifyContent(FlexAlign.Start)
  158. .margin({left:'2%'})
  159. .onClick(()=> {
  160. router.back()
  161. })
  162. Row(){
  163. NavigationBar().width('20%')
  164. }
  165. .width('100%')
  166. .height('4%')
  167. .justifyContent(FlexAlign.End)
  168. Row(){
  169. Column(){
  170. Text("入库")
  171. .fontColor($r('app.color.FFFFFF'))
  172. .fontSize($r('app.float.fontSize_15_2'))
  173. Column() {
  174. Text('空箱入库')
  175. .fontSize($r('app.float.fontSize_15_2'))
  176. .fontColor($r('app.color.FFFFFF'))
  177. .fontWeight(FontWeight.Medium)
  178. Text('料箱编码打印和写入磁卡')
  179. .fontSize($r('app.float.fontSize_6_4'))
  180. .fontColor($r('app.color.FFFFFF'))
  181. .fontWeight(FontWeight.Lighter)
  182. }
  183. .justifyContent(FlexAlign.Center)
  184. .width('100%')
  185. .height('23%')
  186. .borderRadius($r('app.float.virtualSize_6_4'))
  187. .backgroundImage($r("app.media.empty_material_inbound"))
  188. .backgroundImageSize(ImageSize.Cover)
  189. .onClick(()=>{
  190. router.pushUrl({
  191. url: 'pages/EmptyBoxStorage'
  192. })
  193. })
  194. Column() {
  195. Text('订单物料入库')
  196. .fontSize($r('app.float.fontSize_15_2'))
  197. .fontColor($r('app.color.FFFFFF'))
  198. .fontWeight(FontWeight.Medium)
  199. Text('物料绑定料箱和订单')
  200. .fontSize($r('app.float.fontSize_6_4'))
  201. .fontColor($r('app.color.FFFFFF'))
  202. .fontWeight(FontWeight.Lighter)
  203. }
  204. .justifyContent(FlexAlign.Center)
  205. .width('100%')
  206. .height('46%')
  207. .borderRadius($r('app.float.virtualSize_6_4'))
  208. .backgroundImage($r("app.media.order_material_inbound"))
  209. .backgroundImageSize(ImageSize.Cover)
  210. .onClick(()=>{
  211. router.pushUrl({
  212. url: 'pages/OrderMaterialsStorage'
  213. })
  214. })
  215. Column() {
  216. Text('零星物料入库')
  217. .fontSize($r('app.float.fontSize_15_2'))
  218. .fontColor($r('app.color.FFFFFF'))
  219. .fontWeight(FontWeight.Medium)
  220. Text('物料绑定料箱')
  221. .fontSize($r('app.float.fontSize_6_4'))
  222. .fontColor($r('app.color.FFFFFF'))
  223. .fontWeight(FontWeight.Lighter)
  224. }
  225. .justifyContent(FlexAlign.Center)
  226. .width('100%')
  227. .height('23%')
  228. .borderRadius($r('app.float.virtualSize_6_4'))
  229. .backgroundImage($r("app.media.little_material_inbound"))
  230. .backgroundImageSize(ImageSize.Cover)
  231. .onClick(()=>{
  232. router.pushUrl({
  233. url: 'pages/LittleMaterialsStorage'
  234. })
  235. })
  236. }.justifyContent(FlexAlign.SpaceAround)
  237. .height('95%')
  238. .width('30%')
  239. .alignItems(HorizontalAlign.Start)
  240. Divider()
  241. .vertical(true)
  242. .strokeWidth(1)
  243. .color($r('app.color.10FFFFFF'))
  244. .height('95%')
  245. Column(){
  246. Text("齐套/出库")
  247. .fontColor($r('app.color.FFFFFF'))
  248. .fontSize($r('app.float.fontSize_15_2'))
  249. Column() {
  250. Text('工序齐套')
  251. .fontSize($r('app.float.fontSize_15_2'))
  252. .fontColor($r('app.color.FFFFFF'))
  253. .fontWeight(FontWeight.Medium)
  254. Text('物料绑定料箱和工序')
  255. .fontSize($r('app.float.fontSize_6_4'))
  256. .fontColor($r('app.color.FFFFFF'))
  257. .fontWeight(FontWeight.Lighter)
  258. }
  259. .justifyContent(FlexAlign.Center)
  260. .width('100%')
  261. .height('70%')
  262. .borderRadius($r('app.float.virtualSize_6_4'))
  263. .backgroundImage($r("app.media.process_material_kits"))
  264. .backgroundImageSize(ImageSize.Cover)
  265. .onClick(()=>{
  266. router.pushUrl({
  267. url: 'pages/OperationMaterialKit'
  268. })
  269. })
  270. Column() {
  271. Text('零星物料出库')
  272. .fontSize($r('app.float.fontSize_15_2'))
  273. .fontColor($r('app.color.FFFFFF'))
  274. .fontWeight(FontWeight.Medium)
  275. Text('物料查询并调取')
  276. .fontSize($r('app.float.fontSize_6_4'))
  277. .fontColor($r('app.color.FFFFFF'))
  278. .fontWeight(FontWeight.Lighter)
  279. }
  280. .justifyContent(FlexAlign.Center)
  281. .width('100%')
  282. .height('23%')
  283. .borderRadius($r('app.float.virtualSize_6_4'))
  284. .backgroundImage($r("app.media.little_material_outbound"))
  285. .backgroundImageSize(ImageSize.Cover)
  286. .onClick(()=>{
  287. router.pushUrl({
  288. url: 'pages/LittleMaterialOutBound'
  289. })
  290. })
  291. } .alignItems(HorizontalAlign.Start).justifyContent(FlexAlign.SpaceAround).height('95%').width('30%')
  292. Divider()
  293. .vertical(true)
  294. .strokeWidth(1)
  295. .color($r('app.color.10FFFFFF'))
  296. .height('95%')
  297. Column(){
  298. Text(" ")
  299. .fontColor($r('app.color.FFFFFF'))
  300. .fontSize($r('app.float.fontSize_15_2'))
  301. StorageList({title:"入库单",storageData: this.inBoundOrders }).height('46%')
  302. StorageList({title:"出库单",storageData: this.outBoundOrders }).height('46%');
  303. }.alignItems(HorizontalAlign.Start).justifyContent(FlexAlign.SpaceAround).height('95%').width('30%')
  304. }
  305. .height('88.6%')
  306. .width('100%')
  307. .alignItems(VerticalAlign.Top)
  308. .justifyContent(FlexAlign.SpaceAround)
  309. }
  310. .width('100%')
  311. }
  312. .height('100%')
  313. .backgroundColor($r('app.color.000000'))
  314. }
  315. }