首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取此错误:无法读取未定义的属性'0‘

获取此错误:无法读取未定义的属性'0‘
EN

Stack Overflow用户
提问于 2019-04-17 06:28:19
回答 1查看 268关注 0票数 0

因此,我能够通过重构我的整个Javascript代码来解决异步调用的问题。它现在可以工作了,但每当我编辑修复,服务器告诉客户端再次请求修复信息时,我就会收到一个错误。错误消息是:“未捕获TypeError:无法读取未定义的属性'0‘”。我将继续并尽可能多地附加代码。

代码语言:javascript
复制
<template>
  <div>
    <div id="mainjob">
      <div>
        <div class="secondarycolor">
          <h5 id="jobheader"> Job Center </h5>
        </div>
        <div>
          <p class="secondarycolor">Filter By:</p>
        </div>
        <div class="row justify-center">
          <q-tabs color="secondary" align="justify" inverted v-model="selectedtab">
            <q-tab default name="searchbyid" label="Search by ID" slot="title" @select="findrepair()"/>
            <q-tab name="customfilter" label="Custom Filters" slot="title" @select="findrepair()"/>
            <q-tab name="notpickedup" label="Machines Not Picked Up" slot="title" @select="findrepair()"/>
            <q-tab-pane name="searchbyid">
              <div class="row justify-center" id="repairidbox">
                <q-input type="text" placeholder="Repair ID" @input="findrepair()" class="inputspace" v-model="repairid" color="secondary"/>
              </div>
            </q-tab-pane>
            <q-tab-pane name="customfilter">
              <div id="filterbox">
                <div id="selectbox">
                  <div  id="selectboxsub">
                    <div class="row">
                      <div>
                        <q-select
                          class="inputspace"
                          multiple
                          color="secondary"
                          filter
                          placeholder="Select Filters"
                          v-model="filtersselected"
                          :options="filteroptions"
                          @input="filterchanged()"
                          :display-value="`${filtersselected.length} filters selected`"
                        />
                      </div>
                      <div class="row">
                        <q-btn icon="clear" color="secondary" @click="clearfilters()" class="inputspace">
                          <q-tooltip anchor="bottom middle" self="top middle" :offset="[10, 10]" color="secondary" @click="showing = false">
                            Clear Filters
                          </q-tooltip>
                        </q-btn>
                      </div>
                    </div>
                  </div>
                </div>
                <div class="row justify-center" id="filterinput" v-if="filtersselected.length>0">
                  <div>
                    <q-input @input="findrepair()" type="text" placeholder="Customer First Name" color="secondary" v-model="fname" class="inputspace" id="fname" v-if="containsvar('cusfname')"/>
                    <q-input @input="findrepair()" type="text" placeholder="Customer Last Name" color="secondary" v-model="lname" class="inputspace" id="lname" v-if="containsvar('cuslname')"/>
                  </div>
                  <div>
                    <q-select
                      class="inputspace"
                      id="brand"
                      color="secondary"
                      filter
                      placeholder="Machine Brand"
                      v-model="brand"
                      :options="Brands"
                      @input="brandchanged(), findrepair()"
                      v-if="containsvar('brand')"
                    />
                    <q-select
                      class="inputspace"
                      id="color"
                      color="secondary"
                      filter
                      placeholder="Machine Color"
                      v-model="color"
                      :options="Colors"
                      @input="colorchanged(), findrepair()"
                      v-if="containsvar('color')"
                    />
                    <q-select
                      class="inputspace"
                      id="type"
                      color="secondary"
                      filter
                      placeholder="Machine Type"
                      v-model="type"
                      :options="Types"
                      @input="typechanged(), findrepair()"
                       v-if="containsvar('type')"
                    />
                    <q-input @input="findrepair()" type="text" placeholder="Model" color="secondary" v-model="model" class="inputspace" id="model"  v-if="containsvar('model')"/>
                  </div>
                  <div class="column">
                    <q-checkbox @input="findrepair()" label="Warranty" color="secondary" v-model="warranty" class="inputspace" id="warranty"  v-if="containsvar('warranty')"/>
                    <q-checkbox @input="findrepair()" label="Purchased Here" color="secondary" v-model="purchased" class="inputspace" id="purchased"  v-if="containsvar('purchased')"/>
                    <q-checkbox @input="findrepair()" label="Rush Service" color="secondary" v-model="rushservice" class="inputspace" id="rushservice"  v-if="containsvar('rushservice')"/>
                    <q-checkbox @input="findrepair()" label="Completed" color="secondary" v-model="completed" class="inputspace" id="completed"  v-if="containsvar('completed')"/>
                  </div>
                </div>
              </div>
            </q-tab-pane>
            <q-tab-pane name="notpickedup">
            </q-tab-pane>
          </q-tabs>
        </div>
        <div>
          <center v-if="jobarray.length==0">
            <h6 class="secondarycolor">No Results</h6>
          </center>
          <div class="row justify-center">
            <div class="row justify-center">
              <q-card color="secondary" dark class="q-ma-sm" v-for="(repair,index) in jobarray" :key="index">
                <q-card-title>
                  <i><span class="title"># </span></i>
                  <span class="title">{{ repair.RepairID }}</span>
                </q-card-title>
                <q-card-main>
                  <div class="row">
                    <div class="titles">
                      <span ><b>Name:</b></span><br>
                      <span><b>Phone Number:</b></span> <br>
                      <span><b>Brand:</b></span> <br>
                      <span><b>Type:</b></span> <br>
                      <span><b>Color:</b></span> <br>
                      <span><b>Model:</b></span> <br>
                      <span><b>Problem:</b></span> <br>
                      <span><b>Phone Number:</b></span> <br>
                      <span><b>Warranty:</b></span> <br>
                      <span><b>Purchased Here: </b></span> <br>
                      <span><b>Rush Service: </b></span> <br>
                      <span><b>Date Received: </b></span> <br>
                      <span><b>Received By: </b></span> <br>
                      <span><b>Status: </b></span> <br>
                      <span v-if="repair.Hours!=null"><b>Hours: </b></span> <br>
                      <span v-if="repair.Hours!=null"><b>Pick Up Date: </b></span> <br>
                    </div>
                    <div class="description">
                      <span>{{ repair.FirstName + " " + repair.LastName }}</span> <br>
                      <span>{{ repair.PhoneNumber }}</span> <br>
                      <span>{{ repair.Brand }}</span> <br>
                      <span>{{ repair.Type }}</span> <br>
                      <span>{{ repair.Color }}</span> <br>
                      <span>{{ repair.Model }}</span> <br>
                      <span>{{ repair.Problem }}</span> <br>
                      <span>{{ repair.PhoneNumber }}</span> <br>
                      <q-icon name="check_box" v-if="repair.Warranty==1" />
                      <q-icon name="check_box_outline_blank" v-if="repair.Warranty==0" /> <br>
                      <q-icon name="check_box" v-if="repair.Purchased==1" />
                      <q-icon name="check_box_outline_blank" v-if="repair.Purchased==0" /> <br>
                      <q-icon name="check_box" v-if="repair.RushService==1" />
                      <q-icon name="check_box_outline_blank" v-if="repair.RushService==0" /> <br>
                      <span> {{getdatestring(repair.DateReceived) }} </span> <br>
                      <span> {{ repair.Name }} </span> <br>
                      <span v-if="repair.Hours!=null"> Completed </span>
                      <span v-if="repair.Hours==null"> In Progress </span> <br> 
                      <span v-if="repair.Hours!=null"> {{repair.Hours}} </span> <br>
                      <span v-if="repair.Hours!=null&&repair.DatePickedUp!=null"> {{getdatestring(repair.DatePickedUp)}} </span>
                      <span v-if="repair.Hours!=null&&repair.DatePickedUp==null"> Pickup Pending </span> <br>
                    </div>
                  </div>
                </q-card-main>
                <q-card-separator />
                <q-card-actions>
                  <q-btn icon="playlist_add" class="inputspace" v-if="repair.Hours==null" @click="addpart(repair.RepairID)">
                    <q-tooltip anchor="bottom middle" self="top middle" :offset="[10, 10]" color="secondary" @click="showing = false">
                      Add Part
                    </q-tooltip>
                  </q-btn>
                  <q-btn icon="list_alt" color="secondary" class="inputspace" @click="getpartslist(repair.RepairID)">
                    <q-tooltip anchor="bottom middle" self="top middle" :offset="[10, 10]" color="secondary" @click="showing = false">
                      View All Parts
                    </q-tooltip>
                  </q-btn>
                  <q-btn icon="done" color="secondary" class="inputspace" v-if="repair.Hours==null" @click="completejob(repair.RepairID)">
                    <q-tooltip anchor="bottom middle" self="top middle" :offset="[10, 10]" color="secondary" @click="showing = false">
                      Complete Job
                    </q-tooltip>
                  </q-btn>
                  <q-btn icon="local_shipping" color="secondary" class="inputspace" v-if="repair.Hours!=null&&repair.DatePickedUp==null" @click="pickupmachinery(repair.RepairID)">
                    <q-tooltip anchor="bottom middle" self="top middle" :offset="[10, 10]" color="secondary" @click="showing = false">
                      Pick Up Machine
                    </q-tooltip>
                  </q-btn>
                </q-card-actions>
              </q-card>
            </div>
          </div>
        </div>
      </div>
      <q-dialog
        v-model="addpartdialog"
        prevent-close
        >
          <span slot="title">
            <span class="secondarycolor row justify-center"> Add Parts </span>
          </span>
          <template slot="message"> 
            <div class="row justify-center addpartborder">
              <div class="column addpartsideborder">
                <center><p class="secondarycolor">Part Number: </p></center>
                <q-input type="text" placeholder="Part Number" v-model="partnumber" color="secondary" class="inputspace"/>
              </div>
              <div class="column addpartsideborder">
                <center><p class="secondarycolor"> Quantity: </p></center>
                <q-input type="number" placeholder="Quantity" v-model="numquantity" color="secondary" class="inputspace"/>
              </div>
              <div class="column">
                <center><p class="secondarycolor"> Description: </p></center>
                <q-input type="text" placeholder="Part Description" v-model="partdescription" color="secondary" class="inputspace"/>
              </div>
            </div><center>
            <div>
              <q-btn label="Add Part" color="secondary" @click="addparts()" :disable="disableaddparts"/>
            </div></center>
          </template>
          <span slot="buttons" slot-scope="props">
            <span>
              <q-btn label="Done" color="secondary" @click="done()" class="row justify-center"/>
            </span>
          </span>
        </q-dialog>
        <q-dialog
          v-model="terminatejob"
          color="secondary"
          prevent-close
        >
          <span slot="title">
            <span class="secondarycolor row justify-center"> Complete Job </span>
          </span>
          <span slot="message">
            <div class="row justify-center">
              <div class="column">
                <span class="secondarycolor justify-center row"> Hours Worked: </span>
                <q-input type="text" placeholder="Hours" color="secondary" v-model="hours" class="inputspace"/>
                <span v-if="isNaN(hours)" class="error"> Cannot contain letters </span>
              </div>
            </div>
          </span>
          <span slot="buttons" slot-scope="props">
            <q-btn label="Submit" color="secondary" class="inputspace" @click="finishjob()" :disable="disablefinishbtn"/>
            <q-btn label="Cancel" color="secondary" class="inputspace" @click="hoursgoback()"/>
          </span>
        </q-dialog>
        <q-dialog
          v-model="pickup"
          color="secondary"
          prevent-close
        >
          <span slot="title">
            <span class="secondarycolor row justify-center"> Pick Up Machine </span>
          </span>
          <span slot="message">
            <div class="row justify-center">
              <div class="column">
                <span class="secondarycolor justify-center row"> Date Picked Up: </span>
                <q-datetime type="date" placeholder="Pick Up Date" color="secondary" v-model="pickupdate" class="inputspace"/>
              </div>
            </div>
          </span>
          <span slot="buttons" slot-scope="props">
            <q-btn label="Submit" color="secondary" class="inputspace" @click="pickupmachine()" :disable="disablepickupbtn"/>
            <q-btn label="Cancel" color="secondary" class="inputspace" @click="pickupgoback()"/>
          </span>
        </q-dialog>
    </div>
  </div>
</template>

<script>
import {mapState} from 'vuex'
var async = require('async')
export default {
  // name: 'ComponentName',
  created() {
    this.$Socket.emit('getinfo', (data) => {
        this.servercolors=data.colors
        this.serverbrands=data.brands
        this.servertypes=data.types
    })
    this.$Socket.on('updatecolor', ({colors}) => {
      this.servercolors=colors
    })
    this.$Socket.on('updatebrand', ({brands}) => {
      this.serverbrands=brands
    })
    this.$Socket.on('updatetype', ({types}) => {
      this.servertypes=types
    })
    this.$Socket.on('repairsupdated', () => {
      this.findrepair()
    })
  },
  mounted() {
    this.$nextTick (() => {
    })
  },
  data () {
    return {
      selectedtab: 'searchbyid',
      repairid: null,
      filtersselected: [],
      model: "",
      fname: "",
      lname: "",
      brand: null,
      color: null,
      type: null,
      warranty: false,
      purchased: false,
      rushservice: false,
      completed: false,
      servercolors: [],
      serverbrands: [],
      servertypes: [],
      filteroptions: [
        {
          label: "Select All",
          value: "selectall"
        },
        {
          label:"Customer First Name",
          value:"cusfname"
        },
        {
          label:"Customer Last Name",
          value:"cuslname"
        },
        {
          label:"Brand of Machine",
          value:"brand"
        },
        {
          label:"Type of Machine",
          value:"type"
        },
        {
          label:"Model of Machine",
          value:"model"
        },
        {
          label:"Color",
          value:"color"
        },
        {
          label:"Warranty",
          value:"warranty"
        },
        {
          label:"Purchased Here",
          value:"purchased"
        },
        {
          label:"Rush Service",
          value:"rushservice"
        },
        {
          label: "Completed Jobs",
          value: "completed"
        }
      ],
      partnumber: "",
      numquantity: 0,
      partdescription: "",
      addpartdialog: false,
      addpartrepairidchosen: null,
      addpartsuccess: false,
      partslistdialog: false,
      partslistrepairidchosen: null,
      partslist: [],
      terminatejob: false,
      hours: '0',
      finishjobrepairid: null,
      finishjobsuccess: false,
      pickupdate: null,
      pickup: false,
      pickuprepairid: null,
      pickupsuccess: false,
      jobarray: []
    }
  },
  methods: {
    pickupmachinery: function (id) {
      this.pickup=true
      this.pickuprepairid=id
    },
    pickupmachine: function () {
      this.$Socket.emit('pickupmachine', {
        RepairID: this.pickuprepairid,
        DatePickedUp: this.pickupdate
      }, ({authenticated}) => {
        if(authenticated==true)
        {
          this.pickupdate=""
          this.pickup=false
          this.pickupsuccess=true
          setTimeout( () => {this.pickupsuccess=false}, 1000)
        }
      })
    },
    pickupgoback: function () {
      this.pickup=false
      this.pickupdate=""
    },  
    completejob: function (id) {
      this.terminatejob=true
      this.finishjobrepairid=id
    },
    finishjob: function () {
      this.$Socket.emit('finishjob', {
        RepairID: this.finishjobrepairid,
        Hours: this.hours
      }, ({authenticated}) => {
        if(authenticated==true)
        {
          this.terminatejob=false
          this.finishjobsuccess=true
          this.hours='0'
          setTimeout( () => {this.finishjobsuccess=false}, 1000)
        }
      })
    },
    hoursgoback: function () {
      this.terminatejob=false
      this.hours='0'
    },
    partslistgoback: function () {
      this.partslistdialog=false
    },
    getpartslist: function (id) {
      this.partslistdialog=true
      this.partslistrepairidchosen=id
      this.$Socket.emit('getpartslist', {
        RepairID: this.partslistrepairidchosen
      }, (data) => {
        this.partslist=data
      })
    },
    addparts: function () {
      this.$Socket.emit('addpart', {
        RepairID: this.addpartrepairidchosen,
        PartNumber: this.partnumber,
        PartName: this.partdescription,
        Quantity: this.numquantity
      }, ({authenticated}) => {
        if(authenticated==true)
        {
          this.partdescription=""
          this.numquantity=0
          this.partnumber=""
          this.addpartsuccess=true
          setTimeout( () => {this.addpartsuccess=false}, 1000)
        }
      })
    },
    done: function () {
      this.partnumber=""
      this.numquantity=0
      this.addpartdialog=false
    },
    addpart: function (id) {
      this.addpartdialog=true
      this.addpartrepairidchosen=id
    },
    notpickedup: function () {

    },
    converttobool: function (num) {
      if(num==1)
      {
        return true
      }
      else
      {
        return false
      }
    },
    brandchanged: function () {
      if(this.brand=="none")
      {
        this.brand=null
      }
    },
    colorchanged: function () {
      if(this.color=="none")
      {
        this.color=null
      }
    },
    typechanged: function () {
      if(this.type=="none")
      {
        this.type=null
      }
    },
    clearfilters: function () {
      this.filtersselected=[]
      this.customfilters=[]
      this.clearforms()
      this.jobarray=[]
    },
    filterchanged: function () {
      if(this.containsvar("selectall"))
      {
        this.filtersselected=[]
        this.filtersselected.push("completed", "rushservice", "purchased", "warranty", "type", "color", "brand", "cusfname", "cuslname", "model")
      }
      this.findrepair()
      if(this.containsvar("cusfname")==false)
      {
        this.fname=""
      }
      if(this.containsvar("cuslname")==false)
      {
        this.lname=""
      }
      if(this.containsvar("model")==false)
      {
        this.model=""
      }
      if(this.containsvar("warranty")==false)
      {
        this.warranty=false
      }
      if(this.containsvar("type")==false)
      {
        this.type=null
      }
      if(this.containsvar("completed")==false)
      {
        this.completed=false
      }
      if(this.containsvar("rushservice")==false)
      {
        this.rushservice=false
      }
      if(this.containsvar("purchased")==false)
      {
        this.purchased=false
      }
      if(this.containsvar("brand")==false)
      {
        this.brand=null
      }
      if(this.containsvar("color")==false)
      {
        this.color=null
      }
    },
    containsvar: function (variable) {
      for(var x=0; x<this.filtersselected.length; x++)
      {
        if(this.filtersselected[x]==variable)
        {
          return true
        }
      }
      return false
    },
    clearforms: function () {
      this.fname= ""
      this.lname= ""
      this.brand= ""
      this.color= ""
      this.type= ""
      this.model=""
      this.warranty= false
      this.purchased= false
      this.rushservice= false
      this.completed= false
    },
    getdatestring: function (date) {
      var fulldate=date.slice(8, 10) + "/" + date.slice(5,7) + "/" + date.slice(0,4)
      return fulldate
    },
    findrepair: function () {
      var vm=this
      this.jobarray=[]
      if(this.selectedtab=="notpickedup")
      {
        vm.$Socket.emit('machinesnotpickedup', (data) => {
          this.findsalesreps(data)
        })
      }
      else if(this.selectedtab=="customfilter")
      {
        var array=[]
        if(vm.containsvar('cusfname'))
        {
          if(vm.fname!=''&&vm.fname!=null)
          {
            array.push({
              name: "FirstName",
              type: "text",
              table: "",
              value: vm.fname
            })
          }
        }
        if(vm.containsvar('cuslname'))
        {
          if(vm.lname!=''&&vm.lname!=null)
          {
            array.push({
              name: "LastName",
              type: "text",
              table: "",
              value: vm.lname
            })
          }
        }
        if(vm.containsvar('brand'))
        {
          if(vm.brand!=''&&vm.brand!=null)
          {
            array.push({
              name: "BrandID",
              type: "number",
              table: "brands",
              value: vm.brand
            })
          }
        }
        if(vm.containsvar('color'))
        {
          if(vm.color!=''&&vm.color!=null)
          {
            array.push({
              name: "ColorID",
              type: "number",
              table: "colors",
              value: vm.color
            })
          }
        }
        if(vm.containsvar('type'))
        {
          if(vm.type!=''&&vm.type!=null)
          {
            array.push({
              name: "TypeID",
              type: "number",
              table: "types",
              value: vm.type
            })
          }
        }
        if(vm.containsvar('model'))
        {
          if(vm.model!=''&&vm.model!=null)
          {
            array.push({
              name: "Model",
              type: "text",
              table: "",
              value: vm.model
            })
          }
        }
        var integer=0
        if(vm.containsvar('warranty'))
        {
          if(vm.warranty!=null&&vm.warranty!=null)
          {
            if(vm.warranty==true)
            {
              integer=1
            }
            else if(vm.warranty==false)
            {
              integer=0
            }
            array.push({
              name: "Warranty",
              type: "number",
              table: "",
              value: integer
            })
          }
        }
        if(vm.containsvar('purchased'))
        {
          if(vm.purchased==true&&vm.purchased!=null)
          {
            integer=1
          }
          else
          {
            integer=0
          }
          array.push({
            name: "Purchased",
            type: "number",
            table: "",
            value: integer
          })
        }
        if(vm.containsvar('rushservice'))
        {
          if(vm.rushservice==true&&vm.rushservice!=null)
          {
            integer=1
          }
          else
          {
            integer=0
          }
          array.push({
            name: "RushService",
            table: "",
            type: "number",
            table: "",
            value: integer
          })
        }
        if(vm.containsvar('completed'))
        {
          var bool=false
          if(vm.completed==true)
          {
            bool=true
          }
          else
          {
            bool=false
          }
          array.push({
            name: "Hours",
            type: "bool",
            table: "",
            value: bool
          })
        }
        vm.$Socket.emit('findrepairbyfilters', {
          data: array
        }, ({data}) => {
          this.findsalesreps(data)
        })
      }
      else
      {
        if(this.repairid==null||this.repairid==""||isNaN(this.repairid))
        {
          this.jobarray=[]
        }
        else
        {
          vm.$Socket.emit('findrepairbyid', {
            RepairID: vm.repairid
          }, (data) => {
            this.findsalesreps(data)
          })
        }
      }
    },
    findsalesreps: function (data) {
      if(data.length>0)
      {
        this.$forceUpdate()
        var vm=this
        this.jobarray=data
        var y=0
        for(var x in this.jobarray) {
          vm.$Socket.emit('getsalesrep', {
            UserID: this.jobarray[x].UserID
          }, (emp) => {
            this.jobarray[y]['Name']=emp[0].FirstName + " " + emp[0].LastName
            ++y
            this.$forceUpdate()
          })
        }
      }
    }
  },
  computed: {
    ... mapState('example', ['UserID']),

  }
}
</script>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-24 03:28:11

最终重新加载了整个Quasar开发环境,现在它可以完美地工作了。不知道那里发生了什么

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55717445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档