类似微博的输入@自动弹出选择用户界面

1.评论区的代码(部分无关的删除)

<a-modal
      v-model="commentsDialogVisible"
      title="评论"
      @ok="addComment"
      @cancel="commentsDialogVisible = false"
      destroyOnClose
    >
      <user-select :visible="visible" title="选择用户" @onSelect="triggerChange2" @cancel="visible = false" />
      <a-input
              type="textarea"
              :rows="5"
              placeholder="评论内容(可输入@选择用户)"
              style="width: 100%;"
              v-model="commentContent"
              @input="onInput"
              ref="comments"
      >
      </a-input>
  
    </a-modal>

2.相关js代码

 onInput (e) {
    // console.log(e)
    if(e.data === '@'){
      // console.log('已输入@')
      this.visible = true
    }
  }
triggerChange2  ({ id, name }) {
    this.visible = false
    // Should provide an event to pass value to Form.
    // console.log(id)
    this.commentContent = this.commentContent + name + ' ';
    ((this.$refs.comments) as HTMLTextAreaElement).focus()
  }

如果用的是TS语法,this.$refs.comments要用HTMLTextAreaElement进行强弱类型转化
js则不用
在这里插入图片描述

2.输入@

直接弹出选择框
选择框是提前写好的组件user-select
在这里插入图片描述

<template>
  <a-modal :visible="visible" :title="title" :mask="mask" :width="600"
    style="top: 20px;"    
      @cancel="$emit('cancel')"
      :footer="null"
    >
    <div class="table-page-search-wrapper" style="margin-bottom: 16px;">
      <a-row>
        <a-col :span="8">
          <a-input v-model="query.name" @change="search" placeholder="输入姓名"></a-input>
        </a-col>
        <a-col :span="8">
          <a-input v-model="query.mobile" @change="search" placeholder="输入手机号"></a-input>
        </a-col>
        <a-col :span="8">
          <a-input v-model="query.username" @change="search" placeholder="输入用户名"></a-input>
        </a-col>
      </a-row>
    </div>
    <s-table
      ref="table" size="default" :columns="columns" :data="loadData"
    >
      <span slot="action" slot-scope="text, record">
        <a @click="$emit('onSelect', record)">选择</a>
      </span>
    </s-table>
  </a-modal>
</template>
<script>
import STable from '@/components/Table'
import { getUserList } from '@/api/module/api-user'
import { debounce } from 'lodash'

export default {
  props: {
    title: {
      type: String
    },
    visible: {
      type: Boolean
    },
    mask: {
      type: Boolean,
      default(){
        return false
      }
    }
  },
  components: { STable },
  data(){
    return {
      columns: [
        {
          dataIndex: "id",
          title: "#"
        },
        {
          dataIndex: "name",
          title: "名字"
        },
        {
          dataIndex: "orgName",
          title: "所属公司"
        },
        {
          dataIndex: "mobile",
          title: "电话",
        },
        {
          title: "操作",
          scopedSlots: { customRender: "action" }
        }
      ],
      query: {
          mobile: '',
          name: '',
          username: '',
      },
      loadData: (param) => {
        return getUserList(this.query, param)
      }
    }
  },
  methods: {
    search: debounce(function(){
      this.$refs.table.refresh()
    }, 200)
  }
}
</script>
<style lang="scss" scoped>

</style>

需要配合相关后台接口

在这里插入图片描述
提交表单后配合后端接口就实现功能了
这里管理员后面有一个空格

这篇博客是为了记录我学习和工作中遇到的问题,方便回顾,仅供参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值