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

uat
caiyiling 2025-02-18 15:09:25 +08:00
parent 0f50ff6ded
commit 4da35daa3c
146 changed files with 21791 additions and 18159 deletions

View File

@ -1,48 +1,58 @@
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint',
parser: '@babel/eslint-parser',
sourceType: 'module'
},
globals: {
"zzSessionStorage": true
'zzSessionStorage': true
},
env: {
browser: true,
node: true,
es6: true
},
extends: ["plugin:vue/recommended"],
extends: ['plugin:vue/recommended'],
// add your custom rules here
//it is base on https://github.com/vuejs/eslint-config-vue
// it is base on https://github.com/vuejs/eslint-config-vue
rules: {
"vue/max-attributes-per-line": [
2,
// "rule-name": "off"
// "vue/max-attributes-per-line": [
// 2,
// {
// singleline: 10,
// multiline: {
// max: 1,
// allowFirstLine: false
// }
// }
// ],
'vue/max-attributes-per-line': [
'error',
{
singleline: 10,
multiline: {
max: 1,
allowFirstLine: false
max: 1
}
}
],
"vue/singleline-html-element-content-newline": "off",
"vue/multiline-html-element-content-newline": "off",
"vue/name-property-casing": ["error", "PascalCase"],
"vue/no-v-html": "off",
"accessor-pairs": 2,
"arrow-spacing": [
'vue/singleline-html-element-content-newline': 'off',
'vue/multiline-html-element-content-newline': 'off',
'vue/name-property-casing': ['error', 'PascalCase'],
'vue/no-v-html': 'off',
'accessor-pairs': 2,
'arrow-spacing': [
2,
{
before: true,
after: true
}
],
"block-spacing": [2, "always"],
"brace-style": [
'block-spacing': [2, 'always'],
'brace-style': [
2,
"1tbs",
'1tbs',
{
allowSingleLine: true
}
@ -50,31 +60,31 @@ module.exports = {
camelcase: [
0,
{
properties: "always"
properties: 'always'
}
],
"comma-dangle": [2, "never"],
"comma-spacing": [
'comma-dangle': [2, 'never'],
'comma-spacing': [
2,
{
before: false,
after: true
}
],
"comma-style": [2, "last"],
"constructor-super": 2,
curly: [2, "multi-line"],
"dot-location": [2, "property"],
"eol-last": 2,
eqeqeq: ["error", "always", { null: "ignore" }],
"generator-star-spacing": [
'comma-style': [2, 'last'],
'constructor-super': 2,
curly: [2, 'multi-line'],
'dot-location': [2, 'property'],
'eol-last': 2,
eqeqeq: ['error', 'always', { null: 'ignore' }],
'generator-star-spacing': [
2,
{
before: true,
after: true
}
],
"handle-callback-err": [2, "^(err|error)$"],
'handle-callback-err': [2, '^(err|error)$'],
indent: [
2,
2,
@ -82,197 +92,197 @@ module.exports = {
SwitchCase: 1
}
],
"jsx-quotes": [2, "prefer-single"],
"key-spacing": [
'jsx-quotes': [2, 'prefer-single'],
'key-spacing': [
2,
{
beforeColon: false,
afterColon: true
}
],
"keyword-spacing": [
'keyword-spacing': [
2,
{
before: true,
after: true
}
],
"new-cap": [
'new-cap': [
2,
{
newIsCap: true,
capIsNew: false
}
],
"new-parens": 2,
"no-array-constructor": 2,
"no-caller": 2,
"no-console": "off",
"no-class-assign": 2,
"no-cond-assign": 2,
"no-const-assign": 2,
"no-control-regex": 0,
"no-delete-var": 2,
"no-dupe-args": 2,
"no-dupe-class-members": 2,
"no-dupe-keys": 2,
"no-duplicate-case": 2,
"no-empty-character-class": 2,
"no-empty-pattern": 2,
"no-eval": 2,
"no-ex-assign": 2,
"no-extend-native": 2,
"no-extra-bind": 2,
"no-extra-boolean-cast": 2,
"no-extra-parens": [2, "functions"],
"no-fallthrough": 2,
"no-floating-decimal": 2,
"no-func-assign": 2,
"no-implied-eval": 2,
"no-inner-declarations": [2, "functions"],
"no-invalid-regexp": 2,
"no-irregular-whitespace": 2,
"no-iterator": 2,
"no-label-var": 2,
"no-labels": [
'new-parens': 2,
'no-array-constructor': 2,
'no-caller': 2,
'no-console': 'off',
'no-class-assign': 2,
'no-cond-assign': 2,
'no-const-assign': 2,
'no-control-regex': 0,
'no-delete-var': 2,
'no-dupe-args': 2,
'no-dupe-class-members': 2,
'no-dupe-keys': 2,
'no-duplicate-case': 2,
'no-empty-character-class': 2,
'no-empty-pattern': 2,
'no-eval': 2,
'no-ex-assign': 2,
'no-extend-native': 2,
'no-extra-bind': 2,
'no-extra-boolean-cast': 2,
'no-extra-parens': [2, 'functions'],
'no-fallthrough': 2,
'no-floating-decimal': 2,
'no-func-assign': 2,
'no-implied-eval': 2,
'no-inner-declarations': [2, 'functions'],
'no-invalid-regexp': 2,
'no-irregular-whitespace': 2,
'no-iterator': 2,
'no-label-var': 2,
'no-labels': [
2,
{
allowLoop: false,
allowSwitch: false
}
],
"no-lone-blocks": 2,
"no-mixed-spaces-and-tabs": 2,
"no-multi-spaces": 2,
"no-multi-str": 2,
"no-multiple-empty-lines": [
'no-lone-blocks': 2,
'no-mixed-spaces-and-tabs': 2,
'no-multi-spaces': 2,
'no-multi-str': 2,
'no-multiple-empty-lines': [
2,
{
max: 1
}
],
"no-native-reassign": 2,
"no-negated-in-lhs": 2,
"no-new-object": 2,
"no-new-require": 2,
"no-new-symbol": 2,
"no-new-wrappers": 2,
"no-obj-calls": 2,
"no-octal": 2,
"no-octal-escape": 2,
"no-path-concat": 2,
"no-proto": 2,
"no-redeclare": 2,
"no-regex-spaces": 2,
"no-return-assign": [2, "except-parens"],
"no-self-assign": 2,
"no-self-compare": 2,
"no-sequences": 2,
"no-shadow-restricted-names": 2,
"no-spaced-func": 2,
"no-sparse-arrays": 2,
"no-this-before-super": 2,
"no-throw-literal": 2,
"no-trailing-spaces": 2,
"no-undef": 2,
"no-undef-init": 2,
"no-unexpected-multiline": 2,
"no-unmodified-loop-condition": 2,
"no-unneeded-ternary": [
'no-native-reassign': 2,
'no-negated-in-lhs': 2,
'no-new-object': 2,
'no-new-require': 2,
'no-new-symbol': 2,
'no-new-wrappers': 2,
'no-obj-calls': 2,
'no-octal': 2,
'no-octal-escape': 2,
'no-path-concat': 2,
'no-proto': 2,
'no-redeclare': 2,
'no-regex-spaces': 2,
'no-return-assign': [2, 'except-parens'],
'no-self-assign': 2,
'no-self-compare': 2,
'no-sequences': 2,
'no-shadow-restricted-names': 2,
'no-spaced-func': 2,
'no-sparse-arrays': 2,
'no-this-before-super': 2,
'no-throw-literal': 2,
'no-trailing-spaces': 2,
'no-undef': 2,
'no-undef-init': 2,
'no-unexpected-multiline': 2,
'no-unmodified-loop-condition': 2,
'no-unneeded-ternary': [
2,
{
defaultAssignment: false
}
],
"no-unreachable": 2,
"no-unsafe-finally": 2,
"no-unused-vars": [
'no-unreachable': 2,
'no-unsafe-finally': 2,
'no-unused-vars': [
2,
{
vars: "all",
args: "none"
vars: 'all',
args: 'none'
}
],
"no-useless-call": 2,
"no-useless-computed-key": 2,
"no-useless-constructor": 2,
"no-useless-escape": 0,
"no-whitespace-before-property": 2,
"no-with": 2,
"one-var": [
'no-useless-call': 2,
'no-useless-computed-key': 2,
'no-useless-constructor': 2,
'no-useless-escape': 0,
'no-whitespace-before-property': 2,
'no-with': 2,
'one-var': [
2,
{
initialized: "never"
initialized: 'never'
}
],
"operator-linebreak": [
'operator-linebreak': [
2,
"after",
'after',
{
overrides: {
"?": "before",
":": "before"
'?': 'before',
':': 'before'
}
}
],
"padded-blocks": [2, "never"],
'padded-blocks': [2, 'never'],
quotes: [
2,
"single",
'single',
{
avoidEscape: true,
allowTemplateLiterals: true
}
],
semi: [2, "never"],
"semi-spacing": [
semi: [2, 'never'],
'semi-spacing': [
2,
{
before: false,
after: true
}
],
"space-before-blocks": [2, "always"],
"space-before-function-paren": [2, "never"],
"space-in-parens": [2, "never"],
"space-infix-ops": 2,
"space-unary-ops": [
'space-before-blocks': [2, 'always'],
'space-before-function-paren': [2, 'never'],
'space-in-parens': [2, 'never'],
'space-infix-ops': 2,
'space-unary-ops': [
2,
{
words: true,
nonwords: false
}
],
"spaced-comment": [
'spaced-comment': [
2,
"always",
'always',
{
markers: [
"global",
"globals",
"eslint",
"eslint-disable",
"*package",
"!",
","
'global',
'globals',
'eslint',
'eslint-disable',
'*package',
'!',
','
]
}
],
"template-curly-spacing": [2, "never"],
"use-isnan": 2,
"valid-typeof": 2,
"wrap-iife": [2, "any"],
"yield-star-spacing": [2, "both"],
yoda: [2, "never"],
"prefer-const": 2,
//"no-debugger": process.env.NODE_ENV === "production" ? 2 : 0,
"object-curly-spacing": [
'template-curly-spacing': [2, 'never'],
'use-isnan': 2,
'valid-typeof': 2,
'wrap-iife': [2, 'any'],
'yield-star-spacing': [2, 'both'],
yoda: [2, 'never'],
'prefer-const': 2,
// "no-debugger": process.env.NODE_ENV === "production" ? 2 : 0,
'object-curly-spacing': [
2,
"always",
'always',
{
objectsInObjects: false
}
],
"array-bracket-spacing": [2, "never"]
'array-bracket-spacing': [2, 'never']
}
};
}

View File

@ -1,10 +1,12 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset',
// '@vue/cli-plugin-babel/preset',
// ["@babel/preset-env", { "modules": false }]
'@babel/preset-env'
],
plugins: [
'@babel/plugin-proposal-optional-chaining',
'@babel/plugin-proposal-nullish-coalescing-operator'
'@vue/babel-plugin-transform-vue-jsx'
// '@babel/plugin-proposal-optional-chaining',
// '@babel/plugin-proposal-nullish-coalescing-operator'
]
}

36966
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -14,23 +14,20 @@
"i18n:en": "node i18nGenerate.js lang=en keyCol=5 valCol=7"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.370.0",
"@aws-sdk/client-s3": "^3.701.0",
"@cornerstonejs/adapters": "^2.19.7",
"@cornerstonejs/calculate-suv": "^1.1.0",
"@cornerstonejs/core": "^1.27.4",
"@cornerstonejs/dicom-image-loader": "^1.27.4",
"@cornerstonejs/streaming-image-volume-loader": "1.23.2",
"@cornerstonejs/tools": "^1.27.4",
"@ffmpeg/core": "^0.10.0",
"@ffmpeg/ffmpeg": "^0.10.1",
"@microsoft/signalr": "^6.0.8",
"@riophae/vue-treeselect": "0.4.0",
"@cornerstonejs/core": "^2.19.7",
"@cornerstonejs/dicom-image-loader": "^2.19.7",
"@cornerstonejs/tools": "^2.19.7",
"@icr/polyseg-wasm": "^0.4.0",
"@microsoft/signalr": "^8.0.7",
"@riophae/vue-treeselect": "^0.4.0",
"@vue-office/docx": "^1.6.2",
"@vue-office/excel": "^1.7.11",
"@vue/composition-api": "^1.7.2",
"ali-oss": "^6.17.1",
"axios": "0.18.1",
"babel-eslint": "7.2.3",
"copy-webpack-plugin": "^4.5.2",
"axios": "^0.18.1",
"core-js": "^3.8.3",
"cornerstone-core": "^2.6.1",
"cornerstone-math": "^0.1.10",
@ -41,67 +38,68 @@
"dicom-parser": "^1.8.9",
"dicomedit": "^0.1.0",
"echarts": "^4.8.0",
"element-ui": "^2.15.8",
"exceljs": "^4.1.0",
"element-ui": "^2.15.14",
"exceljs": "^4.4.0",
"file-saver": "^2.0.5",
"hammerjs": "^2.0.8",
"html2canvas": "^1.4.1",
"js-md5": "^0.7.3",
"js-md5": "^0.8.3",
"jsencrypt": "^3.3.2",
"jszip": "^3.7.1",
"moment": "^2.27.0",
"node-polyfill-webpack-plugin": "^2.0.1",
"node-sass": "^4.14.1",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"path-to-regexp": "2.4.0",
"pdfobject": "^2.2.8",
"popper.js": "^1.16.1",
"qrcodejs2": "0.0.2",
"sass-loader": "^8.0.0",
"screenfull": "^4.2.0",
"sortablejs": "^1.15.0",
"jszip": "^3.10.1",
"minio": "^7.1.3",
"moment": "^2.30.1",
"moment-timezone": "^0.5.46",
"node-xlsx": "^0.24.0",
"normalize.css": "^8.0.1",
"nprogress": "^0.2.0",
"path-to-regexp": "^0.1.10",
"pdfobject": "^2.3.0",
"qrcodejs2": "^0.0.2",
"screenfull": "^6.0.2",
"sortablejs": "^1.15.5",
"streamsaver": "^2.0.6",
"v-viewer": "^1.6.4",
"svg-sprite-loader": "^4.1.3",
"svgo": "^1.2.2",
"v-viewer": "^1.7.4",
"vcrontab": "^0.3.5",
"vue": "^2.6.11",
"vue-clipboard2": "^0.3.1",
"vue-contextmenujs": "^1.3.13",
"vue": "^2.6.14",
"vue-clipboard2": "^0.3.3",
"vue-contextmenujs": "^1.4.11",
"vue-count-to": "^1.0.13",
"vue-demi": "^0.14.6",
"vue-i18n": "^8.7.0",
"vue-pdf": "^4.3.0",
"vue-demi": "^0.14.10",
"vue-i18n": "^8.28.2",
"vue-puzzle-vcode": "^1.1.10",
"vue-router": "3.0.6",
"vue-seamless-scroll": "^1.1.21",
"vue-router": "^3.0.6",
"vue-seamless-scroll": "^1.1.23",
"vuedraggable": "^2.24.3",
"vuex": "3.1.0",
"webpack-aliyun-oss": "^0.4.9"
"vuex": "^3.1.0",
"webpack-aliyun-oss": "^0.3.13"
},
"devDependencies": {
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
"@babel/plugin-proposal-optional-chaining": "^7.21.0",
"@vue/cli-plugin-babel": "~4.5.4",
"@vue/cli-plugin-eslint": "~4.5.4",
"@vue/cli-service": "~4.5.4",
"autoprefixer": "^9.5.1",
"aws-sdk": "^2.1532.0",
"babel-eslint": "^10.1.0",
"chalk": "2.4.2",
"connect": "3.6.6",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^6.2.2",
"html-webpack-plugin": "3.2.0",
"minio": "^7.1.3",
"moment-timezone": "^0.5.45",
"node-xlsx": "^0.21.0",
"runjs": "^4.3.2",
"script-ext-html-webpack-plugin": "2.1.3",
"script-loader": "0.7.2",
"serve-static": "^1.13.2",
"svg-sprite-loader": "4.1.3",
"svgo": "1.2.2",
"vue-template-compiler": "^2.6.11"
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@babel/plugin-transform-class-static-block": "^7.26.0",
"@vue/babel-plugin-transform-vue-jsx": "^1.4.0",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"autoprefixer": "^10.4.20",
"clean-webpack-plugin": "^4.0.0",
"copy-webpack-plugin": "^12.0.2",
"css-minimizer-webpack-plugin": "^7.0.0",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3",
"html-webpack-plugin": "^5.6.3",
"mini-css-extract-plugin": "^2.9.2",
"node-polyfill-webpack-plugin": "^4.0.0",
"path-browserify": "^1.0.1",
"process": "^0.11.10",
"sass": "^1.63.2",
"sass-loader": "^10.4.1",
"terser-webpack-plugin": "^5.3.10",
"vue-template-compiler": "^2.6.14",
"webpack": "^5.96.1",
"webpack-bundle-analyzer": "^4.10.2"
},
"eslintConfig": {
"root": true,
@ -109,19 +107,19 @@
"node": true
},
"extends": [
"plugin:vue/essential"
"plugin:vue/essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "babel-eslint"
"parser": "@babel/eslint-parser",
"requireConfigFile": false
},
"rules": {}
},
"engines": {
"node": ">=8.9",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions"
"last 2 versions",
"not dead",
"not op_mini all"
]
}

View File

@ -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;
}
}

View File

@ -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;
}
}

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;
}

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 },

View File

@ -73,7 +73,7 @@ export default {
position: relative;
overflow: hidden;
width: 100%;
/deep/ {
::v-deep {
.el-scrollbar__bar {
bottom: 0px;
}

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;

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'),

View File

@ -1,4 +1,4 @@
@import "./variables.scss";
@import "./variables.module.scss";
@import "./mixin.scss";
@import "./transition.scss";
@import "./element-ui.scss";

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 {

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;
}

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;
}

View File

@ -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="描述">

View File

@ -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="描述">

View File

@ -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>

View File

@ -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;
}

View File

@ -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>

View File

@ -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>

View File

@ -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;
}
}

View File

@ -190,7 +190,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
/deep/ .el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}

View File

@ -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="描述">

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 {

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%;
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

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;

View File

@ -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%;

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%;

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;
}

View File

@ -124,7 +124,7 @@ export default {
.el-tabs{
height: 100%;
.el-tabs__content{
height: calc(100%-50px);
height: calc(100% - 50px);
overflow-y: auto;
}
}

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;
}
}

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;
}
}

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>

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
src/views/test/index.vue Normal file
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>

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;
// }
}

View File

@ -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;
}

View File

@ -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{

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;
}
}

View File

@ -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>

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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>

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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>

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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) {

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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) {

View File

@ -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;

View File

@ -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,
}

View File

@ -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 };

View File

@ -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();
}

View File

@ -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
)
);
}

View File

@ -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(

View File

@ -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;

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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>

View File

@ -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;
}
}

View File

@ -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{

View File

@ -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;

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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>

View File

@ -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;

View File

@ -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;

View File

@ -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>

View File

@ -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%;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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{

View File

@ -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);
}
}

View File

@ -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;
// }

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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>

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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{

View File

@ -166,7 +166,7 @@ name: "CustomizeReportPageUpload",
<style lang="scss" scoped>
.disabled{
/deep/ .el-upload--picture-card {
::v-deep .el-upload--picture-card {
display: none;
}
}

View File

@ -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);
}
}

View File

@ -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;
// }

View File

@ -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);
}
}

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