123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- import ProcessRequest from '../common/util/request/ProcessRequest'
- import MaterialInfo from '../viewmodel/MaterialInfo'
- import PageInfo from '../viewmodel/PageInfo'
- import RequestParamModel from '../viewmodel/RequestParamModel'
- @CustomDialog
- export struct LittleMaterialRequestDialog {
- private scrollerMaterial: Scroller = new Scroller()
- //物料配件列表
- @State materialTypesList: MaterialInfo[] = [];
- //监控选中的索引
- @State @Watch('onSelectedIndexesChange') selectedIndexes: number[] = [];
- //选中物料
- @State selectMaterials:MaterialInfo[]=[]
- //查询物料名字
- @State queryMaterialName: string = ''
- //物料map(名称,数量)
- @State materialNumMap: Record<string, number> = {};
- //实时更新选中物料
- onSelectedIndexesChange() {
- this.selectMaterials = this.selectedIndexes.map(index => this.materialTypesList[index]);
- }
- controller: CustomDialogController
- onConfirm: () => void = () => {}
- //加载物料配件类型
- loadMaterialTypes = async () => {
- let res = await ProcessRequest.post('/api/v1/base/material/page',
- {
- materialName: this.queryMaterialName
- } as RequestParamModel) as PageInfo;
- this.materialTypesList = res.records??[]
- //初始所有物料数量为0
- this.materialTypesList.forEach(item => {
- this.materialNumMap[item.materialName??''] = 0;
- });
- };
- private onDeleteMaterial(item: MaterialInfo) {
- // 找到物料在已选列表中的索引
- const selectedIndex = this.selectMaterials.findIndex(m => m.materialName === item.materialName);
- if (selectedIndex !== -1) {
- // 从已选列表中移除
- this.selectMaterials.splice(selectedIndex, 1);
- this.selectMaterials = [...this.selectMaterials]; // 触发状态更新
- // 找到物料在总列表中的索引
- const materialIndex = this.materialTypesList.findIndex(m => m.materialName === item.materialName);
- if (materialIndex !== -1) {
- // 从选中索引中移除
- this.selectedIndexes = this.selectedIndexes.filter(i => i !== materialIndex);
- }
- }
- }
- private onSelectMaterial(index: number) {
- if (this.selectedIndexes.includes(index)) {
- this.selectedIndexes = this.selectedIndexes.filter(i => i !== index);
- } else {
- this.selectedIndexes = [index, ...this.selectedIndexes];
- }
- }
- aboutToAppear(): void {
- this.loadMaterialTypes()
- }
- sendMaterialRequest=async()=>{
- let res = await ProcessRequest.post('/api/v1/process/vehicleOperation/sporadicCallItem',
- {
- // materialName: this.queryMaterialName
- } as RequestParamModel) as PageInfo;
- }
- build() {
- Column() {
- Column() {
- Text("零星叫料")
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_30'))
- }
- .height('8%')
- .width('100%')
- .justifyContent(FlexAlign.Center)
- Row(){
- Column() {
- Text("查询物料")
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_24'))
- Row() {
- TextInput({ text: this.queryMaterialName, placeholder: '输入物料名称' })
- .type(InputType.Normal)
- .placeholderFont({ size: $r('app.float.fontSize_16') })
- .placeholderColor($r('app.color.30FFFFFF'))
- .fontSize($r('app.float.fontSize_16'))
- .fontColor($r('app.color.FFFFFF'))
- .enableKeyboardOnFocus(false)
- .width('84%')
- .onChange((value: string) => {
- this.queryMaterialName = value
- this.loadMaterialTypes()
- })
- Row() {
- Image($r('app.media.process_search'))
- .width($r('app.float.virtualSize_48'))
- .height($r('app.float.virtualSize_48'))
- .fillColor($r('app.color.0A84FF'))
- .onClick(() => {
- this.loadMaterialTypes()
- })
- }
- .width('16%')
- .height('100%')
- .justifyContent(FlexAlign.Center)
- .borderRadius($r('app.float.virtualSize_16'))
- .backgroundColor($r('app.color.20FFFFFF'))
- }
- .height('8%')
- .width('60%')
- .margin({bottom:'2%',top:'2%'})
- .borderRadius($r('app.float.virtualSize_16'))
- .backgroundColor($r('app.color.000000'))
- List({ scroller: this.scrollerMaterial }) {
- ForEach(this.materialTypesList, (item: MaterialInfo, index) => {
- ListItem() {
- Row() {
- Column({space:5}){
- Text(`${item.materialName}`)
- .fontSize($r('app.float.fontSize_16'))
- .fontColor($r('app.color.FFFFFF'))
- Text(`${item.spec}`)
- .fontSize($r('app.float.fontSize_12'))
- .fontColor($r('app.color.FFFFFF'))
- .fontWeight(FontWeight.Lighter)
- }
- .width('90%')
- .height('100%')
- .justifyContent(FlexAlign.Center)
- .alignItems(HorizontalAlign.Start)
- Column(){
- Text(`${item.unitDictValue}`)
- .fontSize($r('app.float.fontSize_16'))
- .fontColor($r('app.color.FFFFFF'))
- .fontWeight(FontWeight.Lighter)
- }
- .width('10%')
- .height('100%')
- .justifyContent(FlexAlign.Center)
- }
- .height('90%')
- .width('95%')
- .margin({ left: '2%' })
- .justifyContent(FlexAlign.Center)
- }
- .height('10%')
- .width('100%')
- .margin({ bottom: 8})
- .borderRadius($r('app.float.virtualSize_16'))
- .backgroundColor(
- this.selectedIndexes.includes(index) ?
- $r('app.color.2030D158') :
- $r('app.color.20FFFFFF')
- )
- .border({
- width: this.selectedIndexes.includes(index) ? 2 : 0,
- color: this.selectedIndexes.includes(index) ?
- $r('app.color.2030D158') :
- $r('app.color.20FFFFFF')
- })
- .onClick(() => {
- this.onSelectMaterial(index)
- })
- })
- }
- .width('100%')
- .height('82%')
- }
- .width('50%')
- .alignItems(HorizontalAlign.Start)
- .justifyContent(FlexAlign.Start)
- .margin({left:'2%'})
- .height('100%')
- Image($r('app.media.arrow_right'))
- .width($r('app.float.virtualSize_48'))
- .height($r('app.float.virtualSize_48'))
- .fillColor($r('app.color.FFFFFF'))
- .margin({left:'2%',right:'2%'})
- Column() {
- Row(){
- Text("已选物料")
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_24'))
- }
- .width('100%')
- .height('6%')
- .justifyContent(FlexAlign.Start)
- List({ scroller: this.scrollerMaterial }) {
- ForEach(this.selectMaterials, (item: MaterialInfo) => {
- ListItem() {
- Column(){
- Row(){
- Column({space:5}){
- Text(`${item.materialName}`)
- .fontSize($r('app.float.fontSize_24'))
- .fontColor($r('app.color.FFFFFF'))
- Text(`${item.spec}`)
- .fontSize($r('app.float.fontSize_16'))
- .fontColor($r('app.color.FFFFFF'))
- .fontWeight(FontWeight.Lighter)
- }
- .width('86%')
- .alignItems(HorizontalAlign.Start)
- Column(){
- Image($r('app.media.process_delete_seq'))
- .width($r('app.float.virtualSize_48'))
- .height($r('app.float.virtualSize_48'))
- .fillColor($r('app.color.FF453A'))
- .onClick(()=>{
- this.onDeleteMaterial(item)
- })
- }
- .width('14%')
- .alignItems(HorizontalAlign.End)
- }
- .height('38%')
- Text(`数量(${item.unitDictValue})`)
- .fontSize($r('app.float.fontSize_16'))
- .fontColor($r('app.color.FFFFFF'))
- .margin({bottom:'1%'})
- .width('100%')
- .textAlign(TextAlign.Start)
- Column(){
- AddAndSubButton({
- materialNum:this.materialNumMap[item.materialName??''],
- onChange: (num: number) => {
- this.materialNumMap[item.materialName??''] = num
- }
- })
- }
- .height('52%')
- .width('100%')
- .margin({bottom:'2%'})
- }
- .height('100%')
- .width('100%')
- .alignItems(HorizontalAlign.Start)
- }
- .height('30%')
- .width('100%')
- .margin({ bottom: 8})
- })
- }
- .width('95%')
- .height('92%')
- .divider({
- strokeWidth:1,
- color:$r('app.color.15FFFFFF')
- })
- }
- .width('40%')
- .alignItems(HorizontalAlign.Start)
- .justifyContent(FlexAlign.Start)
- .height('100%')
- }
- .height('84%')
- .width('100%')
- Column() {
- Divider()
- .vertical(false)
- .strokeWidth(1)
- .color($r('app.color.15FFFFFF'))
- Row() {
- Row() {
- Text('取消')
- .fontColor($r('app.color.60FFFFFF'))
- .fontSize($r('app.float.fontSize_30'))
- }
- .justifyContent(FlexAlign.Center)
- .width('50%')
- .onClick(() => this.controller.close())
- Divider()
- .vertical(true)
- .strokeWidth(1)
- .color($r('app.color.15FFFFFF'))
- Row() {
- Text('发送叫料')
- .fontColor($r('app.color.007AFF'))
- .fontSize($r('app.float.fontSize_30'))
- }
- .justifyContent(FlexAlign.Center)
- .width('50%')
- .onClick(() => {
- this.controller.close();
- })
- }
- }
- .width('100%')
- .height('8%')
- }
- .height('71%')
- .width('62%')
- .backgroundColor($r('app.color.2A2A2A'))
- .justifyContent(FlexAlign.End)
- .alignItems(HorizontalAlign.Start)
- .borderColor($r('app.color.000000'))
- .borderWidth(1)
- .borderRadius($r('app.float.virtualSize_16'))
- }
- }
- @Component
- struct AddAndSubButton {
- @State addClick: number = 1
- @State subClick: number = 1
- @Prop materialNum: number
- onChange: (num: number) => void = () => {}
- handleValueChange(delta: number) {
- const newNum = this.materialNum + delta
- if (newNum >= 0) {
- this.onChange(newNum)
- }
- }
- build() {
- Row() {
- Row() {
- Button({ type: ButtonType.Normal }) {
- Image($r('app.media.process_material_subtraction'))
- .width('50%')
- .height('50%')
- .objectFit(ImageFit.Contain)
- .fillColor($r('app.color.FFFFFF'))
- }
- .width('100%')
- .height('100%')
- .backgroundColor($r('app.color.20FFFFFF'))
- .borderRadius($r('app.float.virtualSize_16'))
- .scale({ x: this.addClick, y: this.addClick })
- .animation({
- duration: 200,
- curve: Curve.Linear
- })
- .onClick(() => {
- this.addClick = 0.9;
- setTimeout(() => {
- this.addClick = 1;
- if(this.materialNum>0)
- {
- this.handleValueChange(-1)
- }
- }, 200);
- })
- }.width('22%')
- Row() {
- Text(String(this.materialNum))
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_38'))
- }
- .width('56%')
- .justifyContent(FlexAlign.Center)
- Row() {
- Button({ type: ButtonType.Normal }) {
- Image($r('app.media.process_material_add'))
- .width('50%')
- .height('50%')
- .objectFit(ImageFit.Contain)
- .fillColor($r('app.color.FFFFFF'))
- .borderRadius($r('app.float.virtualSize_16'))
- }
- .width('100%')
- .height('100%')
- .backgroundColor($r('app.color.20FFFFFF'))
- .borderRadius($r('app.float.virtualSize_16'))
- .scale({ x: this.subClick, y: this.subClick })
- .animation({
- duration: 200,
- curve: Curve.Linear
- })
- .onClick(() => {
- this.subClick = 0.9;
- setTimeout(() => {
- this.subClick = 1;
- this.handleValueChange(1)
- }, 200);
- })
- }.width('22%')
- }.width('100%')
- .height('100%')
- .backgroundColor($r('app.color.10FFFFFF'))
- .borderRadius($r('app.float.virtualSize_16'))
- }
- }
|