TextareaExtend.vue 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // 带 插入 表情/客户昵称 等扩展工具栏的文本内容框
  2. <script>
  3. export default {
  4. name: '',
  5. props: {
  6. value: '',
  7. // ['emoji','insertCustomerNickName']
  8. toolbar: {
  9. type: Array,
  10. default: () => ['emoji']
  11. }
  12. },
  13. components: {
  14. SelectEmoji: () => import('@/components/SelectEmoji')
  15. },
  16. data() {
  17. return {}
  18. },
  19. computed: {
  20. proxyValue: {
  21. get() {
  22. return this.value
  23. },
  24. set(val) {
  25. this.$emit('input', val)
  26. }
  27. }
  28. },
  29. watch: {},
  30. created() {},
  31. mounted() {},
  32. methods: {
  33. // 插入内容
  34. insertContent(value) {
  35. const $textarea = this.$refs.textarea.$el.children[0]
  36. const content = this.proxyValue || ''
  37. const textIndex = $textarea.selectionStart
  38. this.proxyValue = content.slice(0, textIndex) + value + content.slice(textIndex)
  39. }
  40. }
  41. }
  42. </script>
  43. <template>
  44. <div>
  45. <el-input ref="textarea" v-model="proxyValue" type="textarea" v-bind="$attrs" v-on="$listeners"></el-input>
  46. <div class="mt10">
  47. <SelectEmoji v-if="toolbar.includes('emoji')" @select="insertContent">
  48. <template v-slot:default="{ emojisArr }">
  49. <el-button>
  50. {{ emojisArr[0].emoji }}
  51. </el-button>
  52. </template>
  53. </SelectEmoji>
  54. <el-button v-if="toolbar.includes('insertCustomerNickName')" @click="insertContent('#客户昵称#')" class="ml10">
  55. 插入客户昵称
  56. </el-button>
  57. </div>
  58. </div>
  59. </template>
  60. <style lang="scss" scoped>
  61. textarea {
  62. white-space: pre-wrap; //保留所有空格
  63. }
  64. </style>