一、初始载入
1.SQL页面在载入完成时会先触发各区块内容的数据请求方法,载入下图所见内容,如要查看返回数据的全貌可以自行打印。
// mounted 钩子函数:页面加载完成时触发,避免某些DOM节点未加载,获取不到对应的属性/数据mounted () {// 获取右边代码片段栏的高度this.$nextTick(function () {var height = this.$refs.rightAside.$el.clientHeightthis.rightAsideHeight = height // 右边栏的高度})this.getJiaoBenList() // 左侧脚本列表集合this.getScriptfrag(null) // 右侧代码片段列表this.getDataRatio() // 获取数据脚本状态占比this.getDirectoryName() // 获取脚本列表里目录的对应数据,如:所属哪一个机构域this.handleSelect() // 后台定义的数据字典信息,如数据库类型jdbcType,排序类型,脚本状态this.getPrincipalBy() // 获取指派人即脚本负责人下拉框信息this.asyncGetOrgDomainInfoDropDown() // 机构域下拉框信息this.getProjectInfo('') // 获取所有项目信息},
2.如下图所示各块区域,对应权限条件下的初始数据就会通过上述钩子函数内的代码加载完成,如左侧脚本列表
区的现有项目下拉列表和全部项目脚本目录等。

二、左侧脚本列表区

1.项目选择
在确认机构域后,首先可以控制的是所属项目,该选择会导致初始化的全部项目脚本列表,变成选中项目下的全部脚本列表

| 描述 | 便查代码 |
|---|---|
| 项目数据来源 | getProjectInfo() |
| input框里面选中的选项 | v-model=”projectInfo.projectId |
| 下拉框列表数据 | projectInfoOptions |
2.新增项目和项目详情
鼠标滑至菜单会触发 getCaozuo (command)弹出”新增项目”和”项目详情”选项。


| 操作 | 描述 | 便查代码 |
|---|---|---|
| 触发菜单选项 | getCaozuo(command) | |
| 点击新增项目 | 该弹窗抽离成addProjectInfo.vue组件(点击前往查看),确认后会生成一个新的项目名 | this.$refs.addProjectInfoVue.dialogFormVisible = true |
| 点击项目详情 | 如果项目为空则报警告,选择项目则获取机构域orgDomainId和项目projectId作为参数 | getProjectInfoByProjectId(orgDomainId,projectId) |
3.脚本搜索框
按脚本名模糊搜索还可以可筛选按钮一起关联筛选
| 操作 | 描述 | 便查代码 |
|---|---|---|
| 输入脚本名回车 | 习惯性操作 | searchSql(searchKeyword) |
| 输入脚本名点搜索图标 | 图标的解释和替代回车作用 | searchSql(searchKeyword) |
| 清除输入和回车空白搜索 | 清除输入没有展示全部脚本的功能 | searchSql(“”) |
| 关联筛选比较笨拙,还需优化 |
4.新增脚本目录以及导入导出




| 操作 | 描述 | 便查代码 |
|---|---|---|
| 触发菜单选项 | 会触发command === ‘01’等指令 | getCaozuo(command) |
| 新增脚本目录 | command === ‘01’ | this.showAddDirectory() |
| 导入 | command === ‘02’ | this.dialogDaoru = true 弹出对话框 this.gengxinSciptInfo() |
| 导出 | command === ‘03’ | this.dialogDaoChu = true |
5.筛选按钮

图上看到的脚本列表都是符合筛选条件的,同时数据库筛选,会联动编辑器区的数据库类型回显
| 操作 | 描述 | 便查代码 |
|---|---|---|
| 触发 | 对应下拉按钮的command指令 | getdbTypes (数据库)/getRoles (用户)/getStatus (脚本状态) |
| 数据库筛选 | 按照各种数据库类型筛选 | handleSelect( )中请求到jdbcTypeOptions |
| 用户筛选 | 按照用户类型筛选 | principalByOptions /getPrincipalBy (获取下拉) |
| 脚本状态筛选 | 脚本状态现在有三种 | handleSelect( )中请求到scriptStatusOptions |
| 关联筛选 | handleSelect ()方法中发送请求 | constantKeys: ‘versionStatus,jdbcType,orderType’ 三个值中请求时为空的值就不会参与筛选 |
6.脚本列表
① 脚本列表的结构
element-ui 提供了一个递归组件
| 脚本列表数据 | :data=”treeList” | 初始数据在getJiaoBenList ()中返回 |
|---|---|---|
数据结构:
通过对这样数据结构的treeList解析,会得到平台所见的脚本列表
② 脚本列表的node节点

在标签下用插值表达式直接获取{{ node.data }} 可以得到该节点下的所有数据,比如我打印 aaaaaaaa 这个脚本
③ 脚本目录的相关操作




| 操作 | 描述 | 便查代码 |
|---|---|---|
| 点击菜单按钮触发 | 不写trigger属性的时候,默认是hover触发 | trigger=”click” |
| 新建脚本 | 新增的弹窗抽离成addScriptInfoVue组件(点击前往查看) | addTable()/确认在addScriptInfoVue组件里 |
| 编辑目录 | 这功能很小 | showEditDirectory弹窗/editDirectory确认修改 |
| 删除目录 | 分l两种:目录下有脚本还是空 | deleteDirectory |
④点击脚本

| 操作 | 描述 | 便查代码 |
|---|---|---|
| 1.点击脚本 | 重点是让table存储到各项状态的数据 | getScript (item) |
| 2.显示脚本标签 | 将脚本包装成tabs标签对象push给tabsList, | getScript (item)中this.tabsList.push(this.baocunObject) |
| 3.脚本状态 | 这里的状态好像后来转给后台设置了 | this.baocunObject对象中的scriptStatus |
| 4.数据库类型 | 都在baocunObjec这个对象中 | this.baocunObject中dbType: item.dbType, dbTypeName: item.dbTypeName, |
| 5.脚本内容 | 都在baocunObjec这个对象中 | content: item.content, |
没有了修改脚本名?和删除脚本功能?
点击脚本产生的一系列关联基本都在中间编辑器区里 ↓↓↓↓↓↓↓↓↓↓↓
三、中间编辑器区

1.脚本操作功能区


| 操作 | 描述 | 便查代码 |
|---|---|---|
| 新建 | 弹出空新建对话框/和目录下新建脚本区别在手动选择目录 | addTable/this.nodeId判断是都会目录下新建 |
| 保存 | 保存有三种触发,这是其中一种,走的都是一个方法 | this.saveScript(‘save’) |
| 提交 | 提交功能是后来从保存功能中抽离出来的,因为和保存功能非常类似,又不想重复一遍代码,所以走的还是保存功能,只不过传的参数是”submit” | this.saveScript(‘submit’) |
| 指派 | 将脚本任务指派给… | assign(对话框 )/assignPrincipalBy (指派) |
| SQL格式化 | 调用了编辑器组件的sqlFormat | sqlFormat ( ) |
2.脚本标签栏

| 操作 | 描述 | 便查代码 |
|---|---|---|
| 触发 | 点击脚本列表里的脚本时,就推送了一个对象给tabsList,tabsList会加载出对应的标签 | addTable/this.nodeId判断是都会目录下新建 |
| 点击标签 | 该标签对象内的所有属性都会被切换 | getSqlContent(tabsValue) |
| 关闭标签 | 脚本未被修改:直接关闭,修改过的脚本关闭会提示是否保存 | removeTab( ) |
| 修改脚本后标签 | ![]() |
item.contentIsStars |
| 右键标签 | ![]() |
getRightClickName( )/closeMenu |
| 标签缩略菜单 | ![]() |
handleTabsCommand/dropdownClose |
3.脚本状态栏

脚本状态栏表明了当前脚本的状态信息,版本描述 —> 完成状态 —> 历史版本 —> 数据库类型,这里的功能在aceEditor.vue组件里
| 操作 | 描述 | 便查代码 |
|---|---|---|
| 触发 | 点击脚本列表里的脚本时,就推送了一个对象给tabsList,tabsList会加载出对应的标签 | addTable/this.nodeId判断是都会目录下新建 |
| 点击标签 | 该标签对象内的所有属性都会被切换 | getSqlContent(tabsValue) |
| 历史版本按钮 | 脚本未被修改:直接关闭,修改过的脚本关闭会提示是否保存 | openVersionReview |
| 数据库类型 | 既有回显又有选择创建的功能 | handleDBTypeCommand |
4.编辑器

这部分功能在aceEditor.vue组件里,这一块,主要是和父组件SQLEditor.vue的各种数据的通信。
这里还涉及到代码片段的插入 ↓↓↓↓↓↓↓↓↓↓↓
四、代码片段区

1.搜索 handleCodequery
2.新增片段按钮 getScriptFragMenu
3.所属项目
4.排序 getScriptfragByProjectId
5.点击片段 getCode
五、可能的组件抽离方案
1.对于冗余代码的清理
2.各组件之间的数据通信梳理
如果按功能区块抽离,目前除了aceEditor与其他组件之间的通信只需要调整外,其他功能块的组件基本上需要重新设置的不多。
| 左侧脚本列表 | 脚本操作区 | 编辑器区 | 右侧代码片段 |
|---|---|---|---|
| 脚本内容: this.scriptSql = item.content |
this.rightsql | this.codeSql | |



