CallMaterialNotification.ets 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. //叫料通知
  2. import WorkOrderInfo from '../../viewmodel/wms/WorkOrderInfo'
  3. import {OrderParams,DemandMaterial} from "../../params/OrderMaterialsStorageParams"
  4. import WmsRequest from '../../common/util/request/WmsRequest'
  5. import RequestParamModel from '../../viewmodel/wms/RequestParamModel'
  6. import { NotificationInfo} from '../../viewmodel/wms/NotificationInfo'
  7. @Component
  8. struct MaterialNotificationItem{
  9. @Prop item:WorkOrderInfo
  10. @Prop index:number
  11. @State scaleValue:number = 1
  12. @Link workOrders: WorkOrderInfo[]
  13. searchRequestMaterial: () => void = () => {}
  14. build() {
  15. Row(){
  16. Column() {
  17. // 订单标题(带订单号)
  18. Text(`${this.item.orderName}${this.item.orderCode}`)
  19. .fontSize($r('app.float.fontSize_30'))
  20. .fontColor(this.item.workOrderState=="完成"?$r('app.color.FFFFFF'):$r('app.color.30FFFFFF'))
  21. .width('100%')
  22. .textAlign(TextAlign.Start)
  23. // 订单详情
  24. Column({ space: 3 }) {
  25. Text(`工位: ${this.item.workOrderCode}`)
  26. .fontColor(this.item.workOrderState=="完成"?$r('app.color.FFFFFF'):$r('app.color.30FFFFFF'))
  27. .fontSize($r('app.float.fontSize_16'))
  28. .fontWeight(FontWeight.Lighter)
  29. Text(`工序: ${this.item.orderCode}`)
  30. .fontColor(this.item.workOrderState=="完成"?$r('app.color.FFFFFF'):$r('app.color.30FFFFFF'))
  31. .fontSize($r('app.float.fontSize_16'))
  32. .fontWeight(FontWeight.Lighter)
  33. Row() {
  34. Text('通知时间:')
  35. .fontColor(this.item.workOrderState=="完成"?$r('app.color.FFFFFF'):$r('app.color.30FFFFFF'))
  36. .fontSize($r('app.float.fontSize_16'))
  37. .fontWeight(FontWeight.Lighter)
  38. Text(this.item.planStartWhen)
  39. .fontColor(this.item.workOrderState=="完成"?$r('app.color.FFFFFF'):$r('app.color.30FFFFFF'))
  40. .fontSize($r('app.float.fontSize_16'))
  41. .margin({ left: 4 })
  42. .fontWeight(FontWeight.Lighter)
  43. }
  44. .width('100%')
  45. .justifyContent(FlexAlign.Start)
  46. }
  47. .margin({ top: 6 })
  48. .alignItems(HorizontalAlign.Start)
  49. }.width('85%')
  50. Row(){
  51. //Text(index === this.selectedIndex ?item.workOrderState:item.workOrderState)
  52. Text(this.item.workOrderState)
  53. .fontSize($r('app.float.fontSize_30'))
  54. .fontColor(this.item.workOrderState=="完成"?$r('app.color.30D158'):$r('app.color.30FFFFFF'))
  55. }.width('15%')
  56. }
  57. .backgroundColor(this.scaleValue===0.9 ? $r('app.color.2030D158') : $r('app.color.20FFFFFF')) // 选中状态加深
  58. .borderRadius($r('app.float.virtualSize_24'))
  59. .padding(10)
  60. .scale({ x: this.scaleValue, y: this.scaleValue })
  61. .animation({
  62. duration: 200,
  63. curve: Curve.Linear // 弹性曲线更生动
  64. })
  65. //.border({width:2,color:this.scaleValue===0.9 ? $r('app.color.2030D158'):$r('app.color.20FFFFFF')})
  66. .onClick(() => {
  67. this.scaleValue = 0.9; // 点击时缩小
  68. setTimeout(() => {
  69. this.searchRequestMaterial()
  70. this.scaleValue = 1; // 0.2秒后恢复
  71. const changed = this.workOrders[this.index].workOrderState !== "已完成";
  72. this.workOrders[this.index].workOrderState = "已完成";
  73. // 只有状态确实变化时才重新排序
  74. if (changed) {
  75. this.workOrders = this.workOrders.slice().sort((a) =>
  76. a.workOrderState === "已完成" ? 1 : -1
  77. );
  78. }
  79. }, 200);
  80. })
  81. }
  82. }
  83. @CustomDialog
  84. export struct MaterialNotificationDialog {
  85. private scrollerForList: Scroller = new Scroller()
  86. @Link selectWorkOrder:WorkOrderInfo
  87. @Link workOrders: WorkOrderInfo[]
  88. @State notificationList :NotificationInfo[]=[]
  89. //@Link selectWorkOrder: WorkOrderInfo
  90. // 选中回调函数
  91. controller: CustomDialogController
  92. searchRequestMaterial: () => void = () => {}
  93. loadNotificationList=async()=>{
  94. this.notificationList = await WmsRequest.post('/api/v1/sys/message/list', {
  95. type:2
  96. } as RequestParamModel) as NotificationInfo[]
  97. console.info("testtag1+"+JSON.stringify(this.notificationList))
  98. }
  99. async aboutToAppear() {
  100. console.info("testtag1+11111")
  101. this.workOrders = this.workOrders
  102. .slice()
  103. .sort((a) => a.workOrderState === "已完成" ? 1 : -1);
  104. }
  105. build() {
  106. Column() {
  107. Column(){
  108. Text('叫料通知')
  109. .fontColor($r('app.color.FFFFFF'))
  110. .fontSize($r('app.float.fontSize_38'))
  111. }.height('6%')
  112. .justifyContent(FlexAlign.Center)
  113. Column() { // 订单列表
  114. List({ space: 8,scroller:this.scrollerForList }) {
  115. ForEach(this.workOrders, (item: WorkOrderInfo, index) => {
  116. ListItem() {
  117. MaterialNotificationItem({
  118. item:item,
  119. index:index,
  120. workOrders:this.workOrders,
  121. searchRequestMaterial:this.searchRequestMaterial
  122. })
  123. }
  124. })
  125. }
  126. .width('90%')
  127. .flexGrow(1)
  128. }
  129. .width('100%')
  130. .height('80%')
  131. .margin({bottom:'2%',top:'1%'})
  132. Divider()
  133. .vertical(false)
  134. .strokeWidth(1)
  135. .color($r('app.color.15FFFFFF'))
  136. Column(){
  137. Text('关闭')
  138. .fontColor($r('app.color.60FFFFFF'))
  139. .fontSize($r('app.float.fontSize_30'))
  140. }
  141. .height('8%')
  142. .justifyContent(FlexAlign.Center)
  143. .width('100%')
  144. .onClick(
  145. () => this.controller.close()
  146. )
  147. }
  148. .height('80%')
  149. .width('60%')
  150. .backgroundColor($r('app.color.2A2A2A'))
  151. .justifyContent(FlexAlign.End)
  152. .borderColor($r('app.color.000000'))
  153. .borderWidth(1)
  154. .borderRadius($r('app.float.virtualSize_16'))
  155. }
  156. }
  157. @CustomDialog
  158. export struct MaterialRequestDialog {
  159. private scrollerForList: Scroller = new Scroller()
  160. @State materialData: DemandMaterial[] = [
  161. {materialName: 'PCBA电路板-SADD1231241142324233231233234', materialType: '12322221232321222332211233', inBoundNum: 11, planNum: 20 },
  162. {materialName: 'PCBA电路板-SADD1231241142324233231233234', materialType: '12322221232321222332211233', inBoundNum: 11, planNum: 20 },
  163. {materialName: 'PCBA电路板-SADD1231241142324233231233234', materialType: '12322221232321222332211233', inBoundNum: 11, planNum: 20 },
  164. {materialName: 'PCBA电路板-SADD1231241142324233231233234', materialType: '12322221232321222332211233', inBoundNum: 11, planNum: 20 },
  165. {materialName: 'PCBA电路板-SADD1231241142324233231233234', materialType: '12322221232321222332211233', inBoundNum: 11, planNum: 20 },
  166. {materialName: 'PCBA电路板-SADD1231241142324233231233234', materialType: '12322221232321222332211233', inBoundNum: 11, planNum: 20 },
  167. {materialName: 'PCBA电路板-SADD1231241142324233231233234', materialType: '12322221232321222332211233', inBoundNum: 11, planNum: 20 },
  168. {materialName: 'PCBA电路板-SADD1231241142324233231233234', materialType: '12322221232321222332211233', inBoundNum: 11, planNum: 20 },
  169. {materialName: 'PCBA电路板-SADD1231241142324233231233234', materialType: '12322221232321222332211233', inBoundNum: 11, planNum: 20 },
  170. {materialName: 'PCBA电路板-SADD1231241142324233231233234', materialType: '12322221232321222332211233', inBoundNum: 11, planNum: 20 },
  171. {materialName: 'PCBA电路板-SADD1231241142324233231233234', materialType: '12322221232321222332211233', inBoundNum: 11, planNum: 20 },
  172. ];
  173. //@Link selectWorkOrder: WorkOrderInfo
  174. @State selectedIndex: number = -1 // 添加选中索引状态
  175. // 选中回调函数
  176. private onSelect(index: number): void {
  177. this.selectedIndex = index
  178. //this.selectWorkOrder = this.workOrders[index]
  179. }
  180. controller: CustomDialogController
  181. onConfirm: () => void = () => {}
  182. build() {
  183. Column() {
  184. Column(){
  185. Text('物料需求')
  186. .fontColor($r('app.color.FFFFFF'))
  187. .fontSize($r('app.float.fontSize_38'))
  188. }.height('6%')
  189. .justifyContent(FlexAlign.Center)
  190. Column() {
  191. List({scroller:this.scrollerForList}) {
  192. ForEach(this.materialData, (item:DemandMaterial) => {
  193. ListItem() {
  194. Row() {
  195. Column(){
  196. Text(item.materialName)
  197. .fontSize($r('app.float.fontSize_16'))
  198. .fontColor($r('app.color.FFFFFF'))
  199. .width('90%')
  200. .textAlign(TextAlign.Start)
  201. Text(`型号: ${item.materialType}`)
  202. .fontSize($r('app.float.fontSize_16'))
  203. .fontColor($r('app.color.FFFFFF'))
  204. .width('90%')
  205. .textAlign(TextAlign.Start)
  206. .margin({top:'1%'})
  207. .fontWeight(FontWeight.Lighter)
  208. }
  209. Row(){
  210. Text(`${item.planNum}`)
  211. .fontSize($r('app.float.fontSize_38'))
  212. .fontColor($r('app.color.FFFFFF'))
  213. .width('10%')
  214. .textAlign(TextAlign.Start)
  215. }
  216. }.width('100%').justifyContent(FlexAlign.SpaceEvenly).height('12%')
  217. }
  218. })
  219. }
  220. .width('90%')
  221. .height('100%')
  222. .divider({
  223. strokeWidth: 1,
  224. color: $r('app.color.20FFFFFF')
  225. })
  226. }
  227. .width('100%')
  228. .height('80%')
  229. .margin({bottom:'2%',top:'1%'})
  230. Divider()
  231. .vertical(false)
  232. .strokeWidth(1)
  233. .color($r('app.color.15FFFFFF'))
  234. Column(){
  235. Text('关闭')
  236. .fontColor($r('app.color.60FFFFFF'))
  237. .fontSize($r('app.float.fontSize_30'))
  238. }
  239. .width('100%')
  240. .height('8%')
  241. .justifyContent(FlexAlign.Center)
  242. .onClick(
  243. () => this.controller.close()
  244. )
  245. }
  246. .height('80%')
  247. .width('30%')
  248. .backgroundColor($r('app.color.2A2A2A'))
  249. .justifyContent(FlexAlign.End)
  250. .borderColor($r('app.color.000000'))
  251. .borderWidth(1)
  252. .borderRadius($r('app.float.virtualSize_16'))
  253. }
  254. }