首页 > 其他分享 >Vue之checkbox多选框的实际应用

Vue之checkbox多选框的实际应用

时间:2022-12-28 16:44:33浏览次数:31  
标签:checkbox JSON patientId dictValue Vue values peoples check 选框

需求:打开弹窗后,给医生提供多选框用来选择人群属性,如果是选中的则状态为已勾选,否则是未勾选。确认后向后台提交,在其他界面显示该用户的属性;下次再打开时,则选中状态为已选的内容,医生可根据实际情况进行再次操作。

打开效果:

image.png

代码实现:

弹窗样式如下:

<div>
    <!--打开弹窗操作在表格中设置为按钮,可以读取到表格行的id,handleAddPeople(row)-->
	<el-dialog title="人群属性"
               :visible.sync="dialogAddPeople"
               width="40%">
      <el-form ref="addPeopleForm"
               :model="addPeopleForm"
               label-position="top">
        <el-form-item label="请选择当前用户的人群属性:">
          <el-checkbox-group v-model="check" @change="handleCheckChange">
            <el-checkbox class="el-checkbox-width" v-for="(people, index) in peoples" :value="people.dictValue" :label="people.dictLabel" :key="index" @change="handleValuesChange(people)">{{ people.dictLabel }}</el-checkbox>
          </el-checkbox-group>
          </el-form-item>
      </el-form>
      <div slot="footer"
           class="dialog-footer">
        <el-button type="cancel"
                   @click="dialogAddPeople = false">
          取消
        </el-button>
        <el-button type="primary"
                   @click="handleSuretoAddPeople">
          确认
        </el-button>
      </div>
    </el-dialog>
</div>

数据如下:

data() {
	return {
	  // 添加人群属性
      dialogAddPeople: false,
      peoples: [], // 存储人群属性
      check: [], // 存储label
      values: [], // 存储value
	  // 需提交的列表
      addPeopleForm:{
        crowdList:[
          {
            dictValue: null,
            dictLabel: null,
            patientId: null,
          }
        ],
        patientId: null,
      },
      patientId: null, //患者id
	}
}

方法如下:

methods: {
    // 查看人群属性操作
    handleAddPeople(row) {
      // 打开前置空
      this.peoples = [] // 存放人群属性数据
      this.check = [] // 存放label数据
      this.values = [] // 存放value数据
      this.dialogAddPeople = true;
      this.patientId = row.id // 根据当前行获取id
      searchPeopleAttribute({patientId: this.patientId}).then(response => {
        this.peoples = response.data;
        // console.log(this.peoples)
        // 把remark为selected的项存入,即存入当前已被选中的属性,下次打开后自动勾选
        // 判断存入这一步需写在内部,否则执行顺序出问题
        for (var i = 0; i < this.peoples.length; i++) {
          // console.log(this.peoples[i].remark)
          if (this.peoples[i].remark == 'selected') {
            this.check.push(this.peoples[i].dictLabel)
            this.values.push(this.peoples[i].dictValue)
          }
        }
        // console.log("initial_label",JSON.parse(JSON.stringify(this.check)))
        // console.log("initial_value",JSON.parse(JSON.stringify(this.values)))
      })
    },
    // 打印动态label数据
    handleCheckChange() {
      // console.log("dynamic_label",JSON.parse(JSON.stringify(this.check)))
    },
    // 打印动态value数据
    handleValuesChange(people) {
      if(this.values.indexOf(people.dictValue) == -1) {
        this.values.push(people.dictValue);
      }
      else {
        this.values.splice(this.values.indexOf(people.dictValue),1)
      }
      // console.log("dynamic_value",JSON.parse(JSON.stringify(this.values)))
    },
    // 提交设置人群
    handleSuretoAddPeople() { 
      // 获取查看患者的id
      this.addPeopleForm.patientId = this.patientId
      // 获取dictValue和dictLabel值
      // 根据后端的形式进行提交 
      for(var i = 0; i < this.check.length; i++) {
        const p = {}
        p.dictLabel = this.check[i].toString()
        p.dictValue = this.values[i].toString()
        p.patientId = this.patientId
        this.addPeopleForm.crowdList[i] = p 
      }
      // alert(JSON.stringify(this.addPeopleForm))
      modifyPeopleAttribute(this.addPeopleForm).then(() => {
        this.dialogAddPeople = false;
        this.$notify({
          title: "成功",
          message: "添加人群属性成功",
          type: "success",
          duration: 2000,
        });
      })
      this.dialogAddPeople = false;
    },
}

axios接口如下:

import request from '@/utils/request'
// 查询人群属性
export function searchPeopleAttribute(query) {
  return request({
    url: '/patients/crowd/crowList',
    method: 'get',
    params: query
  })
}

// 修改人群属性
export function modifyPeopleAttribute(data) {
  return request({
    url: '/patients/crowd',
    method: 'post',
    data
  })
}

提交模拟数据如下:

{
	"patientId":1,
	"crowdList":[
  		{"dictLable":"高血压","patientId":1,"dictValue":"2"},
  		{"dictLable":"老年人","patientId":1,"dictValue":"1"},
  		{"dictLable":"糖尿病","patientId":1,"dictValue":"3"}
	]
}

标签:checkbox,JSON,patientId,dictValue,Vue,values,peoples,check,选框
From: https://www.cnblogs.com/wangzheming35/p/17010441.html

相关文章

  • vue组件中使用props的值发接口,created和mounted中取不到props。怎么办?
    先看代码吧   描述:一般情况我们会在created或者mounted里面发查询接口,把页面需要渲染的数据查回来、问题:created和mounted里面并不能访问到props的值,打印会是一......
  • vue3使用bootstrap的简单加载遮罩层
    之前有使用过bootstrap做过一个简单的加载遮罩层,现把它加入到vue中。加载遮罩层一般来讲整个app共用一个就可以,因此放到App.vue中,为不影响其它的业务逻辑,放到</template>......
  • VUE-vue中切换页面时让目标页面的滚动条自动滚动到顶部的方法
    情景描述页面/a,有输入框,当输入框输入合适的值的时候,不隐藏软键盘,点击相应按钮直接跳到/b页面 /b,页面本来内容很少,没有滚动条的,可是莫名的被下方的灰色......
  • vue3使用vue-router构建SPA
    使用自动化构建工具vite搭建新项目#某个目录下执行npmcreatevite@latest 按照提示初始化项目,并按照提示:cdvite-projectnpminstallnpmrundev生成目录结构......
  • 基于图形化界面的方式创建vue2项目
    前提是安装vue-clinpmi-g@vue/cli接下来使用vueui创建vue项目vueui浏览器自动打开点击创建,然后去到你想把创建的项目放到的位置如果到不了那个位置,就......
  • vue嵌入iframe场景键盘事件不触发的问题
    使用鼠标移动事件触发函数<iframe**@mouseover="setFocus()"**id="iframeUE4"frameborder="0"src="路径地址"></iframe>再调用内......
  • Vue3源码阅读梳理
    简单代码例子const{createApp,defineComponent,computed,watch,ref,reactive,effect}=Vueconstapp=createApp({components:[],template:`<div......
  • Vue3+vant+ts 上滑加载,解决上滑调用多次数据的问题
    之前用vue2的时候,写过vue2的用法,链接在这里点击跳转哈,用得挺好的,也没啥问题,照葫芦画瓢的做出来了,但是有问题,下滑之后调用多次数据,按理说组件通过 loading 和 finished......
  • vue环境配置文件详解
    一.什么是配置文件1.在vue项目目录下,我们可以看到诸如package.json、.gitignore、package-lock.json等等能配置项目的结构、引用的库、运行的方式、版本控制等等的都称为......
  • vue首页缓存
    vue.config.js添加chainWebpack:config=>{        config.plugins.delete('prefetch');//取消预加载    config.plugins.delete('preload......