当前位置:   article > 正文

vue聊天页面_vue聊天界面

vue聊天界面

输入高血压会显示高亮,但如果输入我得了高血压就不会显示这关键字了,,,希望有人指导一下修改吧

 

html

  1. <div class="box">
  2. <div class="chat" ref="chatContent">
  3. <!-- 左边客服回复的区域 -->
  4. <div class="left">
  5. <!-- 头像 -->
  6. <div>
  7. <img src="../assets/medicine.jpg" alt="">
  8. </div>
  9. <!-- 聊天文本 -->
  10. <div class="message">
  11. <p @click="z">你好</p>
  12. </div>
  13. </div>
  14. <!-- 右边用户发信息区域 -->
  15. <div class="right">
  16. <!-- 头像 -->
  17. <!-- 聊天文本 -->
  18. <div class="message-right">
  19. <p>你好</p>
  20. </div>
  21. <div>
  22. <img src="../assets/new.jpg" alt="">
  23. </div>
  24. </div>
  25. </div>
  26. <!-- 模糊查询 -->
  27. <!-- 输入框位置 -->
  28. <div class="txt">
  29. <div class="suggest" v-show="show">
  30. <li v-for="(k,index) in filterFruitList" :key="index" @click="getTxt(k,index)">
  31. <span v-html="k"></span>
  32. </li>
  33. </div>
  34. <input type="text" v-model="txt" @input="change">
  35. <van-button type="info" @click="send">发送</van-button>
  36. </div>
  37. </div>

 css,使用了less预处理

  1. *{
  2. margin: 0;
  3. padding: 0;
  4. box-sizing: border-box;
  5. }
  6. .box{
  7. background:#efefef;
  8. width: 100%;
  9. height: calc(100% );
  10. box-sizing: border-box;
  11. position: absolute;
  12. overflow: auto;
  13. padding: 5px 0;
  14. }
  15. .chat{
  16. margin-bottom: 75px;
  17. height: 90vh;
  18. overflow-y: auto;
  19. }
  20. li{
  21. list-style: none;
  22. }
  23. img{
  24. width: 45px;
  25. height: 45px;
  26. border-radius: 50%;
  27. }
  28. .left{
  29. width: 100%;
  30. padding: 0 10px;
  31. text-align: left;
  32. display: flex;
  33. align-items: center;
  34. margin-top: 5px;
  35. }
  36. .right{
  37. width: 100%;
  38. padding: 0 10px;
  39. text-align: right;
  40. display: flex;
  41. align-items: center;
  42. justify-content: flex-end;
  43. margin-top: 5px;
  44. }
  45. .message{
  46. max-width: 70%;
  47. margin-left: 10px;
  48. p{
  49. background: #fff;
  50. padding: 10px;
  51. border-radius: 4px;
  52. }
  53. }
  54. .message-right{
  55. margin-right: 10px;
  56. p{
  57. background: #95ec69;
  58. padding: 10px;
  59. border-radius: 4px;
  60. }
  61. }
  62. .txt{
  63. width: 90%;
  64. position: fixed;
  65. bottom: 30px;
  66. left: 50%;
  67. transform: translateX(-50%);
  68. button{
  69. margin-left: 10px;
  70. height: 35px;
  71. float: right;
  72. border: 0;
  73. background: #1989fa;
  74. }
  75. input{
  76. width: 75%;
  77. height: 35px;
  78. border: 0;
  79. border-radius: 5px;
  80. padding: 0 10px;
  81. }
  82. }
  83. .suggest{
  84. width: 60%;
  85. padding: 10px 5px;
  86. background: #fff;
  87. border-radius: 10px;
  88. margin-left: 10px;
  89. margin-bottom: 10px;
  90. li{
  91. margin: 5px 0;
  92. }
  93. }
  94. .hint{
  95. font-size: 12px;
  96. color: #1989fa;
  97. margin-top: 4px;
  98. }

js

  1. data(){
  2. return{
  3. json:require('../json/index.json'),
  4. value: '',
  5. txt:'',
  6. show:false,
  7. num:-1
  8. }
  9. },
  10. mounted(){
  11. },
  12. methods:{
  13. z(){
  14. console.log(1111111111111);
  15. },
  16. send(){
  17. if(this.txt==''){
  18. this.$toast.fail('输入内容')
  19. return
  20. }
  21. let chat=document.querySelector('.chat')
  22. let right=document.createElement('div')
  23. right.classList.add('right')
  24. right.innerHTML=`
  25. <div class="message-right">
  26. <p>${this.txt}</p>
  27. </div>
  28. <div>
  29. <img src="${require('../assets/new.jpg')}" alt="">
  30. </div>`
  31. chat.appendChild(right)
  32. this.reply()
  33. },
  34. reply(){
  35. let str=''
  36. this.json.forEach((item) => {
  37. if(this.num>=0){
  38. str=item.answer[this.num].name
  39. }else{
  40. if(item.name.indexOf(this.txt)>-1){
  41. str=item.headline[0].name
  42. }
  43. }
  44. })
  45. let chat=document.querySelector('.chat')
  46. let left=document.createElement('div')
  47. left.classList.add('left')
  48. left.innerHTML=`
  49. <div>
  50. <img src="${require('../assets/medicine.jpg')}" alt="">
  51. </div>
  52. <div class="message">
  53. <p>${str}
  54. <span style="display:${this.num>=0?'none':'block'}" class="hint">点击需要资讯的问题</span>
  55. </p>
  56. </div>
  57. `
  58. chat.appendChild(left)
  59. this.num=-1
  60. this.txt=''
  61. this.$nextTick().then(() => {
  62. let i=document.querySelectorAll('i')
  63. console.log(this.txt);
  64. i.forEach((key,index)=>{
  65. key.addEventListener('click',this.getTxtFunction)
  66. this.$refs.chatContent.scrollTop = this.$refs.chatContent.scrollHeight;
  67. })
  68. })
  69. },
  70. getTxtFunction(e){
  71. this.txt=e.target.innerHTML
  72. let z=this.txt.slice(0,1)
  73. this.num=z-1
  74. },
  75. onSearch(val) {
  76. Toast(val);
  77. },
  78. change(){
  79. setTimeout(()=>{
  80. if(this.txt==''){
  81. this.show=false
  82. }
  83. let arr= this.json.filter((item) => {
  84. if(item.name.indexOf(this.txt) !== -1){
  85. this.show=true
  86. }
  87. return item.name.indexOf(this.txt) !== -1;
  88. })
  89. if(this.txt==''){
  90. this.show=false
  91. }
  92. },1000)
  93. },
  94. getTxt(k,index){
  95. console.log(k,index);
  96. var reg = /[\u4e00-\u9fa5]/g;
  97. var names = k.match(reg);
  98. let str = names.join("");
  99. this.txt=str
  100. }
  101. },
  102. watch:{
  103. },
  104. computed:{
  105. filterFruitList() {
  106. if (this.txt=='') {
  107. this.show=false
  108. }
  109. let result=[]
  110. this.json.forEach((item) => {
  111. if( item.name.indexOf(this.txt) !== -1){
  112. result.push(item)
  113. }
  114. })
  115. let dataList=[]
  116. result.forEach((k)=>{
  117. const reg=new RegExp(this.txt,'ig')
  118. let title=k.name.replace(reg,(val)=>`<span style='color:red'>${val}</span>`)
  119. dataList.push(title)
  120. })
  121. return dataList
  122. }
  123. }

还引入了一个json格式的文件当数据使用,是一个数组里面包对象,格式如下

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/761331
推荐阅读
相关标签
  

闽ICP备14008679号