当前位置:   article > 正文

vue实现sql高亮,格式化,自动匹配大小写功能_vue sqlformatter

vue sqlformatter

1.安装

sql-formatter选择低版本,高版本会出错

sql-formatter格式化  vue-codemirror文本框  vue-highlightjs高亮

  1. npm install --save sql-formatter@2.3.3
  2. npm install --save vue-codemirror
  3. npm install --save vue-highlightjs

2.使用方式

封装的子组件SqlEditor

  1. <template>
  2. <div>
  3. <textarea
  4. ref="mycode"
  5. class="codesql"
  6. v-model="value"
  7. >
  8. </textarea>
  9. </div>
  10. </template>
  11. <script>
  12. import "codemirror/theme/ambiance.css";
  13. import "codemirror/lib/codemirror.css";
  14. import "codemirror/addon/hint/show-hint.css";
  15. let CodeMirror = require("codemirror/lib/codemirror");
  16. require("codemirror/addon/edit/matchbrackets");
  17. require("codemirror/addon/selection/active-line");
  18. require("codemirror/mode/sql/sql");
  19. require("codemirror/addon/hint/show-hint");
  20. require("codemirror/addon/hint/sql-hint");
  21. export default {
  22. data() {
  23. return {
  24. editor: null
  25. }
  26. },
  27. props: {
  28. value: {
  29. type: String,
  30. default: ''
  31. },
  32. sqlStyle: {
  33. type: String,
  34. default: 'default'
  35. },
  36. readOnly: {
  37. type: [Boolean, String]
  38. }
  39. },
  40. watch: {
  41. newVal (newV, oldV) {
  42. if (this.editor) {
  43. this.$emit('changeTextarea', this.editor.getValue())
  44. }
  45. }
  46. },
  47. computed: {
  48. newVal () {
  49. if (this.editor) {
  50. return this.editor.getValue()
  51. } else {
  52. return ''
  53. }
  54. }
  55. },
  56. mounted(){
  57. let mime = 'text/x-mariadb'
  58. //let theme = 'ambiance'//设置主题,不设置的会使用默认主题
  59. this.editor = CodeMirror.fromTextArea(this.$refs.mycode, {
  60. value: this.value,
  61. mode: mime,//选择对应代码编辑器的语言,我这边选的是数据库,根据个人情况自行设置即可
  62. indentWithTabs: true,
  63. smartIndent: true,
  64. lineNumbers: true,
  65. matchBrackets: true,
  66. cursorHeight: 1,
  67. lineWrapping: true,
  68. readOnly: this.readOnly,
  69. //theme: theme,
  70. // autofocus: true,
  71. extraKeys: {'Ctrl': 'autocomplete'},//自定义快捷键
  72. hintOptions: {//自定义提示选项
  73. // 当匹配只有一项的时候是否自动补全
  74. completeSingle: false,
  75. // tables: {
  76. // users: ['name', 'score', 'birthDate'],
  77. // countries: ['name', 'population', 'size']
  78. // }
  79. }
  80. })
  81. //代码自动提示功能,记住使用cursorActivity事件不要使用change事件,这是一个坑,那样页面直接会卡死
  82. this.editor.on('inputRead', () => {
  83. this.editor.showHint()
  84. })
  85. },
  86. methods: {
  87. setVal () {
  88. if (this.editor) {
  89. if (this.value === '') {
  90. this.editor.setValue('')
  91. } else {
  92. this.editor.setValue(this.value)
  93. }
  94. }
  95. }
  96. }
  97. }
  98. </script>
  99. <style>
  100. .CodeMirror {
  101. color: black;
  102. direction: ltr;
  103. line-height: 22px;
  104. }
  105. // 这句为了解决匹配框显示有问题而加
  106. .CodeMirror-hints{
  107. z-index: 9999 !important;
  108. }
  109. </style>

父组件调用

  1. <template>
  2. <div>
  3. <SqlEditor ref="sqleditor"
  4. :value="basicInfoForm.sqlMain"
  5. @changeTextarea="changeTextarea($event)"
  6. />
  7. <el-button type="primary" size="small" class="sql-btn" @click="formaterSql (basicInfoForm.sqlMain)">格式化sql</el-button>
  8. </div>
  9. </template>
  10. <script>
  11. import sqlFormatter from 'sql-formatter'
  12. import SqlEditor from '@/components/SqlEditor'
  13. export default {
  14. components: {
  15. SqlEditor
  16. },
  17. data() {
  18. return{
  19. basicInfoForm:{
  20. sqlMain: ''
  21. }
  22. }
  23. },
  24. methods:{
  25. changeTextarea (val){
  26. this.$set(this.basicInfoForm, 'sqlMain', val)
  27. },
  28. formaterSql (val) {
  29. let dom = this.$refs.sqleditor
  30. dom.editor.setValue(sqlFormatter.format(dom.editor.getValue()))
  31. },
  32. },
  33. }
  34. </script>

在这里插入图片描述

支持格式:sql、pl/sql、n1ql、db2、

功能是完成了 ,但是sql-formatter插件格式化出来的效果和我们想要的格式还是有差距,一些复杂的sql校验和HUE并不能完全匹配,甚至后台校验大部分都不能通过。想想也只能改源码了,找到sql-formatter的源码,进行了一些源码修改,最终搞定。

网上看到过很多只实现了格式化功能或者只实现了高亮、大小写匹配功能,没有三者同时实现的,代码和思路不太符合我的需要,并且几乎每个人的版本都是复制粘贴的一模一样的内容,今天我附上自己纯手敲齐全代码,欢迎参考点赞~

GitHub地址:https://github.com/mijing-web/sql-editor

转载自:

前端vue项目中使用sql-formatter结合codemirror实现sql编辑器中的SQL代码格式化功能、自动匹配大小写功能、高亮功能_Mini_小仙女的博客-CSDN博客https://blog.csdn.net/weixin_45851208/article/details/105118847如果你觉得本文对你有帮助,欢迎转载和点赞,转载麻烦请注明出处,谢谢~~~~ ^ _ ^ ~~~ 

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

闽ICP备14008679号