36 Commits

Author SHA1 Message Date
wangxiaoshuang d065b8b2c1 LiLi简历去除身份证、手机号校验,预览不显示中文简历 2025-01-24 13:56:48 +08:00
wangxiaoshuang 52445f3791 Merge branch 'main' into uat_us 2025-01-24 13:51:27 +08:00
wangxiaoshuang c4f8e08b91 LiLi环境logo 2025-01-24 10:19:56 +08:00
wangxiaoshuang f7968667f6 Merge branch 'main' into uat_us 2025-01-24 10:17:54 +08:00
wangxiaoshuang 24303b208d Merge branch 'main' into uat_us 2025-01-23 18:41:20 +08:00
wangxiaoshuang 296c251847 1 2025-01-23 18:40:25 +08:00
wangxiaoshuang 3b9e5cddb7 Merge branch 'main' into uat_us 2025-01-23 16:37:18 +08:00
wangxiaoshuang d11092338d 打包配置修改 2025-01-23 14:06:28 +08:00
wangxiaoshuang 848427ac3c Merge branch 'main' into uat_us 2025-01-23 13:03:36 +08:00
wangxiaoshuang d70cffe306 Merge branch 'main' into uat_us 2025-01-22 15:29:37 +08:00
wangxiaoshuang 0cd44bf4c6 Merge branch 'main' into uat_us 2025-01-21 15:51:22 +08:00
DESKTOP-6C3NK6N\WXS a2939e52b2 v1.7.0发布 2024-10-14 17:05:51 +08:00
DESKTOP-6C3NK6N\WXS 99e6f700c3 国际化修改 2024-09-14 10:33:27 +08:00
DESKTOP-6C3NK6N\WXS 45c50bf67d 1.6版本发布 2024-09-05 11:15:04 +08:00
DESKTOP-6C3NK6N\WXS 19e3177e23 Merge branch 'uat' into uat_us 2024-09-05 10:45:21 +08:00
DESKTOP-6C3NK6N\WXS 437010c0f7 1 2024-08-30 13:40:35 +08:00
DESKTOP-6C3NK6N\WXS 01b3d6e85e 1 2024-08-12 15:43:38 +08:00
DESKTOP-6C3NK6N\WXS cb032485e1 Merge branch 'uat' into uat_us 2024-08-12 14:39:21 +08:00
DESKTOP-6C3NK6N\WXS 4b771a9d70 1 2024-08-12 13:43:26 +08:00
DESKTOP-6C3NK6N\WXS 86321d8405 Merge branch 'uat' into uat_us 2024-08-12 13:42:50 +08:00
DESKTOP-6C3NK6N\WXS b9f3b24608 Merge branch 'uat' into uat_us 2024-08-09 13:42:57 +08:00
DESKTOP-6C3NK6N\WXS bde8a7d572 1 2024-08-09 13:12:16 +08:00
DESKTOP-6C3NK6N\WXS 267ee60fc2 Merge branch 'uat' into uat_us 2024-08-09 13:11:36 +08:00
DESKTOP-6C3NK6N\WXS ef891857c4 1 2024-08-08 16:42:14 +08:00
DESKTOP-6C3NK6N\WXS 787f6425e0 Merge branch 'uat' into uat_us 2024-08-08 16:41:40 +08:00
DESKTOP-6C3NK6N\WXS 4929bb594d Merge branch 'uat' into uat_us 2024-08-07 18:31:12 +08:00
DESKTOP-6C3NK6N\WXS 4b9c2a073b 1 2024-08-07 18:17:17 +08:00
DESKTOP-6C3NK6N\WXS 861c7022b9 Merge branch 'uat' into uat_us 2024-08-07 18:17:05 +08:00
DESKTOP-6C3NK6N\WXS 21e0568b90 Merge branch 'uat' into uat_us 2024-08-07 17:27:36 +08:00
DESKTOP-6C3NK6N\WXS ffc9372c25 Merge branch 'uat' into uat_us 2024-08-07 16:20:52 +08:00
DESKTOP-6C3NK6N\WXS a58a6e4931 Merge branch 'uat' into uat_us 2024-08-07 15:33:24 +08:00
DESKTOP-6C3NK6N\WXS 6ac94ec1a0 Merge branch 'uat' into uat_us 2024-08-02 14:17:49 +08:00
DESKTOP-6C3NK6N\WXS ddc175961c Merge branch 'uat' into uat_us 2024-08-02 14:09:18 +08:00
DESKTOP-6C3NK6N\WXS 098a838c1e 美国测试环境 2024-08-02 09:52:14 +08:00
DESKTOP-6C3NK6N\WXS 6bb7d47511 Merge branch 'uat' into uat_us 2024-07-31 14:08:34 +08:00
DESKTOP-6C3NK6N\WXS 8e641300d2 1 2024-07-30 18:09:14 +08:00
343 changed files with 23574 additions and 48346 deletions
-3
View File
@@ -2,9 +2,6 @@
ENV = 'prop'
NODE_ENV = 'prop'
# base public path
VUE_APP_BASE_PATH = '/'
# 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true
+1 -1
View File
@@ -2,7 +2,7 @@
ENV = 'usa'
NODE_ENV = 'usa'
# base public path
VUE_APP_BASE_PATH = 'https://ei-code-prod.s3.amazonaws.com/2024-07-30/'
VUE_APP_BASE_PATH = 'https://ei-med-s3-uat-code.s3.amazonaws.com/2025-01-23/'
# 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true
+1 -1
View File
@@ -2,7 +2,7 @@
ENV = 'usa'
NODE_ENV = 'usa'
# base public path
VUE_APP_BASE_PATH = 'https://ei-med-s3-code.s3.amazonaws.com/2024-07-30/'
VUE_APP_BASE_PATH = 'https://ei-med-s3-code.s3.amazonaws.com/2025-01-23/'
# 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true
+44
View File
@@ -0,0 +1,44 @@
# just a flag
ENV = 'usa'
NODE_ENV = 'usa'
# base public path
VUE_APP_BASE_PATH = 'https://ei-code-prod.s3.amazonaws.com/2024-08-12/'
# 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true
# 是否开启长时间无操作锁定弹框MFA验证 true:是 false:否
VUE_APP_LOCK_FOR_PERMISSION_MFA = true
# 是否开启长时间无操作锁定弹框 true:是 false:否
VUE_APP_LOCK_FOR_PERMISSION = true
# 无操作锁定弹框判断时间 单位:秒
VUE_APP_LOCK_FOR_TIME = 900
# 是否开启长时间无操作登出 true:是 false:否
VUE_APP_LOGOUT_FOR_PERMISSION = true
# 无操作锁定弹框判断时间 单位:秒
VUE_APP_LOGOUT_FOR_TIME = 1800
# 是否开启密码正则验证 true:是 false:否
VUE_APP_PASSWORD_FOR_PERMISSION = true
# 是否开启密码正则验证 true:是 false:否
VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$
# 是否开启文档签署验证 true:是 false:否
VUE_APP_WORD_FOR_PERMISSION = true
# 公司名称
VUE_APP_COMPANY_NAME = "Elevate Imaging"
# dicom文件地址
VUE_APP_DICOM_PATH = 'https://zyypacs-uat.oss-cn-shanghai.aliyuncs.com'
VUE_APP_OSS_CONFIG_REGION = 'oss-cn-shanghai'
VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs-uat'
VUE_APP_OSS_PATH = '/usa/dist'
+143 -153
View File
@@ -1,58 +1,48 @@
module.exports = {
root: true,
parserOptions: {
parser: '@babel/eslint-parser',
parser: 'babel-eslint',
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: {
// "rule-name": "off"
// "vue/max-attributes-per-line": [
// 2,
// {
// singleline: 10,
// multiline: {
// max: 1,
// allowFirstLine: false
// }
// }
// ],
'vue/max-attributes-per-line': [
'error',
"vue/max-attributes-per-line": [
2,
{
singleline: 10,
multiline: {
max: 1
max: 1,
allowFirstLine: false
}
}
],
'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
}
@@ -60,31 +50,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,
@@ -92,197 +82,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"]
}
}
};
@@ -10516,7 +10516,7 @@ class BaseViewer {
const pageNumber = this._currentPageNumber,
state = this.#scrollModePageState,
viewmr = this.viewer;
viewer = this.viewer;
viewer.textContent = "";
state.pages.length = 0;
+3 -5
View File
@@ -1,12 +1,10 @@
module.exports = {
presets: [
// '@vue/cli-plugin-babel/preset',
// ["@babel/preset-env", { "modules": false }]
'@vue/cli-plugin-babel/preset',
'@babel/preset-env'
],
plugins: [
'@vue/babel-plugin-transform-vue-jsx'
// '@babel/plugin-proposal-optional-chaining',
// '@babel/plugin-proposal-nullish-coalescing-operator'
'@babel/plugin-proposal-optional-chaining',
'@babel/plugin-proposal-nullish-coalescing-operator'
]
}
+16252 -19924
View File
File diff suppressed because it is too large Load Diff
+70 -67
View File
@@ -6,6 +6,7 @@
"build": "vue-cli-service build",
"build:prod": "vue-cli-service build --mode prod",
"build:uat": "vue-cli-service build --mode uat",
"build:usa_test": "vue-cli-service build --mode usa_test",
"build:usa": "vue-cli-service build --mode usa",
"build:usa_prod": "vue-cli-service build --mode usa_prod",
"pre": "vue-cli-service build --mode pre",
@@ -14,20 +15,23 @@
"i18n:en": "node i18nGenerate.js lang=en keyCol=5 valCol=7"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.701.0",
"@cornerstonejs/adapters": "^2.19.7",
"@aws-sdk/client-s3": "^3.370.0",
"@cornerstonejs/calculate-suv": "^1.1.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",
"@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",
"@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",
"axios": "0.18.1",
"babel-eslint": "7.2.3",
"copy-webpack-plugin": "^4.5.2",
"core-js": "^3.8.3",
"cornerstone-core": "^2.6.1",
"cornerstone-math": "^0.1.10",
@@ -38,68 +42,67 @@
"dicom-parser": "^1.8.9",
"dicomedit": "^0.1.0",
"echarts": "^4.8.0",
"element-ui": "^2.15.14",
"exceljs": "^4.4.0",
"element-ui": "^2.15.8",
"exceljs": "^4.1.0",
"file-saver": "^2.0.5",
"hammerjs": "^2.0.8",
"html2canvas": "^1.4.1",
"js-md5": "^0.8.3",
"js-md5": "^0.7.3",
"jsencrypt": "^3.3.2",
"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",
"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",
"streamsaver": "^2.0.6",
"svg-sprite-loader": "^4.1.3",
"svgo": "^1.2.2",
"v-viewer": "^1.7.4",
"v-viewer": "^1.6.4",
"vcrontab": "^0.3.5",
"vue": "^2.6.14",
"vue-clipboard2": "^0.3.3",
"vue-contextmenujs": "^1.4.11",
"vue": "^2.6.11",
"vue-clipboard2": "^0.3.1",
"vue-contextmenujs": "^1.3.13",
"vue-count-to": "^1.0.13",
"vue-demi": "^0.14.10",
"vue-i18n": "^8.28.2",
"vue-demi": "^0.14.6",
"vue-i18n": "^8.7.0",
"vue-pdf": "^4.3.0",
"vue-puzzle-vcode": "^1.1.10",
"vue-router": "^3.0.6",
"vue-seamless-scroll": "^1.1.23",
"vue-router": "3.0.6",
"vue-seamless-scroll": "^1.1.21",
"vuedraggable": "^2.24.3",
"vuex": "^3.1.0",
"webpack-aliyun-oss": "^0.3.13"
"vuex": "3.1.0",
"webpack-aliyun-oss": "^0.4.9"
},
"devDependencies": {
"@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"
"@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"
},
"eslintConfig": {
"root": true,
@@ -107,19 +110,19 @@
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
"plugin:vue/essential"
],
"parserOptions": {
"parser": "@babel/eslint-parser",
"requireConfigFile": false
"parser": "babel-eslint"
},
"rules": {}
},
"engines": {
"node": ">=8.9",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead",
"not op_mini all"
"last 2 versions"
]
}
-197
View File
File diff suppressed because one or more lines are too long
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 21 KiB

+34 -78
View File
@@ -29,7 +29,7 @@
direction="rtl"
size="80%"
>
<div style="width: 800px">
<div style="width: 620px">
<el-form
label-width="100px"
@submit.native.prevent
@@ -40,7 +40,7 @@
<el-form-item :label="$t('il8n:search:keyword')">
<el-input v-model="key" @input="keyChange" />
</el-form-item>
<el-form-item :label="$t('il8n:search:state')">
<el-form-item :label="$t('il8n:search:state')" v-if="il8nExternal">
<el-select
v-model="State"
clearable
@@ -62,14 +62,12 @@
v-adaptive="{ bottomOffset: 50 }"
height="100"
style="width: 100%"
@sort-change="handleSortByColumn"
>
<el-table-column
prop="Code"
:label="$t('il8n:table:label')"
width="300"
show-overflow-tooltip
sortable="custom"
>
</el-table-column>
<!-- <el-table-column-->
@@ -81,11 +79,7 @@
<!-- {{scope.row.Description}}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column
prop="Value"
:label="$t('il8n:table:en')"
sortable="custom"
>
<el-table-column prop="Value" :label="$t('il8n:table:en')">
<template slot-scope="scope">
<el-input
v-model="scope.row.Value"
@@ -98,11 +92,7 @@
></el-input>
</template>
</el-table-column>
<el-table-column
prop="ValueCN"
:label="$t('il8n:table:cn')"
sortable="custom"
>
<el-table-column prop="ValueCN" :label="$t('il8n:table:cn')">
<template slot-scope="scope">
<el-input
v-model="scope.row.ValueCN"
@@ -118,7 +108,7 @@
<el-table-column
prop="ValueCN"
:label="$t('il8n:table:state')"
sortable="custom"
v-if="il8nExternal"
>
<template slot-scope="scope">
<el-select
@@ -136,20 +126,12 @@
</el-select>
</template>
</el-table-column>
<el-table-column
prop="Version"
:label="$t('il8n:table:Version')"
sortable="custom"
>
</el-table-column>
</el-table>
<div style="text-align: right; padding-top: 10px; padding-right: 10px">
<el-button size="mini" @click="drawer = false"
>{{ $t('common:button:cancel') }}
</el-button>
<el-button size="mini" type="primary" @click="handleSave">{{
$t('common:button:save')
}}</el-button>
<el-button size="mini" @click="drawer = false">取消 </el-button>
<el-button size="mini" type="primary" @click="handleSave"
>保存</el-button
>
</div>
</el-drawer>
<feedBack v-if="$route.matched.length > 0" />
@@ -213,18 +195,6 @@ export default {
// },
// },
methods: {
// 排序
handleSortByColumn(column) {
if (column.order === 'ascending') {
this.tableData.sort((a, b) =>
a[column.prop].localeCompare(b[column.prop])
)
} else {
this.tableData.sort((a, b) =>
b[column.prop].localeCompare(a[column.prop])
)
}
},
handleStateChange() {
this.tableData.forEach((item) => {
item.State = this.State
@@ -239,12 +209,9 @@ export default {
[],
this.arr.filter(
(v) =>
(v.Code &&
~v.Code.toLowerCase().indexOf(this.key.toLowerCase())) ||
(v.Value &&
~v.Value.toLowerCase().indexOf(this.key.toLowerCase())) ||
(v.ValueCN &&
~v.ValueCN.toLowerCase().indexOf(this.key.toLowerCase()))
~v.Code.indexOf(this.key) ||
~v.Value.indexOf(this.key) ||
~v.ValueCN.indexOf(this.key)
)
)
} else {
@@ -252,39 +219,33 @@ export default {
}
},
handleSave() {
this.$confirm('确定修改当前页面国际化内容?')
.then(() => {
batchAddOrUpdateFrontInternationalization(this.tableData).then(
async (res) => {
var zhMessages = {},
enMessages = {}
var Internationalization =
await getFrontInternationalizationList()
Vue.prototype.$tl = Internationalization.Result
this.tableData.forEach((v) => {
// zhMessages[v.Description + '_' + v.Code] = v.ValueCN
// enMessages[v.Description + '_' + v.Code] = v.Value
zhMessages[v.Code] = v.ValueCN
enMessages[v.Code] = v.Value
})
i18n.mergeLocaleMessage('zh', zhMessages)
i18n.mergeLocaleMessage('en', enMessages)
this.drawer = false
this.$message.success('国际化修改成功')
if (this.il8nExternal) {
this.$EventBus.$emit('il8nUpdate')
}
this.$confirm('确定修改当前页面国际化内容?').then(() => {
batchAddOrUpdateFrontInternationalization(this.tableData).then(
async (res) => {
var zhMessages = {},
enMessages = {}
var Internationalization = await getFrontInternationalizationList()
Vue.prototype.$tl = Internationalization.Result
this.tableData.forEach((v) => {
// zhMessages[v.Description + '_' + v.Code] = v.ValueCN
// enMessages[v.Description + '_' + v.Code] = v.Value
zhMessages[v.Code] = v.ValueCN
enMessages[v.Code] = v.Value
})
i18n.mergeLocaleMessage('zh', zhMessages)
i18n.mergeLocaleMessage('en', enMessages)
this.drawer = false
this.$message.success('国际化修改成功')
if (this.il8nExternal) {
this.$EventBus.$emit('il8nUpdate')
}
)
})
.catch((err) => {
console.log(err)
})
}
)
})
},
openI18n(ARRAY) {
this.tableData = []
this.il8nExternal = false
this.State = null
this.key = null
this.drawer = true
let arr = []
@@ -305,8 +266,6 @@ export default {
Value: item.Value,
ValueCN: item.ValueCN,
State: item.State,
Version: item.Version,
InternationalizationType: item.InternationalizationType,
}
})
this.tableData = Object.assign([], tableData)
@@ -337,9 +296,6 @@ export default {
Description: null,
Value: null,
ValueCN: null,
State: 0,
Version: this.$version.Version,
InternationalizationType: 0,
})
}
})
-8
View File
@@ -342,11 +342,3 @@ export function addNewUserSendEmail(data) {
data
})
}
// 用户追溯
export function getUserJoinedTrialList(data) {
return request({
url: `/TrialMaintenance/getUserJoinedTrialList`,
method: 'post',
data
})
}
+1 -252
View File
@@ -1069,255 +1069,4 @@ export function batchAddEnrollOrPdEmailConfig(params) {
method: 'post',
params
})
}
// 文件记录-系统文件列表
export function getSysFileTypeList(data) {
return request({
url: `/SysFileType/getSysFileTypeList`,
method: 'post',
data
})
}
// 文件记录-新增/编辑系统文件
export function addOrUpdateSysFileType(data) {
return request({
url: `/SysFileType/addOrUpdateSysFileType`,
method: 'post',
data
})
}
// 文件记录-删除系统文件
export function deleteSysFileType(id) {
return request({
url: `/SysFileType/deleteSysFileType/${id}`,
method: 'delete'
})
}
// 项目文档-获取项目菜单
export function getTrialFileTypeData(data) {
return request({
url: `/TrialFileType/getTrialFileTypeData`,
method: 'post',
data
})
}
// 项目文档-修改项目菜单启用
export function setAuthorizedView(data) {
return request({
url: `/TrialFileType/setAuthorizedView`,
method: 'post',
data
})
}
// 项目文档-新增/修改项目菜单
export function addOrUpdateTrialFileType(data) {
return request({
url: `/TrialFileType/addOrUpdateTrialFileType`,
method: 'post',
data
})
}
// 项目文档-删除项目菜单
export function deleteTrialFileType(id) {
return request({
url: `/TrialFileType/deleteTrialFileType/${id}`,
method: 'delete',
})
}
// 项目文档-报告/文档列表
export function getTrialFinalRecordList(data) {
return request({
url: `/TrialFinalRecord/getTrialFinalRecordList`,
method: 'post',
data
})
}
// 项目文档-报告/文档授权
export function authorizedTrialFinalRecord(data) {
return request({
url: `/TrialFinalRecord/authorizedTrialFinalRecord`,
method: 'post',
data
})
}
// 项目文档-报告/文档新增/修改
export function addOrUpdateTrialFinalRecord(data) {
return request({
url: `/TrialFinalRecord/addOrUpdateTrialFinalRecord`,
method: 'post',
data
})
}
// 项目文档-删除报告/文档
export function deleteTrialFinalRecord(id) {
return request({
url: `/TrialFinalRecord/deleteTrialFinalRecord/${id}`,
method: 'delete',
})
}
// 项目文档-一般文件记录列表
export function getTrialNormalRecordList(data) {
return request({
url: `/TrialNormalRecord/getTrialNormalRecordList`,
method: 'post',
data
})
}
// 项目文档-一般文件记录授权
export function authorizedTTrialNormalRecord(data) {
return request({
url: `/TrialNormalRecord/authorizedTTrialNormalRecord`,
method: 'post',
data
})
}
// 项目文档-一般文件记录批量新增
export function batchAddTrialNormalRecord(data) {
return request({
url: `/TrialNormalRecord/batchAddTrialNormalRecord`,
method: 'post',
data
})
}
// 项目文档-一般文件记录新增/修改
export function addOrUpdateTrialNormalRecord(data) {
return request({
url: `/TrialNormalRecord/addOrUpdateTrialNormalRecord`,
method: 'post',
data
})
}
// 项目文档-删除一般文件记录
export function deleteTrialNormalRecord(id) {
return request({
url: `/TrialNormalRecord/deleteTrialNormalRecord/${id}`,
method: 'delete',
})
}
// 项目文档-批量删除一般文件记录
export function deleteTrialNormalRecordList(data) {
return request({
url: `/TrialNormalRecord/deleteTrialNormalRecordList`,
method: 'post',
data
})
}
// 项目文档-培训记录列表
export function getTrialTrianingRecordList(data) {
return request({
url: `/TrialTrianingRecord/getTrialTrianingRecordList`,
method: 'post',
data
})
}
// 项目文档-培训记录新增/修改
export function addOrUpdateTrialTrianingRecord(data) {
return request({
url: `/TrialTrianingRecord/addOrUpdateTrialTrianingRecord`,
method: 'post',
data
})
}
// 项目文档-培训记录批量新增/修改
export function batchAddTrialTrianingRecord(data) {
return request({
url: `/TrialTrianingRecord/batchAddTrialTrianingRecord`,
method: 'post',
data
})
}
// 项目文档-删除培训记录
export function deleteTrialTrianingRecord(id) {
return request({
url: `/TrialTrianingRecord/deleteTrialTrianingRecord/${id}`,
method: 'delete',
})
}
// 项目文档-培训记录授权
export function authorizedTrialTrianingRecord(data) {
return request({
url: `/TrialTrianingRecord/authorizedTrialTrianingRecord`,
method: 'post',
data
})
}
// 项目文档-阅片人简历
export function getTrialDoctorList(data) {
return request({
url: `/DoctorList/getTrialDoctorList`,
method: 'post',
data
})
}
// 项目文档-上传同意入项记录
export function uploadTrialFileTypeFile(data) {
return request({
url: `/TrialFileType/uploadTrialFileTypeFile`,
method: 'post',
data
})
}
// 项目文档-获取上传同意入项记录
export function getTrialFileTypeFile(data) {
return request({
url: `/TrialFileType/getTrialFileTypeFile`,
method: 'post',
data
})
}
// 项目文档-删除上传同意入项记录
export function deleteTrialTypeFile(params) {
return request({
url: `/TrialFileType/deleteTrialTypeFile`,
method: 'post',
params
})
}
// 项目文档-获取资质材料列表
export function getTrialAttachments(data) {
return request({
url: `/Attachment/getTrialAttachments`,
method: 'post',
data
})
}
// 项目文档-修改资质材料稽查状态
export function setAuthorizedViewC(data) {
return request({
url: `/Attachment/setAuthorizedView`,
method: 'post',
data
})
}
// 项目文档-上传资质材料
export function saveTrialAttachments(data) {
return request({
url: `/Attachment/saveTrialAttachments`,
method: 'post',
data
})
}
// 项目文档-资质材料(获取医生列表)
export function getTrialDoctorListC(data) {
return request({
url: `/Attachment/getTrialDoctorList`,
method: 'post',
data
})
}
// 项目文档-修改资质材料
export function updateTrialAttachments(data) {
return request({
url: `/Attachment/updateTrialAttachments`,
method: 'post',
data
})
}
// 项目文档-删除资质材料
export function deleteAttachment(data) {
return request({
url: `/Attachment/deleteAttachment`,
method: 'post',
data
})
}
}
+5 -41
View File
@@ -1080,19 +1080,6 @@ export function setSeriesStatus(trialId, subjectVisitId, studyId, seriesId, stat
method: 'put'
})
}
export function setNodicomStudyState(params) {
return request({
url: `/QCOperation/setNodicomStudyState`,
method: 'put',
params
})
}
export function setInstanceStatus(trialId, subjectVisitId, seriesId, instanceId, state) {
return request({
url: `/QCOperation/setInstanceState/${trialId}/${subjectVisitId}/${seriesId}/${instanceId}/${state}`,
method: 'put'
})
}
export function getVisitQCStudyAndSeriesList(subjectVisitId) {
return request({
@@ -1378,9 +1365,9 @@ export function getForwardList(param) {
})
}
export function getNoneDicomStudyList(subjectVisitId, sudyId = '', isFilterZip = false, visitTaskId = '', IsReading = false) {
export function getNoneDicomStudyList(subjectVisitId, sudyId = '', isFilterZip = false, visitTaskId = '') {
return request({
url: `/NoneDicomStudy/getNoneDicomStudyList?subjectVisitId=${subjectVisitId}&nonedicomStudyId=${sudyId}&isFilterZip=${isFilterZip}&visitTaskId=${visitTaskId}&IsReading=${IsReading}`,
url: `/NoneDicomStudy/getNoneDicomStudyList?subjectVisitId=${subjectVisitId}&nonedicomStudyId=${sudyId}&isFilterZip=${isFilterZip}&visitTaskId=${visitTaskId}`,
method: 'get'
})
}
@@ -3946,6 +3933,8 @@ export function updateTrialUserRole(data) {
})
}
// 获取报表配置
export function getTrialQuestionExportResult(data) {
return request({
@@ -3969,29 +3958,4 @@ export function trialUserSendJoinEmail(data) {
method: 'post',
data
})
}
// 获取非Dicom标记
export function getNoneDicomMarkListOutDto(data) {
return request({
url: `/ReadingImageTask/getNoneDicomMarkListOutDto`,
method: 'post',
data
})
}
// 添加非Dicom标记
export function addNoneDicomMark(data) {
return request({
url: `/ReadingImageTask/addNoneDicomMark`,
method: 'post',
data
})
}
// 删除非Dicom标记
export function deleteTrialFileType(id) {
return request({
url: `/ReadingImageTask/deleteTrialFileType/${id}`,
method: 'post'
})
}
}
-8
View File
@@ -110,12 +110,4 @@ export function addOrUpdateTrialBodyPart(data) {
data
})
}
// 修改检查名称列表
export function updateTrialStudyNameList(data) {
return request({
url: `/TrialConfig/updateTrialStudyNameList`,
method: 'post',
data
})
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

+27 -28
View File
@@ -4,7 +4,6 @@
<el-col :span="24">
<div class="box">
<div class="box-body">
<slot name="title-container" />
<div class="search">
<slot name="search-container" />
</div>
@@ -25,42 +24,42 @@ export default {
props: {
noTitle: {
type: Boolean,
default: false,
},
default: false
}
},
computed: {
contentClass() {
return this.noTitle ? 'content-notitle' : 'content'
},
},
}
}
}
</script>
<style lang="scss">
.box-body {
padding: 0px;
background-color: #fff;
.el-card__body {
padding: 0px;
}
.search {
display: flex;
padding: 5px;
.box-body{
padding: 0px;
background-color: #fff;
.el-card__body {
padding: 0px;
}
.search{
display: flex;
padding: 5px;
.mr5 {
margin-right: 5px;
.mr5{
margin-right:5px;
}
.el-form-item{
margin-bottom: 10px;
}
}
.el-form-item {
margin-bottom: 10px;
.page{
text-align: right;
padding-top: 3px;
}
.el-button.is-circle {
padding: 9px;
font-weight: bold;
font-size: 14px;
}
}
.page {
text-align: right;
padding-top: 3px;
}
.el-button.is-circle {
padding: 9px;
font-weight: bold;
font-size: 14px;
}
}
</style>
+16 -17
View File
@@ -1,7 +1,7 @@
<!-- 搜索表单 -->
<template>
<div class="base-search-form">
<el-form :inline="true" :label-width="labelWidth">
<el-form :size="size" :inline="true" :label-width="labelWidth">
<el-form-item
v-for="item in searchForm"
:key="item.prop"
@@ -146,18 +146,17 @@
<!-- 具名slot -->
<slot v-if="item.type === 'Custom'" :name="item.slot" />
</el-form-item>
<div style="display: inline-block;width: fit-content;">
<el-form-item v-for="item in searchHandle" :key="item.label">
<slot v-if="item.slot" :name="item.slot" />
<el-button
v-else
:type="item.type"
:icon="item.icon || ''"
@click="handleClick(item.emitKey)"
>{{ item.label }}</el-button
>
</el-form-item>
</div>
<el-form-item v-for="item in searchHandle" :key="item.label">
<slot v-if="item.slot" :name="item.slot" />
<el-button
v-else
:type="item.type"
:size="item.size || size"
:icon="item.icon || ''"
@click="handleClick(item.emitKey)"
>{{ item.label }}</el-button
>
</el-form-item>
</el-form>
</div>
</template>
@@ -175,11 +174,11 @@ export default {
},
labelWidth: {
type: String,
default: '',
default: "",
},
size: {
type: String,
default: 'mini',
default: "mini",
},
searchForm: {
type: Array,
@@ -197,10 +196,10 @@ export default {
methods: {
handleClick(emitKey) {
// emit事件
this.$emit(`${emitKey}`)
this.$emit(`${emitKey}`);
},
},
}
};
</script>
<style lang="scss">
.base-search-form {
+1
View File
@@ -62,6 +62,7 @@
</a> -->
<span v-for="(operate, i) in column.operates" :key="i">
<el-button
:size="operate.size || 'mini'"
:type="operate.type || 'primary'"
v-if="
(operate.show && scope.row[operate.show]) ||
+16 -17
View File
@@ -90,7 +90,7 @@
custom-class="base-dialog-wrapper"
append-to-body
>
<dicom-tags :image-id="stack.imageIds[stack.currentImageIdIndex]" @close="dcmTag.visible = false" />
<DicomTags :image-id="stack.imageIds[stack.currentImageIdIndex]" @close="dcmTag.visible = false" />
</el-dialog>
</div>
</template>
@@ -217,10 +217,10 @@ export default {
this.stack.description = dicomSeries.description
this.toolState.viewportInvert = false
this.toolState.dicomInfoVisible = false
// var imageId = this.stack.imageIds[this.stack.currentImageIdIndex]
// var instanceId = imageId.split('/')[imageId.split('/').length - 1]
// instanceId = instanceId.split('.')[0]
// this.stack.instanceId = instanceId
var imageId = this.stack.imageIds[this.stack.currentImageIdIndex]
var instanceId = imageId.split('/')[imageId.split('/').length - 1]
instanceId = instanceId.split('.')[0]
this.stack.instanceId = instanceId
this.toolState.clipPlaying = false
const element = this.$refs.canvas
cornerstone.enable(element)
@@ -346,9 +346,9 @@ export default {
// return
// }
// this.stack.instanceId = image.imageId.split('/')[image.imageId.split('/').length - 1]
// var instanceId = image.imageId.split('/')[image.imageId.split('/').length - 1]
// instanceId = instanceId.split('.')[0]
// this.stack.instanceId = instanceId
var instanceId = image.imageId.split('/')[image.imageId.split('/').length - 1]
instanceId = instanceId.split('.')[0]
this.stack.instanceId = instanceId
this.height = (this.stack.currentImageIdIndex) * 100 / (this.stack.imageIds.length - 1)
this.resetWwwc()
},
@@ -415,16 +415,15 @@ export default {
},
onImageRendered(e) {
// var imageId = e.detail.image.imageId
// var instanceId = imageId.split('/')[imageId.split('/').length - 1]
// instanceId = instanceId.split('.')[0]
var imageId = e.detail.image.imageId
var instanceId = imageId.split('/')[imageId.split('/').length - 1]
instanceId = instanceId.split('.')[0]
// if (this.imageId !== instanceId) {
// this.getOrientationMarker(e.detail.element)
// this.imageId = instanceId
// }
this.getOrientationMarker(e.detail.element)
// this.stack.instanceId = instanceId
if (this.imageId !== instanceId) {
this.getOrientationMarker(e.detail.element)
this.imageId = instanceId
}
this.stack.instanceId = instanceId
var viewport = e.detail.viewport
this.dicomInfo.wwwc = `${Math.round(
viewport.voi.windowWidth
-1
View File
@@ -149,7 +149,6 @@ export default {
return isShow
},
goBack() {
zzSessionStorage.removeItem('lastWorkbench')
this.$router.push({ path: '/trials/trials-list' })
},
selectTrials(v) {
@@ -193,7 +193,7 @@
</el-col>
<!-- eslint-disable vue/no-use-v-if-with-v-for -->
<!-- eslint-disable vue/valid-v-for -->
<el-col v-for="(item) in question.Childrens" :key="item.Id" v-if="question.Childrens && question.Childrens.length>0 && question.ClinicalQuestionType !== 'table'" :span="['group', 'summary', 'table'].includes(item.ClinicalQuestionType) || item.Childrens.length > 0 ? 24 : 12">
<el-col v-for="(item) in question.Childrens" v-if="question.Childrens && question.Childrens.length>0 && question.ClinicalQuestionType !== 'table'" :span="['group', 'summary', 'table'].includes(item.ClinicalQuestionType) || item.Childrens.length > 0 ? 24 : 12">
<QuestionFormItem
:key="item.Id"
:question="item"
@@ -593,7 +593,7 @@ export default {
<style lang="scss" scoped>
.my_dialog{
.criterion-form-item{
::v-deep .el-form-item__content{
>>>.el-form-item__content{
width: auto;
}
}
@@ -614,7 +614,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
::v-deep .el-upload--picture-card {
>>>.el-upload--picture-card {
display: none;
}
}
@@ -222,7 +222,7 @@ export default {
<style lang="scss" scoped>
.my_dialog{
.criterion-form-item{
::v-deep .el-form-item__content{
>>>.el-form-item__content{
width: auto;
}
}
@@ -233,7 +233,7 @@ export default {
flex-direction: row;
align-items: flex-start;
}
::v-deep .el-form-item__content{
>>>.el-form-item__content{
width: 500px;
}
.el-input{
@@ -243,7 +243,7 @@ export default {
margin-bottom: 0px;
}
.disabled{
::v-deep .el-upload--picture-card {
>>>.el-upload--picture-card {
display: none;
}
}
+2 -3
View File
@@ -92,7 +92,6 @@ export default {
try {
if (!this.form.userRoleId)
return this.$message.warning(this.$t('toggleRole:ruleMessage:select'))
zzSessionStorage.removeItem('lastWorkbench')
this.$emit('save', this.form.userRoleId)
} catch (err) {
console.log(err)
@@ -112,11 +111,11 @@ export default {
margin: auto;
}
::v-deep .el-radio__original {
/deep/ .el-radio__original {
display: none !important; /* 隐藏原生 radio 输入,但仍然允许交互 */
}
::v-deep.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled)
/deep/.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled)
.el-radio__inner {
box-shadow: none !important;
}
@@ -316,9 +316,9 @@
scope.row.dicomInfo.fileCount
}}
({{
(scope.row.dicomInfo.uploadFileSize / 1024 / 1024).toFixed(3)
(scope.row.dicomInfo.uploadFileSize / 1024 / 1024).toFixed(2)
}}MB/{{
(scope.row.dicomInfo.fileSize / 1024 / 1024).toFixed(3)
(scope.row.dicomInfo.fileSize / 1024 / 1024).toFixed(2)
}}MB)
</span>
</template>
@@ -1308,7 +1308,7 @@ export default {
o.imageColumns,
o.imageRows
)
let thumbnailPath = `/${params.trialId}/Image/${params.subjectId}/${params.subjectVisitId}/${dicomInfo.visitTaskId}/${dicomInfo.studyUid}/${v.seriesUid}.jpg`
let thumbnailPath = `/${params.trialId}/Image/${params.subjectId}/${params.subjectVisitId}/${dicomInfo.visitTaskId}/${dicomInfo.studyUid}/${v.seriesUid}.png`
let OSSclient = scope.OSSclient
let seriesRes = await OSSclient.put(
thumbnailPath,
@@ -1421,7 +1421,7 @@ export default {
v.instanceList[0].imageColumns,
v.instanceList[0].imageRows
)
let thumbnailPath = `/${params.trialId}/Image/${params.subjectId}/${params.subjectVisitId}/${dicomInfo.studyUid}/${v.seriesUid}.jpg`
let thumbnailPath = `/${params.trialId}/Image/${params.trialSiteId}/${params.subjectId}/${params.subjectVisitId}/${dicomInfo.studyUid}/${v.seriesUid}.png`
let OSSclient = scope.OSSclient
try {
let seriesRes = await OSSclient.put(thumbnailPath, blob)
@@ -1499,8 +1499,8 @@ export default {
return new Promise((resolve) => {
cornerstone.loadImage(imageId).then(async (image) => {
let canvas = document.createElement('canvas')
canvas.width = (width * 60) / height
canvas.height = 60
canvas.width = width
canvas.height = height
if (image) {
cornerstone.renderToCanvas(canvas, image)
// 将 Canvas 图像对象转换为 PNG 格式
@@ -66,7 +66,7 @@
<template slot-scope="scope">
<span>{{
scope.row.FileSize && scope.row.FileSize > 0
? `${(scope.row.FileSize / 1024 / 1024).toFixed(3)}MB`
? `${(scope.row.FileSize / 1024 / 1024).toFixed(2)}MB`
: ''
}}</span>
</template>
@@ -138,7 +138,7 @@
<template slot-scope="scope">
<span>{{
scope.row.FileSize && scope.row.FileSize > 0
? `${(scope.row.FileSize / 1024 / 1024).toFixed(3)}MB`
? `${(scope.row.FileSize / 1024 / 1024).toFixed(2)}MB`
: ''
}}</span>
</template>
@@ -320,7 +320,7 @@
<template slot-scope="scope">
<span>{{
scope.row.size && scope.row.size > 0
? `${(scope.row.size / 1024 / 1024).toFixed(3)}MB`
? `${(scope.row.size / 1024 / 1024).toFixed(2)}MB`
: ''
}}</span>
</template>
@@ -567,7 +567,7 @@ export default {
for (let i = 0; i < arr.length; i++) {
let dicom = arr[i];
if (dicom.StudyInstanceUid !== StudyInstanceUid) continue;
let thumbnailPath = `/${dicom.params.TrialId}/TaskImage/${dicom.params.SubjectId}/${dicom.params.VisitTaskId}/${dicom.StudyInstanceUid}/${dicom.SeriesInstanceUid}.jpg`;
let thumbnailPath = `/${dicom.params.TrialId}/TaskImage/${dicom.params.SubjectId}/${dicom.params.VisitTaskId}/${dicom.StudyInstanceUid}/${dicom.SeriesInstanceUid}.png`;
if (!studyObj[dicom.StudyId]) {
studyObj[dicom.StudyId] = {
StudyId: dicom.StudyId,
+1 -1
View File
@@ -22,7 +22,7 @@
import { mapGetters } from 'vuex'
import Logo from './Logo'
import SidebarItem from './SidebarItem'
import variables from '@/styles/variables.module.scss'
import variables from '@/styles/variables.scss'
export default {
components: { SidebarItem, Logo },
@@ -73,7 +73,7 @@ export default {
position: relative;
overflow: hidden;
width: 100%;
::v-deep {
/deep/ {
.el-scrollbar__bar {
bottom: 0px;
}
+1 -1
View File
@@ -57,7 +57,7 @@ export default {
<style lang="scss" scoped>
@import "~@/styles/mixin.scss";
@import "~@/styles/variables.module.scss";
@import "~@/styles/variables.scss";
.app-wrapper {
@include clearfix;
+3 -3
View File
@@ -174,7 +174,7 @@ var _vm
async function VueInit() {
var params
var res
if (~window.location.href.indexOf('/readingDicoms') || ~window.location.href.indexOf('/noneDicomReading') || ~window.location.href.indexOf('/criterionquestions') || ~window.location.href.indexOf('/petct') || ~window.location.href.indexOf('/fusion')) {
if (~window.location.href.indexOf('/readingDicoms') || ~window.location.href.indexOf('/noneDicomReading') || ~window.location.href.indexOf('/criterionquestions') || ~window.location.href.indexOf('/petct')) {
params = $q('TrialReadingCriterionId')
res = await getBasicDataAllSelect(params)
} else if (~window.location.href.indexOf('/ecrfPreview')) {
@@ -461,8 +461,8 @@ async function VueInit() {
var my_username = zzSessionStorage.getItem('my_username')
var my_password = zzSessionStorage.getItem('my_password')
let my_userid = zzSessionStorage.getItem('userId')
let my_EMail = zzSessionStorage.getItem('my_EMail') || ''
if (md5(_vm.unlock.my_password) === my_password && (my_username === _vm.unlock.my_username || my_EMail.toUpperCase() === vm.unlock.my_username.toUpperCase())) {
let my_EMail = zzSessionStorage.getItem('my_EMail')
if (md5(_vm.unlock.my_password) === my_password && my_username === _vm.unlock.my_username) {
resetReadingRestTime().then(() => {
})
const closeLock = (_vm) => {
+14 -14
View File
@@ -7,15 +7,15 @@ import 'nprogress/nprogress.css'
import { getToken, removeToken } from '@/utils/auth'
import Vue from 'vue'
import { OSSclient } from './utils/oss'
import WHITELIST from './utils/whiteList'
import WHITELIST from "./utils/whiteList"
import { getTrialExtralConfig } from '@/api/trials'
// import getPageTitle from '@/utils/get-page-title'
NProgress.configure({ showSpinner: false })
const whiteList = WHITELIST
store.state.trials.whiteList = whiteList
router.beforeEach(async(to, from, next) => {
store.state.trials.whiteList = whiteList;
router.beforeEach(async (to, from, next) => {
NProgress.start()
// 设置页面标题
// document.title = getPageTitle(to.meta.title) store.state.trials.whiteList.indexOf(to.path) === -1
@@ -27,13 +27,13 @@ router.beforeEach(async(to, from, next) => {
to.query.trialId !==
store.state.trials.config.trialId
) {
const res = await getTrialExtralConfig({
TrialId: to.query.trialId
let res = await getTrialExtralConfig({
TrialId: to.query.trialId,
})
if (res.IsSuccess) {
store.dispatch('trials/setConfig', {
trialId: to.query.trialId,
...res.Result
...res.Result,
})
}
}
@@ -45,13 +45,13 @@ router.beforeEach(async(to, from, next) => {
to.query.trialId !==
store.state.trials.config.trialId
) {
const res = await getTrialExtralConfig({
TrialId: to.query.trialId
let res = await getTrialExtralConfig({
TrialId: to.query.trialId,
})
if (res.IsSuccess) {
store.dispatch('trials/setConfig', {
trialId: to.query.trialId,
...res.Result
...res.Result,
})
}
}
@@ -72,12 +72,12 @@ router.beforeEach(async(to, from, next) => {
NProgress.done()
} else if (from.path === '/researchForm') {
removeToken()
const lang = to.query.lang || zzSessionStorage.getItem('lang')
let lang = to.query.lang || zzSessionStorage.getItem('lang')
next(`/researchLogin?trialId=${to.query.trialId}&lang=${lang}`)
NProgress.done()
} else if (from.path === '/researchDetail_m') {
removeToken()
const lang = to.query.lang || zzSessionStorage.getItem('lang')
let lang = to.query.lang || zzSessionStorage.getItem('lang')
next(`/researchLogin_m?trialId=${to.query.trialId}&lang=${lang}`)
NProgress.done()
} else {
@@ -107,7 +107,7 @@ router.beforeEach(async(to, from, next) => {
/* has no token*/
if (whiteList.indexOf(to.path) !== -1) {
if (to.path === '/researchLogin') {
const lang = to.query.lang || zzSessionStorage.getItem('lang')
let lang = to.query.lang || zzSessionStorage.getItem('lang')
const flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)
if (flag) {
next(`/researchLogin_m?trialId=${to.query.trialId}&lang=${lang}`)
@@ -123,11 +123,11 @@ router.beforeEach(async(to, from, next) => {
}
} else {
if (to.path === '/researchForm') {
const lang = to.query.lang || zzSessionStorage.getItem('lang')
let lang = to.query.lang || zzSessionStorage.getItem('lang')
next(`/researchLogin?trialId=${to.query.trialId}&lang=${lang}`)
NProgress.done()
} else if (to.path === '/researchDetail_m') {
const lang = to.query.lang || zzSessionStorage.getItem('lang')
let lang = to.query.lang || zzSessionStorage.getItem('lang')
next(`/researchLogin_m?trialId=${to.query.trialId}&lang=${lang}`)
NProgress.done()
} else if (to.path === '/ReviewersResearchForm') {
-11
View File
@@ -50,11 +50,6 @@ 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'),
@@ -144,12 +139,6 @@ export const constantRoutes = [
hidden: true,
component: () => import('@/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt')
},
{
path: '/fusion',
name: 'fusion',
hidden: true,
component: () => import('@/views/trials/trials-panel/reading/dicoms/components/Fusion/demo/index')
},
{
path: '/historyScreenshot',
+1 -1
View File
@@ -1,7 +1,7 @@
// eslint-disable-next-line no-undef
module.exports = {
title: 'IRC Imaging System',
title: 'IRCIS',
/**
* @type {boolean} true | false
+1 -3
View File
@@ -48,8 +48,6 @@ const getters = {
TotalNeedSignSystemDocCount: state => state.user.TotalNeedSignSystemDocCount,
TotalNeedSignTrialDocCount: state => state.user.TotalNeedSignTrialDocCount,
IsFirstSysDocNeedSign: state => state.user.IsFirstSysDocNeedSign,
TrialStatusStr: state => state.user.TrialStatusStr,
lastViewportTaskId: state => state.noneDicomReview.lastViewportTaskId,
currentTaskState: state => state.noneDicomReview.currentTaskState
TrialStatusStr: state => state.user.TrialStatusStr
}
export default getters
+2 -3
View File
@@ -12,7 +12,7 @@ import trials from './modules/trials'
import financials from './modules/financials'
import reading from './modules/reading'
import lang from './modules/lang'
import noneDicomReview from './modules/noneDicomReview'
Vue.use(Vuex)
const store = new Vuex.Store({
@@ -27,8 +27,7 @@ const store = new Vuex.Store({
trials,
financials,
reading,
lang,
noneDicomReview
lang
},
getters
})
-28
View File
@@ -1,28 +0,0 @@
const getDefaultState = () => {
return {
lastViewportTaskId: null,
currentTaskState: 0
}
}
const state = getDefaultState
const mutations = {
}
const actions = {
setLastViewportTaskId({ state }, id) {
state.lastViewportTaskId = id
},
setCurrentTaskState({ state }, taskState) {
state.currentTaskState = taskState
}
}
export default {
namespaced: true,
state,
mutations,
actions
}
-1
View File
@@ -862,7 +862,6 @@ const actions = {
const data = {}
data.StudyId = study.StudyId
data.StudyCode = study.StudyCode
data.StudyName = study.StudyName
data.Modalities = study.Modalities
data.SeriesCount = study.SeriesCount
data.InstanceCount = study.InstanceCount
+1 -1
View File
@@ -1,4 +1,4 @@
@import "./variables.module.scss";
@import "./variables.scss";
@import "./mixin.scss";
@import "./transition.scss";
@import "./element-ui.scss";
+4 -24
View File
@@ -71,49 +71,29 @@ $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;
}
.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 {
& .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;
}
}
// &.nest-menu .el-submenu>.el-submenu__title,
// &.el-submenu .el-menu-item {
// min-width: $sideBarWidth !important;
// background-color: $subMenuBg !important;
// &:hover {
// background-color: $subMenuHover !important;
// }
// }
}
.hideSidebar {
+1 -1
View File
@@ -1,6 +1,6 @@
import defaultSettings from '@/settings'
const title = defaultSettings.title || 'IRC Imaging System'
const title = defaultSettings.title || 'IRCIS'
export default function getPageTitle(pageTitle) {
if (pageTitle) {
+7 -39
View File
@@ -34,7 +34,7 @@ export function parseTime(time, cFormat) {
const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
const value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] }
return value.toString().padStart(2, '0')
})
return time_str
@@ -51,44 +51,12 @@ export function param2Obj(url) {
}
return JSON.parse(
'{"' +
decodeURIComponent(search)
.replace(/"/g, '\\"')
.replace(/&/g, '","')
.replace(/=/g, '":"')
.replace(/\+/g, ' ') +
'"}'
decodeURIComponent(search)
.replace(/"/g, '\\"')
.replace(/&/g, '","')
.replace(/=/g, '":"')
.replace(/\+/g, ' ') +
'"}'
)
}
export function deepClone(source, map = new WeakMap()) {
// 处理基本类型和函数(直接返回)
if (typeof source !== 'object' || source === null) {
return source;
}
// 处理循环引用
if (map.has(source)) {
return map.get(source);
}
// 创建新容器
const target = Array.isArray(source) ? [] : {};
map.set(source, target); // 记录克隆关系
// 克隆普通键值
for (const key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = deepClone(source[key], map);
}
}
// 克隆Symbol键值(ES6+
const symbolKeys = Object.getOwnPropertySymbols(source);
for (const symKey of symbolKeys) {
if (source.propertyIsEnumerable(symKey)) {
target[symKey] = deepClone(source[symKey], map);
}
}
return target;
}
-149
View File
@@ -39,108 +39,6 @@ function getNumberValues(dataSet, tag, minimumLength) {
return values;
}
function getLutDescriptor(dataSet, tag) {
if (!dataSet.elements[tag] || dataSet.elements[tag].length !== 6) {
return;
}
return [
dataSet.uint16(tag, 0),
dataSet.uint16(tag, 1),
dataSet.uint16(tag, 2),
];
}
function getLutData(lutDataSet, tag, lutDescriptor) {
const lut = [];
const lutData = lutDataSet.elements[tag];
for (let i = 0; i < lutDescriptor[0]; i++) {
// Output range is always unsigned
if (lutDescriptor[2] === 16) {
lut[i] = lutDataSet.uint16(tag, i);
} else {
lut[i] = lutDataSet.byteArray[i + lutData.dataOffset];
}
}
return lut;
}
function populateSmallestLargestPixelValues(dataSet, imagePixelModule) {
const pixelRepresentation = dataSet.uint16('x00280103');
if (pixelRepresentation === 0) {
imagePixelModule.smallestPixelValue = dataSet.uint16('x00280106');
imagePixelModule.largestPixelValue = dataSet.uint16('x00280107');
} else {
imagePixelModule.smallestPixelValue = dataSet.int16('x00280106');
imagePixelModule.largestPixelValue = dataSet.int16('x00280107');
}
imagePixelModule.largestPixelValue = imagePixelModule.largestPixelValue === 0 ? undefined : imagePixelModule.largestPixelValue;
}
function populatePaletteColorLut(dataSet, imagePixelModule) {
imagePixelModule.redPaletteColorLookupTableDescriptor = getLutDescriptor(
dataSet,
'x00281101'
);
imagePixelModule.greenPaletteColorLookupTableDescriptor = getLutDescriptor(
dataSet,
'x00281102'
);
imagePixelModule.bluePaletteColorLookupTableDescriptor = getLutDescriptor(
dataSet,
'x00281103'
);
// The first Palette Color Lookup Table Descriptor value is the number of entries in the lookup table.
// When the number of table entries is equal to 2ˆ16 then this value shall be 0.
// See http://dicom.nema.org/MEDICAL/DICOM/current/output/chtml/part03/sect_C.7.6.3.html#sect_C.7.6.3.1.5
if (imagePixelModule.redPaletteColorLookupTableDescriptor[0] === 0) {
imagePixelModule.redPaletteColorLookupTableDescriptor[0] = 65536;
imagePixelModule.greenPaletteColorLookupTableDescriptor[0] = 65536;
imagePixelModule.bluePaletteColorLookupTableDescriptor[0] = 65536;
}
// The third Palette Color Lookup Table Descriptor value specifies the number of bits for each entry in the Lookup Table Data.
// It shall take the value of 8 or 16.
// The LUT Data shall be stored in a format equivalent to 8 bits allocated when the number of bits for each entry is 8, and 16 bits allocated when the number of bits for each entry is 16, where in both cases the high bit is equal to bits allocated-1.
// The third value shall be identical for each of the Red, Green and Blue Palette Color Lookup Table Descriptors.
//
// Note: Some implementations have encoded 8 bit entries with 16 bits allocated, padding the high bits;
// this can be detected by comparing the number of entries specified in the LUT Descriptor with the actual value length of the LUT Data entry.
// The value length in bytes should equal the number of entries if bits allocated is 8, and be twice as long if bits allocated is 16.
const numLutEntries =
imagePixelModule.redPaletteColorLookupTableDescriptor[0];
const lutData = dataSet.elements.x00281201;
const lutBitsAllocated = lutData.length === numLutEntries ? 8 : 16;
// If the descriptors do not appear to have the correct values, correct them
if (
imagePixelModule.redPaletteColorLookupTableDescriptor[2] !==
lutBitsAllocated
) {
imagePixelModule.redPaletteColorLookupTableDescriptor[2] = lutBitsAllocated;
imagePixelModule.greenPaletteColorLookupTableDescriptor[2] =
lutBitsAllocated;
imagePixelModule.bluePaletteColorLookupTableDescriptor[2] =
lutBitsAllocated;
}
imagePixelModule.redPaletteColorLookupTableData = getLutData(
dataSet,
'x00281201',
imagePixelModule.redPaletteColorLookupTableDescriptor
);
imagePixelModule.greenPaletteColorLookupTableData = getLutData(
dataSet,
'x00281202',
imagePixelModule.greenPaletteColorLookupTableDescriptor
);
imagePixelModule.bluePaletteColorLookupTableData = getLutData(
dataSet,
'x00281203',
imagePixelModule.bluePaletteColorLookupTableDescriptor
);
}
function metaDataProvider(type, imageId) {
const parsedImageId = parseImageId(imageId);
const dataSet = cornerstoneWADOImageLoader.wadouri.dataSetCacheManager.get(parsedImageId.url);
@@ -201,52 +99,5 @@ function metaDataProvider(type, imageId) {
columnPixelSpacing,
};
}
if (type === 'imagePixelModule') {
const imagePixelModule = {
samplesPerPixel: dataSet.uint16('x00280002'),
photometricInterpretation: dataSet.string('x00280004'),
rows: dataSet.uint16('x00280010'),
columns: dataSet.uint16('x00280011'),
bitsAllocated: dataSet.uint16('x00280100'),
bitsStored: dataSet.uint16('x00280101'),
highBit: dataSet.uint16('x00280102'),
pixelRepresentation: dataSet.uint16('x00280103'),
planarConfiguration: dataSet.uint16('x00280006'),
pixelAspectRatio: dataSet.string('x00280034'),
};
populateSmallestLargestPixelValues(dataSet, imagePixelModule);
if (
imagePixelModule.photometricInterpretation === 'PALETTE COLOR' &&
dataSet.elements.x00281101
) {
populatePaletteColorLut(dataSet, imagePixelModule);
}
return imagePixelModule;
}
// if (type === 'imagePixelModule') {
// return {
// samplesPerPixel: dataSet.uint16('x00280002'),
// photometricInterpretation: dataSet.string('x00280004'),
// rows: dataSet.uint16('x00280010'),
// columns: dataSet.uint16('x00280011'),
// bitsAllocated: dataSet.uint16('x00280100'),
// bitsStored: dataSet.uint16('x00280101'),
// highBit: dataSet.uint16('x00280102'),
// pixelRepresentation: dataSet.uint16('x00280103'),
// planarConfiguration: dataSet.uint16('x00280006'),
// pixelAspectRatio: dataSet.uint16('x00280034'),
// smallestPixelValue: null,
// largestPixelValue: null,
// // smallestPixelValue: dataSet.uint16('x00280106'),
// // largestPixelValue: dataSet.uint16('x00280107'),
// redPaletteColorLookupTableDescriptor: dataSet.string('x00281101'),
// greenPaletteColorLookupTableDescriptor: dataSet.string('x00281102'),
// bluePaletteColorLookupTableDescriptor: dataSet.string('x00281103'),
// redPaletteColorLookupTableData: dataSet.string('x00281201'),
// greenPaletteColorLookupTableData: dataSet.string('x00281202'),
// bluePaletteColorLookupTableData: dataSet.string('x00281203')
// }
// }
}
export default metaDataProvider;
+1 -1
View File
@@ -445,7 +445,7 @@ function setTimer() {
totalBytes = totalBytes / 1024;
unit = "MB/s";
}
store.state.trials.uploadTip = totalBytes.toFixed(3) + unit;
store.state.trials.uploadTip = totalBytes.toFixed(2) + unit;
}
if (timeList.length >= 5) {
delete bytesReceivedPerSecond[timeList[0]]
+1 -1
View File
@@ -150,7 +150,7 @@ function setTimer() {
totalBytes = totalBytes / 1024;
unit = "MB/s";
}
store.state.trials.uploadTip = totalBytes.toFixed(3) + unit;
store.state.trials.uploadTip = totalBytes.toFixed(2) + unit;
}
if (timeList.length >= 5) {
delete bytesReceivedPerSecond[timeList[0]]
+3 -21
View File
@@ -41,13 +41,7 @@ async function ossGenerateSTS() {
let _vm = router.default.app
if (_vm._route.path !== '/trials/trials-panel/visit/crc-upload') {
var objectItem = objectName.split('/')
// objectItem[objectItem.length - 1] = new Date().getTime() + '_' + objectItem[objectItem.length - 1]
objectItem[objectItem.length - 1] = `${objectItem[objectItem.length - 1].substring(
0,
objectItem[objectItem.length - 1].lastIndexOf('.')
)}__${new Date().getTime()}${objectItem[objectItem.length - 1].substring(
objectItem[objectItem.length - 1].lastIndexOf('.')
).toLocaleLowerCase()}`
objectItem[objectItem.length - 1] = new Date().getTime() + '_' + objectItem[objectItem.length - 1]
objectName = objectItem.join('/')
}
let res = await OSSclient.put(objectName, object)
@@ -84,13 +78,7 @@ async function ossGenerateSTS() {
let _vm = router.default.app
if (_vm._route.path !== '/trials/trials-panel/visit/crc-upload') {
var objectItem = data.path.split('/')
// objectItem[objectItem.length - 1] = new Date().getTime() + '_' + objectItem[objectItem.length - 1]
objectItem[objectItem.length - 1] = `${objectItem[objectItem.length - 1].substring(
0,
objectItem[objectItem.length - 1].lastIndexOf('.')
)}__${new Date().getTime()}${objectItem[objectItem.length - 1].substring(
objectItem[objectItem.length - 1].lastIndexOf('.')
).toLocaleLowerCase()}`
objectItem[objectItem.length - 1] = new Date().getTime() + '_' + objectItem[objectItem.length - 1]
data.path = objectItem.join('/')
}
let res = await customerHttp(OSSclient, data, progress);
@@ -197,13 +185,7 @@ function uploadAWS(aws, data, progress) {
let _vm = router.default.app
if (_vm._route.path !== '/trials/trials-panel/visit/crc-upload') {
var objectItem = data.path.split('/')
// objectItem[objectItem.length - 1] = new Date().getTime() + '_' + objectItem[objectItem.length - 1]
objectItem[objectItem.length - 1] = `${objectItem[objectItem.length - 1].substring(
0,
objectItem[objectItem.length - 1].lastIndexOf('.')
)}__${new Date().getTime()}${objectItem[objectItem.length - 1].substring(
objectItem[objectItem.length - 1].lastIndexOf('.')
).toLocaleLowerCase()}`
objectItem[objectItem.length - 1] = new Date().getTime() + '_' + objectItem[objectItem.length - 1]
data.path = objectItem.join('/')
}
let bucketName = data.path.split("/")[1] || Vue.prototype.OSSclientConfig.bucket
+2 -2
View File
@@ -189,8 +189,8 @@ const dicomToPng = (imageId, width, height) => {
return new Promise((resolve) => {
cornerstone.loadImage(imageId).then(async (image) => {
let canvas = document.createElement("canvas");
canvas.width = (width * 60) / height
canvas.height = 60
canvas.width = width;
canvas.height = height;
if (image) {
cornerstone.renderToCanvas(canvas, image);
// 将 Canvas 图像对象转换为 PNG 格式
-1
View File
@@ -9,7 +9,6 @@ const ROUTER = require('@/router');
axios.defaults.withCredentials = false
const service = axios.create({
baseURL: '/api',
// baseURL: process.env.NODE_ENV === 'prod' ? "https://api.irc.extimaging.com" : '/api',
timeout: 2 * 360000, // request timeout
withCredentials: false
})
+2 -2
View File
@@ -20,7 +20,7 @@ function zipFiles(zipName, files) {
ctrl.close();
} else {
let { name, url } = fileInfo.value;
// url = decodeUtf8(url); // 待定,可能做过特殊处理
url = decodeUtf8(url);
return fetch(url).then(res => {
ctrl.enqueue({
name,
@@ -58,7 +58,7 @@ async function updateFile(file, name) {
try {
store.dispatch('trials/setUnLock', true)
const fileOutputStream = streamSaver.createWriteStream(name);
// file = decodeUtf8(file);
file = decodeUtf8(file);
let res = await fetch(file);
res.body.pipeTo(fileOutputStream).then(() => {
store.dispatch('trials/setUnLock', true)
+1 -1
View File
@@ -17,7 +17,7 @@
</el-form-item>
<el-form-item label="是否内部角色: " prop="IsInternal">
<el-radio-group v-model="form.IsInternal">
<el-radio v-for="item of $d.YesOrNo" :key="`IsInternal${item.value}`" :label="item.value">{{ item.label }}</el-radio>
<el-radio v-for="item of $d.YesOrNo" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
+1 -1
View File
@@ -27,7 +27,7 @@ export default {
}
</script>
<style lang="scss" scoped>
::v-deep .el-collapse-item__header{
/deep/ .el-collapse-item__header{
background-color: #e9eef1;
padding: 0 10px;
}
+1 -1
View File
@@ -195,7 +195,7 @@ export default {
}
</script>
<style lang="scss" scoped>
::v-deep .el-collapse-item__header{
/deep/ .el-collapse-item__header{
background-color: #e9eef1;
padding: 0 10px;
}
+121 -235
View File
@@ -1,5 +1,5 @@
<template>
<div ref="preview-wrapper" class="preview-wrapper">
<div ref="preview-wrapper">
<div class="viewerContainer">
<div class="viewerContentWrapper" style="padding-top:25px;">
<div class="viewerLeftSidePanel">
@@ -38,39 +38,7 @@
</span>
</span>-->
<div class="viewernavitextwrapper">
<div style="padding: 1px 5px 1px 1px;display: flex;justify-content: space-between;">
<div style="padding: 1px;">#{{ item.seriesNumber }}</div>
<div v-if="item.isExistMutiFrames && item.instanceCount > 1">
<el-popover
v-model="item.isShowPopper"
placement="right-start"
trigger="manual"
popper-class="instance_frame_wrapper"
>
<div style="text-align: right;">
<i class="el-icon-circle-close" style="font-size: 20px;cursor: pointer;color:#ddd;" @click="item.isShowPopper = false" />
</div>
<div class="frame_list">
<div
v-for="(instance, idx) in item.instanceInfoList"
:key="instance.InstanceUid"
class="frame_content"
:style="{'margin-bottom':idx<item.instanceInfoList.length-1? '5px':'0px'}"
@click="showMultiFrames(item, index, instance)"
>
<div>
<div>{{ instance.InstanceNumber }}</div>
<div>
{{ `${instance.NumberOfFrames > 0 ? instance.NumberOfFrames : 1} frame` }}
</div>
</div>
</div>
</div>
<i slot="reference" class="el-icon-connection" style="font-size: 15px;cursor: pointer;" @click="popperClick(seriesList, item)" />
</el-popover>
</div>
</div>
<div style="padding: 1px;">#{{ item.seriesNumber }}</div>
<div style="padding: 1px;">{{ item.description }}</div>
<div
v-show="item.instanceCount"
@@ -179,11 +147,7 @@ export default {
})
var imageIds = []
let isExistMutiFrames = false
let instanceInfoList = []
series.instanceList.forEach(function(instance) {
console.log(instance)
let instanceInfo = {}
var fileId = cornerstoneWADOImageLoader.wadouri.fileManager.add(
instance.file
)
@@ -191,19 +155,7 @@ export default {
for (var i = 0; i < instance.frameCount; ++i) {
imageIds.push(`${fileId}?frame=${i}`)
}
isExistMutiFrames = true
instanceInfo.NumberOfFrames = instance.frameCount
instanceInfo.InstanceNumber = instance.instanceNumber
instanceInfo.InstanceUid = instance.instanceUid
instanceInfo.FileId = fileId
} else {
imageIds.push(fileId)
instanceInfo.NumberOfFrames = 0
instanceInfo.InstanceNumber = instance.instanceNumber
instanceInfo.InstanceUid = instance.instanceUid
instanceInfo.FileId = fileId
}
instanceInfoList.push(instanceInfo)
} else imageIds.push(fileId)
})
scope.seriesList.push({
@@ -212,43 +164,13 @@ export default {
modality: series.modality,
instanceCount: series.instanceList.length,
imageIds: imageIds,
previewImageId: imageIds[0],
isExistMutiFrames: isExistMutiFrames,
instanceInfoList: instanceInfoList,
isShowPopper: false
previewImageId: imageIds[0]
})
})
this.showSeriesImage(0)
},
popperClick(seriesList, series) {
for (let i = 0; i < seriesList.length; i++) {
if (seriesList[i].isShowPopper) {
seriesList[i].isShowPopper = false
}
}
series.isShowPopper = !series.isShowPopper
},
showMultiFrames(series, seriesIndex, instanceInfo) {
this.currentSeriesIndex = seriesIndex
const imageIds = []
if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1) {
for (let j = 0; j < instanceInfo.NumberOfFrames; j++) {
imageIds.push(`${instanceInfo.FileId}?frame=${j}`)
}
} else {
imageIds.push(instanceInfo.FileId)
}
const seriesInfo = {
seriesNumber: series.seriesNumber,
description: series.description,
modality: series.modality,
instanceCount: series.instanceCount,
imageIds: imageIds,
previewImageId: imageIds[0],
}
this.$refs.dicomViewer.loadImageStack(seriesInfo)
},
showSeriesImage(seriesIndex) {
// if (seriesIndex === this.currentSeriesIndex) return;
this.currentSeriesIndex = seriesIndex
@@ -261,172 +183,136 @@ export default {
}
</script>
<style lang="scss">
::-webkit-scrollbar {
width: 7px;
height: 7px;
}
<style scoped>
::-webkit-scrollbar {
width: 7px;
height: 7px;
}
::-webkit-scrollbar-thumb {
border-radius: 10px;
background: #d0d0d0;
}
::-webkit-scrollbar-thumb {
border-radius: 10px;
background: #d0d0d0;
}
.viewerContainer {
width: 100%;
display: block;
height: 100%;
margin-top: 20px;
margin-left: auto;
margin-right: auto;
background-color: #444;
overflow: hidden;
}
.viewerContainer {
display: block;
height: 100%;
margin-top: 20px;
margin-left: auto;
margin-right: auto;
background-color: #444;
overflow: hidden;
}
.viewerBanner {
background: linear-gradient(0, #444, #222);
min-height: 28px;
font-size: 16px;
margin: 0;
height: 30px;
padding-top: 0;
padding-left: 5px;
padding-right: 5px;
font-weight: bold;
}
.viewerBanner {
background: linear-gradient(0, #444, #222);
min-height: 28px;
font-size: 16px;
margin: 0;
height: 30px;
padding-top: 0;
padding-left: 5px;
padding-right: 5px;
font-weight: bold;
}
.viewerContentWrapper {
display: flex;
flex-direction: row;
width: 100%;
padding: 5px;
height: 99%;
/* height: 95%; */
overflow: hidden;
text-overflow: clip;
white-space: nowrap;
}
.viewerContentWrapper {
display: flex;
flex-direction: row;
width: 100%;
padding: 5px;
height: 99%;
/* height: 95%; */
overflow: hidden;
text-overflow: clip;
white-space: nowrap;
}
.viewerContentWrapper > div {
display: inline-block;
white-space: normal;
}
.viewerContentWrapper > div {
display: inline-block;
white-space: normal;
}
.viewerLeftSidePanel {
width: 200px;
background-color: #323232;
box-sizing: border-box;
margin: 0;
padding: 0;
margin-right: 2px;
color: #d0d0d0;
overflow-y: auto;
}
.viewerLeftSidePanel {
width: 200px;
background-color: #323232;
box-sizing: border-box;
margin: 0;
padding: 0;
margin-right: 2px;
color: #d0d0d0;
overflow-y: auto;
}
.viewerContentWrapper > div > .sidePanelBody {
background: rgba(50, 50, 50, 1);
word-break: break-all;
display: table;
width: 100%;
border: 1px solid #3e3f3a;
}
.viewerContentWrapper > div > .sidePanelBody {
background: rgba(50, 50, 50, 1);
word-break: break-all;
display: table;
width: 100%;
border: 1px solid #3e3f3a;
}
.viewerContentWrapper > div > div.sidePanelBody > div {
width: 100%;
height: 100%;
}
.viewerContentWrapper > div > div.sidePanelBody > div {
width: 100%;
height: 100%;
}
.studyDesc {
font-weight: bold;
font-size: 13px;
text-align: center;
background: rgb(88 84 83);
color: #d0d0d0;
padding: 5px;
}
.studyDesc {
font-weight: bold;
font-size: 13px;
text-align: center;
background: rgb(88 84 83);
color: #d0d0d0;
padding: 5px;
}
.ps {
overflow: hidden !important;
overflow-anchor: none;
-ms-overflow-style: none;
touch-action: auto;
-ms-touch-action: auto;
}
.ps {
overflow: hidden !important;
overflow-anchor: none;
-ms-overflow-style: none;
touch-action: auto;
-ms-touch-action: auto;
}
.viewerLeftSidePanel .viewernavigatorwrapper {
display: flex;
width: 196px;
height: 84px;
padding: 1px 2px 1px 8px;
margin: 6px 0 6px 1px;
border-radius: 2px;
border: 1px solid #404040;
}
.viewerLeftSidePanel .viewernavigatorwrapper {
display: flex;
width: 196px;
height: 84px;
padding: 1px 2px 1px 8px;
margin: 6px 0 6px 1px;
border-radius: 2px;
border: 1px solid #404040;
}
.ui-draggable-handle {
-ms-touch-action: none;
touch-action: none;
}
.ui-draggable-handle {
-ms-touch-action: none;
touch-action: none;
}
.viewerLeftSidePanel .image-preview {
border: 2px solid #252525;
cursor: pointer;
}
.viewerLeftSidePanel .image-preview {
border: 2px solid #252525;
cursor: pointer;
}
.viewerLeftSidePanel .viewernavitextwrapper {
flex: 1;
padding: 3px 1px 3px 4px;
vertical-align: top;
font-size: 12px;
}
.viewerLeftSidePanel .viewernavitextwrapper {
flex: 1;
padding: 3px 1px 3px 4px;
vertical-align: top;
font-size: 12px;
}
.viewerSideActive {
background: #16477b;
background: #16477b80;
border: 1px solid #23527b;
}
.viewerSideActive {
background: #16477b;
background: #16477b80;
border: 1px solid #23527b;
}
.viewerContent {
flex: 1;
height: 100%;
display: block;
background-color: black;
color: #d0d0d0;
font-size: 13px;
}
.instance_frame_wrapper{
min-width: 120px;
background-color: #2c2c2c;
border: 1px solid #2c2c2c;
padding: 5px;
}
.frame_list{
max-height: 500px;
overflow-y: auto;
}
.instance_frame_wrapper ::-webkit-scrollbar {
width: 7px;
height: 7px;
}
.instance_frame_wrapper ::-webkit-scrollbar-thumb {
border-radius: 10px;
background: #d0d0d0;
}
.frame_content{
/* height: 50px; */
padding: 10px;
display: flex;
justify-content: flex-start;
color: #ddd;
font-size: 12px;
border: 1px solid #404040;
}
.frame_content:hover {
/* font-weight: bold; */
/* box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); */
cursor: pointer;
/* color: #428bca; */
border-color: #213a54 !important;
background-color: #213a54;
}
.viewerContent {
flex: 1;
height: 100%;
display: block;
background-color: black;
color: #d0d0d0;
font-size: 13px;
}
</style>
+15 -114
View File
@@ -52,14 +52,10 @@
</div>
<div v-if="item.isExistMutiFrames && item.instanceCount > 1">
<el-popover
v-model="item.isShowPopper"
placement="right-start"
trigger="manual"
placement="right"
trigger="hover"
popper-class="instance_frame_wrapper"
>
<div style="text-align: right;">
<i class="el-icon-circle-close" style="font-size: 20px;cursor: pointer;color:#ddd;" @click="item.isShowPopper = false" />
</div>
<div class="frame_list">
<div
v-for="(instance, idx) in item.instanceInfoList"
@@ -70,27 +66,11 @@
>
<div>
<div>{{ instance.InstanceNumber }}</div>
<div>
{{ `${instance.NumberOfFrames > 0 ? instance.NumberOfFrames : 1} frame` }}
</div>
<div v-if="showDelete">
<span>{{ $t('trials:audit:table:isDelete') }}</span>
<el-switch
v-model="instance.IsDeleted"
size="mini"
@change="changeInstanceDeleteStatus($event, item, instance)"
/>
<span style="margin-left:10px;">{{ $t('trials:audit:table:isReading') }}</span>
<el-switch
v-model="instance.IsReading"
size="mini"
@change="changeInstanceReadingStatus($event, item, instance)"
/>
</div>
<div>{{ `${instance.NumberOfFrames > 0 ? instance.NumberOfFrames : 1} frame` }}</div>
</div>
</div>
</div>
<i slot="reference" class="el-icon-connection" style="font-size: 15px;cursor: pointer;" @click="popperClick(seriesList, item)" />
<i slot="reference" class="el-icon-connection" style="font-size: 15px;cursor: pointer;" />
</el-popover>
</div>
</div>
@@ -158,13 +138,13 @@ import * as cornerstone from 'cornerstone-core'
import * as cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader'
import dicomViewer from '@/components/Dicom/DicomViewer'
import { getStudyInfo, getSeriesList } from '@/api/reading'
import { getInstanceList, getPatientSeriesList, setSeriesStatus, setInstanceStatus } from '@/api/trials'
import { getInstanceList, getPatientSeriesList, setSeriesStatus } from '@/api/trials'
import requestPoolManager from '@/utils/request-pool'
import store from '@/store'
import { changeURLStatic } from '@/utils/history.js'
import metaDataProvider from '@/utils/metaDataProvider'
cornerstone.metaData.addProvider(metaDataProvider, { priority: 10 })
cornerstone.metaData.addProvider(metaDataProvider, { priority: 10 });
var config = {
maxWebWorkers: 4,
startWebWorkersOnDemand: true,
@@ -316,8 +296,7 @@ export default {
tpCode: this.tpCode,
loadStatus: false,
imageloadedArr: [],
isExistMutiFrames: item.IsExistMutiFrames,
isShowPopper: false
isExistMutiFrames: item.IsExistMutiFrames
})
})
this.seriesList = seriesList
@@ -376,8 +355,7 @@ export default {
tpCode: this.tpCode,
loadStatus: false,
imageloadedArr: [],
isExistMutiFrames: item.IsExistMutiFrames,
isShowPopper: false
isExistMutiFrames: item.IsExistMutiFrames
})
})
this.seriesList = seriesList
@@ -406,8 +384,8 @@ export default {
if (!res.Result || (res.Result && res.Result.length === 0)) return
var seriesInstanceUid = res.Result[0].SeriesInstanceUid
var sliceThickness = res.Result[0].SliceThickness
var isReading = res.OtherInfo.IsReading
var isDeleted = res.OtherInfo.IsDeleted
var isReading = res.Result[0].IsReading
var isDeleted = res.Result[0].IsDeleted
var seriesList = []
var imageIds = []
let isExistMutiFrames = false
@@ -425,7 +403,7 @@ export default {
imageIds.push(path)
imageId = path
}
instanceInfoList.push({ Id: instance.Id, InstanceNumber: instance.InstanceNumber, NumberOfFrames: instance.NumberOfFrames, Path: instance.Path, ImageId: imageId, IsDeleted: instance.IsDeleted, IsReading: instance.IsReading })
instanceInfoList.push({ Id: instance.Id, InstanceNumber: instance.InstanceNumber, NumberOfFrames: instance.NumberOfFrames, Path: instance.Path, ImageId: imageId })
})
seriesList.push({
trialId,
@@ -446,8 +424,7 @@ export default {
prefetchInstanceCount: 0,
loadStatus: false,
imageloadedArr: [],
isExistMutiFrames: isExistMutiFrames,
isShowPopper: false
isExistMutiFrames: isExistMutiFrames
})
this.seriesList = seriesList
if (this.seriesList.length > 0) {
@@ -596,8 +573,7 @@ export default {
hasLabel: seriesInfo.HasLabel,
keySeries: seriesInfo.KeySeries,
loadStatus: false,
imageloadedArr: [],
isShowPopper: false
imageloadedArr: []
})
this.seriesList = seriesList
if (this.seriesList.length > 0) {
@@ -695,81 +671,6 @@ export default {
this.loading = false
}
},
async changeInstanceReadingStatus(callback, series, instance) {
let statusStr = ''
if (callback) {
statusStr = this.$t('trials:audit:label:setSeriesReading')
instance.IsReading = false
} else {
statusStr = this.$t('trials:audit:label:setSeriesNotReading')
instance.IsReading = true
}
var message = this.$t('trials:audit:message:changeSeriesStatus').replace('xxx', statusStr)
message = message.replace('yyy', this.$fd('YesOrNo', !instance.IsReading))
const confirm = await this.$confirm(
message,
{
type: 'warning',
distinguishCancelAndClose: true
}
)
if (confirm !== 'confirm') return
const state = instance.IsReading ? 1 : 2
this.loading = true
try {
const res = await setInstanceStatus(series.trialId, series.subjectVisitId, series.seriesId, instance.Id, state)
this.loading = false
if (res.IsSuccess) {
instance.IsReading = !instance.IsReading
this.$message.success(this.$t('common:message:savedSuccessfully'))
window.opener.postMessage({ type: 'refreshSeriesList', data: '' }, window.location)
}
} catch (e) {
this.loading = false
}
},
async changeInstanceDeleteStatus(callback, series, instance) {
let statusStr = ''
if (callback) {
statusStr = this.$t('trials:audit:label:setSeriesDeleted')
instance.IsDeleted = false
} else {
statusStr = this.$t('trials:audit:label:setSeriesNotDelete')
instance.IsDeleted = true
}
var message = this.$t('trials:audit:message:changeSeriesStatus').replace('xxx', statusStr)
message = message.replace('yyy', this.$fd('YesOrNo', !instance.IsDeleted))
const confirm = await this.$confirm(
message,
{
type: 'warning',
distinguishCancelAndClose: true
}
)
if (confirm !== 'confirm') return
const state = instance.IsDeleted ? 5 : 4
this.loading = true
try {
const res = await setInstanceStatus(series.trialId, series.subjectVisitId, series.seriesId, instance.Id, state)
this.loading = false
if (res.IsSuccess) {
instance.IsDeleted = !instance.IsDeleted
this.$message.success(this.$t('common:message:savedSuccessfully'))
window.opener.postMessage({ type: 'refreshSeriesList', data: '' }, window.location)
}
} catch (e) {
this.loading = false
}
},
popperClick(seriesList, series) {
for (let i = 0; i < seriesList.length; i++) {
if (seriesList[i].isShowPopper) {
seriesList[i].isShowPopper = false
}
}
series.isShowPopper = !series.isShowPopper
},
loadAllImages() {
const seriesIndex = this.seriesList.findIndex(i => i.loadStatus === false)
if (seriesIndex === -1) return
@@ -1047,8 +948,8 @@ export default {
background: #d0d0d0;
}
.frame_content{
/* height: 50px; */
padding: 10px;
height: 50px;
padding: 5px;
display: flex;
justify-content: flex-start;
color: #ddd;
+34 -147
View File
@@ -59,56 +59,34 @@
<div>#{{ series.seriesNumber }}</div>
<div v-if="series.isExistMutiFrames && series.instanceCount > 1">
<el-popover
v-model="series.isShowPopper"
placement="right-start"
trigger="manual"
placement="right"
trigger="hover"
popper-class="instance_frame_wrapper"
>
<div style="text-align: right;">
<i class="el-icon-circle-close" style="font-size: 20px;cursor: pointer;color:#ddd;" @click="series.isShowPopper = false" />
</div>
<div class="frame_list">
<div
v-for="(instance, idx) in series.instanceInfoList"
:key="instance.Id"
class="frame_content"
:style="{'margin-bottom':idx<series.instanceInfoList.length-1? '5px':'0px'}"
@click="showMultiFrames(index,series, i, instance)"
>
<!-- <div>
<img
class="image-preview"
:src="series.previewImageUrl"
crossorigin="anonymous"
alt=""
style="width: 40px;height:40px;"
fit="fill"
>
</div> -->
<div>
<div>{{ instance.InstanceNumber }}</div>
<div>
{{ `${instance.NumberOfFrames > 0 ? instance.NumberOfFrames : 1} frame` }}
</div>
<div v-if="showDelete">
<span>{{ $t('trials:audit:table:isDelete') }}</span>
<el-switch
v-model="instance.IsDeleted"
size="mini"
@change="changeInstanceDeleteStatus($event, series, instance)"
/>
<span style="margin-left:10px;">{{ $t('trials:audit:table:isReading') }}</span>
<el-switch
v-model="instance.IsReading"
size="mini"
@change="changeInstanceReadingStatus($event, series, instance)"
/>
</div>
</div>
<div
v-for="(instance, idx) in series.instanceInfoList"
:key="instance.Id"
class="frame_content"
:style="{'margin-bottom':idx<series.instanceInfoList.length-1? '5px':'0px'}"
@click="showMultiFrames(index,series, i, instance)"
>
<!-- <div>
<img
class="image-preview"
:src="series.previewImageUrl"
crossorigin="anonymous"
alt=""
style="width: 40px;height:40px;"
fit="fill"
>
</div> -->
<div>
<div>{{ instance.InstanceNumber }}</div>
<div>{{ `${instance.NumberOfFrames > 0 ? instance.NumberOfFrames : 1} frame` }}</div>
</div>
</div>
<i slot="reference" class="el-icon-connection" style="font-size: 15px;cursor: pointer;" @click="popperClick(studyList, series)" />
<i slot="reference" class="el-icon-connection" style="font-size: 15px;cursor: pointer;" />
</el-popover>
</div>
@@ -165,7 +143,7 @@
</div>
</div>
</el-tab-pane>
<el-tab-pane v-if="!visitTaskId" :label="$t('trials:dicom-show:relatedVisit')" name="relation-study" class="pane-relation-wrapper">
<el-tab-pane :label="$t('trials:dicom-show:relatedVisit')" name="relation-study" class="pane-relation-wrapper" v-if="!visitTaskId">
<div class="viewerSidethumbinner">
<el-collapse v-model="relationActiveName" @change="handelRelationActiveChange">
<el-collapse-item v-for="(study,studyIndex) in relationStudyList" :key="`${study.StudyId}`" :name="`${study.StudyId}`">
@@ -218,8 +196,8 @@
<div v-else>#{{ seriesItem.seriesNumber }}</div>
<div v-if="seriesItem.isExistMutiFrames && seriesItem.instanceCount > 1">
<el-popover
placement="right-start"
trigger="click"
placement="right"
trigger="hover"
popper-class="instance_frame_wrapper"
>
<div class="frame_list">
@@ -282,13 +260,13 @@ import * as cornerstone from 'cornerstone-core'
import * as cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader'
import dicomViewer from '@/components/Dicom/DicomViewer'
import { getVisitStudyList, getAllRelationStudyList, getSeriesList } from '@/api/reading'
import { setSeriesStatus, setInstanceStatus } from '@/api/trials'
import { setSeriesStatus } from '@/api/trials'
import { getTaskUploadedDicomStudyList } from '@/api/reading'
import requestPoolManager from '@/utils/request-pool'
import store from '@/store'
import { changeURLStatic } from '@/utils/history.js'
import metaDataProvider from '@/utils/metaDataProvider'
cornerstone.metaData.addProvider(metaDataProvider, { priority: 10 })
cornerstone.metaData.addProvider(metaDataProvider, { priority: 10 });
// import * as cornerstoneTools from 'cornerstone-tools'
var config = {
maxWebWorkers: 4,
@@ -370,7 +348,7 @@ export default {
let res = null
if (this.page === 'upload') {
res = await getTaskUploadedDicomStudyList({ visitTaskId: this.visitTaskId })
} else if (this.page === 'download') {
} else if (this.page === 'download'){
res = await getVisitStudyList(this.trialId, this.subjectVisitId, this.isReading, this.visitTaskId)
} else {
res = await getVisitStudyList(this.trialId, this.subjectVisitId, this.isReading)
@@ -421,8 +399,7 @@ export default {
prefetchInstanceCount: 0,
loadStatus: false,
imageloadedArr: [],
isExistMutiFrames: series.IsExistMutiFrames,
isShowPopper: false
isExistMutiFrames: series.IsExistMutiFrames
})
})
data.SeriesList = seriesList
@@ -618,83 +595,6 @@ export default {
this.loading = false
}
},
async changeInstanceReadingStatus(callback, series, instance) {
let statusStr = ''
if (callback) {
statusStr = this.$t('trials:audit:label:setSeriesReading')
instance.IsReading = false
} else {
statusStr = this.$t('trials:audit:label:setSeriesNotReading')
instance.IsReading = true
}
var message = this.$t('trials:audit:message:changeSeriesStatus').replace('xxx', statusStr)
message = message.replace('yyy', this.$fd('YesOrNo', !instance.IsReading))
const confirm = await this.$confirm(
message,
{
type: 'warning',
distinguishCancelAndClose: true
}
)
if (confirm !== 'confirm') return
const state = instance.IsReading ? 1 : 2
this.loading = true
try {
const res = await setInstanceStatus(series.trialId, series.subjectVisitId, series.seriesId, instance.Id, state)
this.loading = false
if (res.IsSuccess) {
instance.IsReading = !instance.IsReading
this.$message.success(this.$t('common:message:savedSuccessfully'))
window.opener.postMessage({ type: 'refreshSeriesList', data: '' }, window.location)
}
} catch (e) {
this.loading = false
}
},
async changeInstanceDeleteStatus(callback, series, instance) {
let statusStr = ''
if (callback) {
statusStr = this.$t('trials:audit:label:setSeriesDeleted')
instance.IsDeleted = false
} else {
statusStr = this.$t('trials:audit:label:setSeriesNotDelete')
instance.IsDeleted = true
}
var message = this.$t('trials:audit:message:changeSeriesStatus').replace('xxx', statusStr)
message = message.replace('yyy', this.$fd('YesOrNo', !instance.IsDeleted))
const confirm = await this.$confirm(
message,
{
type: 'warning',
distinguishCancelAndClose: true
}
)
if (confirm !== 'confirm') return
const state = instance.IsDeleted ? 5 : 4
this.loading = true
try {
const res = await setInstanceStatus(series.trialId, series.subjectVisitId, series.seriesId, instance.Id, state)
this.loading = false
if (res.IsSuccess) {
instance.IsDeleted = !instance.IsDeleted
this.$message.success(this.$t('common:message:savedSuccessfully'))
window.opener.postMessage({ type: 'refreshSeriesList', data: '' }, window.location)
}
} catch (e) {
this.loading = false
}
},
popperClick(studyList, series) {
for (let i = 0; i < studyList.length; i++) {
for (let j = 0; j < studyList[i].SeriesList.length; j++) {
if (studyList[i].SeriesList[j].isShowPopper) {
studyList[i].SeriesList[j].isShowPopper = false
}
}
}
series.isShowPopper = !series.isShowPopper
},
// Tab
async handleTabClick(tab, event) {
if (tab.name === 'relation-study' && this.relationStudyList.length <= 0) {
@@ -771,8 +671,7 @@ export default {
keySeries: item.KeySeries,
loadStatus: false,
imageloadedArr: [],
isExistMutiFrames: item.IsExistMutiFrames,
isShowPopper: false
isExistMutiFrames: item.IsExistMutiFrames
})
})
scope.relationStudyList[index].seriesCount = seriesList.length
@@ -1079,21 +978,9 @@ export default {
border: 1px solid #2c2c2c;
padding: 5px;
}
.frame_list{
max-height: 500px;
overflow-y: auto;
}
.instance_frame_wrapper ::-webkit-scrollbar {
width: 7px;
height: 7px;
}
.instance_frame_wrapper ::-webkit-scrollbar-thumb {
border-radius: 10px;
background: #d0d0d0;
}
.frame_content{
/* height: 50px; */
padding: 10px;
height: 50px;
padding: 5px;
display: flex;
justify-content: flex-start;
color: #ddd;
@@ -9,10 +9,10 @@
class="upload-temporary-file"
>
<div class="base-dialog-body">
<el-form-item :label="$t('dictionary:attachment:label:code')" prop="Code">
<el-form-item label="Code" prop="Code">
<el-input v-model="form.Code" />
</el-form-item>
<el-form-item :label="$t('dictionary:attachment:label:businessScenario')" prop="BusinessScenarioEnum">
<el-form-item label="业务场景: " prop="BusinessScenarioEnum">
<el-select
v-model="form.BusinessScenarioEnum"
style="width:100%;"
@@ -28,7 +28,7 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('dictionary:attachment:export:form:file')">
<el-form-item label="文件: ">
<div class="upload-container">
<el-upload
class="upload-demo"
@@ -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" :key="`IsDeleted${item.value}`" :label="item.value">{{ item.label }}</el-radio>
<el-radio v-for="item of $d.YesOrNo" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="描述">
@@ -2,8 +2,7 @@
<BaseContainer>
<template slot="search-container">
<el-form :inline="true" size="small">
<!-- 业务场景 -->
<el-form-item :label="$t('dictionary:attachment:label:businessScenario')">
<el-form-item label="业务场景">
<el-select
v-model="searchData.BusinessScenarioEnum"
style="width:150px;"
@@ -17,8 +16,7 @@
</el-select>
</el-form-item>
<!-- 文件名称 -->
<el-form-item :label="$t('dictionary:attachment:label:name')">
<el-form-item label="文件名称">
<el-input
v-model="searchData.Name"
style="width:130px;"
@@ -39,6 +37,7 @@
</el-form>
<el-button
type="primary"
icon="el-icon-plus"
style="margin-left:auto;"
size="small"
@click="handleAdd"
@@ -58,14 +57,14 @@
<el-table-column type="index" width="40" />
<el-table-column
prop="Code"
:label="$t('dictionary:attachment:label:code')"
label="Code"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="BusinessScenarioEnum"
:label="$t('dictionary:attachment:label:businessScenario')"
label="业务场景"
show-overflow-tooltip
sortable="custom"
>
@@ -77,18 +76,18 @@
<el-table-column
prop="Name"
:label="$t('dictionary:attachment:label:name')"
label="文件名称"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Description"
:label="$t('dictionary:attachment:label:description')"
label="描述"
show-overflow-tooltip
/>
<el-table-column
prop="IsDeleted"
:label="$t('dictionary:attachment:label:isDeleted')"
label="是否废除"
show-overflow-tooltip
sortable="custom"
>
@@ -99,30 +98,30 @@
</el-table-column>
<el-table-column
prop="UpdateTime"
:label="$t('dictionary:attachment:label:updateTime')"
label="上传时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column label="Action" width="300">
<el-table-column label="Action">
<template slot-scope="scope">
<el-button
type="text"
@click="handleDownload(scope.row)"
>
{{ $t('common:button:download') }}
下载
</el-button>
<el-button
type="text"
@click="handleEdit(scope.row)"
>
{{ $t('common:action:edit') }}
编辑
</el-button>
<el-button
type="text"
@click="handleDelete(scope.row)"
>
{{ $t('common:button:delete') }}
删除
</el-button>
</template>
</el-table-column>
@@ -177,9 +176,9 @@ export default {
},
methods: {
handleDelete(row) {
this.$confirm(this.$t('dictionary:attachment:export:confirm:delete')).then(() => {
this.$confirm('确定删除该文件?').then(() => {
deleteCommonDocument(row.Id).then(() => {
this.$message.success(this.$t('common:message:deletedSuccessfully'))
this.$message.success('删除成功')
this.getList()
})
})
@@ -196,7 +195,7 @@ export default {
},
//
handleAdd() {
this.editDialog.title = this.$t('common:button:new')
this.editDialog.title = 'Add'
this.currentRow = { FileTypeEnum: FileTypeEnum }
this.editDialog.visible = true
},
@@ -209,7 +208,7 @@ export default {
},
//
handleEdit(row) {
this.editDialog.title = this.$t('common:action:edit')
this.editDialog.title = 'Edit'
this.currentRow = { ...row }
this.editDialog.visible = true
},
@@ -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" :key="`IsDeleted${item.value}`" :label="item.value">{{ item.label }}</el-radio>
<el-radio v-for="item of $d.YesOrNo" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="描述">
@@ -2,8 +2,7 @@
<BaseContainer>
<template slot="search-container">
<el-form :inline="true" size="small">
<!-- 业务场景 -->
<el-form-item :label="$t('dictionary:attachment:label:businessScenario')">
<el-form-item label="业务场景">
<el-select
v-model="searchData.BusinessScenarioEnum"
style="width:150px;"
@@ -17,8 +16,7 @@
</el-select>
</el-form-item>
<!-- 文件名称 -->
<el-form-item :label="$t('dictionary:attachment:label:name')">
<el-form-item label="文件名称">
<el-input
v-model="searchData.Name"
style="width:130px;"
@@ -59,14 +57,14 @@
<el-table-column type="index" width="40" />
<el-table-column
prop="Code"
:label="$t('dictionary:attachment:label:code')"
label="Code"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="BusinessScenarioEnum"
:label="$t('dictionary:attachment:label:businessScenario')"
label="业务场景"
show-overflow-tooltip
sortable="custom"
>
@@ -78,7 +76,7 @@
<el-table-column
prop="Name"
:label="$t('dictionary:attachment:label:name')"
label="文件名称"
show-overflow-tooltip
sortable="custom"
/>
@@ -94,12 +92,12 @@
</el-table-column>
<el-table-column
prop="Description"
:label="$t('dictionary:attachment:label:description')"
label="描述"
show-overflow-tooltip
/>
<el-table-column
prop="IsDeleted"
:label="$t('dictionary:attachment:label:isDeleted')"
label="是否废除"
show-overflow-tooltip
sortable="custom"
>
@@ -110,18 +108,18 @@
</el-table-column>
<el-table-column
prop="UpdateTime"
:label="$t('dictionary:attachment:label:updateTime')"
label="上传时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column :label="$t('common:action:action')">
<el-table-column label="Action">
<template slot-scope="scope">
<el-button
type="text"
@click="handleDownload(scope.row)"
>
{{ $t('common:button:download') }}
下载
</el-button>
<!-- <el-button
type="text"
@@ -9,7 +9,7 @@
class="upload-temporary-file"
>
<div class="base-dialog-body">
<el-form-item :label="$t('dictionary:attachment:export:search:code')" prop="Code">
<el-form-item label="Code" prop="Code">
<el-input v-model="form.Code" />
</el-form-item>
<el-form-item
@@ -76,9 +76,8 @@
:label="$t('dictionary:attachment:export:form:isDeleted')"
>
<el-radio-group v-model="form.IsDeleted">
<el-radio v-for="item of $d.YesOrNo" :key="`IsDeleted${item.value}`" :label="item.value">
{{ item.label }}
</el-radio>
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
@@ -39,6 +39,7 @@
</el-form-item>
<el-button
type="primary"
icon="el-icon-plus"
style="float: right"
size="small"
@click="handleAdd"
@@ -59,7 +60,7 @@
<el-table-column type="index" width="40" />
<el-table-column
prop="Code"
:label="$t('dictionary:attachment:export:search:code')"
label="Code"
show-overflow-tooltip
sortable="custom"
/>
@@ -119,7 +120,7 @@
sortable="custom"
/>
<el-table-column :label="$t('common:action:action')" width="300">
<el-table-column :label="$t('common:action:action')">
<template slot-scope="scope">
<el-button type="text" @click="PreviewFile(scope.row)">
{{ $t('common:button:preview') }}
@@ -234,7 +235,7 @@ export default {
},
//
handleAdd() {
this.editDialog.title = this.$t('common:button:new')
this.editDialog.title = 'Add'
this.currentRow = { FileTypeEnum: FileTypeEnum }
this.editDialog.visible = true
},
@@ -251,7 +252,7 @@ export default {
},
//
handleEdit(row) {
this.editDialog.title = this.$t('common:action:edit')
this.editDialog.title = 'Edit'
this.currentRow = { ...row }
this.editDialog.visible = true
},
@@ -33,6 +33,7 @@
</el-form>
<el-button
type="primary"
icon="el-icon-plus"
style="margin-left: auto; margin-bottom: 10px"
size="small"
@click="handleAdd"
@@ -116,7 +117,7 @@
sortable="custom"
/>
<el-table-column :label="$t('common:action:action')" min-width="120">
<el-table-column :label="$t('common:action:action')" min-width="100">
<template slot-scope="scope">
<el-button type="text" @click="handlePreview(scope.row)">
{{ $t('common:button:preview') }}
@@ -246,7 +247,7 @@ export default {
},
//
handleAdd() {
this.title = this.$t('common:button:new')
this.title = 'Add'
this.currentRow = {}
this.editVisible = true
},
@@ -261,7 +262,7 @@ export default {
},
//
handleEdit(row) {
this.title = this.$t('common:action:edit')
this.title = 'Edit'
this.currentRow = { ...row }
this.editVisible = true
},
@@ -9,10 +9,10 @@
class="upload-temporary-file"
>
<div class="base-dialog-body">
<el-form-item :label="$t('dictionary:attachment:label:code')" prop="Code">
<el-form-item label="Code" prop="Code">
<el-input v-model="form.Code" />
</el-form-item>
<el-form-item :label="$t('dictionary:attachment:label:businessScenario')" prop="BusinessScenarioEnum">
<el-form-item label="业务场景: " prop="BusinessScenarioEnum">
<el-select
v-model="form.BusinessScenarioEnum"
style="width: 100%"
@@ -28,7 +28,7 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('dictionary:attachment:label:file')">
<el-form-item label="文件: ">
<div class="upload-container">
<el-upload
class="upload-demo"
@@ -57,7 +57,7 @@
</el-upload>
</div>
</el-form-item>
<el-form-item :label="$t('dictionary:attachment:label:name')" prop="Name">
<el-form-item label="文件名" prop="Name">
<el-input v-model="form.Name" />
</el-form-item>
<el-form-item
@@ -66,7 +66,7 @@
>
<el-input v-model="form.NameCN" />
</el-form-item>
<el-form-item v-if="form.Id !== ''" :label="$t('dictionary:attachment:label:isDeleted')">
<el-form-item v-if="form.Id !== ''" label="是否废除: ">
<el-radio-group v-model="form.IsDeleted">
<el-radio
v-for="item of $d.YesOrNo"
@@ -76,11 +76,12 @@
>
</el-radio-group>
</el-form-item>
<el-form-item :label="$t('dictionary:attachment:label:description')">
<el-form-item label="描述">
<el-input
v-model="form.Description"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4 }"
placeholder="请输入内容"
/>
</el-form-item>
</div>
@@ -92,7 +93,7 @@
:disabled="!form.FileTypeEnum || !form.BusinessScenarioEnum"
:loading="saveBtnLoading"
@click="handleSave"
>{{ $t('common:button:save') }}</el-button
>Save</el-button
>
</el-form-item>
</div>
@@ -131,16 +132,16 @@ export default {
},
rules: {
Code: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: ['blur'] },
{ required: true, message: 'Please specify', trigger: ['blur'] },
],
Name: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: ['blur'] },
{ required: true, message: 'Please specify', trigger: ['blur'] },
],
NameCN: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: ['blur'] },
{ required: true, message: 'Please specify', trigger: ['blur'] },
],
BusinessScenarioEnum: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: ['blur'] },
{ required: true, message: 'Please select', trigger: ['blur'] },
],
},
fileList: [],
@@ -192,7 +193,7 @@ export default {
this.fileList = []
return true
} else {
this.$alert(this.$t('dictionary:attachment:export:alert:formatFile'))
this.$alert('必须是word/excel格式')
return false
}
@@ -219,7 +220,7 @@ export default {
this.$refs.sysTemplateFrom.validate((valid) => {
if (!valid) return
if (!this.form.Name) {
this.$alert(this.$t('dictionary:attachment:message:msg1'))
this.$alert('Please select file.')
return
}
this.saveBtnLoading = true
@@ -228,7 +229,7 @@ export default {
this.saveBtnLoading = false
this.$emit('closeDialog')
this.$emit('getList')
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.$message.success('Uploaded successfully')
})
.catch(() => {
this.saveBtnLoading = false
@@ -247,7 +248,7 @@ export default {
}
},
handleExceed(files, fileList) {
this.$message.warning(this.$t('upload:rule:maxFile1'))
this.$message.warning(`Upload is currently limited to 1 file`)
},
checkFileSuffix(fileName) {
var typeArr = ['xls', 'xlsx', 'doc', 'docx']
@@ -2,8 +2,7 @@
<BaseContainer>
<template slot="search-container">
<el-form :inline="true" size="small">
<!-- 业务场景 -->
<el-form-item :label="$t('dictionary:attachment:label:businessScenario')">
<el-form-item label="业务场景">
<el-select
v-model="searchData.BusinessScenarioEnum"
style="width: 150px"
@@ -16,8 +15,7 @@
/>
</el-select>
</el-form-item>
<!-- 文件名称 -->
<el-form-item :label="$t('dictionary:attachment:label:name')">
<el-form-item label="文件名称">
<el-input v-model="searchData.Name" style="width: 130px" clearable />
</el-form-item>
@@ -37,6 +35,7 @@
</el-form-item>
<el-button
type="primary"
icon="el-icon-plus"
style="float: right"
size="small"
@click="handleAdd"
@@ -57,14 +56,14 @@
<el-table-column type="index" width="40" />
<el-table-column
prop="Code"
:label="$t('dictionary:attachment:label:code')"
label="Code"
show-overflow-tooltip
sortable="custom"
/>
<!-- 业务场景 -->
<el-table-column
prop="BusinessScenarioEnum"
:label="$t('dictionary:attachment:label:businessScenario')"
label="业务场景"
show-overflow-tooltip
sortable="custom"
>
@@ -77,10 +76,10 @@
}}
</template>
</el-table-column>
<!-- 文件名称 -->
<el-table-column
prop="Name"
:label="$t('dictionary:attachment:label:name')"
label="文件名称"
show-overflow-tooltip
sortable="custom"
/>
@@ -90,16 +89,14 @@
show-overflow-tooltip
sortable="custom"
/>
<!-- 描述 -->
<el-table-column
prop="Description"
:label="$t('dictionary:attachment:label:description')"
label="描述"
show-overflow-tooltip
/>
<!-- 是否废除 -->
<el-table-column
prop="IsDeleted"
:label="$t('dictionary:attachment:label:isDeleted')"
label="是否废除"
show-overflow-tooltip
sortable="custom"
>
@@ -112,27 +109,26 @@
}}</el-tag>
</template>
</el-table-column>
<!-- 上传时间 -->
<el-table-column
prop="UpdateTime"
:label="$t('dictionary:attachment:label:updateTime')"
label="上传时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column :label="$t('common:action:action')" width="300">
<el-table-column label="Action">
<template slot-scope="scope">
<el-button type="text" @click="PreviewFile(scope.row)">
{{ $t('common:button:preview') }}
</el-button>
<el-button type="text" @click="handleDownload(scope.row)">
{{ $t('common:button:download') }}
下载
</el-button>
<el-button type="text" @click="handleEdit(scope.row)">
{{ $t('common:button:edit') }}
编辑
</el-button>
<el-button type="text" @click="handleDelete(scope.row)">
{{ $t('common:button:delete') }}
删除
</el-button>
</template>
</el-table-column>
@@ -201,13 +197,12 @@ export default {
},
methods: {
handleDelete(row) {
//
this.$confirm(this.$t('dictionary:attachment:message:msg1')).then(() => {
this.$confirm('确定删除该模版?').then(() => {
deleteCommonDocument(row.Id).then(() => {
this.$message.success(this.$t('common:message:deletedSuccessfully'))
this.$message.success('删除成功')
this.getList()
})
}).catch(()=>{})
})
},
PreviewFile(row) {
let basePath = window.location.origin
@@ -234,7 +229,7 @@ export default {
},
//
handleAdd() {
this.editDialog.title = this.$t('common:button:new')
this.editDialog.title = 'Add'
this.currentRow = { FileTypeEnum: FileTypeEnum }
this.editDialog.visible = true
},
@@ -251,7 +246,7 @@ export default {
},
//
handleEdit(row) {
this.editDialog.title = this.$t('common:button:edit')
this.editDialog.title = 'Edit'
this.currentRow = { ...row }
this.editDialog.visible = true
},
+23 -11
View File
@@ -2,13 +2,13 @@
<div class="app-container my_menu" >
<el-form :inline="true">
<el-form-item label="模块">
<el-select v-model="queryParams.ModuleTypeId" placeholder="模块" clearable >
<el-option v-for="item of dict.type.ModuleType" :key="`ModuleTypeId${item.value}`" :value="item.value" :label="item.raw.ValueCN" />
<el-select v-model="queryParams.ModuleTypeId" placeholder="模块" clearable size="small">
<el-option v-for="item of dict.type.ModuleType" :value="item.value" :label="item.raw.ValueCN" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
<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>
@@ -66,30 +66,42 @@
<template slot-scope="scope">
<el-button
v-if="scope.row.ModuleTypeValueCN && scope.row.ObjectTypeValueCN && scope.row.OptTypeValueCN && scope.row.ChildrenTypeValueCN "
size="mini"
type="text"
icon="el-icon-top"
@click="handleUpMove(scope.row)"
>上移</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
v-if="!(scope.row.ModuleTypeValueCN && scope.row.ObjectTypeValueCN && scope.row.OptTypeValueCN && scope.row.ChildrenTypeValueCN)"
size="mini"
type="text"
icon="el-icon-plus"
@click="handleAdd(scope.row)"
>新增</el-button>
<el-button
v-if="scope.row.ModuleTypeValueCN && scope.row.ObjectTypeValueCN && scope.row.OptTypeValueCN && scope.row.ChildrenTypeValueCN "
size="mini"
type="text"
icon="el-icon-plus"
@click="handleChildren(scope.row)"
>Children</el-button>
<el-button
v-if="scope.row.ModuleTypeValueCN && scope.row.ObjectTypeValueCN && scope.row.OptTypeValueCN && scope.row.ChildrenTypeValueCN "
size="mini"
type="text"
icon="el-icon-plus"
@click="handleCopy(scope.row)"
>复制到</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
@@ -157,28 +169,28 @@
<el-col v-show="form.ConfigType === 'M' && title !== '复制'" :span="12">
<el-form-item label="功能模块" prop="menuType">
<el-select v-model="form.ModuleTypeId" placeholder="模块" clearable size="small" @change="changeModule">
<el-option v-for="item of dict.type.ModuleType" :key="`ModuleType${item.value}`" :value="item.value" :label="item.raw.ValueCN" />
<el-option v-for="item of dict.type.ModuleType" :value="item.value" :label="item.raw.ValueCN" />
</el-select>
</el-form-item>
</el-col>
<el-col v-show="form.ConfigType === 'M' && title !== '复制'" :span="12">
<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" :key="`OptTypeId${item.value}`" :value="item.value" :label="item.raw.ValueCN" />
<el-option v-for="item of dict.type.OptType" :value="item.value" :label="item.raw.ValueCN" />
</el-select>
</el-form-item>
</el-col>
<el-col v-show="form.ConfigType === 'M' && title !== '复制'" :span="12">
<el-form-item label="对象类型" prop="menuType">
<el-select v-model="form.ObjectTypeId" placeholder="对象类型" clearable size="small" @change="changeDescription">
<el-option v-for="item of dict.type.ObjectType" :key="`ObjectType${item.value}`" v-if="ChildGroup === item.raw.ChildGroup" :value="item.value" :label="item.raw.ValueCN" />
<el-option v-for="item of dict.type.ObjectType" v-if="ChildGroup === item.raw.ChildGroup" :value="item.value" :label="item.raw.ValueCN" />
</el-select>
</el-form-item>
</el-col>
<el-col v-show="form.ConfigType === 'M' && title !== '复制'" :span="12">
<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" :key="`ChildrenType${item.value}`" :value="item.value" :label="item.raw.ValueCN" />
<el-option v-for="item of dict.type.ChildrenType" :value="item.value" :label="item.raw.ValueCN" />
</el-select>
</el-form-item>
</el-col>
@@ -283,7 +295,7 @@
</el-button>
</el-col>
</el-row>
<el-row v-show="form.DataType === 'Router'" v-if="form.UrlConfig && form.UrlConfig.IsHaveParameters" v-for="(item,index) of form.UrlConfig ? form.UrlConfig.ParameterList : []" :key="`Router${index}`">
<el-row v-show="form.DataType === 'Router'" v-if="form.UrlConfig && form.UrlConfig.IsHaveParameters" v-for="(item,index) of form.UrlConfig ? form.UrlConfig.ParameterList : []">
<el-col :span="10">
<el-form-item>
<span slot="label">
@@ -659,11 +671,11 @@
<div style="padding: 0 40px;display: flex;flex-direction: column">
<div style="text-align: right;height: 50px;">
<el-select v-model="copeParams.FromItemId" collapse-tags filterable placeholder="完全拷贝对象" clearable size="small">
<el-option v-for="item of list" :key="item.Id" v-if="drawer_cfg.drawerChild && item.ConfigType === 'M' && item.ObjectTypeId === selectRow.ObjectTypeId && item.OptTypeId && item.ChildrenTypeId " :value="item.Id" :label="item.DescriptionCN" />
<el-option v-for="item of list" v-if="drawer_cfg.drawerChild && item.ConfigType === 'M' && item.ObjectTypeId === selectRow.ObjectTypeId && item.OptTypeId && item.ChildrenTypeId " :value="item.Id" :label="item.DescriptionCN" />
</el-select>
<el-button type="primary" size="mini" style="margin-right: 10px" @click="handleOverCope(selectRow)">完全拷贝</el-button>
<el-select v-model="copeParams.DataSourceGuids" multiple collapse-tags filterable placeholder="拷贝对象" clearable size="small">
<el-option v-for="item of list" :key="item.Id" v-if="drawer_cfg.drawerChild && item.ConfigType === 'M' && item.ObjectTypeId === selectRow.ObjectTypeId && item.OptTypeId && item.ChildrenTypeId " :value="item.Id" :label="item.DescriptionCN" />
<el-option v-for="item of list" v-if="drawer_cfg.drawerChild && item.ConfigType === 'M' && item.ObjectTypeId === selectRow.ObjectTypeId && item.OptTypeId && item.ChildrenTypeId " :value="item.Id" :label="item.DescriptionCN" />
</el-select>
<el-button type="primary" size="mini" @click="handleCope(selectRow)">拷贝</el-button>
<el-button type="primary" size="mini" @click="handleAdd(selectRow)">新建</el-button>
@@ -0,0 +1,411 @@
<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>
@@ -1,29 +1,30 @@
<template>
<box-content>
<div class="search">
<el-form :inline="true" class="base-search-form">
<!-- CRO Name -->
<el-form-item :label="$t('institutions:cros:label:croName')">
<el-form :inline="true" size="small" class="base-search-form">
<el-form-item label="CRO Name:">
<el-input v-model="searchData.CROName" style="width: 100px" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch"
>Search</el-button
>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>Reset</el-button
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<span style="margin-left: auto">
<el-button
size="small"
type="primary"
style="margin-left: auto"
icon="el-icon-plus"
@click="handleAddCro"
>{{ $t('common:button:new') }}</el-button
>New</el-button
>
</span>
</div>
@@ -36,34 +37,30 @@
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<!-- CRO Code -->
<el-table-column
prop="CROCode"
:label="$t('institutions:cros:label:croCode')"
label="CRO Code"
min-width="150"
show-overflow-tooltip
sortable="custom"
/>
<!-- CRO Name -->
<el-table-column
prop="CROName"
:label="$t('institutions:cros:label:croName')"
label="CRO Name"
min-width="150"
show-overflow-tooltip
sortable="custom"
/>
<!-- CRO NameCN -->
<el-table-column
prop="CRONameCN"
:label="$t('institutions:cros:label:croNameCN')"
label="CRO NameCN"
min-width="150"
show-overflow-tooltip
sortable="custom"
/>
<!-- Level -->
<el-table-column
prop="IsTrialLevel"
:label="$t('institutions:cros:label:level')"
label="Level"
show-overflow-tooltip
sortable="custom"
>
@@ -71,20 +68,20 @@
<span>{{ $fd("IsTrialLevel", String(scope.row.IsTrialLevel)) }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('common:action:action')" min-width="200">
<el-table-column label="Action" min-width="200">
<template slot-scope="scope">
<el-button
type="text"
circle
icon="el-icon-edit-outline"
title="编辑"
@click="handleEdit(scope.row)"
>
{{ $t('common:button:edit') }}
</el-button>
/>
<el-button
type="text"
circle
icon="el-icon-delete"
title="删除"
@click="handleDelete(scope.row)"
>
{{ $t('common:button:delete') }}
</el-button>
/>
</template>
</el-table-column>
</el-table>
@@ -163,13 +160,13 @@ export default {
// CRO
handleAddCro() {
this.rowData = {};
this.title =this.$t('common:button:new');
this.title = "Add";
this.editVisible = true;
},
// CRO
handleEdit(row) {
this.rowData = row;
this.title = this.$t('common:action:edit');
this.title = "Edit";
this.editVisible = true;
},
// CRO
@@ -5,23 +5,19 @@
:rules="rules"
class="demo-ruleForm"
size="small"
label-width="140px"
label-width="120px"
>
<div class="base-dialog-body">
<!-- CRO Name -->
<el-form-item :label="$t('institutions:cros:label:croName')" prop="CROName">
<el-form-item label="CRO Name: " prop="CROName">
<el-input v-model="form.CROName" />
</el-form-item>
<!-- CRO NameCN -->
<el-form-item :label="$t('institutions:cros:label:croNameCN')" prop="CRONameCN">
<el-form-item label="CRO NameCN: " prop="CRONameCN">
<el-input v-model="form.CRONameCN" />
</el-form-item>
<!-- CRO Code -->
<el-form-item :label="$t('institutions:cros:label:croCode')" prop="CROCode">
<el-form-item label="CRO Code: " prop="CROCode">
<el-input v-model="form.CROCode" />
</el-form-item>
<!-- Level -->
<el-form-item :label="$t('institutions:cros:label:level')">
<el-form-item label="Level: ">
<el-switch
:disabled="!IsTrialLevel"
v-model="form.IsTrialLevel"
@@ -34,10 +30,10 @@
<div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
<el-form-item>
<el-button :disabled="btnLoading" type="primary" @click="handleCancel"
>{{ $t('common:button:cancel') }}</el-button
>Cancel</el-button
>
<el-button type="primary" :loading="btnLoading" @click="handleSave"
>{{ $t('common:button:save') }}</el-button
>Save</el-button
>
</el-form-item>
</div>
@@ -71,16 +67,16 @@ export default {
},
rules: {
CROName: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: "blur" },
{ max: 500, message: this.$t('common:ruleMessage:maxLength') + ' 500' },
{ required: true, message: "Please specify", trigger: "blur" },
{ max: 500, message: "The maximum length is 500" },
],
CRONameCN: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: "blur" },
{ max: 500, message: this.$t('common:ruleMessage:maxLength') + ' 500' },
{ required: true, message: "Please specify", trigger: "blur" },
{ max: 500, message: "The maximum length is 500" },
],
CROCode: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: "blur" },
{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' },
{ required: true, message: "Please specify", trigger: "blur" },
{ max: 50, message: "The maximum length is 50" },
],
},
};
@@ -99,7 +95,7 @@ export default {
.then((res) => {
this.btnLoading = false;
if (res.IsSuccess) {
this.$message.success(this.$t('common:message:savedSuccessfully'));
this.$message.success("Saved successfully");
this.$refs["CROForm"].resetFields();
this.$emit("getList");
this.$emit("close");
@@ -8,8 +8,7 @@
label-width="170px"
>
<div class="base-dialog-body">
<!-- Site -->
<el-form-item :label="$t('institutions:hospitals:label:site')">
<el-form-item label="Site: ">
<el-select
v-model="form.SiteId"
style="width: 100%"
@@ -26,50 +25,40 @@
</el-option>
</el-select>
</el-form-item>
<!-- Hospital CN -->
<el-form-item :label="$t('institutions:hospitals:label:hospitalCN')" prop="HospitalNameCN">
<el-form-item label="Hospital CN: " prop="HospitalNameCN">
<el-input v-model="form.HospitalNameCN" />
</el-form-item>
<!-- Hospital EN -->
<el-form-item :label="$t('institutions:hospitals:label:hospital')" prop="HospitalName">
<el-form-item label="Hospital EN: " prop="HospitalName">
<el-input v-model="form.HospitalName" />
</el-form-item>
<!-- Affiliated University CN -->
<el-form-item
:label="$t('institutions:hospitals:label:universityAffiliatedCN')"
label="Affiliated University CN: "
prop="UniversityAffiliatedCN"
>
<el-input v-model="form.UniversityAffiliatedCN" />
</el-form-item>
<!-- Affiliated University EN -->
<el-form-item
:label="$t('institutions:hospitals:label:universityAffiliated')"
label="Affiliated University EN: "
prop="UniversityAffiliated"
>
<el-input v-model="form.UniversityAffiliated" />
</el-form-item>
<!-- Country CN -->
<el-form-item :label="$t('institutions:hospitals:label:countryCN')" prop="CountryCN">
<el-form-item label="Country CN: " prop="CountryCN">
<el-input v-model="form.CountryCN" />
</el-form-item>
<!-- Country EN -->
<el-form-item :label="$t('institutions:hospitals:label:country')" prop="Country">
<el-form-item label="Country EN: " prop="Country">
<el-input v-model="form.Country" />
</el-form-item>
<!-- Province CN -->
<el-form-item :label="$t('institutions:hospitals:label:provinceCN')" prop="ProvinceCN">
<el-form-item label="Province CN: " prop="ProvinceCN">
<el-input v-model="form.ProvinceCN" />
</el-form-item>
<!-- Province EN -->
<el-form-item :label="$t('institutions:hospitals:label:province')" prop="Province">
<el-form-item label="Province EN: " prop="Province">
<el-input v-model="form.Province" />
</el-form-item>
<!-- City CN -->
<el-form-item :label="$t('institutions:hospitals:label:cityCN')" prop="CityCN">
<el-form-item label="City CN: " prop="CityCN">
<el-input v-model="form.CityCN" />
</el-form-item>
<!-- City EN -->
<el-form-item :label="$t('institutions:hospitals:label:city')" prop="City">
<el-form-item label="City EN: " prop="City">
<el-input v-model="form.City" />
</el-form-item>
</div>
@@ -80,14 +69,14 @@
size="small"
type="primary"
@click="handleCancel"
>{{ $t('common:button:cancel') }}</el-button
>Cancel</el-button
>
<el-button
size="small"
type="primary"
:loading="btnLoading"
@click="handleSave"
>{{ $t('common:button:save') }}</el-button
>Save</el-button
>
</el-form-item>
</div>
@@ -132,29 +121,29 @@ export default {
siteList: [],
rules: {
HospitalNameCN: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' },
{ required: true, message: 'Please specify', trigger: 'blur' },
{ max: 50, message: 'The maximum length is 50' },
],
UniversityAffiliated: [
{ max: 100, message: this.$t('common:ruleMessage:maxLength') + ' 100' },
{ max: 100, message: 'The maximum length is 100' },
],
UniversityAffiliatedCN: [
{ max: 100, message: this.$t('common:ruleMessage:maxLength') + ' 100' },
{ max: 100, message: 'The maximum length is 100' },
],
Country: [{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' }],
Country: [{ max: 50, message: 'The maximum length is 50' }],
CountryCN: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' },
{ required: true, message: 'Please specify', trigger: 'blur' },
{ max: 50, message: 'The maximum length is 50' },
],
Province: [{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' }],
Province: [{ max: 50, message: 'The maximum length is 50' }],
ProvinceCN: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' },
{ required: true, message: 'Please specify', trigger: 'blur' },
{ max: 50, message: 'The maximum length is 50' },
],
City: [{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' }],
City: [{ max: 50, message: 'The maximum length is 50' }],
CityCN: [
{ required: true, message: 'Please specify', trigger: 'blur' },
{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' },
{ max: 50, message: 'The maximum length is 50' },
],
},
}
@@ -195,7 +184,7 @@ export default {
.then((res) => {
this.btnLoading = false
if (res.IsSuccess) {
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.$message.success('Saved successfully')
this.$refs['hospitalForm'].resetFields()
this.$emit('getList')
this.$emit('close')
@@ -1,37 +1,29 @@
<template>
<box-content>
<div class="search">
<el-form :inline="true" class="base-search-form">
<!-- Hospital -->
<el-form-item :label="$t('institutions:hospitals:label:hospital')">
<el-form :inline="true" size="small" class="base-search-form">
<el-form-item label="Hospital:">
<el-input v-model="searchData.HospitalName" style="width:100px;" />
</el-form-item>
<!-- Province -->
<el-form-item :label="$t('institutions:hospitals:label:province')">
<el-form-item label="Province:">
<el-input v-model="searchData.Province" style="width:100px;" />
</el-form-item>
<!-- City -->
<el-form-item :label="$t('institutions:hospitals:label:city')">
<el-form-item label="City:">
<el-input v-model="searchData.City" style="width:100px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">Search</el-button>
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">Reset</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto;">
<el-button
size="small"
type="primary"
style="margin-left:auto;"
icon="el-icon-plus"
@click="handleAddHospital"
>{{ $t('common:button:new') }}</el-button>
>New</el-button>
</span>
</div>
<!-- hospital列表 -->
@@ -44,102 +36,92 @@
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<!-- Hospital -->
<el-table-column
prop="HospitalName"
:label="$t('institutions:hospitals:label:hospital')"
label="Hospital"
min-width="120"
show-overflow-tooltip
sortable="custom"
/>
<!-- Hospital CN -->
<el-table-column
prop="HospitalNameCN"
label="Hospital CN"
:label="$t('institutions:hospitals:label:hospitalCN')"
min-width="120"
show-overflow-tooltip
sortable="custom"
/>
<!-- University Affiliated -->
<el-table-column
prop="UniversityAffiliated"
:label="$t('institutions:hospitals:label:universityAffiliated')"
label="University Affiliated"
min-width="170"
show-overflow-tooltip
sortable="custom"
/>
<!-- University Affiliated CN -->
<el-table-column
prop="UniversityAffiliatedCN"
:label="$t('institutions:hospitals:label:universityAffiliatedCN')"
label="University Affiliated CN"
min-width="170"
show-overflow-tooltip
sortable="custom"
/>
<!-- Country -->
<el-table-column
prop="Country"
:label="$t('institutions:hospitals:label:country')"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<!-- Country CN -->
<el-table-column
prop="CountryCN"
:label="$t('institutions:hospitals:label:countryCN')"
width="140"
show-overflow-tooltip
sortable="custom"
/>
<!-- Province -->
<el-table-column
prop="Province"
:label="$t('institutions:hospitals:label:province')"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<!-- Province CN -->
<el-table-column
prop="ProvinceCN"
:label="$t('institutions:hospitals:label:provinceCN')"
width="140"
show-overflow-tooltip
sortable="custom"
/>
<!-- City -->
<el-table-column
prop="City"
:label="$t('institutions:hospitals:label:city')"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<!-- City CN -->
<el-table-column
prop="CityCN"
:label="$t('institutions:hospitals:label:cityCN')"
width="130"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column :label="$t('common:action:action')" width="150">
<el-table-column
prop="Country"
label="Country"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CountryCN"
label="Country CN"
width="140"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Province"
label="Province"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="ProvinceCN"
label="Province CN"
width="140"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="City"
label="City"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CityCN"
label="City CN"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column label="Action" width="150">
<template slot-scope="scope">
<el-button
type="text"
circle
icon="el-icon-edit-outline"
title="编辑"
@click="handleEdit(scope.row)"
>
{{ $t('common:button:edit') }}
</el-button>
/>
<el-button
type="text"
circle
icon="el-icon-delete"
title="删除"
@click="handleDelete(scope.row)"
>
{{ $t('common:button:delete') }}
</el-button>
/>
</template>
</el-table-column>
</el-table>
@@ -208,13 +190,13 @@ export default {
//
handleAddHospital() {
this.rowData = {}
this.editDialog.title = this.$t('common:button:new')
this.editDialog.title = 'Add'
this.editDialog.visible = true
},
//
handleEdit(row) {
this.rowData = row
this.editDialog.title = this.$t('common:action:edit')
this.editDialog.title = 'Edit'
this.editDialog.visible = true
},
//
@@ -9,50 +9,49 @@
label-width="150px"
>
<div class="base-dialog-body">
<!-- Site Code -->
<el-form-item :label="$t('institutions:sites:label:siteCode')" v-if="form.Id" prop="SiteCode">
<el-form-item label="Site Code: " v-if="form.Id" prop="SiteCode">
<el-input v-model="form.SiteCode" disabled />
</el-form-item>
<!-- 中心名称 -->
<el-form-item
:label="$t('institutions:sites:label:siteName')"
:label="$t('trials:customSite:form:siteName')"
prop="SiteName"
>
<el-input v-model="form.SiteName" />
</el-form-item>
<!-- 中心名称CN -->
<el-form-item
:label="$t('institutions:sites:label:siteNameCN')"
:label="$t('trials:customSite:form:siteName') + 'CN'"
prop="SiteNameCN"
>
<el-input v-model="form.SiteNameCN" />
</el-form-item>
<!-- Alias Name -->
<el-form-item :label="$t('institutions:sites:label:aliasName')">
<el-form-item label="Alias Name: ">
<el-input v-model="form.AliasName" />
</el-form-item>
<!-- <el-form-item label="组织机构代码: ">
<el-form-item label="组织机构代码: ">
<el-input v-model="form.UniqueCode" />
</el-form-item> -->
<!-- Country -->
<el-form-item :label="$t('institutions:sites:label:country')" prop="Country">
</el-form-item>
<el-form-item label="Country: " prop="Country">
<el-input v-model="form.Country" />
</el-form-item>
<!-- City -->
<el-form-item :label="$t('institutions:sites:label:city')" prop="City">
<el-form-item label="City: " prop="City">
<el-input v-model="form.City" />
</el-form-item>
<!-- Address -->
<el-form-item :label="$t('institutions:sites:label:address')" prop="Address">
<el-form-item label="Address: " prop="Address">
<el-input v-model="form.Address" />
</el-form-item>
<!-- Affiliated Hospital -->
<el-form-item :label="$t('institutions:sites:label:affiliatedHospital')">
<el-form-item label="Affiliated Hospital: ">
<el-select
v-model="form.HospitalId"
clearable
placeholder="Please select"
style="width: 100%"
>
<el-option
@@ -63,20 +62,20 @@
/>
</el-select>
</el-form-item>
<!-- Director Name -->
<el-form-item :label="$t('institutions:sites:label:directorName')" prop="DirectorName">
<el-form-item label="Director Name: " prop="DirectorName">
<el-input v-model="form.DirectorName" />
</el-form-item>
<!-- Director Phone -->
<el-form-item :label="$t('institutions:sites:label:directorPhone')" prop="DirectorPhone">
<el-form-item label="Director Phone: " prop="DirectorPhone">
<el-input v-model="form.DirectorPhone" />
</el-form-item>
<!-- Contact Name -->
<el-form-item :label="$t('institutions:sites:label:contactName')" prop="ContactName">
<el-form-item label="Contact Name: " prop="ContactName">
<el-input v-model="form.ContactName" />
</el-form-item>
<!-- Contact Phone -->
<el-form-item :label="$t('institutions:sites:label:contactPhone')" prop="ContactPhone">
<el-form-item label="Contact Phone: " prop="ContactPhone">
<el-input v-model="form.ContactPhone" />
</el-form-item>
</div>
@@ -87,14 +86,14 @@
size="small"
type="primary"
@click="handleCancel"
>{{ $t('common:button:cancel') }}</el-button
>Cancel</el-button
>
<el-button
size="small"
type="primary"
:loading="btnLoading"
@click="handleSave"
>{{ $t('common:button:save') }}</el-button
>Save</el-button
>
</el-form-item>
</div>
@@ -134,35 +133,35 @@ export default {
},
rules: {
SiteName: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ required: true, message: 'Please specify', trigger: 'blur' },
// { max: 50, message: 'The maximum length is 50' }
],
SiteNameCN: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ required: true, message: 'Please specify', trigger: 'blur' },
// { max: 50, message: 'The maximum length is 50' }
],
SiteCode: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' },
{ required: true, message: 'Please specify', trigger: 'blur' },
{ max: 50, message: 'The maximum length is 50' },
],
Country: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' },
{ required: true, message: 'Please specify', trigger: 'blur' },
{ max: 50, message: 'The maximum length is 50' },
],
City: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' },
{ required: true, message: 'Please specify', trigger: 'blur' },
{ max: 50, message: 'The maximum length is 50' },
],
// HospitalId: [
// { required: true, message: 'Please specify', trigger: 'blur' }
// ],
Address: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ required: true, message: 'Please specify', trigger: 'blur' },
],
DirectorName: [{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' }],
DirectorPhone: [{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' }],
ContactName: [{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' }],
ContactPhone: [{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' }],
DirectorName: [{ max: 50, message: 'The maximum length is 50' }],
DirectorPhone: [{ max: 50, message: 'The maximum length is 50' }],
ContactName: [{ max: 50, message: 'The maximum length is 50' }],
ContactPhone: [{ max: 50, message: 'The maximum length is 50' }],
},
loading: false,
show: false,
@@ -181,7 +180,7 @@ export default {
.then((res) => {
this.btnLoading = false
if (res.IsSuccess) {
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.$message.success('Saved successfully')
this.$refs['siteForm'].resetFields()
this.$emit('getList')
this.$emit('close')
@@ -1,49 +1,46 @@
<template>
<box-content>
<div class="search">
<el-form :inline="true" class="base-search-form">
<!-- Site Name -->
<el-form-item :label="$t('institutions:sites:label:siteName')">
<el-form :inline="true" size="small" class="base-search-form">
<el-form-item label="Site Name:">
<el-input v-model="searchData.SiteName" style="width: 120px" />
</el-form-item>
<!-- Alias Name -->
<el-form-item :label="$t('institutions:sites:label:aliasName')">
<el-form-item label="Alias Name:">
<el-input v-model="searchData.AliasName" style="width: 120px" />
</el-form-item>
<!-- Country -->
<el-form-item :label="$t('institutions:sites:label:country')">
<el-form-item label="Country:">
<el-input v-model="searchData.Country" style="width: 120px" />
</el-form-item>
<!-- City -->
<el-form-item :label="$t('institutions:sites:label:city')">
<el-form-item label="City:">
<el-input v-model="searchData.City" style="width: 120px" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch"
>Search</el-button
>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>Reset</el-button
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<div style="margin-left: auto">
<el-button
type="primary"
size="small"
icon="el-icon-plus"
@click="handleAddSystemSite"
>{{ $t("trial:dictionary:institutions:site:addSystemSite") }}
</el-button>
<el-button
type="primary"
size="small"
style="margin-left: 10px"
icon="el-icon-plus"
@click="handleAddSite"
>
{{ $t('common:button:new') }}
>New
</el-button>
</div>
</div>
@@ -56,131 +53,111 @@
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<!-- Site Code -->
<el-table-column
prop="SiteCode"
:label="$t('institutions:sites:label:siteCode')"
label="Site Code"
min-width="120"
show-overflow-tooltip
sortable="custom"
/>
<!-- Site Name -->
<el-table-column
prop="SiteName"
:label="$t('institutions:sites:label:siteName')"
label="Site Name"
min-width="150"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="SiteNameCN"
:label="$t('institutions:sites:label:siteNameCN')"
min-width="150"
show-overflow-tooltip
sortable="custom"
/>
<!-- Alias Name -->
<el-table-column
prop="AliasName"
:label="$t('institutions:sites:label:aliasName')"
label="Alias Name"
min-width="150"
show-overflow-tooltip
sortable="custom"
/>
<!-- <el-table-column
<el-table-column
prop="UniqueCode"
label="组织机构代码"
min-width="130"
show-overflow-tooltip
sortable="custom"
/> -->
<!-- Country -->
/>
<el-table-column
prop="Country"
:label="$t('institutions:sites:label:country')"
label="Country"
min-width="120"
show-overflow-tooltip
sortable="custom"
/>
<!-- City -->
<el-table-column
prop="City"
:label="$t('institutions:sites:label:city')"
label="City"
min-width="120"
show-overflow-tooltip
sortable="custom"
/>
<!-- Address -->
<el-table-column
prop="Address"
:label="$t('institutions:sites:label:address')"
label="Address"
min-width="120"
show-overflow-tooltip
sortable="custom"
/>
<!-- Affiliated Hospital -->
<el-table-column
prop="HospitalName"
:label="$t('institutions:sites:label:affiliatedHospital')"
label="Affiliated Hospital"
min-width="180"
show-overflow-tooltip
sortable="custom"
/>
<!-- Director Name -->
<el-table-column
prop="DirectorName"
:label="$t('institutions:sites:label:directorName')"
label="Director Name"
min-width="160"
show-overflow-tooltip
sortable="custom"
/>
<!-- Director Phone -->
<el-table-column
prop="DirectorPhone"
:label="$t('institutions:sites:label:directorPhone')"
label="Director Phone"
min-width="150"
show-overflow-tooltip
sortable="custom"
/>
<!-- Contact Name -->
<el-table-column
prop="ContactName"
:label="$t('institutions:sites:label:contactName')"
label="Contact Name"
min-width="150"
show-overflow-tooltip
sortable="custom"
/>
<!-- Contact Phone -->
<el-table-column
prop="ContactPhone"
:label="$t('institutions:sites:label:contactPhone')"
label="Contact Phone"
min-width="160"
show-overflow-tooltip
sortable="custom"
/>
<!-- CreateTime -->
<el-table-column
prop="CreateTime"
:label="$t('institutions:sites:label:createTime')"
label="CreateTime"
min-width="160"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column :label="$t('common:action:action')" fixed="right" width="150">
<el-table-column label="Action" fixed="right" width="150">
<template slot-scope="scope">
<el-button
type="text"
circle
icon="el-icon-edit-outline"
title="编辑"
@click="handleEdit(scope.row)"
>
{{ $t('common:button:edit') }}
</el-button>
/>
<el-button
type="text"
circle
icon="el-icon-delete"
title="删除"
@click="handleDelete(scope.row)"
>
{{ $t('common:button:delete') }}
</el-button>
/>
</template>
</el-table-column>
</el-table>
@@ -380,7 +357,7 @@ export default {
data() {
return {
editVisible: false,
title: this.$t('common:button:new'),
title: "Add",
searchData: searchDataDefault(),
list: [],
total: 0,
@@ -462,13 +439,13 @@ export default {
// Site
handleAddSite() {
this.rowData = {};
this.title = this.$t('common:button:new');
this.title = "Add";
this.editVisible = true;
},
// Site
handleEdit(row) {
this.rowData = row;
this.title = this.$t('common:action:edit');
this.title = "Edit";
this.editVisible = true;
},
// Site
@@ -8,20 +8,16 @@
label-width="150px"
>
<div class="base-dialog-body">
<!-- Sponsor Name -->
<el-form-item :label="$t('institutions:sponsors:label:sponsorName')" prop="SponsorName">
<el-form-item label="Sponsor Name: " prop="SponsorName">
<el-input v-model="form.SponsorName" />
</el-form-item>
<!-- Sponsor NameCN -->
<el-form-item :label="$t('institutions:sponsors:label:sponsorNameCN')" prop="SponsorName">
<el-form-item label="Sponsor NameCN: " prop="SponsorName">
<el-input v-model="form.SponsorNameCN" />
</el-form-item>
<!-- Sponsor Code -->
<el-form-item :label="$t('institutions:sponsors:label:sponsorCode')" prop="SponsorCode">
<el-form-item label="Sponsor Code: " prop="SponsorCode">
<el-input v-model="form.SponsorCode" />
</el-form-item>
<!-- Level -->
<el-form-item :label="$t('institutions:sponsors:label:level')">
<el-form-item label="Level: ">
<el-switch
:disabled="!IsTrialLevel"
v-model="form.IsTrialLevel"
@@ -38,17 +34,15 @@
size="small"
type="primary"
@click="handleCancel"
>Cancel</el-button
>
{{ $t('common:button:cancel') }}
</el-button>
<el-button
size="small"
type="primary"
:loading="btnLoading"
@click="handleSave"
>Save</el-button
>
{{ $t('common:button:save') }}
</el-button>
</el-form-item>
</div>
</el-form>
@@ -81,16 +75,16 @@ export default {
},
rules: {
SponsorName: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: "blur" },
{ max: 500, message: this.$t('common:ruleMessage:maxLength') + ' 500' },
{ required: true, message: "Please specify", trigger: "blur" },
{ max: 500, message: "The maximum length is 500" },
],
SponsorNameCN: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: "blur" },
{ max: 500, message: this.$t('common:ruleMessage:maxLength') + ' 500' },
{ required: true, message: "Please specify", trigger: "blur" },
{ max: 500, message: "The maximum length is 500" },
],
SponsorCode: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: "blur" },
{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' },
{ required: true, message: "Please specify", trigger: "blur" },
{ max: 50, message: "The maximum length is 50" },
],
},
};
@@ -109,7 +103,7 @@ export default {
.then((res) => {
this.btnLoading = false;
if (res.IsSuccess) {
this.$message.success(this.$t('common:message:savedSuccessfully'));
this.$message.success("Saved successfully");
this.$refs["sponsorForm"].resetFields();
this.$emit("getList");
this.$emit("close");
@@ -1,30 +1,30 @@
<template>
<box-content>
<div class="search">
<el-form :inline="true" class="base-search-form">
<!-- Sponsor Name -->
<el-form-item :label="$t('institutions:sponsors:label:sponsorName')">
<el-form :inline="true" size="small" class="base-search-form">
<el-form-item label="Sponsor Name:">
<el-input v-model="searchData.SponsorName" style="width: 100px" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch"
>Search</el-button
>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>Reset</el-button
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<span style="margin-left: auto">
<el-button
size="small"
type="primary"
style="margin-left: auto"
icon="el-icon-plus"
@click="handleAddSponsor"
>{{ $t('common:button:new') }}</el-button
>New</el-button
>
</span>
</div>
@@ -37,34 +37,30 @@
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<!-- Sponsor Code -->
<el-table-column
prop="SponsorCode"
:label="$t('institutions:sponsors:label:sponsorCode')"
label="Sponsor Code"
min-width="100"
show-overflow-tooltip
sortable="custom"
/>
<!-- Sponsor Name -->
<el-table-column
prop="SponsorName"
:label="$t('institutions:sponsors:label:sponsorName')"
label="Sponsor Name"
min-width="100"
show-overflow-tooltip
sortable="custom"
/>
<!-- Sponsor NameCN -->
<el-table-column
prop="SponsorNameCN"
:label="$t('institutions:sponsors:label:sponsorNameCN')"
label="Sponsor NameCN"
min-width="100"
show-overflow-tooltip
sortable="custom"
/>
<!-- Level -->
<el-table-column
prop="IsTrialLevel"
:label="$t('institutions:sponsors:label:level')"
label="Level"
show-overflow-tooltip
sortable="custom"
>
@@ -72,20 +68,20 @@
<span>{{ $fd("IsTrialLevel", String(scope.row.IsTrialLevel)) }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('common:action:action')" min-width="150">
<el-table-column label="Action" min-width="150">
<template slot-scope="scope">
<el-button
type="text"
circle
icon="el-icon-edit-outline"
title="编辑"
@click="handleEdit(scope.row)"
>
{{ $t('common:button:edit') }}
</el-button>
/>
<el-button
type="text"
circle
icon="el-icon-delete"
title="删除"
@click="handleDelete(scope.row)"
>
{{ $t('common:button:delete') }}
</el-button>
/>
</template>
</el-table-column>
</el-table>
@@ -164,13 +160,13 @@ export default {
// Sponsor
handleAddSponsor() {
this.rowData = {};
this.title = this.$t('common:button:new');
this.title = "Add";
this.editVisible = true;
},
// Sponsor
handleEdit(row) {
this.rowData = row;
this.title = this.$t('common:action:edit');
this.title = "Edit";
this.editVisible = true;
},
// Sponsor
+4 -8
View File
@@ -1,20 +1,16 @@
<template>
<div class="institution-wrapper">
<el-tabs v-model="activeTab" @tab-click="clickTab">
<!-- Hospitals -->
<el-tab-pane :label="$t('institutions:tab:hospitals')" name="Hospitals">
<el-tab-pane label="Hospitals" name="Hospitals">
<Hospitals v-if="activeTab === 'Hospitals'" />
</el-tab-pane>
<!-- Sites -->
<el-tab-pane :label="$t('institutions:tab:sites')" name="Sites">
<el-tab-pane label="Sites" name="Sites">
<Sites v-if="activeTab === 'Sites'" />
</el-tab-pane>
<!-- CROs -->
<el-tab-pane :label="$t('institutions:tab:CROs')" name="CROs">
<el-tab-pane label="CROs" name="CROs">
<CROs v-if="activeTab === 'CROs'" />
</el-tab-pane>
<!-- Sponsors -->
<el-tab-pane :label="$t('institutions:tab:sponsors')" name="Sponsors">
<el-tab-pane label="Sponsors" name="Sponsors">
<Sponsors v-if="activeTab === 'Sponsors'" />
</el-tab-pane>
</el-tabs>
@@ -2,7 +2,7 @@
<box-content>
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" class="base-search-form">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item label="字典表名称:">
<el-input v-model="searchData.Code" clearable style="width:120px;" />
</el-form-item>
@@ -12,24 +12,12 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
@click="handleSearch"
>
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto">
<el-button type="primary" @click="handleAdd">新建</el-button>
<el-button type="primary" size="mini" @click="handleAdd">新建</el-button>
</span>
</div>
<el-table
@@ -80,22 +68,25 @@
/>
</template>
</el-table-column>
<el-table-column label="操作" width="200" fixed="right">
<el-table-column label="操作" width="300" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
type="primary"
size="mini"
@click="handleEdit(scope.row)"
>
编辑
</el-button>
<el-button
type="text"
type="success"
size="mini"
@click="handleChild(scope.row)"
>
子项
</el-button>
<el-button
type="text"
type="danger"
size="mini"
@click="handleDelete(scope.row)"
>
删除
@@ -63,16 +63,18 @@
/>
</template>
</el-table-column>
<el-table-column label="操作" width="150" fixed="right">
<el-table-column label="操作" width="300" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
type="primary"
size="mini"
@click="handleEdit(scope.row)"
>
编辑
</el-button>
<el-button
type="text"
type="danger"
size="mini"
@click="handleDelete(scope.row)"
>
删除
@@ -2,7 +2,7 @@
<box-content>
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" class="base-search-form">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item label="字典表名称:">
<el-input v-model="searchData.Code" clearable style="width:120px;" />
</el-form-item>
@@ -12,24 +12,12 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
@click="handleSearch"
>
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto">
<el-button type="primary" @click="handleAdd">新建</el-button>
<el-button type="primary" size="mini" @click="handleAdd">新建</el-button>
</span>
</div>
<el-table
@@ -80,22 +68,25 @@
/>
</template>
</el-table-column>
<el-table-column label="操作" width="200" fixed="right">
<el-table-column label="操作" width="300" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
type="primary"
size="mini"
@click="handleEdit(scope.row)"
>
编辑
</el-button>
<el-button
type="text"
type="success"
size="mini"
@click="handleChild(scope.row)"
>
子项
</el-button>
<el-button
type="text"
type="danger"
size="mini"
@click="handleDelete(scope.row)"
>
删除
@@ -183,13 +183,16 @@
<el-button
size="small"
type="primary"
icon="el-icon-plus"
@click="handleAdd"
>{{ $t('common:button:new') }}</el-button>
</template>
<template slot-scope="scope">
<!-- 删除 -->
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.$index)"
>{{ $t('common:button:delete') }}</el-button>
</template>
@@ -65,13 +65,15 @@
<el-table-column label="操作" width="300" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
type="primary"
size="mini"
@click="handleEdit(scope.row)"
>
编辑
</el-button>
<el-button
type="text"
type="danger"
size="mini"
@click="handleDelete(scope.row)"
>
删除
@@ -2,7 +2,7 @@
<box-content>
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" class="base-search-form">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item label="字典表名称:">
<el-input v-model="searchData.Code" clearable style="width:120px;" />
</el-form-item>
@@ -15,25 +15,13 @@
<el-input v-model="searchData.KeyInfo" clearable style="width:120px;" />
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
@click="handleSearch"
>
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto">
<el-button type="primary" @click="handleAdd">新建</el-button>
<el-button type="primary" @click="handleBatchAdd">批量新建</el-button>
<el-button type="primary" size="mini" @click="handleAdd">新建</el-button>
<el-button type="primary" size="mini" @click="handleBatchAdd">批量新建</el-button>
</span>
</div>
<el-table
@@ -98,19 +86,22 @@
<el-table-column label="操作" width="300" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
type="primary"
size="mini"
@click="handleEdit(scope.row)"
>
编辑
</el-button>
<el-button
type="text"
type="success"
size="mini"
@click="handleChild(scope.row)"
>
子项
</el-button>
<el-button
type="text"
type="danger"
size="mini"
@click="handleDelete(scope.row)"
>
删除
@@ -2,7 +2,7 @@
<box-content>
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" class="base-search-form">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item label="字典表名称:">
<el-input v-model="searchData.Code" clearable style="width:120px;" />
</el-form-item>
@@ -12,25 +12,13 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
@click="handleSearch"
>
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto">
<el-button type="primary" @click="handleSetting">配置字典分组</el-button>
<el-button type="primary" @click="handleAdd">新建</el-button>
<el-button type="primary" size="mini" @click="handleSetting">配置字典分组</el-button>
<el-button type="primary" size="mini" @click="handleAdd">新建</el-button>
</span>
</div>
<el-table
@@ -84,19 +72,22 @@
<el-table-column label="操作" width="300" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
type="primary"
size="mini"
@click="handleEdit(scope.row)"
>
编辑
</el-button>
<el-button
type="text"
type="success"
size="mini"
@click="handleChild(scope.row)"
>
子项
</el-button>
<el-button
type="text"
type="danger"
size="mini"
@click="handleDelete(scope.row)"
>
删除
@@ -2,7 +2,7 @@
<box-content>
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" class="base-search-form">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item label="Code:">
<el-input v-model="searchData.Code" clearable style="width:120px;" />
</el-form-item>
@@ -10,24 +10,12 @@
<el-input v-model="searchData.KeyName" clearable style="width:120px;" />
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
@click="handleSearch"
>
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto">
<el-button type="primary" @click="handleAdd">New</el-button>
<el-button type="primary" size="mini" @click="handleAdd">New</el-button>
</span>
</div>
<el-table
@@ -62,16 +50,18 @@
<el-table-column label="Action" width="200" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
type="primary"
size="mini"
@click="handleEdit(scope.row)"
>
编辑
Edit
</el-button>
<el-button
type="text"
type="danger"
size="mini"
@click="handleDelete(scope.row)"
>
删除
Delete
</el-button>
</template>
</el-table-column>
+20 -37
View File
@@ -3,25 +3,15 @@
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" size="mini" class="base-search-form">
<!-- 编号 -->
<el-form-item :label="$t('dictionary:sign:label:code')">
<el-form-item label="编号:">
<el-input v-model="searchData.Code" style="width:100px;" />
</el-form-item>
<!-- 模板 -->
<el-form-item :label="$t('dictionary:sign:label:name')">
<el-form-item label="模板:">
<el-input v-model="searchData.Name" style="width:100px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto;">
@@ -30,7 +20,7 @@
size="mini"
@click="handleAdd"
>
{{ $t('common:button:new') }}
New
</el-button>
</span>
@@ -47,65 +37,58 @@
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<!-- 编号 -->
<el-table-column
prop="Code"
:label="$t('dictionary:sign:label:code')"
label="Code"
sortable="custom"
show-overflow-tooltip
/>
<!-- 模板 -->
<el-table-column
prop="Name"
:label="$t('dictionary:sign:label:name')"
label="模板"
show-overflow-tooltip
sortable="custom"
/>
<!-- 签名内容(EN) -->
<el-table-column
prop="Value"
:label="$t('dictionary:sign:label:value')"
label="签名内容(EN)"
show-overflow-tooltip
/>
<!-- 签名内容(CN) -->
<el-table-column
prop="ValueCN"
:label="$t('dictionary:sign:label:valueCN')"
label="签名内容(CN)"
show-overflow-tooltip
/>
<!-- 更新时间 -->
<el-table-column
prop="UpdateTime"
:label="$t('dictionary:sign:label:updateTime')"
label="更新时间"
show-overflow-tooltip
sortable="custom"
/>
<!-- 创建时间 -->
<el-table-column
prop="CreateTime"
:label="$t('dictionary:sign:label:createTime')"
label="创建时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column :label="$t('common:action:action')" width="200" fixed="right">
<el-table-column label="Action" width="200" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.row)"
>
{{ $t('common:button:edit') }}
Edit
</el-button>
<!-- 场景配置 -->
<el-button
type="text"
@click="handleConfig(scope.row)"
>
{{ $t('dictionary:sign:button:config') }}
场景配置
</el-button>
<el-button type="text" @click="handleDelete(scope.row)">
{{ $t('common:button:delete') }}
</el-button>
<el-button type="text" @click="handleDelete(scope.row)">Delete</el-button>
</template>
</el-table-column>
@@ -130,7 +113,7 @@
<el-dialog
v-if="configVisible"
:visible.sync="configVisible"
:title="$t('dictionary:sign:button:config')"
title="场景配置"
:fullscreen="true"
append-to-body
custom-class="base-dialog-wrapper"
@@ -184,13 +167,13 @@ export default {
//
handleAdd() {
this.rowData = {}
this.title = this.$t('common:button:new')
this.title = 'Add'
this.editVisible = true
},
//
handleEdit(row) {
this.rowData = { ...row }
this.title = this.$t('common:button:edit')
this.title = 'Edit'
this.editVisible = true
},
//
@@ -2,7 +2,7 @@
<box-content>
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" class="base-search-form">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item :label="$t('dictionary:browser:search:title')">
<el-input v-model="searchData.Title" style="width: 100px" />
</el-form-item>
@@ -23,7 +23,7 @@
</el-form-item>
</el-form>
<span style="margin-left: auto">
<el-button type="primary" @click="handleAdd">
<el-button type="primary" size="mini" @click="handleAdd">
{{ $t("dictionary:browser:button:add") }}
</el-button>
</span>
@@ -33,7 +33,7 @@ export default {
let browserType = this.getExplore();
let type = browserType.split(": ")[0];
let No = browserType.split(": ")[1].split(".")[0];
// console.log(type, No);
console.log(type, No);
if (type !== "Chrome" && type !== "Edge") {
this.tip = this.$t("browser:tip:changeBorwser");
return (this.visible = true);
@@ -3,19 +3,18 @@
ref="organForm"
v-loading="loading"
:model="form"
label-width="170px"
label-width="130px"
size="small"
:rules="rules"
>
<div class="base-dialog-body">
<!-- 标准名称 -->
<el-form-item :label="$t('trials:auditRecord:table:criterion')" prop="CriterionName">
<el-form-item label="标准名称" prop="CriterionName">
<el-input
v-model="form.CriterionName"
/>
</el-form-item>
<!-- 标准类型 -->
<el-form-item :label="$t('dictionary:template:criterionConfig:table:criterionType')" prop="CriterionType">
<el-form-item label="标准类型" prop="CriterionType">
<el-select v-model="form.CriterionType">
<el-option
v-for="item of $d.CriterionType"
@@ -25,8 +24,7 @@
/>
</el-select>
</el-form-item>
<!-- 标准分组 -->
<el-form-item :label="$t('dictionary:template:criterionConfig:table:criterionGroup')" prop="CriterionGroup">
<el-form-item label="标准分组" prop="CriterionGroup">
<el-select v-model="form.CriterionGroup">
<el-option
v-for="item of $d.CriterionGroup"
@@ -36,26 +34,23 @@
/>
</el-select>
</el-form-item>
<!-- 是否配置完成 -->
<el-form-item v-if="form.Id !== ''" :label="$t('dictionary:template:criterionConfig:table:isCompleteConfig')">
<el-form-item v-if="form.Id !== ''" label="是否配置完成">
<el-switch v-model="form.IsCompleteConfig" />
</el-form-item>
<!-- 描述 -->
<el-form-item :label="$t('dictionary:template:criterionConfig:table:description')">
<el-form-item label="描述">
<el-input
v-model="form.Description"
/>
</el-form-item>
<!-- 显示序号 -->
<el-form-item :label="$t('dictionary:template:criterionConfig:table:showOrder')" prop="ShowOrder">
<el-form-item label="显示序号: " prop="ShowOrder">
<el-input-number v-model="form.ShowOrder" :min="0" style="width:100%;" />
</el-form-item>
<!-- 是否启用 -->
<el-form-item v-if="form.Id !== ''" :label="$t('dictionary:template:criterionConfig:table:isEnable')">
<el-form-item v-if="form.Id !== ''" label="是否启用">
<el-switch v-model="form.IsEnable" />
</el-form-item>
<!-- eICRF仅展示阅片Tab -->
<el-form-item v-if="form.Id !== ''" :label="$t('dictionary:template:criterionConfig:table:isECRFShowInDicomReading')">
<el-form-item v-if="form.Id !== ''" label="eICRF仅展示阅片Tab">
<el-switch v-model="form.IseCRFShowInDicomReading" />
</el-form-item>
</div>
@@ -8,36 +8,32 @@
label-width="160px"
size="small"
>
<el-form-item :label="$t('template:anonymization:label:group')" prop="Group">
<el-form-item label="Group: " prop="Group">
<el-input v-model="form.Group" />
</el-form-item>
<el-form-item :label="$t('template:anonymization:label:element')" prop="Group">
<el-form-item label="Element: " prop="Group">
<el-input v-model="form.Element" />
</el-form-item>
<!-- tag Description -->
<el-form-item :label="$t('template:anonymization:label:tagDescription')" prop="Group">
<el-form-item label="tag Description: " prop="Group">
<el-input v-model="form.TagDescription" />
</el-form-item>
<!-- Tag DescriptionCN -->
<el-form-item :label="$t('template:anonymization:label:tagDescriptionCN')" prop="Group">
<el-form-item label="Tag DescriptionCN: " prop="Group">
<el-input v-model="form.TagDescriptionCN" />
</el-form-item>
<!-- Value Representation -->
<el-form-item :label="$t('template:anonymization:label:valueRepresentation')" prop="Group">
<el-form-item label="Value Representation: " prop="Group">
<el-input v-model="form.ValueRepresentation" />
</el-form-item>
<!-- Is Fixed -->
<el-form-item :label="$t('template:anonymization:label:isFixed')">
<el-form-item label="Is Fixed: ">
<el-switch
v-model="form.IsFixed"
:active-value="true"
:inactive-value="false"
/>
</el-form-item>
<el-form-item :label="$t('template:anonymization:label:valueReplace')">
<el-form-item label="Replace Value: ">
<el-input v-model="form.ReplaceValue" />
</el-form-item>
<el-form-item :label="$t('template:anonymization:label:isEnable')">
<el-form-item label="Is Enable: ">
<el-switch
v-model="form.IsEnable"
:active-value="true"
@@ -47,8 +43,8 @@
</el-form>
</template>
<template slot="dialog-footer">
<el-button :disabled="btnLoading" size="small" type="primary" @click="handleCancle">{{ $t('common:button:cancel') }}</el-button>
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave">{{ $t('common:button:save') }}</el-button>
<el-button :disabled="btnLoading" size="small" type="primary" @click="handleCancle">Cancel</el-button>
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave">Save</el-button>
</template>
</base-model>
</template>
@@ -86,7 +82,7 @@ export default {
IsAdd: false
},
rules: {
Group: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }]
Group: [{ required: true, message: 'Please specify', trigger: 'blur' }]
},
model_cfg: { visible: false, showClose: true, width: '600px', title: '' }
}
@@ -112,7 +108,7 @@ export default {
this.btnLoading = true
addOrUpdateSystemAnonymization(this.form).then(res => {
this.btnLoading = false
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.$message.success('Saved successfully!')
this.model_cfg.visible = false
this.$emit('getList')
}).catch(() => {
@@ -2,21 +2,17 @@
<box-content>
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" class="base-search-form">
<!-- Group -->
<el-form-item :label="$t('template:anonymization:label:group')">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item label="Group:">
<el-input v-model="searchData.Group" clearable style="width:120px;" />
</el-form-item>
<!-- Element -->
<el-form-item :label="$t('template:anonymization:label:element')">
<el-form-item label="Element:">
<el-input v-model="searchData.Element" clearable style="width:120px;" />
</el-form-item>
<!-- Tag Description -->
<el-form-item :label="$t('template:anonymization:label:tagDescription')">
<el-form-item label="Tag Description:">
<el-input v-model="searchData.TagDescription" clearable style="width:120px;" />
</el-form-item>
<!-- Tag DescriptionCN -->
<el-form-item :label="$t('template:anonymization:label:tagDescriptionCN')">
<el-form-item label="Tag DescriptionCN:">
<el-input v-model="searchData.TagDescriptionCN" clearable style="width:120px;" />
</el-form-item>
<el-form-item>
@@ -33,7 +29,7 @@
</el-form-item>
</el-form>
<span style="margin-left:auto">
<el-button type="primary" @click="handleAdd">{{ $t('common:button:new') }}</el-button>
<el-button type="primary" size="mini" @click="handleAdd">New</el-button>
</span>
</div>
@@ -42,42 +38,37 @@
v-adaptive="{bottomOffset:45}"
:data="list"
stripe
size="small"
height="100"
>
<el-table-column type="index" width="60" />
<!-- Group -->
<el-table-column
prop="Group"
:label="$t('template:anonymization:label:group')"
label="Group"
show-overflow-tooltip
/>
<!-- Element -->
<el-table-column
prop="Element"
:label="$t('template:anonymization:label:element')"
label="Element"
show-overflow-tooltip
min-width="110"
/>
<!-- Tag Description -->
<el-table-column
prop="TagDescription"
:label="$t('template:anonymization:label:tagDescription')"
label="Tag Description"
min-width="110"
/>
<!-- Tag DescriptionCN -->
<el-table-column
prop="TagDescriptionCN"
:label="$t('template:anonymization:label:tagDescriptionCN')"
label="Tag DescriptionCN"
min-width="110"
/>
<!-- Value Representation -->
<el-table-column
prop="ValueRepresentation"
:label="$t('template:anonymization:label:valueRepresentation')"
label="Value Representation"
min-width="110"
/>
<!-- Is Fixed -->
<el-table-column :label="$t('template:anonymization:label:isFixed')" width="100">
<el-table-column label="Is Fixed" width="100">
<template slot-scope="scope">
<el-switch
v-model="scope.row.IsFixed"
@@ -87,14 +78,12 @@
/>
</template>
</el-table-column>
<!-- Value Replace -->
<el-table-column
prop="ReplaceValue"
:label="$t('template:anonymization:label:valueReplace')"
label="Value Replace"
min-width="110"
/>
<!-- Is Enable -->
<el-table-column :label="$t('template:anonymization:label:isEnable')" width="100" fixed="right">
<el-table-column label="Is Enable" width="100" fixed="right">
<template slot-scope="scope">
<el-switch
v-model="scope.row.IsEnable"
@@ -104,19 +93,21 @@
/>
</template>
</el-table-column>
<el-table-column :label="$t('common:action:action')" width="200" fixed="right">
<el-table-column label="Action" width="200" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
type="primary"
size="mini"
@click="handleEdit(scope.row)"
>
{{ $t('common:button:edit') }}
Edit
</el-button>
<el-button
type="text"
type="danger"
size="mini"
@click="handleDelete(scope.row)"
>
{{ $t('common:button:delete') }}
Delete
</el-button>
</template>
</el-table-column>
@@ -162,7 +153,7 @@ export default {
switchChange(event, item) {
this.loading = true
addOrUpdateSystemAnonymization(item).then(res => {
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.$message.success('Saved successfully!')
this.loading = false
}).catch(() => {
this.loading = false
@@ -170,12 +161,12 @@ export default {
},
handleAdd() {
this.$nextTick(() => {
this.$refs['AddDICOMConfig'].openDialog(this.$t('common:button:new'), {})
this.$refs['AddDICOMConfig'].openDialog('New Anonymization', {})
})
},
handleEdit(row) {
this.$nextTick(() => {
this.$refs['AddDICOMConfig'].openDialog(this.$t('common:action:edit'), row)
this.$refs['AddDICOMConfig'].openDialog('Edit Anonymization', row)
})
},
handleDelete(row) {
@@ -2,13 +2,11 @@
<box-content>
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" class="base-search-form">
<!-- 临床数据名称 -->
<el-form-item :label="$t('trials:processCfg:title:clinicalDataCfg')">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item label="临床数据名称">
<el-input v-model="searchData.ClinicalDataSetName" />
</el-form-item>
<!-- 数据级别 -->
<el-form-item :label="$t('trials:processCfg:title:dataLevel')">
<el-form-item label="数据级别">
<el-select v-model="searchData.ClinicalDataLevel" clearable style="width:120px;">
<el-option
v-for="(item,index) of $d.ClinicalLevel"
@@ -18,8 +16,7 @@
/>
</el-select>
</el-form-item>
<!-- 传输方式 -->
<el-form-item :label="$t('trials:processCfg:title:transferType')">
<el-form-item label="传输方式">
<el-select v-model="searchData.ClinicalUploadType" clearable style="width:120px;">
<el-option
v-for="(item,index) of $d.ClinicalUploadType"
@@ -43,8 +40,7 @@
</el-form-item>
</el-form>
<span style="margin-left:auto">
<!-- 新增 -->
<el-button type="primary" @click="handleAdd">{{ $t('common:button:new') }}</el-button>
<el-button type="primary" size="mini" @click="handleAdd">新增</el-button>
</span>
</div>
@@ -53,152 +49,113 @@
v-adaptive="{bottomOffset:45}"
:data="list"
stripe
size="small"
height="100"
>
<el-table-column type="index" width="40" />
<!-- 临床数据名称 -->
<el-table-column type="index" width="60" />
<el-table-column
prop="ClinicalDataSetName"
:label="$t('trials:processCfg:title:clinicalDataName')"
label="临床数据名称"
show-overflow-tooltip
min-width="160"
/>
<!-- 临床数据名称EN -->
<el-table-column
prop="ClinicalDataSetEnName"
:label="$t('dictionary:clinicalData:label:clinicalDataNameEn')"
label="临床数据名称(EN"
show-overflow-tooltip
min-width="190"
/>
<!-- 上传人 -->
<el-table-column
prop="UploadRole"
:label="$t('trials:processCfg:title:uploader')"
:label="$t('trials:uploadMonitor:table:uploader')"
show-overflow-tooltip
min-width="120"
>
<template slot-scope="scope">
{{ $fd('ClinicalDataUploadRole',scope.row.UploadRole) }}
</template>
</el-table-column>
<!-- 数据级别 -->
<el-table-column
prop="ClinicalDataLevel"
:label="$t('trials:processCfg:title:dataLevel')"
label="数据级别"
show-overflow-tooltip
min-width="120"
>
<template slot-scope="scope">
{{ $fd('ClinicalLevel',scope.row.ClinicalDataLevel) }}
</template>
</el-table-column>
<!-- 传输方式 -->
<el-table-column
prop="ClinicalUploadType"
:label="$t('trials:processCfg:title:transferType')"
label="传输方式"
show-overflow-tooltip
min-width="120"
>
<template slot-scope="scope">
{{ $fd('ClinicalUploadType',scope.row.ClinicalUploadType) }}
</template>
</el-table-column>
<!-- 匹配的阅片标准 -->
<el-table-column
prop="CriterionEnumList"
:label="$t('trials:processCfg:label:criterion')"
:label="$t('trials:auditRecord:table:criterion')"
show-overflow-tooltip
min-width="200"
>
<template slot-scope="scope">
{{ scope.row.CriterionEnumList.map(v => $fd('CriterionType', v)).toString() }}
</template>
</el-table-column>
<!-- 模板名称 -->
<el-table-column
prop="FileName"
:label="$t('trials:processCfg:title:module')"
label="模板名称"
show-overflow-tooltip
min-width="120"
>
<template slot-scope="scope">
{{ scope.row.FileName }}
</template>
</el-table-column>
<!-- 模板英文名称 -->
<el-table-column
prop="EnFileName"
:label="$t('trials:processCfg:title:enModule')"
show-overflow-tooltip
min-width="140"
>
<template slot-scope="scope">
{{ scope.row.EnFileName }}
</template>
</el-table-column>
<!-- 状态 -->
<el-table-column
prop="IsEnable"
:label="$t('dictionary:clinicalData:label:status')"
label="状态"
show-overflow-tooltip
min-width="120"
>
<template slot-scope="scope">
<!-- <el-tag v-if="scope.row.IsEnable">启用</el-tag>
<el-tag v-else type="danger">禁用</el-tag> -->
<el-tag v-if="!scope.row.IsEnable" type="danger">{{ $fd('IsEnable', scope.row.IsEnable) }}</el-tag>
<el-tag v-else>{{ $fd('IsEnable', scope.row.IsEnable) }}</el-tag>
<el-tag v-if="scope.row.IsEnable">启用</el-tag>
<el-tag v-else type="danger">禁用</el-tag>
</template>
</el-table-column>
<!-- 创建时间 -->
<el-table-column
prop="CreateTime"
:label="$t('dictionary:clinicalData:label:CreateTime')"
label="创建时间"
show-overflow-tooltip
min-width="140"
/>
<el-table-column :label="$t('common:action:action')" min-width="250" fixed="right">
<el-table-column label="操作" width="340" fixed="right">
<template slot-scope="scope">
<!-- 问题配置 -->
<el-button
type="text"
type="primary"
size="mini"
:disabled="scope.row.ClinicalUploadType !== 2"
@click="handleConfigQuestion(scope.row)"
>
{{ $t('dictionary:clinicalData:button:qsConfig') }}
问题配置
</el-button>
<!-- 下载 -->
<el-button
v-if="$i18n.locale === 'zh'"
type="text"
type="primary"
size="mini"
:disabled="!scope.row.FileName"
@click="handleDownloadTpl(scope.row.Path)"
@click="handleDownloadTpl(scope.row)"
>
{{ $t('common:button:download') }}
下载
</el-button>
<!-- 下载 -->
<el-button
v-else
type="text"
:disabled="!scope.row.EnFileName"
@click="handleDownloadTpl(scope.row.EnPath)"
>
{{ $t('common:button:download') }}
</el-button>
<!-- 编辑 -->
<el-button
type="text"
type="primary"
size="mini"
@click="handleEdit(scope.row)"
>
{{ $t('common:action:edit') }}
编辑
</el-button>
<!-- 删除 -->
<el-button
type="text"
type="danger"
size="mini"
@click="handleDelete(scope.row)"
>
{{ $t('common:button:delete') }}
删除
</el-button>
</template>
</el-table-column>
@@ -208,11 +165,11 @@
:visible.sync="addOrEditCD.visible"
:close-on-click-modal="false"
:title="addOrEditCD.title"
width="600px"
width="500px"
append-to-body
custom-class="base-dialog-wrapper"
>
<clinical-data-form ref="addOrEditCD" :data="currentRow" @close="addOrEditCD.visible = false" @getList="getList" />
<ClinicalDataForm ref="addOrEditCD" :data="currentRow" @close="addOrEditCD.visible = false" @getList="getList" />
</el-dialog>
<el-dialog
v-if="QuestionConfigVisible.visible"
@@ -223,7 +180,7 @@
append-to-body
custom-class="base-dialog-wrapper"
>
<clinical-question-config ref="QuestionConfigVisible" :data="currentRow" @close="QuestionConfigVisible.visible = false" @getList="getList" />
<ClinicalQuestionConfig ref="QuestionConfigVisible" :data="currentRow" @close="QuestionConfigVisible.visible = false" @getList="getList" />
</el-dialog>
</box-content>
</template>
@@ -261,8 +218,7 @@ export default {
handleConfigQuestion(row) {
this.currentRow = { ...row }
this.QuestionConfigVisible.visible = true
//
this.QuestionConfigVisible.title = this.$t('dictionary:clinicalData:button:qsConfig')
this.QuestionConfigVisible.title = '问题配置'
},
//
getList() {
@@ -275,13 +231,13 @@ export default {
//
handleAdd() {
this.currentRow = {}
this.addOrEditCD.title = this.$t('common:button:new')
this.addOrEditCD.title = '新增'
this.addOrEditCD.visible = true
},
//
handleEdit(row) {
this.currentRow = { ...row }
this.addOrEditCD.title = this.$t('common:action:edit')
this.addOrEditCD.title = '编辑'
this.addOrEditCD.visible = true
},
//
@@ -297,13 +253,13 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.getList()
this.$message.success(this.$t('common:message:deletedSuccessfully'))
this.$message.success('删除成功!')
}
}).catch(() => { this.loading = false })
})
},
handleDownloadTpl(path) {
window.open(this.OSSclientConfig.basePath + path, '_blank')
handleDownloadTpl(row) {
window.open(this.OSSclientConfig.basePath + row.Path, '_blank')
},
//
handleSortByColumn(column) {
@@ -5,13 +5,12 @@
:model="form"
size="small"
:rules="rules"
label-width="200px"
label-width="110px"
>
<div class="base-dialog-body">
<!-- 临床数据名称 -->
<el-form-item :label="$t('trials:processCfg:title:clinicalDataName')" prop="ClinicalDataSetEnum">
<el-form-item label="临床数据名称" prop="ClinicalDataSetEnum">
<!-- <el-input v-model="form.ClinicalDataSetName" /> -->
<el-select v-model="form.ClinicalDataSetEnum" style="width:100%;">
<el-select v-model="form.ClinicalDataSetEnum" placeholder="请选择" style="width:100%;">
<el-option
v-for="(item,index) of $d.ClinicalDataType"
:key="index"
@@ -20,10 +19,11 @@
/>
</el-select>
</el-form-item>
<!-- 上传人 -->
<el-form-item :label="$t('trials:processCfg:title:uploader')" prop="UploadRole">
<el-form-item :label="$t('trials:studyList:table:uploader')" prop="UploadRole">
<el-select
v-model="form.UploadRole"
placeholder="请选择"
style="width:100%;"
@change="handleUploadRoleChange"
>
@@ -35,10 +35,11 @@
/>
</el-select>
</el-form-item>
<!-- 数据级别 -->
<el-form-item :label="$t('trials:processCfg:title:dataLevel')" prop="ClinicalDataLevel">
<el-form-item label="数据级别" prop="ClinicalDataLevel">
<el-select
v-model="form.ClinicalDataLevel"
placeholder="请选择"
style="width:100%;"
>
<el-option
@@ -50,10 +51,11 @@
/>
</el-select>
</el-form-item>
<!-- 传输方式 -->
<el-form-item :label="$t('trials:processCfg:title:transferType')" prop="ClinicalUploadType">
<el-form-item label="传输方式" prop="ClinicalUploadType">
<el-select
v-model="form.ClinicalUploadType"
placeholder="请选择"
style="width:100%;"
>
<el-option
@@ -65,13 +67,13 @@
/>
</el-select>
</el-form-item>
<!-- 阅片标准 -->
<el-form-item
:label="$t('trials:processCfg:label:criterion')"
:label="$t('trials:auditRecord:table:criterion')"
prop="CriterionEnumList"
>
<el-select
v-model="form.CriterionEnumList"
placeholder="请选择"
multiple
style="width:100%;"
>
@@ -83,8 +85,7 @@
/>
</el-select>
</el-form-item>
<!-- 模板 -->
<el-form-item v-if="form.ClinicalUploadType === 1" :label="$t('trials:processCfg:title:module')">
<el-form-item v-if="form.ClinicalUploadType === 1" label="模板: ">
<div class="upload-container">
<el-upload
class="upload-demo"
@@ -100,51 +101,19 @@
:on-exceed="handleExceed"
:disabled="form.Type === ''"
>
<el-button size="small" type="primary">
{{ $t('trials:processCfg:button:select') }}
</el-button>
<el-button size="small" type="primary">选择</el-button>
<span
slot="tip"
style="margin-left:10px;"
class="el-upload__tip"
>
{{ $t('system:tip:file:docx') }}
(必须是doc/docx格式)
</span>
</el-upload>
</div>
</el-form-item>
<!-- 英文模板 -->
<el-form-item v-if="form.ClinicalUploadType === 1" :label="$t('trials:processCfg:title:enModule')">
<div class="upload-container">
<el-upload
class="upload-demo"
action
accept=".doc,.docx"
:before-upload="beforeUploadEnFile"
:http-request="handleUploadEnFile"
:on-preview="handlePreview"
:on-remove="handleRemoveEnFile"
:show-file-list="true"
:file-list="enFileList"
:limit="1"
:on-exceed="handleExceed"
:disabled="form.Type === ''"
>
<el-button size="small" type="primary">
{{ $t('trials:processCfg:button:select') }}
</el-button>
<span
slot="tip"
style="margin-left:10px;"
class="el-upload__tip"
>
{{ $t('system:tip:file:docx') }}
</span>
</el-upload>
</div>
</el-form-item>
<!-- 是否启用 -->
<el-form-item v-if="form.Id !== ''" :label="$t('dictionary:clinicalData:label:IsEnable')">
<el-form-item v-if="form.Id !== ''" label="是否启用">
<el-switch v-model="form.IsEnable" />
</el-form-item>
</div>
@@ -191,8 +160,6 @@ export default {
UploadRole: null,
FileName: '',
Path: '',
EnFileName: '',
EnPath: '',
IsEnable: true,
CriterionEnumList: []
},
@@ -206,7 +173,6 @@ export default {
loading: false,
btnLoading: false,
fileList: [],
enFileList: [],
systemCriterionSelectList: []
}
},
@@ -229,14 +195,6 @@ export default {
}
]
}
if (this.data.EnPath) {
this.enFileList = [
{
name: this.data.EnFileName,
path: this.data.EnPath
}
]
}
}
},
save() {
@@ -273,7 +231,7 @@ export default {
this.fileList = []
return true
} else {
this.$alert(this.$t('system:tip:file:docx'))
this.$alert('(必须是doc/docx格式)')
return false
}
@@ -289,33 +247,7 @@ export default {
}
},
handleExceed(files, fileList) {
this.$message.warning(this.$t('trials:processCfg:title:onlyOneFile'))
},
beforeUploadEnFile(file) {
//
if (this.checkFileSuffix(file.name)) {
this.enFileList = []
return true
} else {
this.$alert(this.$t('system:tip:file:docx'))
return false
}
},
async handleUploadEnFile(param) {
this.loading = true
var fileBlob = await this.fileToBlob(param.file)
const res = await this.OSSclient.put(`/System/ClinicalDataTemplate/${param.file.name}`, fileBlob)
this.form.EnFileName = res.name
this.form.EnPath = this.$getObjectName(res.url)
let file = { name: res.name, path: this.$getObjectName(res.url), url:this.$getObjectName(res.url) }
this.enFileList.push(file)
this.loading = false
},
handleRemoveEnFile() {
this.enFileList = []
this.form.EnPath = ''
this.form.EnFileName = ''
this.$message.warning(`只允许上传一个文件`)
},
checkFileSuffix(fileName) {
var typeArr = ['doc', 'docx']
@@ -343,7 +275,7 @@ export default {
</script>
<style lang="scss" scoped>
.upload-container{
::v-deep .el-upload {
/deep/ .el-upload {
width: 100%;
text-align: left;
}
@@ -2,49 +2,39 @@
<div class="criterion-config">
<div class="search-form" style="display:flex;justify-content: space-between;">
<el-form :inline="true" size="mini" class="base-search-form">
<!-- 名称 -->
<el-form-item :label="$t('trials:readingUnit:qsList:title:qName')">
<el-form-item label="名称">
<el-input v-model="searchData.QuestionName" clearable style="width:120px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
<el-button type="primary" @click="handleReset">重置</el-button>
<el-button type="primary" @click="handleSearch">查询</el-button>
</el-form-item>
</el-form>
<div>
<!-- 预览 -->
<el-button
:disabled="list.length === 0"
size="mini"
type="primary"
@click="preview.visible = true"
>
{{ $t('common:button:preview') }}
预览
</el-button>
<!-- 添加 -->
<el-button
v-if="Object.keys(data).length > 0 && !data.IsBeUsed"
size="mini"
type="primary"
@click="handleAdd"
>
{{ $t('common:button:add') }}
添加
</el-button>
<!-- 应用 -->
<el-button
size="mini"
type="primary"
@click="handleApply"
>
{{ $t('dictionary:clinicalDataQs:button:apply') }}
应用
</el-button>
</div>
</div>
@@ -62,92 +52,81 @@
label=""
width="50"
/>
<!-- 名称 -->
<el-table-column
prop="QuestionName"
:label="$t('trials:readingUnit:qsList:title:qName')"
label="名称"
show-overflow-tooltip
/>
<!-- 名称(EN) -->
<el-table-column
prop="QuestionEnName"
:label="$t('trials:readingUnit:qsList:title:qNameEn')"
label="名称(EN)"
show-overflow-tooltip
/>
<!-- 题型 -->
<el-table-column
prop="Type"
:label="$t('trials:readingUnit:qsList:title:type')"
label="题型"
show-overflow-tooltip
>
<template slot-scope="scope">
{{ $fd('ClinicalQuestionType',scope.row.ClinicalQuestionType) }}
</template>
</el-table-column>
<!-- 选项 -->
<el-table-column
prop="TypeValue"
:label="$t('trials:readingUnit:qsList:title:type')"
label="选项"
show-overflow-tooltip
>
</el-table-column>
<!-- 是否显示 -->
<el-table-column
prop="ClinicalQuestionShowEnum"
:label="$t('trials:readingUnit:qsList:title:isShow')"
label="是否显示"
show-overflow-tooltip
>
<template slot-scope="scope">
{{ $fd('ShowQuestion',scope.row.ClinicalQuestionShowEnum) }}
</template>
</el-table-column>
<!-- 是否必填 -->
<el-table-column
prop="IsRequired"
:label="$t('trials:qcCfg:table:isRequired')"
label="是否必填"
show-overflow-tooltip
>
<template slot-scope="scope">
{{ $fd('YesOrNo',scope.row.IsRequired) }}
</template>
</el-table-column>
<!-- 操作 -->
<el-table-column
prop=""
:label="$t('common:action:action')"
label="操作"
width="250"
show-overflow-tooltip
fixed="right"
>
<template slot-scope="scope">
<!-- 编辑 -->
<el-button
v-if="Object.keys(data).length > 0 && !(data.IsCompleteConfig || data.IsBeUsed)"
type="primary"
size="mini"
@click="handleEdit(scope.row)"
>
{{ $t('trials:readingUnit:qsList:title:edit') }}
编辑
</el-button>
<!-- 查看 -->
<el-button
v-else
type="primary"
size="mini"
@click="handleLook(scope.row)"
>
{{ $t('trials:enrolledReviews:button:view') }}
查看
</el-button>
<!-- 表格问题 -->
<el-button
type="primary"
size="mini"
:disabled="scope.row.ClinicalQuestionType !== 'table'"
@click="handleConfig(scope.row)"
>
{{ $t('trials:readingUnit:qsList:title:tableQs') }}
表格问题
</el-button>
<!-- 删除 -->
<el-button
v-if="Object.keys(data).length > 0 && !(data.IsCompleteConfig || data.IsBeUsed)"
type="danger"
@@ -155,7 +134,7 @@
:disabled="scope.row.IsEnable"
@click="handleDelete(scope.row)"
>
{{ $t('common:button:delete') }}
删除
</el-button>
</template>
</el-table-column>
@@ -170,7 +149,7 @@
append-to-body
custom-class="base-dialog-wrapper"
>
<clinical-question-form
<ClinicalQuestionForm
ref="addOrEdit"
:list="this.list"
:clinical-id="clinicalId"
@@ -275,8 +254,7 @@ export default {
applySystemClinical({
SystemClinicalId: this.clinicalId
}).then(res => {
//
this.$message.success(this.$t('dictionary:clinicalDataQs:message:msg1'))
this.$message.success('应用成功')
this.$emit('close')
})
},
@@ -293,19 +271,19 @@ export default {
handleAdd() {
this.rowData = { SystemClinicalId: this.data.Id, Id: '' }
this.type = 'add'
this.addOrEdit.title = this.$t('common:button:add')
this.addOrEdit.title = '添加'
this.addOrEdit.visible = true
},
handleLook(row) {
this.rowData = { ...row }
this.type = 'look'
this.addOrEdit.title = this.$t('trials:enrolledReviews:button:view')
this.addOrEdit.title = '查看'
this.addOrEdit.visible = true
},
handleEdit(row) {
this.rowData = { ...row }
this.type = 'edit'
this.addOrEdit.title = this.$t('trials:readingUnit:qsList:title:edit')
this.addOrEdit.title = '编辑'
this.addOrEdit.visible = true
},
handleDelete(row) {
@@ -320,14 +298,14 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.getList()
this.$message.success(this.$t('common:message:deletedSuccessfully'))
this.$message.success('删除成功!')
}
}).catch(() => { this.loading = false })
})
},
handleConfig(row) {
this.rowData = { ...row }
this.config.title = this.$t('trials:readingUnit:qsList:title:tableQs')
this.config.title = `表格问题`
this.config.visible = true
},
//
@@ -6,11 +6,10 @@
size="small"
:rules="rules"
:disabled="type === 'look'"
label-width="180px"
label-width="130px"
>
<div class="base-dialog-body">
<!-- 类型 -->
<el-form-item :label="$t('trials:readingUnit:qsList:title:type')" prop="ClinicalQuestionType">
<el-form-item label="类型" prop="ClinicalQuestionType">
<el-select v-model="form.ClinicalQuestionType" clearable @change="((val)=>{typeChange(val, form)})">
<el-option
v-for="item of $d.ClinicalQuestionType"
@@ -20,35 +19,31 @@
/>
</el-select>
</el-form-item>
<!-- 问题名称 -->
<el-form-item
:label="$t('trials:readingUnit:qsList:title:qName')"
label="问题名称"
prop="QuestionName"
>
<el-input v-model="form.QuestionName" />
</el-form-item>
<!-- 问题名称EN -->
<el-form-item
:label="$t('dictionary:template:criterionConfig:title:qsNameEn')"
label="问题名称(EN"
prop="QuestionEnName"
>
<el-input v-model="form.QuestionEnName" />
</el-form-item>
<!-- 选项 -->
<el-form-item
v-if="form.ClinicalQuestionType === 'select' || form.ClinicalQuestionType === 'radio' || form.ClinicalQuestionType === 'checkbox'"
:label="$t('trials:qcCfg:table:typeValue')"
label="选项"
prop="TypeValue"
>
<el-input
v-model="form.TypeValue"
:placeholder="$t('trials:qcCfg:message:typeValue')"
placeholder="选项请用‘|’分割多个选项"
/>
</el-form-item>
<!-- 小数位数 -->
<el-form-item
v-if="form.ClinicalQuestionType === 'number'"
:label="$t('trials:processCfg:form:digitPlaces')"
label="小数位数"
prop="DigitPlaces"
>
<el-radio-group
@@ -64,17 +59,16 @@
</el-radio>
</el-radio-group>
</el-form-item>
<!-- 单位 -->
<el-form-item
v-if="form.ClinicalQuestionType === 'number'"
:label="$t('trials:readingUnit:qsList:title:unit')"
label="单位"
prop="Unit"
>
<el-input
v-model="form.Unit"
/>
</el-form-item>
<el-form-item v-if="form.ClinicalQuestionType !== 'group'" :label="$t('trials:readingUnit:qsList:title:isShow')" prop="ClinicalQuestionShowEnum">
<el-form-item v-if="form.ClinicalQuestionType !== 'group'" label="是否显示" prop="ClinicalQuestionShowEnum">
<el-radio-group
v-model="form.ClinicalQuestionShowEnum"
@change="((val)=>{isShowQuestionChange(val, form)})"
@@ -88,10 +82,9 @@
</el-radio>
</el-radio-group>
</el-form-item>
<!-- 显示依赖父问题 -->
<el-form-item
v-if="form.ClinicalQuestionType !== 'group' && form.ClinicalQuestionShowEnum===1"
:label="$t('trials:readingUnit:qsList:title:parentId')"
label="显示依赖父问题"
prop="ParentId"
>
<el-select
@@ -108,7 +101,7 @@
</el-select>
</el-form-item>
<!-- 显示时依赖父问题触发值 -->
<el-form-item v-if="form.ParentId && form.ClinicalQuestionShowEnum===1" :label="$t('trials:qcCfg:table:parentTriggerValue')" prop="ParentTriggerValue">
<el-form-item v-if="form.ParentId && form.ClinicalQuestionShowEnum===1" label="显示触发值" prop="ParentTriggerValue">
<el-select v-model="form.ParentTriggerValue" clearable>
<el-option
v-for="item of parentTriggerValOptions"
@@ -118,8 +111,7 @@
/>
</el-select>
</el-form-item>
<!-- 是否必填 -->
<el-form-item v-if="form.ClinicalQuestionType !== 'group' && form.ClinicalQuestionType !== 'table'" :label="$t('trials:readingUnit:qsList:title:isRequired')" prop="IsRequired">
<el-form-item v-if="form.ClinicalQuestionType !== 'group' && form.ClinicalQuestionType !== 'table'" label="是否必填" prop="IsRequired">
<el-radio-group
v-model="form.IsRequired"
>
@@ -132,8 +124,7 @@
</el-radio>
</el-radio-group>
</el-form-item>
<!-- 问题分组 -->
<el-form-item v-if="form.ClinicalQuestionType !== 'group'" :label="$t('dictionary:template:criterionConfig:title:groupNameEn')">
<el-form-item v-if="form.ClinicalQuestionType !== 'group'" label="问题分组">
<el-select v-model="form.GroupId" clearable :disabled="isParentExistGroup">
<el-option
v-for="group of groupOptions"
@@ -156,8 +147,7 @@
</el-radio>
</el-radio-group>
</el-form-item>
<!-- 最大长度 -->
<el-form-item v-if="form.ClinicalQuestionType !== 'table' && form.ClinicalQuestionType !== 'group' && form.ClinicalQuestionType !== 'number' && form.ClinicalQuestionType !== 'select'" :label="$t('trials:readingUnit:qsList:title:MaxAnswerLength')">
<el-form-item v-if="form.ClinicalQuestionType !== 'table' && form.ClinicalQuestionType !== 'group' && form.ClinicalQuestionType !== 'number' && form.ClinicalQuestionType !== 'select'" label="最大长度">
<el-input-number
v-model="form.MaxAnswerLength"
controls-position="right"
@@ -165,8 +155,7 @@
:max="2000"
/>
</el-form-item>
<!-- 最大行数 -->
<el-form-item v-if="form.ClinicalQuestionType === 'table'" :label="$t('trials:readingUnit:qsList:title:maxQuestionCount')">
<el-form-item v-if="form.ClinicalQuestionType === 'table'" label="最大行数">
<el-input-number
v-model="form.MaxQuestionCount"
controls-position="right"
@@ -174,12 +163,10 @@
:max="10"
/>
</el-form-item>
<!-- 最大上传个数 -->
<el-form-item v-if="form.ClinicalQuestionType === 'upload'" :label="$t('trials:readingUnit:qsList:title:imageCount')">
<el-form-item v-if="form.ClinicalQuestionType === 'upload'" label="最大上传个数">
<el-input-number v-model="form.ImageCount" controls-position="right" :min="1" :max="10" />
</el-form-item>
<!-- 序号 -->
<el-form-item :label="$t('trials:readingUnit:qsList:title:order')" prop="ShowOrder">
<el-form-item label="序号" prop="ShowOrder">
<el-input-number
v-model="form.ShowOrder"
controls-position="right"
@@ -240,7 +227,7 @@ export default {
} else {
var arr = value.split('|')
if (new Set(arr).size !== arr.length) {
callback(new Error(this.$t('trials:qcCfg:message:msg1')))
callback(new Error('选项不允许存在相同值'))
} else {
callback()
}
@@ -277,29 +264,29 @@ export default {
},
rules: {
Type: [
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }
{ required: true, message: '请选择', trigger: 'blur' }
],
LesionType: [
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }
{ required: true, message: '请选择', trigger: 'blur' }
],
QuestionName: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ max: 300, message: this.$t('common:ruleMessage:maxLength') + ' 300' }],
QuestionGenre: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
TypeValue: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
QuestionName: [{ required: true, message: '请注明', trigger: 'blur' },
{ max: 300, message: '最大长度为 300' }],
QuestionGenre: [{ required: true, message: '请选择', trigger: 'blur' }],
TypeValue: [{ required: true, message: '请注明', trigger: 'blur' },
{ validator: validateTypeVal, trigger: 'blur' },
{ max: 500, message: this.$t('common:ruleMessage:maxLength') + ' 500' }],
DictionaryCode: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
IsCheckDate: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
ClinicalQuestionShowEnum: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
IsRequired: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
ParentId: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
{ max: 500, message: '最大长度为 500' }],
DictionaryCode: [{ required: true, message: '请选择', trigger: 'blur' }],
IsCheckDate: [{ required: true, message: '请选择', trigger: 'blur' }],
ClinicalQuestionShowEnum: [{ required: true, message: '请选择', trigger: 'blur' }],
IsRequired: [{ required: true, message: '请选择', trigger: 'blur' }],
ParentId: [{ required: true, message: '请选择', trigger: 'blur' }],
ParentTriggerValue: [
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }
{ required: true, message: '请选择', trigger: 'blur' }
],
RelevanceId: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
RelevanceValue: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
GroupName: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ max: 50, message: this.$t('common:ruleMessage:maxLength') + ' 50' }]
RelevanceId: [{ required: true, message: '请选择', trigger: 'blur' }],
RelevanceValue: [{ required: true, message: '请选择', trigger: 'blur' }],
GroupName: [{ required: true, message: '请注明', trigger: 'blur' },
{ max: 50, message: '最大长度为 50' }]
},
loading: false,
btnLoading: false,
@@ -9,8 +9,7 @@
label-width="120px"
>
<div class="base-dialog-body">
<!-- 类型 -->
<el-form-item :label="$t('trials:readingUnit:qsList:title:type')" prop="ClinicalTableQuestionType">
<el-form-item label="类型" prop="ClinicalTableQuestionType">
<el-select
v-model="form.ClinicalTableQuestionType"
@change="((val)=>{qsTypeChange(val, form)})"
@@ -24,31 +23,28 @@
/>
</el-select>
</el-form-item>
<!-- 问题名称 -->
<el-form-item
v-if="form.ClinicalTableQuestionType !== 'group'"
:label="$t('trials:readingUnit:qsList:title:qName')"
label="问题名称"
prop="QuestionName"
>
<el-input
v-model="form.QuestionName"
/>
</el-form-item>
<!-- 选项 -->
<el-form-item
:label="$t('trials:readingUnit:qsList:title:typeValue')"
label="选项"
v-if="form.ClinicalTableQuestionType === 'select' || form.ClinicalTableQuestionType === 'radio'"
prop="TypeValue"
>
<el-input
v-model="form.TypeValue"
:placeholder="$t('trials:readingUnit:qsList:message:msg3')"
placeholder="选项请用‘|’分割多个选项"
/>
</el-form-item>
<!-- 小数位数 -->
<el-form-item
v-if="form.ClinicalTableQuestionType === 'number'"
:label="$t('trials:readingUnit:qsList:title:digitPlaces')"
label="小数位数"
>
<el-radio-group
v-model="form.DigitPlaces"
@@ -62,18 +58,19 @@
</el-radio>
</el-radio-group>
</el-form-item>
<!-- 单位 -->
<!-- 数值单位 -->
<el-form-item
v-if="form.ClinicalTableQuestionType === 'number'"
:label="$t('trials:readingUnit:qsList:title:unit')"
label="单位"
>
<el-input
v-model="form.Unit"
placeholder="请输入单位"
/>
</el-form-item>
<!-- 问题标记 -->
<!-- 数值单位 -->
<el-form-item
:label="$t('dictionary:clinicalDataQs:title:qsMark')"
label="问题标记"
>
<el-select
v-model="form.clinicalTableQuestionMarkEnum"
@@ -87,17 +84,16 @@
/>
</el-select>
</el-form-item>
<!-- 是否必填 -->
<!-- 数值单位 -->
<el-form-item
:label="$t('trials:readingUnit:qsList:title:isRequired')"
label="是否必填"
prop="IsRequired"
>
<el-radio-group v-model="form.IsRequired">
<el-radio v-for="item of $d.QuestionRequired" :key="`IsRequired${item.value}`" :label="item.value">{{ item.label }}</el-radio>
<el-radio v-for="item of $d.QuestionRequired" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<!-- 序号 -->
<el-form-item :label="$t('trials:qcCfg:table:order')" prop="ShowOrder">
<el-form-item label="序号" prop="ShowOrder">
<el-input-number
v-model="form.ShowOrder"
controls-position="right"
@@ -160,7 +156,7 @@ export default {
} else {
var arr = value.split('|')
if (new Set(arr).size !== arr.length) {
callback(new Error(this.$t('trials:qcCfg:message:msg1')))
callback(new Error('选项不允许存在相同值'))
} else {
callback()
}
@@ -197,26 +193,26 @@ export default {
},
rules: {
Type: [
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }
{ required: true, message: '请选择', trigger: 'blur' }
],
QuestionName: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ max: 300, message: this.$t('common:ruleMessage:maxLength') + ' 300' }],
QuestionName: [{ required: true, message: '请注明', trigger: 'blur' },
{ max: 300, message: '最大长度为 300' }],
TypeValue: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
TypeValue: [{ required: true, message: '请注明', trigger: 'blur' },
{ validator: validateTypeVal, trigger: 'blur' },
{ max: 200, message: this.$t('common:ruleMessage:maxLength') + ' 200' }],
ShowQuestion: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
IsRequired: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
ParentId: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
{ max: 200, message: '最大长度为 200' }],
ShowQuestion: [{ required: true, message: '请选择', trigger: 'blur' }],
IsRequired: [{ required: true, message: '请选择', trigger: 'blur' }],
ParentId: [{ required: true, message: '请选择', trigger: 'blur' }],
ParentTriggerValue: [
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }
{ required: true, message: '请选择', trigger: 'blur' }
],
RelevanceId: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
RelevanceValue: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
DataTableName: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
DataTableColumn: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }],
RelevanceId: [{ required: true, message: '请选择', trigger: 'blur' }],
RelevanceValue: [{ required: true, message: '请选择', trigger: 'blur' }],
DataTableName: [{ required: true, message: '请选择', trigger: 'blur' }],
DataTableColumn: [{ required: true, message: '请选择', trigger: 'blur' }],
// DictionaryCode: [{ required: true, message: '', trigger: 'blur' }],
DependParentId: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'blur' }]
DependParentId: [{ required: true, message: '请选择', trigger: 'blur' }]
},
loading: false,
parentOptions: [],
@@ -10,7 +10,7 @@
type="primary"
@click="handleAdd"
>
{{ $t('common:button:new') }}
新增
</el-button>
</div>
@@ -20,45 +20,39 @@
size="small"
height="500"
>
<!-- 序号 -->
<el-table-column
prop="ShowOrder"
:label="$t('trials:qcCfg:table:order')"
label="序号"
min-width="70"
/>
<!-- 名称 -->
<el-table-column
prop="QuestionName"
:label="$t('trials:readingUnit:qsList:title:qName')"
label="名称"
show-overflow-tooltip
/>
<!-- 名称(EN) -->
<el-table-column
prop="QuestionEnName"
:label="$t('trials:readingUnit:qsList:title:qNameEn')"
label="名称(EN)"
show-overflow-tooltip
/>
<!-- 类型 -->
<el-table-column
prop="Type"
:label="$t('trials:readingUnit:qsList:title:type')"
label="类型"
show-overflow-tooltip
>
<template slot-scope="scope">
{{ $fd('ClinicalTableQuestionType',scope.row.ClinicalTableQuestionType) }}
</template>
</el-table-column>
<!-- 选项 -->
<el-table-column
prop="TypeValue"
:label="$t('trials:readingUnit:qsList:title:typeValue')"
label="选项"
show-overflow-tooltip
min-width="110"
/>
<!-- 是否必填 -->
<el-table-column
prop="IsRequired"
:label="$t('trials:qcCfg:table:isRequired')"
label="是否必填"
min-width="90"
show-overflow-tooltip
>
@@ -66,40 +60,36 @@
{{ $fd('YesOrNo',scope.row.IsRequired) }}
</template>
</el-table-column>
<!-- 操作 -->
<el-table-column
prop=""
:label="$t('common:action:action')"
label="操作"
width="150"
show-overflow-tooltip
>
<template slot-scope="scope">
<!-- 查看 -->
<el-button
v-if="isCompleteConfig"
type="primary"
size="mini"
@click="handleLook(scope.row)"
>
{{ $t('trials:readingUnit:qsList:title:view') }}
查看
</el-button>
<!-- 编辑 -->
<el-button
v-if="!isCompleteConfig"
type="primary"
size="mini"
@click="handleEdit(scope.row)"
>
{{ $t('common:button:edit') }}
编辑
</el-button>
<!-- 删除 -->
<el-button
v-if="!isCompleteConfig"
type="danger"
size="mini"
@click="handleDelete(scope.row)"
>
{{ $t('common:button:delete') }}
删除
</el-button>
</template>
</el-table-column>
@@ -114,7 +104,7 @@
append-to-body
custom-class="base-dialog-wrapper"
>
<clinical-question-table-form
<ClinicalQuestionTableForm
:clinical-id="clinicalId"
:clinical-info="clinicalInfo"
ref="addOrEdit"
@@ -175,7 +165,7 @@ export default {
handleLook(row) {
this.type = 'look'
this.rowData = { ...row }
this.addOrEdit.title = this.$t('common:button:edit')
this.addOrEdit.title = '编辑'
this.addOrEdit.visible = true
},
getList() {
@@ -188,13 +178,13 @@ export default {
handleAdd() {
this.type = 'add'
this.rowData = {}
this.addOrEdit.title = this.$t('common:button:add')
this.addOrEdit.title = '添加'
this.addOrEdit.visible = true
},
handleEdit(row) {
this.type = 'edit'
this.rowData = { ...row }
this.addOrEdit.title = this.$t('common:button:edit')
this.addOrEdit.title = '编辑'
this.addOrEdit.visible = true
},
handleDelete(row) {
@@ -209,7 +199,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.getList()
this.$message.success(this.$t('common:message:deletedSuccessfully'))
this.$message.success('删除成功!')
}
}).catch(() => { this.loading = false })
})
@@ -4,7 +4,6 @@
<div>
</div>
<div>
<!-- 配置 -->
<el-button
size="mini"
type="primary"
@@ -12,7 +11,7 @@
@click="handleAdd"
style="margin-right: 10px;"
>
{{ $t('dictionary:template:criterionDictionary:button:config') }}
配置
</el-button>
</div>
</div>
@@ -22,62 +21,55 @@
:data="list"
stripe
>
<!-- 序号 -->
<el-table-column
prop=""
label=""
label="序号"
width="50"
>
<template slot-scope="scope">
{{scope.$index + 1}}
</template>
</el-table-column>
<!-- 字典表名 -->
<el-table-column
prop="Code"
:label="$t('dictionary:template:criterionDictionary:table:code')"
label="字典表名"
show-overflow-tooltip
>
</el-table-column>
<!-- 描述 -->
<el-table-column
prop="Description"
:label="$t('dictionary:template:criterionDictionary:table:description')"
label="描述"
show-overflow-tooltip
>
</el-table-column>
<!-- 子项数量 -->
<el-table-column
prop="Count"
:label="$t('dictionary:template:criterionDictionary:table:count')"
label="子项数量"
show-overflow-tooltip
>
</el-table-column>
<!-- 排序 -->
<el-table-column
prop="ShowOrder"
:label="$t('dictionary:template:criterionDictionary:table:showOrder')"
label="排序"
show-overflow-tooltip
>
</el-table-column>
<!-- 操作 -->
<el-table-column
prop="Description"
:label="$t('common:action:action')"
label="操作"
show-overflow-tooltip
>
<template slot-scope="scope">
<!-- 配置 -->
<el-button :disabled="isCompleteConfig" type="text" @click="openChildren(scope.row)">
{{ $t('dictionary:template:criterionDictionary:button:config') }}
<el-button size="small" :disabled="isCompleteConfig" type="primary" @click="openChildren(scope.row)">
配置
</el-button>
<!-- 删除 -->
<el-button
type="text"
type="danger"
size="small"
:disabled="isCompleteConfig"
@click="handleDelete(scope.row)"
>
{{ $t('common:button:delete') }}
删除
</el-button>
</template>
</el-table-column>
@@ -107,7 +99,7 @@
@click="handleSave"
v-loading="loading"
>
{{ $t('common:button:save')}}
保存
</el-button>
</div>
<el-table
@@ -130,24 +122,21 @@
{{ scope.$index + 1}}
</template>
</el-table-column>
<!-- 字典表名 -->
<el-table-column
prop="Code"
:label="$t('dictionary:template:criterionDictionary:table:code')"
label="字典表名"
show-overflow-tooltip
>
</el-table-column>
<!-- 描述 -->
<el-table-column
prop="Description"
:label="$t('dictionary:template:criterionDictionary:table:description')"
label="描述"
show-overflow-tooltip
>
</el-table-column>
<!-- 排序 -->
<el-table-column
prop="ShowOrder"
:label="$t('dictionary:template:criterionDictionary:table:showOrder')"
label="排序"
show-overflow-tooltip
>
</el-table-column>
@@ -181,6 +170,7 @@ export default {
rowData: {},
activeName: '0',
addOrEdit: { visible: false, title: '' },
preview: { visible: false, title: 'eCRF预览' },
config: { visible: false, title: '全局配置' },
drawer_cfg: { drawerChild: false, parentId: '', title: '' },
drawer_cfg2: { drawerChild: false, parentId: '', title: '' },
@@ -226,8 +216,7 @@ export default {
})
},
handleAdd() {
//
this.drawer_cfg2 = { drawerChild: true, title: this.$t('template:criterionDictionary:title:selectDictionary') }
this.drawer_cfg2 = { drawerChild: true, title: '选择标准字典' }
this.config.visible = true
this.$nextTick(() => {
var a = this.dicList.filter(v => {
@@ -262,10 +251,9 @@ export default {
},
handleDelete(row) {
this.loading = true
//
this.$confirm(this.$t('template:criterionDictionary:message:msg1')).then(() => {
this.$confirm('确定要删除该系统标准字典吗?').then(() => {
deleteSystemCriterionDictionary({Id: row.Id}).then(res => {
this.$message.success(this.$t('common:message:deletedSuccessfully'))
this.$message.success('删除成功')
this.loading = false
this.getList()
}).catch(() => { this.loading = false })
@@ -277,7 +265,7 @@ export default {
</script>
<style lang="scss" scoped>
::v-deep .el-form-item__content{
/deep/ .el-form-item__content{
width: calc(100% - 110px);
}
</style>
@@ -10,7 +10,7 @@
@click="handleAdd"
style="margin-right: 10px;"
>
{{ $t('dictionary:template:criterionDictionary:button:config') }}
配置
</el-button>
</div>
</div>
@@ -24,44 +24,39 @@
>
<el-table-column
prop=""
label=""
label="序号"
width="50"
>
<template slot-scope="scope">
{{scope.$index + 1}}
</template>
</el-table-column>
<!-- 键值 -->
<el-table-column
prop="Code"
:label="$t('dictionary:template:criterionDictionary:table:code')"
label="键值"
show-overflow-tooltip
/>
<!-- 中文值 -->
<el-table-column
prop="ValueCN"
:label="$t('dictionary:template:criterionDictionary:table:valueCN')"
label="中文值"
show-overflow-tooltip
>
</el-table-column>
<!-- 英文值 -->
<el-table-column
prop="Value"
:label="$t('dictionary:template:criterionDictionary:table:value')"
label="英文值"
show-overflow-tooltip
>
</el-table-column>
<!-- 描述 -->
<el-table-column
prop="Description"
:label="$t('dictionary:template:criterionDictionary:table:description')"
label="描述"
show-overflow-tooltip
>
</el-table-column>
<!-- 分组 -->
<el-table-column
prop="Description"
:label="$t('dictionary:template:criterionDictionary:table:group')"
label="分组"
show-overflow-tooltip
>
<template slot-scope="scope">
@@ -89,7 +84,7 @@
@click="handleSave"
v-loading="loading"
>
{{ $t('common:button:save')}}
保存
</el-button>
</div>
<el-table
@@ -105,31 +100,27 @@
type="selection"
width="55">
</el-table-column>
<!-- 键值 -->
<el-table-column
prop="raw.Code"
:label="$t('dictionary:template:criterionDictionary:table:code')"
label="键值"
show-overflow-tooltip
>
</el-table-column>
<!-- 中文值 -->
<el-table-column
prop="raw.ValueCN"
:label="$t('dictionary:template:criterionDictionary:table:valueCN')"
label="中文值"
show-overflow-tooltip
>
</el-table-column>
<!-- 英文值 -->
<el-table-column
prop="raw.Value"
:label="$t('dictionary:template:criterionDictionary:table:value')"
label="英文值"
show-overflow-tooltip
>
</el-table-column>
<!-- 描述 -->
<el-table-column
prop="raw.Description"
:label="$t('dictionary:template:criterionDictionary:table:description')"
label="描述"
show-overflow-tooltip
>
</el-table-column>
@@ -161,7 +152,7 @@ export default {
activeName: '0',
addOrEdit: { visible: false, title: '' },
preview: { visible: false, title: 'eCRF预览' },
config: { visible: false, title: this.$t('template:criterionDictionary:message:msg2') }, //
config: { visible: false, title: '标准字典值' },
selectedList: []
}
},
@@ -176,7 +167,7 @@ export default {
CrterionDictionaryGroup: v
}).then(res => {
this.loading = false
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.$message.success('设置成功')
this.getList()
}).catch(() => {this.loading = false})
},
@@ -240,7 +231,7 @@ export default {
</script>
<style lang="scss" scoped>
::v-deep .el-form-item__content{
/deep/ .el-form-item__content{
width: calc(100% - 110px);
}
</style>

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