• SpringBoot+ElementUI实现多选设置一月中指定几天的属性,SpringBoot中通过反射实现


    场景

    在某管理系统中,需要对指定员工的指定月份的指定天设置为指定的状态

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    首先设计数据库

     

    依次添加d1到d31代表每月的1到31号,设置类型为varchar,存储的是字符串类型。

    然后生成相应的实体类和各业务层代码,实体类属性如下

    然后在前端,选择某条记录点击修改时

                  <el-button
                    size="mini"
                    type="text"
                    icon="el-icon-edit"
                    @click="handleUpdate(scope.row)"
                  >修改</el-button>

    调用handleUpdate方法

        handleUpdate(row) {
          this.reset();
          const id = row.id || this.checkedId;
          getKqyb(id).then((response) => {
            this.form.id = response.data.id;
            this.form.xm = response.data.xm;
            this.form.gh = response.data.gh;
            this.form.dabh = response.data.dabh;
            this.form.bm = response.data.bm;
            this.form.year = response.data.year;
            this.form.mouth = response.data.mouth;
            this.open = true;
            this.title = "修改月统计";
          });
        },

    上面是根据选中的id查询出要设置的员工的信息以及设置的是哪一年的哪个月,然后将隐藏的修改的dialog进行显示

      

    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
          <el-form ref="form" :model="form" :rules="rules" label-width="80px">
            <el-row>
              <el-col :span="10">
                <el-form-item label="工号:" prop="gh">
                  <el-input v-model="form.gh" :disabled="true" />
                </el-form-item>
              </el-col>
              <el-col :span="10">
                <el-form-item label="姓名:" prop="gh">
                  <el-input v-model="form.xm" :disabled="true" />
                </el-form-item>
              </el-col>
            </el-row>
    
            <el-row>
              <el-col :span="10">
                <el-form-item label="部门:" prop="bm">
                  <el-input v-model="form.bm" :disabled="true" />
                </el-form-item>
              </el-col>
              <el-col :span="10">
                <el-form-item label="档案编号:" prop="dabh">
                  <el-input v-model="form.dabh" :disabled="true" />
                </el-form-item>
              </el-col>
            </el-row>
    
            <el-row>
              <el-col :span="10">
                <el-form-item label="年:" prop="year">
                  <el-input v-model="form.year" :disabled="true" />
                </el-form-item>
              </el-col>
              <el-col :span="10">
                <el-form-item label="月:" prop="mouth">
                  <el-input v-model="form.mouth" :disabled="true" />
                </el-form-item>
              </el-col>
            </el-row>
    
            <el-row>
              <el-col :span="20">
                <el-form-item label="请勾选要设置的当月号数" label-width="200"></el-form-item>
              </el-col>
            </el-row>
            <el-row>
              <el-col>
                <el-checkbox-group v-model="form.checkList" @change="handleCheckedDatesChange">
                  <el-checkbox v-for="date in dates" :label="date.key" :key="date.key">{{date.label}}</el-checkbox>
                </el-checkbox-group>
              </el-col>
            </el-row>
    
            <el-row>
              <el-col>
                <el-form-item label="设置考勤状态为:" prop="kqzt" label-width="300">
                  <el-select
                    v-model="form.kqzt"
                    placeholder="请选择考勤状态"
                    clearable
                    :style="{  '300px' }"
                  >
                    <el-option
                      v-for="dict in kqztOptions"
                      :key="dict.bbmc"
                      :label="dict.jqmc"
                      :value="dict.bbmc"
                    />
                  </el-select>
                </el-form-item>
              </el-col>
            </el-row>
          </el-form>
          <div slot="footer" class="dialog-footer">
            <el-button type="primary" @click="submitForm">确 定</el-button>
            <el-button @click="cancel">取 消</el-button>
          </div>
        </el-dialog>

    上面的输入框用来显示基本信息,下面是勾选要设置的每月几号和要设置为的状态

    怎样对这些个多选框进行初始化

                <el-checkbox-group v-model="form.checkList" @change="handleCheckedDatesChange">
                  <el-checkbox v-for="date in dates" :label="date.key" :key="date.key">{{date.label}}</el-checkbox>
                </el-checkbox-group>

    使用多选框组,循环的是dates这个对象数组 ,绑定的label属性就是此多选框的值,即勾选后获取到的内容,要显示的内容

    是通过{{}}来显示,显示的是每个对像的label属性即实际要显示的值。

    因为每月每天的对象属性是固定的,所以将dates声明

    dates: dateOptions,

    然后声明并赋值dateOptions

    const dateOptions = [
      {
        key: "d1",
        label: "1号",
      },
      {
        key: "d2",
        label: "2号",
      },
      {
        key: "d3",
        label: "3号",
      },
      {
        key: "d4",
        label: "4号",
      },
      {
        key: "d5",
        label: "5号",
      },
      {
        key: "d6",
        label: "6号",
      },
      {
        key: "d7",
        label: "7号",
      },
      {
        key: "d8",
        label: "8号",
      },
      {
        key: "d9",
        label: "9号",
      },
      {
        key: "d10",
        label: "10号",
      },
      {
        key: "d11",
        label: "11号",
      },
      {
        key: "d12",
        label: "12号",
      },
      {
        key: "d13",
        label: "13号",
      },
      {
        key: "d13",
        label: "13号",
      },
      {
        key: "d14",
        label: "14号",
      },
      {
        key: "d15",
        label: "15号",
      },
      {
        key: "d16",
        label: "16号",
      },
      {
        key: "d17",
        label: "17号",
      },
      {
        key: "d18",
        label: "18号",
      },
      {
        key: "d19",
        label: "19号",
      },
      {
        key: "d20",
        label: "20号",
      },
      {
        key: "d21",
        label: "21号",
      },
      {
        key: "d22",
        label: "22号",
      },
      {
        key: "d23",
        label: "23号",
      },
      {
        key: "d24",
        label: "24号",
      },
      {
        key: "d25",
        label: "25号",
      },
      {
        key: "d26",
        label: "26号",
      },
      {
        key: "d27",
        label: "27号",
      },
      {
        key: "d28",
        label: "28号",
      },
      {
        key: "d29",
        label: "29号",
      },
      {
        key: "d30",
        label: "30号",
      },
      {
        key: "d31",
        label: "31号",
      },
    ];

    声明位置

    这样在勾选后就会将所勾选的多选框的label属性对应的值绑定在改多选组的v-model绑定的属性。

    绑定的是form对象的checklist属性,此属性是数组。

          form: {
            id: undefined,
            gh: undefined,
            xm: undefined,
            dabh: undefined,
            bm: undefined,
            year: undefined,
            mouth: undefined,
            checkList: [],
            kqzt: undefined,
          },

    然后在点击确定时会将此表单提交,并将form参数进行传递

          <div slot="footer" class="dialog-footer">
            <el-button type="primary" @click="submitForm">确 定</el-button>
            <el-button @click="cancel">取 消</el-button>
          </div>

    在提交按钮对应的方法中

        submitForm: function () {
          this.$refs["form"].validate((valid) => {
            
            if (valid) {
              if (this.form.id != undefined) {
                updateKqyb(this.form).then((response) => {
                  if (response.code === 200) {
                    this.msgSuccess("修改成功");
                    this.open = false;
                    this.getList();
                  }
                });
              } 
            }
          });
        },

    将form参数传递给请求接口js的方法

    export function updateKqyb(data) {
      return request({
        url: '/kqbb/kqyb',
        method: 'put',
        data: data
      })
    }

    然后传递到SpringBoot后台

        @PutMapping
        public AjaxResult edit(@RequestBody KqbbKqyb kqbbKqyb)
       {
       
        }

    使用后台生成的实体类进行接收,因为传递的选中的月份的数组的在原实体类中不存在,所以需要新增

    private String[] checkList;

    属性以及get和set方法来接受参数

    然后接受到参数后是数组,每一项对应后台实体类的属性d1 d2这种

    怎样根据属性名设置属性值

    先获取要设置哪些天即要设置哪些属性

    String[] checkList = kqbbKqyb.getCheckList();

    然后

            KqbbKqyb kqbbKqybNew = new KqbbKqyb();
            kqbbKqybNew.setId(kqbbKqyb.getId());
            for (String shuxing:checkList) {
                Field field = kqbbKqybNew.getClass().getDeclaredField(shuxing);   
                if(field!=null)
                {
                    field.setAccessible(true);
                    if(kqzt!=null)
                    {
                        field.set(kqbbKqybNew, kqzt+"(改)");
                    }
                }
            }
    
         kqbbKqybService.updateKqbbKqyb(kqbbKqybNew);

    声明一个要设置属性的对象,赋予修改时要用到的id,然后遍历传递过来的所有属性

    利用JDK的反射,根据属性名获取属性,再设置属性可访问然后调用set方法设置其值

    field.set(kqbbKqybNew, kqzt+"(改)");

    其中kqbbKqybNew是要设置属性的对象,后面的参数是要设置的内容。 

  • 相关阅读:
    Ajax校验
    Struts2国际化
    OGNL
    Struts2基础数据校验和框架校验
    http
    AES,BigInteger,MD5加密
    随笔 js-----------------------------------------------------------------------------------------------------
    13年总结js,css,java xml
    window、linux安装jdk,excel 导入oracle,WebService,window 端口查看,svn服务安装,oracle用户解锁
    经典sql语句
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/13522549.html
Copyright © 2020-2023  润新知