cornerstone3D库升级及其他文件调整
continuous-integration/drone/push Build is failing

This commit is contained in:
2025-02-18 15:09:25 +08:00
parent 0f50ff6ded
commit 4da35daa3c
146 changed files with 21791 additions and 18159 deletions
@@ -593,7 +593,7 @@ export default {
<style lang="scss" scoped>
.my_dialog{
.criterion-form-item{
>>>.el-form-item__content{
::v-deep .el-form-item__content{
width: auto;
}
}
@@ -614,7 +614,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
>>>.el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}
@@ -222,7 +222,7 @@ export default {
<style lang="scss" scoped>
.my_dialog{
.criterion-form-item{
>>>.el-form-item__content{
::v-deep .el-form-item__content{
width: auto;
}
}
@@ -233,7 +233,7 @@ export default {
flex-direction: row;
align-items: flex-start;
}
>>>.el-form-item__content{
::v-deep .el-form-item__content{
width: 500px;
}
.el-input{
@@ -243,7 +243,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
>>>.el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}
+2 -2
View File
@@ -112,11 +112,11 @@ export default {
margin: auto;
}
/deep/ .el-radio__original {
::v-deep .el-radio__original {
display: none !important; /* 隐藏原生 radio 输入,但仍然允许交互 */
}
/deep/.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled)
::v-deep.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled)
.el-radio__inner {
box-shadow: none !important;
}
+1 -1
View File
@@ -22,7 +22,7 @@
import { mapGetters } from 'vuex'
import Logo from './Logo'
import SidebarItem from './SidebarItem'
import variables from '@/styles/variables.scss'
import variables from '@/styles/variables.module.scss'
export default {
components: { SidebarItem, Logo },
@@ -73,7 +73,7 @@ export default {
position: relative;
overflow: hidden;
width: 100%;
/deep/ {
::v-deep {
.el-scrollbar__bar {
bottom: 0px;
}
+1 -1
View File
@@ -57,7 +57,7 @@ export default {
<style lang="scss" scoped>
@import "~@/styles/mixin.scss";
@import "~@/styles/variables.scss";
@import "~@/styles/variables.module.scss";
.app-wrapper {
@include clearfix;
+5
View File
@@ -50,6 +50,11 @@ export const constantRoutes = [
component: () => import('@/views/login/index'),
hidden: true
},
{
path: '/test',
component: () => import('@/views/test/index'),
hidden: true
},
{
path: '/resetpassword',
component: () => import('@/views/forgetpassword/index'),
+1 -1
View File
@@ -1,4 +1,4 @@
@import "./variables.scss";
@import "./variables.module.scss";
@import "./mixin.scss";
@import "./transition.scss";
@import "./element-ui.scss";
+24 -4
View File
@@ -71,29 +71,49 @@ $sideBarWidth: 200px;
border: none;
height: 100%;
width: 100% !important;
background-color: $menuBg;
}
// menu hover
.submenu-title-noDropdown,
.el-submenu__title {
color: $menuText !important;
&:hover {
background-color: $menuHover !important;
color: $menuActiveText !important;
}
}
.is-active>.el-submenu__title {
color: $subMenuActiveText !important;
}
& .nest-menu .el-submenu>.el-submenu__title,
& .el-submenu .el-menu-item {
.el-menu-item {
color: $menuText !important;
}
.el-menu-item:focus,
.el-menu-item:hover {
background-color: $subMenuBg !important;
color: $menuActiveText !important;
}
.el-submenu .el-menu-item {
min-width: $sideBarWidth !important;
background-color: $subMenuBg !important;
&:hover {
background-color: $subMenuHover !important;
}
}
// &.nest-menu .el-submenu>.el-submenu__title,
// &.el-submenu .el-menu-item {
// min-width: $sideBarWidth !important;
// background-color: $subMenuBg !important;
// &:hover {
// background-color: $subMenuHover !important;
// }
// }
}
.hideSidebar {
+1 -1
View File
@@ -27,7 +27,7 @@ export default {
}
</script>
<style lang="scss" scoped>
/deep/ .el-collapse-item__header{
::v-deep .el-collapse-item__header{
background-color: #e9eef1;
padding: 0 10px;
}
+1 -1
View File
@@ -195,7 +195,7 @@ export default {
}
</script>
<style lang="scss" scoped>
/deep/ .el-collapse-item__header{
::v-deep .el-collapse-item__header{
background-color: #e9eef1;
padding: 0 10px;
}
@@ -60,7 +60,7 @@
</el-form-item>
<el-form-item v-if="form.Id !== ''" label="是否废除: ">
<el-radio-group v-model="form.IsDeleted">
<el-radio v-for="item of $d.YesOrNo" :label="item.value">{{ item.label }}</el-radio>
<el-radio v-for="item of $d.YesOrNo" :key="`IsDeleted${item.value}`" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="描述">
@@ -78,7 +78,7 @@
<el-form-item v-if="form.Id !== ''" label="是否废除: ">
<el-radio-group v-model="form.IsDeleted">
<el-radio v-for="item of $d.YesOrNo" :label="item.value">{{ item.label }}</el-radio>
<el-radio v-for="item of $d.YesOrNo" :key="`IsDeleted${item.value}`" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="描述">
@@ -1,411 +0,0 @@
<template>
<div class="app-container my_menu">
<el-form :inline="true">
<el-form-item label="操作名">
<el-input
v-model="queryParams.menuName"
placeholder="请输入操作名"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="模块">
<el-select v-model="queryParams.visible" placeholder="模块" clearable size="small" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
</el-form-item>
</el-form>
<div>
<el-button
type="info"
plain
icon="el-icon-sort"
size="mini"
@click="toggleExpandAll"
>展开/折叠</el-button>
</div>
<el-table
v-if="refreshTable"
v-loading="loading"
:data="menuList"
:default-expand-all="isExpandAll"
row-key="Id"
:tree-props="{children: 'Children', hasChildren: 'hasChildren'}"
>
<el-table-column prop="ModuleTypeValueCN" label="模块" align="left" min-width="230px" />
<el-table-column prop="OptTypeValueCN" label="操作类型" min-width="120px" />
<el-table-column prop="ChildrenTypeValueCN" label="操作子类" min-width="120px" show-overflow-tooltip />
<el-table-column prop="Description" label="操作名称" :show-overflow-tooltip="true" min-width="200px" />
<el-table-column prop="Code" label="字段名" min-width="120px" :show-overflow-tooltip="true" />
<el-table-column prop="Value" label="字段英文" min-width="120px" :show-overflow-tooltip="true" />
<el-table-column prop="ValueCN" label="字段中文" min-width="120px" :show-overflow-tooltip="true" />
<el-table-column label="启用" align="center" prop="CreateTime" min-width="80">
<template slot-scope="scope">
<el-tag v-if="scope.row.IsEnable" size="success">启用</el-tag>
<el-tag v-else size="danger">禁用</el-tag>
</template>
</el-table-column>
<el-table-column label="是否使用父数据" align="center" prop="CreateTime" min-width="130">
<template slot-scope="scope">
<el-tag v-if="scope.row.IsShowParent" size="success">父数据</el-tag>
<el-tag v-else size="danger">子数据</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" min-width="180" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
size="mini"
type="text"
v-if="scope.row.ConfigType === 'M'"
icon="el-icon-plus"
@click="handleAdd(scope.row)"
>新增</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加或修改菜单对话框 -->
<el-dialog :title="title" :close-on-click-modal="false" :visible.sync="open" width="680px" append-to-body>
<el-form ref="form" :model="form" label-width="100px">
<el-row>
<el-col :span="24">
<el-form-item label="选择操作">
<treeselect
v-model="form.ParentId"
:options="menuOptions"
:normalizer="normalizer"
:show-count="true"
placeholder="选择上级操作"
/>
</el-form-item>
</el-col>
<el-col :span="12" v-show="form.ConfigType === 'M'">
<el-form-item label="模块" prop="menuType">
<el-select v-model="form.ModuleTypeId" placeholder="模块" clearable size="small" @change="changeDescription">
<el-option v-for="item of dict.type.ModuleType" :value="item.value" :label="item.raw.ValueCN"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-show="form.ConfigType === 'M'">
<el-form-item label="操作类型" prop="menuType">
<el-select v-model="form.OptTypeId" placeholder="操作类型" clearable size="small" @change="changeDescription">
<el-option v-for="item of dict.type.OptType" :value="item.value" :label="item.raw.ValueCN"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-show="form.ConfigType === 'M'">
<el-form-item label="操作子类" prop="menuType">
<el-select v-model="form.ChildrenTypeId" placeholder="操作子类" clearable size="small" @change="changeDescription">
<el-option v-for="item of dict.type.ChildrenType" :value="item.value" :label="item.raw.ValueCN"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-show="form.ConfigType == 'M'">
<el-form-item label="名称" prop="Description">
<el-input v-model="form.Description" placeholder="请输入名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="显示排序" prop="ShowOrder">
<el-input-number v-model="form.Sort" controls-position="right" :min="0" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<span slot="label">
是否启用
</span>
<el-switch
v-model="form.IsEnable"
:active-value="true"
:inactive-value="false"
/>
</el-form-item>
</el-col>
<el-col :span="12" v-show="form.ConfigType === 'C'">
<el-form-item>
<span slot="label">
继承父数据
</span>
<el-switch
v-model="form.IsShowParent"
:active-value="true"
:inactive-value="false"
/>
</el-form-item>
</el-col>
<el-col :span="24" v-show="form.ConfigType === 'C'">
<el-form-item label="字段key">
<el-input v-model="form.Code" placeholder="请输入字段key" />
</el-form-item>
</el-col>
<el-col :span="12" v-show="form.ConfigType === 'C'">
<el-form-item label="字段英文">
<el-input v-model="form.Value" placeholder="请输入字段英文" />
</el-form-item>
</el-col>
<el-col :span="12" v-show="form.ConfigType === 'C'">
<el-form-item label="字段中文">
<el-input v-model="form.ValueCN" placeholder="请输入字段中文" />
</el-form-item>
</el-col>
<el-col :span="24" v-show="form.ConfigType === 'C'">
<el-form-item label="枚举类型">
<el-radio-group v-model="form.EnumType">
<el-radio :label="null"></el-radio>
<el-radio label="E">枚举</el-radio>
<el-radio label="D">字典</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24" v-show="form.ConfigType === 'C' && form.EnumType === 'E'">
<el-form-item label="枚举">
<el-input v-model="form.EnumList" placeholder="请输入枚举" />
</el-form-item>
</el-col>
<el-col :span="24" v-show="form.ConfigType === 'C' && form.EnumType === 'D'">
<el-form-item label="字典code">
<el-input v-model="form.dictionaryKey" placeholder="请输入字典code" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { getFrontAuditConfigList, addOrUpdateFrontAuditConfig, deleteFrontAuditConfig } from '@/api/dictionary/checkConfig'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import IconSelect from '@/components/IconSelect'
export default {
name: 'checkConfig',
dicts: [ 'OptType', 'ModuleType', 'ChildrenType' ],
components: { Treeselect, IconSelect },
data() {
return {
// 遮罩层
loading: true,
// 菜单表格树数据
menuList: [],
// 菜单树选项
menuOptions: [],
// 弹出层标题
title: '',
// 是否显示弹出层
open: false,
// 菜单状态数据字典
visibleOptions: [],
// 查询参数
queryParams: {
menuName: undefined,
visible: undefined,
},
// 是否展开,默认全部折叠
isExpandAll: false,
// 重新渲染表格状态
refreshTable: true,
// 表单参数
form: {},
// 表单校验
rules: {
MenuName: [
{ required: true, message: '菜单名称不能为空', trigger: 'blur' }
],
ShowOrder: [
{ required: true, message: '菜单顺序不能为空', trigger: 'blur' }
]
}
}
},
created() {
this.getList()
// this.getDicts("sys_show_hide").then(response => {
// this.visibleOptions = response.data;
// });
},
methods: {
toggleExpandAll() {
this.refreshTable = false
this.isExpandAll = !this.isExpandAll
this.$nextTick(() => {
this.refreshTable = true
})
},
normalizer(node) {
if (node.Children && !node.Children.length) {
delete node.Children
}
return {
id: node.Id,
label: node.Description,
children: node.Children
}
},
toTree(arr, ParentId) {
function loop(ParentId) {
const res = []
for (let i = 0; i < arr.length; i++) {
const item = arr[i]
item.hasChildren = false
if (item.ParentId !== ParentId) {
continue
}
item.Children = loop(item.Id)
res.push(item)
}
return res
}
return loop(ParentId)
},
// 选择图标
selected(name) {
this.form.MenuIcon = name
},
/** 查询菜单列表 */
getList() {
this.loading = true
getFrontAuditConfigList(this.queryParams).then(res => {
this.menuList = this.toTree(res.Result, '00000000-0000-0000-0000-000000000000')
const menu = { Id: '00000000-0000-0000-0000-000000000000', Description: '操作', Children: [] }
menu.Children = this.menuList
this.menuOptions = Object.assign([], [menu])
this.loading = false
}).catch(function() {})
},
/** 查询菜单下拉树结构 */
getTreeselect() {
this.loading = true
getFrontAuditConfigList({}).then(res => {
const menu = { Id: '00000000-0000-0000-0000-000000000000', Description: '操作', Children: [] }
menu.Children = this.toTree(res.Result, '00000000-0000-0000-0000-000000000000')
this.menuOptions = Object.assign([], [menu])
this.loading = false
}).catch(function() {})
},
// 菜单显示状态字典翻译
visibleFormat(row, column) {
if (row.MenuType === 'F') {
return ''
}
return this.selectDictLabel(this.visibleOptions, row.visible)
},
// 取消按钮
cancel() {
this.open = false
this.reset()
},
// 表单重置
reset() {
this.form = {
Id: null,
ParentId: null,
ConfigType: 'M',
Description: null,
IsEnable: true,
ModuleTypeId: null,
OptTypeId: null,
ChildrenTypeId: null,
IsShowParent: false,
Sort: 0,
Code: null,
Value: null,
ValueCN: null,
EnumType: null
}
this.resetForm('form')
},
findName (id, dict, type) {
if (id) {
return this.dict.type[dict].find(v => {
return v.value === id
}).raw[type]
}
return ''
},
changeDescription () {
this.form.Description = this.findName(this.form.OptTypeId, 'OptType', 'ValueCN') + this.findName(this.form.ModuleTypeId, 'ModuleType', 'ValueCN') + this.findName(this.form.ChildrenTypeId, 'ChildrenType', 'ValueCN')
},
/** 搜索按钮操作 */
handleQuery() {
this.getList()
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset()
this.getTreeselect()
if (row != null) {
this.form.ParentId = row.Id
this.form.ModuleTypeId = row.ModuleTypeId
this.form.OptTypeId = row.OptTypeId
this.form.ChildrenTypeId = row.ChildrenTypeId
if (row.ModuleTypeId && row.OptTypeId && row.ChildrenTypeId) {
this.form.ConfigType = 'C'
}
this.form.Description = row.OptTypeValueCN + row.ModuleTypeValueCN + row.ChildrenTypeValueCN
}
this.open = true
this.title = '添加'
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
this.getTreeselect()
this.form = Object.assign({}, row)
this.open = true
this.title = '修改'
},
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
addOrUpdateFrontAuditConfig(this.form).then(response => {
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.open = false
this.getList()
})
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
this.$confirm('是否确认删除名称为"' + row.Description + '"的数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return deleteFrontAuditConfig(row.Id)
}).then(() => {
this.getList()
this.$message.success('删除成功')
}).catch(function() {})
}
}
}
</script>
<style lang="scss">
.vue-treeselect div{
line-height: 40px;
}
</style>
@@ -340,7 +340,7 @@ export default {
</script>
<style lang="scss" scoped>
.upload-container{
/deep/ .el-upload {
::v-deep .el-upload {
width: 100%;
text-align: left;
}
@@ -265,7 +265,7 @@ export default {
</script>
<style lang="scss" scoped>
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
width: calc(100% - 110px);
}
</style>
@@ -231,7 +231,7 @@ export default {
</script>
<style lang="scss" scoped>
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
width: calc(100% - 110px);
}
</style>
@@ -396,7 +396,7 @@ export default {
flex-direction: row;
align-items: flex-start;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
width: 500px;
}
.el-input{
@@ -406,7 +406,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
/deep/ .el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}
@@ -190,7 +190,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
/deep/ .el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}
@@ -79,7 +79,7 @@
</el-form-item>
<el-form-item v-if="form.Id !== ''" label="是否废除: ">
<el-radio-group v-model="form.IsDeleted">
<el-radio v-for="item of $d.YesOrNo" :label="item.value">{{ item.label }}</el-radio>
<el-radio v-for="item of $d.YesOrNo" :key="`IsDeleted${item.value}`" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="描述">
+1 -1
View File
@@ -419,7 +419,7 @@ export default {
}
</style>
<style scoped>
/*/deep/ .is-error{*/
/*::v-deep .is-error{*/
/* margin-bottom: 40px;*/
/*}*/
.is-error.my_new_pwd {
+6 -6
View File
@@ -220,7 +220,7 @@ export default {
border-radius: 10px;
background: #d0d0d0;
}
/deep/ .el-card__body {
::v-deep .el-card__body {
padding: 0px;
}
}
@@ -234,7 +234,7 @@ export default {
width: 220px;
height: 100%;
/deep/ .el-card__body {
::v-deep .el-card__body {
height: 100%;
width: 100%;
display: flex;
@@ -254,13 +254,13 @@ export default {
overflow-y: auto;
}
// /deep/ .el-tabs{
// ::v-deep .el-tabs{
// height: 100%;
// }
// /deep/ .el-tabs__header{
// ::v-deep .el-tabs__header{
// height: 40px;
// }
// /deep/ .el-tabs__content{
// ::v-deep .el-tabs__content{
// flex: 1;
// overflow-y: auto;
// padding: 0;
@@ -299,7 +299,7 @@ export default {
flex: 1;
height: 100%;
margin-left: 10px;
/deep/ .el-card__body {
::v-deep .el-card__body {
height: 100%;
width: 100%;
}
@@ -271,7 +271,7 @@ export default {
padding: 5px 20px;
margin-top: 5px;
background: #fff;
/deep/.el-form-item {
::v-deep.el-form-item {
padding-bottom: 20px;
}
@@ -285,10 +285,10 @@ export default {
}
}
.form-label-width{
/deep/.el-form-item__label{
::v-deep.el-form-item__label{
width: 140px;
}
/deep/.el-form-item__content{
::v-deep.el-form-item__content{
margin-left: 140px;
}
}
@@ -297,7 +297,7 @@ export default {
text-align: center;
}
/deep/.el-form-item {
::v-deep.el-form-item {
margin-bottom: 0px;
padding-top: 5px;
border-bottom: 1px solid #f5f7fa;
@@ -156,7 +156,7 @@ export default {
<style lang="scss" scoped>
.equipment_form_content{
padding: 0 10px;
/deep/.el-form-item {
::v-deep.el-form-item {
margin-bottom: 0px;
padding: 5px 0 20px 0;
border-bottom: 1px solid #f5f7fa;
@@ -292,7 +292,7 @@ export default {
<style lang="scss" scoped>
.participants_form_content{
padding: 0 10px;
/deep/.el-form-item {
::v-deep.el-form-item {
margin-bottom: 0px;
padding: 5px 0 20px 0;
border-bottom: 1px solid #f5f7fa;
@@ -306,7 +306,7 @@ export default {
<style lang="scss" scoped>
.participants_form_content{
padding: 0 10px;
/deep/.el-form-item {
::v-deep.el-form-item {
margin-bottom: 0px;
padding: 5px 0 20px 0;
border-bottom: 1px solid #f5f7fa;
+2 -2
View File
@@ -375,7 +375,7 @@ export default {
padding: 5px 20px;
margin-top: 5px;
background: #fff;
/deep/.el-form-item {
::v-deep.el-form-item {
padding-bottom: 20px;
}
}
@@ -392,7 +392,7 @@ export default {
text-align: center;
}
/deep/.el-form-item {
::v-deep.el-form-item {
margin-bottom: 0px;
padding-top: 5px;
border-bottom: 1px solid #f5f7fa;
@@ -338,19 +338,19 @@ export default {
padding-bottom: 20px;
overflow-y: auto;
}
>>>.el-card__body{
::v-deep .el-card__body{
padding: 10px;
}
// >>>.el-dialog__body{
// padding: 10px 20px 20px 20px;
// }
>>>.full-dialog-container{
::v-deep .full-dialog-container{
.el-dialog__body{
height: calc(100% - 80px);
}
}
>>>.dialog-container{
::v-deep .dialog-container{
// margin-top: 50px !important;
width:75%;
height:80%;
+3 -3
View File
@@ -387,19 +387,19 @@ export default {
padding-bottom: 20px;
overflow-y: auto;
}
/deep/.el-card__body{
::v-deep.el-card__body{
padding: 10px;
}
// >>>.el-dialog__body{
// padding: 10px 20px 20px 20px;
// }
/deep/.full-dialog-container{
::v-deep.full-dialog-container{
.el-dialog__body{
height: calc(100% - 80px);
}
}
/deep/.dialog-container{
::v-deep.dialog-container{
// margin-top: 50px !important;
width:75%;
height:80%;
+1 -1
View File
@@ -206,7 +206,7 @@ export default {
}
</script>
<style lang="scss" scoped>
/deep/ .el-collapse-item__header{
::v-deep .el-collapse-item__header{
background-color: #e9eef1;
padding: 0 10px;
}
@@ -124,7 +124,7 @@ export default {
.el-tabs{
height: 100%;
.el-tabs__content{
height: calc(100%-50px);
height: calc(100% - 50px);
overflow-y: auto;
}
}
+1 -1
View File
@@ -163,7 +163,7 @@ export default {
.el-tabs {
height: 100%;
.el-tabs__content {
height: calc(100%-50px);
height: calc(100% - 50px);
overflow-y: auto;
}
}
+1 -1
View File
@@ -187,7 +187,7 @@ export default {
.el-tabs {
height: 100%;
.el-tabs__content {
height: calc(100%-50px);
height: calc(100% - 50px);
overflow-y: auto;
}
}
+1 -1
View File
@@ -526,7 +526,7 @@ export default {
}
</script>
<style scoped lang="scss">
/deep/ .box-body .search .base-search-form .el-form-item {
::v-deep .box-body .search .base-search-form .el-form-item {
margin-bottom: 15px;
}
</style>
+105
View File
@@ -0,0 +1,105 @@
<template>
<div class="grid-container" :style="gridStyle">
<div
v-for="(cell, index) in cells"
:key="index"
class="grid-cell"
:style="cellStyle"
@dblclick="toggleFullScreen(index)"
>
<div v-if="fullScreenIndex === index" class="full-screen">
<div class="content">
<canvas class="canvas" :ref="`canvas-${fullScreenIndex}`"></canvas>
<!-- 这里可以放置单元格的内容 -->
<!-- Cell {{ index + 1 }} -->
<!-- <button @click="toggleFullScreen(null)">Exit Full Screen</button> -->
</div>
</div>
<div v-else class="content">
<!-- Cell {{ index + 1 }} -->
<canvas class="canvas" :ref="`canvas-${index}`"></canvas>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
rows: {
type: Number,
default: 1,
},
cols: {
type: Number,
default: 1,
},
},
data() {
return {
fullScreenIndex: null,
};
},
computed: {
gridStyle() {
return {
display: 'grid',
gridTemplateRows: `repeat(${this.rows}, 1fr)`,
gridTemplateColumns: `repeat(${this.cols}, 1fr)`,
height: '100vh',
width: '100vw',
};
},
cellStyle() {
return {
border: '1px solid #ccc',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
};
},
cells() {
return Array(this.rows * this.cols).fill(0);
},
},
methods: {
toggleFullScreen(index) {
this.fullScreenIndex = this.fullScreenIndex === index ? null : index;
},
},
};
</script>
<style scoped>
.grid-container {
display: grid;
height: 100vh;
width: 100vw;
}
.grid-cell {
border: 1px solid #ccc;
display: flex;
align-items: center;
justify-content: center;
}
.full-screen {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: white;
z-index: 1000;
display: flex;
align-items: center;
justify-content: center;
}
.content {
/* text-align: center; */
width: 100%;
height: 100%;
}
</style>
+25
View File
@@ -0,0 +1,25 @@
<template>
<div>
<!-- <label>行数: </label>
<input v-model.number="rows" type="number" min="1" max="3" />
<label>列数: </label>
<input v-model.number="cols" type="number" min="1" max="3" /> -->
<GridLayout :rows="rows" :cols="cols" />
</div>
</template>
<script>
import GridLayout from './GridLayout.vue';
export default {
components: {
GridLayout,
},
data() {
return {
rows: 2,
cols: 2,
};
},
};
</script>
+1 -1
View File
@@ -158,7 +158,7 @@ export default {
// border: 1px solid #e0e0e0;
max-height: 650px;
overflow-y: auto;
// /deep/ .el-form-item__label{
// ::v-deep .el-form-item__label{
// color: #fff;
// }
}
@@ -73,10 +73,10 @@ export default {
width: 100%;
display: flex;
align-items: center;
/deep/ .el-dialog__header{
::v-deep .el-dialog__header{
padding: 10px;
}
/deep/ .el-dialog__body{
::v-deep .el-dialog__body{
padding: 10px 20px;
line-height: 25px;
}
@@ -44,7 +44,7 @@ export default {
overflow: hidden;
display: flex;
flex-direction: column;
/deep/.el-card__body {
::v-deep.el-card__body {
padding: 0px;
}
.trials-tab{
+3 -3
View File
@@ -29,7 +29,7 @@ export default {
<style lang="scss" scoped>
@import "~@/styles/mixin.scss";
@import "~@/styles/variables.scss";
@import "~@/styles/variables.module.scss";
.trials-wrapper {
@include clearfix;
@@ -39,10 +39,10 @@ export default {
.trials-container {
padding: 10px;
height: 100%;
/deep/ .el-tag {
::v-deep .el-tag {
background-color: transparent;
}
/deep/ .el-tag--danger {
::v-deep .el-tag--danger {
color: #f56c6c;
}
}
@@ -787,22 +787,22 @@ export default {
}
</script>
<style lang="scss" scoped>
/deep/ .hidden-row{
::v-deep .hidden-row{
display: none;
}
/deep/ .el-dialog__body {
::v-deep .el-dialog__body {
padding: 15px 20px;
}
/deep/ .el-tag--danger.el-tag--dark {
::v-deep .el-tag--danger.el-tag--dark {
// background-color: #f56c6c!important;
border-color: none!important;
// color: #fff!important;
}
/deep/ #TaskAllocationRuleList thead .el-checkbox__inner{
::v-deep #TaskAllocationRuleList thead .el-checkbox__inner{
display: none;
}
/deep/ .el-descriptions-item__label.has-colon:after{
::v-deep .el-descriptions-item__label.has-colon:after{
display: none;
}
</style>
@@ -60,7 +60,7 @@ export default {
}
</script>
<style lang="scss" scoped>
/deep/ .el-collapse-item__header {
::v-deep .el-collapse-item__header {
background-color: #e9eef1;
padding: 0 10px;
}
@@ -936,14 +936,14 @@ export default {
margin: 10px 0;
}
.disabled {
/deep/ .el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}
/deep/ .el-upload-list__item {
::v-deep .el-upload-list__item {
transition: none !important;
}
/deep/ .el-upload-list__item-thumbnail {
::v-deep .el-upload-list__item-thumbnail {
/* 图片在方框内显示长边 */
object-fit: scale-down !important;
}
@@ -1642,22 +1642,22 @@ export default {
color: #f56c6c;
font-size: 10px;
}
/deep/ .hidden-row {
::v-deep .hidden-row {
display: none;
}
/deep/ .el-dialog__body {
::v-deep .el-dialog__body {
padding: 15px 20px;
}
/deep/ .el-tag--danger.el-tag--dark {
::v-deep .el-tag--danger.el-tag--dark {
// background-color: #f56c6c!important;
border-color: none !important;
// color: #fff!important;
}
/deep/ #TaskAllocationRuleList thead .el-checkbox__inner {
::v-deep #TaskAllocationRuleList thead .el-checkbox__inner {
display: none;
}
/deep/ .el-descriptions-item__label.has-colon:after {
::v-deep .el-descriptions-item__label.has-colon:after {
display: none;
}
</style>
@@ -2793,12 +2793,12 @@ export default {
}
.personal_config {
/deep/ .el-tabs__content{
::v-deep .el-tabs__content{
height: 450px;
overflow-y: auto;
}
}
/deep/ .manuals-dialog-container{
::v-deep .manuals-dialog-container{
margin-top: 50px !important;
width:75%;
height:80%;
@@ -2810,7 +2810,7 @@ export default {
position: relative;
}
}
/deep/ .manuals-full-dialog-container{
::v-deep .manuals-full-dialog-container{
.el-dialog__body{
padding: 10px;
height: calc(100% - 50px) !important;
@@ -2827,23 +2827,23 @@ export default {
background-color: #000000;
}
.series-table{
/deep/.el-table{
::v-deep.el-table{
background-color: #1e1e1e !important;
color: #dfdfdf;
}
/deep/.el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf{
::v-deep.el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf{
border-bottom: 1px solid #dfdfdf;
}
.el-table--border::after, .el-table--group::after, .el-table::before{
background-color: #1e1e1e;
}
/deep/.el-table__header-wrapper{
::v-deep.el-table__header-wrapper{
th{
background-color: #1e1e1e !important;
color: #dfdfdf;
}
}
/deep/.el-table__body-wrapper{
::v-deep.el-table__body-wrapper{
tr{
background-color: #1e1e1e !important;
color: #dfdfdf;
@@ -2852,7 +2852,7 @@ export default {
background-color: #1e1e1e !important;
}
}
/deep/.el-table__empty-block{
::v-deep.el-table__empty-block{
background-color: #1e1e1e !important;
}
}
@@ -319,23 +319,23 @@ export default {
</script>
<style lang="scss" scoped>
.series-table{
/deep/.el-table{
::v-deep.el-table{
background-color: #1e1e1e !important;
color: #dfdfdf;
}
/deep/.el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf{
::v-deep.el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf{
border-bottom: 1px solid #dfdfdf;
}
.el-table--border::after, .el-table--group::after, .el-table::before{
background-color: #1e1e1e;
}
/deep/.el-table__header-wrapper{
::v-deep.el-table__header-wrapper{
th{
background-color: #1e1e1e !important;
color: #dfdfdf;
}
}
/deep/.el-table__body-wrapper{
::v-deep.el-table__body-wrapper{
tr{
background-color: #1e1e1e !important;
color: #dfdfdf;
@@ -344,7 +344,7 @@ export default {
background-color: #1e1e1e !important;
}
}
/deep/.el-table__empty-block{
::v-deep.el-table__empty-block{
background-color: #1e1e1e !important;
}
}
@@ -346,6 +346,7 @@ import {
// CONSTANTS,
setVolumesForViewports,
volumeLoader,
resetInitialization,
getRenderingEngine,
eventTarget,
// eslint-disable-next-line no-unused-vars
@@ -385,7 +386,7 @@ import { mat4, vec3 } from 'gl-matrix'
import html2canvas from 'html2canvas'
// import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'
// import vtkMath from '@kitware/vtk.js/Common/Core/Math'
import CircleROITool from './tools/CircleROITool'
// import CircleROITool from './tools/CircleROITool'
// import ScaleOverlayTool from './tools/ScaleOverlayTool'
const { registerColormap, getColormapNames, getColormap } = csUtils.colormap
const {
@@ -394,15 +395,17 @@ const {
WindowLevelTool,
PanTool,
ZoomTool,
StackScrollMouseWheelTool,
// StackScrollMouseWheelTool,
StackScrollTool,
synchronizers,
MIPJumpToClickTool,
VolumeRotateMouseWheelTool,
// VolumeRotateMouseWheelTool,
VolumeRotateTool,
OrientationMarkerTool,
// SynchronizerManager,
// LengthTool,
EllipticalROITool,
// CircleROITool,
CircleROITool,
CrosshairsTool,
TrackballRotateTool,
ProbeTool,
@@ -634,9 +637,12 @@ export default {
this.screenshotWindow.close()
}
cornerstoneTools.destroy()
eventTarget.reset()
cache.purgeCache()
// eventTarget.reset()
// cache.purgeCache()
// renderingEngine.destroy()
resetInitialization()
renderingEngine.destroy()
cache.purgeCache()
imageLoader.unregisterAllImageLoaders()
ToolGroupManager.destroyToolGroup('volume')
FusionEvent.$off('getAnnotations')
@@ -953,8 +959,15 @@ export default {
measureData.frame = 0
measureData.data = annotation
measureData.type = metadata.toolName
measureData.suvMax = data.cachedStats[`volumeId:${ptVolumeId}`] && data.cachedStats[`volumeId:${ptVolumeId}`].max ? data.cachedStats[`volumeId:${ptVolumeId}`].max.toFixed(this.digitPlaces) : null
measureData.modalityUnit = data.cachedStats[`volumeId:${ptVolumeId}`].modalityUnit
let obj = null
for (let key in data.cachedStats) {
if (key.includes(`volumeId:${ptVolumeId}`)) {
obj = data.cachedStats[key]
break;
}
}
measureData.suvMax = obj && obj.max ? obj.max.toFixed(this.digitPlaces) : null
measureData.modalityUnit = obj.modalityUnit
if (data.remark === 'Liver' || data.remark === 'Mediastinum') {
this.$refs['questions'].setMeasuredData(measureData)
this.isNonTargetMeasurement = false
@@ -1046,9 +1059,9 @@ export default {
setUpToolGroups() {
cornerstoneTools.addTool(WindowLevelTool)
cornerstoneTools.addTool(ZoomTool)
cornerstoneTools.addTool(StackScrollMouseWheelTool)
cornerstoneTools.addTool(StackScrollTool)
cornerstoneTools.addTool(MIPJumpToClickTool)
cornerstoneTools.addTool(VolumeRotateMouseWheelTool)
cornerstoneTools.addTool(VolumeRotateTool)
cornerstoneTools.addTool(EllipticalROITool)
cornerstoneTools.addTool(CircleROITool)
cornerstoneTools.addTool(CrosshairsTool)
@@ -1070,7 +1083,7 @@ export default {
toolGroups.forEach((toolGroup) => {
toolGroup.addTool(PanTool.toolName)
toolGroup.addTool(ZoomTool.toolName)
toolGroup.addTool(StackScrollMouseWheelTool.toolName)
toolGroup.addTool(StackScrollTool.toolName)
toolGroup.addTool(EllipticalROITool.toolName)
toolGroup.addTool(CircleROITool.toolName, {
getTextLines: this.getTextLines
@@ -1083,7 +1096,7 @@ export default {
fusionToolGroup.addTool(PanTool.toolName)
fusionToolGroup.addTool(ZoomTool.toolName)
fusionToolGroup.addTool(StackScrollMouseWheelTool.toolName)
fusionToolGroup.addTool(StackScrollTool.toolName)
fusionToolGroup.addTool(EllipticalROITool.toolName, {
volumeId: ptVolumeId
})
@@ -1124,7 +1137,10 @@ export default {
]
})
toolGroup.setToolActive(StackScrollMouseWheelTool.toolName)
// toolGroup.setToolActive(StackScrollTool.toolName)
toolGroup.setToolActive(StackScrollTool.toolName, {
bindings: [{ mouseButton: MouseBindings.Wheel }],
});
// toolGroup.setToolPassive(EllipticalROITool.toolName)
if (this.readingTaskState === 2) {
toolGroup.setToolEnabled(CircleROITool.toolName)
@@ -1189,7 +1205,10 @@ export default {
mipToolGroup = ToolGroupManager.getToolGroup(mipToolGroupUID)
}
mipToolGroup.addTool('VolumeRotateMouseWheel')
mipToolGroup.addTool(VolumeRotateTool.toolName)
mipToolGroup.setToolActive(VolumeRotateTool.toolName, {
bindings: [{ mouseButton: MouseBindings.Wheel }],
});
mipToolGroup.addTool('MIPJumpToClickTool', {
//
toolGroupId: ptToolGroupId
@@ -1206,7 +1225,7 @@ export default {
})
// As the Stack Scroll mouse wheel is a tool using the `mouseWheelCallback`
// hook instead of mouse buttons, it does not need to assign any mouse button.
mipToolGroup.setToolActive('VolumeRotateMouseWheel')
// mipToolGroup.setToolActive('VolumeRotateMouseWheel')
// mipToolGroup.addTool(OrientationMarkerTool.toolName)
// mipToolGroup.setToolActive(OrientationMarkerTool.toolName)
mipToolGroup.addViewport(viewportIds.PETMIP.CORONAL, renderingEngineId)
@@ -1480,9 +1499,10 @@ export default {
// Set the volumes to load
this.ptVolume.load()
this.ctVolume.load()
const windowCenter = this.ctVolume.cornerstoneImageMetaData.windowCenter[0]
const windowWidth = this.ctVolume.cornerstoneImageMetaData.windowWidth[0]
setCtMappingRange(windowWidth, windowCenter)
console.log(this.ctVolume.cornerstoneImageMetaData)
// const windowCenter = this.ctVolume.cornerstoneImageMetaData.windowCenter[0]
// const windowWidth = this.ctVolume.cornerstoneImageMetaData.windowWidth[0]
// setCtMappingRange(windowWidth, windowCenter)
// Set volumes on the viewports
await setVolumesForViewports(
renderingEngine,
@@ -2191,7 +2211,7 @@ export default {
}
},
async receiveMsg(event) {
console.log(event.data.type)
// console.log(event.data.type)
if (event.data.type === 'readingPageUpdate') {
// this.$refs['questions'].initList()
this.$refs['tableQuestions'].initList(true)
@@ -2250,7 +2270,7 @@ export default {
height: 100%;
background-color: #000;
padding: 5px 2px;
/deep/.el-dialog {
::v-deep.el-dialog {
background: #1e1e1e;
border: 1px solid #ddd;
color: #ddd;
@@ -2490,7 +2510,7 @@ export default {
}
.colorBar{
/deep/ .el-input--mini .el-input__inner{
::v-deep .el-input--mini .el-input__inner{
height: 25px;
line-height: 25px;
border: none;
@@ -507,7 +507,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
/deep/ .el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}
@@ -516,13 +516,13 @@ export default {
flex-direction: column;
align-items: flex-start;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-input-group__append, .el-input-group__prepend{
::v-deep .el-input-group__append, .el-input-group__prepend{
padding: 0 5px;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
</style>
@@ -761,30 +761,30 @@ export default {
<style lang="scss" scoped>
.ecrf-wrapper{
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
text-align: left;
}
/deep/ .el-input__inner{
::v-deep .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-textarea__inner{
::v-deep .el-textarea__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
display: flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
flex: 1;
}
/deep/ .el-button--mini, .el-button--mini.is-round {
::v-deep .el-button--mini, .el-button--mini.is-round {
padding: 7px 10px;
}
.el-form-item__content
@@ -1055,34 +1055,34 @@ export default {
</script>
<style lang="scss" scoped>
.measurement-form{
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
// text-align: left;
}
/deep/ .el-input .el-input__inner{
::v-deep .el-input .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
display: flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
flex: 1;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-input-group__append, .el-input-group__prepend{
::v-deep .el-input-group__append, .el-input-group__prepend{
padding: 0 10px;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-button--mini, .el-button--mini.is-round {
::v-deep .el-button--mini, .el-button--mini.is-round {
padding: 7px 10px;
}
.el-form-item__content
@@ -1090,7 +1090,7 @@ export default {
width: 100%;
}
.input-width1{
width: calc(100% -60px)!important;
width: calc(100% - 60px)!important;
}
.input-width2{
width: 100% !important;
@@ -855,12 +855,12 @@ export default {
.el-collapse{
border-bottom:none;
border-top:none;
/deep/ .el-collapse-item{
::v-deep .el-collapse-item{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__header{
::v-deep .el-collapse-item__header{
background-color: #000!important;
color: #ddd;
border-bottom-color:#5a5a5a;
@@ -868,11 +868,11 @@ export default {
height: 35px;
line-height: 35px;
}
/deep/ .el-collapse-item__wrap{
::v-deep .el-collapse-item__wrap{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__content{
::v-deep .el-collapse-item__content{
width:260px;
position: absolute;
top: 0px;
@@ -200,7 +200,7 @@ export default {
mounted() {
const digitPlaces = parseInt(this.$route.query.digitPlaces)
this.digitPlaces = digitPlaces === -1 ? 2 : digitPlaces
// console.log(toolsUtilities)
console.log(toolsUtilities)
this.subjectCode = this.$route.query.subjectCode
var element = document.getElementById(`viewport${this.index}`)
@@ -346,7 +346,7 @@ export default {
index[2] = Math.floor(index[2])
this.mousePosition.index = index
this.mousePosition.value = this.getValue(this.volume, worldPoint)
// this.mousePosition.value = this.getValue(this.volume, worldPoint)
}
},
getValue(volume, worldPos) {
@@ -364,7 +364,7 @@ export default {
const yMultiple = dimensions[0]
const zMultiple = dimensions[0] * dimensions[1]
// const scalarIndex = index[2] * zMultiple + index[1] * yMultiple + index[0];
const value = scalarData[index[2] * zMultiple + index[1] * yMultiple + index[0]]
return value
@@ -492,7 +492,7 @@ export default {
this.rotate(angle)
this.rotateBarLeft = x
},
scroll(index) {
async scroll(index) {
renderingEngine = getRenderingEngine(this.renderingEngineId)
viewport = renderingEngine.getViewport(this.viewportId)
const actorEntries = viewport.getActors()
@@ -500,11 +500,14 @@ export default {
if (!actorEntries) {
return
}
const delta = index - this.seriesInfo.imageIdIndex
toolsUtilities.scroll(viewport, {
delta,
volumeId: actorEntries.uid
})
// const delta = index - this.seriesInfo.imageIdIndex
await utilities.jumpToSlice(viewport.element, {
imageIndex: index,
});
// toolsUtilities.scroll(viewport, {
// delta,
// volumeId: actorEntries.uid
// })
renderingEngine.render()
},
rotateBarMouseup(e) {
@@ -70,30 +70,30 @@ export default {
<style lang="scss" scoped>
.ecrf-wrapper{
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
text-align: left;
}
/deep/ .el-input__inner{
::v-deep .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-textarea__inner{
::v-deep .el-textarea__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
display: flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
flex: 1;
}
/deep/ .el-button--mini, .el-button--mini.is-round {
::v-deep .el-button--mini, .el-button--mini.is-round {
padding: 7px 10px;
}
.el-form-item__content
@@ -112,30 +112,30 @@ export default {
<style lang="scss" scoped>
.ecrf-wrapper{
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
text-align: left;
}
/deep/ .el-input__inner{
::v-deep .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-textarea__inner{
::v-deep .el-textarea__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
display: flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
flex: 1;
}
/deep/ .el-button--mini, .el-button--mini.is-round {
::v-deep .el-button--mini, .el-button--mini.is-round {
padding: 7px 10px;
}
.el-form-item__content
@@ -272,7 +272,7 @@ export default {
}
.lesion_list{
position: relative;
/deep/ .el-table, .el-table__expanded-cell {
::v-deep .el-table, .el-table__expanded-cell {
background-color: #000;
color: #fff;
border-color:#444444;
@@ -293,25 +293,25 @@ export default {
}
/deep/ .el-table th, .el-table tr {
::v-deep .el-table th, .el-table tr {
background-color: #000;
color: #fff;
border-color:#444444;
}
/deep/ .el-table__body tr > td{
::v-deep .el-table__body tr > td{
background-color:#000 !important;
color: #fff;
border-color:#444444;
}
// /deep/ .el-table__body tr:hover > td{
// ::v-deep .el-table__body tr:hover > td{
// background-color:#858282 !important;
// color: #fff;
// border-color:#444444;
// }
/deep/ .el-table--border th.gutter:last-of-type{
::v-deep .el-table--border th.gutter:last-of-type{
border: none;
}
/deep/ .el-card__header{
::v-deep .el-card__header{
border: none;
padding: 10px;
}
@@ -319,12 +319,12 @@ export default {
.el-collapse{
border-bottom:none;
border-top:none;
/deep/ .el-collapse-item{
::v-deep .el-collapse-item{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__header{
::v-deep .el-collapse-item__header{
background-color: #000!important;
color: #ddd;
border-bottom-color:#5a5a5a;
@@ -332,11 +332,11 @@ export default {
height: 35px;
line-height: 35px;
}
/deep/ .el-collapse-item__wrap{
::v-deep .el-collapse-item__wrap{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__content{
::v-deep .el-collapse-item__content{
width:260px;
position: absolute;
top: 0px;
@@ -492,7 +492,7 @@ export default {
this.rotate(angle)
this.rotateBarLeft = x
},
scroll(index) {
async scroll(index) {
renderingEngine = getRenderingEngine(this.renderingEngineId)
viewport = renderingEngine.getViewport(this.viewportId)
const actorEntries = viewport.getActors()
@@ -500,11 +500,14 @@ export default {
if (!actorEntries) {
return
}
const delta = index - this.seriesInfo.imageIdIndex
toolsUtilities.scroll(viewport, {
delta,
volumeId: actorEntries.uid
})
// const delta = index - this.seriesInfo.imageIdIndex
// toolsUtilities.scroll(viewport, {
// delta,
// volumeId: actorEntries.uid
// })
await utilities.jumpToSlice(viewport.element, {
imageIndex: index,
});
renderingEngine.render()
},
rotateBarMouseup(e) {
@@ -1903,7 +1903,7 @@ export default {
height: 100%;
background-color: #000;
padding: 5px 2px;
/deep/.el-dialog {
::v-deep.el-dialog {
background: #1e1e1e;
border: 1px solid #ddd;
color: #ddd;
@@ -2143,7 +2143,7 @@ export default {
}
.colorBar{
/deep/ .el-input--mini .el-input__inner{
::v-deep .el-input--mini .el-input__inner{
height: 25px;
line-height: 25px;
border: none;
@@ -1,90 +1,234 @@
import { Enums } from '@cornerstonejs/core'
import { Enums, utilities } from '@cornerstonejs/core'
const { CalibrationTypes } = Enums
const PIXEL_UNITS = 'px'
const { CalibrationTypes } = Enums;
const PIXEL_UNITS = 'px';
const SUPPORTED_REGION_DATA_TYPES = [
1, // Tissue
2, // Color Flow
3, // PW Spectral Doppler
4, // CW Spectral Doppler
];
const SUPPORTED_LENGTH_VARIANT = [
'3,3', // x: cm & y:cm
'4,7', // x: seconds & y : cm/sec
];
const SUPPORTED_PROBE_VARIANT = [
'4,3', // x: seconds & y : cm
'4,7', // x: seconds & y : cm/sec
];
const UNIT_MAPPING = {
0: 'px',
1: 'percent',
2: 'dB',
3: 'cm',
4: 'seconds',
5: 'hertz',
6: 'dB/seconds',
7: 'cm/sec',
8: 'cm\xb2',
9: 'cm\xb2/s',
0xc: 'degrees',
};
/**
* Extracts the length units and the type of calibration for those units
* into the response. The length units will typically be either mm or px
* while the calibration type can be any of a number of different calibraiton types.
*
* Volumetric images have no calibration type, so are just the raw mm.
*
* TODO: Handle region calibration
*
* @param handles - used to detect if the spacing information is different
* between various points (eg angled ERMF or US Region).
* Currently unused, but needed for correct US Region handling
* @param image - to extract the calibration from
* image.calibration - calibration value to extract units form
* @returns String containing the units and type of calibration
*/
const getCalibratedLengthUnits = (handles, image) => {
const { calibration, hasPixelSpacing } = image
// Anachronistic - moving to using calibration consistently, but not completed yet
const units = hasPixelSpacing ? 'mm' : PIXEL_UNITS
if (!calibration || !calibration.type) {
return units
const EPS = 1e-3;
const SQUARE = '\xb2';
const getCalibratedLengthUnitsAndScale = (image, handles) => {
const { calibration, hasPixelSpacing } = image;
let unit = hasPixelSpacing ? 'mm' : PIXEL_UNITS;
let areaUnit = unit + SQUARE;
let scale = 1;
let calibrationType = '';
if (
!calibration ||
(!calibration.type && !calibration.sequenceOfUltrasoundRegions)
) {
return { unit, areaUnit, scale };
}
if (calibration.type === CalibrationTypes.UNCALIBRATED) {
return PIXEL_UNITS
return { unit: PIXEL_UNITS, areaUnit: PIXEL_UNITS + SQUARE, scale };
}
// TODO - handle US regions properly
if (calibration.SequenceOfUltrasoundRegions) {
return 'US Region'
if (calibration.sequenceOfUltrasoundRegions) {
let imageIndex1, imageIndex2;
if (Array.isArray(handles) && handles.length === 2) {
[imageIndex1, imageIndex2] = handles;
} else if (typeof handles === 'function') {
const points = handles();
imageIndex1 = points[0];
imageIndex2 = points[1];
}
let regions = calibration.sequenceOfUltrasoundRegions.filter(
(region) =>
imageIndex1[0] >= region.regionLocationMinX0 &&
imageIndex1[0] <= region.regionLocationMaxX1 &&
imageIndex1[1] >= region.regionLocationMinY0 &&
imageIndex1[1] <= region.regionLocationMaxY1 &&
imageIndex2[0] >= region.regionLocationMinX0 &&
imageIndex2[0] <= region.regionLocationMaxX1 &&
imageIndex2[1] >= region.regionLocationMinY0 &&
imageIndex2[1] <= region.regionLocationMaxY1
);
// If we are not in a region at all we should show the underlying calibration
// which might be the mm spacing for the image
if (!regions?.length) {
return { unit, areaUnit, scale };
}
// if we are in a region then it is the question of whether we support it
// or not. If we do not support it we should show px
regions = regions.filter(
(region) =>
SUPPORTED_REGION_DATA_TYPES.includes(region.regionDataType) &&
SUPPORTED_LENGTH_VARIANT.includes(
`${region.physicalUnitsXDirection},${region.physicalUnitsYDirection}`
)
);
if (!regions.length) {
return {
unit: PIXEL_UNITS,
areaUnit: PIXEL_UNITS + SQUARE,
scale,
};
}
// Todo: expand on this logic
const region = regions[0];
const physicalDeltaX = Math.abs(region.physicalDeltaX);
const physicalDeltaY = Math.abs(region.physicalDeltaY);
// if we are in a supported region then we should check if the
// physicalDeltaX and physicalDeltaY are the same. If they are not
// then we should show px again, but if they are the same then we should
// show the units
const isSamePhysicalDelta = utilities.isEqual(
physicalDeltaX,
physicalDeltaY,
EPS
);
if (isSamePhysicalDelta) {
// 1 to 1 aspect ratio, we use just one of them
scale = 1 / physicalDeltaX;
calibrationType = 'US Region';
unit = UNIT_MAPPING[region.physicalUnitsXDirection] || 'unknown';
areaUnit = unit + SQUARE;
} else {
// here we are showing at the aspect ratio of the physical delta
// if they are not the same, then we should show px, but the correct solution
// is to grab each point separately and scale them individually
// Todo: implement this
return {
unit: PIXEL_UNITS,
areaUnit: PIXEL_UNITS + SQUARE,
scale,
};
}
} else if (calibration.scale) {
scale = calibration.scale;
}
return `${units} ${calibration.type}`
}
const SQUARE = '\xb2'
/**
* Extracts the area units, including the squared sign plus calibration type.
*/
const getCalibratedAreaUnits = (handles, image) => {
const { calibration, hasPixelSpacing } = image
const units = (hasPixelSpacing ? 'mm' : PIXEL_UNITS) + SQUARE
if (!calibration || !calibration.type) {
return units
// everything except REGION/Uncalibrated
const types = [
CalibrationTypes.ERMF,
CalibrationTypes.USER,
CalibrationTypes.ERROR,
CalibrationTypes.PROJECTION,
];
if (types.includes(calibration?.type)) {
calibrationType = calibration.type;
}
if (calibration.SequenceOfUltrasoundRegions) {
return 'US Region'
return {
unit: unit + (calibrationType ? ` ${calibrationType}` : ''),
areaUnit: areaUnit + (calibrationType ? ` ${calibrationType}` : ''),
scale,
};
};
const getCalibratedProbeUnitsAndValue = (image, handles) => {
const [imageIndex] = handles;
const { calibration } = image;
let units = ['raw'];
let values = [null];
let calibrationType = '';
if (
!calibration ||
(!calibration.type && !calibration.sequenceOfUltrasoundRegions)
) {
return { units, values };
// Todo: add support for other scenarios
}
return `${units} ${calibration.type}`
}
/**
* Gets the scale divisor for converting from internal spacing to
* image spacing for calibrated images.
*/
if (calibration.sequenceOfUltrasoundRegions) {
// for Probe tool
const supportedRegionsMetadata =
calibration.sequenceOfUltrasoundRegions.filter(
(region) =>
SUPPORTED_REGION_DATA_TYPES.includes(region.regionDataType) &&
SUPPORTED_PROBE_VARIANT.includes(
`${region.physicalUnitsXDirection},${region.physicalUnitsYDirection}`
)
);
const getCalibratedScale = (image) => {
let scale = null
if (image.calibration && image.calibration.scale) {
scale = image.calibration.scale
if (!supportedRegionsMetadata?.length) {
return { units, values };
}
const region = supportedRegionsMetadata.find(
(region) =>
imageIndex[0] >= region.regionLocationMinX0 &&
imageIndex[0] <= region.regionLocationMaxX1 &&
imageIndex[1] >= region.regionLocationMinY0 &&
imageIndex[1] <= region.regionLocationMaxY1
);
if (!region) {
return { units, values };
}
// Todo: I think this is a ok assumption for now that if the referencePixelX0 and referencePixelY0
// are not defined, then we can assume 0 for them
const { referencePixelX0 = 0, referencePixelY0 = 0 } = region;
const { physicalDeltaX, physicalDeltaY } = region;
const yValue =
(imageIndex[1] - region.regionLocationMinY0 - referencePixelY0) *
physicalDeltaY;
const xValue =
(imageIndex[0] - region.regionLocationMinX0 - referencePixelX0) *
physicalDeltaX;
calibrationType = 'US Region';
values = [xValue, yValue];
units = [
UNIT_MAPPING[region.physicalUnitsXDirection],
UNIT_MAPPING[region.physicalUnitsYDirection],
];
}
return scale || 1
}
/** Gets the aspect ratio of the screen display relative to the image
* display in order to square up measurement values.
* That is, suppose the spacing on the image is 1, 0.5 (x,y spacing)
* This is displayed at 1, 1 spacing on screen, then the
* aspect value will be 1/0.5 = 2
*/
return {
units,
values,
calibrationType,
};
};
const getCalibratedAspect = (image) => {
let aspect = null
if (image.calibration && image.calibration.aspect) {
aspect = image.calibration.aspect
}
return aspect || 1
}
const getCalibratedAspect = (image) => image.calibration?.aspect || 1;
export default getCalibratedLengthUnits
// export default getCalibratedLengthUnits
export {
getCalibratedAreaUnits,
getCalibratedLengthUnits,
getCalibratedScale,
getCalibratedAspect
getCalibratedLengthUnitsAndScale,
getCalibratedAspect,
getCalibratedProbeUnitsAndValue,
}
@@ -0,0 +1,55 @@
import { metaData } from '@cornerstonejs/core';
/**
* Determines the appropriate pixel value units based on the image modality and options.
* @param modality - The modality of the image (e.g., 'CT', 'PT').
* @param imageId - The unique identifier for the image.
* @param options - Additional options for determining pixel units.
* @returns The appropriate pixel value units as a string.
*/
function getPixelValueUnits(
modality,
imageId,
options
) {
if (modality === 'CT') {
return 'HU';
} else if (modality === 'PT') {
return _handlePTModality(imageId, options);
} else {
return '';
}
}
/**
* Handles the determination of pixel value units for PT (Positron Emission Tomography) modality.
* @param imageId - The unique identifier for the image.
* @param options - Additional options for determining pixel units.
* @returns The appropriate pixel value units for PT modality as a string.
*/
function _handlePTModality(
imageId,
options
) {
if (!options.isPreScaled) {
return 'raw';
}
if (options.isSuvScaled) {
return 'SUV';
}
const generalSeriesModule = metaData.get('generalSeriesModule', imageId);
// It might be possible that the reference ImageId is not the one
// that is being displayed. So we need to get the modality from imageId again
if (generalSeriesModule?.modality === 'PT') {
const petSeriesModule = metaData.get('petSeriesModule', imageId);
return petSeriesModule?.units || 'unitless';
}
return 'unknown';
}
export { getPixelValueUnits };
@@ -1,14 +1,27 @@
import initProviders from './initProviders'
import initCornerstoneDICOMImageLoader from './initCornerstoneDICOMImageLoader'
// import initCornerstoneDICOMImageLoader from './initCornerstoneDICOMImageLoader'
import initVolumeLoader from './initVolumeLoader'
import { init as csRenderInit } from '@cornerstonejs/core'
import { init as csToolsInit } from '@cornerstonejs/tools'
import {
init as csRenderInit,
imageLoader,
volumeLoader,
metaData,
} from '@cornerstonejs/core';
import * as cornerstoneTools from '@cornerstonejs/tools';
import * as cornerstone from '@cornerstonejs/core';
import { init as csToolsInit } from '@cornerstonejs/tools';
import cornerstoneDICOMImageLoader from '@cornerstonejs/dicom-image-loader';
window.cornerstone = cornerstone;
window.cornerstoneTools = cornerstoneTools;
export default async function initLibraries() {
initProviders()
initCornerstoneDICOMImageLoader()
initVolumeLoader()
await csRenderInit()
await csToolsInit()
initProviders();
cornerstoneDICOMImageLoader.init();
initVolumeLoader();
await csRenderInit({
// peerImport,
// ...(config?.core ? config.core : {}),
});
await csToolsInit();
}
@@ -1,19 +1,14 @@
import { volumeLoader } from '@cornerstonejs/core'
import {
cornerstoneStreamingImageVolumeLoader,
cornerstoneStreamingDynamicImageVolumeLoader
} from '@cornerstonejs/streaming-image-volume-loader'
volumeLoader,
cornerstoneStreamingImageVolumeLoader
} from '@cornerstonejs/core';
export default function initVolumeLoader() {
volumeLoader.registerUnknownVolumeLoader(
cornerstoneStreamingImageVolumeLoader
)
);
volumeLoader.registerVolumeLoader(
'cornerstoneStreamingImageVolume',
cornerstoneStreamingImageVolumeLoader
)
volumeLoader.registerVolumeLoader(
'cornerstoneStreamingDynamicImageVolume',
cornerstoneStreamingDynamicImageVolumeLoader
)
);
}
@@ -25,20 +25,12 @@ const { isAnnotationLocked } = annotation.locking
const drawHandlesSvg = drawing.drawHandles
const drawCircleSvg = drawing.drawCircle
const drawLinkedTextBoxSvg = drawing.drawLinkedTextBox
const { triggerAnnotationRenderForViewportIds } = utilities
const { triggerAnnotationRenderForViewportIds, } = utilities
const { getTextBoxCoordsCanvas } = utilities.drawing
const { getViewportIdsWithToolToRender } = utilities.viewportFilters
// const getCanvasCircleRadius
// const getCanvasCircleCorners
// const { getCanvasCircleRadius, getCanvasCircleCorners } = utilities.math.circle
import {
getCalibratedLengthUnits,
getCalibratedAreaUnits,
getCalibratedScale,
getCalibratedAspect
getCalibratedAspect, getCalibratedLengthUnitsAndScale
} from './../js/getCalibratedUnits'
import { getModalityUnit } from './../js/getModalityUnit'
import { pointInShapeCallback } from './../js/pointInShapeCallback'
import { vec3 } from 'gl-matrix'
class CircleROITool extends cornerstoneTools.CircleROITool {
static toolName;
@@ -114,7 +106,8 @@ class CircleROITool extends cornerstoneTools.CircleROITool {
viewPlaneNormal: [...viewPlaneNormal],
viewUp: [...viewUp],
FrameOfReferenceUID,
referencedImageId
referencedImageId,
...viewport.getViewReference({ points: [worldPos] }),
},
data: {
label: '',
@@ -126,15 +119,15 @@ class CircleROITool extends cornerstoneTools.CircleROITool {
topLeft: [0, 0, 0],
topRight: [0, 0, 0],
bottomLeft: [0, 0, 0],
bottomRight: [0, 0, 0]
}
bottomRight: [0, 0, 0],
},
},
points: [[...worldPos], [...worldPos]],
activeHandleIndex: 1
activeHandleIndex: null,
},
cachedStats: {}
}
}
cachedStats: {},
},
};
addAnnotation(annotation, element)
const viewportIdsToRender = getViewportIdsWithToolToRender(
@@ -193,17 +186,21 @@ class CircleROITool extends cornerstoneTools.CircleROITool {
const { annotationUID, data } = annotation
const { handles } = data
// const { points, activeHandleIndex } = handles
const { points } = handles
var activeHandleIndex = null
if (annotation.highlighted && !annotation.isLocked && annotation.isVisible) {
activeHandleIndex = 1
}
const { points, activeHandleIndex } = handles
// var activeHandleIndex = null
// if (annotation.highlighted && !annotation.isLocked && annotation.isVisible) {
// activeHandleIndex = 1
// }
styleSpecifier.annotationUID = annotationUID
const { color, lineWidth, lineDash } = this.getAnnotationStyle({
annotation,
styleSpecifier,
});
const lineWidth = this.getStyle('lineWidth', styleSpecifier, annotation)
const lineDash = this.getStyle('lineDash', styleSpecifier, annotation)
const color = this.getStyle('color', styleSpecifier, annotation)
// const lineWidth = this.getStyle('lineWidth', styleSpecifier, annotation)
// const lineDash = this.getStyle('lineDash', styleSpecifier, annotation)
// const color = this.getStyle('color', styleSpecifier, annotation)
const canvasCoordinates = points.map((p) =>
viewport.worldToCanvas(p)
@@ -214,15 +211,15 @@ class CircleROITool extends cornerstoneTools.CircleROITool {
const { centerPointRadius } = this.configuration
const modalityUnitOptions = {
isPreScaled: utilities.viewport.isViewportPreScaled(viewport, targetId),
// const modalityUnitOptions = {
// isPreScaled: utilities.viewport.isViewportPreScaled(viewport, targetId),
isSuvScaled: this.isSuvScaled(
viewport,
targetId,
annotation.metadata.referencedImageId
)
}
// isSuvScaled: this.isSuvScaled(
// viewport,
// targetId,
// annotation.metadata.referencedImageId
// )
// }
// If cachedStats does not exist, or the unit is missing (as part of import/hydration etc.),
// force to recalculate the stats from the points
@@ -246,7 +243,7 @@ class CircleROITool extends cornerstoneTools.CircleROITool {
viewport,
renderingEngine,
enabledElement,
modalityUnitOptions
// modalityUnitOptions
)
} else if (annotation.invalidated) {
this._throttledCalculateCachedStats(
@@ -254,7 +251,7 @@ class CircleROITool extends cornerstoneTools.CircleROITool {
viewport,
renderingEngine,
enabledElement,
modalityUnitOptions
// modalityUnitOptions
)
// If the invalidated data is as a result of volumeViewport manipulation
@@ -424,155 +421,164 @@ class CircleROITool extends cornerstoneTools.CircleROITool {
annotation,
viewport,
renderingEngine,
enabledElement,
modalityUnitOptions
enabledElement
) => {
const data = annotation.data
const { viewportId, renderingEngineId } = enabledElement
const data = annotation.data;
const { element } = viewport;
const { points } = data.handles
const { points } = data.handles;
const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p))
const { viewPlaneNormal, viewUp } = viewport.getCamera()
const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
const { viewPlaneNormal, viewUp } = viewport.getCamera();
const [topLeftCanvas, bottomRightCanvas] = (
getCanvasCircleCorners(canvasCoordinates)
)
);
const topLeftWorld = viewport.canvasToWorld(topLeftCanvas)
const bottomRightWorld = viewport.canvasToWorld(bottomRightCanvas)
const { cachedStats } = data
const topLeftWorld = viewport.canvasToWorld(topLeftCanvas);
const bottomRightWorld = viewport.canvasToWorld(bottomRightCanvas);
const { cachedStats } = data;
const targetIds = Object.keys(cachedStats);
const worldPos1 = topLeftWorld;
const worldPos2 = bottomRightWorld;
const targetIds = Object.keys(cachedStats)
const worldPos1 = topLeftWorld
const worldPos2 = bottomRightWorld
for (let i = 0; i < targetIds.length; i++) {
const targetId = targetIds[i]
const targetId = targetIds[i];
const image = this.getTargetIdImage(targetId, renderingEngine)
const image = this.getTargetImageData(targetId);
// If image does not exists for the targetId, skip. This can be due
// to various reasons such as if the target was a volumeViewport, and
// the volumeViewport has been decached in the meantime.
if (!image) {
continue
continue;
}
const { dimensions, imageData, metadata } = image
const { dimensions, imageData, metadata, voxelManager } = image;
const worldPos1Index = transformWorldToIndex(imageData, worldPos1)
const pos1Index = transformWorldToIndex(imageData, worldPos1);
worldPos1Index[0] = Math.floor(worldPos1Index[0])
worldPos1Index[1] = Math.floor(worldPos1Index[1])
worldPos1Index[2] = Math.floor(worldPos1Index[2])
pos1Index[0] = Math.floor(pos1Index[0]);
pos1Index[1] = Math.floor(pos1Index[1]);
pos1Index[2] = Math.floor(pos1Index[2]);
const worldPos2Index = transformWorldToIndex(imageData, worldPos2)
const pos2Index = transformWorldToIndex(imageData, worldPos2);
worldPos2Index[0] = Math.floor(worldPos2Index[0])
worldPos2Index[1] = Math.floor(worldPos2Index[1])
worldPos2Index[2] = Math.floor(worldPos2Index[2])
pos2Index[0] = Math.floor(pos2Index[0]);
pos2Index[1] = Math.floor(pos2Index[1]);
pos2Index[2] = Math.floor(pos2Index[2]);
// Check if one of the indexes are inside the volume, this then gives us
// Some area to do stats over.
if (this._isInsideVolume(worldPos1Index, worldPos2Index, dimensions)) {
const iMin = Math.min(worldPos1Index[0], worldPos2Index[0])
const iMax = Math.max(worldPos1Index[0], worldPos2Index[0])
if (this._isInsideVolume(pos1Index, pos2Index, dimensions)) {
const iMin = Math.min(pos1Index[0], pos2Index[0]);
const iMax = Math.max(pos1Index[0], pos2Index[0]);
const jMin = Math.min(worldPos1Index[1], worldPos2Index[1])
const jMax = Math.max(worldPos1Index[1], worldPos2Index[1])
const jMin = Math.min(pos1Index[1], pos2Index[1]);
const jMax = Math.max(pos1Index[1], pos2Index[1]);
const kMin = Math.min(worldPos1Index[2], worldPos2Index[2])
const kMax = Math.max(worldPos1Index[2], worldPos2Index[2])
const kMin = Math.min(pos1Index[2], pos2Index[2]);
const kMax = Math.max(pos1Index[2], pos2Index[2]);
const boundsIJK = [
[iMin, iMax],
[jMin, jMax],
[kMin, kMax]
]
[kMin, kMax],
];
const center = [
(topLeftWorld[0] + bottomRightWorld[0]) / 2,
(topLeftWorld[1] + bottomRightWorld[1]) / 2,
(topLeftWorld[2] + bottomRightWorld[2]) / 2
]
(topLeftWorld[2] + bottomRightWorld[2]) / 2,
];
const ellipseObj = {
center,
xRadius: Math.abs(topLeftWorld[0] - bottomRightWorld[0]) / 2,
yRadius: Math.abs(topLeftWorld[1] - bottomRightWorld[1]) / 2,
zRadius: Math.abs(topLeftWorld[2] - bottomRightWorld[2]) / 2
}
zRadius: Math.abs(topLeftWorld[2] - bottomRightWorld[2]) / 2,
};
const { worldWidth, worldHeight } = getWorldWidthAndHeightFromTwoPoints(
viewPlaneNormal,
viewUp,
worldPos1,
worldPos2
)
const isEmptyArea = worldWidth === 0 && worldHeight === 0
const scale = getCalibratedScale(image)
const aspect = getCalibratedAspect(image)
);
const isEmptyArea = worldWidth === 0 && worldHeight === 0;
const handles = [pos1Index, pos2Index];
const { scale, unit, areaUnit } = getCalibratedLengthUnitsAndScale(
image,
handles
);
const aspect = getCalibratedAspect(image);
const area = Math.abs(
Math.PI *
(worldWidth / scale / 2) *
(worldHeight / aspect / scale / 2)
)
);
const modalityUnit = getModalityUnit(
const pixelUnitsOptions = {
isPreScaled: isViewportPreScaled(viewport, targetId),
isSuvScaled: this.isSuvScaled(
viewport,
targetId,
annotation.metadata.referencedImageId
),
};
const modalityUnit = getPixelValueUnits(
metadata.Modality,
annotation.metadata.referencedImageId,
modalityUnitOptions
)
const pointsInShape = pointInShapeCallback(
imageData,
(pointLPS, pointIJK) => pointInEllipse(ellipseObj, pointLPS),
this.configuration.statsCalculator.statsCallback,
boundsIJK
)
pixelUnitsOptions
);
const stats = this.configuration.statsCalculator.getStatistics()
const pointsInShape = voxelManager.forEach(
this.configuration.statsCalculator.statsCallback,
{
isInObject: (pointLPS) =>
pointInEllipse(ellipseObj, pointLPS, { fast: true }),
boundsIJK,
imageData,
returnPoints: this.configuration.storePointData,
}
);
const stats = this.configuration.statsCalculator.getStatistics();
cachedStats[targetId] = {
Modality: metadata.Modality,
area,
mean: stats[1] && stats[1].value ? stats[1].value : null,
max: stats[0] && stats[0].value ? stats[0].value : null,
stdDev: stats[2] && stats[2].value ? stats[2].value : null,
statsArray: stats,
pointsInShape: pointsInShape,
mean: stats.mean?.value,
max: stats.max?.value,
pointsInShape,
stdDev: stats.stdDev?.value,
statsArray: stats.array,
isEmptyArea,
areaUnit: getCalibratedAreaUnits(null, image),
areaUnit,
radius: worldWidth / 2 / scale,
radiusUnit: getCalibratedLengthUnits(null, image),
radiusUnit: unit,
perimeter: (2 * Math.PI * (worldWidth / 2)) / scale,
modalityUnit
}
annotation.isHandleOutsideImage = false
modalityUnit,
};
} else {
this.isHandleOutsideImage = true
this.isHandleOutsideImage = true;
cachedStats[targetId] = {
Modality: metadata.Modality,
areaUnit: getCalibratedAreaUnits(null, image)
}
annotation.isHandleOutsideImage = true
};
}
}
annotation.invalidated = false
annotation.invalidated = false;
// Dispatching annotation modified
const eventType = Enums.Events.ANNOTATION_MODIFIED
triggerAnnotationModified(annotation, element);
const eventDetail = {
annotation,
viewportId,
renderingEngineId
}
triggerEvent(eventTarget, eventType, eventDetail)
return cachedStats
}
return cachedStats;
};
}
function getCanvasCircleCorners(
@@ -2168,29 +2168,29 @@ export default {
</script>
<style lang="scss" scoped>
.measurement-form{
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
}
/deep/ .el-input .el-input__inner{
::v-deep .el-input .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
display: flex;
flex-direction: row;
justify-content: flex-start;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
flex: 1;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-button--mini, .el-button--mini.is-round {
::v-deep .el-button--mini, .el-button--mini.is-round {
padding: 7px 10px;
}
.el-form-item__content
@@ -2198,7 +2198,7 @@ export default {
width: 100%;
}
.input-width1{
width: calc(100% -60px)!important;
width: calc(100% - 60px)!important;
}
.input-width2{
width: 100% !important;
@@ -1233,12 +1233,12 @@ export default {
.el-collapse{
border-bottom:none;
border-top:none;
/deep/ .el-collapse-item{
::v-deep .el-collapse-item{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__header{
::v-deep .el-collapse-item__header{
background-color: #000!important;
color: #ddd;
border-bottom-color:#5a5a5a;
@@ -1246,11 +1246,11 @@ export default {
height: 35px;
line-height: 35px;
}
/deep/ .el-collapse-item__wrap{
::v-deep .el-collapse-item__wrap{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__content{
::v-deep .el-collapse-item__content{
width:260px;
position: absolute;
top: 0px;
@@ -782,32 +782,32 @@ export default {
}
.lesion_list{
position: relative;
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
text-align: left;
}
/deep/ .el-input .el-input__inner{
::v-deep .el-input .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-textarea__inner{
::v-deep .el-textarea__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
display: flex;
flex-direction: column;
justify-content: flex-start;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
flex: 1;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
@@ -825,48 +825,48 @@ export default {
border-radius: 10px;
background: #d0d0d0;
}
/deep/ .el-table,
::v-deep .el-table,
.el-table__expanded-cell {
background-color: #000;
color: #fff;
border-color: #444444;
}
/deep/ .el-table th,
::v-deep .el-table th,
.el-table tr {
background-color: #000;
color: #fff;
border-color: #444444;
}
/deep/ .el-table__body tr > td {
::v-deep .el-table__body tr > td {
background-color: #000 !important;
color: #fff;
border-color: #444444;
}
/deep/ .el-table__body tr:hover > td {
::v-deep .el-table__body tr:hover > td {
background-color: #858282 !important;
color: #fff;
border-color: #444444;
}
/deep/ .el-table--border th.gutter:last-of-type {
::v-deep .el-table--border th.gutter:last-of-type {
border: none;
}
/deep/ .el-table__fixed-right {
::v-deep .el-table__fixed-right {
height: 100% !important;
}
// /deep/ .el-table .cell {
// ::v-deep .el-table .cell {
// line-height: 20px;
// }
/deep/ .el-table__cell {
::v-deep .el-table__cell {
padding: 5px 0;
}
/deep/.el-table__fixed-right-patch {
::v-deep.el-table__fixed-right-patch {
background-color: #000 !important;
border-color: #444444;
}
/deep/.el-table__fixed-body-wrapper tr:hover > td {
::v-deep.el-table__fixed-body-wrapper tr:hover > td {
background-color: #000 !important;
}
/deep/.el-table--scrollable-x .el-table__body-wrapper {
::v-deep.el-table--scrollable-x .el-table__body-wrapper {
z-index: 2;
}
}
@@ -273,7 +273,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
/deep/ .el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}
@@ -282,16 +282,16 @@ export default {
flex-direction: column !important;
align-items: flex-start;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-input-group__append, .el-input-group__prepend{
::v-deep .el-input-group__append, .el-input-group__prepend{
padding: 0 10px;
}
/deep/ .el-form-item__content {
::v-deep .el-form-item__content {
width: 100%;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
</style>
@@ -1838,33 +1838,33 @@ export default {
</script>
<style lang="scss" scoped>
.measurement-form{
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
}
/deep/ .el-input .el-input__inner{
::v-deep .el-input .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
display: flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
flex: 1;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-input-group__append, .el-input-group__prepend{
::v-deep .el-input-group__append, .el-input-group__prepend{
padding: 0 10px;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-button--mini, .el-button--mini.is-round {
::v-deep .el-button--mini, .el-button--mini.is-round {
padding: 7px 10px;
}
.el-form-item__content
@@ -1872,13 +1872,13 @@ export default {
width: 100%;
}
.input-width1{
width: calc(100% -60px)!important;
width: calc(100% - 60px)!important;
}
.input-width2{
width: 100% !important;
}
.suv_viewer{
/deep/ .viewer-play {
::v-deep .viewer-play {
display: none;
}
}
@@ -1407,12 +1407,12 @@ export default {
.el-collapse{
border-bottom:none;
border-top:none;
/deep/ .el-collapse-item{
::v-deep .el-collapse-item{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__header{
::v-deep .el-collapse-item__header{
background-color: #000!important;
color: #ddd;
border-bottom-color:#5a5a5a;
@@ -1420,11 +1420,11 @@ export default {
height: 35px;
line-height: 35px;
}
/deep/ .el-collapse-item__wrap{
::v-deep .el-collapse-item__wrap{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__content{
::v-deep .el-collapse-item__content{
width:260px;
position: absolute;
top: 0px;
@@ -1440,24 +1440,24 @@ export default {
}
.merge-table{
padding:0 10px;
/deep/.el-table{
::v-deep.el-table{
background-color: #1e1e1e !important;
color: #383838;
}
/deep/.el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf{
::v-deep.el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf{
border-bottom: 1px solid #383838;
}
.el-table--border::after, .el-table--group::after, .el-table::before{
background-color: #1e1e1e;
}
/deep/.el-table__header-wrapper{
::v-deep.el-table__header-wrapper{
th{
background-color: #1e1e1e !important;
color: #dfdfdf;
border-bottom: 1px solid #383838;
}
}
/deep/.el-table__body-wrapper{
::v-deep.el-table__body-wrapper{
tr{
background-color: #1e1e1e !important;
color: #dfdfdf;
@@ -1466,7 +1466,7 @@ export default {
background-color: #1e1e1e !important;
}
}
/deep/.el-table__empty-block{
::v-deep.el-table__empty-block{
background-color: #1e1e1e !important;
}
.merge-label{
@@ -837,32 +837,32 @@ export default {
</script>
<style lang="scss" scoped>
.measurement-form{
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
}
/deep/ .el-input .el-input__inner{
::v-deep .el-input .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
display: flex;
flex-direction: row;
justify-content: flex-start;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
flex: 1;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-button--mini, .el-button--mini.is-round {
::v-deep .el-button--mini, .el-button--mini.is-round {
padding: 7px 10px;
}
/deep/ .el-input-group__append, .el-input-group__prepend {
::v-deep .el-input-group__append, .el-input-group__prepend {
padding: 0 10px;
}
.el-form-item__content
@@ -870,7 +870,7 @@ export default {
width: 100%;
}
.input-width1{
width: calc(100% -60px)!important;
width: calc(100% - 60px)!important;
}
.input-width2{
width: 100% !important;
@@ -583,12 +583,12 @@ export default {
.el-collapse{
border-bottom:none;
border-top:none;
/deep/ .el-collapse-item{
::v-deep .el-collapse-item{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__header{
::v-deep .el-collapse-item__header{
background-color: #000!important;
color: #ddd;
border-bottom-color:#5a5a5a;
@@ -596,11 +596,11 @@ export default {
height: 35px;
line-height: 35px;
}
/deep/ .el-collapse-item__wrap{
::v-deep .el-collapse-item__wrap{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__content{
::v-deep .el-collapse-item__content{
width:260px;
position: absolute;
top: 0px;
@@ -795,32 +795,32 @@ export default {
}
.lesion_list{
position: relative;
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
text-align: left;
}
/deep/ .el-input .el-input__inner{
::v-deep .el-input .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-textarea__inner{
::v-deep .el-textarea__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
display: flex;
flex-direction: column;
justify-content: flex-start;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
flex: 1;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
@@ -838,48 +838,48 @@ export default {
border-radius: 10px;
background: #d0d0d0;
}
/deep/ .el-table,
::v-deep .el-table,
.el-table__expanded-cell {
background-color: #000;
color: #fff;
border-color: #444444;
}
/deep/ .el-table th,
::v-deep .el-table th,
.el-table tr {
background-color: #000;
color: #fff;
border-color: #444444;
}
/deep/ .el-table__body tr > td {
::v-deep .el-table__body tr > td {
background-color: #000 !important;
color: #fff;
border-color: #444444;
}
/deep/ .el-table__body tr:hover > td {
::v-deep .el-table__body tr:hover > td {
background-color: #858282 !important;
color: #fff;
border-color: #444444;
}
/deep/ .el-table--border th.gutter:last-of-type {
::v-deep .el-table--border th.gutter:last-of-type {
border: none;
}
/deep/ .el-table__fixed-right {
::v-deep .el-table__fixed-right {
height: 100% !important;
}
// /deep/ .el-table .cell {
// ::v-deep .el-table .cell {
// line-height: 20px;
// }
/deep/ .el-table__cell {
::v-deep .el-table__cell {
padding: 5px 0;
}
/deep/.el-table__fixed-right-patch {
::v-deep.el-table__fixed-right-patch {
background-color: #000 !important;
border-color: #444444;
}
/deep/.el-table__fixed-body-wrapper tr:hover > td {
::v-deep.el-table__fixed-body-wrapper tr:hover > td {
background-color: #000 !important;
}
/deep/.el-table--scrollable-x .el-table__body-wrapper {
::v-deep.el-table--scrollable-x .el-table__body-wrapper {
z-index: 2;
}
}
@@ -273,7 +273,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
/deep/ .el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}
@@ -282,16 +282,16 @@ export default {
flex-direction: column !important;
align-items: flex-start;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-input-group__append, .el-input-group__prepend{
::v-deep .el-input-group__append, .el-input-group__prepend{
padding: 0 10px;
}
/deep/ .el-form-item__content {
::v-deep .el-form-item__content {
width: 100%;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
</style>
@@ -892,26 +892,26 @@ export default {
</script>
<style lang="scss" scoped>
.measurement-form{
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
}
/deep/ .el-input .el-input__inner{
::v-deep .el-input .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
display: flex;
flex-direction: row;
justify-content: flex-start;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
flex: 1;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
.el-form-item__content
@@ -919,7 +919,7 @@ export default {
width: 100%;
}
.input-width1{
width: calc(100% -60px)!important;
width: calc(100% - 60px)!important;
}
.input-width2{
width: 100% !important;
@@ -855,12 +855,12 @@ export default {
.el-collapse{
border-bottom:none;
border-top:none;
/deep/ .el-collapse-item{
::v-deep .el-collapse-item{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__header{
::v-deep .el-collapse-item__header{
background-color: #000!important;
color: #ddd;
border-bottom-color:#5a5a5a;
@@ -868,11 +868,11 @@ export default {
height: 35px;
line-height: 35px;
}
/deep/ .el-collapse-item__wrap{
::v-deep .el-collapse-item__wrap{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__content{
::v-deep .el-collapse-item__content{
width:260px;
position: absolute;
top: 0px;
@@ -483,7 +483,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
/deep/ .el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}
@@ -492,16 +492,16 @@ export default {
flex-direction: column !important;
align-items: flex-start;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-input-group__append, .el-input-group__prepend{
::v-deep .el-input-group__append, .el-input-group__prepend{
padding: 0 10px;
}
/deep/ .el-form-item__content {
::v-deep .el-form-item__content {
width: 100%;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
</style>
@@ -857,34 +857,34 @@ export default {
</script>
<style lang="scss" scoped>
.ecrf-wrapper{
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
text-align: left;
}
/deep/ .el-input__inner{
::v-deep .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-textarea__inner{
::v-deep .el-textarea__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
display: flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
flex: 1;
}
/deep/ .el-button--mini, .el-button--mini.is-round {
::v-deep .el-button--mini, .el-button--mini.is-round {
padding: 7px 10px;
}
/deep/ .el-form-item__content
::v-deep .el-form-item__content
.el-select{
width: 100%;
}
@@ -586,7 +586,7 @@ export default {
// border: 1px solid #ccc;
}
/deep/.el-tabs{
::v-deep.el-tabs{
box-sizing: border-box;
padding: 0 5px;
height: 100%;
@@ -629,7 +629,7 @@ export default {
background-color: #607d8b!important;
border: 1px solid #607d8b!important;
}
/deep/.el-progress__text{
::v-deep.el-progress__text{
color: #ccc;
font-size: 12px;
}
@@ -1501,29 +1501,29 @@ export default {
</script>
<style lang="scss" scoped>
.measurement-form{
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
}
/deep/ .el-input .el-input__inner{
::v-deep .el-input .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
display: flex;
flex-direction: row;
justify-content: flex-start;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
flex: 1;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-button--mini, .el-button--mini.is-round {
::v-deep .el-button--mini, .el-button--mini.is-round {
padding: 7px 10px;
}
.el-form-item__content
@@ -1531,7 +1531,7 @@ export default {
width: 100%;
}
.input-width1{
width: calc(100% -60px)!important;
width: calc(100% - 60px)!important;
}
.input-width2{
width: 100% !important;
@@ -1115,12 +1115,12 @@ export default {
.el-collapse{
border-bottom:none;
border-top:none;
/deep/ .el-collapse-item{
::v-deep .el-collapse-item{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__header{
::v-deep .el-collapse-item__header{
background-color: #000!important;
color: #ddd;
border-bottom-color:#5a5a5a;
@@ -1128,11 +1128,11 @@ export default {
height: 35px;
line-height: 35px;
}
/deep/ .el-collapse-item__wrap{
::v-deep .el-collapse-item__wrap{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__content{
::v-deep .el-collapse-item__content{
width:260px;
position: absolute;
top: 0px;
@@ -1182,29 +1182,29 @@ export default {
</script>
<style lang="scss" scoped>
.measurement-form{
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
}
/deep/ .el-input .el-input__inner{
::v-deep .el-input .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
display: flex;
flex-direction: row;
justify-content: flex-start;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
flex: 1;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-button--mini, .el-button--mini.is-round {
::v-deep .el-button--mini, .el-button--mini.is-round {
padding: 7px 10px;
}
.el-form-item__content
@@ -1212,7 +1212,7 @@ export default {
width: 100%;
}
.input-width1{
width: calc(100% -60px)!important;
width: calc(100% - 60px)!important;
}
.input-width2{
width: 100% !important;
@@ -1044,12 +1044,12 @@ export default {
.el-collapse{
border-bottom:none;
border-top:none;
/deep/ .el-collapse-item{
::v-deep .el-collapse-item{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__header{
::v-deep .el-collapse-item__header{
background-color: #000!important;
color: #ddd;
border-bottom-color:#5a5a5a;
@@ -1057,11 +1057,11 @@ export default {
height: 35px;
line-height: 35px;
}
/deep/ .el-collapse-item__wrap{
::v-deep .el-collapse-item__wrap{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__content{
::v-deep .el-collapse-item__content{
width:260px;
position: absolute;
top: 0px;
@@ -904,57 +904,57 @@ export default {
background-color: #000;
color: #ffffff;
border:none;
/deep/ .el-card__body{
::v-deep .el-card__body{
flex: 1;
}
}
// /deep/ .el-table__cell{
// ::v-deep .el-table__cell{
// background-color: #000;
// color: #ffffff;
// }
// /deep/ .el-table{
// ::v-deep .el-table{
// background-color: #000;
// color: #ffffff;
// }
// /deep/ .el-table__cell{
// ::v-deep .el-table__cell{
// background-color: #000;
// color: #ffffff;
// }
/deep/ .el-table, .el-table__expanded-cell {
::v-deep .el-table, .el-table__expanded-cell {
background-color: #000;
color: #fff;
border-color:#444444;
}
/deep/ .el-table th, .el-table tr {
::v-deep .el-table th, .el-table tr {
background-color: #000;
color: #fff;
border-color:#444444;
}
/deep/ .el-table__body tr > td{
::v-deep .el-table__body tr > td{
background-color:#000 !important;
color: #fff;
border-color:#444444;
}
/deep/ .el-table__body tr:hover > td{
::v-deep .el-table__body tr:hover > td{
background-color:#858282 !important;
color: #fff;
border-color:#444444;
}
/deep/ .el-table--border th.gutter:last-of-type{
::v-deep .el-table--border th.gutter:last-of-type{
border: none;
}
/deep/ .el-card__header{
::v-deep .el-card__header{
border: none;
padding: 10px;
}
}
/deep/ .el-switch__label{
::v-deep .el-switch__label{
color:#fff;
}
/deep/ .el-switch__label.is-active{
::v-deep .el-switch__label.is-active{
color: #428bca;
}
.colorOfRed{
@@ -918,7 +918,7 @@ export default {
</script>
<style lang="scss" scoped>
.study-wrapper{
/deep/ .el-progress-bar__inner{
::v-deep .el-progress-bar__inner{
transition: width 0s ease;
}
width:100%;
@@ -941,7 +941,7 @@ export default {
background-color: #607d8b!important;
border: 1px solid #607d8b!important;
}
/deep/.el-progress__text{
::v-deep.el-progress__text{
color: #ccc;
font-size: 12px;
}
@@ -1011,7 +1011,7 @@ export default {
}
}
/deep/.el-collapse{
::v-deep.el-collapse{
border: none;
.el-collapse-item{
background-color: #000!important;
@@ -1032,7 +1032,7 @@ export default {
}
}
.sr-wrapper{
/deep/.el-dialog{
::v-deep.el-dialog{
background: #fff !important;
border: 1px solid #ddd;
// color: #ddd;
@@ -1040,12 +1040,12 @@ export default {
color:#fff;
}
}
/deep/.sr-dialog-container{
::v-deep.sr-dialog-container{
margin-top: 50px !important;
width:75%;
height:80%;
}
/deep/.el-dialog__body{
::v-deep.el-dialog__body{
padding: 10px;
height: calc(100% - 50px);
}
@@ -1053,7 +1053,7 @@ export default {
position: relative;
}
.sr-full-dialog-container{
/deep/.is-fullscreen .el-dialog__body{
::v-deep.is-fullscreen .el-dialog__body{
height: calc(100% - 50px);
}
}
@@ -133,7 +133,7 @@ export default {
<style lang="scss">
.wl-container {
width: 100%;
// /deep/ .el-table{
// ::v-deep .el-table{
// background-color: #1e1e1e !important;
// }
@@ -157,7 +157,7 @@ export default {
background-color: #1e1e1e !important;
}
}
// /deep/ .el-table th,.el-table tr{
// ::v-deep .el-table th,.el-table tr{
// background-color: #1e1e1e !important;
// }
@@ -2615,12 +2615,12 @@ export default {
// }
}
.personal_config {
/deep/ .el-tabs__content {
::v-deep .el-tabs__content {
height: 450px;
overflow-y: auto;
}
}
/deep/ .manuals-dialog-container {
::v-deep .manuals-dialog-container {
margin-top: 50px !important;
width: 75%;
height: 80%;
@@ -2632,7 +2632,7 @@ export default {
position: relative;
}
}
/deep/ .manuals-full-dialog-container {
::v-deep .manuals-full-dialog-container {
.el-dialog__body {
padding: 10px;
height: calc(100% - 50px) !important;
@@ -515,12 +515,12 @@ export default {
}
.el-collapse{
border-bottom:none;
/deep/ .el-collapse-item{
::v-deep .el-collapse-item{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__header{
::v-deep .el-collapse-item__header{
background-color: #000!important;
color: #ddd;
border-bottom-color:#5a5a5a;
@@ -528,11 +528,11 @@ export default {
height: 35px;
line-height: 35px;
}
/deep/ .el-collapse-item__wrap{
::v-deep .el-collapse-item__wrap{
background-color: #000!important;
color: #ddd;
}
/deep/ .el-collapse-item__content{
::v-deep .el-collapse-item__content{
width:260px;
position: absolute;
top: 0px;
@@ -990,34 +990,34 @@ export default {
.my_dialog{
.criterion-form-item{
width: 100%;
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
width: auto;
}
///deep/ .el-input-goup__append{
//::v-deep .el-input-goup__append{
// background-color: transparent;
// color: #ddd;
// border: 1px solid #5e5e5e;
//}
}
}
/deep/ .el-form-item__label{
::v-deep .el-form-item__label{
color: #c3c3c3;
}
/deep/ .el-radio__label{
::v-deep .el-radio__label{
color: #c3c3c3;
}
/deep/ .el-input-group__append{
::v-deep .el-input-group__append{
background: #000;
color: #ddd;
border: 1px solid #5e5e5e;
}
/deep/ .el-input .el-input__inner{
::v-deep .el-input .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
.criterion-form-item{
/deep/ .criterion-form-item .el-form-item{
::v-deep .criterion-form-item .el-form-item{
display: block;
.el-form-item__label{
display: block;
@@ -1031,7 +1031,7 @@ export default {
flex-direction: row;
align-items: flex-start;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
}
.el-input{
width:100%;
@@ -1040,7 +1040,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
/deep/ .el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}
@@ -1050,13 +1050,13 @@ export default {
align-items: flex-start;
}
}
/deep/ .el-table__body-wrapper::-webkit-scrollbar{
::v-deep .el-table__body-wrapper::-webkit-scrollbar{
height: 10px!important;
}
/deep/ .el-table__fixed-right::before{
::v-deep .el-table__fixed-right::before{
display: none;
}
/deep/ .el-upload-list__item-name{
::v-deep .el-upload-list__item-name{
color: #0a84ff;
.el-icon-document{
color: #0a84ff;
@@ -341,7 +341,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
/deep/ .el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}
@@ -350,10 +350,10 @@ export default {
flex-direction: column;
align-items: flex-start;
}
/deep/ .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #646464a1;
}
/deep/ .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner{
background-color: #646464a1;
}
</style>
@@ -568,7 +568,7 @@ export default {
<style lang="scss" scoped>
.my_dialog{
.criterion-form-item{
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
width: auto;
}
}
@@ -579,7 +579,7 @@ export default {
flex-direction: row;
align-items: flex-start;
}
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
width: 500px;
}
.el-input{
@@ -589,7 +589,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
/deep/ .el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}
@@ -715,33 +715,33 @@ export default {
color: #ffffff;
border: none;
}
/deep/ .el-table,
::v-deep .el-table,
.el-table__expanded-cell {
background-color: #000;
color: #fff;
border-color: #444444;
}
/deep/ .el-table th,
::v-deep .el-table th,
.el-table tr {
background-color: #000;
color: #fff;
border-color: #444444;
}
/deep/ .el-table__body tr > td {
::v-deep .el-table__body tr > td {
background-color: #000 !important;
color: #fff;
border-color: #444444;
}
/deep/ .el-table__body tr:hover > td {
::v-deep .el-table__body tr:hover > td {
background-color: #858282 !important;
color: #fff;
border-color: #444444;
}
/deep/ .el-table--border th.gutter:last-of-type {
::v-deep .el-table--border th.gutter:last-of-type {
border: none;
}
/deep/ .el-card__header {
::v-deep .el-card__header {
border: none;
padding: 10px;
}
@@ -796,18 +796,18 @@ export default {
.el-tabs__item {
color: #fff;
}
/deep/ .el-tabs__header {
::v-deep .el-tabs__header {
height: 55px;
margin: 0px;
box-sizing: border-box;
}
/deep/ .el-tabs__content {
::v-deep .el-tabs__content {
flex: 1;
margin: 0px;
overflow-y: auto;
box-sizing: border-box;
}
/deep/ .el-tabs__item {
::v-deep .el-tabs__item {
color: #fff;
}
}
@@ -827,7 +827,7 @@ export default {
background-color: #607d8b !important;
border: 1px solid #607d8b !important;
}
/deep/ .el-progress__text {
::v-deep .el-progress__text {
color: #ccc;
font-size: 12px;
}
@@ -892,61 +892,61 @@ export default {
color: #ffffff;
border:none;
}
// /deep/ .el-table__cell{
// ::v-deep .el-table__cell{
// background-color: #000;
// color: #ffffff;
// }
// /deep/ .el-table{
// ::v-deep .el-table{
// background-color: #000;
// color: #ffffff;
// }
// /deep/ .el-table__cell{
// ::v-deep .el-table__cell{
// background-color: #000;
// color: #ffffff;
// }
/deep/ .el-table, .el-table__expanded-cell {
::v-deep .el-table, .el-table__expanded-cell {
background-color: #000;
color: #fff;
border-color:#444444;
}
/deep/ .el-table th, .el-table tr {
::v-deep .el-table th, .el-table tr {
background-color: #000;
color: #fff;
border-color:#444444;
}
/deep/ .el-table__body tr > td{
::v-deep .el-table__body tr > td{
background-color:#000 !important;
color: #fff;
border-color:#444444;
}
/deep/ .el-table__body tr:hover > td{
::v-deep .el-table__body tr:hover > td{
background-color:#858282 !important;
color: #fff;
border-color:#444444;
}
/deep/ .el-table--border th.gutter:last-of-type{
::v-deep .el-table--border th.gutter:last-of-type{
border: none;
}
/deep/ .el-card__header{
::v-deep .el-card__header{
border: none;
padding: 10px;
}
/deep/ .el-upload-list--picture-card .el-upload-list__item{
::v-deep .el-upload-list--picture-card .el-upload-list__item{
width: 30px;
height: 30px;
}
/deep/ .el-upload--picture-card{
::v-deep .el-upload--picture-card{
width: 30px;
height: 30px;
line-height: 40px;
}
}
/deep/ .el-switch__label{
::v-deep .el-switch__label{
color:#fff;
}
/deep/ .el-switch__label.is-active{
::v-deep .el-switch__label.is-active{
color: #428bca;
}
.uploadWrapper{
@@ -166,7 +166,7 @@ name: "CustomizeReportPageUpload",
<style lang="scss" scoped>
.disabled{
/deep/ .el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}
@@ -854,7 +854,7 @@ export default {
</script>
<style lang="scss" scoped>
.study-wrapper{
/deep/ .el-progress-bar__inner{
::v-deep .el-progress-bar__inner{
transition: width 0s ease;
}
width:100%;
@@ -877,7 +877,7 @@ export default {
background-color: #607d8b!important;
border: 1px solid #607d8b!important;
}
/deep/.el-progress__text{
::v-deep.el-progress__text{
color: #ccc;
font-size: 12px;
}
@@ -946,7 +946,7 @@ export default {
}
}
}
/deep/.el-collapse{
::v-deep.el-collapse{
border: none;
.el-collapse-item{
background-color: #000!important;
@@ -967,7 +967,7 @@ export default {
}
}
.sr-wrapper{
/deep/.el-dialog{
::v-deep.el-dialog{
background: #fff !important;
border: 1px solid #ddd;
// color: #ddd;
@@ -975,12 +975,12 @@ export default {
color:#fff;
}
}
/deep/.sr-dialog-container{
::v-deep.sr-dialog-container{
margin-top: 50px !important;
width:75%;
height:80%;
}
/deep/.el-dialog__body{
::v-deep.el-dialog__body{
padding: 10px;
height: calc(100% - 50px);
}
@@ -988,7 +988,7 @@ export default {
position: relative;
}
.sr-full-dialog-container{
/deep/.is-fullscreen .el-dialog__body{
::v-deep.is-fullscreen .el-dialog__body{
height: calc(100% - 50px);
}
}
@@ -133,7 +133,7 @@ export default {
<style lang="scss">
.wl-container {
width: 100%;
// /deep/ .el-table{
// ::v-deep .el-table{
// background-color: #1e1e1e !important;
// }
@@ -157,7 +157,7 @@ export default {
background-color: #1e1e1e !important;
}
}
// /deep/ .el-table th,.el-table tr{
// ::v-deep .el-table th,.el-table tr{
// background-color: #1e1e1e !important;
// }
@@ -505,7 +505,7 @@ export default {
}
</script>
<style lang="scss" scoped>
/deep/.el-message-box__headerbtn{
::v-deep.el-message-box__headerbtn{
display: none;
}
.dicom-container{
@@ -515,7 +515,7 @@ export default {
padding: 0 5px;
box-sizing: border-box;
background-color: #000;
/deep/.el-tabs{
::v-deep.el-tabs{
box-sizing: border-box;
height: 100%;
display: flex;
@@ -541,20 +541,20 @@ export default {
}
}
/deep/.hot-keys-label{
::v-deep.hot-keys-label{
color: #dfdfdf !important;
}
/deep/.shortcut-key-input span{
::v-deep.shortcut-key-input span{
color: #dfdfdf !important;
}
// /deep/ .el-dialog{
// ::v-deep .el-dialog{
// background: #1e1e1e;
// /deep/ .el-dialog__body{
// ::v-deep .el-dialog__body{
// padding: 10px;
// }
// }
/deep/.el-dialog{
::v-deep.el-dialog{
background: #1e1e1e;
border: 1px solid #ddd;
color: #ddd;
@@ -575,12 +575,12 @@ export default {
}
}
/deep/.dialog-container{
::v-deep.dialog-container{
margin-top: 50px !important;
width:75%;
height:80%;
}
/deep/.el-dialog__body{
::v-deep.el-dialog__body{
padding: 20px;
height: calc(100% - 70px);
}
@@ -590,7 +590,7 @@ export default {
}
.full-dialog-container{
/deep/.is-fullscreen .el-dialog__body{
::v-deep.is-fullscreen .el-dialog__body{
height: calc(100% - 70px);
}
}
@@ -218,7 +218,7 @@ export default {
border-radius: 10px;
background: #d0d0d0;
}
/deep/ .el-card__body{
::v-deep .el-card__body{
padding: 0px;
}
}
@@ -232,7 +232,7 @@ export default {
width:240px;
height: 100%;
/deep/ .el-card__body{
::v-deep .el-card__body{
height: 100%;
width: 100%;
display: flex;
@@ -251,18 +251,18 @@ export default {
flex: 1;
overflow-y: auto;
}
/deep/ .el-tabs{
::v-deep .el-tabs{
height: 100%;
display:flex;
flex-direction: column;
}
/deep/ .el-tabs__header{
::v-deep .el-tabs__header{
height: 40px;
padding: 0 5px;
margin-bottom: 5px;
}
/deep/ .el-tabs__content{
::v-deep .el-tabs__content{
flex: 1;
overflow-y: auto;
padding: 0 5px;
@@ -300,7 +300,7 @@ export default {
flex: 1;
height: 100%;
margin-left: 10px;
/deep/ .el-card__body{
::v-deep .el-card__body{
height: 100%;
width: 100%;
}
@@ -409,23 +409,23 @@ export default {
</script>
<style lang="scss" scoped>
/deep/ .el-form-item label:before {
::v-deep .el-form-item label:before {
content: '*';
color: #F56C6C;
margin-right: 4px;
}
/deep/ .el-textarea .el-input__count{
::v-deep .el-textarea .el-input__count{
background: rgba(0,0,0,0);
line-height: normal;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
margin-bottom: 0px;
}
.global-form{
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
padding-bottom: 10px;
}
/deep/ .form-item .el-form-item__error{
::v-deep .form-item .el-form-item__error{
top: 60%;
}
}
@@ -464,23 +464,23 @@ export default {
</script>
<style lang="scss" scoped>
/deep/ .el-form-item label:before {
::v-deep .el-form-item label:before {
content: '*';
color: #F56C6C;
margin-right: 4px;
}
/deep/ .el-textarea .el-input__count{
::v-deep .el-textarea .el-input__count{
background: rgba(0,0,0,0);
line-height: normal;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
margin-bottom: 0px;
}
.global-form{
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
padding-bottom: 10px;
}
/deep/ .form-item .el-form-item__error{
::v-deep .form-item .el-form-item__error{
top: 60%;
}
}
@@ -468,23 +468,23 @@ export default {
</script>
<style lang="scss" scoped>
/deep/ .el-form-item label:before {
::v-deep .el-form-item label:before {
content: '*';
color: #F56C6C;
margin-right: 4px;
}
/deep/ .el-textarea .el-input__count{
::v-deep .el-textarea .el-input__count{
background: rgba(0,0,0,0);
line-height: normal;
}
/deep/ .el-form-item{
::v-deep .el-form-item{
margin-bottom: 0px;
}
.global-form{
/deep/ .el-form-item__content{
::v-deep .el-form-item__content{
padding-bottom: 10px;
}
/deep/ .form-item .el-form-item__error{
::v-deep .form-item .el-form-item__error{
top: 60%;
}
}

Some files were not shown because too many files have changed in this diff Show More