错误:ERROR Cannot read properties of null (reading ‘type‘)

ERROR
Cannot read properties of null (reading ‘type’)
TypeError: Cannot read properties of null (reading ‘type’)

在这里插入图片描述

<template>
  <el-card>
    <el-row :gutter="20" class="header">
      <el-col :span="7">
        <el-input placeholder="请输入商品大类名称..." v-model="queryForm.query" clearable></el-input>
      </el-col>
      <el-button type="primary" :icon="Search" @click="initBigTypeList">搜索</el-button>
      <el-button type="primary" :icon="DocumentAdd" @click="handleDialogValue()">添加商品大类</el-button>
    </el-row>
    <el-table :data="tableData" stripe style="width: 100%">
      <el-table-column prop="id" label="#ID" width="80" />
      <el-table-column prop="name" label="商品大类名称" width="200" />
      <el-table-column prop="image" label="商品大类图片" width="200">
        <template v-slot="scope">
          <img :src="getServerUrl()+'/image/bigType/'+scope.row.image" width="80" height="80"/>
        </template>
      </el-table-column>
      <el-table-column prop="remark" label="商品大类描述"/>
      <el-table-column prop="action" label="操作" width="300" fixed="right">
        <template v-slot="scope">
          <el-button type="success" @click="handleImageDialogValue(scope.row)">更换图片</el-button>
          <el-button type="primary" :icon="Edit" @click="handleDialogValue(scope.row.id)"/>
          <el-button type="danger" :icon="Delete" @click="handleDelete(scope.row.id)"/>
        </template>
      </el-table-column>
    </el-table>
    <el-pagination
        v-model:currentPage="queryForm.pageNum"
        v-model:page-size="queryForm.pageSize"
        :page-sizes="[10, 20, 30, 40,50]"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total"
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
    />
  </el-card>
  <Dialog v-model="dialogVisible" :dialogVisible="dialogVisible" :id="id" :dialogTitle="dialogTitle" @initBigTypeList="initBigTypeList"></Dialog>
  <ImageDialog v-model="imageDialogVisible" :imageDialogValue="imageDialogValue" @initBigTypeList="initBigTypeList"></ImageDialog>
</template>

<script setup>
import { Search,Delete,Edit,DocumentAdd } from '@element-plus/icons-vue'
import { ref } from 'vue'
import axios,{ getServerUrl } from "@/util/axios";
import Dialog from './components/dialog'
import ImageDialog from './components/imageDialog'
import {ElMessage, ElMessageBox} from "element-plus";

const queryForm=ref({
  query:'',
  pageNum:1,
  pageSize:10
})

const total=ref(0)

const tableData = ref([])

const id=ref(-1)

const dialogTitle=ref('')

const dialogVisible=ref(false)

const imageDialogVisible=ref(false)

const imageDialogValue=ref({})

const initBigTypeList=async()=>{
  const res=await axios.post("admin/bigType/list",queryForm.value)
  tableData.value=res.data.bigTypeList;
  total.value=res.data.total;
}

initBigTypeList();

const handleSizeChange=(pageSize)=>{
  queryForm.value.pageNum=1;
  queryForm.value.pageSize=pageSize;
  initBigTypeList();
}

const handleCurrentChange=(pageNum)=>{
  queryForm.value.pageNum=pageNum;
  initBigTypeList();
}

const handleDialogValue=(bigTypeId)=>{
  console.log("handleDialogValue"+bigTypeId);
  if(bigTypeId){
    id.value=bigTypeId;
    dialogTitle.value="商品大类修改"
  }else{
    id.value=-1;
    dialogTitle.value="商品大类添加"
  }
  dialogVisible.value=true
}

const handleImageDialogValue=(row)=>{
  imageDialogVisible.value=true
  imageDialogValue.value=JSON.parse(JSON.stringify(row))
}


const handleDelete=(id,status)=>{
  ElMessageBox.confirm(
      '您确定要删除这条记录吗?',
      '系统提示',
      {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      }
  )
      .then(async() => {
        let res=await axios.get('admin/bigType/delete/'+id)
        if(res.data.code==0){
          ElMessage({
            type: 'success',
            message: '删除成功',
          })
          initBigTypeList();
        }else{
          ElMessage({
            type: 'error',
            message: res.data.msg,
          })
        }

      })
      .catch(() => {

      })
}


</script>

<style lang="scss" scoped>

.header{
  padding-bottom: 16px;
  box-sizing: border-box;
}

.el-pagination{
  padding-top: 15px;
  box-sizing: border-box;
}



</style>
<template>
  <el-dialog
    :model-value="dialogVisible"
    :title="dialogTitle"
    width="30%"
  @close="handleClose"
  >

    <el-form
        ref="formRef"
        :model="form"
        :rules="rules"
        label-width="100px"
    >
      <el-form-item label="大类名称" prop="name">
        <el-input v-model="form.name" />
      </el-form-item>
      <el-form-item label="大类描述" prop="remark">
        <el-input v-model="form.remark" type="textarea" :rows="4"/>
      </el-form-item>


    </el-form>
    <template #footer>
      <span class="dialog-footer">

        <el-button  @click="handleClose">取消</el-button>
     <el-button type="primary" @click="handleConfirm">确认</el-button>
      </span>
    </template>
  </el-dialog>
</template>

<script setup>

import {defineEmits, defineProps, ref, watch} from "vue";
import axios from "@/util/axios";
import { ElMessage } from 'element-plus'

  const tableData=ref([])



  const props=defineProps(
      {
        id:{
          type:Number,
          default:-1,
          required:true
        },
        dialogTitle:{
          type:String,
          default:'',
          required:true
        },
        dialogVisible:{
          type:Boolean,
          default:false,
          required:true
        }
      }
  )


const form=ref({
  id:-1,
  name:"",
  remark:""
})

const rules=ref({
  name:[
    { required: true, message: '请输入商品大类名称'}
  ],
  remark:[
    { required: true, message: '请输入商品大类描述'}
  ]
})

const formRef=ref(null)

const initFormData=async(id)=>{
  const res=await axios.get("admin/bigType/"+id);
  form.value=res.data.bigType;
}



  watch(
      ()=>props.dialogVisible,
      ()=>{
        let id=props.id;
        if(id!=-1){
          initFormData(id)
        }else{
          formRef.value.resetFields();
          form.value={
            id:-1,
            name:"",
            remark:""
          }
        }
      }
  )


  const emits=defineEmits(['update:modelValue','initBigTypeList'])

  const handleClose=()=>{
    emits('update:modelValue',false)
  }

  const handleConfirm=()=>{
    formRef.value.validate(async(valid)=>{
      if(valid){

          let result=await axios.post("admin/bigType/save",form.value);
          let data=result.data;
          if(data.code==0){
            ElMessage.success("执行成功!")
            formRef.value.resetFields();
            emits("initBigTypeList")
            handleClose();
          }else{
            ElMessage.error(data.msg);
          }


      }else{
        console.log("fail")
      }
    })
  }

</script>

<style scoped>

</style>

改正后:单位找到原因
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/119082.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二、Hadoop分布式系统基础架构

1、分布式 分布式体系中&#xff0c;会存在众多服务器&#xff0c;会造成混乱等情况。那如何让众多服务器一起工作&#xff0c;高效且不出现问题呢&#xff1f; 2、调度 &#xff08;1&#xff09;架构 在大数据体系中&#xff0c;分布式的调度主要有2类架构模式&#xff1a…

【Redis】SSM整合Redis注解式缓存的使用

【Redis】SSM整合Redis&注解式缓存的使用 一、SSM整合Redis1.2.配置文件spring-redis.xml1.3.修改applicationContext.xml1.4.配置redis的key生成策略 二、Redis的注解式开发及应用场景2.1.什么是Redis注解式2.实列测试 三、Redis中的击穿、穿透、雪崩的三种场景 一、SSM整…

WebSocket Day03 : SpringMVC整合WebSocket

前言 在现代Web应用程序中&#xff0c;实时性和即时通信变得越来越重要。传统的HTTP请求-响应模式无法满足实时数据传输和双向通信的需求。随着技术的发展&#xff0c;WebSocket成为了一种强大而灵活的解决方案。 WebSocket是HTML5提供的一种新的通信协议&#xff0c;它通过一…

vue.js实现科室无限层选中和回显

一、效果展示&#xff1a; 展示可选层级 查看选中的值 二、实现&#xff1a; <el-form-item label"相关科室:" prop"orgId"><el-cascaderpopper-class"cascader-my":options"orgOptions":show-all-levels"false"…

NVIDIA Jetson SOC 内存分配策略

CPU 是Host, GPU 是Device, 系统内存分配策略如下: 这段话的翻译如下&#xff1a; 集成的GPU会和CPU以及其他Tegra引擎共享DRAM&#xff08;动态随机存储器&#xff09;&#xff0c;并且CPU可以通过将DRAM的内容移动到交换区域&#xff08;SWAP area&#xff09;或者相反来控制…

成功品牌的营销秘诀揭密,营销秘诀,品牌成功

品牌营销是将品牌塑造为消费者心目中有价值的存在&#xff0c;从而提高品牌认知度和价值的过程。品牌营销是任何一家企业成功的关键所在。如果一家企业能够正确地营销其品牌&#xff0c;那么它就能够在行业中发挥更大的作用。接下来&#xff0c;迅推客将深入探讨品牌营销的重要…

rust变量绑定、拷贝、转移、引用

目录 一&#xff0c;clone、copy 1&#xff0c;基本类型 2&#xff0c;类型的clone特征 3&#xff0c;显式声明结构体的clone特征 4&#xff0c;类型的copy特征 5&#xff0c;显式声明结构体的clone特征 5&#xff0c;变量和字面量的特征 6&#xff0c;特征总结 二&am…

技术分享 | 抓包分析 TCP 协议

TCP 协议是在传输层中&#xff0c;一种面向连接的、可靠的、基于字节流的传输层通信协议。 环境准备 对接口测试工具进行分类&#xff0c;可以如下几类&#xff1a; 网络嗅探工具&#xff1a;tcpdump&#xff0c;wireshark代理工具&#xff1a;fiddler&#xff0c;charles&a…

触摸屏通过modbus转profinet网关连接PLC与变频器485modbus通讯案例

通过兴达易控modbus转profinet网关&#xff08;XD-MDPN100&#xff09;的桥接&#xff0c;数据可以以高速、可靠的方式从触摸屏传递到PLC&#xff0c;同时能够实现PLC对变频器的监控和控制。这四台变频器通过485modbus协议与PLC通讯&#xff0c;使得系统能够实现对变频器的高效…

ACmix:卷积和self-attention的结合,YOLOv5改进之ACmix

目录 一、ACmix理论部分 二、代码 三、YOLOv5改进 ACC3 一、ACmix理论部分 论文地址:2111.14556.pdf (arxi

梳理自动驾驶中的各类坐标系

目录 自动驾驶中的坐标系定义 关于坐标系的定义 几大常用坐标系 世界坐标系 自车坐标系 传感器坐标系 激光雷达坐标系 相机坐标系 如何理解坐标转换 机器人基础中的坐标转换概念 左乘右乘的概念 对左乘右乘的理解 再谈自动驾驶中的坐标转换 本节参考文献 自动驾驶…

517-0224-16A-458525 531X303MCPARG1 现代工厂中DCS与PLC的比较

517-0224-16A-458525 531X303MCPARG1 现代工厂中DCS与PLC的比较 分布式控制系统(DCSs)和可编程逻辑控制器(PLC)之间的区别可以归结为一个简单的足球比喻。你的指挥系统是你的船长。团队名单上的第一个名字&#xff0c;你的DCS是可靠的&#xff0c;勤奋的&#xff0c;控制着整个…

django+drf+vue 简单系统搭建 (1) - django创建项目

本系列文章为了记录自己第一个系统生成过程&#xff0c;主要使用django,drf,vue。本人非专业人士&#xff0c;此文只为记录学习&#xff0c;若有部分描述不够准确的地方&#xff0c;烦请指正。 建立这个系统的原因是因为&#xff0c;在生活中&#xff0c;很多觉得可以一两行代码…

麒麟信安加入“工业操作系统创新伙伴计划”,并亮相2023第三届工控中国大会新品发布会

11月1日-3日&#xff0c;2023第三届工控中国大会在苏州太湖国际会议中心举办。本届大会以“生态链接 智控未来 筑基新型工业化”为主题&#xff0c;由中国电子信息产业发展研究院、中国工业经济联合会、国家智能制造专家委员会、国家产业基础专家委员会、江苏省工业和信息化厅、…

基于单片机的车载太阳能板自动跟踪系统研究

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、总体设计开发流程二、机械结构设计与研究3.1 机械系统总体设计3.1.1 太阳能板折叠传动 三、太阳能自动跟踪系统硬…

[C语言趣编程]抓小偷问题

1问题&#xff1a; 2解题思路&#xff1a; 可以利用数值的思想&#xff0c;因为已经知道4人有3人说真话&#xff0c;所以让每条语句的真假当作1和0&#xff0c;最终结果为3&#xff0c;利用循环自动判断出谁是小偷&#xff1b; 3运行代码&#xff1a; #include<stdio.h&g…

操作系统:银行家算法

文章目录 银行家算法一、实验目的二、实验要求与内容、过程与结果 系列文章 银行家算法 一、实验目的 1、理解银行家算法。 2、掌握进程安全性检查的方法及资源分配方法。 二、实验要求与内容、过程与结果 1、将图5-1补充完整&#xff0c;画出银行家算法的流程图。 图5-1 银…

web —— html

Web —— css基础 1. HTML2. 基本HTML结构3. HTML常用标签3.1 文本相关标签3.2 HTML图像标签3.3 HTML超链接标签3.4 HTML表&#xff0c;单3.4.1 HTML表格3.4.2 HTML表单&#xff0c;输入框&#xff08;多选框&#xff0c;单选框&#xff09;下拉框 3.5 HTML分区标签3.5.1 div标…

k8s-----数据存储

目录 一、数据存储的概念 二、基本存储 1、EmptyDir存储卷 2、hostPath存储卷 3、nfs共享存储卷 三、高级存储 1、PV&#xff08;持久化卷&#xff09; 2、PVC&#xff08;持久化卷声明&#xff09; 3、静态PV实验 4、动态PV实验 4.1 在stor01节点上安装nfs&#xf…

肩颈筋膜炎怎么治疗才能彻底除根

肌筋膜炎是肩背部肩胛骨内侧某一点的疼痛&#xff0c;同时可以放射到同侧的肩部以及上肢的疼痛&#xff0c;肩关节活动的受限以及同侧肢体麻木&#xff0c;无力的症状。 在肩关节劳累或者在着凉时可以诱发&#xff0c;主要表现为肩后背部明显疼痛&#xff0c;肩关节抬举以及向各…