小小儁爺
2025-05-23 d26ff568b097248861a6cbc13bcf2acc88a54524
pages/sbgl/wxsq.vue
@@ -3,148 +3,68 @@
      <page-nav title="设备维修申请"></page-nav>
      <view v-show="topContent.length===0">
      <view v-if="purchorderArrAll.length>0">
         <!-- <view class="mainContent" :style="{maxHeight: '1340rpx',overflow: 'scroll',padding:0}"> -->
         <!-- #ifdef H5 -->
         <u--input prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" placeholder="输入设备/工位"
            clearable border="surround" @clear='inputBoxValueClear' v-model="inputBoxValue"
            @change="changeInputBoxValue">
            <template slot="suffix">
               <u-icon name="scan" color="#909399" size="24" @click="topScanClick"></u-icon>
            </template>
         </u--input>
         <!-- #endif -->
         <!-- #ifdef APP-PLUS -->
         <u-input prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" placeholder="输入设备/工位"
            clearable border="surround" @clear='inputBoxValueClear' v-model="inputBoxValue"
            @change="changeInputBoxValue">
            <template slot="suffix">
               <u-icon name="scan" color="#909399" size="24" @click="topScanClick"></u-icon>
            </template>
         </u-input>
         <!-- #endif -->
         <u-alert :title="'设备/工位数(共'+title+'个)'" type="primary"></u-alert>
         <u-radio-group v-model="radioValue" iconPlacement="right" @change="radioValueClick" class="radioGroupClass">
            <view v-for="(item,index) in purchorderArr" :key="item.code">
               <!-- @click="radioValueClick(item.code)" -->
               <view>
                  <u-radio activeColor="red" size="18" labelSize='18' :name='item.code' :key="item.code"
                     :label="item.code+'/'+item.name"></u-radio>
               </view>
               <u-line v-if="index!==purchorderArr.length-1" color="#2979ff"></u-line>
            </view>
         </u-radio-group>
         <view class="footer" style="min-height:62rpx;">
            <u-button type="primary" size='large' :hairline="true" @click="navigateTo" text="下一步"></u-button>
         </view>
         <!-- </view> -->
      </view>
      <view v-if="purchorderArrAll.length===0">
         <div class="sacnBody">
            <div class="scanImg" @click="topScanClick"></div>
            <div class="scanText">扫描维修工位</div>
            <div class="boxImg"></div>
            <div class="scanText">暂无设备/工位</div>
         </div>
      </view>
      <view v-show="topContent.length!==0">
         <view class="mainContent">
            <view>
               <u-gap height="10" bgColor="#eff0f1"></u-gap>
               <view class="head" style="max-height: 370rpx;overflow:scroll;">
                  <view class="head_block">
                     <view class="head_left">
                        <view class="head_bar"></view>
                        <view class="head_title">
                           扫描维修工位
                        </view>
                     </view>
                     <view class="marginRight20">
                        <u-icon name="scan" @click="topScanClick" color="red" size="28"></u-icon>
                     </view>
                  </view>
                  <view class="marginTop20 marginLeft20 marginRight20 flex_column">
                     <!-- <u-radio-group class=""> -->
                     <view class="marginBottom20 flex_between" @click="groupChange(item.code)"
                        v-for="item in topContent" :key="item.code">
                        <view style="display: flex;">
                           <view class="flex_column titleFont">
                              <view>工位编码:</view>
                              <view>工位名称:</view>
                              <view>生产车间:</view>
                           </view>
                           <view class="flex_column contentFont">
                              <view>{{item.code}}</view>
                              <view>{{item.name}}</view>
                              <view>{{item.wksp_name}}</view>
                           </view>
                        </view>
                        <!--    <u-radio size='40' :key="item.code" :name="item.code"
                              @change="groupChange(item.code)" activeColor="red"></u-radio> -->
                     </view>
                     <!-- </u-radio-group> -->
                  </view>
               </view>
               <u-gap height="10" bgColor="#eff0f1"></u-gap>
               <view class="head" style="padding-bottom: 10rpx;">
                  <view class="head_block" style="margin-bottom: 10rpx;margin-top:20rpx;">
                     <view class="head_left">
                        <view class="head_bar"></view>
                        <view class="head_title">
                           故障来源
                        </view>
                     </view>
                     <view class="marginRight20" style="width: 200rpx;">
                        <uni-data-select v-model="selectValue" :clear="false" :localdata="selectRange"
                           @change="selectChange">
                        </uni-data-select>
                     </view>
                  </view>
               </view>
               <u-gap height="10" bgColor="#eff0f1"></u-gap>
               <view class="head" style="padding-bottom: 10rpx;">
                  <view class="head_block" style="margin-bottom: 10rpx;margin-top:20rpx;">
                     <view class="head_left">
                        <view class="head_bar"></view>
                        <view class="head_title">
                           故障描述
                        </view>
                     </view>
                  </view>
                  <view class='inputClass  contentFont' style="margin: 0 20rpx; width: 95%;">
                     <u--textarea placeholder="请输入" confirm-type="send" border="surround" height='100'
                        v-model="descMessage">
                     </u--textarea>
                  </view>
                  <view style="display: flex;">
                     <view v-for="(pic,index) in fileList" :key="pic.name">
                        <view style="margin: 20rpx 0rpx 20rpx 20rpx;position: relative;">
                           <u-icon name="close" color="#fff" size="13"
                              style="position: absolute;z-index: 10;right: 0;background-color: black;border-radius:50%;"
                              @click="deletePic(pic)"></u-icon>
                           <image :src="pic.uri" @click="imgPreview(pic)" class="upLoadImg"></image>
                        </view>
                     </view>
                     <image v-if="fileList.length<3" src="../../static/img/uploadImg.png" style="width: 100rpx;height: 100rpx;border: 1rpx solid #eff0f1;border-radius: 20rpx;
                     margin: 20rpx;padding: 30rpx;
                     " @click="selectPics">
                  </view>
               </view>
            </view>
         </view>
         <u-button size="large" :loading="isDisabledSubmitButton" loadingText="正在提交,请稍等..." type="primary"
            @click="submit" :disabled="descMessage.toString().length===0" text="确认提交">
         </u-button>
      </view>
      <scan-code></scan-code>
   </view>
</template>
<script>
   import {
      MaintainScanDeviceApplyQrCodeData,
      MaintainScanDeviceApplySave
   } from '../../config/api.js'
   import {
      data
   } from '../../uni_modules/uview-ui/libs/mixin/mixin.js';
   import scanCode from '@/components/scan-code/scan-code.vue'
      EqpPermissions
   } from '../../config/api.js';
   export default {
      components: {
         scanCode
      },
      onLoad(option) {
         const _this = this
         uni.$off('scancodedate') // 每次进来先 移除全局自定义事件监听器
         uni.$on('scancodedate', function(content) {
            console.log("扫描到的内容为:", content)
            _this.getMaintainScanDeviceApplyQrCodeData(content)
         })
      },
      onLoad(option) {},
      onPullDownRefresh() {
         setTimeout(() => {
            this.init(() => {
@@ -152,102 +72,63 @@
            })
         }, 1000);
      },
      data() {
         return {
            isDisabledSubmitButton: false,
            topContent: [], //扫描保养工位所带出来的内容
            centerContent: [], //保养项目内容
            scanContent: '', //扫描扫出来的值
            // radioValue: '', //单选框的值
            inputBoxValue: '', //输入框值
            selectValue: 'A',
            selectRange: [{
               value: 'A',
               text: '设备点检'
            }, {
               value: 'B',
               text: '设备保养'
            }, {
               value: 'C',
               text: '安灯呼叫'
            }, {
               value: 'D',
               text: '手工'
            }],
            descMessage: '', //故障描述
            title: 0,
            imgPreviewSrcs: [], //图片预览src
            fileList: [], //图片数组
            radioValue: '',
            purchorderArr: [],
            purchorderArrAll: []
         }
      },
      created() {
         // const a = [{
         //    name: 1
         // }]
         // const b = [{
         //    name: 1
         // }]
         // console.log([...a, ...b])
      },
      mounted() {
         this.init()
         // this.getMaintainScanDeviceApplyQrCodeData('101')
         this.getEqpPermissions()
      },
      methods: {
         // 选择图片
         selectPics() {
            var that = this;
            uni.chooseImage({
               count: 3,
               success: (res) => {
                  const files = res.tempFiles;
                  for (let i = 0; i < files.length; i++) {
                     let obj = new Object();
                     obj.name = 'photo' + i + new Date().getTime();
                     obj.uri = files[i].path;
                     that.fileList.push(obj);
                     if (obj.src == null || obj.src == '' || obj.src == undefined) {
                        that.imgPreviewSrcs.push(obj.uri)
                     } else {
                        that.imgPreviewSrcs.push(obj.src)
                     }
                  }
               }
            })
         },
         // 预览图片
         imgPreview(img) {
            uni.previewImage({
               current: this.fileList.findIndex(i => i.name === img.name),
               indicator: "number",
               loop: true,
               urls: this.imgPreviewSrcs
            })
         },
         // 删除图片
         deletePic(img) {
            console.log(img)
            this.fileList = this.fileList.filter(i => i.name !== img.name)
            this.imgPreviewSrcs = this.imgPreviewSrcs.filter(i => i !== img.uri)
         },
         init() {
            uni.stopPullDownRefresh();
         },
         changeInputBoxValue(val) {
            this.purchorderArr = this.purchorderArrAll.filter((p) => {
               return p.code.indexOf(val) !== -1
            })
         selectChange(val) {
            console.log(val)
            if (this.purchorderArr.length > 0) {
               this.radioValue = this.purchorderArr[0].code
            }
         },
         // 扫码工位  的扫码框点击
         topScanClick() {
            // if (this.topContent.length > 0) {
            //    return uni.$u.toast('请先提交此维修申请!')
            // }
         inputBoxValueClear() {
            this.inputBoxValue = ''
         },
         radioValueClick(val) {
            console.log(val)
            this.radioValue = val
         },
         navigateTo() {
            uni.navigateTo({
               url: './wxsq2?code=' + this.radioValue
            });
         },
         // 扫码框点击
         topScanClick() {
            let that = this;
            uni.scanCode({
               onlyFromCamera: true,
               // scanType: ['barCode', 'qrCode'],
@@ -256,18 +137,7 @@
                  console.log('条码类型:' + res.scanType);
                  console.log('条码内容:' + res.result);
                  that.scanContent = res.result;
                  let flag = false
                  that.topContent.forEach(item => {
                     if (item.code === res.result) {
                        flag = true
                     }
                  })
                  if (flag) {
                     that.$u.toast('此条码已扫描,已在列表中!')
                  } else {
                     //处理扫码事件
                     that.getMaintainScanDeviceApplyQrCodeData(that.scanContent);
                  }
                  that.changeInputBoxValue(that.scanContent);
               },
               complete: function(res) {
@@ -280,110 +150,18 @@
            });
         },
         // 获取维修工位
         async getMaintainScanDeviceApplyQrCodeData(val) {
            const data = {
               eqpcode: val
         async getEqpPermissions() {
            const res = await EqpPermissions()
            this.purchorderArrAll = res.data
            this.purchorderArr = res.data
            this.title = res.data.length
            this.radioValue = res.data[0].code
            }
            const res = await MaintainScanDeviceApplyQrCodeData(data)
            if (res.code === '200') {
               this.topContent = []
               this.topContent.unshift(res.data[0])
            }
         },
         // 确认提交按钮
         async submit() {
            const header = {
               // 'Content-Type': 'multipart/form-data',
               // 'Content-Type': 'application/x-www-form-urlencoded',
               'Token': uni.getStorageSync('Token')
               // 'rediskey': uni.getStorageSync('rediskey'),
               // 'admin': uni.getStorageSync('usercode'),
               // 'username': encodeURIComponent(uni.getStorageSync('username')),
               // 'navTabId': uni.getStorageSync('usercode'),
               // 'userid': uni.getStorageSync('userid'),
               // 'guid': uni.getStorageSync('guid'),
               // 'usertype': 'APP'
            }
            /*
               在电脑上请求是需要H5的代码
               手机上请求是需要APP-PLUS的代码
            */
            // #ifdef H5
            // console.log('H5')
            // let formData = new FormData()
            // formData.append("username", uni.getStorageSync('username'))
            // formData.append("eqpcode", this.topContent[0].code)
            // formData.append("wkshpcode", this.topContent[0].wksp_code)
            // formData.append("faultsourcecode", this.selectValue)
            // formData.append("faultdescr", this.descMessage)
            // this.fileList.forEach((item, index) => {
            //    formData.append('files1', item.file)
            // })
            // MaintainScanDeviceApplySave(formData).then(res => {
            //    console.log(res, 1)
            // })
            // #endif
            // #ifdef APP-PLUS ||MP
            let formData = {
               eqpcode: this.topContent[0].code,
               wkshpcode: this.topContent[0].wksp_code,
               faultsourcecode: this.selectValue,
               faultdescr: this.descMessage,
            }
            console.log(formData)
            console.log(this.fileList, 'fileList')
            this.isDisabledSubmitButton = true
            uni.uploadFile({
               url: this.$baseUrl + '/DeviceManager/MaintainScanDeviceApplySave',
               files: this.fileList.length === 0 ? [{
                  uri: '/'
               }] : this.fileList,
               // files: [{"uri": "/"   }],
               header: header,
               formData: formData,
               success: (res) => {
                  // console.log(res, '1')
                  let result = JSON.parse(res.data)
                  if (res.statusCode == 200 && result.code == '200') {
                     uni.$u.toast('提交成功!')
                     this.fileList = []
                     this.imgPreviewSrcs = []
                     this.descMessage = ''
                     this.topContent = []
                     this.centerContent = []
                  } else {
                     uni.$u.toast(result.Message)
                  }
                  this.isDisabledSubmitButton = false
               },
               fail(res) {
                  // console.log(res, '1')
                  uni.$u.toast('提交失败!')
                  this.isDisabledSubmitButton = false
               },
            })
            // #endif
         },
      }
   }
</script>
@@ -395,23 +173,33 @@
      display: block;
   }
   ::v-deep .uicon-camera-fill {
      font-size: 60rpx !important;
   .u-input--square {
      margin: 20rpx 10rpx;
      border-radius: 40rpx;
      background-color: #fff;
      border: 1px solid #c8c8c8;
   }
   .uploader {
      /deep/.u-add-tips {
         display: none;
      }
   ::v-deep .u-alert__text--primary--light {
      margin-bottom: 0;
      font-size: 32rpx !important;
   }
   ::v-deep .uni-progress-bar {
      background-color: transparent !important;
   .radioGroupClass {
      display: flex;
      flex-direction: column;
      background-color: #fff;
      overflow-y: auto;
      max-height: 1040rpx;
      margin-top: 20rpx;
   }
   .upLoadImg {
      width: 160rpx;
      height: 160rpx;
      border-radius: 20rpx;
   ::v-deep .u-radio-label--right {
      height: 90rpx;
      line-height: 90rpx;
      width: 92%;
      margin-left: 4%;
      // padding: 0 50rpx;
   }
</style>