| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481 |
- //工序(计时)报工
- import ProcessRequest from '../common/util/request/ProcessRequest'
- import ProcessInfo from '../viewmodel/process/ProcessInfo'
- import ReporterInfo from '../viewmodel/process/ReporterInfo'
- import ReportInfo from '../viewmodel/process/ReporterInfo'
- import TaskSeqVO from '../viewmodel/process/TaskSeqInfo'
- import RequestParamModel from '../viewmodel/RequestParamModel'
- import WorkOrderInfo from '../viewmodel/WorkOrderInfo'
- import promptAction from '@ohos.promptAction'
- import ProcessReportTimeBased from '../viewmodel/process/ProcessReportTimeBased'
- import { BindTaskSeq } from '../viewmodel/process/BindTaskSeq'
- import preferencesUtil from '../common/util/PerferencesUtil'
- import CommonConstants from '../common/constants/CommonConstants'
- @CustomDialog
- export struct ReportTimeBasedDialog {
- controller: CustomDialogController
- private scrollerList: Scroller = new Scroller()
- //选中的工序id
- @Link selectOperationId: string
- //从首页传来的工单
- @Link selectWorkOder: WorkOrderInfo
- // 当前生产过程
- @Link process: ProcessInfo
- //查询报工
- @Link reporterList: ReportInfo[]
- //工序名字
- selectOperationName: string = ''
- //当前工序已报工数量
- @State reportedNum: number = 0
- //计划报工数量
- @State planReportNum: number = 0
- // 记录当前点击的报工人索引
- @State currentReporterIndex: number = 0;
- //当前工位
- @Consume('currentStationId') currentStationId: string
- // 当前登录用户名称
- @Consume('currentUserName') userName: string
- // 当前登录用户名称
- @Consume('currentUserId') currentUserId: number
- @Consume ('bindTaskSeq') bindTaskSeq: BindTaskSeq[]
- // 开工时间
- startWorkTime: string = ''
- //选择报工数量
- onSelectReportNum: (index:number) => void = () => {}
- //选择不良品数量
- onSelectDefectNum: (index:number) => void = () => {}
- //选择用户用时占比
- onSelectWorkHourRate: (index:number) => void = () => {}
- //选择报工人
- onSelectReporter: (index:number) => void = () => {}
- // 报工后清除相关数据
- clearSelectData: () => void = () => {}
- //加载第一个报工人(无法删除)
- loadFirstReporter=async ()=>{
- if (this.reporterList.length > 0) {
- return
- }
- const firstReporter: ReporterInfo = {}
- firstReporter.userName = this.userName
- firstReporter.userId = this.currentUserId.toString()
- firstReporter.workingHoursRate = 1
- this.reporterList.push(firstReporter)
- }
- async aboutToAppear() {
- this.loadFirstReporter()
- // 查询所有流转卡号
- let res = await ProcessRequest.post('/api/v1/plan/task/list', {
- stationId: this.currentStationId,
- workOrderCode: this.selectWorkOder.workOrderCode!,
- operationId: this.selectOperationId
- } as RequestParamModel) as TaskSeqVO[];
- if (!res || res.length <= 0) {
- return
- }
- this.planReportNum = res.length
- // 计算已报工数量
- let num: number = 0
- for (const element of res) {
- if (element.state! === '2') {
- num++
- }
- }
- this.reportedNum = num
- }
- build() {
- Column() {
- Column() {
- Text('工序报工')
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_30'))
- }
- .height('10%')
- .width('100%')
- .justifyContent(FlexAlign.Center)
- Column(){
- Row(){
- Column({space:3}){
- Text(this.selectWorkOder.materialName)
- .fontSize($r('app.float.fontSize_24'))
- .fontColor($r('app.color.FFFFFF'))
- Text(this.selectWorkOder.materialCode)
- .fontSize($r('app.float.fontSize_12'))
- .fontColor($r('app.color.FFFFFF'))
- .fontWeight(FontWeight.Lighter)
- Row(){
- Text('工单 ')
- .fontSize($r('app.float.fontSize_16'))
- .fontColor($r('app.color.FFFFFF'))
- .fontWeight(FontWeight.Lighter)
- Text(this.selectWorkOder.workOrderCode)
- .fontSize($r('app.float.fontSize_16'))
- .fontColor($r('app.color.FFFFFF'))
- .fontWeight(FontWeight.Bold)
- }
- }
- .height('100%')
- .width('30%')
- .justifyContent(FlexAlign.End)
- .alignItems(HorizontalAlign.Start)
- Row(){
- Text('工序 ')
- .fontSize($r('app.float.fontSize_16'))
- .fontColor($r('app.color.FFFFFF'))
- .fontWeight(FontWeight.Lighter)
- Text(this.selectOperationName)
- .fontSize($r('app.float.fontSize_16'))
- .fontColor($r('app.color.FFFFFF'))
- .fontWeight(FontWeight.Bold)
- }
- .height('100%')
- .width('40%')
- .justifyContent(FlexAlign.Center)
- .alignItems(VerticalAlign.Bottom)
- Column(){
- Row(){
- Text(`${this.reportedNum}/`)
- .fontSize($r('app.float.fontSize_38'))
- .fontColor($r('app.color.FFFFFF'))
- Text(`${this.planReportNum}`)
- .fontSize($r('app.float.fontSize_38'))
- .fontColor($r('app.color.60FFFFFF'))
- }
- Text('当前工序已报工/计划')
- .fontSize($r('app.float.fontSize_12'))
- .fontColor($r('app.color.FFFFFF'))
- .fontWeight(FontWeight.Lighter)
- }
- .height('100%')
- .width('30%')
- .justifyContent(FlexAlign.End)
- .alignItems(HorizontalAlign.End)
- }
- .height('14.4%')
- .width('100%')
- .alignItems(VerticalAlign.Bottom)
- Divider()
- .vertical(false)
- .width('100%')
- .strokeWidth(1)
- .color($r('app.color.15FFFFFF'))
- .height('3.1%')
- // 报工流水号、不良流水号选择
- Row({space: 5}) {
- Column() {
- Text(`报工数量`)
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_16'))
- .fontWeight(FontWeight.Regular)
- .height('27%')
- .margin({left:'2%'})
- Row(){
- Text(this.reporterList && this.reporterList[0].reportNum ? this.reporterList[0].reportNum! : '0')
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_24'))
- .margin({left:'8%'})
- .width('82%')
- .textAlign(TextAlign.Start)
- Text('>')
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_24'))
- .textAlign(TextAlign.Start)
- .width('10%')
- }
- .justifyContent(FlexAlign.Start)
- .borderRadius($r('app.float.virtualSize_16'))
- .height('73%')
- .backgroundColor($r('app.color.20FFFFFF'))
- .onClick(()=>{
- this.onSelectReportNum(0)
- })
- }
- .width('30%')
- .height('100%')
- .alignItems(HorizontalAlign.Start)
- Column(){
- Text(`不良品数量`)
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_16'))
- .fontWeight(FontWeight.Regular)
- .height('27%')
- .margin({left:'2%'})
- Row(){
- Text(this.reporterList && this.reporterList[0].defectNum ? this.reporterList[0].defectNum! : '0')
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_24'))
- .margin({left:'8%'})
- .width('82%')
- .textAlign(TextAlign.Start)
- Text('>')
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_24'))
- .textAlign(TextAlign.Start)
- .width('10%')
- }
- .justifyContent(FlexAlign.Start)
- .borderRadius($r('app.float.virtualSize_16'))
- .backgroundColor($r('app.color.20FFFFFF'))
- .height('73%')
- .onClick(()=>{
- this.onSelectDefectNum(0)
- })
- }
- .width('30%')
- .alignItems(HorizontalAlign.Start)
- .height('100%')
- Blank()
- Text('开工时间:' +this.startWorkTime)
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_12'))
- .fontWeight(FontWeight.Lighter)
- }
- .width('100%')
- .height('17.2%')
- Row().height('7.9%')
- // 添加报工人
- Row(){
- Image($r('app.media.general_create'))
- .width($r('app.float.virtualSize_24'))
- .height($r('app.float.virtualSize_24'))
- .fillColor($r('app.color.0A84FF'))
- Text('添加报工人')
- .fontColor($r('app.color.0A84FF'))
- .fontSize($r('app.float.fontSize_24'))
- .margin({left:'4%'})
- }
- .height('8.8%')
- .width('14%')
- .justifyContent(FlexAlign.Center)
- .backgroundColor($r('app.color.20FFFFFF'))
- .borderRadius($r('app.float.virtualSize_16'))
- .onClick(() => {
- const newReporter: ReportInfo = {}
- // 默认占比为剩余占比
- if (this.reporterList && this.reporterList.length > 0) {
- let rateTotal: number = 1
- for (const element of this.reporterList) {
- if (element.workingHoursRate && element.workingHoursRate > 0) {
- rateTotal -= element.workingHoursRate
- }
- }
- newReporter.workingHoursRate = rateTotal
- }
- this.reporterList.push(newReporter)
- })
- Column(){
- List({space: 8, scroller: this.scrollerList}) {
- ForEach(this.reporterList, (item: ReporterInfo, index: number) => {
- ListItem() {
- Row(){
- Column(){
- Text(`报工人${index+1}`)
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_16'))
- .fontWeight(FontWeight.Regular)
- .height('30%')
- .margin({left:'2%'})
- Row(){
- Text(item.userName)
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_24'))
- .margin({left:'8%'})
- .width('82%')
- .textAlign(TextAlign.Start)
- Text('>')
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_24'))
- .textAlign(TextAlign.Start)
- .width('10%')
- }
- .justifyContent(FlexAlign.Start)
- .borderRadius($r('app.float.virtualSize_16'))
- .height('70%')
- .enabled(index!=0)
- .backgroundColor($r('app.color.20FFFFFF'))
- .onClick(()=>{
- this.onSelectReporter(index)
- this.currentReporterIndex = index;
- })
- }
- .width('29%')
- .height('100%')
- .alignItems(HorizontalAlign.Start)
- Column(){
- Text(`用时占比`)
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_16'))
- .fontWeight(FontWeight.Regular)
- .height('30%')
- .margin({left:'2%'})
- Row(){
- Text(item.workingHoursRate ? item.workingHoursRate * 100 + '%' : '0%')
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_24'))
- .margin({left:'8%'})
- .width('82%')
- .textAlign(TextAlign.Start)
- Text('>')
- .fontColor($r('app.color.FFFFFF'))
- .fontSize($r('app.float.fontSize_24'))
- .textAlign(TextAlign.Start)
- .width('10%')
- }
- .justifyContent(FlexAlign.Start)
- .borderRadius($r('app.float.virtualSize_16'))
- .height('70%')
- .backgroundColor($r('app.color.20FFFFFF'))
- .onClick(()=>{
- this.onSelectWorkHourRate(index)
- })
- }
- .width('29%')
- .height('100%')
- .alignItems(HorizontalAlign.Start)
- .margin({left:'2%',right:'2%'})
- Blank()
- if(index > 0) {
- 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'))
- .margin({top:'35%'})
- .onClick(()=>{
- this.reporterList.splice(index,1)
- })
- }
- .width('9%')
- .alignItems(HorizontalAlign.Center)
- .height('100%')
- }
- }
- .height('100%')
- .width('100%')
- }
- .height('40.7%')
- .width('100%')
- })
- }
- .width('100%')
- .height('87%')
- }
- .height('48.6%')
- .width('100%')
- .justifyContent(FlexAlign.Center)
- }
- .justifyContent(FlexAlign.Start)
- .alignItems(HorizontalAlign.Start)
- .width('96%')
- .height('82.7%')
- 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(async () => {
- if (!this.process || !this.process.id) {
- promptAction.showToast({
- message: '请先工序开工',
- duration: 2000
- });
- return;
- }
- let rateTotal = 0
- for (const reporter of this.reporterList) {
- if (!reporter.workingHoursRate) {
- promptAction.showToast({
- message: `请给${reporter.userName!}选择用时占比`,
- duration: 2000
- });
- return;
- }
- rateTotal += reporter.workingHoursRate
- }
- if (rateTotal > 1) {
- promptAction.showToast({
- message: `用时占比超过100%,请修改`,
- duration: 2000
- });
- return;
- } else if (rateTotal < 1) {
- promptAction.showToast({
- message: `用时占比少于100%,请修改`,
- duration: 2000
- });
- return;
- }
- // 报工
- let seqNos: string [] = []
- if (this.bindTaskSeq[0].reportSeqNos) {
- seqNos = seqNos.concat(this.bindTaskSeq[0].reportSeqNos)
- }
- if (this.bindTaskSeq[0].defectSeqNos) {
- seqNos = seqNos.concat(this.bindTaskSeq[0].defectSeqNos)
- }
- if (seqNos.length <= 0) {
- promptAction.showToast({
- message: `请选择报工流水号或者不良流水号`,
- duration: 2000
- });
- return;
- }
- await ProcessRequest.post('/api/v1/process/info/reporting', {
- processId: this.process.id!,
- processUserReportList: this.reporterList,
- seqList: seqNos
- } as ProcessReportTimeBased)
- // 删除已报工的seqNo,并保存到数据库中
- let seqNoList: string[] = []
- seqNoList = await preferencesUtil.get(CommonConstants.PREFERENCE_INSTANCE_NAME, this.selectWorkOder.workOrderCode!, seqNoList)
- if (seqNoList.length === seqNos.length) {
- preferencesUtil.put(CommonConstants.PREFERENCE_INSTANCE_NAME, this.selectWorkOder.workOrderCode!, [])
- } else {
- seqNoList = seqNoList.filter(item => !seqNos.includes(item));
- await preferencesUtil.put(CommonConstants.PREFERENCE_INSTANCE_NAME, this.selectWorkOder.workOrderCode!, seqNoList)
- }
- this.clearSelectData()
- this.controller.close();
- })
- }
- }
- .width('100%')
- .height('7.3%')
- }
- .height('71%')
- .width('62%')
- .backgroundColor($r('app.color.2A2A2A'))
- .justifyContent(FlexAlign.End)
- .alignItems(HorizontalAlign.Center)
- .borderRadius($r('app.float.virtualSize_16'))
- }
- }
|