Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/hir-web into main
						commit
						7a0a8bfa5c
					
				|  | @ -2,12 +2,10 @@ | ||||||
| import Vue from 'vue' | import Vue from 'vue' | ||||||
| import 'normalize.css/normalize.css' // A modern alternative to CSS resets
 | import 'normalize.css/normalize.css' // A modern alternative to CSS resets
 | ||||||
| 
 | 
 | ||||||
| import ElementUI, { MessageBox } from 'element-ui' | import ElementUI from 'element-ui' | ||||||
| import { getBasicDataAllSelect, getFrontInternationalizationList } from '@/api/dictionary/dictionary' | import { getBasicDataAllSelect, getFrontInternationalizationList } from '@/api/dictionary/dictionary' | ||||||
| // import 'element-ui/lib/theme-chalk/index.css'
 |  | ||||||
| import './assets/css/theme-blue/index.css' // 浅绿色主题
 | import './assets/css/theme-blue/index.css' // 浅绿色主题
 | ||||||
| import './assets/css/iconfont/index.css' // 阿里巴巴图标库
 | import './assets/css/iconfont/index.css' // 阿里巴巴图标库
 | ||||||
| // import locale from 'element-ui/lib/locale/lang/en' // lang i18n
 |  | ||||||
| import i18n from './lang' | import i18n from './lang' | ||||||
| import '@/styles/index.scss' // global css
 | import '@/styles/index.scss' // global css
 | ||||||
| 
 | 
 | ||||||
|  | @ -23,10 +21,7 @@ import '@/permission' // permission control | ||||||
| import md5 from 'js-md5' | import md5 from 'js-md5' | ||||||
| import VueClipboard from 'vue-clipboard2' | import VueClipboard from 'vue-clipboard2' | ||||||
| Vue.use(VueClipboard) | Vue.use(VueClipboard) | ||||||
| // import htmlToPdf from './utils/htmlToPdf'
 |  | ||||||
| // Vue.use(htmlToPdf)
 |  | ||||||
| import permission from './utils/permission' | import permission from './utils/permission' | ||||||
| import { OSSclient } from './utils/oss' |  | ||||||
| Vue.use(permission) | Vue.use(permission) | ||||||
| 
 | 
 | ||||||
| import Viewer from 'v-viewer' | import Viewer from 'v-viewer' | ||||||
|  |  | ||||||
|  | @ -10,10 +10,18 @@ import { OSSclient } from './utils/oss' | ||||||
| 
 | 
 | ||||||
| NProgress.configure({ showSpinner: false }) | NProgress.configure({ showSpinner: false }) | ||||||
| 
 | 
 | ||||||
| const whiteList = ['/activate','/ReviewersResearch', '/login', '/error', '/resetpassword', '/recompose', '/email-recompose', '/trialStats', '/showdicom', '/imagesShare', '/audit', '/preview', '/researchLogin', '/blindResumeInfo', '/trialsResume', '/joinVerify', '/showNoneDicoms', '/noneDicomReading', '/clinicalData', '/readingDicoms', '/readingPage', '/visitDicomReview', '/visitNondicomReview', '/globalReview', '/adReview', '/oncologyReview', '/nonedicoms'] | const whiteList = ['/activate', '/ReviewersResearch', '/login', '/error', '/resetpassword', '/recompose', '/email-recompose', '/trialStats', '/showdicom', '/imagesShare', '/audit', '/preview', '/researchLogin', '/blindResumeInfo', '/trialsResume', '/joinVerify', '/showNoneDicoms', '/noneDicomReading', '/clinicalData', '/readingDicoms', '/readingPage', '/visitDicomReview', '/visitNondicomReview', '/globalReview', '/adReview', '/oncologyReview', '/nonedicoms'] | ||||||
| 
 | // 影像页关闭
 | ||||||
|  | Vue.prototype.$openWindow = null | ||||||
|  | Vue.prototype.$setOpenWindow = (openWindow) => { | ||||||
|  |   if (Vue.prototype.$openWindow) { | ||||||
|  |     Vue.prototype.$openWindow.close(); | ||||||
|  |   } | ||||||
|  |   Vue.prototype.$openWindow = openWindow; | ||||||
|  | } | ||||||
| router.beforeEach(async (to, from, next) => { | router.beforeEach(async (to, from, next) => { | ||||||
|   NProgress.start() |   NProgress.start() | ||||||
|  |   Vue.prototype.$setOpenWindow(); | ||||||
|   // 设置页面标题
 |   // 设置页面标题
 | ||||||
|   // document.title = getPageTitle(to.meta.title)
 |   // document.title = getPageTitle(to.meta.title)
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -14,8 +14,8 @@ service.interceptors.request.use( | ||||||
|   config => { |   config => { | ||||||
|     config.headers['Content-Type'] = 'application/json;charset=UTF-8' |     config.headers['Content-Type'] = 'application/json;charset=UTF-8' | ||||||
|     var language = zzSessionStorage.getItem('lang') |     var language = zzSessionStorage.getItem('lang') | ||||||
|     config.headers['Accept-Language'] = language === 'en'?'en-US,en;q=0.5':'zh-CN,zh;q=0.9' |     config.headers['Accept-Language'] = language === 'en' ? 'en-US,en;q=0.5' : 'zh-CN,zh;q=0.9' | ||||||
|     console.log(config.headers) |     // console.log(config.headers)
 | ||||||
|     if (store.getters.token) { |     if (store.getters.token) { | ||||||
|       config.headers.Authorization = `Bearer ${store.getters.token}` |       config.headers.Authorization = `Bearer ${store.getters.token}` | ||||||
|     } |     } | ||||||
|  | @ -30,14 +30,14 @@ service.interceptors.response.use( | ||||||
|   response => { |   response => { | ||||||
|     const res = response.data |     const res = response.data | ||||||
|     let fileReader = new FileReader(); |     let fileReader = new FileReader(); | ||||||
|     fileReader.onload = function() { |     fileReader.onload = function () { | ||||||
|       try { |       try { | ||||||
|         let jsonData = JSON.parse(fileReader.result);  // 如果是普通对象数据,后台转换失败
 |         let jsonData = JSON.parse(fileReader.result);  // 如果是普通对象数据,后台转换失败
 | ||||||
|         if (!jsonData.IsSuccess && jsonData.ErrorMessage) { |         if (!jsonData.IsSuccess && jsonData.ErrorMessage) { | ||||||
|           MessageBox.confirm(jsonData.ErrorMessage, { |           MessageBox.confirm(jsonData.ErrorMessage, { | ||||||
|             type: 'warning', |             type: 'warning', | ||||||
|             showCancelButton: false, |             showCancelButton: false, | ||||||
|             callback: action => {} |             callback: action => { } | ||||||
|           }) |           }) | ||||||
|           return Promise.reject(jsonData) |           return Promise.reject(jsonData) | ||||||
|         } |         } | ||||||
|  | @ -66,19 +66,19 @@ service.interceptors.response.use( | ||||||
|     if (error && error.response) { |     if (error && error.response) { | ||||||
|       const status = error.response.status |       const status = error.response.status | ||||||
|       switch (status) { |       switch (status) { | ||||||
|         case 400: message = store.state.lang.language === 'en'? 'Request error' : '请求错误'; break |         case 400: message = store.state.lang.language === 'en' ? 'Request error' : '请求错误'; break | ||||||
|         case 401: message = store.state.lang.language === 'en'? 'Not authorized or login timed out. Please log in again.' : '未授权或登陆超时,请重新登录'; break |         case 401: message = store.state.lang.language === 'en' ? 'Not authorized or login timed out. Please log in again.' : '未授权或登陆超时,请重新登录'; break | ||||||
|         case 403: message = error.response.data.ErrorMessage; break |         case 403: message = error.response.data.ErrorMessage; break | ||||||
|         case 404: message = store.state.lang.language === 'en'? 'Request address error' : `请求地址出错`; break |         case 404: message = store.state.lang.language === 'en' ? 'Request address error' : `请求地址出错`; break | ||||||
|         case 405: message = store.state.lang.language === 'en'? 'Interface parameter error or request method inconsistency' : `接口参数传递错误,或者请求方法不一致`; break |         case 405: message = store.state.lang.language === 'en' ? 'Interface parameter error or request method inconsistency' : `接口参数传递错误,或者请求方法不一致`; break | ||||||
|         case 408: message = store.state.lang.language === 'en'? 'Request timed out' : '请求超时'; break |         case 408: message = store.state.lang.language === 'en' ? 'Request timed out' : '请求超时'; break | ||||||
|         case 429: message = store.state.lang.language === 'en'? 'The application service limits the traffic. Your requests are too frequent. Please try again later.' : '应用服务限流,您的请求过于频繁,请稍后再试'; break |         case 429: message = store.state.lang.language === 'en' ? 'The application service limits the traffic. Your requests are too frequent. Please try again later.' : '应用服务限流,您的请求过于频繁,请稍后再试'; break | ||||||
|         case 500: message = store.state.lang.language === 'en'? 'Internal server error, and unable to complete the request. Software release might be in process. Please contact the administrator.' : '服务器内部错误,无法完成请求;可能正在发布中,请联系管理员处理'; break |         case 500: message = store.state.lang.language === 'en' ? 'Internal server error, and unable to complete the request. Software release might be in process. Please contact the administrator.' : '服务器内部错误,无法完成请求;可能正在发布中,请联系管理员处理'; break | ||||||
|         case 501: message = store.state.lang.language === 'en'? 'Service has not been implemented.' : '服务未实现'; break |         case 501: message = store.state.lang.language === 'en' ? 'Service has not been implemented.' : '服务未实现'; break | ||||||
|         case 502: message = store.state.lang.language === 'en'? 'System is being upgraded. Please wait patiently.' : '系统正在升级,请耐心等待。'; break |         case 502: message = store.state.lang.language === 'en' ? 'System is being upgraded. Please wait patiently.' : '系统正在升级,请耐心等待。'; break | ||||||
|         case 503: message = store.state.lang.language === 'en'? 'Service is not available' : '服务不可用'; break |         case 503: message = store.state.lang.language === 'en' ? 'Service is not available' : '服务不可用'; break | ||||||
|         case 504: message = store.state.lang.language === 'en'? 'Gateway timed out' : '网关超时'; break |         case 504: message = store.state.lang.language === 'en' ? 'Gateway timed out' : '网关超时'; break | ||||||
|         case 505: message = store.state.lang.language === 'en'? 'HTTP version is not supported' : 'HTTP版本不受支持'; break |         case 505: message = store.state.lang.language === 'en' ? 'HTTP version is not supported' : 'HTTP版本不受支持'; break | ||||||
|         default: break |         default: break | ||||||
|       } |       } | ||||||
|       if (error.response.status === 401) { |       if (error.response.status === 401) { | ||||||
|  | @ -100,7 +100,7 @@ service.interceptors.response.use( | ||||||
|           type: 'warning', |           type: 'warning', | ||||||
|           showCancelButton: false, |           showCancelButton: false, | ||||||
|           confirmButtonText: '确定', |           confirmButtonText: '确定', | ||||||
|           callback: action => {} |           callback: action => { } | ||||||
|         }) |         }) | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -68,7 +68,7 @@ | ||||||
|         <el-form-item |         <el-form-item | ||||||
|           :label="$t('trials:researchForm:form:checkCode')" |           :label="$t('trials:researchForm:form:checkCode')" | ||||||
|           prop="CheckCode" |           prop="CheckCode" | ||||||
|           :maxlength="10" |           :maxlength="6" | ||||||
|         > |         > | ||||||
|           <el-input v-model="password.CheckCode" type="number" /> |           <el-input v-model="password.CheckCode" type="number" /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ | ||||||
|     width="500px" |     width="500px" | ||||||
|     custom-class="base-dialog-wrapper" |     custom-class="base-dialog-wrapper" | ||||||
|     append-to-body |     append-to-body | ||||||
|  |     :before-close="handleCancel" | ||||||
|   > |   > | ||||||
|     <el-form |     <el-form | ||||||
|       ref="editVisitForm" |       ref="editVisitForm" | ||||||
|  |  | ||||||
|  | @ -3,7 +3,10 @@ | ||||||
|     <div ref="leftContainer" class="left"> |     <div ref="leftContainer" class="left"> | ||||||
|       <el-form :inline="true"> |       <el-form :inline="true"> | ||||||
|         <!--AE Title--> |         <!--AE Title--> | ||||||
|         <el-form-item label="AE Title" prop="CalledAE"> |         <el-form-item | ||||||
|  |           :label="$t('system:dicom:search:AETitle')" | ||||||
|  |           prop="CalledAE" | ||||||
|  |         > | ||||||
|           <el-input |           <el-input | ||||||
|             v-model="searchData.CalledAE" |             v-model="searchData.CalledAE" | ||||||
|             style="width: 140px" |             style="width: 140px" | ||||||
|  | @ -11,11 +14,11 @@ | ||||||
|           /> |           /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <!--IP--> |         <!--IP--> | ||||||
|         <el-form-item label="IP" prop="IP"> |         <el-form-item :label="$t('system:dicom:search:IP')" prop="IP"> | ||||||
|           <el-input v-model="searchData.IP" style="width: 140px" clearable /> |           <el-input v-model="searchData.IP" style="width: 140px" clearable /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <!--Port--> |         <!--Port--> | ||||||
|         <el-form-item label="Port" prop="Port"> |         <el-form-item :label="$t('system:dicom:search:Port')" prop="Port"> | ||||||
|           <el-input v-model="searchData.Port" style="width: 140px" clearable /> |           <el-input v-model="searchData.Port" style="width: 140px" clearable /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item> |         <el-form-item> | ||||||
|  | @ -41,44 +44,43 @@ | ||||||
|       > |       > | ||||||
|         <!--AE Title--> |         <!--AE Title--> | ||||||
|         <el-table-column |         <el-table-column | ||||||
|           label="AE Title" |           :label="$t('system:dicom:table:AETitle')" | ||||||
|           prop="CalledAE" |           prop="CalledAE" | ||||||
|           min-width="120" |           min-width="120" | ||||||
|           show-overflow-tooltip |           show-overflow-tooltip | ||||||
|         /> |         /> | ||||||
|         <!--IP--> |         <!--IP--> | ||||||
|         <el-table-column |         <el-table-column | ||||||
|           label="IP" |           :label="$t('system:dicom:table:IP')" | ||||||
|           prop="IP" |           prop="IP" | ||||||
|           min-width="120" |           min-width="120" | ||||||
|           show-overflow-tooltip |           show-overflow-tooltip | ||||||
|         /> |         /> | ||||||
|         <!--Port--> |         <!--Port--> | ||||||
|         <el-table-column |         <el-table-column | ||||||
|           label="Port" |           :label="$t('system:dicom:table:Port')" | ||||||
|           prop="Port" |           prop="Port" | ||||||
|           min-width="120" |           min-width="120" | ||||||
|           show-overflow-tooltip |           show-overflow-tooltip | ||||||
|         /> |         /> | ||||||
|         <!--Modality--> |         <!--Modality--> | ||||||
|         <el-table-column |         <el-table-column | ||||||
|           label="Modality" |           :label="$t('system:dicom:table:Modality')" | ||||||
|           prop="Modality" |           prop="Modality" | ||||||
|           min-width="120" |           min-width="120" | ||||||
|           show-overflow-tooltip |           show-overflow-tooltip | ||||||
|         /> |         /> | ||||||
|         <!--Description--> |         <!--Description--> | ||||||
|         <el-table-column |         <el-table-column | ||||||
|           label="Description" |           :label="$t('system:dicom:table:Description')" | ||||||
|           prop="Description" |           prop="Description" | ||||||
|           min-width="120" |           min-width="120" | ||||||
|           show-overflow-tooltip |           show-overflow-tooltip | ||||||
|         /> |         /> | ||||||
|         <el-table-column |         <el-table-column | ||||||
|           label="actions" |           :label="$t('system:dicom:table:action')" | ||||||
|           fixed="right" |           fixed="right" | ||||||
|           prop="UserTypeShortName" |           prop="UserTypeShortName" | ||||||
|           min-width="200" |  | ||||||
|           show-overflow-tooltip |           show-overflow-tooltip | ||||||
|         > |         > | ||||||
|           <template slot-scope="scope"> |           <template slot-scope="scope"> | ||||||
|  | @ -87,7 +89,7 @@ | ||||||
|               type="text" |               type="text" | ||||||
|               v-hasPermi="['system:dicom:edit']" |               v-hasPermi="['system:dicom:edit']" | ||||||
|               @click="openDialog('edit', scope.row)" |               @click="openDialog('edit', scope.row)" | ||||||
|               >编辑</el-button |               >{{ $t("system:dicom:table:edit") }}</el-button | ||||||
|             > |             > | ||||||
|             <el-button |             <el-button | ||||||
|               size="mini" |               size="mini" | ||||||
|  | @ -212,7 +214,9 @@ export default { | ||||||
|     }, |     }, | ||||||
|     // 测试连通性 |     // 测试连通性 | ||||||
|     async test(item) { |     async test(item) { | ||||||
|  |       this.loading = true; | ||||||
|       let res = await testConnect(item.Id); |       let res = await testConnect(item.Id); | ||||||
|  |       this.loading = false; | ||||||
|       if (res.IsSuccess && res.Result) { |       if (res.IsSuccess && res.Result) { | ||||||
|         this.$message.success(this.$t("system:dicomAE:connect:success")); |         this.$message.success(this.$t("system:dicomAE:connect:success")); | ||||||
|       } else { |       } else { | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ | ||||||
|         > |         > | ||||||
|           <el-select v-model="form.NoticeLevelEnum" clearable size="small"> |           <el-select v-model="form.NoticeLevelEnum" clearable size="small"> | ||||||
|             <el-option |             <el-option | ||||||
|               v-for="item of dict.type.NoteLevel" |               v-for="item of $d.NoteLevel" | ||||||
|               :key="item.value" |               :key="item.value" | ||||||
|               :label="item.label" |               :label="item.label" | ||||||
|               :value="item.raw.Code * 1" |               :value="item.raw.Code * 1" | ||||||
|  | @ -27,10 +27,10 @@ | ||||||
|         > |         > | ||||||
|           <el-select v-model="form.NoticeTypeEnum" clearable size="small"> |           <el-select v-model="form.NoticeTypeEnum" clearable size="small"> | ||||||
|             <el-option |             <el-option | ||||||
|               v-for="item of dict.type.NoteType" |               v-for="item of $d.NoteType" | ||||||
|               :key="item.value" |               :key="item.id" | ||||||
|               :label="item.label" |               :label="item.label" | ||||||
|               :value="item.raw.Code * 1" |               :value="item.value" | ||||||
|             /> |             /> | ||||||
|           </el-select> |           </el-select> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|  | @ -44,10 +44,10 @@ | ||||||
|             size="small" |             size="small" | ||||||
|           > |           > | ||||||
|             <el-option |             <el-option | ||||||
|               v-for="item of dict.type.NoticeApplicableTrial" |               v-for="item of $d.TrialType" | ||||||
|               :key="item.value" |               :key="item.id" | ||||||
|               :label="item.label" |               :label="item.label" | ||||||
|               :value="item.raw.Code * 1" |               :value="item.value" | ||||||
|             /> |             /> | ||||||
|           </el-select> |           </el-select> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|  | @ -75,10 +75,10 @@ | ||||||
|         > |         > | ||||||
|           <el-select v-model="form.NoticeModeEnum" clearable size="small"> |           <el-select v-model="form.NoticeModeEnum" clearable size="small"> | ||||||
|             <el-option |             <el-option | ||||||
|               v-for="item of dict.type.NoticeMode" |               v-for="item of $d.NoticeMode" | ||||||
|               :key="item.value" |               :key="item.value" | ||||||
|               :label="item.label" |               :label="item.label" | ||||||
|               :value="item.raw.Code * 1" |               :value="item.value" | ||||||
|             /> |             /> | ||||||
|           </el-select> |           </el-select> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ | ||||||
|         > |         > | ||||||
|           <el-select v-model="searchData.NoticeTypeEnum" clearable size="small"> |           <el-select v-model="searchData.NoticeTypeEnum" clearable size="small"> | ||||||
|             <el-option |             <el-option | ||||||
|               v-for="item of $d.TrialType" |               v-for="item of $d.NoteType" | ||||||
|               :key="item.id" |               :key="item.id" | ||||||
|               :label="item.label" |               :label="item.label" | ||||||
|               :value="item.value" |               :value="item.value" | ||||||
|  | @ -42,8 +42,8 @@ | ||||||
|             size="small" |             size="small" | ||||||
|           > |           > | ||||||
|             <el-option |             <el-option | ||||||
|               v-for="item of $d.NoticeApplicableTrial" |               v-for="item of $d.TrialType" | ||||||
|               :key="item.value" |               :key="item.id" | ||||||
|               :label="item.label" |               :label="item.label" | ||||||
|               :value="item.value" |               :value="item.value" | ||||||
|             /> |             /> | ||||||
|  | @ -60,10 +60,10 @@ | ||||||
|             size="small" |             size="small" | ||||||
|           > |           > | ||||||
|             <el-option |             <el-option | ||||||
|               v-for="item of $d.UserType" |               v-for="item of roleList" | ||||||
|               :key="item.Id" |               :key="item.Id" | ||||||
|               :label="item.label" |               :label="item.UserTypeShortName" | ||||||
|               :value="item.value" |               :value="item.Id" | ||||||
|             /> |             /> | ||||||
|           </el-select> |           </el-select> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|  | @ -188,10 +188,10 @@ | ||||||
|         > |         > | ||||||
|           <template slot-scope="scope"> |           <template slot-scope="scope"> | ||||||
|             {{ |             {{ | ||||||
|               $d.NoticeApplicableTrial.find((v) => { |               $d.TrialType.find((v) => { | ||||||
|                 return v.raw.Code * 1 === scope.row.ApplicableProjectEnum; |                 return v.raw.Code * 1 === scope.row.ApplicableProjectEnum; | ||||||
|               }) |               }) | ||||||
|                 ? $d.NoticeApplicableTrial.find((v) => { |                 ? $d.TrialType.find((v) => { | ||||||
|                     return v.raw.Code * 1 === scope.row.ApplicableProjectEnum; |                     return v.raw.Code * 1 === scope.row.ApplicableProjectEnum; | ||||||
|                   }).label |                   }).label | ||||||
|                 : "" |                 : "" | ||||||
|  | @ -237,7 +237,7 @@ | ||||||
|           show-overflow-tooltip |           show-overflow-tooltip | ||||||
|         > |         > | ||||||
|           <template slot-scope="scope"> |           <template slot-scope="scope"> | ||||||
|             {{ scope.row.StartDate }}-{{ scope.row.EndDate }} |             {{ scope.row.StartDate }} | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|         <el-table-column |         <el-table-column | ||||||
|  | @ -287,9 +287,11 @@ | ||||||
|           min-width="200" |           min-width="200" | ||||||
|           show-overflow-tooltip |           show-overflow-tooltip | ||||||
|           v-if=" |           v-if=" | ||||||
|             hasPermi(['system:notice:edit']) || |             hasPermi([ | ||||||
|             hasPermi(['system:notice:publish']) || |               'system:notice:edit', | ||||||
|             hasPermi(['system:notice:back']) |               'system:notice:publish', | ||||||
|  |               'system:notice:back', | ||||||
|  |             ]) | ||||||
|           " |           " | ||||||
|         > |         > | ||||||
|           <template slot-scope="scope"> |           <template slot-scope="scope"> | ||||||
|  | @ -436,7 +438,11 @@ export default { | ||||||
|     getUserTypeRoleList() { |     getUserTypeRoleList() { | ||||||
|       getUserTypeRoleList({}) |       getUserTypeRoleList({}) | ||||||
|         .then((res) => { |         .then((res) => { | ||||||
|           this.roleList = res.Result; |           this.roleList = res.Result.map((item) => { | ||||||
|  |             if ([4, 5, 8, 9, 12, 14].includes(item.UserTypeEnum)) { | ||||||
|  |               return item; | ||||||
|  |             } | ||||||
|  |           }).filter((item) => item); | ||||||
|         }) |         }) | ||||||
|         .catch(() => {}); |         .catch(() => {}); | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
|  | @ -76,13 +76,12 @@ | ||||||
|           ref="userType" |           ref="userType" | ||||||
|           v-model="user.UserTypeId" |           v-model="user.UserTypeId" | ||||||
|           size="small" |           size="small" | ||||||
|           placeholder="Please select" |           placeholder="" | ||||||
|           style="width: 100%" |           style="width: 100%" | ||||||
|           :disabled="user.CanEditUserType === false" |           :disabled="user.CanEditUserType === false" | ||||||
|         > |         > | ||||||
|           <template v-for="(userType, key) of userTypeOptions"> |           <template v-for="(userType, key) of userTypeOptions"> | ||||||
|             <el-option |             <el-option | ||||||
|               v-if="userType.UserTypeEnum !== 20" |  | ||||||
|               :key="key" |               :key="key" | ||||||
|               :label="userType.UserType" |               :label="userType.UserType" | ||||||
|               :value="userType.Id" |               :value="userType.Id" | ||||||
|  | @ -368,7 +367,15 @@ export default { | ||||||
|     getUserTypeList() { |     getUserTypeList() { | ||||||
|       getUserTypeListByUserType(0).then((res) => { |       getUserTypeListByUserType(0).then((res) => { | ||||||
|         if (res.IsSuccess) { |         if (res.IsSuccess) { | ||||||
|           this.userTypeOptions = res.Result; |           let arr = [2, 4, 5, 8, 9, 12, 14]; | ||||||
|  |           if (this.hasPermi(["role:oa"])) { | ||||||
|  |             arr = [4, 5, 8, 9, 12, 14]; | ||||||
|  |           } | ||||||
|  |           this.userTypeOptions = res.Result.map((item) => { | ||||||
|  |             if (arr.includes(item.UserTypeEnum)) { | ||||||
|  |               return item; | ||||||
|  |             } | ||||||
|  |           }).filter((item) => item); | ||||||
|         } |         } | ||||||
|       }); |       }); | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
|  | @ -108,6 +108,7 @@ | ||||||
|       :Patient="PatientData" |       :Patient="PatientData" | ||||||
|       :submitMessage="submitMessage" |       :submitMessage="submitMessage" | ||||||
|       :status="status" |       :status="status" | ||||||
|  |       @close="beforeCloseStudyDig" | ||||||
|     /> |     /> | ||||||
|     <base-model v-if="addSubject_model.visible" :config="addSubject_model"> |     <base-model v-if="addSubject_model.visible" :config="addSubject_model"> | ||||||
|       <template slot="dialog-body"> |       <template slot="dialog-body"> | ||||||
|  |  | ||||||
|  | @ -456,6 +456,7 @@ export default { | ||||||
|       }); |       }); | ||||||
|       var newWindow = window.open(routeData.href, "_blank"); |       var newWindow = window.open(routeData.href, "_blank"); | ||||||
|       this.$emit("setOpenWindow", newWindow); |       this.$emit("setOpenWindow", newWindow); | ||||||
|  |       this.$setOpenWindow(newWindow); | ||||||
|     }, |     }, | ||||||
|     // 确认提交 |     // 确认提交 | ||||||
|     async confirmSubmit() { |     async confirmSubmit() { | ||||||
|  | @ -487,6 +488,7 @@ export default { | ||||||
|           this.$message.success( |           this.$message.success( | ||||||
|             this.$t("trials:crcUpload:message:submittedSuccessfully") |             this.$t("trials:crcUpload:message:submittedSuccessfully") | ||||||
|           ); |           ); | ||||||
|  |           this.$emit("close"); | ||||||
|         } |         } | ||||||
|       } catch (err) { |       } catch (err) { | ||||||
|         this.btnLoading2 = false; |         this.btnLoading2 = false; | ||||||
|  |  | ||||||
|  | @ -38,22 +38,11 @@ | ||||||
|               overflow: hidden; |               overflow: hidden; | ||||||
|               text-overflow: ellipsis; |               text-overflow: ellipsis; | ||||||
|               white-space: nowrap; |               white-space: nowrap; | ||||||
|               width: 80px; |               width: 150px; | ||||||
|             " |             " | ||||||
|           > |           > | ||||||
|             {{ $t("trials:trials-list:table:researchNumber") }} |             {{ $t("trials:trials-list:table:researchNumber") }} | ||||||
|           </div> |           </div> | ||||||
|           <div |  | ||||||
|             style=" |  | ||||||
|               display: inline-block; |  | ||||||
|               overflow: hidden; |  | ||||||
|               text-overflow: ellipsis; |  | ||||||
|               white-space: nowrap; |  | ||||||
|               width: 160px; |  | ||||||
|             " |  | ||||||
|           > |  | ||||||
|             {{ $t("trials:trials-list:table:experimentName") }} |  | ||||||
|           </div> |  | ||||||
|           <div |           <div | ||||||
|             style=" |             style=" | ||||||
|               display: inline-block; |               display: inline-block; | ||||||
|  | @ -65,6 +54,17 @@ | ||||||
|           > |           > | ||||||
|             {{ $t("trials:trials-list:table:sponsor") }} |             {{ $t("trials:trials-list:table:sponsor") }} | ||||||
|           </div> |           </div> | ||||||
|  |           <div | ||||||
|  |             style=" | ||||||
|  |               display: inline-block; | ||||||
|  |               overflow: hidden; | ||||||
|  |               text-overflow: ellipsis; | ||||||
|  |               white-space: nowrap; | ||||||
|  |               width: 160px; | ||||||
|  |             " | ||||||
|  |           > | ||||||
|  |             {{ $t("trials:trials-list:table:experimentName") }} | ||||||
|  |           </div> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|       <el-tooltip |       <el-tooltip | ||||||
|  | @ -80,11 +80,11 @@ | ||||||
|           {{ $t("trials:trials-list:table:researchNumber") }}: |           {{ $t("trials:trials-list:table:researchNumber") }}: | ||||||
|           {{ item.ResearchProgramNo }} |           {{ item.ResearchProgramNo }} | ||||||
|           <br /> |           <br /> | ||||||
|           {{ $t("trials:trials-list:table:experimentName") }}: |  | ||||||
|           {{ item.ExperimentName }} |  | ||||||
|           <br /> |  | ||||||
|           {{ $t("trials:trials-list:table:sponsor") }}: |           {{ $t("trials:trials-list:table:sponsor") }}: | ||||||
|           {{ item.SponsorName }} |           {{ item.SponsorName }} | ||||||
|  |           <br /> | ||||||
|  |           {{ $t("trials:trials-list:table:experimentName") }}: | ||||||
|  |           {{ item.ExperimentName }} | ||||||
|         </div> |         </div> | ||||||
|         <div |         <div | ||||||
|           class="options_item" |           class="options_item" | ||||||
|  | @ -100,22 +100,11 @@ | ||||||
|               overflow: hidden; |               overflow: hidden; | ||||||
|               text-overflow: ellipsis; |               text-overflow: ellipsis; | ||||||
|               white-space: nowrap; |               white-space: nowrap; | ||||||
|               width: 80px; |               width: 150px; | ||||||
|             " |             " | ||||||
|           > |           > | ||||||
|             {{ item.ResearchProgramNo }} |             {{ item.ResearchProgramNo }} | ||||||
|           </div> |           </div> | ||||||
|           <div |  | ||||||
|             style=" |  | ||||||
|               display: inline-block; |  | ||||||
|               overflow: hidden; |  | ||||||
|               text-overflow: ellipsis; |  | ||||||
|               white-space: nowrap; |  | ||||||
|               width: 160px; |  | ||||||
|             " |  | ||||||
|           > |  | ||||||
|             {{ item.ExperimentName }} |  | ||||||
|           </div> |  | ||||||
|           <div |           <div | ||||||
|             style=" |             style=" | ||||||
|               display: inline-block; |               display: inline-block; | ||||||
|  | @ -127,6 +116,17 @@ | ||||||
|           > |           > | ||||||
|             {{ item.SponsorName }} |             {{ item.SponsorName }} | ||||||
|           </div> |           </div> | ||||||
|  |           <div | ||||||
|  |             style=" | ||||||
|  |               display: inline-block; | ||||||
|  |               overflow: hidden; | ||||||
|  |               text-overflow: ellipsis; | ||||||
|  |               white-space: nowrap; | ||||||
|  |               width: 160px; | ||||||
|  |             " | ||||||
|  |           > | ||||||
|  |             {{ item.ExperimentName }} | ||||||
|  |           </div> | ||||||
|         </div> |         </div> | ||||||
|       </el-tooltip> |       </el-tooltip> | ||||||
|     </div> |     </div> | ||||||
|  | @ -233,7 +233,11 @@ export default { | ||||||
|     inputChange(v) { |     inputChange(v) { | ||||||
|       this.resultFilter = this.options.filter((o) => { |       this.resultFilter = this.options.filter((o) => { | ||||||
|         var reg = new RegExp(v, "ig"); |         var reg = new RegExp(v, "ig"); | ||||||
|         return reg.test(o.ResearchProgramNo) || reg.test(o.ExperimentName)|| reg.test(o.SponsorName); |         return ( | ||||||
|  |           reg.test(o.ResearchProgramNo) || | ||||||
|  |           reg.test(o.ExperimentName) || | ||||||
|  |           reg.test(o.SponsorName) | ||||||
|  |         ); | ||||||
|       }); |       }); | ||||||
|     }, |     }, | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|  | @ -207,6 +207,7 @@ export default { | ||||||
|   methods: { |   methods: { | ||||||
|     // 关闭弹框 |     // 关闭弹框 | ||||||
|     beforeCloseStudyDig() { |     beforeCloseStudyDig() { | ||||||
|  |       this.$setOpenWindow(); | ||||||
|       this.$emit("update:visible", false); |       this.$emit("update:visible", false); | ||||||
|     }, |     }, | ||||||
|     // 获取列表 |     // 获取列表 | ||||||
|  | @ -256,7 +257,8 @@ export default { | ||||||
|       const routeData = this.$router.resolve({ |       const routeData = this.$router.resolve({ | ||||||
|         path: `/showdicom?studyId=${item.SCPStudyId}&TokenKey=${token}&type=Patient`, |         path: `/showdicom?studyId=${item.SCPStudyId}&TokenKey=${token}&type=Patient`, | ||||||
|       }); |       }); | ||||||
|       window.open(routeData.href, "_blank"); |       let newWindow = window.open(routeData.href, "_blank"); | ||||||
|  |       this.$setOpenWindow(newWindow); | ||||||
|     }, |     }, | ||||||
|     // 查看报告 |     // 查看报告 | ||||||
|     report() {}, |     report() {}, | ||||||
|  |  | ||||||
|  | @ -110,7 +110,7 @@ | ||||||
|           v-model="trialForm.CriterionTypeList" |           v-model="trialForm.CriterionTypeList" | ||||||
|           multiple |           multiple | ||||||
|           clearable |           clearable | ||||||
|           :disabled="trialForm.Id !== ''" |           :disabled="TrialStatusStr === 'Ongoing'" | ||||||
|         > |         > | ||||||
|           <el-option |           <el-option | ||||||
|             v-for="item of CriterionTypeList" |             v-for="item of CriterionTypeList" | ||||||
|  | @ -330,6 +330,7 @@ export default { | ||||||
|       phaseNum: null, |       phaseNum: null, | ||||||
|       dictionaryList: {}, |       dictionaryList: {}, | ||||||
|       CriterionTypeList: [], // 阅片标准列表 |       CriterionTypeList: [], // 阅片标准列表 | ||||||
|  |       TrialStatusStr: null, // 项目状态 | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|   computed: { |   computed: { | ||||||
|  | @ -367,6 +368,7 @@ export default { | ||||||
|                 )[0].raw.ChildGroup; |                 )[0].raw.ChildGroup; | ||||||
|               } |               } | ||||||
|             } |             } | ||||||
|  |             this.TrialStatusStr = res.Result.TrialStatusStr; | ||||||
|           } |           } | ||||||
|         }) |         }) | ||||||
|         .catch(() => { |         .catch(() => { | ||||||
|  |  | ||||||
|  | @ -75,7 +75,7 @@ | ||||||
|       </el-form-item> |       </el-form-item> | ||||||
|       <!-- 激活码 --> |       <!-- 激活码 --> | ||||||
|       <el-form-item label="激活码"> |       <el-form-item label="激活码"> | ||||||
|         <span>{{ form.code }}</span> |         <el-input v-model="form.code" /> | ||||||
|       </el-form-item> |       </el-form-item> | ||||||
|     </div> |     </div> | ||||||
|     <div class="base-dialog-footer" style="text-align: right; margin-top: 10px"> |     <div class="base-dialog-footer" style="text-align: right; margin-top: 10px"> | ||||||
|  | @ -122,6 +122,7 @@ export default { | ||||||
|         PurchaseDuration: null, |         PurchaseDuration: null, | ||||||
|         TrialCode: null, |         TrialCode: null, | ||||||
|         TrialId: null, |         TrialId: null, | ||||||
|  |         HospitalCode: null, | ||||||
|       }, |       }, | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|  | @ -159,6 +160,7 @@ export default { | ||||||
|           CriterionTypeList: this.data.CriterionTypeList, |           CriterionTypeList: this.data.CriterionTypeList, | ||||||
|           CreateUserId: this.data.CreateUserId, |           CreateUserId: this.data.CreateUserId, | ||||||
|           AuthorizationDeadLineDate: null, |           AuthorizationDeadLineDate: null, | ||||||
|  |           HospitalCode: this.data.HospitalCode, | ||||||
|         }; |         }; | ||||||
|         let res = await getTrialActivationCode(params); |         let res = await getTrialActivationCode(params); | ||||||
|         if (res.IsSuccess) { |         if (res.IsSuccess) { | ||||||
|  |  | ||||||
|  | @ -15,7 +15,7 @@ | ||||||
|       label-width="120px" |       label-width="120px" | ||||||
|     > |     > | ||||||
|       <div class="base-dialog-body"> |       <div class="base-dialog-body"> | ||||||
|         <p>授权申请信息</p> |         <p>{{ $t("trials:activate:ApplyMessage") }}</p> | ||||||
|         <!-- 单位名称 --> |         <!-- 单位名称 --> | ||||||
|         <el-form-item |         <el-form-item | ||||||
|           :label="$t('trials:trials-list:activate:organizationName')" |           :label="$t('trials:trials-list:activate:organizationName')" | ||||||
|  | @ -71,13 +71,6 @@ | ||||||
|           prop="Activate" |           prop="Activate" | ||||||
|         > |         > | ||||||
|           <el-input v-model="form.Activate" :disabled="isActivate" /> |           <el-input v-model="form.Activate" :disabled="isActivate" /> | ||||||
|           <span |  | ||||||
|             v-if="form.Activate" |  | ||||||
|             class="copy" |  | ||||||
|             @click.stop="getActivationCodeInfo" |  | ||||||
|             style="margin-left: 10px" |  | ||||||
|             >{{ $t("trials:reviewTrack:impactList:save") }}</span |  | ||||||
|           > |  | ||||||
|           <input |           <input | ||||||
|             type="file" |             type="file" | ||||||
|             id="uploadFileInp" |             id="uploadFileInp" | ||||||
|  | @ -91,9 +84,16 @@ | ||||||
|             v-if="!isActivate" |             v-if="!isActivate" | ||||||
|             >{{ $t("trials:activate:button:upload") }}</label |             >{{ $t("trials:activate:button:upload") }}</label | ||||||
|           > |           > | ||||||
|  |           <span | ||||||
|  |             v-if="form.Activate" | ||||||
|  |             class="copy" | ||||||
|  |             @click.stop="getActivationCodeInfo" | ||||||
|  |             style="margin-left: 10px" | ||||||
|  |             >{{ $t("trials:reviewTrack:impactList:save") }}</span | ||||||
|  |           > | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <div v-if="isActivate"> |         <div v-if="isActivate"> | ||||||
|           <p>授权信息</p> |           <p>{{ $t("trials:activate:Message") }}</p> | ||||||
|           <!-- 单位名称 --> |           <!-- 单位名称 --> | ||||||
|           <el-form-item |           <el-form-item | ||||||
|             :label="$t('trials:trials-list:activate:organizationName')" |             :label="$t('trials:trials-list:activate:organizationName')" | ||||||
|  | @ -184,6 +184,7 @@ export default { | ||||||
|         HospitalName: null, |         HospitalName: null, | ||||||
|         CriterionTypeList: [], |         CriterionTypeList: [], | ||||||
|         CreateUserId: null, |         CreateUserId: null, | ||||||
|  |         HospitalCode: null, | ||||||
|         AuthorizationDeadLineDate: null, |         AuthorizationDeadLineDate: null, | ||||||
|       }, |       }, | ||||||
|       ActivateData: { |       ActivateData: { | ||||||
|  | @ -193,6 +194,7 @@ export default { | ||||||
|         HospitalName: null, |         HospitalName: null, | ||||||
|         CriterionTypeList: [], |         CriterionTypeList: [], | ||||||
|         CreateUserId: null, |         CreateUserId: null, | ||||||
|  |         HospitalCode: null, | ||||||
|         AuthorizationDeadLineDate: null, |         AuthorizationDeadLineDate: null, | ||||||
|       }, |       }, | ||||||
|       btnLoading: false, |       btnLoading: false, | ||||||
|  | @ -260,6 +262,7 @@ export default { | ||||||
|         HospitalName: this.form.HospitalName, |         HospitalName: this.form.HospitalName, | ||||||
|         CriterionTypeList: this.form.CriterionTypeList, |         CriterionTypeList: this.form.CriterionTypeList, | ||||||
|         CreateUserId: this.form.CreateUserId, |         CreateUserId: this.form.CreateUserId, | ||||||
|  |         HospitalCode: this.form.HospitalCode, | ||||||
|       }; |       }; | ||||||
|       try { |       try { | ||||||
|         let res = await getTrialAuthorizationCode(params); |         let res = await getTrialAuthorizationCode(params); | ||||||
|  |  | ||||||
|  | @ -99,6 +99,7 @@ | ||||||
|         stripe |         stripe | ||||||
|         height="100" |         height="100" | ||||||
|         @sort-change="handleSortChange" |         @sort-change="handleSortChange" | ||||||
|  |         @row-click="handleDetail" | ||||||
|       > |       > | ||||||
|         <!-- <el-table-column type="selection" align="left" width="45" /> --> |         <!-- <el-table-column type="selection" align="left" width="45" /> --> | ||||||
|         <el-table-column width="40"> |         <el-table-column width="40"> | ||||||
|  | @ -166,12 +167,6 @@ | ||||||
|           show-overflow-tooltip |           show-overflow-tooltip | ||||||
|           sortable="custom" |           sortable="custom" | ||||||
|         /> |         /> | ||||||
|         <!--是否授权--> |  | ||||||
|         <!-- <el-table-column |  | ||||||
|           prop="Sponsor" |  | ||||||
|           :label="$t('trials:trials-list:table:isAccredit')" |  | ||||||
|           show-overflow-tooltip |  | ||||||
|         /> --> |  | ||||||
|         <el-table-column |         <el-table-column | ||||||
|           prop="TrialStatusStr" |           prop="TrialStatusStr" | ||||||
|           :label="$t('trials:trials-list:table:status')" |           :label="$t('trials:trials-list:table:status')" | ||||||
|  | @ -201,27 +196,41 @@ | ||||||
|             > |             > | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|  |         <!--阅片标准--> | ||||||
|  |         <el-table-column | ||||||
|  |           prop="CriterionTypeList" | ||||||
|  |           :label="$t('trials:trials-list:table:CriterionTypeList')" | ||||||
|  |           show-overflow-tooltip | ||||||
|  |           v-if="hasPermi(['role:pm', 'role:pi', 'role:sr'])" | ||||||
|  |         > | ||||||
|  |           <template slot-scope="scope"> | ||||||
|  |             <span>{{ | ||||||
|  |               scope.row.CriterionTypeList.map((item) => | ||||||
|  |                 $fd("CriterionType", Number(item)) | ||||||
|  |               ).join(",") | ||||||
|  |             }}</span> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |         <!--待提交访视数量--> | ||||||
|  |         <el-table-column | ||||||
|  |           prop="UnSubmitCount" | ||||||
|  |           :label="$t('trials:trials-list:table:UnSubmitCount')" | ||||||
|  |           show-overflow-tooltip | ||||||
|  |           v-if="hasPermi(['role:pm'])" | ||||||
|  |         /> | ||||||
|  |         <!--待阅片数量--> | ||||||
|  |         <el-table-column | ||||||
|  |           prop="UnReadCount" | ||||||
|  |           :label="$t('trials:trials-list:table:UnReadCount')" | ||||||
|  |           show-overflow-tooltip | ||||||
|  |           v-if="hasPermi(['role:pm', 'role:pi', 'role:sr'])" | ||||||
|  |         /> | ||||||
|         <el-table-column |         <el-table-column | ||||||
|           prop="CreateTime" |           prop="CreateTime" | ||||||
|           :label="$t('trials:trials-list:table:createDate')" |           :label="$t('trials:trials-list:table:createDate')" | ||||||
|           show-overflow-tooltip |           show-overflow-tooltip | ||||||
|           sortable="custom" |           sortable="custom" | ||||||
|         /> |         /> | ||||||
|         <!--授权日期--> |  | ||||||
|         <!-- <el-table-column |  | ||||||
|           prop="AuthorizationDate" |  | ||||||
|           :label="$t('trials:trials-list:table:dateAuthorized')" |  | ||||||
|           show-overflow-tooltip |  | ||||||
|           sortable="custom" |  | ||||||
|         > |  | ||||||
|           <template slot-scope="scope"> |  | ||||||
|             <span>{{ |  | ||||||
|               scope.row.AuthorizationDate |  | ||||||
|                 ? moment(scope.row.AuthorizationDate) |  | ||||||
|                 : "" |  | ||||||
|             }}</span> |  | ||||||
|           </template> |  | ||||||
|         </el-table-column> --> |  | ||||||
|         <!--授权时长--> |         <!--授权时长--> | ||||||
|         <el-table-column |         <el-table-column | ||||||
|           prop="AuthorizationDuration" |           prop="AuthorizationDuration" | ||||||
|  | @ -238,7 +247,7 @@ | ||||||
|               icon="el-icon-info" |               icon="el-icon-info" | ||||||
|               :disabled="scope.row.IsDeleted" |               :disabled="scope.row.IsDeleted" | ||||||
|               :title="$t('trials:trials-list:action:panel')" |               :title="$t('trials:trials-list:action:panel')" | ||||||
|               @click="handleDetail(scope.row)" |               @click.stop="handleDetail(scope.row)" | ||||||
|             /> |             /> | ||||||
|             <!-- 编辑项目基本信息 --> |             <!-- 编辑项目基本信息 --> | ||||||
|             <el-button |             <el-button | ||||||
|  | @ -247,7 +256,7 @@ | ||||||
|               icon="el-icon-edit-outline" |               icon="el-icon-edit-outline" | ||||||
|               :disabled="scope.row.IsDeleted" |               :disabled="scope.row.IsDeleted" | ||||||
|               :title="$t('trials:trials-list:action:edit')" |               :title="$t('trials:trials-list:action:edit')" | ||||||
|               @click="handleEdit(scope.row)" |               @click.stop="handleEdit(scope.row)" | ||||||
|             /> |             /> | ||||||
|             <!-- 修改项目状态 --> |             <!-- 修改项目状态 --> | ||||||
|             <el-button |             <el-button | ||||||
|  | @ -256,7 +265,7 @@ | ||||||
|               icon="el-icon-edit" |               icon="el-icon-edit" | ||||||
|               :disabled="scope.row.IsDeleted" |               :disabled="scope.row.IsDeleted" | ||||||
|               :title="$t('trials:trials-list:action:status')" |               :title="$t('trials:trials-list:action:status')" | ||||||
|               @click="handleStatus(scope.row)" |               @click.stop="handleStatus(scope.row)" | ||||||
|             /> |             /> | ||||||
|             <!-- 废除项目 --> |             <!-- 废除项目 --> | ||||||
|             <el-button |             <el-button | ||||||
|  | @ -268,7 +277,7 @@ | ||||||
|                 scope.row.TrialStatusStr !== 'Initializing' |                 scope.row.TrialStatusStr !== 'Initializing' | ||||||
|               " |               " | ||||||
|               :title="$t('trials:trials-list:action:abolition')" |               :title="$t('trials:trials-list:action:abolition')" | ||||||
|               @click="handleAbandon(scope.row)" |               @click.stop="handleAbandon(scope.row)" | ||||||
|             /> |             /> | ||||||
|             <!-- 激活 --> |             <!-- 激活 --> | ||||||
|             <el-button |             <el-button | ||||||
|  | @ -277,7 +286,7 @@ | ||||||
|               circle |               circle | ||||||
|               icon="el-icon-key" |               icon="el-icon-key" | ||||||
|               :title="$t('trials:trials-list:action:activate')" |               :title="$t('trials:trials-list:action:activate')" | ||||||
|               @click="handleActivate(scope.row)" |               @click.stop="handleActivate(scope.row)" | ||||||
|             /> |             /> | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|  |  | ||||||
|  | @ -42,7 +42,7 @@ | ||||||
|           <el-input |           <el-input | ||||||
|             v-model="userForm.CheckCode" |             v-model="userForm.CheckCode" | ||||||
|             :placeholder="$t('trials:researchForm:form:checkCode')" |             :placeholder="$t('trials:researchForm:form:checkCode')" | ||||||
|             :maxlength="10" |             :maxlength="6" | ||||||
|             type="number" |             type="number" | ||||||
|           /> |           /> | ||||||
|           <!-- 修改 --> |           <!-- 修改 --> | ||||||
|  |  | ||||||
|  | @ -150,6 +150,7 @@ export default { | ||||||
|       }); |       }); | ||||||
|       var newWindow = window.open(routeData.href, "_blank"); |       var newWindow = window.open(routeData.href, "_blank"); | ||||||
|       this.$emit("setOpenWindow", newWindow); |       this.$emit("setOpenWindow", newWindow); | ||||||
|  |       this.$setOpenWindow(newWindow); | ||||||
|     }, |     }, | ||||||
|     // 预览影像 |     // 预览影像 | ||||||
|     handleViewStudy(row) { |     handleViewStudy(row) { | ||||||
|  | @ -159,6 +160,7 @@ export default { | ||||||
|       }); |       }); | ||||||
|       var newWindow = window.open(routeData.href, "_blank"); |       var newWindow = window.open(routeData.href, "_blank"); | ||||||
|       this.$emit("setOpenWindow", newWindow); |       this.$emit("setOpenWindow", newWindow); | ||||||
|  |       this.$setOpenWindow(newWindow); | ||||||
|     }, |     }, | ||||||
|   }, |   }, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -376,6 +376,7 @@ export default { | ||||||
|     }, |     }, | ||||||
|     // 关闭弹框 |     // 关闭弹框 | ||||||
|     beforeCloseStudyDig() { |     beforeCloseStudyDig() { | ||||||
|  |       this.$setOpenWindow(); | ||||||
|       this.$emit("update:visible", false); |       this.$emit("update:visible", false); | ||||||
|     }, |     }, | ||||||
|     // 预览 |     // 预览 | ||||||
|  | @ -390,6 +391,7 @@ export default { | ||||||
|       }); |       }); | ||||||
|       var newWindow = window.open(routeData.href, "_blank"); |       var newWindow = window.open(routeData.href, "_blank"); | ||||||
|       this.$emit("setOpenWindow", newWindow); |       this.$emit("setOpenWindow", newWindow); | ||||||
|  |       this.$setOpenWindow(newWindow); | ||||||
|     }, |     }, | ||||||
|     // 当前检查移除 |     // 当前检查移除 | ||||||
|     remove(item) { |     remove(item) { | ||||||
|  |  | ||||||
|  | @ -184,6 +184,7 @@ export default { | ||||||
|       }); |       }); | ||||||
|       var newWindow = window.open(routeData.href, "_blank"); |       var newWindow = window.open(routeData.href, "_blank"); | ||||||
|       this.$emit("setOpenWindow", newWindow); |       this.$emit("setOpenWindow", newWindow); | ||||||
|  |       this.$setOpenWindow(newWindow); | ||||||
|     }, |     }, | ||||||
|     // 预览影像 |     // 预览影像 | ||||||
|     handleViewStudy(row) { |     handleViewStudy(row) { | ||||||
|  | @ -193,6 +194,7 @@ export default { | ||||||
|       }); |       }); | ||||||
|       var newWindow = window.open(routeData.href, "_blank"); |       var newWindow = window.open(routeData.href, "_blank"); | ||||||
|       this.$emit("setOpenWindow", newWindow); |       this.$emit("setOpenWindow", newWindow); | ||||||
|  |       this.$setOpenWindow(newWindow); | ||||||
|     }, |     }, | ||||||
|     getBodyPart(bodyPart) { |     getBodyPart(bodyPart) { | ||||||
|       if (!bodyPart) return ""; |       if (!bodyPart) return ""; | ||||||
|  |  | ||||||
|  | @ -343,6 +343,10 @@ export default { | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|   created() { |   created() { | ||||||
|  |     if (zzSessionStorage.getItem("SubjectCode")) { | ||||||
|  |       this.searchData.SubjectCode = zzSessionStorage.getItem("SubjectCode"); | ||||||
|  |       zzSessionStorage.removeItem("SubjectCode"); | ||||||
|  |     } | ||||||
|     this.getList(); |     this.getList(); | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|  |  | ||||||
|  | @ -150,6 +150,14 @@ | ||||||
|           sortable="custom" |           sortable="custom" | ||||||
|           show-overflow-tooltip |           show-overflow-tooltip | ||||||
|         /> |         /> | ||||||
|  |         <!-- 阅片标准 --> | ||||||
|  |         <el-table-column | ||||||
|  |           prop="TrialReadingCriterionName" | ||||||
|  |           :label="$t('trials:adReview:table:TrialReadingCriterionName')" | ||||||
|  |           min-width="100" | ||||||
|  |           sortable="custom" | ||||||
|  |           show-overflow-tooltip | ||||||
|  |         /> | ||||||
|         <!-- 任务状态 --> |         <!-- 任务状态 --> | ||||||
|         <el-table-column |         <el-table-column | ||||||
|           prop="TaskState" |           prop="TaskState" | ||||||
|  |  | ||||||
|  | @ -317,7 +317,7 @@ export default { | ||||||
|       loading: false, |       loading: false, | ||||||
|       total: 0, |       total: 0, | ||||||
|       // 修改检查 |       // 修改检查 | ||||||
|       reportBtnLoading: false, |       reportFlag: {}, | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|   created() { |   created() { | ||||||
|  | @ -331,16 +331,21 @@ export default { | ||||||
|     }, |     }, | ||||||
|     // 评估报告 |     // 评估报告 | ||||||
|     async showReport(item) { |     async showReport(item) { | ||||||
|       if (this.reportBtnLoading) return; |       if (this.reportFlag[item.Id]) return; | ||||||
|       let data = { |       let data = { | ||||||
|         VisitTaskId: item.Id, |         VisitTaskId: item.Id, | ||||||
|       }; |       }; | ||||||
|       try { |       try { | ||||||
|         this.reportBtnLoading = true; |         if (!this.reportFlag.hasOwnProperty(item.Id)) { | ||||||
|  |           this.$set(this.reportFlag, item.Id, true); | ||||||
|  |         } | ||||||
|  |         if (!this.reportFlag[item.Id]) { | ||||||
|  |           this.reportFlag[item.Id] = true; | ||||||
|  |         } | ||||||
|         let res = await downLoadReadReport(data); |         let res = await downLoadReadReport(data); | ||||||
|         this.reportBtnLoading = false; |         this.reportFlag[item.Id] = false; | ||||||
|       } catch (err) { |       } catch (err) { | ||||||
|         this.reportBtnLoading = false; |         this.reportFlag[item.Id] = false; | ||||||
|         console.log(err); |         console.log(err); | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
|  | @ -20,7 +20,6 @@ | ||||||
|               :label="item.UserTypeShortName" |               :label="item.UserTypeShortName" | ||||||
|               :value="item.Id" |               :value="item.Id" | ||||||
|             > |             > | ||||||
|               <span>{{ item.UserType }}</span> |  | ||||||
|             </el-option> |             </el-option> | ||||||
|           </el-select> |           </el-select> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|  | @ -74,14 +73,14 @@ | ||||||
|             {{ $t('trials:staff:button:addExternalStaff') }} |             {{ $t('trials:staff:button:addExternalStaff') }} | ||||||
|           </el-button> --> |           </el-button> --> | ||||||
|           <!-- 导出 --> |           <!-- 导出 --> | ||||||
|           <el-button |           <!-- <el-button | ||||||
|             type="primary" |             type="primary" | ||||||
|             icon="el-icon-download" |             icon="el-icon-download" | ||||||
|             :disabled="list.length === 0" |             :disabled="list.length === 0" | ||||||
|             @click="handleExport" |             @click="handleExport" | ||||||
|           > |           > | ||||||
|             {{ $t("common:button:export") }} |             {{ $t("common:button:export") }} | ||||||
|           </el-button> |           </el-button> --> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|       </el-form> |       </el-form> | ||||||
|     </div> |     </div> | ||||||
|  | @ -241,7 +240,11 @@ | ||||||
|     <!-- 分配参与人员模态框 --> |     <!-- 分配参与人员模态框 --> | ||||||
|     <base-model v-if="staff_model.visible" :config="staff_model"> |     <base-model v-if="staff_model.visible" :config="staff_model"> | ||||||
|       <template slot="dialog-body"> |       <template slot="dialog-body"> | ||||||
|         <StaffForm v-if="isAdd == 'Add'" @closeDialog="closeDialog" /> |         <StaffForm | ||||||
|  |           v-if="isAdd == 'Add'" | ||||||
|  |           :userTypeOptions="userTypeOptions" | ||||||
|  |           @closeDialog="closeDialog" | ||||||
|  |         /> | ||||||
|         <StaffExternalForm |         <StaffExternalForm | ||||||
|           v-else |           v-else | ||||||
|           @closeDialog="closeDialog" |           @closeDialog="closeDialog" | ||||||
|  | @ -335,6 +338,7 @@ import { | ||||||
|   updateTrialUser, |   updateTrialUser, | ||||||
|   trialUserListExport, |   trialUserListExport, | ||||||
| } from "@/api/trials"; | } from "@/api/trials"; | ||||||
|  | import { getUserTypeListByUserType } from "@/api/admin"; | ||||||
| import Pagination from "@/components/Pagination"; | import Pagination from "@/components/Pagination"; | ||||||
| import StaffForm from "./staffForm"; | import StaffForm from "./staffForm"; | ||||||
| import StaffExternalForm from "./staffExternalForm"; | import StaffExternalForm from "./staffExternalForm"; | ||||||
|  | @ -517,8 +521,12 @@ export default { | ||||||
|     }, |     }, | ||||||
|     // 获取用户类型下拉数据 |     // 获取用户类型下拉数据 | ||||||
|     getUserType() { |     getUserType() { | ||||||
|       getTrialUserTypeList().then((res) => { |       getUserTypeListByUserType(0).then((res) => { | ||||||
|         this.userTypeOptions = res.Result; |         this.userTypeOptions = res.Result.map((item) => { | ||||||
|  |           if ([4, 5, 8, 9, 12].includes(item.UserTypeEnum)) { | ||||||
|  |             return item; | ||||||
|  |           } | ||||||
|  |         }).filter((item) => item); | ||||||
|       }); |       }); | ||||||
|     }, |     }, | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|  | @ -9,206 +9,313 @@ | ||||||
|         size="small" |         size="small" | ||||||
|       > |       > | ||||||
|         <!-- 姓 --> |         <!-- 姓 --> | ||||||
|         <el-form-item :label="$t('trials:externalStaff:table:lastName')" prop="LastName"> |         <el-form-item | ||||||
|  |           :label="$t('trials:externalStaff:table:lastName')" | ||||||
|  |           prop="LastName" | ||||||
|  |         > | ||||||
|           <el-input v-model="form.LastName" /> |           <el-input v-model="form.LastName" /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <!-- 名 --> |         <!-- 名 --> | ||||||
|         <el-form-item :label="$t('trials:externalStaff:table:firstName')" prop="FirstName"> |         <el-form-item | ||||||
|  |           :label="$t('trials:externalStaff:table:firstName')" | ||||||
|  |           prop="FirstName" | ||||||
|  |         > | ||||||
|           <el-input v-model="form.FirstName" /> |           <el-input v-model="form.FirstName" /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <!-- 用户类型 --> |         <!-- 用户类型 --> | ||||||
|         <el-form-item :label="$t('trials:externalStaff:table:userType')" prop="UserTypeId"> |         <el-form-item | ||||||
|           <el-select |           :label="$t('trials:externalStaff:table:userType')" | ||||||
|             v-model="form.UserTypeId" |           prop="UserTypeId" | ||||||
|             style="width:100%" |  | ||||||
|         > |         > | ||||||
|  |           <el-select v-model="form.UserTypeId" style="width: 100%"> | ||||||
|             <el-option |             <el-option | ||||||
|               v-for="item of userTypeOptions" |               v-for="item of userTypeOptions" | ||||||
|               :key="item.Id" |               :key="item.Id" | ||||||
|               :label="item.UserTypeShortName" |               :label="item.UserTypeShortName" | ||||||
|               :value="item.Id" |               :value="item.Id" | ||||||
|             > |             > | ||||||
|               <span>{{ item.UserType }}</span> |               <!-- <span>{{ item.UserType }}</span> --> | ||||||
|             </el-option> |             </el-option> | ||||||
|           </el-select> |           </el-select> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <!-- 电话号码 --> |         <!-- 电话号码 --> | ||||||
|         <el-form-item :label="$t('trials:externalStaff:table:phone')" prop="Phone"> |         <el-form-item | ||||||
|  |           :label="$t('trials:externalStaff:table:phone')" | ||||||
|  |           prop="Phone" | ||||||
|  |         > | ||||||
|           <el-input v-model="form.Phone" /> |           <el-input v-model="form.Phone" /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <!-- 邮箱 --> |         <!-- 邮箱 --> | ||||||
|         <el-form-item :label="$t('trials:externalStaff:table:email')" prop="Email"> |         <el-form-item | ||||||
|  |           :label="$t('trials:externalStaff:table:email')" | ||||||
|  |           prop="Email" | ||||||
|  |         > | ||||||
|           <el-input v-model="form.Email" /> |           <el-input v-model="form.Email" /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <!-- 单位 --> |         <!-- 单位 --> | ||||||
|         <el-form-item :label="$t('trials:externalStaff:table:organization')" prop="OrganizationName"> |         <el-form-item | ||||||
|  |           :label="$t('trials:externalStaff:table:organization')" | ||||||
|  |           prop="OrganizationName" | ||||||
|  |         > | ||||||
|           <el-input v-model="form.OrganizationName" /> |           <el-input v-model="form.OrganizationName" /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|       </el-form> |       </el-form> | ||||||
|       <div v-if="errorMsg" style="font-size: 12px;color: #f66;">{{ errorMsg }}</div> |       <div v-if="errorMsg" style="font-size: 12px; color: #f66"> | ||||||
|  |         {{ errorMsg }} | ||||||
|  |       </div> | ||||||
|     </template> |     </template> | ||||||
|     <template slot="dialog-footer"> |     <template slot="dialog-footer"> | ||||||
|       <!-- 取消 --> |       <!-- 取消 --> | ||||||
|       <el-button size="small" type="primary" :disabled="btnLoading" @click="handleCancel"> |       <el-button | ||||||
|         {{ $t('common:button:cancel') }} |         size="small" | ||||||
|  |         type="primary" | ||||||
|  |         :disabled="btnLoading" | ||||||
|  |         @click="handleCancel" | ||||||
|  |       > | ||||||
|  |         {{ $t("common:button:cancel") }} | ||||||
|       </el-button> |       </el-button> | ||||||
|       <!-- 保存 --> |       <!-- 保存 --> | ||||||
|       <el-button size="small" type="primary" :loading="btnLoading" @click="handleSave"> |       <el-button | ||||||
|         {{ $t('common:button:save') }} |         size="small" | ||||||
|  |         type="primary" | ||||||
|  |         :loading="btnLoading" | ||||||
|  |         @click="handleSave" | ||||||
|  |       > | ||||||
|  |         {{ $t("common:button:save") }} | ||||||
|       </el-button> |       </el-button> | ||||||
|       <!-- 保存且发邮件 --> |       <!-- 保存且发邮件 --> | ||||||
|       <el-button size="small" type="primary" :loading="btnLoading" @click="handleSave('SendEmail')"> |       <!-- <el-button size="small" type="primary" :loading="btnLoading" @click="handleSave('SendEmail')"> | ||||||
|         {{ $t('trials:externalStaff:button:saveAndSendEmail') }} |         {{ $t('trials:externalStaff:button:saveAndSendEmail') }} | ||||||
|       </el-button> |       </el-button> --> | ||||||
|     </template> |     </template> | ||||||
|   </base-model> |   </base-model> | ||||||
| </template> | </template> | ||||||
| <script> | <script> | ||||||
| import { addOrUpdateTrialExternalUser } from '@/api/trials' | import BaseModel from "@/components/BaseModel"; | ||||||
| import BaseModel from '@/components/BaseModel' | import { getHospital } from "@/api/hospital.js"; | ||||||
| 
 | import { addUser } from "@/api/admin.js"; | ||||||
| const formDataDefault = () => { | const formDataDefault = () => { | ||||||
|   return { |   return { | ||||||
|     Id: null, |  | ||||||
|     TrialId: null, |  | ||||||
|     LastName: null, |     LastName: null, | ||||||
|     FirstName: null, |     FirstName: null, | ||||||
|     UserTypeId: '', |     UserTypeId: "", | ||||||
|     Phone: null, |     Phone: null, | ||||||
|     Email: null, |     Email: null, | ||||||
|     OrganizationName: null |     IsSendEmail: false, | ||||||
|   } |     Sex: "9", | ||||||
| } |     IsZhiZhun: "", | ||||||
|  |     OrganizationName: "", | ||||||
|  |     DepartmentName: "", | ||||||
|  |     PositionName: "", | ||||||
|  |     IsTestUser: false, | ||||||
|  |     verifyCode: "", | ||||||
|  |     checkCode: "", | ||||||
|  |   }; | ||||||
|  | }; | ||||||
| export default { | export default { | ||||||
|   name: 'StaffExternalAdd', |   name: "StaffExternalAdd", | ||||||
|   components: { BaseModel }, |   components: { BaseModel }, | ||||||
|   props: { |   props: { | ||||||
|     userTypeOptions: { |     userTypeOptions: { | ||||||
|       type: Array, |       type: Array, | ||||||
|       default: function() { |       default: function () { | ||||||
|         return {} |         return {}; | ||||||
|       } |       }, | ||||||
|     } |     }, | ||||||
|   }, |   }, | ||||||
|   data() { |   data() { | ||||||
|     var checkPhone = (rule, value, callback) => { |     var checkPhone = (rule, value, callback) => { | ||||||
|       const phoneReg = /^1[3|4|5|7|8][0-9]{9}$/ |       const phoneReg = /^1[3|4|5|7|8][0-9]{9}$/; | ||||||
|       if (!value) { |       if (!value) { | ||||||
|         callback() |         callback(); | ||||||
|       } |       } | ||||||
|       setTimeout(() => { |       setTimeout(() => { | ||||||
|         if (!Number.isInteger(+value)) { |         if (!Number.isInteger(+value)) { | ||||||
|           callback(new Error(this.$t('trials:externalStaff:formRule:phone'))) |           callback(new Error(this.$t("trials:externalStaff:formRule:phone"))); | ||||||
|         } else { |         } else { | ||||||
|           if (phoneReg.test(value)) { |           if (phoneReg.test(value)) { | ||||||
|             callback() |             callback(); | ||||||
|           } else { |           } else { | ||||||
|             callback(new Error(this.$t('trials:externalStaff:formRule:phone'))) |             callback(new Error(this.$t("trials:externalStaff:formRule:phone"))); | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       }, 100) |       }, 100); | ||||||
|     } |     }; | ||||||
|     var validateEmail = (rule, value, callback) => { |     var validateEmail = (rule, value, callback) => { | ||||||
|       if (value === '') { |       if (value === "") { | ||||||
|         callback(new Error(this.$t('common:ruleMessage:specify'))) |         callback(new Error(this.$t("common:ruleMessage:specify"))); | ||||||
|       } else { |       } else { | ||||||
|         var reg = /^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$/ |         var reg = | ||||||
|  |           /^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$/; | ||||||
|         if (this.form.Email && reg.test(this.form.Email)) { |         if (this.form.Email && reg.test(this.form.Email)) { | ||||||
|           this.sendDisabled = false |           this.sendDisabled = false; | ||||||
|           callback() |           callback(); | ||||||
|         } else { |         } else { | ||||||
|           callback(new Error(this.$t('trials:externalStaff:formRule:email'))) |           callback(new Error(this.$t("trials:externalStaff:formRule:email"))); | ||||||
|           this.sendDisabled = true |           this.sendDisabled = true; | ||||||
|         } |  | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |     }; | ||||||
|     return { |     return { | ||||||
|       form: { |       form: { | ||||||
|         Id: null, |         // Id: null, | ||||||
|         LastName: null, |         LastName: null, | ||||||
|         FirstName: null, |         FirstName: null, | ||||||
|         UserTypeId: '', |         UserTypeId: "", | ||||||
|         Phone: null, |         Phone: null, | ||||||
|         Email: null, |         Email: null, | ||||||
|         TrialId: null, |         IsSendEmail: false, | ||||||
|         IsSendEmail: false |         Sex: "9", | ||||||
|  |         IsZhiZhun: "", | ||||||
|  |         OrganizationName: "", | ||||||
|  |         DepartmentName: "", | ||||||
|  |         PositionName: "", | ||||||
|  |         IsTestUser: false, | ||||||
|  |         verifyCode: "", | ||||||
|  |         checkCode: "", | ||||||
|       }, |       }, | ||||||
|       rules: { |       rules: { | ||||||
|         LastName: [ |         LastName: [ | ||||||
|           { required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, |           { | ||||||
|           { min: 0, max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50`, trigger: 'blur' } |             required: true, | ||||||
|  |             message: this.$t("common:ruleMessage:specify"), | ||||||
|  |             trigger: "blur", | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             min: 0, | ||||||
|  |             max: 50, | ||||||
|  |             message: `${this.$t("common:ruleMessage:maxLength")} 50`, | ||||||
|  |             trigger: "blur", | ||||||
|  |           }, | ||||||
|         ], |         ], | ||||||
|         FirstName: [ |         FirstName: [ | ||||||
|           { required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, |           { | ||||||
|           { min: 0, max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50`, trigger: 'blur' } |             required: true, | ||||||
|  |             message: this.$t("common:ruleMessage:specify"), | ||||||
|  |             trigger: "blur", | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             min: 0, | ||||||
|  |             max: 50, | ||||||
|  |             message: `${this.$t("common:ruleMessage:maxLength")} 50`, | ||||||
|  |             trigger: "blur", | ||||||
|  |           }, | ||||||
|         ], |         ], | ||||||
|         UserTypeId: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur'] }], |         UserTypeId: [ | ||||||
|         Phone: [ |           { | ||||||
|           { required: false, validator: checkPhone, trigger: ['blur'] } |             required: true, | ||||||
|  |             message: this.$t("common:ruleMessage:select"), | ||||||
|  |             trigger: ["blur"], | ||||||
|  |           }, | ||||||
|         ], |         ], | ||||||
|  |         Phone: [{ required: false, validator: checkPhone, trigger: ["blur"] }], | ||||||
|         Email: [ |         Email: [ | ||||||
|           { required: true, validator: validateEmail, trigger: ['blur'] } |           { required: true, validator: validateEmail, trigger: ["blur"] }, | ||||||
|         ] |         ], | ||||||
|       }, |       }, | ||||||
|       btnLoading: false, |       btnLoading: false, | ||||||
|       userRoles: [], |       userRoles: [], | ||||||
|       userTypeEnumInt: 0, |       userTypeEnumInt: 0, | ||||||
|       model_cfg: { visible: false, showClose: true, width: '600px', title: '', appendToBody: true }, |       model_cfg: { | ||||||
|       trialId: '', |         visible: false, | ||||||
|       errorMsg: null |         showClose: true, | ||||||
|     } |         width: "600px", | ||||||
|  |         title: "", | ||||||
|  |         appendToBody: true, | ||||||
|  |       }, | ||||||
|  |       trialId: "", | ||||||
|  |       errorMsg: null, | ||||||
|  |       hospitalName: null, | ||||||
|  |     }; | ||||||
|   }, |   }, | ||||||
|   watch: { |   watch: { | ||||||
|     model_cfg: { |     model_cfg: { | ||||||
|       handler(newName, oldName) { |       handler(newName, oldName) { | ||||||
|         this.errorMsg = null |         this.errorMsg = null; | ||||||
|       }, |       }, | ||||||
|       deep: true |       deep: true, | ||||||
|  |     }, | ||||||
|  |     "form.UserTypeId": { | ||||||
|  |       handler() { | ||||||
|  |         if (this.form.UserTypeId) { | ||||||
|  |           let name = this.getUserType(this.form.UserTypeId); | ||||||
|  |           if (["PM", "PI", "SR", "OA"].includes(name)) { | ||||||
|  |             this.form.IsZhiZhun = true; | ||||||
|  |             this.form.OrganizationName = this.hospitalName; | ||||||
|  |             return (this.IsZhiZhunDisabled = true); | ||||||
|           } |           } | ||||||
|  |         } | ||||||
|  |         this.form.IsZhiZhun = false; | ||||||
|  |         this.form.OrganizationName = null; | ||||||
|  |         this.IsZhiZhunDisabled = false; | ||||||
|  |       }, | ||||||
|  |       deep: true, | ||||||
|  |       immediate: true, | ||||||
|  |     }, | ||||||
|   }, |   }, | ||||||
|   mounted() { |   mounted() { | ||||||
|     this.trialId = this.$route.query.trialId |     this.trialId = this.$route.query.trialId; | ||||||
|  |     this.getInfo(); | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|  |     // 获取医院信息 | ||||||
|  |     async getInfo() { | ||||||
|  |       try { | ||||||
|  |         let res = await getHospital(); | ||||||
|  |         if (res.IsSuccess) { | ||||||
|  |           this.hospitalName = res.Result.HospitalName; | ||||||
|  |         } | ||||||
|  |       } catch (err) { | ||||||
|  |         console.log(err); | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     getUserType(id) { | ||||||
|  |       let obj = this.userTypeOptions.find((item) => item.Id === id); | ||||||
|  |       return obj.UserTypeShortName; | ||||||
|  |     }, | ||||||
|     openDialog(title, data) { |     openDialog(title, data) { | ||||||
|       this.model_cfg.visible = true |       this.model_cfg.visible = true; | ||||||
|       this.model_cfg.title = title |       this.model_cfg.title = title; | ||||||
|       if (Object.keys(data).length) { |       if (Object.keys(data).length) { | ||||||
|         this.form = { ...data } |         this.form = { ...data }; | ||||||
|       } else { |       } else { | ||||||
|         this.form = formDataDefault() |         this.form = formDataDefault(); | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     handleSave(v) { |     handleSave(v) { | ||||||
|       this.$refs.anonymizationFrom.validate(valid => { |       this.$refs.anonymizationFrom.validate((valid) => { | ||||||
|         if (valid) { |         if (valid) { | ||||||
|           this.btnLoading = true |           this.btnLoading = true; | ||||||
|           this.form.TrialId = this.trialId |           this.form.TrialId = this.trialId; | ||||||
|           if (v === 'SendEmail') { |           if (v === "SendEmail") { | ||||||
|             this.form.IsSendEmail = true |             this.form.IsSendEmail = true; | ||||||
|             this.form.BaseUrl = `${location.protocol}//${location.host}/login` |             this.form.BaseUrl = `${location.protocol}//${location.host}/login`; | ||||||
|             this.form.RouteUrl = `${location.protocol}//${location.host}/email-recompose` |             this.form.RouteUrl = `${location.protocol}//${location.host}/email-recompose`; | ||||||
|           } |           } | ||||||
|           addOrUpdateTrialExternalUser(this.form).then(res => { |           addUser(this.form) | ||||||
|             this.btnLoading = false |             .then((res) => { | ||||||
|             this.$message.success(this.$t('common:message:savedSuccessfully')) |               this.btnLoading = false; | ||||||
|             this.model_cfg.visible = false |               this.$message.success( | ||||||
|             this.$emit('getList') |                 this.$t("common:message:savedSuccessfully") | ||||||
|           }).catch((res) => { |               ); | ||||||
|  |               this.model_cfg.visible = false; | ||||||
|  |               this.$emit("getList"); | ||||||
|  |             }) | ||||||
|  |             .catch((res) => { | ||||||
|               if (res.Result) { |               if (res.Result) { | ||||||
|               this.$set(this.form, 'LastName', res.Result.LastName) |                 // this.$set(this.form, "LastName", res.Result.LastName); | ||||||
|               this.$set(this.form, 'FirstName', res.Result.FirstName) |                 // this.$set(this.form, "FirstName", res.Result.FirstName); | ||||||
|               this.$set(this.form, 'Phone', res.Result.Phone) |                 // this.$set(this.form, "Phone", res.Result.Phone); | ||||||
|               this.errorMsg = res.ErrorMessage |                 this.errorMsg = res.ErrorMessage; | ||||||
|               } |               } | ||||||
|             this.btnLoading = false |               this.btnLoading = false; | ||||||
|           }) |             }); | ||||||
|         } |         } | ||||||
|       }) |       }); | ||||||
|     }, |     }, | ||||||
|     handleCancel() { |     handleCancel() { | ||||||
|       this.model_cfg.visible = false |       this.model_cfg.visible = false; | ||||||
|     } |     }, | ||||||
|   } |   }, | ||||||
| } | }; | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -11,13 +11,13 @@ | ||||||
|           clearable |           clearable | ||||||
|         /> |         /> | ||||||
|         <!-- 用户名 --> |         <!-- 用户名 --> | ||||||
|         <span>{{ $t("trials:staff:table:uid") }}:</span> |         <!-- <span>{{ $t("trials:staff:table:uid") }}:</span> | ||||||
|         <el-input |         <el-input | ||||||
|           v-model="listQuery.UserName" |           v-model="listQuery.UserName" | ||||||
|           size="mini" |           size="mini" | ||||||
|           class="mr" |           class="mr" | ||||||
|           clearable |           clearable | ||||||
|         /> |         /> --> | ||||||
|         <!-- 单位 --> |         <!-- 单位 --> | ||||||
|         <span>{{ $t("trials:staff:table:organization") }}:</span> |         <span>{{ $t("trials:staff:table:organization") }}:</span> | ||||||
|         <el-input |         <el-input | ||||||
|  | @ -26,6 +26,9 @@ | ||||||
|           class="mr" |           class="mr" | ||||||
|           clearable |           clearable | ||||||
|         /> |         /> | ||||||
|  |         <!-- 邮箱 --> | ||||||
|  |         <span>{{ $t("trials:externalStaff:table:email") }}:</span> | ||||||
|  |         <el-input v-model="listQuery.EMail" size="mini" class="mr" clearable /> | ||||||
|         <!-- 用户类型 --> |         <!-- 用户类型 --> | ||||||
|         <span>{{ $t("trials:staff:table:userType") }}:</span> |         <span>{{ $t("trials:staff:table:userType") }}:</span> | ||||||
|         <el-select |         <el-select | ||||||
|  | @ -35,10 +38,10 @@ | ||||||
|           class="mr" |           class="mr" | ||||||
|         > |         > | ||||||
|           <el-option |           <el-option | ||||||
|             v-for="item in userTypeOptions" |             v-for="item of $d.UserType" | ||||||
|             :key="item.Id" |             :key="item.id" | ||||||
|             :label="item.UserTypeShortName" |             :label="item.label" | ||||||
|             :value="item.UserTypeEnum" |             :value="item.value" | ||||||
|           > |           > | ||||||
|           </el-option> |           </el-option> | ||||||
|         </el-select> |         </el-select> | ||||||
|  | @ -60,17 +63,26 @@ | ||||||
|         > |         > | ||||||
|           {{ $t("common:button:reset") }} |           {{ $t("common:button:reset") }} | ||||||
|         </el-button> |         </el-button> | ||||||
| 
 |         <!--添加新用户--> | ||||||
|  |         <el-button | ||||||
|  |           type="primary" | ||||||
|  |           size="mini" | ||||||
|  |           icon="el-icon-plus" | ||||||
|  |           @click="handleAdd" | ||||||
|  |           v-hasPermi="['role:pm']" | ||||||
|  |         > | ||||||
|  |           {{ $t("common:button:add") }} | ||||||
|  |         </el-button> | ||||||
|  |         <!--确认用户选择--> | ||||||
|         <el-button |         <el-button | ||||||
|           type="primary" |           type="primary" | ||||||
|           size="mini" |           size="mini" | ||||||
|           style="margin-left: auto" |           style="margin-left: auto" | ||||||
|           :disabled="selectArr.length === 0" |           :disabled="selectArr.length === 0" | ||||||
|           :loading="assignLoadStatus" |           :loading="assignLoadStatus" | ||||||
|           icon="el-icon-plus" |  | ||||||
|           @click="handleAssign" |           @click="handleAssign" | ||||||
|         > |         > | ||||||
|           {{ $t("common:button:add") }} |           {{ $t("common:button:confirm") }} | ||||||
|         </el-button> |         </el-button> | ||||||
|       </div> |       </div> | ||||||
|     </el-header> |     </el-header> | ||||||
|  | @ -99,13 +111,13 @@ | ||||||
|             min-width="100" |             min-width="100" | ||||||
|           /> |           /> | ||||||
|           <!-- 用户名 --> |           <!-- 用户名 --> | ||||||
|           <el-table-column |           <!-- <el-table-column | ||||||
|             prop="UserName" |             prop="UserName" | ||||||
|             :label="$t('trials:staff:table:uid')" |             :label="$t('trials:staff:table:uid')" | ||||||
|             show-overflow-tooltip |             show-overflow-tooltip | ||||||
|             sortable="custom" |             sortable="custom" | ||||||
|             min-width="100" |             min-width="100" | ||||||
|           /> |           /> --> | ||||||
|           <!-- 电话 --> |           <!-- 电话 --> | ||||||
|           <el-table-column |           <el-table-column | ||||||
|             prop="Phone" |             prop="Phone" | ||||||
|  | @ -149,27 +161,38 @@ | ||||||
|         @pagination="getList" |         @pagination="getList" | ||||||
|       /> |       /> | ||||||
|     </div> |     </div> | ||||||
|  |     <staffExternalAdd | ||||||
|  |       ref="StaffExternalAdd" | ||||||
|  |       :userTypeOptions="userTypeOptions" | ||||||
|  |       @getList="getList" | ||||||
|  |     /> | ||||||
|   </el-container> |   </el-container> | ||||||
| </template> | </template> | ||||||
| <script> | <script> | ||||||
| import { | import { getTrialUserScreeningList, addTrialUsers } from "@/api/trials"; | ||||||
|   getTrialUserScreeningList, |  | ||||||
|   addTrialUsers, |  | ||||||
|   getUserTypeList, |  | ||||||
| } from "@/api/trials"; |  | ||||||
| import Pagination from "@/components/Pagination"; | import Pagination from "@/components/Pagination"; | ||||||
|  | import staffExternalAdd from "./staffExternalAdd.vue"; | ||||||
| const getListQueryDefault = () => { | const getListQueryDefault = () => { | ||||||
|   return { |   return { | ||||||
|     UserRealName: "", |     UserRealName: "", | ||||||
|     UserName: "", |     UserName: "", | ||||||
|     OrganizationName: "", |     OrganizationName: "", | ||||||
|  |     EMail: null, | ||||||
|     UserTypeEnum: "", |     UserTypeEnum: "", | ||||||
|     PageIndex: 1, |     PageIndex: 1, | ||||||
|     PageSize: 20, |     PageSize: 20, | ||||||
|   }; |   }; | ||||||
| }; | }; | ||||||
| export default { | export default { | ||||||
|   components: { Pagination }, |   components: { Pagination, staffExternalAdd }, | ||||||
|  |   props: { | ||||||
|  |     userTypeOptions: { | ||||||
|  |       required: true, | ||||||
|  |       default: () => { | ||||||
|  |         return []; | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|   data() { |   data() { | ||||||
|     return { |     return { | ||||||
|       list: [], |       list: [], | ||||||
|  | @ -178,17 +201,24 @@ export default { | ||||||
|       selectArr: [], |       selectArr: [], | ||||||
|       assignLoadStatus: false, |       assignLoadStatus: false, | ||||||
|       isAdmin: JSON.parse(zzSessionStorage.getItem("IsAdmin")), |       isAdmin: JSON.parse(zzSessionStorage.getItem("IsAdmin")), | ||||||
|       userTypeOptions: [], |  | ||||||
|       trialId: "", |       trialId: "", | ||||||
|       qCProcessEnum: null, |       qCProcessEnum: null, | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|   mounted() { |   mounted() { | ||||||
|     this.trialId = this.$route.query.trialId; |     this.trialId = this.$route.query.trialId; | ||||||
|     this.getUserType(); |     // this.getUserType(); | ||||||
|     this.getList(); |     this.getList(); | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|  |     handleAdd() { | ||||||
|  |       this.$nextTick(() => { | ||||||
|  |         this.$refs["StaffExternalAdd"].openDialog( | ||||||
|  |           this.$t("trials:externalStaff:dialogTitle:add"), | ||||||
|  |           {} | ||||||
|  |         ); | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|     getList() { |     getList() { | ||||||
|       const loading = this.$loading({ |       const loading = this.$loading({ | ||||||
|         target: document.querySelector(".participant-container"), |         target: document.querySelector(".participant-container"), | ||||||
|  | @ -263,11 +293,11 @@ export default { | ||||||
|         return false; |         return false; | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     getUserType() { |     // getUserType() { | ||||||
|       getUserTypeList(2).then((res) => { |     //   getUserTypeList(2).then((res) => { | ||||||
|         this.userTypeOptions = res.Result; |     //     this.userTypeOptions = res.Result; | ||||||
|       }); |     //   }); | ||||||
|     }, |     // }, | ||||||
|   }, |   }, | ||||||
| }; | }; | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -38,34 +38,6 @@ | ||||||
|             </el-option> |             </el-option> | ||||||
|           </el-select> |           </el-select> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <!-- 申请号 --> |  | ||||||
|         <!-- <el-form-item :label="$t('trials:study:form:accessionNumber')"> |  | ||||||
|           <el-input v-model="searchData.SubjectInfo" style="width: 140px" /> |  | ||||||
|         </el-form-item> --> |  | ||||||
|         <!-- 检查设备 --> |  | ||||||
|         <!-- <el-form-item :label="$t('trials:studyList:table:modality')"> |  | ||||||
|           <el-select v-model="searchData.VisitPlanArray" clearable> |  | ||||||
|             <el-option |  | ||||||
|               v-for="item of $d.sex" |  | ||||||
|               :key="item.id" |  | ||||||
|               :label="item.label" |  | ||||||
|               :value="item.value" |  | ||||||
|             > |  | ||||||
|             </el-option> |  | ||||||
|           </el-select> |  | ||||||
|         </el-form-item> --> |  | ||||||
|         <!-- 检查类型 --> |  | ||||||
|         <!-- <el-form-item :label="$t('trials:seletctedReviews:form:modality')"> |  | ||||||
|           <el-select v-model="searchData.Modalities" clearable> |  | ||||||
|             <el-option |  | ||||||
|               v-for="item of $d.modalType" |  | ||||||
|               :key="item.id" |  | ||||||
|               :label="item.label" |  | ||||||
|               :value="item.value" |  | ||||||
|             > |  | ||||||
|             </el-option> |  | ||||||
|           </el-select> |  | ||||||
|         </el-form-item> --> |  | ||||||
|         <!-- 检查日期 --> |         <!-- 检查日期 --> | ||||||
|         <el-form-item :label="$t('trials:audit:table:studyDate')"> |         <el-form-item :label="$t('trials:audit:table:studyDate')"> | ||||||
|           <el-date-picker |           <el-date-picker | ||||||
|  | @ -77,18 +49,6 @@ | ||||||
|           > |           > | ||||||
|           </el-date-picker> |           </el-date-picker> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <!-- 状态 --> |  | ||||||
|         <!-- <el-form-item :label="$t('trials:seletctedReviews:table:status')"> |  | ||||||
|           <el-select v-model="searchData.VisitPlanArray" clearable> |  | ||||||
|             <el-option |  | ||||||
|               v-for="item of $d.sex" |  | ||||||
|               :key="item.id" |  | ||||||
|               :label="item.label" |  | ||||||
|               :value="item.value" |  | ||||||
|             > |  | ||||||
|             </el-option> |  | ||||||
|           </el-select> |  | ||||||
|         </el-form-item> --> |  | ||||||
|         <el-form-item> |         <el-form-item> | ||||||
|           <!-- 查询 --> |           <!-- 查询 --> | ||||||
|           <el-button type="primary" icon="el-icon-search" @click="handleSearch"> |           <el-button type="primary" icon="el-icon-search" @click="handleSearch"> | ||||||
|  | @ -460,6 +420,7 @@ export default { | ||||||
|       }); |       }); | ||||||
|       var newWindow = window.open(routeData.href, "_blank"); |       var newWindow = window.open(routeData.href, "_blank"); | ||||||
|       this.$emit("setOpenWindow", newWindow); |       this.$emit("setOpenWindow", newWindow); | ||||||
|  |       this.$setOpenWindow(newWindow); | ||||||
|     }, |     }, | ||||||
|     // 查询 |     // 查询 | ||||||
|     handleSearch() { |     handleSearch() { | ||||||
|  |  | ||||||
|  | @ -107,6 +107,7 @@ | ||||||
|       :Patient="Patient" |       :Patient="Patient" | ||||||
|       :submitMessage="submitMessage" |       :submitMessage="submitMessage" | ||||||
|       :status="status" |       :status="status" | ||||||
|  |       @close="beforeCloseStudyDig" | ||||||
|     /> |     /> | ||||||
|     <base-model v-if="patient_model.visible" :config="patient_model"> |     <base-model v-if="patient_model.visible" :config="patient_model"> | ||||||
|       <template slot="dialog-body"> |       <template slot="dialog-body"> | ||||||
|  |  | ||||||
|  | @ -2,7 +2,6 @@ | ||||||
|   <el-dialog |   <el-dialog | ||||||
|     :visible.sync="visible" |     :visible.sync="visible" | ||||||
|     :close-on-click-modal="false" |     :close-on-click-modal="false" | ||||||
|     :fullscreen="true" |  | ||||||
|     custom-class="upload-dialog" |     custom-class="upload-dialog" | ||||||
|     :before-close="beforeClosePitentDig" |     :before-close="beforeClosePitentDig" | ||||||
|   > |   > | ||||||
|  | @ -10,10 +9,9 @@ | ||||||
|     <el-table |     <el-table | ||||||
|       ref="patientStudyList" |       ref="patientStudyList" | ||||||
|       v-loading="loading" |       v-loading="loading" | ||||||
|       v-adaptive="{ bottomOffset: 60 }" |  | ||||||
|       :data="list" |       :data="list" | ||||||
|       stripe |       stripe | ||||||
|       height="100" |       height="300px" | ||||||
|     > |     > | ||||||
|       <el-table-column type="index" width="40" /> |       <el-table-column type="index" width="40" /> | ||||||
|       <!--患者ID--> |       <!--患者ID--> | ||||||
|  | @ -49,7 +47,7 @@ | ||||||
|         sortable="custom" |         sortable="custom" | ||||||
|       ></el-table-column> |       ></el-table-column> | ||||||
|       <!--操作--> |       <!--操作--> | ||||||
|       <el-table-column :label="$t('common:action:action')" width="250"> |       <el-table-column :label="$t('common:action:action')" width="80"> | ||||||
|         <template slot-scope="scope"> |         <template slot-scope="scope"> | ||||||
|           <el-button |           <el-button | ||||||
|             circle |             circle | ||||||
|  |  | ||||||
|  | @ -8,9 +8,9 @@ | ||||||
|           <el-input v-model="searchData.Code" style="width: 130px" clearable /> |           <el-input v-model="searchData.Code" style="width: 130px" clearable /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <!-- 患者编号 --> |         <!-- 患者编号 --> | ||||||
|         <!-- <el-form-item :label="$t('trials:uploadDicomList:table:pId')"> |         <el-form-item :label="$t('trials:uploadDicomList:table:pId')"> | ||||||
|           <el-input v-model="searchData.Code" style="width: 130px" /> |           <el-input v-model="searchData.PatientIdStr" style="width: 130px" /> | ||||||
|         </el-form-item> --> |         </el-form-item> | ||||||
|         <!-- 姓名 --> |         <!-- 姓名 --> | ||||||
|         <el-form-item :label="$t('trials:researchStaff:table:Name')"> |         <el-form-item :label="$t('trials:researchStaff:table:Name')"> | ||||||
|           <el-input |           <el-input | ||||||
|  | @ -36,7 +36,7 @@ | ||||||
|           </el-select> |           </el-select> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <!-- 状态 --> |         <!-- 状态 --> | ||||||
|         <el-form-item :label="$t('trials:subject:table:status')"> |         <!-- <el-form-item :label="$t('trials:subject:table:status')"> | ||||||
|           <el-select v-model="searchData.Status" clearable style="width: 130px"> |           <el-select v-model="searchData.Status" clearable style="width: 130px"> | ||||||
|             <el-option |             <el-option | ||||||
|               v-for="item of $d.Subject_Visit_Status" |               v-for="item of $d.Subject_Visit_Status" | ||||||
|  | @ -45,7 +45,7 @@ | ||||||
|               :label="item.label" |               :label="item.label" | ||||||
|             /> |             /> | ||||||
|           </el-select> |           </el-select> | ||||||
|         </el-form-item> |         </el-form-item> --> | ||||||
|         <el-form-item> |         <el-form-item> | ||||||
|           <!-- 查询 --> |           <!-- 查询 --> | ||||||
|           <el-button type="primary" icon="el-icon-search" @click="handleSearch"> |           <el-button type="primary" icon="el-icon-search" @click="handleSearch"> | ||||||
|  | @ -162,7 +162,18 @@ | ||||||
|           :label="$t('trials:subject:table:totalVisitCount')" |           :label="$t('trials:subject:table:totalVisitCount')" | ||||||
|           show-overflow-tooltip |           show-overflow-tooltip | ||||||
|           sortable="custom" |           sortable="custom" | ||||||
|         /> |         > | ||||||
|  |           <template slot-scope="scope"> | ||||||
|  |             <el-button | ||||||
|  |               v-if="scope.row.VisitCount >= 1" | ||||||
|  |               type="text" | ||||||
|  |               @click="gotoVisit(scope.row)" | ||||||
|  |             > | ||||||
|  |               <span>{{ scope.row.VisitCount }}</span> | ||||||
|  |             </el-button> | ||||||
|  |             <span v-else>{{ scope.row.VisitCount }}</span> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|         <!-- 最新检查访视 --> |         <!-- 最新检查访视 --> | ||||||
|         <el-table-column |         <el-table-column | ||||||
|           prop="LatestVisitName" |           prop="LatestVisitName" | ||||||
|  | @ -307,6 +318,7 @@ import patientStudyList from "./components/patient-study-list.vue"; | ||||||
| // import confirmVisitList from "../../../trials-inspection/components/confirm-visit-list.vue"; | // import confirmVisitList from "../../../trials-inspection/components/confirm-visit-list.vue"; | ||||||
| const searchDataDefault = () => { | const searchDataDefault = () => { | ||||||
|   return { |   return { | ||||||
|  |     PatientIdStr: null, | ||||||
|     Code: "", |     Code: "", | ||||||
|     Status: "", |     Status: "", | ||||||
|     Sex: "", |     Sex: "", | ||||||
|  | @ -360,6 +372,15 @@ export default { | ||||||
|     this.getList(); |     this.getList(); | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|  |     // 跳转至访视页 | ||||||
|  |     gotoVisit(item) { | ||||||
|  |       let query = this.$route.query; | ||||||
|  |       this.$router.push({ | ||||||
|  |         path: "/trials/trials-panel/hir-visit", | ||||||
|  |         query, | ||||||
|  |       }); | ||||||
|  |       zzSessionStorage.setItem("SubjectCode", item.Code); | ||||||
|  |     }, | ||||||
|     handleExport() { |     handleExport() { | ||||||
|       getSubjectList_Export(this.searchData) |       getSubjectList_Export(this.searchData) | ||||||
|         .then((res) => {}) |         .then((res) => {}) | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -116,13 +116,13 @@ | ||||||
|         <el-descriptions-item |         <el-descriptions-item | ||||||
|           :label="$t('trials:trial-information:title:activationDate')" |           :label="$t('trials:trial-information:title:activationDate')" | ||||||
|         > |         > | ||||||
|           {{ trialInfo.AuthorizationDate }} |           {{ otherInfo.ActiveTime }} | ||||||
|         </el-descriptions-item> |         </el-descriptions-item> | ||||||
|         <!--授权日期--> |         <!--授权日期--> | ||||||
|         <el-descriptions-item |         <el-descriptions-item | ||||||
|           :label="$t('trials:trials-list:table:dateAuthorized')" |           :label="$t('trials:trials-list:table:dateAuthorized')" | ||||||
|         > |         > | ||||||
|           {{ trialInfo.AuthorizationDate }} |           {{ otherInfo.AuthorizationDeadLineDate }} | ||||||
|         </el-descriptions-item> |         </el-descriptions-item> | ||||||
|       </el-descriptions> |       </el-descriptions> | ||||||
|       <el-button |       <el-button | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue