vue复选框表单字段的隐藏和显示(Vue3ElementPlus组件Form表单)
vue复选框表单字段的隐藏和显示(Vue3ElementPlus组件Form表单){ "code": "SUCCESS" "msg": null "data": [ { "id": "-99" "code": "code-99" "name": "name-99" "type": 1 "parentId": "-1" "desc": "" "value": -99 "label": "name-99" "children":
ElementPlus组件库,操作表单实现效果

VUE代码
<template>
  <div class="elementDemo01">
    <h1 align="center" style="color: #409eff">表单</h1>
    <el-form
      ref="formref"
      :model="formData"
      :rules="formRules"
      label-width="160px"
      size="default"
      style="width: 75%"
    >
      <el-form-item label="账号" prop="username">
        <el-input v-model.trim="formData.username" placeholder="请输入账号" />
      </el-form-item>
      <el-form-item label="姓名" prop="name">
        <el-input v-model.trim="formData.name" placeholder="请输入姓名" />
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-input
          v-model.trim="formData.password"
          type="password"
          placeholder="请输入密码"
        />
      </el-form-item>
      <el-form-item label="重复密码" prop="rePassword">
        <el-input
          v-model.trim="formData.rePassword"
          type="password"
          placeholder="重复密码"
        />
      </el-form-item>
      <el-form-item label="邮箱" prop="email">
        <el-input v-model.trim="formData.email" placeholder="请输入邮箱" />
      </el-form-item>
      <el-form-item label="手机" prop="mobile">
        <el-input
          v-model="formData.mobile"
          type="number"
          placeholder="请输入手机号"
        />
      </el-form-item>
      <el-form-item label="性别" prop="sex">
        <el-radio-group v-model="formData.sex">
          <el-radio 
            v-for="item in defineData.sexList" 
            :key="item.value" 
            :label="item.value" 
          >
            {{item.text}}
          </el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="用户类别" prop="category">
        <el-radio-group v-model="formData.category">
          <el-radio label="1">一般用户</el-radio>
          <el-radio label="2">特殊用户</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="用户类型" prop="userType">
        <el-checkbox-group v-model="formData.userType">
          <el-checkbox label="1">系统管理</el-checkbox>
          <el-checkbox label="2">业务管理</el-checkbox>
          <el-checkbox label="3">财务管理</el-checkbox>
          <el-checkbox label="4">普通用户</el-checkbox>
        </el-checkbox-group>
      </el-form-item>
      <el-form-item label="用户职位" prop="position">
        <el-checkbox-group v-model="formData.position">
          <el-checkbox 
            v-for="item in defineData.positionList" 
            :key="item.value" 
            :label="item.value"
          >
            {{item.text}}
          </el-checkbox>
        </el-checkbox-group>
      </el-form-item>
      <el-form-item label="任职时间" prop="postTime">
        <el-date-picker
          v-model="formData.postTime"
          type="datetime"
          placeholder="请选择时间"
          format="YYYY-MM-DD HH:mm:ss"
          value-format="YYYY-MM-DD HH:mm:ss"
          style="width: 100%"
          :shortcuts="postTimeShortcuts"
        />
      </el-form-item>
      <el-form-item label="有效期" prop="validityTime">
        <el-date-picker
          v-model="formData.validityTime"
          type="daterange"
          unlink-panels
          range-separator="到"
          start-placeholder="起始时间"
          end-placeholder="结束时间"
          :shortcuts="validityTimeShortcuts"
          style="width: 100%"
        />
      </el-form-item>
      <el-form-item label="所属部门" prop="orgId">
        <el-tree-select
          v-model="formDataId"
          :data="defineDataTree"
          check-strictly
          default-expand-all
          placeholder="请选择所属部门"
        />
      </el-form-item>
      <el-form-item label="运动爱好" prop="motionHobby">
        <el-select
          v-model="formData.motionHobby"
          filterable
          placeholder="请选择"
        >
          <el-option
            v-for="item in defineData.motionHobbyList"
            :key="item.value"
            :label="item.name"
            :value="item.value"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="娱乐爱好" prop="recreationHobbys">
        <el-select
          v-model="formData.recreationHobbys"
          multiple
          placeholder="请选择爱好"
          style="width: 100%"
        >
          <el-option
            v-for="item in defineData.recreationHobbyList"
            :key="item.value"
            :label="item.name"
            :value="item.value"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="所属城市" prop="cityId">
        <el-tree-select
          v-model="formData.cityId"
          :data="defineData.cityTree"
          default-expand-all
          placeholder="请选择所属城市"
          node-key="id"
        >
        </el-tree-select>
      </el-form-item>
      <el-form-item label="活动时间" required>
        <el-col :span="12">
          <el-form-item prop="activityDate">
            <el-date-picker
              v-model="formData.activityDate"
              type="date"
              placeholder="选择一个日期"
              style="width: 100%"
            />
          </el-form-item>
        </el-col>
        <el-col :span="1" style="text-align: center">
          <span class="text-gray-500">-</span>
        </el-col>
        <el-col :span="11">
          <el-form-item prop="activityTime">
            <el-time-picker
              v-model="formData.activityTime"
              placeholder="选择一个时间"
              style="width: 100%"
            />
          </el-form-item>
        </el-col>
      </el-form-item>
      <el-form-item label="描述" prop="desc">
        <el-input v-model="formData.desc" type="textarea" rows="5" />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submitForm(formRef)">保存</el-button>
        <el-button @click="resetForm(formRef)">取消</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
import { reactive  ref  toRefs } from "vue";
import api from "./../../../utils/request";
//
export default {
  name: "elementDemo01" 
  setup(props  context) {
    const { attrs  slots  emit } = context;
    // ================================================================= //
    // =====表单验证
    // ================================================================= //
    // formRef
    const formRef = ref(null);
    // 验证密码
    const validatePassword = (rule  value  callback) => {
      console.log("validateRePassword" value);
      console.log("active.formData.rePassword" active.formData.rePassword);
      if (value === '') {
        callback(new Error('请输入密码!'))
      } else {
        if (active.formData.rePassword !== '') {
          if (!formRef.value) {
            return ;
          }
          formRef.value.validateField('rePassword'  () => null)
        }
        callback();
      }
    };
    // 验证密码
    const validateRePassword = (rule  value  callback) => {
      console.log("validateRePassword" value);
      console.log("active.formData.password" active.formData.password);
      if (value === '') {
        callback(new Error('请输入重复密码!'))
      } else if (value !== active.formData.password) {
        callback(new Error("两次密码输入不一致!"))
      } else {
        callback()
      }
    };
    // ================================================================= //
    // =====响应式数据
    // ================================================================= //
    const active = reactive({
      // 预定义数据
      defineData: {
        sexList: [] 
        positionList: [] 
        motionHobbyList: [] 
        hobbyList: [] 
        orgTree: [] 
        cityTree: [] 
      } 
      // 表单对象
      formData: {
        // id: '' 
        // username: "" 
        // name: "" 
        // password: "" 
        // rePassword: "" 
        // email: "" 
        // mobile: "" 
        // sex: 1 
        // category: 2 
        // userType: [] 
        // position: [] 
        // postTime: "" 
        // validityTime: [] 
        // orgId: "" 
        // motionHobby: 2 
        // recreationHobbys: [] 
        // cityId: "" 
        // desc: "" 
      } 
      // 表单规则
      formRules: {
        username: [
          {
            required: true   message: "请输入账号"  trigger: "blur" 
          } 
          // {
          //   min: 3   max: 30  message: "账号的长度为[3]到[30]"  trigger: "blur" 
          // } 
          { 
            pattern: /^[a-zA-Z0-9_-]{4 16}$/  message: '4到16位(字母,数字,下划线,减号)'
          }
        ] 
        name: [
          {
            required: true  message: "请输入姓名"  trigger: "blur" 
          } 
          {
            min: 2  max: 10   message: "姓名的长度为[2]到[10]"  trigger: "blur" 
          } 
        ] 
        password:[
          { validator: validatePassword  trigger: 'blur' } 
        ] 
        rePassword:[
          { validator: validateRePassword  trigger: 'blur' } 
        ] 
        email:[
          {
            required: true   message: "请输入邮箱"  trigger: "blur" 
          } 
          { 
            pattern: /^([a-zA-Z]|[0-9]|[\.])(\w|\-) @[a-zA-Z0-9] \.([a-zA-Z]{2 4})$/  message: '请输入正确的邮箱'
          }
        ] 
        mobile:[
          {
            required: true   message: "请输入手机号"  trigger: "blur" 
          } 
        ] 
        sex: [
          {
            required: true 
            message: '请选择性别' 
            trigger: 'change' 
          } 
        ] 
        category: [
          {
            required: true 
            message: '请选择用户类别' 
            trigger: 'change' 
          } 
        ] 
        postTime: [
          {
            required: true  message: "请选择任职时间"  trigger:'change' 
          } 
        ] 
        validityTime: [
          {
            required: true  message: "请选择有效期"  trigger:'change' 
          }
        ] 
        orgId: [
          {
            required: true  message: "请选择组织机构"  trigger:'change' 
          } 
        ] 
        cityId: [
          {
            required: true  message: "请选择城市"  trigger:'change' 
          } 
        ]
      } 
    });
    // ================================================================= //
    // =====表单扩展
    // ================================================================= //
    const postTimeShortcuts = [
      {
        text: "今天" 
        value: new Date() 
      } 
      {
        text: "昨天" 
        value: () => {
          const date = new Date();
          date.setTime(date.getTime() - 3600 * 1000 * 24);
          return date;
        } 
      } 
      {
        text: "一周以前" 
        value: () => {
          const date = new Date();
          date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
          return date;
        } 
      } 
    ];
    //
    const validityTimeShortcuts = [
      {
        text: "最近一月" 
        value: () => {
          const end = new Date();
          const start = new Date();
          start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
          return [start  end];
        } 
      } 
      {
        text: "最近三月" 
        value: () => {
          const end = new Date();
          const start = new Date();
          start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
          return [start  end];
        } 
      } 
      {
        text: "未来半年" 
        value: () => {
          const end = new Date();
          const start = new Date();
          end.setTime(start.getTime()   183 * 24 * 60 * 60 * 1000);
          return [start  end];
        } 
      } 
      {
        text: "未来一年" 
        value: () => {
          const end = new Date();
          const start = new Date();
          end.setTime(start.getTime()   365 * 24 * 60 * 60 * 1000);
          return [start  end];
        } 
      } 
    ];
    // ================================================================= //
    // =====预定义数据->加载
    // ================================================================= //
    // 性别列表
    const querySexList = async () => {
      const requestData = {};
      await api({
        url: "/element/demo01/sexList" 
        method: "post" 
        data: requestData 
      }).then((res) => {
        const { code  msg  data } = res.data;
        active.defineData.sexList = data;
      });
    };
    querySexList();
    // 职位列表
    const queryPositionList = async () => {
      const requestData = {};
      await api({
        url: "/element/demo01/positionList" 
        method: "post" 
        data: requestData 
      }).then((res) => {
        const { code  msg  data } = res.data;
        active.defineData.positionList = data;
      });
    };
    queryPositionList();
    // 运动爱好列表
    const queryMotionHobbyList = async () => {
      const requestData = {};
      await api({
        url: "/element/demo01/motionHobbyList" 
        method: "post" 
        data: requestData 
      }).then((res) => {
        const { code  msg  data } = res.data;
        active.defineData.motionHobbyList = data;
      });
    };
    queryMotionHobbyList();
    // 娱乐爱好列表
    const queryRecreationHobbyList = async () => {
      const requestData = {};
      await api({
        url: "/element/demo01/recreationHobbyList" 
        method: "post" 
        data: requestData 
      }).then((res) => {
        const { code  msg  data } = res.data;
        active.defineData.recreationHobbyList = data;
      });
    };
    queryRecreationHobbyList();
    // 组织机构树
    const queryOrgTree = async () => {
      const requestData = {};
      await api({
        url: "/element/demo01/orgTree" 
        method: "post" 
        data: requestData 
      }).then((res) => {
        const { code  msg  data } = res.data;
        active.defineDataTree = data;
      });
    };
    queryOrgTree();
    // 城市树
    const queryCityTree = async () => {
      const requestData = {};
      await api({
        url: "/element/demo01/cityTree" 
        method: "post" 
        data: requestData 
      }).then((res) => {
        const { code  msg  data } = res.data;
        active.defineData.cityTree = data;
      });
    };
    queryCityTree();
    // 查询表单数据
    const queryFormData = async () => {
      const requestData = {id:1};
      await api({
        url: "/element/demo01/getData" 
        method: "post" 
        data: requestData 
      }).then((res) => {
        const { code  msg  data } = res.data;
        active.formData = data;
      });
    };
    queryFormData();
    // ================================================================= //
    // =====操作
    // ================================================================= //
    // 保存操作
    const submitForm = async (formEl) => {
      if (!formEl) {
        return;
      }
      await formEl.validate((valid  fields) => {
        if (valid) {
          console.log("fromData"  active.formData);
          console.log("fromData json"  JSON.stringify(active.formData));
          const requestData = active.formData;
          api({
            url: "/element/demo01/saveData" 
            method: "post" 
            data: requestData 
          }).then((res) => {
            const { code  msg  data } = res.data;
            console.log("data" data);
          });
          console.log("submit!");
        } else {
          console.log("error submit!"  fields);
        }
      });
    };
    // 取消操作
    const resetForm = (formEl) => {
      if (!formEl) {
        return;
      }
      active.formData = {
        name: "" 
        sex: 1 
        hobby: "" 
        userType: [] 
      };
      formEl.resetFields();
    };
    // ================================================================= //
    // =====返回页面
    // ================================================================= //
    return {
      active 
      ...toRefs(active) 
      formRef 
      postTimeShortcuts 
      validityTimeShortcuts 
      submitForm 
      resetForm 
    };
  } 
};
</script>
<style lang="scss" scoped>
.elementDemo01 {
  margin: 0 auto;
  width: 800px;
  text-align: left;
  .el-radio {
    margin-right: 15px;
  }
  .el-select {
    width: 100%;
  }
  .el-checkbox {
    margin-right: 15px;
  }
}
</style>
    
交互数据格式
sexList
{
  "code": "SUCCESS" 
  "msg": null 
  "data": [
    {
      "text": "男" 
      "value": 1
    } 
    {
      "text": "女" 
      "value": 2
    } 
    {
      "text": "未知" 
      "value": 3
    }
  ] 
  "message": null
}
    
positionList
{
  "code": "SUCCESS" 
  "msg": null 
  "data": [
    {
      "text": "M1" 
      "value": 1
    } 
    {
      "text": "M2" 
      "value": 2
    } 
    {
      "text": "M3" 
      "value": 3
    } 
    {
      "text": "M4" 
      "value": 4
    } 
    {
      "text": "M5" 
      "value": 5
    }
  ] 
  "message": null
}
    
motionHobbyList
{
  "code": "SUCCESS" 
  "msg": null 
  "data": [
    {
      "name": "篮球" 
      "value": 1
    } 
    {
      "name": "羽毛球" 
      "value": 2
    } 
    {
      "name": "兵乓球" 
      "value": 3
    } 
    {
      "name": "足球" 
      "value": 4
    } 
    {
      "name": "滑板" 
      "value": 5
    }
  ] 
  "message": null
}
    
recreationHobbyList
{
  "code": "SUCCESS" 
  "msg": null 
  "data": [
    {
      "name": "听音乐" 
      "value": 1
    } 
    {
      "name": "看电影" 
      "value": 2
    } 
    {
      "name": "绘画" 
      "value": 3
    } 
    {
      "name": "写小说" 
      "value": 4
    } 
    {
      "name": "看书" 
      "value": 5
    }
  ] 
  "message": null
}
    
orgTree
{
  "code": "SUCCESS" 
  "msg": null 
  "data": [
    {
      "id": "-99" 
      "code": "code-99" 
      "name": "name-99" 
      "type": 1 
      "parentId": "-1" 
      "desc": "" 
      "value": -99 
      "label": "name-99" 
      "children": [
        {
          "id": "-98999" 
          "code": "code-98999" 
          "name": "name-98999" 
          "type": 1 
          "parentId": "-99" 
          "desc": "" 
          "value": -98999 
          "label": "name-98999" 
          "hasChildren": false
        } 
        {
          "id": "-98998" 
          "code": "code-98998" 
          "name": "name-98998" 
          "type": 0 
          "parentId": "-99" 
          "desc": "" 
          "value": -98998 
          "label": "name-98998" 
          "hasChildren": false
        } 
        {
          "id": "-98997" 
          "code": "code-98997" 
          "name": "name-98997" 
          "type": 1 
          "parentId": "-99" 
          "desc": "" 
          "value": -98997 
          "label": "name-98997" 
          "hasChildren": false
        } 
        {
          "id": "-98996" 
          "code": "code-98996" 
          "name": "name-98996" 
          "type": 0 
          "parentId": "-99" 
          "desc": "" 
          "value": -98996 
          "label": "name-98996" 
          "hasChildren": false
        } 
        {
          "id": "-98995" 
          "code": "code-98995" 
          "name": "name-98995" 
          "type": 1 
          "parentId": "-99" 
          "desc": "" 
          "value": -98995 
          "label": "name-98995" 
          "hasChildren": false
        }
      ] 
      "hasChildren": false
    } 
    {
      "id": "-98" 
      "code": "code-98" 
      "name": "name-98" 
      "type": 0 
      "parentId": "-1" 
      "desc": "" 
      "value": -98 
      "label": "name-98" 
      "children": [
        {
          "id": "-97999" 
          "code": "code-97999" 
          "name": "name-97999" 
          "type": 1 
          "parentId": "-98" 
          "desc": "" 
          "value": -97999 
          "label": "name-97999" 
          "hasChildren": false
        } 
        {
          "id": "-97998" 
          "code": "code-97998" 
          "name": "name-97998" 
          "type": 0 
          "parentId": "-98" 
          "desc": "" 
          "value": -97998 
          "label": "name-97998" 
          "hasChildren": false
        } 
        {
          "id": "-97997" 
          "code": "code-97997" 
          "name": "name-97997" 
          "type": 1 
          "parentId": "-98" 
          "desc": "" 
          "value": -97997 
          "label": "name-97997" 
          "hasChildren": false
        } 
        {
          "id": "-97996" 
          "code": "code-97996" 
          "name": "name-97996" 
          "type": 0 
          "parentId": "-98" 
          "desc": "" 
          "value": -97996 
          "label": "name-97996" 
          "hasChildren": false
        } 
        {
          "id": "-97995" 
          "code": "code-97995" 
          "name": "name-97995" 
          "type": 1 
          "parentId": "-98" 
          "desc": "" 
          "value": -97995 
          "label": "name-97995" 
          "hasChildren": false
        }
      ] 
      "hasChildren": false
    } 
  ] 
  "message": null
}
    
cityTree
{
  "code": "SUCCESS" 
  "msg": null 
  "data": [
    {
      "code": "bj" 
      "children": [
        {
          "code": "beijing" 
          "name": "北京" 
          "pid": 1 
          "id": 11 
          "label": "北京" 
          "value": 11
        }
      ] 
      "name": "北京" 
      "pid": -1 
      "id": 1 
      "label": "北京" 
      "value": 1
    } 
    {
      "code": "sx" 
      "children": [
        {
          "code": "taiyuan" 
          "name": "太原" 
          "pid": 2 
          "id": 21 
          "label": "太原" 
          "value": 21
        } 
        {
          "code": "lvliang" 
          "name": "吕梁" 
          "pid": 2 
          "id": 22 
          "label": "吕梁" 
          "value": 22
        }
      ] 
      "name": "山西" 
      "pid": -1 
      "id": 2 
      "label": "山西" 
      "value": 2
    }
  ] 
  "message": null
}
    
getData
{
  "code": "SUCCESS" 
  "msg": null 
  "data": {
    "id": 1 
    "username": "zhangsan" 
    "name": "张三" 
    "password": "a123" 
    "rePassword": "a123" 
    "email": "zhangsan@demo" 
    "mobile": "15312345678" 
    "sex": 3 
    "category": "1" 
    "userType": [
      "1" 
      "2" 
      "3"
    ] 
    "position": [
      1 
      2 
      3 
      4
    ] 
    "postTime": "2022-04-14 21:40:13" 
    "validityTime": [
      "2022-04-14T13:40:13.274 00:00" 
      "2022-04-01T08:37:25.978 00:00"
    ] 
    "orgId": -98998 
    "motionHobby": 2 
    "recreationHobbys": [
      2 
      3 
      4
    ] 
    "cityId": 21 
    "activityDate": "2022-04-14T13:40:13.274 00:00" 
    "activityTime": "2022-04-14T21:40:13.274" 
    "desc": "描述"
  } 
  "message": null
}
    
saveData
{
  "id": 1 
  "username": "zhangsan" 
  "name": "张三" 
  "password": "a123" 
  "rePassword": "a123" 
  "email": "zhangsan@demo" 
  "mobile": "15312345678" 
  "sex": 3 
  "category": "1" 
  "userType": [
    "1" 
    "2" 
    "3"
  ] 
  "position": [
    1 
    2 
    3 
    4
  ] 
  "postTime": "2022-04-14 21:40:13" 
  "validityTime": [
    "2022-04-14T13:40:13.274 00:00" 
    "2022-04-01T08:37:25.978 00:00"
  ] 
  "orgId": -98998 
  "motionHobby": 2 
  "recreationHobbys": [
    2 
    3 
    4
  ] 
  "cityId": 21 
  "activityDate": "2022-04-14T13:40:13.274 00:00" 
  "activityTime": "2022-04-14T21:40:13.274" 
  "desc": "描述"
}SpringBoot后台模拟实现
    
Controller
package com.what21.app.controller.element;
import com.what21.appmon.R;
import com.what21.app.controller.element.demo01.SaveDataParam;
import com.what21.app.model;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.*;
@RestController()
@Api(tags = "ElementDemo01")
@RequestMapping("/element/demo01")
@Slf4j
@Validated
public class ElementDemo01Controller {
    @ApiOperation("性别列表")
    @RequestMapping(value = "/sexList"  method = {RequestMethod.POST})
    public R sexList(HttpServletRequest request  @RequestBody Map<String  Object> paramsMap) {
        log.debug("sexList() start");
        log.debug("接收参数,param="   paramsMap);
        R result = R.ok();
        try {
            List<Map<String  Object>> sexList = new ArrayList<>();
            Map<String  Object> sex01 = new HashMap<>();
            sex01.put("value"  1);
            sex01.put("text"  "男");
            sexList.add(sex01);
            Map<String  Object> sex02 = new HashMap<>();
            sex02.put("value"  2);
            sex02.put("text"  "女");
            sexList.add(sex02);
            Map<String  Object> sex03 = new HashMap<>();
            sex03.put("value"  3);
            sex03.put("text"  "未知");
            sexList.add(sex03);
            result = R.ok(sexList);
        } catch (Exception e) {
            e.printStackTrace();
            result = R.errMsg(e.getMessage());
        }
        log.debug("响应内容,result="   result);
        log.debug("sexList() end");
        return result;
    }
    @ApiOperation("职位列表")
    @RequestMapping(value = "/positionList"  method = {RequestMethod.POST})
    public R positionList(HttpServletRequest request  @RequestBody Map<String  Object> paramsMap) {
        log.debug("positionList() start");
        log.debug("接收参数,param="   paramsMap);
        R result = R.ok();
        try {
            List<Map<String  Object>> positionList = new ArrayList<>();
            Map<String  Object> position01 = new HashMap<>();
            position01.put("value"  1);
            position01.put("text"  "M1");
            positionList.add(position01);
            Map<String  Object> position02 = new HashMap<>();
            position02.put("value"  2);
            position02.put("text"  "M2");
            positionList.add(position02);
            Map<String  Object> position03 = new HashMap<>();
            position03.put("value"  3);
            position03.put("text"  "M3");
            positionList.add(position03);
            Map<String  Object> position04 = new HashMap<>();
            position04.put("value"  4);
            position04.put("text"  "M4");
            positionList.add(position04);
            Map<String  Object> position05 = new HashMap<>();
            position05.put("value"  5);
            position05.put("text"  "M5");
            positionList.add(position05);
            result = R.ok(positionList);
        } catch (Exception e) {
            e.printStackTrace();
            result = R.errMsg(e.getMessage());
        }
        log.debug("响应内容,result="   result);
        log.debug("positionList() end");
        return result;
    }
    @ApiOperation("运动爱好列表")
    @RequestMapping(value = "/motionHobbyList"  method = {RequestMethod.POST})
    public R motionHobbyList(HttpServletRequest request  @RequestBody Map<String  Object> paramsMap) {
        log.debug("motionHobbyList() start");
        log.debug("接收参数,param="   paramsMap);
        R result = R.ok();
        try {
            List<Map<String  Object>> motionHobbyList = new ArrayList<>();
            Map<String  Object> motionHobby01 = new HashMap<>();
            motionHobby01.put("value"  1);
            motionHobby01.put("name"  "篮球");
            motionHobbyList.add(motionHobby01);
            Map<String  Object> motionHobby02 = new HashMap<>();
            motionHobby02.put("value"  2);
            motionHobby02.put("name"  "羽毛球");
            motionHobbyList.add(motionHobby02);
            Map<String  Object> motionHobby03 = new HashMap<>();
            motionHobby03.put("value"  3);
            motionHobby03.put("name"  "兵乓球");
            motionHobbyList.add(motionHobby03);
            Map<String  Object> motionHobby04 = new HashMap<>();
            motionHobby04.put("value"  4);
            motionHobby04.put("name"  "足球");
            motionHobbyList.add(motionHobby04);
            Map<String  Object> motionHobby05 = new HashMap<>();
            motionHobby05.put("value"  5);
            motionHobby05.put("name"  "滑板");
            motionHobbyList.add(motionHobby05);
            result = R.ok(motionHobbyList);
        } catch (Exception e) {
            e.printStackTrace();
            result = R.errMsg(e.getMessage());
        }
        log.debug("响应内容,result="   result);
        log.debug("motionHobbyList() end");
        return result;
    }
    @ApiOperation("娱乐爱好列表")
    @RequestMapping(value = "/recreationHobbyList"  method = {RequestMethod.POST})
    public R recreationHobbyList(HttpServletRequest request  @RequestBody Map<String  Object> paramsMap) {
        log.debug("recreationHobbyList() start");
        log.debug("接收参数,param="   paramsMap);
        R result = R.ok();
        try {
            List<Map<String  Object>> recreationHobbyList = new ArrayList<>();
            Map<String  Object> recreationHobby01 = new HashMap<>();
            recreationHobby01.put("value"  1);
            recreationHobby01.put("name"  "听音乐");
            recreationHobbyList.add(recreationHobby01);
            Map<String  Object> recreationHobby02 = new HashMap<>();
            recreationHobby02.put("value"  2);
            recreationHobby02.put("name"  "看电影");
            recreationHobbyList.add(recreationHobby02);
            Map<String  Object> recreationHobby03 = new HashMap<>();
            recreationHobby03.put("value"  3);
            recreationHobby03.put("name"  "绘画");
            recreationHobbyList.add(recreationHobby03);
            Map<String  Object> recreationHobby04 = new HashMap<>();
            recreationHobby04.put("value"  4);
            recreationHobby04.put("name"  "写小说");
            recreationHobbyList.add(recreationHobby04);
            Map<String  Object> recreationHobby05 = new HashMap<>();
            recreationHobby05.put("value"  5);
            recreationHobby05.put("name"  "看书");
            recreationHobbyList.add(recreationHobby05);
            result = R.ok(recreationHobbyList);
        } catch (Exception e) {
            e.printStackTrace();
            result = R.errMsg(e.getMessage());
        }
        log.debug("响应内容,result="   result);
        log.debug("recreationHobbyList() end");
        return result;
    }
    @ApiOperation("组织机构树")
    @RequestMapping(value = "/orgTree"  method = {RequestMethod.POST})
    public R orgTree(HttpServletRequest request  @RequestBody Map<String  Object> paramsMap) {
        log.debug("orgTree() start");
        log.debug("接收参数,param="   paramsMap);
        R result = null;
        try {
            List<Org> topOrgList = new ArrayList<>();
            for (int i = 1; i < 11; i  ) {
                Org org = new Org();
                org.setParentId(-1L);
                org.setId(org.getParentId() * 100   Long.valueOf(i));
                org.setCode("code"   org.getId());
                org.setName("name"   org.getId());
                org.setType(i % 2);
                org.setDesc("");
                org.setValue(org.getId());
                org.setLabel(org.getName());
                // 子节点
                List<Org> childrenList = new ArrayList<>();
                for (int j = 1; j < 6; j  ) {
                    Org subOrg = new Org();
                    subOrg.setParentId(org.getId());
                    subOrg.setId(org.getId() * 1000   Long.valueOf(j));
                    subOrg.setCode("code"   (org.getId() * 1000   Long.valueOf(j)));
                    subOrg.setName("name"   (org.getId() * 1000   Long.valueOf(j)));
                    subOrg.setType(j % 2);
                    subOrg.setDesc("");
                    subOrg.setValue(subOrg.getId());
                    subOrg.setLabel(subOrg.getName());
                    childrenList.add(subOrg);
                }
                org.setChildren(childrenList);
                topOrgList.add(org);
            }
            result = R.ok(topOrgList);
        } catch (Exception e) {
            e.printStackTrace();
            result = R.errMsg(e.getMessage());
        }
        log.debug("响应内容,result="   result);
        log.debug("orgTree() end");
        return result;
    }
    @ApiOperation("城市树")
    @RequestMapping(value = "/cityTree"  method = {RequestMethod.POST})
    public R cityTree(HttpServletRequest request  @RequestBody Map<String  Object> paramsMap) {
        log.debug("cityTree() start");
        log.debug("接收参数,param="   paramsMap);
        R result = null;
        try {
            List<Map<Object  Object>> topCityList = new ArrayList<>();
            // 北京
            Map<Object  Object> province1Map = new HashMap<>();
            province1Map.put("id"  1);
            province1Map.put("code"  "bj");
            province1Map.put("name"  "北京");
            province1Map.put("pid"  -1);
            province1Map.put("value"  1);
            province1Map.put("label"  "北京");
            // === 城市
            List<Map<Object  Object>> city1List = new ArrayList<>();
            Map<Object  Object> city11Map = new HashMap<>();
            city11Map.put("id"  11);
            city11Map.put("code"  "beijing");
            city11Map.put("name"  "北京");
            city11Map.put("pid"  1);
            city11Map.put("value"  11);
            city11Map.put("label"  "北京");
            city1List.add(city11Map);
            province1Map.put("children"  city1List);
            topCityList.add(province1Map);
            // 山西
            Map<Object  Object> province2Map = new HashMap<>();
            province2Map.put("id"  2);
            province2Map.put("code"  "sx");
            province2Map.put("name"  "山西");
            province2Map.put("pid"  -1);
            province2Map.put("value"  2);
            province2Map.put("label"  "山西");
            // === 城市
            List<Map<Object  Object>> city2List = new ArrayList<>();
            Map<Object  Object> city21Map = new HashMap<>();
            city21Map.put("id"  21);
            city21Map.put("code"  "taiyuan");
            city21Map.put("name"  "太原");
            city21Map.put("pid"  2);
            city21Map.put("value"  21);
            city21Map.put("label"  "太原");
            city2List.add(city21Map);
            Map<Object  Object> city22Map = new HashMap<>();
            city22Map.put("id"  22);
            city22Map.put("code"  "lvliang");
            city22Map.put("name"  "吕梁");
            city22Map.put("pid"  2);
            city22Map.put("value"  22);
            city22Map.put("label"  "吕梁");
            city2List.add(city22Map);
            province2Map.put("children"  city2List);
            topCityList.add(province2Map);
            result = R.ok(topCityList);
        } catch (Exception e) {
            e.printStackTrace();
            result = R.errMsg(e.getMessage());
        }
        log.debug("响应内容,result="   result);
        log.debug("cityTree() end");
        return result;
    }
    @ApiOperation("职位列表")
    @RequestMapping(value = "/getData"  method = {RequestMethod.POST})
    public R getData(HttpServletRequest request  @RequestBody Map<String  Object> paramsMap) {
        log.debug("getData() start");
        log.debug("接收参数,param="   paramsMap);
        R result = null;
        try {
            SaveDataParam paramsObject = new SaveDataParam();
            paramsObject.setId(1L);
            paramsObject.setUsername("zhangsan");
            paramsObject.setName("张三");
            paramsObject.setPassword("a123");
            paramsObject.setRePassword("a123");
            paramsObject.setEmail("zhangsan@demo");
            paramsObject.setMobile("15312345678");
            paramsObject.setSex(3);
            paramsObject.setCategory("1");
            paramsObject.setUserType(Arrays.asList("1"  "2"  "3"));
            paramsObject.setPosition(Arrays.asList(1  2  3  4));
            paramsObject.setPostTime(LocalDateTime.now());
            long currentTime = System.currentTimeMillis();
            paramsObject.setValidityTime(Arrays.asList(new Date()  new Date(currentTime   365 * 24 * 60 * 60 * 100)));
            paramsObject.setOrgId(-98998L);
            paramsObject.setMotionHobby(2);
            paramsObject.setRecreationHobbys(Arrays.asList(2  3  4));
            paramsObject.setCityId(21L);
            paramsObject.setActivityDate(new Date());
            paramsObject.setActivityTime(LocalDateTime.now());
            paramsObject.setDesc("描述");
            result = R.ok(paramsObject);
        } catch (Exception e) {
            e.printStackTrace();
            result = R.errMsg(e.getMessage());
        }
        log.debug("响应内容,result="   result);
        log.debug("getData() end");
        return result;
    }
    @ApiOperation("保存数据")
    @RequestMapping(value = "/saveData"  method = {RequestMethod.POST})
    public R saveData(HttpServletRequest request  @RequestBody SaveDataParam paramsObject) {
        log.debug("saveData() start");
        log.debug("接收参数,param="   paramsObject);
        R result = null;
        try {
            paramsObject.setId(1L);
            result = R.ok(paramsObject);
        } catch (Exception e) {
            e.printStackTrace();
            result = R.errMsg(e.getMessage());
        }
        log.debug("响应内容,result="   result);
        log.debug("saveData() end");
        return result;
    }
}
    
SaveDataParam
package com.what21.app.controller.element.demo01;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.models.auth.In;
import io.swagger.v3.oas.annotationsdia.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.utilst;
@Data
public class SaveDataParam {
    @Schema(description = "ID")
    private Long id;
    @Schema(description = "账号")
    private String username;
    @Schema(description = "姓名")
    private String name;
    @Schema(description = "密码")
    private String password;
    @Schema(description = "重复密码")
    private String rePassword;
    @Schema(description = "邮箱")
    private String email;
    @Schema(description = "手机")
    private String mobile;
    @Schema(description = "性别")
    private Integer sex;
    @Schema(description = "用户类别")
    private String category;
    @Schema(description = "用户类型")
    private List<String> userType;
    @Schema(description = "用户职位")
    private List<Integer> position;
    @Schema(description = "任职时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss"  timezone = "GMT 8")
    private LocalDateTime postTime;
    @Schema(description = "有效期")
    private List<Date> validityTime;
    @Schema(description = "所属部门")
    private Long orgId;
    @Schema(description = "运动爱好")
    private Integer motionHobby;
    @Schema(description = "娱乐爱好")
    private List<Integer> recreationHobbys;
    @Schema(description = "所属城市")
    private Long cityId;
    @Schema(description = "活动日期")
    private Date activityDate;
    @Schema(description = "活动时间")
    private LocalDateTime activityTime;
    @Schema(description = "描述")
    private String desc;
    /**
     * @param postTime
     */
//    public void setPostTime(String postTime) {
//        try {
//            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
//            this.postTime = LocalDateTime.parse(postTime  dtf);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
}
    
参考地址:
ElementPlus组件库,树形表格及树形数据,树形表格懒加载:
toutiao/article/7085741060000956963/
Form表单&表单校验:
element-plus.gitee.io/zh-CN/component/form.html#表单校验
操作表单数据:
toutiao/article/7065181959022133764/
DatePicker日期选择器:
element-plus.gitee.io/zh-CN/component/date-picker.html
DateTimePicker日期时间选择器:
element-plus.gitee.io/zh-CN/component/datetime-picker.html
TreeSelect树选择:
element-plus.gitee.io/zh-CN/component/tree-select.html#基础用法




