vue3实现Form的字段权限控制

正在开发的一个系统,需要根据权限进行可编辑字段的控制。备忘一下!

自定义指令:

const fieldHas = function (app) {

  app.directive('fieldHas', {

    mounted: function (el, binding) {

      const { value } = binding

      // 自定义指令的执行函数,,取到vuex保存的字段权限,格式类似于 {formName:{fieldName:fieldRule}}

//如果没有权限数据,视为该字段为完全控制

      const fieldPermissions = store.state.webRoot.fields[value]

      if (!fieldPermissions) { return }

      const elNames = Object.keys(fieldPermissions)

      elNames.forEach(item => {

        const els = el.querySelector('.' + item)

        if (!els) { return }

        switch (fieldPermissions[ item ])

        {

          case 'r'://只读权限

            let inputDivs = els.querySelectorAll('.el-textarea')//单独处理el-textarea的上层div,其余的输入控制好像都有el-input,具体还未深入研究

            inputDivs = inputDivs.length > 0 ? inputDivs : els.querySelectorAll('.el-input')

            if (inputDivs && inputDivs.length > 0)

            {

              inputDivs.forEach(div => {

                div.classList.add('is-disabled')

                div.classList.remove('el-input--suffix')

              })

            }

            let inputs = els.querySelectorAll('textarea')//单独处理textarea,其余的输入控制好像都是input,具体还未深入研究

            inputs = inputs.length > 0 ? inputs : els.querySelectorAll('input')

            if (inputs && inputs.length > 0)

            {

              inputs.forEach(ele => {

                ele.disabled = true

              })

            }

            els.querySelector('.el-input__suffix') && els.querySelector('.el-input__suffix').remove()

            el.addEventListener('click', (e) => { // 禁用单击事件,屏蔽clearable和列表框的下拉动作

              e.preventDefault()

              e.stopPropagation()

            }, true)

            break

          case 'h'://无权限

            els.style.display = 'none'

            break

        }

      })

    }

  })

使用:

<el-form v-fieldHas="'formName'">

       <el-form-item class="fieldName"/>

</el-form>

谁有更好的方案,欢迎留言!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值