Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/hir-web into main
						commit
						90d79bbc06
					
				|  | @ -103,7 +103,8 @@ export default { | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|   mounted() { |   mounted() { | ||||||
|     this.show = process.env.VUE_APP_OSS_PATH === "/hir_test/dist"; |     // this.show = process.env.VUE_APP_OSS_PATH === "/hir_test/dist"; | ||||||
|  |     this.show = true; | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|     changeValue(target, attr, e) { |     changeValue(target, attr, e) { | ||||||
|  | @ -191,8 +192,8 @@ export default { | ||||||
|       } else { |       } else { | ||||||
|         this.tableData = Object.assign([], this.arr); |         this.tableData = Object.assign([], this.arr); | ||||||
|       } |       } | ||||||
|       console.log(JSON.stringify(this.$path)); |       // console.log(JSON.stringify(this.$path)); | ||||||
|       console.log(JSON.stringify(this.tableData)); |       // console.log(JSON.stringify(this.tableData)); | ||||||
|     }, |     }, | ||||||
|   }, |   }, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -2,18 +2,28 @@ | ||||||
| <template> | <template> | ||||||
|   <div class="base-search-form"> |   <div class="base-search-form"> | ||||||
|     <el-form :size="size" :inline="true" :label-width="labelWidth"> |     <el-form :size="size" :inline="true" :label-width="labelWidth"> | ||||||
|       <el-form-item v-for="item in searchForm" :key="item.prop" :label="item.label"> |       <el-form-item | ||||||
|  |         v-for="item in searchForm" | ||||||
|  |         :key="item.prop" | ||||||
|  |         :label="item.label" | ||||||
|  |       > | ||||||
|         <!-- 输入框 --> |         <!-- 输入框 --> | ||||||
|         <el-input v-if="item.type==='Input'" v-model="searchData[item.prop]" :placeholder="item.placeholder" size="mini" :style="{width:item.width}" :readonly="item.readonly" /> |         <el-input | ||||||
|         <!-- 下拉框 --> |           v-if="item.type === 'Input'" | ||||||
|         <el-select |  | ||||||
|           v-if="item.type==='Select'" |  | ||||||
|           v-model="searchData[item.prop]" |           v-model="searchData[item.prop]" | ||||||
|           :placeholder="item.placeholder" |           :placeholder="item.placeholder" | ||||||
|           size="mini" |           size="mini" | ||||||
|           :style="{width:item.width}" |           :style="{ width: item.width }" | ||||||
| 
 |           :readonly="item.readonly" | ||||||
|           @change="item.change && item.change(that,searchData[item.prop])" |         /> | ||||||
|  |         <!-- 下拉框 --> | ||||||
|  |         <el-select | ||||||
|  |           v-if="item.type === 'Select'" | ||||||
|  |           v-model="searchData[item.prop]" | ||||||
|  |           :placeholder="item.placeholder" | ||||||
|  |           size="mini" | ||||||
|  |           :style="{ width: item.width }" | ||||||
|  |           @change="item.change && item.change(that, searchData[item.prop])" | ||||||
|         > |         > | ||||||
|           <el-option |           <el-option | ||||||
|             v-for="op in item.options" |             v-for="op in item.options" | ||||||
|  | @ -23,49 +33,117 @@ | ||||||
|           /> |           /> | ||||||
|         </el-select> |         </el-select> | ||||||
|         <el-select |         <el-select | ||||||
|           v-if="item.type==='Select2'" |           v-if="item.type === 'Select2'" | ||||||
|           v-model="searchData[item.prop]" |           v-model="searchData[item.prop]" | ||||||
|           :placeholder="item.placeholder" |           :placeholder="item.placeholder" | ||||||
|           size="mini" |           size="mini" | ||||||
|           :style="{width:item.width}" |           :style="{ width: item.width }" | ||||||
| 
 |           @change="item.change && item.change(that, searchData[item.prop])" | ||||||
|           @change="item.change && item.change(that,searchData[item.prop])" |  | ||||||
|         > |         > | ||||||
|           <el-option |           <el-option | ||||||
|             v-for="(key,value) of item.options" |             v-for="(key, value) of item.options" | ||||||
|             :key="key" |             :key="key" | ||||||
|             :label="key" |             :label="key" | ||||||
|             :value="value" |             :value="value" | ||||||
|           /> |           /> | ||||||
|         </el-select> |         </el-select> | ||||||
|         <!-- 单选 --> |         <!-- 单选 --> | ||||||
|         <el-radio-group v-if="item.type==='Radio'" v-model="searchData[item.prop]" :style="{width:item.width}"> |         <el-radio-group | ||||||
|           <el-radio v-for="ra in item.radios" :key="ra.value" :label="ra.value">{{ ra.label }}</el-radio> |           v-if="item.type === 'Radio'" | ||||||
|  |           v-model="searchData[item.prop]" | ||||||
|  |           :style="{ width: item.width }" | ||||||
|  |         > | ||||||
|  |           <el-radio | ||||||
|  |             v-for="ra in item.radios" | ||||||
|  |             :key="ra.value" | ||||||
|  |             :label="ra.value" | ||||||
|  |             >{{ ra.label }}</el-radio | ||||||
|  |           > | ||||||
|         </el-radio-group> |         </el-radio-group> | ||||||
|         <!-- 单选按钮 --> |         <!-- 单选按钮 --> | ||||||
|         <el-radio-group v-if="item.type==='RadioButton'" v-model="searchData[item.prop]" :style="{width:item.width}" @change="item.change && item.change(searchData[item.prop])"> |         <el-radio-group | ||||||
|           <el-radio-button v-for="ra in item.radios" :key="ra.value" :label="ra.value">{{ ra.label }}</el-radio-button> |           v-if="item.type === 'RadioButton'" | ||||||
|  |           v-model="searchData[item.prop]" | ||||||
|  |           :style="{ width: item.width }" | ||||||
|  |           @change="item.change && item.change(searchData[item.prop])" | ||||||
|  |         > | ||||||
|  |           <el-radio-button | ||||||
|  |             v-for="ra in item.radios" | ||||||
|  |             :key="ra.value" | ||||||
|  |             :label="ra.value" | ||||||
|  |             >{{ ra.label }}</el-radio-button | ||||||
|  |           > | ||||||
|         </el-radio-group> |         </el-radio-group> | ||||||
|         <!-- 复选框 --> |         <!-- 复选框 --> | ||||||
|         <el-checkbox-group v-if="item.type==='Checkbox'" v-model="searchData[item.prop]" :style="{width:item.width}"> |         <el-checkbox-group | ||||||
|           <el-checkbox v-for="ch in item.checkboxs" :key="ch.value" :label="ch.value">{{ ch.label }}</el-checkbox> |           v-if="item.type === 'Checkbox'" | ||||||
|  |           v-model="searchData[item.prop]" | ||||||
|  |           :style="{ width: item.width }" | ||||||
|  |         > | ||||||
|  |           <el-checkbox | ||||||
|  |             v-for="ch in item.checkboxs" | ||||||
|  |             :key="ch.value" | ||||||
|  |             :label="ch.value" | ||||||
|  |             >{{ ch.label }}</el-checkbox | ||||||
|  |           > | ||||||
|         </el-checkbox-group> |         </el-checkbox-group> | ||||||
|         <!-- 日期 --> |         <!-- 日期 --> | ||||||
|         <el-date-picker v-if="item.type==='Date'" v-model="searchData[item.prop]" :placeholder="item.placeholder" :style="{width:item.width}" value-format="yyyy-MM-dd" format="yyyy-MM-dd" :picker-options="item.pickerOption" /> |         <el-date-picker | ||||||
|  |           v-if="item.type === 'Date'" | ||||||
|  |           v-model="searchData[item.prop]" | ||||||
|  |           :placeholder="item.placeholder" | ||||||
|  |           :style="{ width: item.width }" | ||||||
|  |           value-format="yyyy-MM-dd" | ||||||
|  |           format="yyyy-MM-dd" | ||||||
|  |           :picker-options="item.pickerOption" | ||||||
|  |         /> | ||||||
|         <!-- 时间 --> |         <!-- 时间 --> | ||||||
|         <el-time-select v-if="item.type==='Time'" v-model="searchData[item.prop]" :placeholder="item.placeholder" type="" :style="{width:item.width}" /> |         <el-time-select | ||||||
|  |           v-if="item.type === 'Time'" | ||||||
|  |           v-model="searchData[item.prop]" | ||||||
|  |           :placeholder="item.placeholder" | ||||||
|  |           type="" | ||||||
|  |           :style="{ width: item.width }" | ||||||
|  |         /> | ||||||
|         <!-- 日期时间 --> |         <!-- 日期时间 --> | ||||||
|         <el-date-picker v-if="item.type==='DateTime'" v-model="searchData[item.prop]" :placeholder="item.placeholder" type="datetime" :disabled="item.disable && item.disable(searchData[item.prop])" :style="{width:item.width}" /> |         <el-date-picker | ||||||
|  |           v-if="item.type === 'DateTime'" | ||||||
|  |           v-model="searchData[item.prop]" | ||||||
|  |           :placeholder="item.placeholder" | ||||||
|  |           type="datetime" | ||||||
|  |           :disabled="item.disable && item.disable(searchData[item.prop])" | ||||||
|  |           :style="{ width: item.width }" | ||||||
|  |         /> | ||||||
|  |         <!-- 日期时间段 --> | ||||||
|  |         <el-date-picker | ||||||
|  |           v-if="item.type === 'Daterange'" | ||||||
|  |           v-model="searchData[item.prop]" | ||||||
|  |           type="daterange" | ||||||
|  |           range-separator="至" | ||||||
|  |           start-placeholder="开始日期" | ||||||
|  |           end-placeholder="结束日期" | ||||||
|  |         /> | ||||||
|         <!-- 滑块 --> |         <!-- 滑块 --> | ||||||
|         <!-- <el-slider v-if="item.type==='Slider'" v-model="searchData[item.prop]"></el-slider> --> |         <!-- <el-slider v-if="item.type==='Slider'" v-model="searchData[item.prop]"></el-slider> --> | ||||||
|         <!-- 开关 --> |         <!-- 开关 --> | ||||||
|         <el-switch v-if="item.type==='Switch'" v-model="searchData[item.prop]" :style="{width:item.width}" /> |         <el-switch | ||||||
|  |           v-if="item.type === 'Switch'" | ||||||
|  |           v-model="searchData[item.prop]" | ||||||
|  |           :style="{ width: item.width }" | ||||||
|  |         /> | ||||||
|         <!-- 具名slot --> |         <!-- 具名slot --> | ||||||
|         <slot v-if="item.type==='Custom'" :name="item.slot" /> |         <slot v-if="item.type === 'Custom'" :name="item.slot" /> | ||||||
|       </el-form-item> |       </el-form-item> | ||||||
|       <el-form-item v-for="item in searchHandle" :key="item.label"> |       <el-form-item v-for="item in searchHandle" :key="item.label"> | ||||||
|         <slot v-if="item.slot" :name="item.slot" /> |         <slot v-if="item.slot" :name="item.slot" /> | ||||||
|         <el-button v-else :type="item.type" :size="item.size || size" :icon="item.icon || ''" @click="handleClick(item.emitKey)">{{ item.label }}</el-button> |         <el-button | ||||||
|  |           v-else | ||||||
|  |           :type="item.type" | ||||||
|  |           :size="item.size || size" | ||||||
|  |           :icon="item.icon || ''" | ||||||
|  |           @click="handleClick(item.emitKey)" | ||||||
|  |           >{{ item.label }}</el-button | ||||||
|  |         > | ||||||
|       </el-form-item> |       </el-form-item> | ||||||
|     </el-form> |     </el-form> | ||||||
|   </div> |   </div> | ||||||
|  | @ -76,47 +154,45 @@ export default { | ||||||
|   props: { |   props: { | ||||||
|     that: { |     that: { | ||||||
|       type: Object, |       type: Object, | ||||||
|       default: this |       default: this, | ||||||
|     }, |     }, | ||||||
|     isHandle: { |     isHandle: { | ||||||
|       type: Boolean, |       type: Boolean, | ||||||
|       default: true |       default: true, | ||||||
|     }, |     }, | ||||||
|     labelWidth: { |     labelWidth: { | ||||||
|       type: String, |       type: String, | ||||||
|       default: '' |       default: "", | ||||||
|     }, |     }, | ||||||
|     size: { |     size: { | ||||||
|       type: String, |       type: String, | ||||||
|       default: 'mini' |       default: "mini", | ||||||
|     }, |     }, | ||||||
|     searchForm: { |     searchForm: { | ||||||
|       type: Array, |       type: Array, | ||||||
|       default: () => [] |       default: () => [], | ||||||
|     }, |     }, | ||||||
|     searchHandle: { |     searchHandle: { | ||||||
|       type: Array, |       type: Array, | ||||||
|       default: () => [] |       default: () => [], | ||||||
|     }, |     }, | ||||||
|     searchData: { |     searchData: { | ||||||
|       type: Object, |       type: Object, | ||||||
|       default: () => {} |       default: () => {}, | ||||||
|     } |     }, | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|     handleClick(emitKey) { |     handleClick(emitKey) { | ||||||
|       // emit事件 |       // emit事件 | ||||||
|       this.$emit(`${emitKey}`) |       this.$emit(`${emitKey}`); | ||||||
|     } |     }, | ||||||
|   } |   }, | ||||||
| 
 | }; | ||||||
| } |  | ||||||
| 
 |  | ||||||
| </script> | </script> | ||||||
| <style lang="scss"> | <style lang="scss"> | ||||||
|   .base-search-form{ | .base-search-form { | ||||||
|     .el-form-item{ |   .el-form-item { | ||||||
|       margin-bottom: 0px; |     margin-bottom: 0px; | ||||||
|     } |  | ||||||
|   } |   } | ||||||
|  | } | ||||||
| </style> | </style> | ||||||
|  |  | ||||||
|  | @ -71,6 +71,11 @@ export default { | ||||||
|         let res = await this.formatVisit(); |         let res = await this.formatVisit(); | ||||||
|         if (!res) return; |         if (!res) return; | ||||||
|         this.$emit("update:modelData", this.visit); |         this.$emit("update:modelData", this.visit); | ||||||
|  |         let data = { | ||||||
|  |           StudyId: this.studyData.StudyId || this.studyData.SCPStudyId, | ||||||
|  |           VisitId: this.visit, | ||||||
|  |         }; | ||||||
|  |         this.$emit("putVisit", data); | ||||||
|       } catch (err) { |       } catch (err) { | ||||||
|         console.log(err); |         console.log(err); | ||||||
|       } |       } | ||||||
|  | @ -120,6 +125,11 @@ export default { | ||||||
|             } |             } | ||||||
|           ).then(() => { |           ).then(() => { | ||||||
|             this.$emit("update:modelData", this.visit); |             this.$emit("update:modelData", this.visit); | ||||||
|  |             let data = { | ||||||
|  |               StudyId: this.studyData.StudyId || this.studyData.SCPStudyId, | ||||||
|  |               VisitId: this.visit, | ||||||
|  |             }; | ||||||
|  |             this.$emit("putVisit", data); | ||||||
|           }); |           }); | ||||||
|         } |         } | ||||||
|         return true; |         return true; | ||||||
|  |  | ||||||
|  | @ -3,14 +3,14 @@ | ||||||
|     <template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow"> |     <template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow"> | ||||||
|       <app-link v-if="!onlyOneChild.hidden" :to="resolvePath(onlyOneChild.path)"> |       <app-link v-if="!onlyOneChild.hidden" :to="resolvePath(onlyOneChild.path)"> | ||||||
|         <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}" @click="handleClick(onlyOneChild.meta.title)"> |         <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}" @click="handleClick(onlyOneChild.meta.title)"> | ||||||
|           <item :icon="onlyOneChild.meta ? (onlyOneChild.meta.icon||(item.meta&&item.meta.icon)) : null" :title="onlyOneChild.meta ? onlyOneChild.meta.title : null" /> |           <item :icon="onlyOneChild.meta ? (onlyOneChild.meta.icon||(item.meta&&item.meta.icon)) : null" :title="onlyOneChild.meta ? $t(`trials:system:menu:${onlyOneChild.meta.title}`) : null" /> | ||||||
|         </el-menu-item> |         </el-menu-item> | ||||||
|       </app-link> |       </app-link> | ||||||
|     </template> |     </template> | ||||||
| 
 | 
 | ||||||
|     <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body> |     <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body> | ||||||
|       <template slot="title"> |       <template slot="title"> | ||||||
|         <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" /> |         <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="$t(`trials:system:menu:${item.meta.title}`)" /> | ||||||
|       </template> |       </template> | ||||||
|       <sidebar-item |       <sidebar-item | ||||||
|         v-for="child in item.children" |         v-for="child in item.children" | ||||||
|  |  | ||||||
|  | @ -16,6 +16,7 @@ export const downloadImage = async (id, id2) => { | ||||||
|             await setfolder(item); |             await setfolder(item); | ||||||
|         } |         } | ||||||
|     } catch (err) { |     } catch (err) { | ||||||
|  |         flag = false; | ||||||
|         console.log(err); |         console.log(err); | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
|  | @ -81,7 +82,7 @@ const setfolder = async (item) => { | ||||||
|                     zipObj = null; |                     zipObj = null; | ||||||
|                 }); |                 }); | ||||||
|         }) |         }) | ||||||
|         .catch((reason) => { }); |         .catch((reason) => { flag = false; }); | ||||||
| }; | }; | ||||||
| const handleBatchDown = async (item, zip) => { | const handleBatchDown = async (item, zip) => { | ||||||
|     return new Promise((resolve) => { |     return new Promise((resolve) => { | ||||||
|  |  | ||||||
|  | @ -175,6 +175,7 @@ export default { | ||||||
|             NewUserName: this.password.NewUserName, |             NewUserName: this.password.NewUserName, | ||||||
|             NewPassWord: md5(this.password.NewPassWord), |             NewPassWord: md5(this.password.NewPassWord), | ||||||
|             OldPassWord: md5(this.password.OldPassWord), |             OldPassWord: md5(this.password.OldPassWord), | ||||||
|  |             CheckCode: this.password.CheckCode, | ||||||
|           }; |           }; | ||||||
|           this.loading = true; |           this.loading = true; | ||||||
|           modifyPassword(param) |           modifyPassword(param) | ||||||
|  |  | ||||||
|  | @ -13,7 +13,10 @@ | ||||||
|           <el-input v-model="hospital.HospitalName" :disabled="disabled" /> |           <el-input v-model="hospital.HospitalName" :disabled="disabled" /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item label="医院编码: " prop="HospitalCode"> |         <el-form-item label="医院编码: " prop="HospitalCode"> | ||||||
|           <el-input v-model="hospital.HospitalCode" :disabled="disabled" /> |           <el-input | ||||||
|  |             v-model="hospital.HospitalCode" | ||||||
|  |             :disabled="disabled || hasPermi(['role:oa'])" | ||||||
|  |           /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
| 
 | 
 | ||||||
|         <el-form-item label="医院别称: " prop="HospitalAliasName"> |         <el-form-item label="医院别称: " prop="HospitalAliasName"> | ||||||
|  | @ -38,7 +41,7 @@ | ||||||
|         <el-form-item label="未激活项目数: " prop="TrialKeepCount"> |         <el-form-item label="未激活项目数: " prop="TrialKeepCount"> | ||||||
|           <el-input |           <el-input | ||||||
|             v-model="hospital.TrialKeepCount" |             v-model="hospital.TrialKeepCount" | ||||||
|             :disabled="disabled" |             :disabled="disabled || hasPermi(['role:oa'])" | ||||||
|             type="number" |             type="number" | ||||||
|           /> |           /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|  | @ -53,7 +56,7 @@ | ||||||
|           > |           > | ||||||
|           </el-switch> |           </el-switch> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item label="logo: " prop="HospitalLogoPath"> |         <el-form-item label="LOGO: " prop="HospitalLogoPath"> | ||||||
|           <upload-logo |           <upload-logo | ||||||
|             :path.sync="hospital.HospitalLogoPath" |             :path.sync="hospital.HospitalLogoPath" | ||||||
|             :disabled="disabled" |             :disabled="disabled" | ||||||
|  |  | ||||||
|  | @ -76,6 +76,9 @@ const searchDataDefault = () => { | ||||||
|     Asc: true, |     Asc: true, | ||||||
|     RealName: "", |     RealName: "", | ||||||
|     SortField: "", |     SortField: "", | ||||||
|  |     CreateTimeArr: [], | ||||||
|  |     BeginCreateTime: null, | ||||||
|  |     EndCreateTime: null, | ||||||
|   }; |   }; | ||||||
| }; | }; | ||||||
| export default { | export default { | ||||||
|  | @ -162,10 +165,17 @@ export default { | ||||||
|           sortable: "custom", |           sortable: "custom", | ||||||
|           showOverflowTooltip: true, |           showOverflowTooltip: true, | ||||||
|         }, |         }, | ||||||
|  |         { | ||||||
|  |           prop: "CreateTime", | ||||||
|  |           label: this.$t("system:userlist:table:createTime"), | ||||||
|  |           minWidth: 200, | ||||||
|  |           sortable: "custom", | ||||||
|  |           showOverflowTooltip: true, | ||||||
|  |         }, | ||||||
|         { |         { | ||||||
|           type: "operate", |           type: "operate", | ||||||
|           label: this.$t("common:action:action"), |           label: this.$t("common:action:action"), | ||||||
|           minWidth: 200, |           minWidth: 100, | ||||||
|           operates: [ |           operates: [ | ||||||
|             { |             { | ||||||
|               name: this.$t("common:button:edit"), |               name: this.$t("common:button:edit"), | ||||||
|  | @ -257,6 +267,13 @@ export default { | ||||||
|           props: { label: "UserType", value: "Id" }, // 下拉选项配置信息,必填 |           props: { label: "UserType", value: "Id" }, // 下拉选项配置信息,必填 | ||||||
|           placeholder: "", |           placeholder: "", | ||||||
|         }, |         }, | ||||||
|  |         { | ||||||
|  |           type: "Daterange", | ||||||
|  |           label: this.$t("system:userlist:label:CreateTime"), | ||||||
|  |           prop: "CreateTimeArr", | ||||||
|  |           width: "100px", | ||||||
|  |           placeholder: "", | ||||||
|  |         }, | ||||||
|       ], |       ], | ||||||
|       searchHandle: [ |       searchHandle: [ | ||||||
|         { |         { | ||||||
|  | @ -289,6 +306,18 @@ export default { | ||||||
|     // 获取用户信息 |     // 获取用户信息 | ||||||
|     getList() { |     getList() { | ||||||
|       this.loading = true; |       this.loading = true; | ||||||
|  |       if ( | ||||||
|  |         this.searchData.CreateTimeArr[0] && | ||||||
|  |         this.searchData.CreateTimeArr[1] | ||||||
|  |       ) { | ||||||
|  |         this.searchData.BeginCreateTime = | ||||||
|  |           this.searchData.CreateTimeArr[0].toISOString(); | ||||||
|  |         this.searchData.EndCreateTime = | ||||||
|  |           this.searchData.CreateTimeArr[1].toISOString(); | ||||||
|  |       } else { | ||||||
|  |         this.searchData.BeginCreateTime = null; | ||||||
|  |         this.searchData.EndCreateTime = null; | ||||||
|  |       } | ||||||
|       getUserList(this.searchData) |       getUserList(this.searchData) | ||||||
|         .then((res) => { |         .then((res) => { | ||||||
|           this.loading = false; |           this.loading = false; | ||||||
|  |  | ||||||
|  | @ -19,13 +19,14 @@ | ||||||
|         :model="submitMessage" |         :model="submitMessage" | ||||||
|         class="demo-form-inline" |         class="demo-form-inline" | ||||||
|         :rules="rules" |         :rules="rules" | ||||||
|         label-width="150px" |         label-width="130px" | ||||||
|       > |       > | ||||||
|         <div> |         <div> | ||||||
|           <!--项目--> |           <!--项目--> | ||||||
|           <el-form-item |           <el-form-item | ||||||
|             :label="$t('trials:workbench:label:trialsStats')" |             :label="$t('trials:workbench:label:trialsStats')" | ||||||
|             prop="TrialId" |             prop="TrialId" | ||||||
|  |             label-width="50px" | ||||||
|           > |           > | ||||||
|             <trialsSelect |             <trialsSelect | ||||||
|               :options="trialList" |               :options="trialList" | ||||||
|  | @ -33,30 +34,52 @@ | ||||||
|               :status="status" |               :status="status" | ||||||
|             /> |             /> | ||||||
|           </el-form-item> |           </el-form-item> | ||||||
|         </div> |           <div style="display: inline-block"> | ||||||
|         <div class="selectAndBtn"> |             <!--受试者编号--> | ||||||
|           <!--受试者编号--> |             <el-form-item | ||||||
|           <el-form-item |               :label="$t('trials:crcQuestion:table:subjectId')" | ||||||
|             :label="$t('trials:crcQuestion:table:subjectId')" |               prop="SubjectId" | ||||||
|             prop="SubjectId" |  | ||||||
|           > |  | ||||||
|             <el-select |  | ||||||
|               v-model="submitMessage.SubjectId" |  | ||||||
|               filterable |  | ||||||
|               allow-create |  | ||||||
|               default-first-option |  | ||||||
|               clearable |  | ||||||
|               :disabled="status === 'visit' || !submitMessage.TrialId" |  | ||||||
|             > |             > | ||||||
|               <el-option |               <el-select | ||||||
|                 v-for="item in subjectIdList" |                 v-model="submitMessage.SubjectId" | ||||||
|                 :key="item.SubejctId" |                 clearable | ||||||
|                 :label="item.SubjectCode" |                 :disabled="status === 'visit' || !submitMessage.TrialId" | ||||||
|                 :value="item.SubejctId" |                 style="width: 300px" | ||||||
|               > |               > | ||||||
|               </el-option> |                 <el-option | ||||||
|             </el-select> |                   v-for="item in subjectIdList" | ||||||
|           </el-form-item> |                   :key="item.SubejctId" | ||||||
|  |                   :label=" | ||||||
|  |                     item.ShortName || item.Sex | ||||||
|  |                       ? `${item.SubjectCode}(${item.ShortName},${ | ||||||
|  |                           item.Sex ? $fd('sex', Number(item.Sex)) : '' | ||||||
|  |                         })` | ||||||
|  |                       : item.SubjectCode | ||||||
|  |                   " | ||||||
|  |                   :value="item.SubejctId" | ||||||
|  |                 > | ||||||
|  |                 </el-option> | ||||||
|  |               </el-select> | ||||||
|  |             </el-form-item> | ||||||
|  |             <!--添加受试者--> | ||||||
|  |             <el-button | ||||||
|  |               type="primary" | ||||||
|  |               v-if="status === 'trial' && submitMessage.TrialId" | ||||||
|  |               @click="addSubject_model.visible = true" | ||||||
|  |             > | ||||||
|  |               {{ $t("trials:selectSubject:button:add") }} | ||||||
|  |             </el-button> | ||||||
|  |             <div> | ||||||
|  |               <el-form-item | ||||||
|  |                 :label="$t('trials:study:tabpane:bindPatient')" | ||||||
|  |                 :style="{ opacity: bindPatientTip ? 1 : 0 }" | ||||||
|  |               > | ||||||
|  |                 <span v-if="bindPatientTip">{{ | ||||||
|  |                   bindPatientTip.map((item) => item.PatientIdStr).join(", ") | ||||||
|  |                 }}</span> | ||||||
|  |               </el-form-item> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|           <div class="btnBox"> |           <div class="btnBox"> | ||||||
|             <!--确认添加按钮--> |             <!--确认添加按钮--> | ||||||
|             <el-button |             <el-button | ||||||
|  | @ -82,16 +105,45 @@ | ||||||
|     </div> |     </div> | ||||||
|     <confirmVisitList |     <confirmVisitList | ||||||
|       ref="confirmVisit" |       ref="confirmVisit" | ||||||
|       :Patient="Patient" |       :Patient="PatientData" | ||||||
|       :submitMessage="submitMessage" |       :submitMessage="submitMessage" | ||||||
|       :status="status" |       :status="status" | ||||||
|     /> |     /> | ||||||
|  |     <base-model v-if="addSubject_model.visible" :config="addSubject_model"> | ||||||
|  |       <template slot="dialog-body"> | ||||||
|  |         <el-form | ||||||
|  |           ref="addSubjectForm" | ||||||
|  |           :inline="true" | ||||||
|  |           :model="addSubjectForm" | ||||||
|  |           class="demo-form-inline" | ||||||
|  |           :rules="addSubjectrules" | ||||||
|  |         > | ||||||
|  |           <!--受试者编号--> | ||||||
|  |           <el-form-item | ||||||
|  |             :label="$t('trials:addSuject:form:subjectCode')" | ||||||
|  |             prop="SubjectCode" | ||||||
|  |             label-width="150px" | ||||||
|  |           > | ||||||
|  |             <el-input v-model="addSubjectForm.SubjectCode" clearable></el-input> | ||||||
|  |           </el-form-item> | ||||||
|  |         </el-form> | ||||||
|  |       </template> | ||||||
|  |       <template slot="dialog-footer"> | ||||||
|  |         <el-button type="primary" @click="addSubject"> | ||||||
|  |           {{ $t("common:button:confirm") }} | ||||||
|  |         </el-button> | ||||||
|  |         <el-button @click="addSubject_model.visible = false"> | ||||||
|  |           {{ $t("common:button:cancel") }} | ||||||
|  |         </el-button> | ||||||
|  |       </template> | ||||||
|  |     </base-model> | ||||||
|   </el-dialog> |   </el-dialog> | ||||||
| </template> | </template> | ||||||
| <script> | <script> | ||||||
| import Pagination from "@/components/Pagination"; | import Pagination from "@/components/Pagination"; | ||||||
| import trialsSelect from "./trials-select.vue"; | import trialsSelect from "./trials-select.vue"; | ||||||
| import confirmVisitList from "./confirm-visit-list.vue"; | import confirmVisitList from "./confirm-visit-list.vue"; | ||||||
|  | import BaseModel from "@/components/BaseModel"; | ||||||
| import { | import { | ||||||
|   getPatientJoinTrialInitSelectList, |   getPatientJoinTrialInitSelectList, | ||||||
|   getTrialSubejctSelectList, |   getTrialSubejctSelectList, | ||||||
|  | @ -100,7 +152,7 @@ import { | ||||||
| } from "@/api/inspection.js"; | } from "@/api/inspection.js"; | ||||||
| export default { | export default { | ||||||
|   name: "addTrialsList", |   name: "addTrialsList", | ||||||
|   components: { Pagination, trialsSelect, confirmVisitList }, |   components: { Pagination, trialsSelect, confirmVisitList, BaseModel }, | ||||||
|   props: { |   props: { | ||||||
|     visible: { |     visible: { | ||||||
|       required: true, |       required: true, | ||||||
|  | @ -125,6 +177,7 @@ export default { | ||||||
|         TrialCode: null, |         TrialCode: null, | ||||||
|         ResearchProgramNo: null, |         ResearchProgramNo: null, | ||||||
|       }, |       }, | ||||||
|  |       PatientData: {}, | ||||||
|       subjectIdList: [], // 受试者列表 |       subjectIdList: [], // 受试者列表 | ||||||
|       rules: { |       rules: { | ||||||
|         TrialId: [ |         TrialId: [ | ||||||
|  | @ -142,8 +195,44 @@ export default { | ||||||
|           }, |           }, | ||||||
|         ], |         ], | ||||||
|       }, |       }, | ||||||
|  |       // 新增受试者 | ||||||
|  |       addSubject_model: { | ||||||
|  |         visible: false, | ||||||
|  |         title: this.$t("trials:selectSubject:button:add"), | ||||||
|  |         width: "500px", | ||||||
|  |         appendToBody: true, | ||||||
|  |       }, | ||||||
|  |       addSubjectForm: { | ||||||
|  |         SubjectCode: null, | ||||||
|  |       }, | ||||||
|  |       addSubjectrules: { | ||||||
|  |         SubjectCode: [ | ||||||
|  |           { | ||||||
|  |             required: true, | ||||||
|  |             message: this.$t("trials:subject:format:notSubject"), | ||||||
|  |             trigger: ["blur", "change"], | ||||||
|  |           }, | ||||||
|  |         ], | ||||||
|  |       }, | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|  |   computed: { | ||||||
|  |     bindPatientTip() { | ||||||
|  |       if (!this.submitMessage.SubjectId) return false; | ||||||
|  |       let PatientList = []; | ||||||
|  |       this.subjectIdList.some((item) => { | ||||||
|  |         if ( | ||||||
|  |           item.SubejctId === this.submitMessage.SubjectId && | ||||||
|  |           item.PatientList && | ||||||
|  |           item.PatientList.length > 0 | ||||||
|  |         ) { | ||||||
|  |           PatientList.push(...item.PatientList); | ||||||
|  |         } | ||||||
|  |       }); | ||||||
|  |       if (PatientList.length <= 0) return false; | ||||||
|  |       return PatientList; | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|   created() { |   created() { | ||||||
|     this.getTrialList(); |     this.getTrialList(); | ||||||
|   }, |   }, | ||||||
|  | @ -159,16 +248,52 @@ export default { | ||||||
|     }, |     }, | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|  |     // 新增受试者(前端操作未同步后端) | ||||||
|  |     async addSubject() { | ||||||
|  |       try { | ||||||
|  |         let validate = await this.$refs.addSubjectForm.validate(); | ||||||
|  |         if (!validate) return; | ||||||
|  |         let flag = this.subjectIdList.some( | ||||||
|  |           (item) => item.SubjectCode === this.addSubjectForm.SubjectCode | ||||||
|  |         ); | ||||||
|  |         if (flag) | ||||||
|  |           return this.$message.warning( | ||||||
|  |             this.$t("trials:addSubject:format:hasSubject") | ||||||
|  |           ); | ||||||
|  |         let subject = { | ||||||
|  |           SubjectCode: this.addSubjectForm.SubjectCode, | ||||||
|  |           SubejctId: this.addSubjectForm.SubjectCode, | ||||||
|  |         }; | ||||||
|  |         this.subjectIdList.unshift(subject); | ||||||
|  |         this.submitMessage.SubjectId = this.addSubjectForm.SubjectCode; | ||||||
|  |         this.addSubject_model.visible = false; | ||||||
|  |       } catch (err) { | ||||||
|  |         console.log(err); | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     // 获取受试者列表 |     // 获取受试者列表 | ||||||
|     async getTrialSubejctSelectList(id) { |     async getTrialSubejctSelectList(id, SubjectId = null) { | ||||||
|       let data = { |       let data = { | ||||||
|         TrialId: id, |         TrialId: id, | ||||||
|       }; |       }; | ||||||
|       try { |       try { | ||||||
|         let res = await getTrialSubejctSelectList(data); |         let res = await getTrialSubejctSelectList(data); | ||||||
|         if (res.IsSuccess) { |         if (res.IsSuccess) { | ||||||
|           this.subjectIdList = res.Result; |           this.subjectIdList = res.Result || []; | ||||||
|           this.submitMessage.SubjectId = null; |           this.submitMessage.SubjectId = SubjectId; | ||||||
|  |           if (SubjectId) { | ||||||
|  |             this.$nextTick(() => { | ||||||
|  |               Object.keys(this.Patient).forEach((key) => { | ||||||
|  |                 this.PatientData[key] = this.Patient[key]; | ||||||
|  |               }); | ||||||
|  |               let patient = this.bindPatientTip | ||||||
|  |                 ? this.bindPatientTip.map((item) => item.PatientId) | ||||||
|  |                 : []; | ||||||
|  |               this.PatientData.PatientId = [this.Patient.PatientId, ...patient]; | ||||||
|  |               this.$refs.confirmVisit.getList(true); | ||||||
|  |               this.$refs.confirmVisit.getSubjectVisitSelectList(); | ||||||
|  |             }); | ||||||
|  |           } | ||||||
|         } |         } | ||||||
|       } catch (err) { |       } catch (err) { | ||||||
|         console.log(err); |         console.log(err); | ||||||
|  | @ -198,21 +323,13 @@ export default { | ||||||
|         this.btnLoading = false; |         this.btnLoading = false; | ||||||
|         if (res.IsSuccess) { |         if (res.IsSuccess) { | ||||||
|           this.submitMessage.SubjectId = res.Result; |           this.submitMessage.SubjectId = res.Result; | ||||||
|           if (data.SubjectCode) { |           this.getTrialSubejctSelectList( | ||||||
|             let obj = { |             this.submitMessage.TrialId, | ||||||
|               PatientList: [], |             res.Result | ||||||
|               SubejctId: res.Result, |           ); | ||||||
|               SubjectCode: data.SubjectCode, |  | ||||||
|             }; |  | ||||||
|             this.subjectIdList.unshift(obj); |  | ||||||
|           } |  | ||||||
|           this.$message.success(this.$t("common:message:addedSuccessfully")); |           this.$message.success(this.$t("common:message:addedSuccessfully")); | ||||||
|           this.status = "visit"; |           this.status = "visit"; | ||||||
|           this.$emit("getList"); |           this.$emit("getList"); | ||||||
|           this.$nextTick(() => { |  | ||||||
|             this.$refs.confirmVisit.getList(true); |  | ||||||
|             this.$refs.confirmVisit.getSubjectVisitSelectList(); |  | ||||||
|           }); |  | ||||||
|         } |         } | ||||||
|       } catch (err) { |       } catch (err) { | ||||||
|         console.log(err); |         console.log(err); | ||||||
|  | @ -273,6 +390,9 @@ export default { | ||||||
|   justify-content: space-between; |   justify-content: space-between; | ||||||
|   flex-wrap: wrap; |   flex-wrap: wrap; | ||||||
| } | } | ||||||
|  | .btnBox { | ||||||
|  |   float: right; | ||||||
|  | } | ||||||
| .search { | .search { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|  |  | ||||||
|  | @ -36,9 +36,9 @@ | ||||||
|         </el-form> |         </el-form> | ||||||
|         <div class="buttonBox" v-if="status === 'visit'"> |         <div class="buttonBox" v-if="status === 'visit'"> | ||||||
|           <!--确认v-if="visitStatus === 'confirm'"--> |           <!--确认v-if="visitStatus === 'confirm'"--> | ||||||
|           <el-button type="primary" :loading="btnLoading2" @click="confirm"> |           <!-- <el-button type="primary" :loading="btnLoading2" @click="confirm"> | ||||||
|             {{ $t("trials:seletctedReviews:timeline:confirmation") }} |             {{ $t("trials:seletctedReviews:timeline:confirmation") }} | ||||||
|           </el-button> |           </el-button> --> | ||||||
|           <!--确认提交v-if="visitStatus === 'submit'"--> |           <!--确认提交v-if="visitStatus === 'submit'"--> | ||||||
|           <el-button |           <el-button | ||||||
|             type="primary" |             type="primary" | ||||||
|  | @ -147,6 +147,7 @@ | ||||||
|             :list="visitList" |             :list="visitList" | ||||||
|             @add="addVisit" |             @add="addVisit" | ||||||
|             @selectChange="selectChange" |             @selectChange="selectChange" | ||||||
|  |             @putVisit="putVisit" | ||||||
|           /> |           /> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|  | @ -196,7 +197,6 @@ import { | ||||||
|   getVisitPatientStudyList, |   getVisitPatientStudyList, | ||||||
|   getSubjectVisitSelectList, |   getSubjectVisitSelectList, | ||||||
|   addOrUpdateSubjectVisit, |   addOrUpdateSubjectVisit, | ||||||
|   addSubjectPatientStudyBinding, |  | ||||||
|   submitVisitStudyBinding, |   submitVisitStudyBinding, | ||||||
| } from "@/api/inspection.js"; | } from "@/api/inspection.js"; | ||||||
| import { updateSubjectVisitStudyBinding } from "@/api/trials/visit.js"; | import { updateSubjectVisitStudyBinding } from "@/api/trials/visit.js"; | ||||||
|  | @ -256,6 +256,29 @@ export default { | ||||||
|         path: `/trials/trials-panel?trialId=${this.submitMessage.TrialId}&trialCode=${this.submitMessage.TrialCode}&researchProgramNo=${this.submitMessage.ResearchProgramNo}`, |         path: `/trials/trials-panel?trialId=${this.submitMessage.TrialId}&trialCode=${this.submitMessage.TrialCode}&researchProgramNo=${this.submitMessage.ResearchProgramNo}`, | ||||||
|       }); |       }); | ||||||
|     }, |     }, | ||||||
|  |     // 访视切换提交 | ||||||
|  |     async putVisit(item) { | ||||||
|  |       let obj = { | ||||||
|  |         TrialId: this.submitMessage.TrialId, | ||||||
|  |         SubjectId: this.submitMessage.SubjectId, | ||||||
|  |         SubjectVisitId: item.VisitId, | ||||||
|  |         ScpStudyId: item.StudyId, | ||||||
|  |         IsAdd: true, | ||||||
|  |       }; | ||||||
|  |       try { | ||||||
|  |         // this.btnLoading = true; | ||||||
|  |         let res = await updateSubjectVisitStudyBinding(obj); | ||||||
|  |         // this.btnLoading = false; | ||||||
|  |         if (res.IsSuccess) { | ||||||
|  |           // this.$message.success(this.$t("common:message:savedSuccessfully")); | ||||||
|  |           // this.$emit("update:visible", false); | ||||||
|  |           this.getList(); | ||||||
|  |         } | ||||||
|  |       } catch (err) { | ||||||
|  |         // this.btnLoading = false; | ||||||
|  |         console.log(err); | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     // 移除检查与访视绑定关系 |     // 移除检查与访视绑定关系 | ||||||
|     async remove(item) { |     async remove(item) { | ||||||
|       try { |       try { | ||||||
|  | @ -434,32 +457,6 @@ export default { | ||||||
|       var newWindow = window.open(routeData.href, "_blank"); |       var newWindow = window.open(routeData.href, "_blank"); | ||||||
|       this.$emit("setOpenWindow", newWindow); |       this.$emit("setOpenWindow", newWindow); | ||||||
|     }, |     }, | ||||||
|     // 确认 |  | ||||||
|     async confirm() { |  | ||||||
|       let fd = await this.formatData(); |  | ||||||
|       if (!fd) return; |  | ||||||
|       let arr = this.tableSelectData.map((item) => { |  | ||||||
|         let obj = { |  | ||||||
|           TrialId: this.submitMessage.TrialId, |  | ||||||
|           SubjectId: this.submitMessage.SubjectId, |  | ||||||
|           SubjectVisitId: item.SubjectVisitId, |  | ||||||
|           ScpStudyId: item.SCPStudyId, |  | ||||||
|         }; |  | ||||||
|         return obj; |  | ||||||
|       }); |  | ||||||
|       try { |  | ||||||
|         this.btnLoading2 = true; |  | ||||||
|         let res = await addSubjectPatientStudyBinding(arr); |  | ||||||
|         this.btnLoading2 = false; |  | ||||||
|         if (res.IsSuccess) { |  | ||||||
|           this.visitStatus = "submit"; |  | ||||||
|           this.$message.success(this.$t("common:message:savedSuccessfully")); |  | ||||||
|         } |  | ||||||
|       } catch (err) { |  | ||||||
|         this.btnLoading2 = false; |  | ||||||
|         console.log(err); |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     // 确认提交 |     // 确认提交 | ||||||
|     async confirmSubmit() { |     async confirmSubmit() { | ||||||
|       let confirm = await this.$confirm( |       let confirm = await this.$confirm( | ||||||
|  |  | ||||||
|  | @ -208,7 +208,7 @@ | ||||||
|           sortable="custom" |           sortable="custom" | ||||||
|         /> |         /> | ||||||
|         <!--授权日期--> |         <!--授权日期--> | ||||||
|         <el-table-column |         <!-- <el-table-column | ||||||
|           prop="AuthorizationDate" |           prop="AuthorizationDate" | ||||||
|           :label="$t('trials:trials-list:table:dateAuthorized')" |           :label="$t('trials:trials-list:table:dateAuthorized')" | ||||||
|           show-overflow-tooltip |           show-overflow-tooltip | ||||||
|  | @ -221,7 +221,7 @@ | ||||||
|                 : "" |                 : "" | ||||||
|             }}</span> |             }}</span> | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> --> | ||||||
|         <!--授权时长--> |         <!--授权时长--> | ||||||
|         <el-table-column |         <el-table-column | ||||||
|           prop="AuthorizationDuration" |           prop="AuthorizationDuration" | ||||||
|  |  | ||||||
|  | @ -133,6 +133,7 @@ | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|       </el-form> |       </el-form> | ||||||
|     </div> |     </div> | ||||||
|  |     <password /> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
| <script> | <script> | ||||||
|  | @ -143,10 +144,12 @@ import { | ||||||
|   setNewUserName, |   setNewUserName, | ||||||
|   SetNewCheckCode, |   SetNewCheckCode, | ||||||
| } from "@/api/system/user.js"; | } from "@/api/system/user.js"; | ||||||
|  | import password from "./password.vue"; | ||||||
| var timer = ""; | var timer = ""; | ||||||
| var countdown = 60; | var countdown = 60; | ||||||
| export default { | export default { | ||||||
|   name: "account", |   name: "account", | ||||||
|  |   components: { password }, | ||||||
|   props: { |   props: { | ||||||
|     user: { |     user: { | ||||||
|       required: true, |       required: true, | ||||||
|  |  | ||||||
|  | @ -13,9 +13,6 @@ | ||||||
|         $t("trials:trials-myinfo:menuTitle:account") |         $t("trials:trials-myinfo:menuTitle:account") | ||||||
|       }}</el-menu-item> |       }}</el-menu-item> | ||||||
|       <el-menu-item index="3">{{ |       <el-menu-item index="3">{{ | ||||||
|         $t("trials:trials-myinfo:menuTitle:password") |  | ||||||
|       }}</el-menu-item> |  | ||||||
|       <el-menu-item index="4">{{ |  | ||||||
|         $t("trials:trials-myinfo:menuTitle:loginLog") |         $t("trials:trials-myinfo:menuTitle:loginLog") | ||||||
|       }}</el-menu-item> |       }}</el-menu-item> | ||||||
|     </el-menu> |     </el-menu> | ||||||
|  | @ -31,8 +28,7 @@ | ||||||
|         :IsCanConnectInternet="IsCanConnectInternet" |         :IsCanConnectInternet="IsCanConnectInternet" | ||||||
|         v-if="activeIndex === '2'" |         v-if="activeIndex === '2'" | ||||||
|       /> |       /> | ||||||
|       <password v-if="activeIndex === '3'" /> |       <login-log v-if="activeIndex === '3'" :name="userName" :isMine="true" /> | ||||||
|       <login-log v-if="activeIndex === '4'" :name="userName" :isMine="true" /> |  | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  | @ -40,7 +36,6 @@ | ||||||
| <script> | <script> | ||||||
| import mine from "./mine.vue"; | import mine from "./mine.vue"; | ||||||
| import account from "./account.vue"; | import account from "./account.vue"; | ||||||
| import password from "./password.vue"; |  | ||||||
| import loginLog from "@/views/trials/trials-panel/trial-summary/login-log"; | import loginLog from "@/views/trials/trials-panel/trial-summary/login-log"; | ||||||
| import { getUserTypeList, getUser } from "@/api/admin.js"; | import { getUserTypeList, getUser } from "@/api/admin.js"; | ||||||
| import { getHospital } from "@/api/hospital.js"; | import { getHospital } from "@/api/hospital.js"; | ||||||
|  | @ -49,7 +44,7 @@ import { mapGetters } from "vuex"; | ||||||
| 
 | 
 | ||||||
| export default { | export default { | ||||||
|   name: "TrialsMyinfo", |   name: "TrialsMyinfo", | ||||||
|   components: { mine, account, password, "login-log": loginLog }, |   components: { mine, account, "login-log": loginLog }, | ||||||
|   data() { |   data() { | ||||||
|     return { |     return { | ||||||
|       activeIndex: "1", |       activeIndex: "1", | ||||||
|  | @ -123,7 +118,9 @@ export default { | ||||||
|   .contentBox { |   .contentBox { | ||||||
|     width: calc(100% - 220px); |     width: calc(100% - 220px); | ||||||
|     background-color: #fff; |     background-color: #fff; | ||||||
|     padding: 20px; |     padding: 0 20px; | ||||||
|  |     height: 100%; | ||||||
|  |     overflow: auto; | ||||||
|     // padding-bottom: 50px; |     // padding-bottom: 50px; | ||||||
|   } |   } | ||||||
|   .trial-myinfo-head { |   .trial-myinfo-head { | ||||||
|  | @ -136,7 +133,7 @@ export default { | ||||||
|     overflow: auto; |     overflow: auto; | ||||||
|     background: #fff; |     background: #fff; | ||||||
|     // width: calc(50% - 9px); |     // width: calc(50% - 9px); | ||||||
|     margin: 6px 0; |     // margin: 6px 0; | ||||||
|     height: 100%; |     height: 100%; | ||||||
|     // padding-bottom: 50px; |     // padding-bottom: 50px; | ||||||
|     .trial-myinfo-left-top { |     .trial-myinfo-left-top { | ||||||
|  | @ -183,8 +180,8 @@ export default { | ||||||
|     overflow: auto; |     overflow: auto; | ||||||
|     background: #fff; |     background: #fff; | ||||||
|     // width: calc(50% - 9px); |     // width: calc(50% - 9px); | ||||||
|     margin: 6px 0; |     // margin: 6px 0; | ||||||
|     padding-bottom: 50px; |     height: 100%; | ||||||
|     .sendCode { |     .sendCode { | ||||||
|       position: absolute; |       position: absolute; | ||||||
|       right: -10px; |       right: -10px; | ||||||
|  |  | ||||||
|  | @ -1,16 +1,5 @@ | ||||||
| <template> | <template> | ||||||
|   <div class="trial-myinfo-left"> |   <div class="trial-myinfo-left"> | ||||||
|     <div class="trial-myinfo-left-top"> |  | ||||||
|       <div class="trial-myinfo-head"> |  | ||||||
|         <!-- 个人头像 --> |  | ||||||
|         {{ $t("trials:trials-myinfo:title:avater") }} |  | ||||||
|       </div> |  | ||||||
|       <div class="trial-myinfo-body"> |  | ||||||
|         <div> |  | ||||||
|           {{ user.LastName }} |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|     <div class="trial-myinfo-left-bottom"> |     <div class="trial-myinfo-left-bottom"> | ||||||
|       <div class="trial-myinfo-head"> |       <div class="trial-myinfo-head"> | ||||||
|         <!-- 用户基本信息 --> |         <!-- 用户基本信息 --> | ||||||
|  |  | ||||||
|  | @ -1,66 +1,59 @@ | ||||||
| <template> | <template> | ||||||
|   <div class="trial-myinfo-right"> |   <div class="trial-myinfo-right-box"> | ||||||
|     <div class="trial-myinfo-right-box"> |     <div class="trial-myinfo-head"> | ||||||
|       <div class="trial-myinfo-head"> |       <!-- 修改密码 --> | ||||||
|         <!-- 修改密码 --> |       {{ $t("trials:trials-myinfo:title:updatePaasord") }} | ||||||
|         {{ $t("trials:trials-myinfo:title:updatePaasord") }} |  | ||||||
|       </div> |  | ||||||
|       <el-form |  | ||||||
|         ref="passwordForm" |  | ||||||
|         label-position="right" |  | ||||||
|         :model="password" |  | ||||||
|         :rules="passwordFormRules" |  | ||||||
|         label-width="100px" |  | ||||||
|       > |  | ||||||
|         <!-- 旧密码 --> |  | ||||||
|         <el-form-item |  | ||||||
|           :label="$t('recompose:form:oldPassword')" |  | ||||||
|           prop="OldPassWord" |  | ||||||
|         > |  | ||||||
|           <el-input |  | ||||||
|             v-model="password.OldPassWord" |  | ||||||
|             type="password" |  | ||||||
|             show-password |  | ||||||
|             auto-complete="new-password" |  | ||||||
|             :placeholder="$t('recompose:form:oldPassword')" |  | ||||||
|           /> |  | ||||||
|         </el-form-item> |  | ||||||
|         <!-- 新密码 --> |  | ||||||
|         <el-form-item |  | ||||||
|           :label="$t('recompose:form:newPassword')" |  | ||||||
|           prop="NewPassWord" |  | ||||||
|         > |  | ||||||
|           <el-input |  | ||||||
|             v-model="password.NewPassWord" |  | ||||||
|             type="password" |  | ||||||
|             show-password |  | ||||||
|             auto-complete="new-password" |  | ||||||
|             :placeholder="$t('recompose:form:newPassword')" |  | ||||||
|           /> |  | ||||||
|         </el-form-item> |  | ||||||
|         <!-- 确认密码 --> |  | ||||||
|         <el-form-item |  | ||||||
|           :label="$t('recompose:form:confirmPassword')" |  | ||||||
|           prop="ConfirmPassWord" |  | ||||||
|         > |  | ||||||
|           <el-input |  | ||||||
|             v-model="password.ConfirmPassWord" |  | ||||||
|             type="password" |  | ||||||
|             show-password |  | ||||||
|             auto-complete="new-password" |  | ||||||
|             :placeholder="$t('recompose:form:confirmPassword')" |  | ||||||
|           /> |  | ||||||
|         </el-form-item> |  | ||||||
|       </el-form> |  | ||||||
|       <el-button |  | ||||||
|         type="primary" |  | ||||||
|         size="small" |  | ||||||
|         class="trial-info-btn" |  | ||||||
|         @click="save" |  | ||||||
|       > |  | ||||||
|         {{ $t("trials:trials-myinfo:button:save") }} |  | ||||||
|       </el-button> |  | ||||||
|     </div> |     </div> | ||||||
|  |     <el-form | ||||||
|  |       ref="passwordForm" | ||||||
|  |       label-position="right" | ||||||
|  |       :model="password" | ||||||
|  |       :rules="passwordFormRules" | ||||||
|  |       label-width="100px" | ||||||
|  |     > | ||||||
|  |       <!-- 旧密码 --> | ||||||
|  |       <el-form-item | ||||||
|  |         :label="$t('recompose:form:oldPassword')" | ||||||
|  |         prop="OldPassWord" | ||||||
|  |       > | ||||||
|  |         <el-input | ||||||
|  |           v-model="password.OldPassWord" | ||||||
|  |           type="password" | ||||||
|  |           show-password | ||||||
|  |           auto-complete="new-password" | ||||||
|  |           :placeholder="$t('recompose:form:oldPassword')" | ||||||
|  |         /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <!-- 新密码 --> | ||||||
|  |       <el-form-item | ||||||
|  |         :label="$t('recompose:form:newPassword')" | ||||||
|  |         prop="NewPassWord" | ||||||
|  |       > | ||||||
|  |         <el-input | ||||||
|  |           v-model="password.NewPassWord" | ||||||
|  |           type="password" | ||||||
|  |           show-password | ||||||
|  |           auto-complete="new-password" | ||||||
|  |           :placeholder="$t('recompose:form:newPassword')" | ||||||
|  |         /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <!-- 确认密码 --> | ||||||
|  |       <el-form-item | ||||||
|  |         :label="$t('recompose:form:confirmPassword')" | ||||||
|  |         prop="ConfirmPassWord" | ||||||
|  |       > | ||||||
|  |         <el-input | ||||||
|  |           v-model="password.ConfirmPassWord" | ||||||
|  |           type="password" | ||||||
|  |           show-password | ||||||
|  |           auto-complete="new-password" | ||||||
|  |           :placeholder="$t('recompose:form:confirmPassword')" | ||||||
|  |         /> | ||||||
|  |       </el-form-item> | ||||||
|  |     </el-form> | ||||||
|  |     <el-button type="primary" size="small" class="trial-info-btn" @click="save"> | ||||||
|  |       {{ $t("trials:trials-myinfo:button:save") }} | ||||||
|  |     </el-button> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
| <script> | <script> | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ | ||||||
|             @change="handleShowDetail" |             @change="handleShowDetail" | ||||||
|           /> |           /> | ||||||
|           <!--评估报告--> |           <!--评估报告--> | ||||||
|           <el-button v-if="readingTaskState>=2" type="primary" size="small" @click="showReport">{{$t('trials:dicoms:button:evaluationReport')}}</el-button> |           <el-button :loading="reportBtnLoading" v-if="readingTaskState>=2" type="primary" size="small" @click="showReport">{{$t('trials:dicoms:button:evaluationReport')}}</el-button> | ||||||
|           <el-button |           <el-button | ||||||
|             v-if="readingTaskState<2" |             v-if="readingTaskState<2" | ||||||
|             type="primary" |             type="primary" | ||||||
|  | @ -322,6 +322,7 @@ export default { | ||||||
|       // 评估报告 |       // 评估报告 | ||||||
|       previewFileVisible: false, |       previewFileVisible: false, | ||||||
|       fileData: {}, |       fileData: {}, | ||||||
|  |       reportBtnLoading:false | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   computed: { |   computed: { | ||||||
|  | @ -364,10 +365,12 @@ export default { | ||||||
|   methods: { |   methods: { | ||||||
|     // 评估报告 |     // 评估报告 | ||||||
|     async showReport(){ |     async showReport(){ | ||||||
|  |       if(this.reportBtnLoading) return; | ||||||
|       let data = { |       let data = { | ||||||
|         VisitTaskId: this.visitTaskId, |         VisitTaskId: this.visitTaskId, | ||||||
|       }; |       }; | ||||||
|       try { |       try { | ||||||
|  |         this.reportBtnLoading = true; | ||||||
|         let res = await showReadReport(data); |         let res = await showReadReport(data); | ||||||
|         let urlPdf  = window.URL.createObjectURL(new Blob([res])) |         let urlPdf  = window.URL.createObjectURL(new Blob([res])) | ||||||
|         this.viewVisible = true |         this.viewVisible = true | ||||||
|  | @ -375,8 +378,10 @@ export default { | ||||||
|           path: encodeURIComponent(urlPdf), |           path: encodeURIComponent(urlPdf), | ||||||
|           name:'评估报告.pdf' |           name:'评估报告.pdf' | ||||||
|         }; |         }; | ||||||
|  |         this.reportBtnLoading = false; | ||||||
|         this.previewFileVisible = true; |         this.previewFileVisible = true; | ||||||
|       } catch (err) { |       } catch (err) { | ||||||
|  |         this.reportBtnLoading = false; | ||||||
|         console.log(err); |         console.log(err); | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
|  | @ -277,7 +277,7 @@ import Pagination from "@/components/Pagination"; | ||||||
| import { getPatientVisitTaskList } from "@/api/readManagenent.js"; | import { getPatientVisitTaskList } from "@/api/readManagenent.js"; | ||||||
| import { getToken } from "@/utils/auth"; | import { getToken } from "@/utils/auth"; | ||||||
| // import { getSystemConfirmedCreiterionList } from "@/api/trials"; | // import { getSystemConfirmedCreiterionList } from "@/api/trials"; | ||||||
| import { getTrialCriterionList } from '@/api/trials/reading' | import { getTrialCriterionList } from "@/api/trials/reading"; | ||||||
| import { downLoadReadReport } from "@/api/export"; | import { downLoadReadReport } from "@/api/export"; | ||||||
| import { downloadImage } from "@/utils/uploadZip.js"; | import { downloadImage } from "@/utils/uploadZip.js"; | ||||||
| const defaultSearchData = () => { | const defaultSearchData = () => { | ||||||
|  | @ -317,6 +317,7 @@ export default { | ||||||
|       loading: false, |       loading: false, | ||||||
|       total: 0, |       total: 0, | ||||||
|       // 修改检查 |       // 修改检查 | ||||||
|  |       reportBtnLoading: false, | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|   created() { |   created() { | ||||||
|  | @ -330,12 +331,16 @@ export default { | ||||||
|     }, |     }, | ||||||
|     // 评估报告 |     // 评估报告 | ||||||
|     async showReport(item) { |     async showReport(item) { | ||||||
|  |       if (this.reportBtnLoading) return; | ||||||
|       let data = { |       let data = { | ||||||
|         VisitTaskId: item.Id, |         VisitTaskId: item.Id, | ||||||
|       }; |       }; | ||||||
|       try { |       try { | ||||||
|  |         this.reportBtnLoading = true; | ||||||
|         let res = await downLoadReadReport(data); |         let res = await downLoadReadReport(data); | ||||||
|  |         this.reportBtnLoading = false; | ||||||
|       } catch (err) { |       } catch (err) { | ||||||
|  |         this.reportBtnLoading = false; | ||||||
|         console.log(err); |         console.log(err); | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
|  | @ -104,9 +104,9 @@ | ||||||
| <script> | <script> | ||||||
| import { | import { | ||||||
|   getSubjectVisitSelectList, |   getSubjectVisitSelectList, | ||||||
|   addSubjectPatientStudyBinding, |  | ||||||
|   addOrUpdateSubjectVisit, |   addOrUpdateSubjectVisit, | ||||||
| } from "@/api/inspection.js"; | } from "@/api/inspection.js"; | ||||||
|  | import { updateSubjectVisitStudyBinding } from "@/api/trials/visit.js"; | ||||||
| import visitSelect from "@/components/visitSelect"; | import visitSelect from "@/components/visitSelect"; | ||||||
| export default { | export default { | ||||||
|   name: "editVisitDialog", |   name: "editVisitDialog", | ||||||
|  | @ -169,11 +169,11 @@ export default { | ||||||
|         SubjectId: this.data.SubjectId, |         SubjectId: this.data.SubjectId, | ||||||
|         SubjectVisitId: this.form.SubjectVisitId, |         SubjectVisitId: this.form.SubjectVisitId, | ||||||
|         ScpStudyId: this.data.StudyId || this.data.SCPStudyId, |         ScpStudyId: this.data.StudyId || this.data.SCPStudyId, | ||||||
|  |         IsAdd: true, | ||||||
|       }; |       }; | ||||||
|       let arr = [obj]; |  | ||||||
|       try { |       try { | ||||||
|         this.btnLoading = true; |         this.btnLoading = true; | ||||||
|         let res = await addSubjectPatientStudyBinding(arr); |         let res = await updateSubjectVisitStudyBinding(obj); | ||||||
|         this.btnLoading = false; |         this.btnLoading = false; | ||||||
|         if (res.IsSuccess) { |         if (res.IsSuccess) { | ||||||
|           this.$message.success(this.$t("common:message:savedSuccessfully")); |           this.$message.success(this.$t("common:message:savedSuccessfully")); | ||||||
|  |  | ||||||
|  | @ -19,9 +19,9 @@ | ||||||
|         class="demo-form-inline topForm" |         class="demo-form-inline topForm" | ||||||
|         :rules="rules" |         :rules="rules" | ||||||
|         ref="addSubjectForm" |         ref="addSubjectForm" | ||||||
|         label-width="150px" |         label-width="130px" | ||||||
|       > |       > | ||||||
|         <div class="selectAndBtn"> |         <div> | ||||||
|           <!--受试者编号--> |           <!--受试者编号--> | ||||||
|           <el-form-item |           <el-form-item | ||||||
|             :label="$t('trials:crcQuestion:table:subjectId')" |             :label="$t('trials:crcQuestion:table:subjectId')" | ||||||
|  | @ -35,56 +35,71 @@ | ||||||
|               default-first-option |               default-first-option | ||||||
|               clearable |               clearable | ||||||
|               :disabled="status === 'visit'" |               :disabled="status === 'visit'" | ||||||
|  |               style="width: 300px" | ||||||
|             > |             > | ||||||
|               <el-option |               <el-option | ||||||
|                 v-for="item in subjectIdList" |                 v-for="item in subjectIdList" | ||||||
|                 :key="item.SubejctId" |                 :key="item.SubejctId" | ||||||
|                 :label="item.SubjectCode" |                 :label=" | ||||||
|  |                   item.ShortName || item.Sex | ||||||
|  |                     ? `${item.SubjectCode}(${item.ShortName},${ | ||||||
|  |                         item.Sex ? $fd('sex', Number(item.Sex)) : '' | ||||||
|  |                       })` | ||||||
|  |                     : item.SubjectCode | ||||||
|  |                 " | ||||||
|                 :value="item.SubejctId" |                 :value="item.SubejctId" | ||||||
|               > |               > | ||||||
|               </el-option> |               </el-option> | ||||||
|             </el-select> |             </el-select> | ||||||
|           </el-form-item> |           </el-form-item> | ||||||
|  |           <!--患者--> | ||||||
|  |           <el-form-item | ||||||
|  |             :label="$t('trials:subject:messge:patient')" | ||||||
|  |             label-width="100px" | ||||||
|  |           > | ||||||
|  |             <el-input | ||||||
|  |               :value="selectPatient.map((item) => item.PatientIdStr).join(', ')" | ||||||
|  |               disabled | ||||||
|  |               :title="selectPatient.map((item) => item.PatientIdStr).join(', ')" | ||||||
|  |             /> | ||||||
|  |           </el-form-item> | ||||||
|           <el-button |           <el-button | ||||||
|             type="primary" |             type="primary" | ||||||
|             @click="save" |             @click.stop="openPatientList" | ||||||
|             :loading="btnLoading" |  | ||||||
|             v-if="status === 'trial'" |             v-if="status === 'trial'" | ||||||
|  |             :disabled="!submitMessage.SubjectId" | ||||||
|           > |           > | ||||||
|             {{ $t("trials:addRP:button:confirmAddPR") }} |             {{ $t("common:button:add") }} | ||||||
|           </el-button> |           </el-button> | ||||||
|           <!-- <el-button |           <div class="btnBox"> | ||||||
|             type="primary" |             <el-button | ||||||
|             @click="remove" |               type="primary" | ||||||
|             :loading="btnLoading" |               @click="save" | ||||||
|             v-else |               :loading="btnLoading" | ||||||
|           > |               v-if="status === 'trial'" | ||||||
|             {{ $t("common:button:remove") }} |             > | ||||||
|           </el-button> --> |               {{ $t("trials:addRP:button:confirmAddPR") }} | ||||||
|  |             </el-button> | ||||||
|  |             <!-- <el-button | ||||||
|  |               type="primary" | ||||||
|  |               @click="remove" | ||||||
|  |               :loading="btnLoading" | ||||||
|  |               v-else | ||||||
|  |             > | ||||||
|  |               {{ $t("common:button:remove") }} | ||||||
|  |             </el-button> --> | ||||||
|  |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div> |         <div> | ||||||
|           <el-form-item :label="$t('trials:study:tabpane:bindPatient')"> |           <el-form-item | ||||||
|  |             :label="$t('trials:study:tabpane:bindPatient')" | ||||||
|  |             :style="{ opacity: bindPatientTip ? 1 : 0 }" | ||||||
|  |           > | ||||||
|             <span v-if="bindPatientTip">{{ |             <span v-if="bindPatientTip">{{ | ||||||
|               bindPatientTip.map((item) => item.PatientIdStr).join(", ") |               bindPatientTip.map((item) => item.PatientIdStr).join(", ") | ||||||
|             }}</span> |             }}</span> | ||||||
|           </el-form-item> |           </el-form-item> | ||||||
|         </div> |         </div> | ||||||
|         <!--患者--> |  | ||||||
|         <el-form-item :label="$t('trials:subject:messge:patient')"> |  | ||||||
|           <el-input |  | ||||||
|             :value="selectPatient.map((item) => item.PatientIdStr).join(', ')" |  | ||||||
|             disabled |  | ||||||
|             :title="selectPatient.map((item) => item.PatientIdStr).join(', ')" |  | ||||||
|           /> |  | ||||||
|         </el-form-item> |  | ||||||
|         <el-button |  | ||||||
|           type="primary" |  | ||||||
|           @click.stop="openPatientList" |  | ||||||
|           v-if="status === 'trial'" |  | ||||||
|           :disabled="!submitMessage.SubjectId" |  | ||||||
|         > |  | ||||||
|           {{ $t("common:button:add") }} |  | ||||||
|         </el-button> |  | ||||||
|       </el-form> |       </el-form> | ||||||
|     </div> |     </div> | ||||||
|     <confirmVistList |     <confirmVistList | ||||||
|  | @ -173,7 +188,11 @@ export default { | ||||||
|       if (!this.submitMessage.SubjectId) return false; |       if (!this.submitMessage.SubjectId) return false; | ||||||
|       let PatientList = []; |       let PatientList = []; | ||||||
|       this.subjectIdList.some((item) => { |       this.subjectIdList.some((item) => { | ||||||
|         if (item.SubejctId === this.submitMessage.SubjectId) { |         if ( | ||||||
|  |           item.SubejctId === this.submitMessage.SubjectId && | ||||||
|  |           item.PatientList && | ||||||
|  |           item.PatientList.length > 0 | ||||||
|  |         ) { | ||||||
|           PatientList.push(...item.PatientList); |           PatientList.push(...item.PatientList); | ||||||
|         } |         } | ||||||
|       }); |       }); | ||||||
|  | @ -222,7 +241,9 @@ export default { | ||||||
|         if (res.IsSuccess) { |         if (res.IsSuccess) { | ||||||
|           this.submitMessage.SubjectId = res.Result; |           this.submitMessage.SubjectId = res.Result; | ||||||
|           this.submitMessage.TrialId = data.TrialId; |           this.submitMessage.TrialId = data.TrialId; | ||||||
|           let patient = this.bindPatientTip.map((item) => item.PatientId); |           let patient = this.bindPatientTip | ||||||
|  |             ? this.bindPatientTip.map((item) => item.PatientId) | ||||||
|  |             : []; | ||||||
|           this.Patient.PatientId = [...data.PatientIdList, ...patient]; |           this.Patient.PatientId = [...data.PatientIdList, ...patient]; | ||||||
|           this.$message.success(this.$t("common:message:addedSuccessfully")); |           this.$message.success(this.$t("common:message:addedSuccessfully")); | ||||||
|           this.$emit("getList"); |           this.$emit("getList"); | ||||||
|  | @ -311,6 +332,9 @@ export default { | ||||||
|     width: 100%; |     width: 100%; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | .btnBox { | ||||||
|  |   float: right; | ||||||
|  | } | ||||||
| .search { | .search { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|  |  | ||||||
|  | @ -0,0 +1,132 @@ | ||||||
|  | <template> | ||||||
|  |   <el-dialog | ||||||
|  |     :visible.sync="visible" | ||||||
|  |     :close-on-click-modal="false" | ||||||
|  |     :fullscreen="true" | ||||||
|  |     custom-class="upload-dialog" | ||||||
|  |     :before-close="beforeClosePitentDig" | ||||||
|  |   > | ||||||
|  |     <span slot="title">{{ this.$t("trials:subject:title:studyList") }}</span> | ||||||
|  |     <el-table | ||||||
|  |       ref="patientStudyList" | ||||||
|  |       v-loading="loading" | ||||||
|  |       v-adaptive="{ bottomOffset: 60 }" | ||||||
|  |       :data="list" | ||||||
|  |       stripe | ||||||
|  |       height="100" | ||||||
|  |     > | ||||||
|  |       <el-table-column type="index" width="40" /> | ||||||
|  |       <!--患者ID--> | ||||||
|  |       <el-table-column | ||||||
|  |         prop="PatientIdStr" | ||||||
|  |         :label="$t('trials:uploadDicomList:table:pId')" | ||||||
|  |         show-overflow-tooltip | ||||||
|  |         min-width="140" | ||||||
|  |         sortable="custom" | ||||||
|  |       ></el-table-column> | ||||||
|  |       <!--患者姓名--> | ||||||
|  |       <el-table-column | ||||||
|  |         prop="PatientName" | ||||||
|  |         :label="$t('trials:uploadDicomList:table:patientName')" | ||||||
|  |         show-overflow-tooltip | ||||||
|  |         min-width="140" | ||||||
|  |         sortable="custom" | ||||||
|  |       ></el-table-column> | ||||||
|  |       <!--出生日期--> | ||||||
|  |       <el-table-column | ||||||
|  |         prop="PatientBirthDate" | ||||||
|  |         :label="$t('trials:inspection:table:birthdate')" | ||||||
|  |         show-overflow-tooltip | ||||||
|  |         min-width="140" | ||||||
|  |         sortable="custom" | ||||||
|  |       ></el-table-column> | ||||||
|  |       <!--性别--> | ||||||
|  |       <el-table-column | ||||||
|  |         prop="PatientSex" | ||||||
|  |         :label="$t('trials:trials-myinfo:form:gender')" | ||||||
|  |         show-overflow-tooltip | ||||||
|  |         min-width="140" | ||||||
|  |         sortable="custom" | ||||||
|  |       ></el-table-column> | ||||||
|  |       <!--操作--> | ||||||
|  |       <el-table-column :label="$t('common:action:action')" width="250"> | ||||||
|  |         <template slot-scope="scope"> | ||||||
|  |           <el-button | ||||||
|  |             circle | ||||||
|  |             icon="el-icon-delete" | ||||||
|  |             :title="$t('trials:subject:patientStudyList:button:delete')" | ||||||
|  |             @click.stop="remove(scope.row)" | ||||||
|  |           /> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|  |     </el-table> | ||||||
|  |   </el-dialog> | ||||||
|  | </template> | ||||||
|  | <script> | ||||||
|  | import { deleteSubjectPatientBinding } from "@/api/inspection.js"; | ||||||
|  | export default { | ||||||
|  |   name: "patientStudyList", | ||||||
|  |   props: { | ||||||
|  |     visible: { | ||||||
|  |       required: true, | ||||||
|  |       default: false, | ||||||
|  |     }, | ||||||
|  |     list: { | ||||||
|  |       required: true, | ||||||
|  |       default: () => { | ||||||
|  |         return []; | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |     SubjectId: { | ||||||
|  |       required: true, | ||||||
|  |       default: "", | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       loading: false, | ||||||
|  |     }; | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     beforeClosePitentDig() { | ||||||
|  |       this.$emit("update:visible", false); | ||||||
|  |     }, | ||||||
|  |     async remove(item) { | ||||||
|  |       try { | ||||||
|  |         let confirm = await this.$confirm( | ||||||
|  |           this.$t("trials:sitesList:message:removeSite"), | ||||||
|  |           { | ||||||
|  |             type: "warning", | ||||||
|  |             distinguishCancelAndClose: true, | ||||||
|  |             confirmButtonText: this.$t("common:button:confirm"), | ||||||
|  |             cancelButtonText: this.$t("recompose:button:cancel"), | ||||||
|  |           } | ||||||
|  |         ); | ||||||
|  |         if (confirm !== "confirm") return; | ||||||
|  |         let params = { | ||||||
|  |           PatientId: item.PatientId, | ||||||
|  |           SubjectId: this.SubjectId, | ||||||
|  |           TrialId: this.$route.query.trialId, | ||||||
|  |         }; | ||||||
|  |         this.loading = true; | ||||||
|  |         let res = await deleteSubjectPatientBinding(params); | ||||||
|  |         this.loading = false; | ||||||
|  |         if (res.IsSuccess) { | ||||||
|  |           this.$message.success(this.$t("common:message:removeSuccessfully")); | ||||||
|  |           //   this.$emit("update:visible", false); | ||||||
|  |           this.$emit("getList"); | ||||||
|  |           let index = this.list.findIndex( | ||||||
|  |             (i) => i.PatientId === item.PatientId | ||||||
|  |           ); | ||||||
|  |           let list = [...this.list]; | ||||||
|  |           list.splice(index, 1); | ||||||
|  |           this.$emit("update:list", list); | ||||||
|  |         } | ||||||
|  |       } catch (err) { | ||||||
|  |         this.btnLoading = false; | ||||||
|  |         console.log(err); | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  | @ -111,6 +111,10 @@ | ||||||
|             <span |             <span | ||||||
|               v-for="(item, index) in scope.row.PatientList" |               v-for="(item, index) in scope.row.PatientList" | ||||||
|               :key="`${item.PatientId}${index}`" |               :key="`${item.PatientId}${index}`" | ||||||
|  |               @click.stop=" | ||||||
|  |                 openPatientStudy(scope.row.PatientList, scope.row.Id) | ||||||
|  |               " | ||||||
|  |               style="color: #68a2d5; cursor: pointer" | ||||||
|             > |             > | ||||||
|               {{ |               {{ | ||||||
|                 index === scope.row.PatientList.length - 1 |                 index === scope.row.PatientList.length - 1 | ||||||
|  | @ -280,10 +284,18 @@ | ||||||
|       @handleOpenDialog="handleOpenDialog" |       @handleOpenDialog="handleOpenDialog" | ||||||
|       @getList="getList" |       @getList="getList" | ||||||
|     /> |     /> | ||||||
|  |     <!--患者列表--> | ||||||
|  |     <patientStudyList | ||||||
|  |       v-if="PitentVisible" | ||||||
|  |       :visible.sync="PitentVisible" | ||||||
|  |       :list.sync="PitentStudyList" | ||||||
|  |       :SubjectId="PitentStudySubjectId" | ||||||
|  |       @getList="getList" | ||||||
|  |     /> | ||||||
|   </BaseContainer> |   </BaseContainer> | ||||||
| </template> | </template> | ||||||
| <script> | <script> | ||||||
| import { getTrialSiteSelect, deleteSubject } from "@/api/trials"; | import { deleteSubject } from "@/api/trials"; | ||||||
| import { getPatientSubejctList } from "@/api/trials/subject"; | import { getPatientSubejctList } from "@/api/trials/subject"; | ||||||
| import { getSubjectList_Export } from "@/api/export"; | import { getSubjectList_Export } from "@/api/export"; | ||||||
| import BaseContainer from "@/components/BaseContainer"; | import BaseContainer from "@/components/BaseContainer"; | ||||||
|  | @ -291,6 +303,7 @@ import Pagination from "@/components/Pagination"; | ||||||
| import SubjectsForm from "./components/SubjectsForm"; | import SubjectsForm from "./components/SubjectsForm"; | ||||||
| import SubjectStatusForm from "./components/SubjectStatusForm"; | import SubjectStatusForm from "./components/SubjectStatusForm"; | ||||||
| import addSubject from "./components/add-subject.vue"; | import addSubject from "./components/add-subject.vue"; | ||||||
|  | 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 { | ||||||
|  | @ -312,6 +325,7 @@ export default { | ||||||
|     SubjectsForm, |     SubjectsForm, | ||||||
|     SubjectStatusForm, |     SubjectStatusForm, | ||||||
|     addSubject, |     addSubject, | ||||||
|  |     patientStudyList, | ||||||
|   }, |   }, | ||||||
|   data() { |   data() { | ||||||
|     return { |     return { | ||||||
|  | @ -328,6 +342,10 @@ export default { | ||||||
|       addSubjectTrialsVisible: false, |       addSubjectTrialsVisible: false, | ||||||
|       // 确认访视 |       // 确认访视 | ||||||
|       confirmTrialsVisible: false, |       confirmTrialsVisible: false, | ||||||
|  |       // 患者列表(点击病历号打开) | ||||||
|  |       PitentVisible: false, | ||||||
|  |       PitentStudyList: [], | ||||||
|  |       PitentStudySubjectId: null, | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|   watch: { |   watch: { | ||||||
|  | @ -349,6 +367,11 @@ export default { | ||||||
|           this.loading = false; |           this.loading = false; | ||||||
|         }); |         }); | ||||||
|     }, |     }, | ||||||
|  |     openPatientStudy(list, id) { | ||||||
|  |       this.PitentStudyList = list; | ||||||
|  |       this.PitentStudySubjectId = id; | ||||||
|  |       this.PitentVisible = true; | ||||||
|  |     }, | ||||||
|     // 获取受试者列表 |     // 获取受试者列表 | ||||||
|     async getList() { |     async getList() { | ||||||
|       let data = {}; |       let data = {}; | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| <template> | <template> | ||||||
|   <BaseContainer> |   <BaseContainer> | ||||||
|     <template slot="search-container" v-if="!isMine"> |     <template slot="search-container"> | ||||||
|       <el-form :inline="true"> |       <el-form :inline="true"> | ||||||
|         <el-form-item |         <el-form-item | ||||||
|           :label="$t('trials:loginLog:table:optType')" |           :label="$t('trials:loginLog:table:optType')" | ||||||
|  | @ -41,6 +41,7 @@ | ||||||
|         <el-form-item |         <el-form-item | ||||||
|           :label="$t('trials:loginLog:table:userName')" |           :label="$t('trials:loginLog:table:userName')" | ||||||
|           prop="LoginUserName" |           prop="LoginUserName" | ||||||
|  |           v-if="!isMine" | ||||||
|         > |         > | ||||||
|           <el-input |           <el-input | ||||||
|             v-model="searchData.LoginUserName" |             v-model="searchData.LoginUserName" | ||||||
|  | @ -52,6 +53,7 @@ | ||||||
|         <el-form-item |         <el-form-item | ||||||
|           :label="$t('trials:loginLog:table:userType')" |           :label="$t('trials:loginLog:table:userType')" | ||||||
|           prop="OptType" |           prop="OptType" | ||||||
|  |           v-if="!isMine" | ||||||
|         > |         > | ||||||
|           <el-select |           <el-select | ||||||
|             v-model="searchData.LoginUserTypeEnum" |             v-model="searchData.LoginUserTypeEnum" | ||||||
|  |  | ||||||
|  | @ -1,48 +1,33 @@ | ||||||
| <template> | <template> | ||||||
|   <div class="trial-information"> |   <div class="trial-information"> | ||||||
|     <el-descriptions :column="2" border style="width: 1000px"> |     <el-descriptions :column="2" border style="width: 1200px"> | ||||||
|       <!--项目编号--> |  | ||||||
|       <el-descriptions-item :label="$t('trials:trials-list:form:trialId')"> |  | ||||||
|         {{ trialInfo.TrialCode }} |  | ||||||
|         <el-tag |  | ||||||
|           v-show="trialInfo.TrialStatusStr" |  | ||||||
|           size="small" |  | ||||||
|           style="margin-left: 10px" |  | ||||||
|         > |  | ||||||
|           ( {{ $fd("TrialStatusEnum", trialInfo.TrialStatusStr) }} ) |  | ||||||
|         </el-tag> |  | ||||||
|       </el-descriptions-item> |  | ||||||
|       <!--项目类型--> |       <!--项目类型--> | ||||||
|       <el-descriptions-item :label="$t('trials:trials-list:form:trialType')"> |       <el-descriptions-item :label="$t('trials:trials-list:form:trialType')"> | ||||||
|         {{ $fd("TrialType", trialInfo.TrialType) }} |         {{ $fd("TrialType", trialInfo.TrialType) }} | ||||||
|       </el-descriptions-item> |       </el-descriptions-item> | ||||||
|       <!--试验名称--> |  | ||||||
|       <el-descriptions-item |  | ||||||
|         :label="$t('trials:trials-list:form:experimentName')" |  | ||||||
|       > |  | ||||||
|         {{ trialInfo.ExperimentName }} |  | ||||||
|       </el-descriptions-item> |  | ||||||
|       <!--研究方案号--> |       <!--研究方案号--> | ||||||
|       <el-descriptions-item |       <el-descriptions-item | ||||||
|         :label="$t('trials:trials-list:form:researchNumber')" |         :label="$t('trials:trials-list:form:researchNumber')" | ||||||
|       > |       > | ||||||
|         {{ trialInfo.ResearchProgramNo }} |         {{ trialInfo.ResearchProgramNo }} | ||||||
|       </el-descriptions-item> |       </el-descriptions-item> | ||||||
|       <!--主要研究者--> |       <!--试验名称--> | ||||||
|       <el-descriptions-item :label="$t('trials:trials-list:form:pi')"> |       <el-descriptions-item | ||||||
|         {{ trialInfo.HeadPI }} |         :label="$t('trials:trials-list:form:experimentName')" | ||||||
|  |       > | ||||||
|  |         {{ trialInfo.ExperimentName }} | ||||||
|  |       </el-descriptions-item> | ||||||
|  |       <!--药物/器械名称--> | ||||||
|  |       <el-descriptions-item :label="$t('trials:trials-list:message:D/Dname')"> | ||||||
|  |         {{ trialInfo.MedicineName }} | ||||||
|       </el-descriptions-item> |       </el-descriptions-item> | ||||||
|       <!--申办方--> |       <!--申办方--> | ||||||
|       <el-descriptions-item :label="$t('trials:trials-list:form:sponsor')"> |       <el-descriptions-item :label="$t('trials:trials-list:form:sponsor')"> | ||||||
|         {{ trialInfo.Sponsor }} |         {{ trialInfo.Sponsor }} | ||||||
|       </el-descriptions-item> |       </el-descriptions-item> | ||||||
|       <!--CRO--> |       <!--主要研究者--> | ||||||
|       <el-descriptions-item :label="$t('trials:trials-list:form:cro')"> |       <el-descriptions-item :label="$t('trials:trials-list:form:pi')"> | ||||||
|         {{ trialInfo.CRO }} |         {{ trialInfo.HeadPI }} | ||||||
|       </el-descriptions-item> |  | ||||||
|       <!--药物/器械名称--> |  | ||||||
|       <el-descriptions-item :label="$t('trials:trials-list:message:D/Dname')"> |  | ||||||
|         {{ trialInfo.MedicineName }} |  | ||||||
|       </el-descriptions-item> |       </el-descriptions-item> | ||||||
|       <!--临床分期--> |       <!--临床分期--> | ||||||
|       <el-descriptions-item :label="$t('trials:trials-list:form:phase')"> |       <el-descriptions-item :label="$t('trials:trials-list:form:phase')"> | ||||||
|  | @ -52,16 +37,6 @@ | ||||||
|       <el-descriptions-item :label="$t('trials:trials-list:form:indication')"> |       <el-descriptions-item :label="$t('trials:trials-list:form:indication')"> | ||||||
|         {{ trialInfo.Indication }} |         {{ trialInfo.Indication }} | ||||||
|       </el-descriptions-item> |       </el-descriptions-item> | ||||||
|       <!--检查技术--> |  | ||||||
|       <el-descriptions-item :label="$t('trials:trials-list:form:modality')"> |  | ||||||
|         {{ |  | ||||||
|           trialInfo.ModalityIds |  | ||||||
|             ? trialInfo.ModalityIds.map((item) => |  | ||||||
|                 $fd("Modality", item, "id") |  | ||||||
|               ).join(", ") |  | ||||||
|             : "" |  | ||||||
|         }} |  | ||||||
|       </el-descriptions-item> |  | ||||||
|       <!--阅片标准--> |       <!--阅片标准--> | ||||||
|       <el-descriptions-item |       <el-descriptions-item | ||||||
|         :span="2" |         :span="2" | ||||||
|  | @ -75,6 +50,21 @@ | ||||||
|             : "" |             : "" | ||||||
|         }} |         }} | ||||||
|       </el-descriptions-item> |       </el-descriptions-item> | ||||||
|  |       <!--CRO--> | ||||||
|  |       <el-descriptions-item :label="$t('trials:trials-list:form:cro')"> | ||||||
|  |         {{ trialInfo.CRO }} | ||||||
|  |       </el-descriptions-item> | ||||||
|  |       <!--项目编号--> | ||||||
|  |       <!-- <el-descriptions-item :label="$t('trials:trials-list:form:trialId')"> | ||||||
|  |         {{ trialInfo.TrialCode }} | ||||||
|  |         <el-tag | ||||||
|  |           v-show="trialInfo.TrialStatusStr" | ||||||
|  |           size="small" | ||||||
|  |           style="margin-left: 10px" | ||||||
|  |         > | ||||||
|  |           ( {{ $fd("TrialStatusEnum", trialInfo.TrialStatusStr) }} ) | ||||||
|  |         </el-tag> | ||||||
|  |       </el-descriptions-item> --> | ||||||
|       <!--联系人--> |       <!--联系人--> | ||||||
|       <el-descriptions-item |       <el-descriptions-item | ||||||
|         :label="$t('trials:researchRecord:table:contactor')" |         :label="$t('trials:researchRecord:table:contactor')" | ||||||
|  | @ -89,19 +79,13 @@ | ||||||
|       <el-descriptions-item :label="$t('trials:trials-list:form:projectCycle')"> |       <el-descriptions-item :label="$t('trials:trials-list:form:projectCycle')"> | ||||||
|         {{ trialInfo.AuthorizationDuration }} |         {{ trialInfo.AuthorizationDuration }} | ||||||
|       </el-descriptions-item> |       </el-descriptions-item> | ||||||
|       <!--授权日期--> |  | ||||||
|       <el-descriptions-item |  | ||||||
|         :label="$t('trials:trials-list:table:dateAuthorized')" |  | ||||||
|       > |  | ||||||
|         {{ trialInfo.AuthorizationDate }} |  | ||||||
|       </el-descriptions-item> |  | ||||||
|     </el-descriptions> |     </el-descriptions> | ||||||
|     <div |     <div | ||||||
|       v-if="otherInfo && otherInfo.TrialId" |       v-if="otherInfo && otherInfo.TrialId" | ||||||
|       v-hasPermi="['trials:trials-list:activate']" |       v-hasPermi="['trials:trials-list:activate']" | ||||||
|     > |     > | ||||||
|       <p>项目授权信息</p> |       <p>项目授权信息</p> | ||||||
|       <el-descriptions :column="2" border style="width: 1000px"> |       <el-descriptions :column="2" border style="width: 1200px"> | ||||||
|         <!--单位名称--> |         <!--单位名称--> | ||||||
|         <el-descriptions-item |         <el-descriptions-item | ||||||
|           :label="$t('trials:trials-list:activate:organizationName')" |           :label="$t('trials:trials-list:activate:organizationName')" | ||||||
|  | @ -128,6 +112,18 @@ | ||||||
|         > |         > | ||||||
|           {{ otherInfo.PurchaseDuration }} |           {{ otherInfo.PurchaseDuration }} | ||||||
|         </el-descriptions-item> |         </el-descriptions-item> | ||||||
|  |         <!--激活日期--> | ||||||
|  |         <el-descriptions-item | ||||||
|  |           :label="$t('trials:trial-information:title:activationDate')" | ||||||
|  |         > | ||||||
|  |           {{ trialInfo.AuthorizationDate }} | ||||||
|  |         </el-descriptions-item> | ||||||
|  |         <!--授权日期--> | ||||||
|  |         <el-descriptions-item | ||||||
|  |           :label="$t('trials:trials-list:table:dateAuthorized')" | ||||||
|  |         > | ||||||
|  |           {{ trialInfo.AuthorizationDate }} | ||||||
|  |         </el-descriptions-item> | ||||||
|       </el-descriptions> |       </el-descriptions> | ||||||
|       <el-button |       <el-button | ||||||
|         type="primary" |         type="primary" | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue