一、初始载入

1.SQL页面在载入完成时会先触发各区块内容的数据请求方法,载入下图所见内容,如要查看返回数据的全貌可以自行打印。

  1. // mounted 钩子函数:页面加载完成时触发,避免某些DOM节点未加载,获取不到对应的属性/数据
  2. mounted () {
  3. // 获取右边代码片段栏的高度
  4. this.$nextTick(function () {
  5. var height = this.$refs.rightAside.$el.clientHeight
  6. this.rightAsideHeight = height // 右边栏的高度
  7. })
  8. this.getJiaoBenList() // 左侧脚本列表集合
  9. this.getScriptfrag(null) // 右侧代码片段列表
  10. this.getDataRatio() // 获取数据脚本状态占比
  11. this.getDirectoryName() // 获取脚本列表里目录的对应数据,如:所属哪一个机构域
  12. this.handleSelect() // 后台定义的数据字典信息,如数据库类型jdbcType,排序类型,脚本状态
  13. this.getPrincipalBy() // 获取指派人即脚本负责人下拉框信息
  14. this.asyncGetOrgDomainInfoDropDown() // 机构域下拉框信息
  15. this.getProjectInfo('') // 获取所有项目信息
  16. },

2.如下图所示各块区域,对应权限条件下的初始数据就会通过上述钩子函数内的代码加载完成,如左侧脚本列表
区的现有项目下拉列表和全部项目脚本目录等。

image.png

二、左侧脚本列表区

image.png


1.项目选择

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

image.png

描述 便查代码
项目数据来源 getProjectInfo()
input框里面选中的选项 v-model=”projectInfo.projectId
下拉框列表数据 projectInfoOptions

2.新增项目和项目详情

鼠标滑至菜单会触发 getCaozuo (command)弹出”新增项目”和”项目详情”选项。

image.png image.pngimage.png

操作 描述 便查代码
触发菜单选项 getCaozuo(command)
点击新增项目 该弹窗抽离成addProjectInfo.vue组件(点击前往查看),确认后会生成一个新的项目名 this.$refs.addProjectInfoVue.dialogFormVisible = true
点击项目详情 如果项目为空则报警告,选择项目则获取机构域orgDomainId和项目projectId作为参数 getProjectInfoByProjectId(orgDomainId,projectId)


3.脚本搜索框

按脚本名模糊搜索还可以可筛选按钮一起关联筛选
image.png

操作 描述 便查代码
输入脚本名回车 习惯性操作 searchSql(searchKeyword)
输入脚本名点搜索图标 图标的解释和替代回车作用 searchSql(searchKeyword)
清除输入和回车空白搜索 清除输入没有展示全部脚本的功能 searchSql(“”)
关联筛选比较笨拙,还需优化


4.新增脚本目录以及导入导出

image.pngimage.png
image.pngimage.png

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

5.筛选按钮

image.png
图上看到的脚本列表都是符合筛选条件的,同时数据库筛选,会联动编辑器区的数据库类型回显
image.png

操作 描述 便查代码
触发 对应下拉按钮的command指令 getdbTypes (数据库)/getRoles (用户)/getStatus (脚本状态)
数据库筛选 按照各种数据库类型筛选 handleSelect( )中请求到jdbcTypeOptions
用户筛选 按照用户类型筛选 principalByOptions /getPrincipalBy (获取下拉)
脚本状态筛选 脚本状态现在有三种 handleSelect( )中请求到scriptStatusOptions
关联筛选 handleSelect ()方法中发送请求 constantKeys: ‘versionStatus,jdbcType,orderType’
三个值中请求时为空的值就不会参与筛选

6.脚本列表

image.png

① 脚本列表的结构

element-ui 提供了一个递归组件 ,该组件是一个树状结构的列表,列表数据是标签属性 :data="treeList"

脚本列表数据 :data=”treeList” 初始数据在getJiaoBenList ()中返回

数据结构:
Snipaste_2020-05-26_11-10-30.png
通过对这样数据结构的treeList解析,会得到平台所见的脚本列表

② 脚本列表的node节点

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

③ 脚本目录的相关操作

image.pngimage.png
image.pngimage.png

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

④点击脚本

image.png

操作 描述 便查代码
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,

没有了修改脚本名?和删除脚本功能?

点击脚本产生的一系列关联基本都在中间编辑器区里 ↓↓↓↓↓↓↓↓↓↓↓

三、中间编辑器区

image.png

1.脚本操作功能区

image.pngimage.png

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

2.脚本标签栏

image.png

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

handleTabsCommand/dropdownClose

3.脚本状态栏

image.png
脚本状态栏表明了当前脚本的状态信息,版本描述 —> 完成状态 —> 历史版本 —> 数据库类型,这里的功能在aceEditor.vue组件里

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

4.编辑器

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

四、代码片段区

image.png

1.搜索 handleCodequery

2.新增片段按钮 getScriptFragMenu

3.所属项目

4.排序 getScriptfragByProjectId

5.点击片段 getCode

五、可能的组件抽离方案

先处理问题:

1.对于冗余代码的清理

1.无需默认值的时候,声明的变量只需要设置为空

2.各组件之间的数据通信梳理

如果按功能区块抽离,目前除了aceEditor与其他组件之间的通信只需要调整外,其他功能块的组件基本上需要重新设置的不多。

左侧脚本列表 脚本操作区 编辑器区 右侧代码片段
脚本内容:
this.scriptSql = item.content
this.rightsql this.codeSql