templs-file-watch.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <template>
  2. <div class="">
  3. <div>
  4. <codemirror
  5. ref="cm"
  6. v-model="code"
  7. :options="cmOptions"
  8. ></codemirror>
  9. </div>
  10. <span slot="footer" class="dialog-footer">
  11. <el-button @click="cancel()">取消</el-button>
  12. <!-- <el-button type="primary" @click="writeCode()">确定</el-button> -->
  13. </span>
  14. </div>
  15. </template>
  16. <script>
  17. // 全局引入vue-codemirror
  18. import {codemirror} from 'vue-codemirror';
  19. // 引入css文件
  20. import 'codemirror/lib/codemirror.css'
  21. // 引入主题 可以从 codemirror/theme/ 下引入多个
  22. import 'codemirror/theme/idea.css'
  23. // 引入语言模式 可以从 codemirror/mode/ 下引入多个
  24. import 'codemirror/mode/sql/sql.js';
  25. import 'codemirror/mode/python/python.js'
  26. import 'codemirror/mode/javascript/javascript.js'
  27. // 搜索功能
  28. // find:Ctrl-F (PC), Cmd-F (Mac)
  29. // findNext:Ctrl-G (PC), Cmd-G (Mac)
  30. // findPrev:Shift-Ctrl-G (PC), Shift-Cmd-G (Mac)
  31. // replace:Shift-Ctrl-F (PC), Cmd-Alt-F (Mac)
  32. // replaceAll:Shift-Ctrl-R (PC), Shift-Cmd-Alt-F (Mac)
  33. import 'codemirror/addon/dialog/dialog.css'
  34. import 'codemirror/addon/dialog/dialog'
  35. import 'codemirror/addon/search/searchcursor'
  36. import 'codemirror/addon/search/search'
  37. import 'codemirror/addon/search/jump-to-line'
  38. import 'codemirror/addon/search/matchesonscrollbar'
  39. import 'codemirror/addon/search/match-highlighter'
  40. // 代码提示功能 具体语言可以从 codemirror/addon/hint/ 下引入多个
  41. import 'codemirror/addon/hint/show-hint.css';
  42. import 'codemirror/addon/hint/show-hint';
  43. import 'codemirror/addon/hint/sql-hint';
  44. import 'codemirror/addon/hint/anyword-hint';
  45. import "codemirror/addon/hint/javascript-hint.js";
  46. import "codemirror/addon/lint/javascript-lint.js";
  47. import 'codemirror/addon/lint/lint'
  48. import 'codemirror/addon/lint/lint.css'
  49. // 高亮行功能
  50. import 'codemirror/addon/selection/active-line'
  51. import 'codemirror/addon/selection/selection-pointer'
  52. // 调整scrollbar样式功能
  53. import 'codemirror/addon/scroll/simplescrollbars.css'
  54. import 'codemirror/addon/scroll/simplescrollbars'
  55. // 自动括号匹配功能
  56. import 'codemirror/addon/edit/matchbrackets'
  57. import 'codemirror/addon/edit/closebrackets'
  58. // 全屏功能 由于项目复杂,自带的全屏功能一般不好使
  59. import 'codemirror/addon/display/fullscreen.css'
  60. import 'codemirror/addon/display/fullscreen'
  61. // 显示自动刷新
  62. import 'codemirror/addon/display/autorefresh'
  63. // 多语言支持?
  64. import 'codemirror/addon/mode/overlay'
  65. import 'codemirror/addon/mode/multiplex'
  66. // 代码段折叠功能
  67. import 'codemirror/addon/fold/foldcode'
  68. import 'codemirror/addon/fold/foldgutter'
  69. import 'codemirror/addon/fold/foldgutter.css'
  70. import 'codemirror/addon/fold/brace-fold.js'
  71. import 'codemirror/addon/fold/comment-fold.js'
  72. import 'codemirror/addon/fold/xml-fold.js';
  73. import 'codemirror/addon/fold/indent-fold.js';
  74. import 'codemirror/addon/fold/markdown-fold.js';
  75. import 'codemirror/addon/fold/comment-fold.js';
  76. // merge功能
  77. import 'codemirror/addon/merge/merge.css'
  78. import 'codemirror/addon/merge/merge'
  79. // google DiffMatchPatch
  80. import DiffMatchPatch from 'diff-match-patch'
  81. // DiffMatchPatch config with global
  82. window.diff_match_patch = DiffMatchPatch;
  83. window.DIFF_DELETE = -1;
  84. window.DIFF_INSERT = 1;
  85. window.DIFF_EQUAL = 0;
  86. export default {
  87. name:'Simple',
  88. components:{
  89. codemirror
  90. },
  91. data() {
  92. return {
  93. code:'',
  94. temId:null,
  95. fileName:'',
  96. cmOptions: {
  97. // 语言及语法模式
  98. mode: 'text/x-python',
  99. // 主题
  100. theme: 'idea',
  101. readOnly:'nocursor',
  102. // 显示行数
  103. line: true,
  104. lineNumbers: true,
  105. // 软换行
  106. lineWrapping: true,
  107. // tab宽度
  108. tabSize: 4,
  109. foldGutter: true, // 启用行槽中的代码折叠
  110. autoCloseBrackets: true, // 自动闭合符号
  111. styleActiveLine: true, // 显示选中行的样式
  112. lint: true,
  113. gutters: [
  114. "CodeMirror-lint-markers",//代码错误检测
  115. "CodeMirror-linenumbers",
  116. "CodeMirror-foldgutter",//展开收起
  117. ],
  118. hintOptions: {
  119. // 避免由于提示列表只有一个提示信息时,自动填充
  120. completeSingle: false,
  121. // 不同的语言支持从配置中读取自定义配置 sql语言允许配置表和字段信息,用于代码提示
  122. tables: {
  123. "table1": ["c1", "c2"],
  124. },
  125. },
  126. // 高亮行功能
  127. styleActiveLine: true,
  128. // 调整scrollbar样式功能
  129. scrollbarStyle: 'overlay',
  130. // 自动括号匹配功能
  131. matchBrackets: true
  132. }
  133. };
  134. },
  135. activated() {
  136. // 处理参数,根据参数初始化数据
  137. let temId=this.$route.query.temId;
  138. let fileName=this.$route.query.fileName;
  139. this.init(temId,fileName);
  140. },
  141. methods: {
  142. init(temId,fileName) {
  143. this.temId=temId;
  144. this.fileName=fileName;
  145. this.$http({
  146. url:this.$http.adornUrl('/algs/templs/watchTemFile'),
  147. method:'get',
  148. params:this.$http.adornParams({
  149. temId:this.temId,
  150. fileName:this.fileName
  151. }),
  152. }).then(({data})=>{
  153. this.code=data.content;
  154. });
  155. },
  156. //点击取消按钮,跳转回原路径
  157. cancel(){
  158. this.$router.replace({ path: '/alg-templs'});
  159. }
  160. },
  161. mounted(){
  162. this.$refs.cm.codemirror.setSize("auto", (document.documentElement.clientHeight - 200) + "px")
  163. this.$nextTick(() => {
  164. window.addEventListener('resize', () => {
  165. //监听浏览器窗口大小改变
  166. //浏览器变化执行动作
  167. this.$refs.cm.codemirror.setSize("auto", (document.documentElement.clientHeight - 200) + "px")
  168. });
  169. });
  170. this.$http({
  171. url:this.$http.adornUrl('/algs/templs/watchTemFile'),
  172. method:'get',
  173. params:this.$http.adornParams({
  174. temId:this.temId,
  175. fileName:this.fileName
  176. }),
  177. }).then(({data})=>{
  178. this.code=data
  179. });
  180. }
  181. };
  182. </script>