luojie 2 months ago
parent
commit
ec63c72b41
37 changed files with 887 additions and 93 deletions
  1. +8
    -0
      src/api/business/study/studyFormFill.js
  2. +2
    -1
      src/lang/en.js
  3. +2
    -1
      src/lang/en/business/study/studyFormFill.js
  4. +8
    -0
      src/lang/en/template/commonTemplate.js
  5. +4
    -0
      src/lang/en/template/gsp.js
  6. +2
    -1
      src/lang/zh.js
  7. +1
    -1
      src/lang/zh/business/study/drug.js
  8. +2
    -1
      src/lang/zh/business/study/studyFormFill.js
  9. +8
    -0
      src/lang/zh/template/commonTemplate.js
  10. +5
    -1
      src/lang/zh/template/gsp.js
  11. +1
    -1
      src/utils/menu.js
  12. +5
    -1
      src/views/business/comps/select/SelectTemplate.vue
  13. +7
    -1
      src/views/business/comps/template/TemplateTable.vue
  14. +332
    -0
      src/views/business/comps/template/comps/gsp/DMYPPZJLB.vue
  15. +197
    -26
      src/views/business/comps/template/comps/pcr/PCR002.vue
  16. +1
    -1
      src/views/business/comps/template/comps/sp/SP001.vue
  17. +2
    -1
      src/views/business/comps/template/comps/sp/SP002.vue
  18. +2
    -1
      src/views/business/comps/template/comps/sp/SP003.vue
  19. +14
    -13
      src/views/business/comps/template/comps/sp/SP00456.vue
  20. +6
    -3
      src/views/business/comps/template/formConfig/PCRTableConfig.js
  21. +5
    -3
      src/views/business/comps/template/mixins/templateMixin.js
  22. +7
    -0
      src/views/business/form/drug/comp/enter.vue
  23. +2
    -1
      src/views/business/form/drug/comp/tbbdList.vue
  24. +5
    -4
      src/views/business/form/drug/comp/ytbdList.vue
  25. +2
    -0
      src/views/business/form/drug/list.vue
  26. +7
    -0
      src/views/business/form/nonTrial/comp/enter.vue
  27. +2
    -0
      src/views/business/form/nonTrial/list.vue
  28. +1
    -1
      src/views/business/resource/gsp/comps/gsp/Bj.vue
  29. +1
    -1
      src/views/business/resource/gsp/comps/gsp/Xgkc.vue
  30. +2
    -2
      src/views/business/resource/gsp/comps/gsp/Xz.vue
  31. +17
    -21
      src/views/business/resource/sj/comps/Bj.vue
  32. +7
    -0
      src/views/business/study/comp/enter.vue
  33. +183
    -3
      src/views/business/study/comp/tbbd/Bj.vue
  34. +4
    -3
      src/views/business/study/comp/ytbd/Bj.vue
  35. +2
    -0
      src/views/business/study/list.vue
  36. +7
    -0
      src/views/business/systemLog/list.vue
  37. +24
    -0
      src/views/business/template/list.vue

+ 8
- 0
src/api/business/study/studyFormFill.js View File

@ -111,6 +111,14 @@ export function studyFormFill_tj(data) {
data: data
})
}
//药剂存储
export function studyFormFill_yjcc(data) {
return request({
url: '/system/business/studyFormFill/yjcc',
method: 'post',
data: data
})
}
//观察
export function studyFormFill_gc(data) {

+ 2
- 1
src/lang/en.js View File

@ -77,7 +77,8 @@ export default {
timeOutContent:
'The login status has expired. You can enter your password to access the page, or cancel',
timeOutEnter: 'Enter',
timeOutTip: 'Invalid Session, Or Session Has Expired. Please Log In Again.'
timeOutTip: 'Invalid Session, Or Session Has Expired. Please Log In Again.',
enterPage: 'Enter Page'
},
form: {
search: 'Search',

+ 2
- 1
src/lang/en/business/study/studyFormFill.js View File

@ -73,5 +73,6 @@ export default {
fztgjj: 'Approve/Reject Record Abolition',
ysy: 'Reviewed',
bcjl:'Save',
txbbc:'Fill In And Save'
txbbc:'Fill In And Save',
yjcc:'药剂存储'
}

+ 8
- 0
src/lang/en/template/commonTemplate.js View File

@ -11,6 +11,13 @@ export default {
operationSteps: 'Operation Workflow',
remark: 'Comments',
step: 'Step',
bqdy: 'Label Print',
//平行配制,阶梯配制
xzpxpz:'新增平行配制',
pxpz:'平行配制',
xzjtpz:'新增阶梯配制',
jtpz:'阶梯配制',
// 字段标签
storageConditionLabel: 'Storage Condition',
@ -39,6 +46,7 @@ export default {
// 按钮
saveBtn: 'Save',
deleteBtn: 'Delete',
// 错误提示
addStepError: 'Please add steps',

+ 4
- 0
src/lang/en/template/gsp.js View File

@ -30,5 +30,9 @@ export default {
dwpjtz:'Average Body Weight',
dwsl:'Number',
},
// 毒麻药品配制记录表
DMYPPZJLB:{
title: '毒麻药品配制记录表',
}
}

+ 2
- 1
src/lang/zh.js View File

@ -74,7 +74,8 @@ export default {
crowdOut: '该账户已在其他地方登录,是否继续登录,继续登录挤掉原登录账号',
timeOutContent: '登录状态已过期,您可以输入密码进入页面,或者取消',
timeOutEnter: '进入页面',
timeOutTip: '无效的会话,或者会话已过期,请重新登录。'
timeOutTip: '无效的会话,或者会话已过期,请重新登录。',
enterPage: '进入页面'
},
form: {
search: '查询',

+ 1
- 1
src/lang/zh/business/study/drug.js View File

@ -36,7 +36,7 @@ export default {
jd: '解档',
js: '解锁',
create: '创建精药文件夹',
create: '创建精药文件夹',
inputName: '请输入名称',
inputSn: '请输入编号',
inputLeader: '请选择负责人',

+ 2
- 1
src/lang/zh/business/study/studyFormFill.js View File

@ -74,5 +74,6 @@ export default {
fztgjj: '废止通过/拒绝',
ysy: '已审阅',
bcjl:'保存记录',
txbbc:'填写并保存'
txbbc:'填写并保存',
yjcc:'药剂存储'
}

+ 8
- 0
src/lang/zh/template/commonTemplate.js View File

@ -11,7 +11,14 @@ export default {
operationSteps: '操作步骤',
step: '步骤',
remark: '备注',
bqdy: '标签打印',
//平行配制,阶梯配制
xzpxpz:'新增平行配制',
pxpz:'平行配制',
xzjtpz:'新增阶梯配制',
jtpz:'阶梯配制',
// 字段标签
storageConditionLabel: '存储条件',
testName: '试验名称',
@ -40,6 +47,7 @@ export default {
// 按钮
saveBtn: '保存',
deleteBtn: '刪除',
// 错误提示
addStepError: '请添加步骤',

+ 5
- 1
src/lang/zh/template/gsp.js View File

@ -30,5 +30,9 @@ export default {
dwpjtz:'动物平均体重',
dwsl:'动物数量',
},
// 毒麻药品配制记录表
DMYPPZJLB:{
title: '毒麻药品配制记录表',
}
}

+ 1
- 1
src/utils/menu.js View File

@ -20,7 +20,7 @@ let menuObj = {
档案管理: 'Archive',
试验档案管理: 'Study Archive',
非试验档案管理: 'Non-study Archive',
麻精药配档案管理: 'Drug Archive',
麻精药配档案管理: 'Drug Archive',
供试品档案管理: 'Test Item Archive',
给药制剂档案管理: 'Formulation Archive',
麻精药档案管理: 'Controlled Drug Archive',

+ 5
- 1
src/views/business/comps/select/SelectTemplate.vue View File

@ -29,6 +29,10 @@ export default {
type: Number,
default: 0
},
studyType: {
type: Number,
default: 20
},
},
watch: {
value: {
@ -57,7 +61,7 @@ export default {
methods: {
showSelectTemplate(){
if(!this.disabled){
this.$refs.selectTemplateDialog.show({needPre:this.needPre})
this.$refs.selectTemplateDialog.show({needPre:this.needPre,studyType:this.studyType})
}
},
handleChange(obj) {

+ 7
- 1
src/views/business/comps/template/TemplateTable.vue View File

@ -42,8 +42,11 @@ import SP017 from "./comps/sp/SWYPFXFFXYPZBB/SP017.vue";
import SP018 from "./comps/sp/SWYPFXFFXYPZBB/SP018.vue";
import Demo from "./comps/sp/Demo.vue";
//
////
import SYWZPZJHB from "./comps/gsp/SYWZPZJHB.vue";
import MJYLQSQD from "./comps/gsp/MJYLQSQD.vue";
import DMYPPZJLB from "./comps/gsp/DMYPPZJLB.vue";
// PCR
import PCR001 from "./comps/pcr/PCR001.vue";
@ -54,8 +57,9 @@ export default {
components: {
Demo,
SubPackageDialog, TagPrintDialog, SelectReagentDialog, SelectInstrumentDialog, SelectMixReagentDialog, EditSign,
////
MJYLQSQD, SYWZPZJHB, DMYPPZJLB,
//
MJYLQSQD, SYWZPZJHB,
//
SP001, SP002, SP003, SP00456,SP007, SP008, SP009, SP010, SP011, SP012, SP013, SP014, SP015, SP016, SP017, SP018,
// PCR
@ -104,8 +108,10 @@ export default {
'SP017': 'SP017',
'SP018': 'SP018',
//
////
'SYWZPZJHB': 'SYWZPZJHB',
'MJYLQSQD': 'MJYLQSQD',
'DMYPPZJLB': 'DMYPPZJLB',
//PCR
'PCR001': 'PCR001',
'PCR002': 'PCR002'

+ 332
- 0
src/views/business/comps/template/comps/gsp/DMYPPZJLB.vue View File

@ -0,0 +1,332 @@
<!-- 毒麻药品配制记录表 -->
<template>
<div>
<div class="detail-container">
<div class="detail-title"><img src="@/assets/images/detail-title.png">{{ formData.bdmc ||
$t('template.gsp.DMYPPZJLB.title') }}<img src="@/assets/images/detail-title.png" /></div>
<div class="detail-content">
<div class="content">
<BaseInfoFormPackage fieldItemLabel="template.common.baseInfo" label="template.common.baseInfo"
ref="baseInfoRef" :formConfig="baseInfoFormConfig" :formData="formData" />
<TableList label="template.common.reagentInfo" :columns="sysjColumns" :dataSource="resource" />
<TableList label="template.common.wzInfo" :columns="sywzColumns" :dataSource="resourceWz" />
<TableList label="template.common.instrumentInfo" :columns="yqColumns" :dataSource="yqResource" />
<BaseInfoFormPackage fieldItemLabel="template.common.storageCondition"
label="template.common.storageCondition" ref="storageConditionRef"
:formConfig="storageFormConfig" :formData="formData" />
<LineLabel label="template.common.operationSteps" />
<div class="template-form-item">
<el-button class="print-btn" v-if="fillType === 'actFill'" type="primary"
@click="printTag">{{ $t('template.common.bqdy') }}</el-button>
<BaseInfoFormPackage fieldItemLabel="template.common.operationSteps" ref="stepFormPackageRef"
:formConfig="stepFormConfig" @blur="onHandleBlur" :formData="formData" />
</div>
<Step ref="stepRef" :formData="formData.stepData"></Step>
<BaseInfoFormPackage fieldItemLabel="template.common.remark" label="template.common.remark"
ref="remarkRef" :formConfig="remarkConig" :formData="formData" />
</div>
</div>
</div>
<!-- <button @click="onSave">保存</button> -->
</div>
</template>
<script>
import BaseInfoFormPackage from "@/components/Template/BaseInfoFormPackage";
import LineLabel from "@/components/Template/LineLabel";
import TableList from "@/components/Template/Table";
import Step from "@/components/Template/Step";
import templateMixin from "../../mixins/templateMixin";
import CustomTable from '@/components/Template/CustomTable.vue';
import { getLatestSn } from '@/api/template';
import { EventBus } from "@/utils/eventBus";
import { uniqeResource } from "@/utils/calUnitTools";
import { debounce } from 'lodash-es'
export default {
name: "DMYPPZJLB",
components: { BaseInfoFormPackage, LineLabel, TableList, Step, CustomTable },
mixins: [templateMixin],
props: {
fillType: {
type: String,
default: 'preFill',
},
},
computed: {
//
storageFormConfig() {
return [
{
type: "conditionItem",
config: {
storageCondition: {
label: 'template.common.storageConditionLabel',
type: "select",
fillType: "preFill",
options: this.getDictOptions("business_cctj"),
otherCode: "storageConditionOther",
},
}
}
];
},
//
remarkConig() {
return [
{
type: "cellItem",
config: {
remark: {
label: "",
type: "textarea",
fillType: "actFill",
span: 1,
placeholder: 'template.common.remarkPlaceholder',
maxlength: 1000,
rows: 5
}
}
}
]
},
//
baseInfoFormConfig() {
return [
{
type: "cardItem",
config: {
studyMc: {
label: 'template.common.testName',
type: "input",
disabled: true,
},
studySn: {
label: 'template.common.testNumber',
type: "input",
disabled: true,
},
methodCode: {
label: 'template.common.methodCode',
type: "input",
fillType: "preFill",
maxlength: 50
},
versionNum: {
label: 'template.common.versionNumber',
type: "inputNumber",
fillType: "actFill",
prepend: "V",
maxlength: 50
},
}
},
{
type: "conditionItem",
label: 'template.common.testConfigurationConditions',
config: {
pre: {
label: 'template.common.preFill',
type: "select",
multiple: true,
fillType: "preFill",
options: this.getDictOptions('business_pztj'),
otherCode: "preOther",
},
act: {
label: 'template.common.actualFill',
type: "select",
fillType: "actFill",
otherCode: "actOther",
multiple: true,
compareTo: "pre",
options: this.getDictOptions('business_pztj')
}
}
},
{
type: "cellItem",
label: 'template.common.configurationTime',
config: {
startDate: {
label: 'template.common.startTime',
type: "input",
},
endDate: {
label: 'template.common.endTime',
type: "input",
},
}
}
]
},
//
stepFormConfig() {
return [
{
type: "step",
config: {
targetName: {
label: 'template.common.targetSolutionName',
type: "input",
fillType: "preFill",
maxlength: 50
},
targetCode: {
label: 'template.common.targetSolutionCode',
type: "input",
subType: "span",
fillType: "preFill",
subKey: "targetCodeSn",
maxlength: 20
},
targetPreConcentration: {
label: 'template.common.targetPreConcentration',
type: "inputNumber",
subType: "select",
subKey: "targetPreConcentrationUnit",
fillType: "preFill",
subOptions: this.getDictOptions('business_nddw'),
maxlength: 10,
selectTo: "targetActConcentrationUnit",//
},
targetActConcentration: {
label: 'template.common.targetActConcentration',
type: "inputNumber",
subType: "select",
subKey: "targetActConcentrationUnit",
compareTo: "targetPreConcentration",//
fillType: "actFill",
subFillType: "preFill",
subOptions: this.getDictOptions('business_nddw'),
copyFrom: "targetPreConcentration",//
maxlength: 10
},
targetPreVolume: {
label: 'template.common.targetPreVolume',
type: "inputNumber",
subType: "select",
subKey: "targetPreVolumeUnit",
subOptions: this.getDictOptions('business_tjdw'),
fillType: "preFill",
maxlength: 10,
selectTo: "targetActVolumeUnit",//
},
targetActVolume: {
label: 'template.common.targetActVolume',
type: "inputNumber",
subType: "select",
subKey: "targetActVolumeUnit",
fillType: "actFill",
subFillType: "preFill",
subOptions: this.getDictOptions('business_tjdw'),
compareTo: "targetPreVolume",//
copyFrom: "targetPreVolume",//
maxlength: 10
},
effectivePeriod: {
label: 'template.common.effectivePeriod',
type: "inputNumber",
subType: "select",
subKey: "effectivePeriodUnit",
fillType: "preFill",
subOptions: this.getDictOptions('business_yxqdw'),
maxlength: 10
},
expireDate: {
label: 'template.common.expireDate',
type: "input",
},
}
}
]
},
},
data() {
return {
formData: {}
};
},
mounted() {
const formData = this.getFormDataByTemplateData();
if(!formData.targetCodeSn&& this.fillType === "actFill"){
this.getCode(formData);
}
},
methods: {
//
printTag() {
const printConfig = this.getBasePrintConfig();
const { storageCondition, targetCodeSn } = this.formData;
printConfig["存储条件"] = storageCondition;
printConfig["编号"] = targetCodeSn;
EventBus.$emit('showTagPrintDialog', { printConfig })
},
//
getCode: debounce(async function (v) {
const result = await getLatestSn({
count: 1,
pre:v.targetCode,
type:1
})
if (result.code == 200) {
this.$refs.stepFormPackageRef.updateFormData("targetCodeSn", result.data[0])
}
}, 100),
//
getFilledFormData() {
return this.getFilledFormDataByRefs(["baseInfoRef", "storageConditionRef", "stepFormPackageRef", "stepRef", "remarkRef"])
},
//
async getFormData() {
let content = await this.validFormFields(["baseInfoRef", "storageConditionRef", "stepFormPackageRef", "stepRef", "remarkRef"]);
//resource
let tmpResource = []
if (this.fillType === "actFill") {
//
tmpResource.push({
mc: content.targetName,
bh: content.targetCode + content.targetCodeSn,
ph: '',
ndz: content.targetActConcentration + content.targetActConcentrationUnit,
nd: content.targetActConcentration,
nddw: content.targetActConcentrationUnit,
ly: 'ELN配制',
sxrq: content.expireDate,
kc: content.targetActVolume,
kcdw: content.targetActVolumeUnit,
syl: null,
type: null,
elnType: this.product,
syldw: content.targetActVolumeUnit,
yxzq: content.effectivePeriod,
yxzqdw: content.effectivePeriodUnit,
})
}
//使
const stepResource = this.$refs.stepRef.getStepResource()
this.resourceTmp =uniqeResource(tmpResource,stepResource.sjResource||[])
this.yqResourceTmp = stepResource.yqResource||[]
return content;
},
//
async onSave() {
let content =await this.$refs.stepRef.getFormData();
console.log(content);
},
}
};
</script>
<style rel="stylesheet/scss" lang="scss">
.mt-20 {
margin-top: 20px;
}
.print-btn {
margin-bottom: 20px;
}
</style>

+ 197
- 26
src/views/business/comps/template/comps/pcr/PCR002.vue View File

@ -9,19 +9,25 @@
<BaseInfoFormPackage fieldItemLabel="template.common.baseInfo" label="template.common.baseInfo"
ref="baseInfoRef" :formConfig="baseInfoFormConfig" :formData="formData" />
<TableList label="template.common.reagentInfo" :columns="sysjColumns" :dataSource="resource" />
<TableList label="template.common.wzInfo" :columns="sywzColumns" :dataSource="resourceWz"
v-if="resourceWz.length > 0" />
<TableList label="template.common.instrumentInfo" :columns="yqColumns" :dataSource="yqResource" />
<BaseInfoFormPackage fieldItemLabel="template.common.storageCondition"
label="template.common.storageCondition" ref="storageConditionRef"
:formConfig="storageFormConfig" :formData="formData" />
<LineLabel label="template.common.operationSteps" />
<div class="template-form-item">
<BaseInfoFormPackage fieldItemLabel="template.common.operationSteps" ref="stepFormPackageRef"
@clickable="handleFormClickable"
@onSureModifyRecord="onSureModifyRecord"
@resetRecord="resetRecord"
:formConfig="stepFormConfig" @blur="onHandleBlur" :formData="formData" />
<CustomTable @blur="onHandleTableBlur"
:ref="`tableRef`" :columns="tableStepColumns"
:formData="formData" :prefixKey="`table`" fieldItemLabel="template.common.operationSteps">
<CustomTable
@blur="onHandleTableBlur"
:ref="`stepTableRef`"
:columns="tableStepColumns"
:formData="formData"
:prefixKey = "`table`"
@clickable="handleClickable"
fieldItemLabel = "template.common.operationSteps"
>
<template slot="operation" slot-scope="{ row, rowIndex, columns }">
<TableOpertaion
:fillType="fillType"
@ -42,6 +48,8 @@
</div>
</div>
</div>
<SelectReagentDialog @submit="onSelectReagentSubmit" ref="selectReagentDialogRef">
</SelectReagentDialog>
<!-- <button @click="onSave">保存</button> -->
</div>
</template>
@ -53,14 +61,15 @@ import TableList from "@/components/Template/Table";
import Step from "@/components/Template/Step";
import templateMixin from "../../mixins/templateMixin";
import CustomTable from '@/components/Template/CustomTable.vue';
import { getLatestSn } from '@/api/template';
import { getLatestSnArr } from '@/api/template';
import { EventBus } from "@/utils/eventBus";
import { uniqeResource } from "@/utils/calUnitTools";
import { debounce } from 'lodash-es'
import SelectReagentDialog from '../../dialog/SelectReagentDialog.vue';
import { getLadderColumnsConfig } from "../../formConfig/PCRTableConfig.js";
import TableOpertaion from "@/components/Template/operation/TableOpertaion.vue"
export default {
name: "PCR001",
components: { BaseInfoFormPackage, LineLabel, TableList, Step, CustomTable },
name: "PCR002",
components: { BaseInfoFormPackage, LineLabel, TableList, Step, CustomTable, TableOpertaion, SelectReagentDialog },
mixins: [templateMixin],
props: {
fillType: {
@ -70,7 +79,7 @@ export default {
},
computed: {
tableStepColumns() {
return getLadderColumnsConfig(this);
return getLadderColumnsConfig(this, 'business_pcr_gzy');
},
//
storageFormConfig() {
@ -233,32 +242,118 @@ export default {
},
data() {
return {
formData: {}
reagentType: null, // 1- 2-
formData: {},
currentSubKey: "",//key
currentType: "",//
currentRowIndex: "",//
};
},
mounted() {
const formData = this.getFormDataByTemplateData();
if(this.fillType === "actFill"){
if (this.fillType === "actFill") {
this.getCode(formData);
}
},
methods: {
//
onSureModifyRecord(key) {
if (key === "subStartSolution") {//table
this.$refs.stepTableRef.updateRecords();
}
},
resetRecord() {
this.$refs.stepTableRef.resetRecord();
},
//
handleFormClickable(obj) {
if (this.fillType === "preFill") {
return;
}
console.log(obj)
const subKey = obj.subKey;
if (subKey === "subStartSolution" || subKey === "subSolution") {//
this.$refs.selectReagentDialogRef.show(this.formData.id)
this.currentSubKey = subKey;
this.reagentType = 1;
}
},
//
handleClickable(col, rowIndex) {
//
this.reagentType = 2
this.rowIndex = rowIndex
this.currentSubKey = col.prop;
console.log("clickable",rowIndex, col)
if(col.prop === "sjry"){
//-
this.$refs.selectReagentDialogRef.show(this.formData.id)
}
},
//
onSelectReagentSubmit(code,row){
if(this.reagentType===1){
this.$refs.stepFormPackageRef.updateFormData(this.currentSubKey, code);
//
if(this.currentSubKey == 'subStartSolution') {
this.$refs.stepFormPackageRef.updateFormData("targetAcSolution", row.nd + row.nddw);
this.updateStepTableData(row);
}
}else{
this.$refs.stepTableRef.updateDataSourceByRowIndex(this.rowIndex,{
[this.currentSubKey]: code,
})
}
this.$refs.selectReagentDialogRef.onCancel()
},
//table
updateStepTableData(row) {
const { stepTableFormData = [] } = this.$refs.stepTableRef.getFilledFormData();
//
const newStepTableData = JSON.parse(JSON.stringify(stepTableFormData));
//
for (let i = 0; i < newStepTableData.length; i++) {
const item = newStepTableData[i];
if (i === 0) {
// row.code
newStepTableData[i].startSolutionCode = row.bh;
} else {
// targetSolutionCode
// targetSolutionCode
newStepTableData[i].startSolutionCode = newStepTableData[i - 1].targetSolutionCode + newStepTableData[i - 1].subTargetSolutionCode;
}
console.log(item, row, 'updateStepTableData')
const volResult = this.updateSjmbrynd(item, row.nd);
console.log(volResult, 'volResult')
if (!volResult) {
continue
}
item.actSolutionVolume = volResult.actVol;
item.actSolutionConcentration = volResult.actNd;
item.actSolutionExpire = row.sxr;
}
this.$refs.stepTableRef.updateDataSource(newStepTableData);
// tableRef
},
//
async getCode(v){
const {stepTableFormData = []} = v;
if(stepTableFormData && stepTableFormData.length>0 && !stepTableFormData[0].bhCode){
async getCode(v) {
const { stepTableFormData = [] } = v;
if (stepTableFormData && stepTableFormData.length > 0 && !stepTableFormData[0].bhCode) {
let postSn = []
for(let i=0;i<stepTableFormData.length;i++){
for (let i = 0; i < stepTableFormData.length; i++) {
postSn.push({
pre:stepTableFormData[i].targetSolutionCode,
type:1
pre: stepTableFormData[i].targetSolutionCode,
type: 1
})
}
const result = await getLatestSnArr(postSn)
if(result.code == 200){
for(let i=0;i<stepTableFormData.length;i++){
this.$refs.tableRef.updateDataSourceByRowIndex(i,{
if (result.code == 200) {
for (let i = 0; i < stepTableFormData.length; i++) {
this.$refs.stepTableRef.updateDataSourceByRowIndex(i, {
subTargetSolutionCode: result.data[i],
})
}
@ -276,11 +371,11 @@ export default {
},
//
getFilledFormData() {
return this.getFilledFormDataByRefs(["baseInfoRef", "storageConditionRef", "stepFormPackageRef", "stepRef", "remarkRef"])
return this.getFilledFormDataByRefs(["baseInfoRef", "stepFormPackageRef","stepTableRef", "stepRef", "remarkRef"])
},
//
async getFormData() {
let content = await this.validFormFields(["baseInfoRef", "storageConditionRef", "stepFormPackageRef", "stepRef", "remarkRef"]);
let content = await this.validFormFields(["baseInfoRef", "stepFormPackageRef", "stepTableRef", "stepRef", "remarkRef"]);
//resource
let tmpResource = []
if (this.fillType === "actFill") {
@ -316,6 +411,82 @@ export default {
console.log(content);
},
//
deleteRow(rowIndex) {
const stepTableRef = this.$refs['stepTableRef'];
if (stepTableRef) {
stepTableRef.deleteRow(rowIndex);
}
},
configComplete(val) {
if (val.rowData.sjjzxql === '' || val.rowData.sjjzxql === undefined || val.rowData.sjryxql === '' || val.rowData.sjryxql === undefined) {
this.$message.error("表格内容未填完")
return
}
console.log("完成配置数据:" + JSON.stringify(val))
const { total, unit } = addTj([val.rowData.sjjzxql, val.rowData.sjryxql], [val.headerSelectFields.sjjzxqlUnit, val.headerSelectFields.sjryxqlUnit])
let postData = {
mc: null,
studyId: this.formData.studyId,
studyFormId: this.formData.id,
studySubjectId: this.formData.studySubjectId,
bh: val.rowData.bh + val.rowData.bhCode,
nd: val.rowData.hhwznd,
nddw: val.headerSelectFields.hhwzndUnit,
kc: total,
kcdw: unit,
}
console.log("完成配置提交数据:" + JSON.stringify(postData))
sj_configurationCompleted(postData).then(() => {
}).catch(() => {
})
.finally(() => {
})
},
startConfig(val) {
console.log("开始配置数据:" + JSON.stringify(val))
let postData = {
bh: val.rowData.bh + val.rowData.bhCode,
studyId: this.formData.studyId,
studyFormId: this.formData.id,
studySubjectId: this.formData.studySubjectId,
}
console.log("开始配置提交数据:" + JSON.stringify(postData))
sj_startConfiguration(postData).then(() => {
}).catch(() => {
})
.finally(() => {
})
},
subPackageSubmit(val) {
console.log("分装数据:" + JSON.stringify(val))
if (val.fzsj.fzList && val.fzsj.fzList.length > 0) {
let list = []
for (let i = 0; i < val.fzsj.fzList.length; i++) {
let item = val.fzsj.fzList[i]
list.push({
bh: val.fzsj.mybh + item.preCode,
kc: item.num,
kcdw: val.fzsj.dw,
})
}
let postData = {
studyId: this.formData.studyId,
studyFormId: this.formData.id,
studySubjectId: this.formData.studySubjectId,
bh: val.fzsj.mybh,
nd: val.rowData.hhwznd,
nddw: val.headerSelectFields.hhwzndUnit,
list: list
}
console.log("分装提交数据:" + JSON.stringify(postData))
sj_subpackage(postData).then(() => {
}).catch(() => {
})
.finally(() => {
})
}
},
}
};
</script>

+ 1
- 1
src/views/business/comps/template/comps/sp/SP001.vue View File

@ -17,7 +17,7 @@
<LineLabel label="template.common.operationSteps" />
<div class="template-form-item">
<el-button class="print-btn" v-if="fillType === 'actFill'" type="primary"
@click="printTag">标签打印</el-button>
@click="printTag">{{ $t('template.common.bqdy') }}</el-button>
<BaseInfoFormPackage fieldItemLabel="template.common.operationSteps" ref="stepFormPackageRef"
:formConfig="stepFormConfig" @blur="onHandleBlur" :formData="formData" />
</div>

+ 2
- 1
src/views/business/comps/template/comps/sp/SP002.vue View File

@ -9,6 +9,7 @@
<BaseInfoFormPackage fieldItemLabel="template.common.baseInfo" label="template.common.baseInfo"
ref="baseInfoRef" :formConfig="baseInfoFormConfig" :formData="formData" />
<TableList label="template.common.reagentInfo" :columns="sysjColumns" :dataSource="resource" />
<TableList label="template.common.wzInfo" :columns="sywzColumns" :dataSource="resourceWz" />
<TableList label="template.common.instrumentInfo" :columns="yqColumns" :dataSource="yqResource" />
<BaseInfoFormPackage fieldItemLabel="template.common.storageCondition"
label="template.common.storageCondition" ref="storageConditionRef"
@ -16,7 +17,7 @@
<LineLabel label="template.common.operationSteps" />
<div class="template-form-item">
<el-button class="print-btn" v-if="fillType === 'actFill'" type="primary"
@click="printTag">标签打印</el-button>
@click="printTag">{{ $t('template.common.bqdy') }}</el-button>
<BaseInfoFormPackage fieldItemLabel="template.common.operationSteps" ref="stepFormPackageRef"
:formConfig="stepFormConfig" @blur="onHandleBlur" :formData="formData" />
</div>

+ 2
- 1
src/views/business/comps/template/comps/sp/SP003.vue View File

@ -3,12 +3,13 @@
<div>
<div class="detail-container">
<div class="detail-title"><img src="@/assets/images/detail-title.png">{{ formData.bdmc ||
"生物样品标曲工作液制备表" }}<img src="@/assets/images/detail-title.png" /></div>
$t('template.sp.sp003.title') }}<img src="@/assets/images/detail-title.png" /></div>
<div class="detail-content">
<div class="content">
<BaseInfoFormPackage fieldItemLabel="template.common.baseInfo" label="template.common.baseInfo"
ref="baseInfoRef" :formConfig="baseInfoFormConfig" :formData="formData" />
<TableList label="template.common.reagentInfo" :columns="sysjColumns" :dataSource="resource" />
<TableList label="template.common.wzInfo" :columns="sywzColumns" :dataSource="resourceWz" />
<TableList label="template.common.instrumentInfo" :columns="yqColumns" :dataSource="yqResource" />
<!-- <BaseInfoFormPackage label="存储条件" ref="storageConditionRef" :formConfig="storageFormConfig"
:formData="formData" /> -->

+ 14
- 13
src/views/business/comps/template/comps/sp/SP00456.vue View File

@ -9,14 +9,15 @@
<BaseInfoFormPackage fieldItemLabel="template.common.baseInfo" label="template.common.baseInfo"
ref="baseInfoRef" :formConfig="baseInfoFormConfig" :formData="formData" />
<TableList label="template.common.reagentInfo" :columns="sysjColumns" :dataSource="resource" />
<TableList label="template.common.wzInfo" :columns="sywzColumns" :dataSource="resourceWz" />
<TableList label="template.common.instrumentInfo" :columns="yqColumns" :dataSource="yqResource" />
<BaseInfoFormPackage fieldItemLabel="template.common.storageCondition"
label="template.common.storageCondition" ref="storageConditionRef"
:formConfig="storageFormConfig" :formData="formData" />
<LineLabel label="template.common.operationSteps" />
<div v-if="fillType === 'preFill'" class="mt-20">
<el-button type="primary" @click="handleAddParalle">新增平行配制</el-button>
<el-button type="primary" @click="handleAddLadder">新增阶梯配制</el-button>
<el-button type="primary" @click="handleAddParalle">{{ $t('template.common.xzpxpz') }}</el-button>
<el-button type="primary" @click="handleAddLadder">{{ $t('template.common.xzjtpz') }}</el-button>
</div>
<!-- 阶梯配制区域 -->
@ -24,18 +25,18 @@
<div class="template-form-item">
<div class="config-header">
<div>阶梯配制</div>
<div>{{ $t('template.common.jtpz') }}</div>
<el-button v-if="fillType === 'preFill'" type="text" icon="el-icon-delete"
@click="deleteLadderConfig(ladderIndex)">删除</el-button>
@click="deleteLadderConfig(ladderIndex)">{{ $t('template.common.deleteBtn') }}</el-button>
</div>
<BaseInfoFormPackage @clickable="(e) => handleClickable('ladder', ladderIndex, e)"
@resetRecord="(e) => resetRecord('ladder', ladderIndex, e)"
@onSureModifyRecord="(e) => onSureModifyRecord('ladder', ladderIndex, e)"
:ref="`ladderStepFormPackageRef_${ladderIndex}`" :formConfig="ladderStepFormConfig"
:formData="ladderConfig" fieldItemLabel="阶梯配制" :prefixKey="'ladder_' + ladderIndex" />
:formData="ladderConfig" :fieldItemLabel="$t('template.common.jtpz')" :prefixKey="'ladder_' + ladderIndex" />
<CustomTable @blur="(e) => onHandleTableBlur('ladder', ladderIndex, e)"
:ref="`ladderStepTableRef_${ladderIndex}`" :showOperation="fillType === 'actFill'" :columns="ladderStepColumns"
:formData="ladderConfig" :prefixKey="'ladder_' + ladderIndex" fieldItemLabel="阶梯配制">
:formData="ladderConfig" :prefixKey="'ladder_' + ladderIndex" :fieldItemLabel="$t('template.common.jtpz')">
<template slot="operation" slot-scope="{ row, rowIndex, columns }">
<TableOpertaion @printTag="(e) => printTag(e, 'ladderConfigs', ladderIndex)"
@startConfig="(val) => startConfig(val, 'ladderConfigs', ladderIndex)"
@ -48,28 +49,28 @@
</CustomTable>
<Step class="mt-0 s-container" :ref="`ladderStepRef_${ladderIndex}`"
:formData="ladderConfig.ladderStepData" fieldItemLabel="阶梯配制"
:formData="ladderConfig.ladderStepData" :fieldItemLabel="$t('template.common.jtpz')"
:prefixKey="'ladder_' + ladderIndex"></Step>
</div>
</div>
<!-- 平行配制区域 -->
<div label="平行配制" v-for="(paralleConfig, paralleIndex) in formData.paralleConfigs"
<div :label="$t('template.common.pxpz')" v-for="(paralleConfig, paralleIndex) in formData.paralleConfigs"
:key="'paralle_' + paralleIndex">
<div class="template-form-item">
<div class="config-header">
<div>平行配制</div>
<div>{{ $t('template.common.pxpz') }}</div>
<el-button v-if="fillType === 'preFill'" type="text" icon="el-icon-delete"
@click="deleteParalleConfig(paralleIndex)">删除</el-button>
@click="deleteParalleConfig(paralleIndex)">{{ $t('template.common.deleteBtn') }}</el-button>
</div>
<BaseInfoFormPackage @clickable="(e) => handleClickable('paralle', paralleIndex, e)"
:ref="`paralleStepFormPackageRef_${paralleIndex}`" :formConfig="paralleStepFormConfig"
:formData="paralleConfig" :prefixKey="'paralle' + paralleIndex" fieldItemLabel="平行配制" />
:formData="paralleConfig" :prefixKey="'paralle' + paralleIndex" :fieldItemLabel="$t('template.common.pxpz')" />
<CustomTable @blur="(e) => onHandleTableBlur('paralle', paralleIndex, e)"
:ref="`paralleStepTableRef_${paralleIndex}`" :showOperation="fillType === 'actFill'" :columns="paralleStepColumns"
@clickable="(e, tableRowIndex, rowData) => handleTableClickable('paralle', paralleIndex, e, tableRowIndex, rowData)"
:formData="paralleConfig" :prefixKey="'paralle' + paralleIndex" fieldItemLabel="平行配制">
:formData="paralleConfig" :prefixKey="'paralle' + paralleIndex" :fieldItemLabel="$t('template.common.pxpz')">
<template slot="operation" slot-scope="{ row, rowIndex, columns }">
<TableOpertaion @printTag="(e) => printTag(e, 'paralleConfigs', paralleIndex)"
@startConfig="(val) => startConfig(val, 'paralleConfigs', paralleIndex)"
@ -82,7 +83,7 @@
</CustomTable>
<Step class="mt-0 s-container" :ref="`paralleStepRef_${paralleIndex}`"
:formData="paralleConfig.paralleStepData" fieldItemLabel="平行配制"
:formData="paralleConfig.paralleStepData" :fieldItemLabel="$t('template.common.pxpz')"
:prefixKey="'paralle' + paralleIndex"></Step>
</div>
</div>

+ 6
- 3
src/views/business/comps/template/formConfig/PCRTableConfig.js View File

@ -1,15 +1,17 @@
// 阶梯配置表格列配置
export const getLadderColumnsConfig = ($this) => {
export const getLadderColumnsConfig = ($this, selectKey) => {
return [
{
label: 'template.pcr.pcr002.mbrybh',
prop: 'targetSolutionCode',
bodyType: 'input',
bodyType: selectKey === '' ? 'input' : 'select',
bodyOptions: $this.getDictOptions(selectKey),
otherCode: 'bhOther',
bodySubType: 'span',
bodySubKey: 'subTargetSolutionCode',
bodyFillType: 'preFill',
width: 280,
myCodeFields: ["targetSolutionCode", "subTargetSolutionCode"],//分装的母液编号字段
myCodeFields: ["targetSolutionCode", "bhOther", "subTargetSolutionCode"],//分装的母液编号字段
maxVolumeField: "actSolutionVolume",//分装的最大量字段
maxVolumeFieldUnit: "actSolutionVolumeUnit",//分装的最大量单位字段
},
@ -17,6 +19,7 @@ export const getLadderColumnsConfig = ($this) => {
label: 'template.pcr.pcr002.qsrybh',
prop: 'startSolutionCode',
width: 280,
bodyDisabled: true,
bodyType: 'input',
bodyFillType: 'actFill',
bodyMaxlength: 10

+ 5
- 3
src/views/business/comps/template/mixins/templateMixin.js View File

@ -24,7 +24,8 @@ export default {
'business_sp_xzxytyx', //色谱-编号-选择性与特异性
'business_sp_zdybs', //色谱-编号-最大样本数
'business_sp_xskkx', //色谱-编号-稀释可靠性
'business_sp_cbydb' //色谱-编号-储备液对比
'business_sp_cbydb', //色谱-编号-储备液对比
'business_pcr_gzy', // PCR-编号-工作液
],
props: {
templateData: {
@ -53,11 +54,11 @@ export default {
} = v
if (v.resource) {
//type 类型:1:试剂;3:给药制剂;5:麻精药;7:供试品
//试验试剂信息 试剂
//试验试剂信息 试剂
this.resource = _.filter(JSON.parse(v.resource),function(o){
return o.type==1||o.elnType==1
})
//试验物资信息 供试品、给药制剂
//试验物资信息 供试品、给药制剂
this.resourceWz =_.filter(JSON.parse(v.resource),function(o){
return o.type==3||o.type==7||o.elnType==3||o.elnType==7
})
@ -381,6 +382,7 @@ export default {
//计算并更新实际目标溶液浓度 先计算实际目标溶液体积再计算实际目标溶液浓度
updateSjmbrynd(item, targetAcSolution) {
console.log(item, targetAcSolution, 'updateSjmbrynd')
//实际源溶液浓度÷(实际终体积÷源溶液加入体积);
const precision = item.actSolutionConcentrationPrecision
const volPrecision = item.actSolutionVolumePrecision || 0

+ 7
- 0
src/views/business/form/drug/comp/enter.vue View File

@ -61,6 +61,12 @@ export default {
this.tabList.push({ key: 'wzlb', name: 'page.business.study.studyEnter.wzlb' })
}
this.active = this.$route.params.tab && _.findIndex(this.tabList,(o)=>{return o.key===this.$route.params.tab})>-1 ? this.$route.params.tab: this.tabList.length>0 ? this.tabList[0].key :''
if(this.active){
let name = this.tabList[_.findIndex(this.tabList,(o)=>{return o.key===this.active})].name
if(name){
this.saveSimpleLog({name:this.$t(name,'zh_CN'),nameEn:this.$t(name,'en_US'),jcmc:this.$t('system.enterPage','zh_CN'),jcmcEn:this.$t('system.enterPage','en_US')})
}
}
},
getInfo(){
this.$modal.loading()
@ -80,6 +86,7 @@ export default {
},
changeTab(item) {
if (this.active !== item.key) {
this.saveSimpleLog({name:this.$t(item.name,'zh_CN'),nameEn:this.$t(item.name,'en_US'),jcmc:this.$t('system.enterPage','zh_CN'),jcmcEn:this.$t('system.enterPage','en_US')})
this.active = item.key
}
}

+ 2
- 1
src/views/business/form/drug/comp/tbbdList.vue View File

@ -110,7 +110,7 @@
@click="edit(scope.row)" v-hasPermi="['business:drugFormFill:bj']">{{
$t('form.edit') }}</el-button>
<!-- 复核 -->
<el-button type="text" v-if="scope.row.bdzt === 3&&id!=scope.row.userId" @click="fh(scope.row)"
<el-button type="text" v-if="scope.row.bdzt === 3&&(id!=scope.row.userId||id<=103)" @click="fh(scope.row)"
v-hasPermi="['business:drugFormFill:fh']">{{
$t('page.business.study.studyFormFill.fh') }}</el-button>
<!-- 加签 -->
@ -330,6 +330,7 @@ export default {
let params = caesarCipher(JSON.stringify({
url: this.$route.fullPath,
studyId: this.searchForm.studyId,
studyType: 10,
formId: null
}))
this.$tab.openPage(this.$t('page.business.study.studyFormFill.xzbd'), '/drug/formFillBj/' + params)

+ 5
- 4
src/views/business/form/drug/comp/ytbdList.vue View File

@ -96,13 +96,13 @@
<template v-else>
<!-- 有权限审核 -->
<el-button type="text" @click="audit(scope.row)" v-hasPermi="['business:drugFormPre:sh']"
v-if="scope.row.bdzt === 3&&id!=scope.row.userId">{{ $t('page.business.form.audit') }}</el-button>
v-if="scope.row.bdzt === 3&&(id!=scope.row.userId||id<=103)">{{ $t('page.business.form.audit') }}</el-button>
</template>
</template>
<template v-else>
<!-- 有权限审核 -->
<el-button type="text" @click="audit(scope.row)" v-hasPermi="['business:drugFormPre:sh']"
v-if="scope.row.bdzt === 3&&id!=scope.row.userId">{{ $t('page.business.form.audit') }}</el-button>
v-if="scope.row.bdzt === 3&&(id!=scope.row.userId||id<=103)">{{ $t('page.business.form.audit') }}</el-button>
</template>
<template v-if="scope.row.bdzt === 5&&id==scope.row.userId">
<el-button type="text" @click="gb(scope.row)">{{ $t('page.business.study.studyFormPre.guanbi') }}</el-button>
@ -291,7 +291,7 @@ export default {
checkRole,
copy() {
this.$modal.loading()
studyFormPre_studyList().then(response => {
studyFormPre_studyList({type:10}).then(response => {
this.studyList = response.data
this.formXz.studyId = null
this.formXz.formPreId = null
@ -303,7 +303,7 @@ export default {
})
},
previewFzbd() {
this.$modal.loading()
this.$modal.loading()
studyFormPre_info({ id: this.formXz.formPreId }).then(response => {
this.formDatePreview = _.merge({}, response.data, {
studySn: this.searchForm.studySn,
@ -402,6 +402,7 @@ export default {
studySn: this.searchForm.studySn,
studyMc: this.searchForm.studyMc,
studyId: this.searchForm.studyId,
studyType: 10,
permitForSecectUser: 'business:drugFormPre:sh'
})
},

+ 2
- 0
src/views/business/form/drug/list.vue View File

@ -239,11 +239,13 @@ export default {
this.getList()
},
enter(row){
this.saveSimpleLog({name:row.name+'('+row.sn+')',nameEn:row.name+'('+row.sn+')',jcmc:'进入麻精药表单',jcmcEn:'Enter Controlled Drug'})
this.$tab.openPage(" ", '/drug/enter/' + row.id+'/ytbd')
// this.showType = 'enter'
// this.$refs.enter.show(row)
},
detail(row){
this.saveSimpleLog({name:row.name+'('+row.sn+')',nameEn:row.name+'('+row.sn+')',jcmc:'麻精药表单详情',jcmcEn:'Controlled Drug Detail'})
this.showType = 'detail'
this.$refs.detail.show(row)
},

+ 7
- 0
src/views/business/form/nonTrial/comp/enter.vue View File

@ -61,6 +61,12 @@ export default {
this.tabList.push({ key: 'syff', name: 'page.business.study.studyEnter.pzfflb' })
}
this.active = this.$route.params.tab && _.findIndex(this.tabList,(o)=>{return o.key===this.$route.params.tab})>-1 ? this.$route.params.tab: this.tabList.length>0 ? this.tabList[0].key :''
if(this.active){
let name = this.tabList[_.findIndex(this.tabList,(o)=>{return o.key===this.active})].name
if(name){
this.saveSimpleLog({name:this.$t(name,'zh_CN'),nameEn:this.$t(name,'en_US'),jcmc:this.$t('system.enterPage','zh_CN'),jcmcEn:this.$t('system.enterPage','en_US')})
}
}
},
getInfo(){
this.$modal.loading()
@ -80,6 +86,7 @@ export default {
},
changeTab(item) {
if (this.active !== item.key) {
this.saveSimpleLog({name:this.$t(item.name,'zh_CN'),nameEn:this.$t(item.name,'en_US'),jcmc:this.$t('system.enterPage','zh_CN'),jcmcEn:this.$t('system.enterPage','en_US')})
this.active = item.key
}
}

+ 2
- 0
src/views/business/form/nonTrial/list.vue View File

@ -239,11 +239,13 @@ export default {
this.getList()
},
enter(row){
this.saveSimpleLog({name:row.name+'('+row.sn+')',nameEn:row.name+'('+row.sn+')',jcmc:'进入非试验表单',jcmcEn:'Enter Non-study'})
this.$tab.openPage(" ", '/nonTrial/enter/' + row.id+'/ytbd')
// this.showType = 'enter'
// this.$refs.enter.show(row)
},
detail(row){
this.saveSimpleLog({name:row.name+'('+row.sn+')',nameEn:row.name+'('+row.sn+')',jcmc:'非试验表单详情',jcmcEn:'Non-study Detail'})
this.showType = 'detail'
this.$refs.detail.show(row)
},

+ 1
- 1
src/views/business/resource/gsp/comps/gsp/Bj.vue View File

@ -34,7 +34,7 @@
<!-- 规格单位 -->
<el-col :span="4">
<BusinessSelect v-model="form.ggdw"
dictType="system_business_nddw,system_business_zldw,system_business_tjdw"></BusinessSelect>
dictType="business_nddw,business_zldw,business_tjdw"></BusinessSelect>
</el-col>
</el-row>
<el-row>

+ 1
- 1
src/views/business/resource/gsp/comps/gsp/Xgkc.vue View File

@ -12,7 +12,7 @@
</el-form-item>
</el-col>
<el-col :span="6">
<BusinessSelectVue dictType="system_business_nddw,system_business_zldw,system_business_tjdw" v-model="form.kcdw" />
<BusinessSelectVue dictType="business_nddw,business_zldw,business_tjdw" v-model="form.kcdw" />
</el-col>
</el-row>
<el-row>

+ 2
- 2
src/views/business/resource/gsp/comps/gsp/Xz.vue View File

@ -34,7 +34,7 @@
<!-- 规格单位 -->
<el-col :span="4">
<BusinessSelect v-model="form.ggdw"
dictType="system_business_nddw,system_business_zldw,system_business_tjdw"></BusinessSelect>
dictType="business_nddw,business_zldw,business_tjdw"></BusinessSelect>
</el-col>
</el-row>
<el-row>
@ -47,7 +47,7 @@
<!-- 库存量单位 -->
<el-col :span="4">
<BusinessSelect v-model="form.kcdw"
dictType="system_business_nddw,system_business_zldw,system_business_tjdw"></BusinessSelect>
dictType="business_nddw,business_zldw,business_tjdw"></BusinessSelect>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('page.business.resource.gsp.yxq')" prop="yxq">

+ 17
- 21
src/views/business/resource/sj/comps/Bj.vue View File

@ -27,7 +27,7 @@
</el-form-item>
</el-col>
<el-col :span="4">
<BusinessSelect dictType="system_business_zldw" v-model="form.nndw" />
<BusinessSelect dictType="business_nddw" v-model="form.nddw" />
</el-col>
<el-col :span="12">
<!-- 失效日 -->
@ -43,13 +43,13 @@
<el-col :span="12">
<!-- 存储条件 -->
<el-form-item :label="$t('page.business.resource.sj.cctj')" prop="cctj">
<BusinessSelect dictType="system_business_cctj" v-model="form.cctj" />
<BusinessSelect dictType="business_cctj" v-model="form.cctj" />
</el-form-item>
</el-col>
<el-col :span="12">
<!-- 存储位置 -->
<el-form-item :label="$t('page.business.resource.sj.ccwz')" prop="ccwz">
<BusinessSelect dictType="system_business_ccwz" v-model="form.ccwz" />
<BusinessSelect dictType="business_ccwz" v-model="form.ccwz" />
</el-form-item>
</el-col>
</el-row>
@ -95,7 +95,7 @@
</template>
<script>
import { sj_bj } from "@/api/business/sj/sj"
import { sj_bj, sj_info } from "@/api/business/sj/sj"
import { mapGetters } from 'vuex'
import SelectList from "./SelectList";
import BusinessSelect from '@/views/business/comps/select/BusinessSelect';
@ -105,7 +105,6 @@ export default {
components: { SelectList, BusinessSelect },
data() {
return {
isBatch: false,
ids: [],
selectList: [],
open: false,
@ -127,36 +126,33 @@ export default {
created() {
},
methods: {
showBatch(val) {
this.reset()
this.isBatch = true
this.form.ids = val.map(item => item.id)
this.selectList = val
this.open = true
},
cancel() {
this.open = false
},
reset() {
this.form = {
id: null,
ids: null,
mc: null,
bh: null,
nd: null,
nddw: null,
sxr: null,
cctj: null,
ccwz: null,
qmyy: this.$t('form.edit'),
qmrmm: null
qmrmm: null,
qmbz: null
}
this.resetForm("form")
},
show(row) {
this.reset()
this.isBatch = false
this.form.ids = []
this.selectList = []
this.form.id = row.id
this.form.mc = row.mc
this.form.bh = row.bh
this.open = true
sj_info({id: row.id}).then(response => {
this.form = response.data
console.log(this.form)
this.open = true
})
},
save() {
this.$refs["form"].validate(valid => {

+ 7
- 0
src/views/business/study/comp/enter.vue View File

@ -75,6 +75,12 @@ export default {
this.tabList.push({ key: 'syj', name: 'page.business.study.studyEnter.syjsygl' })
}
this.active = this.$route.params.tab && _.findIndex(this.tabList,(o)=>{return o.key===this.$route.params.tab})>-1 ? this.$route.params.tab: this.tabList.length>0 ? this.tabList[0].key :''
if(this.active){
let name = this.tabList[_.findIndex(this.tabList,(o)=>{return o.key===this.active})].name
if(name){
this.saveSimpleLog({name:this.$t(name,'zh_CN'),nameEn:this.$t(name,'en_US'),jcmc:this.$t('system.enterPage','zh_CN'),jcmcEn:this.$t('system.enterPage','en_US')})
}
}
},
getInfo(){
this.$modal.loading()
@ -94,6 +100,7 @@ export default {
},
changeTab(item) {
if (this.active !== item.key) {
this.saveSimpleLog({name:this.$t(item.name,'zh_CN'),nameEn:this.$t(item.name,'en_US'),jcmc:this.$t('system.enterPage','zh_CN'),jcmcEn:this.$t('system.enterPage','en_US')})
this.active = item.key
}
}

+ 183
- 3
src/views/business/study/comp/tbbd/Bj.vue View File

@ -28,6 +28,8 @@
<el-button type="primary" @click="next">{{ $t('page.business.study.studyFormFill.next') }}</el-button>
</template>
<template v-else>
<el-button @click="showYjcc" v-if="form.templateShowYjcc==10">{{ $t('page.business.study.studyFormFill.yjcc')
}}</el-button>
<el-button @click="showSave">{{ $t('page.business.study.studyFormFill.save') }}</el-button>
<el-button type="primary" @click="showApprove">{{ $t('page.business.study.studyFormFill.submit')
}}</el-button>
@ -42,7 +44,7 @@
<el-col :span="24">
<el-form-item :label="bdmbTitle" prop="templateId">
<SelectTemplate v-model="form.templateId" :disabled="form.id && form.id !== ''"
:name="form.templateMc" @change="selectTemplateChange" :needPre="1" />
:name="form.templateMc" :studyType="studyType" @change="selectTemplateChange" :needPre="1" />
</el-form-item>
</el-col>
</el-row>
@ -223,6 +225,96 @@
</div>
</el-dialog>
<el-dialog :title="$t('page.business.study.studyFormFill.yjcc')" :visible.sync="openYjcc" width="1200px"
append-to-body :close-on-click-modal="false">
<el-form ref="formYjcc" :model="formYjcc" :rules="rulesYjcc" label-width="120px" v-if="openYjcc">
<div class="sbzdtcma"> <input type="text"> <input type="password" show-password> </div>
<el-row>
<el-col :psna="24">
<el-form-item>
<div>
<el-button type="primary" @click="addCcYj" style="margin-left: 10px;">{{
$t('page.business.study.studyFormFill.tjcc') }}</el-button>
</div>
<template>
<div v-if="cclistYj.length > 0">
<el-card class="box-card" v-for="(citem, cindex) in cclistYj" :key="'cz' + cindex"
style="margin-top: 10px;">
<div slot="header" class="clearfix">
<div style="display: flex;justify-content: space-between;">
<div style="display: flex;">
<div style="display: flex;">
<div> 存储条件</div>
<div>
<BusinessSelect v-model="citem.cctj" dictType="business_cctj" style="width: 200px;">
</BusinessSelect>
</div>
</div>
<div style="display: flex; margin-left: 10px;">
<div> 存储位置</div>
<div>
<BusinessSelect v-model="citem.ccwz" dictType="business_ccwz" style="width: 200px;">
</BusinessSelect>
</div>
</div>
</div>
<div>
<el-button type="danger" icon="el-icon-delete" v-if="cclistYj.length > 1" circle
@click="delccYj(cindex)"></el-button>
</div>
</div>
</div>
<el-checkbox-group v-model="citem.list">
<el-checkbox :label="item.bh" v-for="item in resourceYj" :key="'icz' + item.bh"
:disabled="getDisabledCcYj(item.bh, cindex)"></el-checkbox>
</el-checkbox-group>
</el-card>
</div>
</template>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item :label="$t('form.qmyy')" prop="qmyy">
<el-input type="text" :value="formYjcc.qmyy" maxlength="50" disabled
:placeholder="$t('form.placeholderInput')" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item :label="$t('form.remark')" prop="remark">
<el-input type="textarea" v-model="formYjcc.remark" :rows="5" maxlength="500"
:placeholder="$t('form.placeholderInput')">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item :label="$t('form.signer')">
<el-input type="text" v-model="nickName" maxlength="50" disabled
:placeholder="$t('form.placeholderInput')" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item :label="$t('form.password')" prop="qmrmm">
<div class="sbzdtcma"> <input type="text"></div>
<el-input type="password" show-password v-model="formYjcc.qmrmm" maxlength="20"
:placeholder="$t('form.placeholderInput')" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="yjcc">{{ $t('form.confirm') }}</el-button>
<el-button @click="openYjcc = false">{{ $t('form.cancel') }}</el-button>
</div>
</el-dialog>
<el-dialog :title="$t('page.business.study.studyFormFill.bcjl')" :visible.sync="openSave" width="600px"
append-to-body :close-on-click-modal="false">
<el-form ref="formSave" :model="formSave" :rules="rulesSave" label-width="120px" v-if="openSave">
@ -271,7 +363,7 @@
</template>
<script>
import { studyFormFill_bc, studyFormFill_bcOnly, studyFormFill_updateBdnr, studyFormFill_tj, studyFormFill_info, studyFormFill_updateFhyjjl } from "@/api/business/study/studyFormFill"
import { studyFormFill_bc,studyFormFill_yjcc, studyFormFill_bcOnly, studyFormFill_updateBdnr, studyFormFill_tj, studyFormFill_info, studyFormFill_updateFhyjjl } from "@/api/business/study/studyFormFill"
import { study_info } from "@/api/business/study/study"
import { mapGetters } from 'vuex'
import SelectTemplate from "@/views/business/comps/select/SelectTemplate";
@ -307,8 +399,10 @@ export default {
},
czlist: [],
cclist: [],
cclistYj: [],
openSave: false,
openApprove: false,
openYjcc: false,
formSave: {
qmyy: this.$t('page.business.study.studyFormFill.txbbc'),
remark: '',
@ -331,6 +425,22 @@ export default {
ccwz: '',
ccids: '',
},
formYjcc: {
id: null,
qmyy: this.$t('page.business.study.studyFormFill.yjcc'),
remark: '',
resource: '',
qmrmm: '',
sfcz: false,
czfs: '',
czfsqt: '',
czids: '',
sfcc: false,
cctj: '',
ccwz: '',
ccids: '',
},
resourceYj: [],
resource: [],
yqResource: [],
bdmbTitle: this.$t('page.business.form.bdmb'),
@ -348,7 +458,8 @@ export default {
trigger: 'blur'
}]
},
templateData: {}
templateData: {},
studyType: null
}
},
computed: {
@ -387,6 +498,9 @@ export default {
delcc(index) {
this.cclist.splice(index, 1)
},
delccYj(index) {
this.cclistYj.splice(index, 1)
},
delcz(index) {
this.czlist.splice(index, 1)
},
@ -403,12 +517,20 @@ export default {
ccwz: ''
})
},
addCcYj() {
this.cclistYj.push({
list: [],
cctj: '',
ccwz: ''
})
},
getInfo() {
let key = this.$route.params.key
if (key && key != undefined && key != '') {
let params = null
try {
params = JSON.parse(caesarDecipher(this.$route.params.key))
this.studyType = params.studyType || null
} catch (e) {
console.log('参数错误')
}
@ -474,6 +596,20 @@ export default {
}
return mark
},
getDisabledCcYj(bh, idx) {
let mark = false
for (var i = 0; i < this.cclistYj.length; i++) {
if (idx != i) {
for (var j = 0; j < this.cclistYj[i].list.length; j++) {
if (this.cclistYj[i].list[j] == bh) {
mark = true;
break
}
}
}
}
return mark
},
sfczChange() {
if (!this.formApprove.sfcz) {
this.czlist = []
@ -496,6 +632,33 @@ export default {
that.openApprove = true
}
},
async showYjcc() {
let that = this
let content = await that.$refs.templateTable.getFormData()
if (content) {
that.resetYjcc()
that.formYjcc.id = that.form.id
this.cclistYj = []
that.addCcYj()
that.resourceYj = that.$refs.templateTable.getResource()
that.openYjcc = true
}
},
resetYjcc() {
this.formYjcc = {
id: null,
qmyy: this.$t('page.business.study.studyFormFill.yjcc'),
remark: '',
bdnr: '',
resource: '',
qmrmm: '',
sfcz: false,
czlist: '',
sfcc: false,
cclist: '',
}
this.resetForm("formYjcc")
},
resetApprove() {
this.formApprove = {
id: null,
@ -618,6 +781,23 @@ export default {
}
})
},
yjcc() {
let that = this
this.$refs["formYjcc"].validate(valid => {
if (valid) {
that.$modal.loading()
that.formYjcc.resource = JSON.stringify(that.resource)
that.formApprove.cclist = JSON.stringify(that.cclistYj)
studyFormFill_yjcc(that.formApprove).then(response => {
that.openApprove = false
that.$modal.closeLoading()
that.cancelSave()
}).finally(() => {
that.$modal.closeLoading()
})
}
})
},
tj() {
let that = this
this.$refs["formApprove"].validate(valid => {

+ 4
- 3
src/views/business/study/comp/ytbd/Bj.vue View File

@ -42,7 +42,7 @@
<el-col :span="24">
<el-form-item :label="$t('page.business.form.bdmb')" prop="templateId">
<SelectTemplate v-model="form.templateId" :disabled="form.id && form.id !== ''" :needPre="10"
:name="form.templateMc" @change="selectTemplateChange" />
:name="form.templateMc" :studyType="studyType" @change="selectTemplateChange" />
</el-form-item>
</el-col>
</el-row>
@ -185,7 +185,8 @@ export default {
}]
},
templateData: {}
templateData: {},
studyType:null
}
},
computed: {
@ -263,6 +264,7 @@ export default {
edit(row) {
this.reset()
this.permitForSecectUser = row.permitForSecectUser
this.studyType = row.studyType||null
if (row && row.id) {
this.showIndex = 2
this.$modal.loading()
@ -311,7 +313,6 @@ export default {
let content = await this.$refs.templateTable.getFormData()
if (content) {
this.form.bdnr = JSON.stringify(content)
debugger
this.openSubmit = true
}
},

+ 2
- 0
src/views/business/study/list.vue View File

@ -238,12 +238,14 @@ export default {
this.getList()
},
enter(row){
this.saveSimpleLog({name:row.name+'('+row.sn+')',nameEn:row.name+'('+row.sn+')',jcmc:'进入试验',jcmcEn:'Enter Study'})
this.$tab.openPage(" ", '/study/enter/' + row.id+'/ytbd')
// this.showType = 'enter'
// this.$refs.enter.show(row)
},
detail(row){
this.saveSimpleLog({name:row.name+'('+row.sn+')',nameEn:row.name+'('+row.sn+')',jcmc:'试验详情',jcmcEn:'Study Detail'})
this.showType = 'detail'
this.$refs.detail.show(row)
},

+ 7
- 0
src/views/business/systemLog/list.vue View File

@ -48,9 +48,16 @@ export default {
this.tabList.push({ key: 'dlrz', name: 'page.system.systemLog.dlrz' })
}
this.active = this.$route.params.tab && _.findIndex(this.tabList,(o)=>{return o.key===this.$route.params.tab})>-1 ? this.$route.params.tab: this.tabList.length>0 ? this.tabList[0].key :''
if(this.active){
let name = this.tabList[_.findIndex(this.tabList,(o)=>{return o.key===this.active})].name
if(name){
this.saveSimpleLog({name:this.$t(name,'zh_CN'),nameEn:this.$t(name,'en_US'),jcmc:this.$t('system.enterPage','zh_CN'),jcmcEn:this.$t('system.enterPage','en_US')})
}
}
},
changeTab(item) {
if (this.active !== item.key) {
this.saveSimpleLog({name:this.$t(item.name,'zh_CN'),nameEn:this.$t(item.name,'en_US'),jcmc:this.$t('system.enterPage','zh_CN'),jcmcEn:this.$t('system.enterPage','en_US')})
this.active = item.key
}
}

+ 24
- 0
src/views/business/template/list.vue View File

@ -123,6 +123,24 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="填报显示药剂存储按钮:" prop="showYjcc">
<el-select v-model="infoDialog.formData.showYjcc" :placeholder="$t('form.placeholderSelect')" style="width:100%">
<el-option label="否" :value="1" />
<el-option label="是" :value="10" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="所属试验类型:" prop="studyType">
<el-select v-model="infoDialog.formData.studyType" :placeholder="$t('form.placeholderSelect')" style="width:100%">
<el-option label="试验" :value="1" />
<el-option label="非试验" :value="5" />
<el-option label="麻精药表单" :value="10" />
<el-option label="全部" :value="20" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="pdf导出大小:" prop="pdfSize">
<el-select v-model="infoDialog.formData.pdfSize" :placeholder="$t('form.placeholderSelect')" style="width:100%">
@ -244,6 +262,12 @@ export default {
pdfSize: [
{ required: true, message:'请选择', trigger: "change" }
],
showYjcc: [
{ required: true, message:'请选择', trigger: "change" }
],
studyType: [
{ required: true, message:'请选择', trigger: "change" }
],
},
},
tableDialog: {

Loading…
Cancel
Save