Browse Source

feat: [表单管理] [麻精药表单] 麻将要表单列表

master
memorylkf 6 days ago
parent
commit
7455a799c0
26 changed files with 3358 additions and 7 deletions
  1. +84
    -0
      src/api/business/form/drug.js
  2. +4
    -1
      src/lang/en.js
  3. +72
    -0
      src/lang/en/business/study/drug.js
  4. +4
    -1
      src/lang/zh.js
  5. +73
    -0
      src/lang/zh/business/study/drug.js
  6. +152
    -0
      src/views/business/form/drug/comp/detail.vue
  7. +179
    -0
      src/views/business/form/drug/comp/edit.vue
  8. +103
    -0
      src/views/business/form/drug/comp/enter.vue
  9. +119
    -0
      src/views/business/form/drug/comp/sign.vue
  10. +69
    -0
      src/views/business/form/drug/comp/sqbd.vue
  11. +251
    -0
      src/views/business/form/drug/comp/sqbd/Bj.vue
  12. +269
    -0
      src/views/business/form/drug/comp/sqbd/Fh.vue
  13. +115
    -0
      src/views/business/form/drug/comp/sqbd/Fz.vue
  14. +126
    -0
      src/views/business/form/drug/comp/sqbd/Ghgsr.vue
  15. +126
    -0
      src/views/business/form/drug/comp/sqbd/Jq.vue
  16. +126
    -0
      src/views/business/form/drug/comp/sqbd/Qrfz.vue
  17. +216
    -0
      src/views/business/form/drug/comp/sqbd/Sy.vue
  18. +261
    -0
      src/views/business/form/drug/comp/sqbd/Xq.vue
  19. +363
    -0
      src/views/business/form/drug/comp/sqbdList.vue
  20. +66
    -0
      src/views/business/form/drug/comp/syff.vue
  21. +72
    -0
      src/views/business/form/drug/comp/tbbd.vue
  22. +40
    -0
      src/views/business/form/drug/comp/wzlb.vue
  23. +72
    -0
      src/views/business/form/drug/comp/ytbd.vue
  24. +391
    -0
      src/views/business/form/drug/list.vue
  25. +1
    -1
      src/views/business/form/nonTrial/comp/sign.vue
  26. +4
    -4
      src/views/business/study/comp/enter.vue

+ 84
- 0
src/api/business/form/drug.js View File

@ -0,0 +1,84 @@
import request from '@/utils/request'
export function drug_list(query) {
return request({
url: '/system/business/drug/list',
method: 'get',
params: query
})
}
export function drug_info(query) {
return request({
url: '/system/business/drug/info',
method: 'get',
params: query
})
}
export function drug_save(data) {
return request({
url: '/system/business/drug/save',
method: 'post',
data: data
})
}
export function drug_delete(data) {
return request({
url: '/system/business/drug/delete',
method: 'post',
data: data
})
}
export function drug_jcgjList(query) {
return request({
url: '/system/business/drug/jcgjList',
method: 'get',
params: query
})
}
export function drug_gd(data) {
return request({
url: '/system/business/drug/gd',
method: 'post',
data: data
})
}
export function drug_checkSd(data) {
return request({
url: '/system/business/drug/checkSd',
method: 'post',
data: data
})
}
export function drug_sd(data) {
return request({
url: '/system/business/drug/sd',
method: 'post',
data: data
})
}
export function drug_js(data) {
return request({
url: '/system/business/drug/js',
method: 'post',
data: data
})
}
export function drug_jd(data) {
return request({
url: '/system/business/drug/jd',
method: 'post',
data: data
})
}
export function drug_jy(data) {
return request({
url: '/system/business/drug/jy',
method: 'post',
data: data
})
}

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

@ -17,6 +17,8 @@ import study from './en/business/study/study'
import studyEnter from './en/business/study/studyEnter'
//非试验表单
import nonTrial from './en/business/study/nonTrial'
//麻精药表单
import drug from './en/business/study/drug'
//预填表单
import studyFormPre from './en/business/study/studyFormPre'
//填报表单
@ -143,7 +145,8 @@ export default {
studyFormPlan: studyFormPlan,
studyFormApply: studyFormApply,
nonTrial: nonTrial
nonTrial: nonTrial,
drug: drug
},
form: form
}

+ 72
- 0
src/lang/en/business/study/drug.js View File

@ -0,0 +1,72 @@
export default {
name: 'Name',
sn: 'ID',
dateRange: 'Date Range',
status: 'Status',
startDate: 'Start Date',
endDate: 'End Date',
leader: 'Director',
dept: 'Department',
add: 'Create',
sort: 'Num',
borrowStatus: 'Check-out Status',
formCount: 'Records',
formFinishCount: 'Completed Records',
createDate: 'Creation Date',
remark: 'Description',
statusCg: 'Draft',
statusSyz: 'On-going',
statusYsd: 'Locked',
statusDgd: 'Pending Archiving',
statusGd: 'Archived',
statusDjd: 'Pending De-archiving',
borrowStatusWjy: 'Not Checked-out',
borrowStatusJyz: 'Checked-out',
borrowStatusDjy: 'Pending Check-out',
edit: 'Edit',
enter: 'Enter',
delete: 'Remove',
detail: 'Detail',
gd: 'Archive',
jy: 'Check out',
jd: 'De-archive',
js: 'Unlock',
create: 'Create',
inputName: 'Input Name',
inputSn: 'Input ID',
inputLeader: 'Select Director',
cancel: 'Cancel',
save: 'Save',
submit: 'Submit',
jbxx: 'Information',
bdsl: 'Total Records',
syfzr: 'Director',
jcgj: 'Track Record',
rybg: 'Change of Person',
xgsy: 'Change of Information',
sdsy: 'Lock Record',
jssy: 'Unlock Record',
sqjy: 'Apply for Check-out',
sqgd: 'Apply for Archiving',
sqjd: 'Apply for De-archiving',
jjjd: 'Reject De-archiving',
tyjd: 'Approve De-archiving',
jjgd: 'Reject Archiving',
tygd: 'Approve Archiving',
dqzdgh: 'Check-out End on Time',
qrgh: 'Check-out End Confirmation',
qb: 'All',
lc: 'Milestone',
bj: 'Change',
ry: 'User',
scsy: 'Remove',
jysj: 'Checkout Period'
}

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

@ -17,6 +17,8 @@ import study from './zh/business/study/study'
import studyEnter from './zh/business/study/studyEnter'
//非试验表单
import nonTrial from './zh/business/study/nonTrial'
//麻精药表单
import drug from './zh/business/study/drug'
//预填表单
import studyFormPre from './zh/business/study/studyFormPre'
//填报表单
@ -139,7 +141,8 @@ export default {
studyFormPlan: studyFormPlan,
studyFormApply: studyFormApply,
nonTrial: nonTrial
nonTrial: nonTrial,
drug: drug
},
form: form
}

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

@ -0,0 +1,73 @@
export default {
name: '名称',
sn: '编号',
dateRange: '时间范围',
status: '状态',
startDate: '开始时间',
endDate: '结束时间',
leader: '负责人',
dept: '所属部门/学科',
add: '新增',
sort: '序号',
borrowStatus: '借阅状态',
formCount: '表单数',
formFinishCount: '完成表单数',
createDate: '创建时间',
remark: '简述',
statusCg: '草稿',
statusSyz: '试验中',
statusYsd: '已锁定',
statusDgd: '待归档',
statusGd: '归档',
statusDjd: '待解档',
borrowStatusWjy: '未借阅',
borrowStatusJyz: '借阅中',
borrowStatusDjy: '待借阅',
edit: '编辑',
enter: '进入',
delete: '删除',
detail: '详情',
gd: '归档',
jy: '借阅',
jd: '解档',
js: '解锁',
create: '创建',
inputName: '请输入名称',
inputSn: '请输入编号',
inputLeader: '请选择负责人',
cancel: '取消',
save: '保存',
submit: '提交',
jbxx: '基本信息',
bdsl: '表单数量',
syfzr: '负责人',
jcgj: '稽查轨迹',
rybg: '人员变更',
xgsy: '修改麻精药文件夹',
sdsy: '锁定麻精药文件夹',
jssy: '解锁麻精药文件夹',
sqjy: '申请借阅',
sqgd: '申请归档',
sqjd: '申请解档',
jjjd: '拒绝解档',
tyjd: '同意解档',
jjgd: '拒绝归档',
tygd: '同意归档',
dqzdgh: '到期自动归还',
qrgh: '确认归还',
qb: '全部',
lc: '流程',
bj: '编辑',
ry: '人员',
xg: '修改',
scsy: '删除麻精药文件夹',
jysj: '借阅时间'
}

+ 152
- 0
src/views/business/form/drug/comp/detail.vue View File

@ -0,0 +1,152 @@
G<template>
<!-- 详情 -->
<div v-show="open">
<div class="detail-container">
<div class="detail-top">
<div class="left-top">
<img src="@/assets/images/back.png" @click="cancel()" />
<div class="left-title"></div>
</div>
<div class="right-top">
{{$t('page.business.study.drug.detail')}}
</div>
</div>
<!-- <div class="detail-title"><img src="@/assets/images/detail-title.png" >{{ $t('page.business.study.drug.mjyxq') }}<img src="@/assets/images/detail-title.png" /></div> -->
<div class="detail-content">
<div class="content-left">
<div class="content-title">
<div class="line"></div>
<div class="subtitle"> {{ $t('page.business.study.drug.jbxx') }}</div>
</div>
<div class="pal">
<div class="left">
<div class="left-title">{{ $t('page.business.study.drug.name') }}</div>
<el-input type="text" :value="form.name" maxlength="50" disabled />
</div>
<div class="right">
<div class="right-title">{{ $t('page.business.study.drug.sn') }}</div>
<el-input type="text" :value="form.sn" maxlength="50" disabled />
</div>
</div>
<div class="pal">
<div class="left">
<div class="left-title">{{ $t('page.business.study.drug.bdsl') }}</div>
<el-input type="text" :value="form.formCount" maxlength="50" disabled />
</div>
<div class="right">
<div class="right-title">{{ $t('page.business.study.drug.syfzr') }}</div>
<el-input type="text" :value="form.leaderName" maxlength="50" disabled />
</div>
</div>
<div class="pal">
<div class="left">
<div class="left-title">{{ $t('page.business.study.drug.createDate') }}</div>
<el-input type="text" :value="form.createTime" maxlength="50" disabled />
</div>
<div class="right">
<div class="right-title">{{ $t('page.business.study.drug.status') }}</div>
<el-select v-model="form.status" disabled style="width: 100%;">
<el-option :label="$t('page.business.study.drug.statusCg')" :value="1" />
<el-option :label="$t('page.business.study.drug.statusSyz')" :value="3" />
<el-option :label="$t('page.business.study.drug.statusYsd')" :value="5" />
<el-option :label="$t('page.business.study.drug.statusDgd')" :value="7" />
<el-option :label="$t('page.business.study.drug.statusGd')" :value="9" />
<el-option :label="$t('page.business.study.drug.statusDjd')" :value="10" />
</el-select>
</div>
</div>
<div class="pal">
<div class="left">
<div class="left-title">{{ $t('page.business.study.drug.borrowStatus') }}</div>
<el-select v-model="form.borrowStatus" disabled style="width: 100%;">
<el-option :label="$t('page.business.study.drug.borrowStatusWjy')" :value="1" />
<el-option :label="$t('page.business.study.drug.borrowStatusJyz')" :value="5" />
<el-option :label="$t('page.business.study.drug.borrowStatusDjy')" :value="10" />
</el-select>
</div>
</div>
<div class="pal">
<div class="left" style="width:100%;margin-right:0">
<div class="left-title">{{ $t('page.business.study.drug.remark') }}</div>
<el-input type="textarea" :rows="5" v-model="form.remark" maxlength="500" show-word-limit disabled> </el-input>
</div>
</div>
</div>
<div class="content-right">
<div class="content-title">
<div class="line"></div>
<div class="subtitle"> {{ $t('page.business.study.drug.jcgj') }}</div>
</div>
<jcgjList ref="jcgjList" :showRy="true" @handleQuery="jcgjListHandleQuery" />
<pagination
v-show="jcgjTotal>0"
:total="jcgjTotal"
small layout="prev, pager, next"
:page.sync="queryJcgjParams.pageNum"
:limit.sync="queryJcgjParams.pageSize"
@pagination="getJjcgjList"
/>
</div>
</div>
</div>
</div>
</template>
<script>
import { drug_info, drug_jcgjList } from "@/api/business/form/drug"
import JcgjList from "@/views/business/comps/common/JcgjList";
export default {
name: "StudyDetail",
components: { JcgjList },
data() {
return {
form: {},
open: false,
jcgjTotal: 0,
jcgjList: [],
queryJcgjParams: {
pageNum: 1,
studyId: null,
pageSize: 10,
}
}
},
created() {
},
methods: {
jcgjListHandleQuery(val) {
this.queryJcgjParams.pageNum =1
drug_jcgjList(_.merge({}, this.queryJcgjParams, val)).then(response => {
this.jcgjList = response.rows
this.jcgjTotal = response.total
this.$refs.jcgjList.init(this.jcgjList)
})
},
getJjcgjList() {
drug_jcgjList(this.queryJcgjParams).then(response => {
this.jcgjList = response.rows
this.jcgjTotal = response.total
this.$refs.jcgjList.init(this.jcgjList)
}).finally(()=>{
})
},
cancel() {
this.$emit('cancel')
},
show(row) {
this.$modal.loading()
this.queryJcgjParams.studyId = row.id
drug_info({ id: row.id }).then(response => {
this.form = response.data
this.open = true
}).finally(()=>{
this.$modal.closeLoading()
})
this.getJjcgjList()
}
}
}
</script>

+ 179
- 0
src/views/business/form/drug/comp/edit.vue View File

@ -0,0 +1,179 @@
<template>
<div class="content-edit">
<div class="edit-top">
<div class="left-top">
<img src="@/assets/images/back.png" @click="cancel()" />
<div class="left-title">{{$t('page.business.study.drug.create')}}</div>
</div>
<div class="right-top">
<el-button @click="cancel()">{{$t('page.business.study.drug.cancel')}}</el-button>
<el-button type="primary" @click="save(1)" plain v-if="!infoDialog.formData.status || infoDialog.formData.status===1">{{$t('page.business.study.drug.save')}}</el-button>
<el-button type="primary" @click="save(3)">{{$t('page.business.study.drug.submit')}}</el-button>
</div>
</div>
<div class="edit-content">
<el-form ref="infoDialogForm" :model="infoDialog.formData" :rules="infoDialog.rules" label-width="150px" class="edit-form">
<el-row>
<el-col :span="24">
<el-form-item :label="$t('page.business.study.drug.name')+':'" prop="name">
<el-input v-model="infoDialog.formData.name" :placeholder="$t('form.placeholderInput')" maxlength="100" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label="$t('page.business.study.drug.sn')+':'" prop="sn">
<el-input v-model="infoDialog.formData.sn" :placeholder="$t('form.placeholderInput')" maxlength="100" :disabled="this.infoDialog.formData.id!=''" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label="$t('page.business.study.drug.leader')+':'" prop="leader">
<SelectDeptUser @change="changeLeader" v-model="infoDialog.formData.leader" :name="infoDialog.formData.leaderName" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label="$t('page.business.study.drug.remark')+':'" prop="remark">
<el-input type="textarea" :rows="5" :placeholder="$t('form.placeholderInput')" v-model="infoDialog.formData.remark" maxlength="500" show-word-limit> </el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<Sign ref="editSignRef" @callback="doSign" />
</div>
</template>
<script>
import { drug_info,drug_save} from "@/api/business/form/drug";
import SelectDeptUser from '@/views/business/comps/select/SelectDeptUser.vue';
import Sign from './sign.vue'
const EmptyDialogData = {
id:'',
name:'',
sn:'',
leader:'',
leaderName:'',
reamrk:'',
}
export default {
name: "StudyEdit",
props:{
},
components:{
SelectDeptUser,
Sign
},
computed: {
},
filters:{
},
data() {
return {
infoDialog:{
visible:false,
formData:{},
rules:{
name: [
{ required: true, message: this.$t('page.business.study.drug.inputName'), trigger: "blur" }
],
sn: [
{ required: true, message: this.$t('page.business.study.drug.inputSn'), trigger: "blur" }
],
leader: [
{ required: true, message: this.$t('page.business.study.drug.inputLeader'), trigger: "change" }
],
}
},
};
},
created() {
},
methods: {
changeLeader(val){
this.infoDialog.formData.leader = val.id
this.infoDialog.formData.leaderName = val.name
this.$refs.infoDialogForm.clearValidate('leader')
},
edit(row) {
this.$refs['infoDialogForm'] && this.$refs['infoDialogForm'].resetFields()
this.infoDialog.formData = _.merge({}, EmptyDialogData,{leader:this.$store.getters.id,leaderName:this.$store.getters.nickName})
if(row && row.id){
this.$modal.loading()
drug_info({id:row.id}).then(({data}) => {
this.infoDialog.formData = data
}).finally(() => {
this.$modal.closeLoading()
})
}else{
}
},
cancel(){
this.$emit('cancel')
},
save(status) {
this.$refs['infoDialogForm'].validate(valid => {
if (valid) {
this.infoDialog.formData.status = status
if(status === 3){
this.$refs.editSignRef.show(this.$t('page.business.study.drug.submit'),this.$t('page.business.study.drug.create'))
}else{
this.doSave({})
}
}
})
},
doSign(val){
this.doSave(val)
},
doSave(sign) {
this.$modal.loading()
drug_save({
study:this.infoDialog.formData,
sign:sign
}).then(() => {
this.$emit('save')
this.$refs.editSignRef.cancel()
}).finally(() => {
this.$modal.closeLoading()
})
},
}
};
</script>
<style lang="scss">
.content-edit{
background: #f5f5f5;
padding: 0;
.edit-top{
background: #fff;
padding: 10px 20px;
margin-bottom: 10px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
.left-top{
flex-shrink: 0;
display: flex;
flex-direction: row;
align-items: center;
img{
height: 16px;
margin-right: 20px;
cursor: pointer;
}
.right-top{
}
}
}
.edit-content{
background: #fff;
padding: 20px;
min-height: 500px;
.edit-form{
width: 800px;
margin: 0 auto;
}
}
}
</style>

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

@ -0,0 +1,103 @@
<template>
<div class="study-enter">
<div class="content-list">
<div class="search-box" v-show="!showDetail">
<div class="search-item" :class="active === item.key ? 'active' : ''" v-for="(item, index) in tabList"
:key="index" @click="changeTab(item)">
{{ item.name }}
</div>
</div>
<div class="content-box">
<ytbd v-if="active === 'ytbd'" :study="study" @showDetail="showDetailCallback" />
<tbbd v-if="active === 'tbbd'" :study="study" @showDetail="showDetailCallback"/>
<sqbd v-if="active === 'sqbd'" :study="study" @showDetail="showDetailCallback"/>
<wzlb v-if="active === 'wzlb'" :study="study" @showDetail="showDetailCallback"/>
</div>
</div>
</div>
</template>
<script>
import ytbd from './ytbd.vue'
import tbbd from './tbbd.vue'
import sqbd from './sqbd.vue'
import wzlb from './wzlb.vue'
export default {
name: 'StudyEnter',
props: {},
components: { ytbd, tbbd ,sqbd,wzlb},
computed: {},
filters: {},
data() {
return {
showDetail: false,
tabList: [
{ key: 'ytbd', name: this.$t('page.business.study.studyEnter.ytbdlb') },
{ key: 'tbbd', name: this.$t('page.business.study.studyEnter.tbbdlb') },
{ key: 'sqbd', name: this.$t('page.business.study.studyEnter.sqbdlb') },
{ key: 'wzlb', name: this.$t('page.business.study.studyEnter.wzlb') },
],
active: 'ytbd',
study: {},
}
},
created() { },
methods: {
show(row) {
this.study = row
},
showDetailCallback(val) {
this.showDetail = val
},
changeTab(item) {
if (this.active !== item.key) {
this.active = item.key
}
}
}
}
</script>
<style lang="scss" scoped>
.study-enter {
.search-box {
background: #fff;
padding: 0;
border-radius: 3px;
margin-bottom: 10px;
display: flex;
flex-direction: row;
align-items: center;
.search-item {
padding: 10px 20px;
font-size: 14px;
cursor: pointer;
&.active {
background: #1890ff;
color: #fff;
}
&:hover {
background: #46a6ff;
color: #fff;
}
&:first-child {
border-top-left-radius: 3px;
border-bottom-left-radius: 3px;
}
&:last-child {
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
}
}
}
.content-box {}
}
</style>

+ 119
- 0
src/views/business/form/drug/comp/sign.vue View File

@ -0,0 +1,119 @@
G<template>
<div>
<!-- 签名弹窗 -->
<el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="signForm" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="24" v-if="showDate">
<el-form-item :label="$t('page.business.study.nonTrial.jysj')" prop="startDate">
<el-date-picker v-model="dateArr" clearable type="daterange" range-separator="-" :start-placeholder="$t('form.startDate')"
:end-placeholder="$t('form.endDate')" value-format="yyyy-MM-dd" style="width: 100%" @change="changeDate" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label="$t('form.qmyy')" prop="qmyy">
<el-input type="text" v-model="form.qmyy" maxlength="50" disabled
:placeholder="$t('form.placeholderInput')" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label="$t('form.remark')" prop="remark">
<el-input type="textarea" v-model="form.remark" :rows="2" maxlength="500"
:placeholder="$t('form.placeholderInput')">
</el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label="$t('form.signer')">
<el-input type="text" v-model="form.qmrMc" maxlength="50" disabled
:placeholder="$t('form.placeholderInput')" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label="$t('form.password')" prop="qmrmm">
<el-input type="password" v-model="form.qmrmm" maxlength="20" :placeholder="$t('form.placeholderInput')" autocomplete="off" auto-complete="new-password" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="save">{{ $t('form.confirm') }}</el-button>
<el-button @click="cancel">{{ $t('form.cancel') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
name: "Sign",
components: { },
data() {
return {
title:'',
open: false,
form: {
qmyy:'',
remark:'',
qmrId:'',
qmrMc:'',
qmrmm:'',
startDate:'',
endDate:''
},
dateArr:[],
showDate:false,
rules: {
qmrmm: [{
required: true,
message: ' ',
trigger: 'blur'
}],
startDate: [{
required: true,
message: ' ',
trigger: 'change'
}]
}
}
},
computed: {
},
created() {
},
methods: {
show(title,qmyy,showDate) {
this.showDate = showDate==undefined?false:showDate
this.dateArr = []
this.title = title
this.form = {
qmyy:qmyy,
remark:'',
qmrId:this.$store.getters.id,
qmrMc:this.$store.getters.nickName,
qmrmm:'',
startDate:'',
endDate:''
}
this.resetForm("signForm")
this.open = true
},
cancel() {
this.open = false
},
changeDate(val){
this.form.startDate = val && val.length>0?val[0]:''
this.form.endDate = val && val.length>1?val[1]:''
},
save() {
this.$refs["signForm"].validate(valid => {
if (valid) {
this.$emit('callback',this.form)
}
})
}
}
}
</script>

+ 69
- 0
src/views/business/form/drug/comp/sqbd.vue View File

@ -0,0 +1,69 @@
<template>
<div class="study-tbbd">
<div class="tbbd-right">
<sqbdList :study="studyInfo" @showDetail="showDetailCallback"/>
</div>
</div>
</template>
<script>
import sqbdList from './sqbdList.vue'
export default {
name: 'StudySqbd',
props: {
study:{
type:Object,
default:()=>{
return {}
}
}
},
watch:{
study: {
immediate: true,
handler(v) {
this.studyInfo = {
studyId:v.id,
studyLeader:v.leader,
studySubjectId:''
}
}
},
},
components: {sqbdList},
computed: {},
filters: {},
data() {
return {
studyInfo:{
studyId:this.study.id,
studyLeader:this.study.leader,
studySubjectId:''
}
}
},
created() {},
methods: {
showDetailCallback(val){
this.$emit('showDetail',val)
}
}
}
</script>
<style lang="scss" scoped>
.study-tbbd {
display: flex;
flex-direction: row;
.tbbd-left {
background: #fff;
padding: 20px;
margin-right: 10px;
flex-shrink: 0;
width: 350px;
}
.tbbd-right{
flex-grow: 1;
overflow: hidden;
}
}
</style>

+ 251
- 0
src/views/business/form/drug/comp/sqbd/Bj.vue View File

@ -0,0 +1,251 @@
G<template>
<div>
<div class="edit-container">
<div class="edit-top">
<div class="left-top">
<img src="@/assets/images/back.png" @click="cancel()" />
<div class="left-title"></div>
</div>
<div class="center-top">
<div>
<div :class="showIndex == 1 ? 'el-step__icon is-text is-finish' : 'el-step__icon is-text is-info'">
<div class="el-step__icon-inner">1</div>
</div>
{{ $t('page.business.study.studyFormApply.jcsz') }}
</div>
<div class="line"></div>
<div>
<div :class="showIndex == 2 ? 'el-step__icon is-text is-finish' : 'el-step__icon is-text is-info'">
<div class="el-step__icon-inner">2</div>
</div>
{{ $t('page.business.study.studyFormApply.bdtb') }}
</div>
</div>
<div class="right-top">
<el-button @click="cancel()">{{ $t('form.cancel') }}</el-button>
<template v-if="showIndex == 1">
<el-button @click="save">{{ $t('page.business.study.studyFormApply.zc') }}</el-button>
<el-button type="primary" @click="next">{{ $t('page.business.study.studyFormApply.next') }}</el-button>
</template>
<template v-else>
<el-button @click="saveNext">{{ $t('page.business.study.studyFormApply.save') }}</el-button>
<el-button type="primary" @click="openSubmit = true">{{ $t('page.business.study.studyFormApply.submit')
}}</el-button>
</template>
</div>
</div>
<div class="edit-content">
<div class="content" style="width:60%" v-show="showIndex == 1">
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="24">
<el-form-item :label="$t('page.business.form.bdmb')" prop="templateId">
<SelectTemplate v-model="form.templateId" :name="form.templateMc" @change="selectTemplateChange" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item :label="$t('page.business.form.bdmc')" prop="bdmc">
<el-input type="text" v-model="form.bdmc" maxlength="50" :placeholder="$t('form.placeholderInput')" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item :label="$t('page.business.study.studyFormApply.sfbl')" prop="sfbl">
<el-select v-model="form.sfbl" :placeholder="$t('form.placeholderSelect')" >
<el-option :label="$t('page.business.study.studyFormApply.yes')" :value="10" />
<el-option :label="$t('page.business.study.studyFormApply.no')" :value="1" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item :label="$t('page.business.study.studyFormApply.bdsm')" prop="bdsm">
<el-input type="textarea" v-model="form.bdsm" :rows="5" maxlength="500"
:placeholder="$t('form.placeholderInput')">
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="content" v-show="showIndex == 2">
<TemplateTable ref="templateTable" :sn="form.templateSn" :templateData="form" fillType="preApply" />
</div>
</div>
</div>
<el-dialog :title="$t('page.business.study.studyFormApply.tjjl')" :visible.sync="openSubmit" width="500px"
append-to-body :close-on-click-modal="false">
<el-form ref="formSubmit" :model="form" :rules="rulesApprove" label-width="120px">
todo
</el-form>
<!-- <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="tj">{{ $t('form.confirm') }}</el-button>
<el-button @click="openSubmit = false">{{ $t('form.cancel') }}</el-button>
</div> -->
</el-dialog>
</div>
</template>
<script>
import { studyFormApply_bc, studyFormApply_tj, studyFormApply_info } from "@/api/business/study/studyFormApply"
import { mapGetters } from 'vuex'
import SelectTemplate from "@/views/business/comps/select/SelectTemplate";
import SelectDeptUser from '@/views/business/comps/select/SelectDeptUser';
import TemplateTable from '@/views/business/comps/template/TemplateTable';
export default {
name: "Bj",
components: { SelectTemplate, SelectDeptUser, TemplateTable },
data() {
return {
open: false,
showIndex: 1,
form: {},
openSubmit: false,
rulesApprove: {
qmrmm: [{
required: true,
message: ' ',
trigger: 'blur'
}],
fzrsh: [{
required: true,
message: ' ',
trigger: 'blur'
}],
shryId: [{
required: true,
message: ' ',
trigger: 'blur'
}]
},
rules: {
bdmc: [{
required: true,
message: ' ',
trigger: 'blur'
}],
templateId: [{
required: true,
message: ' ',
trigger: 'blur'
}],
sfbl: [{
required: true,
message: ' ',
trigger: 'blur'
}],
}
}
},
computed: {
...mapGetters([
'nickName'
]),
},
created() {
},
methods: {
next() {
this.$refs["form"].validate(valid => {
if (valid) {
this.showIndex = 2
}
})
},
selectTemplateChange(val) {
this.form.bdnr = val.content
this.form.templateMc = val.name
},
cancel() {
this.$emit('close')
},
reset() {
this.form = {
id: null,
studyId: null,
bdbh: null,
bdmc: null,
bdsm: null,
templateId: null,
templateMc: null,
bdnr: null,
fzrsh: null,
shryId: null,
sfbl: null,
shryMc: null,
}
this.resetForm("form")
},
selectDeptUserChange(val) {
this.form.shryMc = val.name
},
edit(row) {
this.reset()
this.showIndex = 1
if (row && row.id) {
this.$modal.loading()
studyFormApply_info({ id: row.id }).then(response => {
this.form = response.data
this.form.qmyy = '制作提交预制表单'
this.open = true
this.$modal.closeLoading()
})
} else {
this.form = _.merge({}, this.form, row)
this.open = true
}
},
save() {
this.$refs["form"].validate(valid => {
if (valid) {
this.$modal.loading()
studyFormApply_bc(this.form).then(response => {
this.$emit('close')
this.$modal.closeLoading()
}).finally(() => {
this.$modal.closeLoading()
})
}
})
},
async saveNext() {
let content = await this.$refs.templateTable.getFormData()
this.form.bdnr = JSON.stringify(content)
this.$modal.loading()
studyFormApply_bc(this.form).then(response => {
this.$emit('close')
this.$modal.closeLoading()
}).finally(() => {
this.$modal.closeLoading()
})
},
tj() {
this.$refs["formSubmit"].validate(valid => {
if (valid) {
this.dotj()
}
})
},
async dotj() {
let content = await this.$refs.templateTable.getFormData()
this.form.bdnr = JSON.stringify(content)
this.$modal.loading()
studyFormApply_tj(this.form).then(response => {
this.$emit('close')
this.openSubmit = false
this.$modal.closeLoading()
}).finally(() => {
this.$modal.closeLoading()
})
}
}
}
</script>

+ 269
- 0
src/views/business/form/drug/comp/sqbd/Fh.vue View File

@ -0,0 +1,269 @@
G<template>
<div>
<div class="edit-container">
<div class="edit-top">
<div class="left-top">
<img src="@/assets/images/back.png" @click="cancel()" />
<div class="left-title"></div>
</div>
<div class="center-top">
</div>
<div class="right-top">
<el-button @click="cancel()">{{ $t('form.cancel') }}</el-button>
<el-button type="danger" @click="showApprove('复核拒绝')">{{ $t('page.business.study.studyFormApply.fhjj')
}}</el-button>
<el-button type="primary" @click="showApprove('复核通过')">{{ $t('page.business.study.studyFormApply.fhtg')
}}</el-button>
<el-button type="primary" @click="showApprove('通过')">{{ $t('page.business.study.studyFormApply.tongguo')
}}</el-button>
</div>
</div>
<div class="edit-content">
<div class="content-left">
<TemplateTable ref="templateTable" :sn="form.templateSn" :templateData="form" fillType="readonly" />
<div class="content-title">
<div class="line"></div>
<div class="subtitle"> {{ $t('page.business.study.studyFormApply.qmxx') }}</div>
</div>
<div class="pal">
<el-table :data="qmxxList" v-loading="loadingQmxx">
<el-table-column :label="$t('page.business.study.studyFormApply.qmr')" align="center" prop="qmrMc"
width="150px" />
<el-table-column :label="$t('page.business.study.studyFormApply.qmyy')" align="center" prop="qmyy"
width="150px" />
<el-table-column :label="$t('page.business.study.studyFormApply.qmsj')" align="center" prop="createTime"
width="150px" />
<el-table-column :label="$t('page.business.study.studyFormApply.bzyy')" align="center" prop="remark"
:show-overflow-tooltip="true" />
</el-table>
</div>
<div class="pal">
<pagination v-show="totalQmxx > 0" :total="totalQmxx" :page.sync="queryParamsQmxx.pageNum"
:limit.sync="queryParamsQmxx.pageSize" @pagination="getQmxxList" />
</div>
</div>
<div class="content-right">
<div class="content-title">
<div class="line"></div>
<div class="subtitle"> {{ $t('page.business.study.studyFormApply.jcgj') }}</div>
</div>
<JcgjList ref="jcgjList" @handleQuery="getJjcgjList" />
<pagination v-show="jcgjTotal > 0" small layout="prev, pager, next" :total="jcgjTotal"
@pagination="getJjcgjList" />
</div>
</div>
</div>
<el-dialog :title="$t(openTitle)" :visible.sync="openApprove" width="500px" append-to-body
:close-on-click-modal="false">
<el-form ref="formApprove" :model="formApprove" :rules="rulesApprove" label-width="120px">
<el-row>
<el-col :span="24">
<el-form-item :label="$t('form.qmyy')" prop="qmyy">
<el-input type="text" :value="formApprove.qmyy" maxlength="50" disabled
:placeholder="$t('form.placeholderInput')" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formApprove.qmyy == '复核拒绝'">
<el-col :span="24">
<el-form-item :label="$t('page.business.study.studyFormApply.reason')" prop="reason">
<el-input type="textarea" v-model="formApprove.reason" :rows="5" maxlength="500"
:placeholder="$t('form.placeholderInput')">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row v-else>
<el-col :span="24">
<el-form-item :label="$t('form.remark')">
<el-input type="textarea" v-model="formApprove.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">
<el-input type="password" v-model="formApprove.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="approve">{{ $t('form.confirm') }}</el-button>
<el-button @click="openApprove = false">{{ $t('form.cancel') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { studyFormApply_fhtg, studyFormApply_fhjj, studyFormApply_tg, studyFormApply_info, studyFormApply_jcgj, studyFormApply_qmxx } from "@/api/business/study/studyFormApply"
import { mapGetters } from 'vuex'
import JcgjList from "@/views/business/comps/common/JcgjList";
import TemplateTable from '@/views/business/comps/template/TemplateTable';
export default {
name: "Fh",
components: { TemplateTable, JcgjList },
data() {
return {
form: {},
qmxxList: [],
totalQmxx: 0,
loadingQmxx: true,
queryParamsQmxx: {
formId: null,
pageNum: 1,
pageSize: 10
},
jcgjList: [],
jcgjTotal: 0,
queryParamsJcgj: {
pageNum: 1,
formId: null,
pageSize: 10,
},
openTitle: '',
openApprove: false,
formApprove: {},
rulesApprove: {
qmrmm: [{
required: true,
message: ' ',
trigger: 'blur'
}],
reason: [{
required: true,
message: ' ',
trigger: 'blur'
}],
}
}
},
computed: {
...mapGetters([
'nickName'
]),
},
created() {
},
methods: {
getJjcgjList(val) {
this.$modal.loading()
studyFormApply_jcgj(_.merge({}, this.queryParamsJcgj, val)).then(response => {
this.jcgjList = response.rows
this.jcgjTotal = response.total
this.$refs.jcgjList.init(this.jcgjList)
this.$modal.closeLoading()
}).finally(() => {
this.$modal.closeLoading()
})
},
getQmxxList() {
this.loadingQmxx = true
studyFormApply_qmxx(this.queryParamsQmxx).then(response => {
this.qmxxList = response.rows
this.totalQmxx = response.total
this.loadingQmxx = false
})
},
cancel() {
this.$emit('close')
},
reset() {
this.form = {}
this.resetForm("form")
},
show(row) {
this.reset()
this.$modal.loading()
this.queryParamsJcgj.formId = row.id
this.queryParamsQmxx.formId = row.id
studyFormApply_info({ id: row.id }).then(response => {
this.form = response.data
this.getQmxxList()
this.getJjcgjList()
this.$modal.closeLoading()
}).finally(() => {
this.$modal.closeLoading()
})
},
showApprove(qmyy) {
this.openApprove = true
this.resetApprove()
this.formApprove.id = this.form.id
this.formApprove.qmyy = qmyy
if (qmyy == '复核通过') {
this.openTitle = 'page.business.study.studyFormApply.fhtg'
} else if (qmyy == '复核拒绝') {
this.openTitle = 'page.business.study.studyFormApply.fhjj'
} else if (qmyy == '通过') {
this.openTitle = 'page.business.study.studyFormApply.tongguo'
}
},
resetApprove() {
this.formApprove = {
id: null,
qmyy: '',
bdnr: '',
remark: '',
reason: '',
qmrmm: '',
}
this.resetForm("formApprove")
},
approve() {
this.$refs["formApprove"].validate(valid => {
if (valid) {
this.doapprove()
}
})
},
async doapprove() {
let content = await this.$refs.templateTable.getFormData()
this.formApprove.bdnr = JSON.stringify(content)
this.$modal.loading()
if (this.formApprove.qmyy == '复核通过') {
studyFormApply_fhtg(this.formApprove).then(response => {
this.openApprove = false
this.$modal.closeLoading()
this.$emit('close')
}).finally(() => {
this.$modal.closeLoading()
})
} else if (this.formApprove.qmyy == '复核拒绝') {
this.formApprove.remark=this.formApprove.reason
studyFormApply_fhjj(this.formApprove).then(response => {
this.openApprove = false
this.$modal.closeLoading()
this.$emit('close')
}).finally(() => {
this.$modal.closeLoading()
})
} else {
studyFormApply_tg(this.formApprove).then(response => {
this.openApprove = false
this.$modal.closeLoading()
this.$emit('close')
}).finally(() => {
this.$modal.closeLoading()
})
}
}
}
}
</script>

+ 115
- 0
src/views/business/form/drug/comp/sqbd/Fz.vue View File

@ -0,0 +1,115 @@
G<template>
<div>
<el-dialog :title="$t('page.business.study.studyFormApply.sqfz')" :visible.sync="open" width="500px" append-to-body
:close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="24">
<el-form-item :label="$t('form.qmyy')" prop="qmyy">
<el-input type="text" :value="form.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="form.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">
<el-input type="password" v-model="form.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="save">{{ $t('form.confirm') }}</el-button>
<el-button @click="cancel">{{ $t('form.cancel') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { studyFormApply_fz } from "@/api/business/study/studyFormApply"
import { mapGetters } from 'vuex'
export default {
name: "Fz",
components: {},
data() {
return {
isBatch: false,
ids: [],
selectList: [],
open: false,
form: {},
rules: {
qmrmm: [{
required: true,
message: ' ',
trigger: 'blur'
}],
remark: [{
required: true,
message: ' ',
trigger: 'blur'
}],
}
}
},
computed: {
...mapGetters([
'nickName'
]),
},
created() {
},
methods: {
cancel() {
this.open = false
},
reset() {
this.form = {
id: null,
qmyy: '申请废止',
remark: null,
qmrmm: null
}
this.resetForm("form")
},
show(row) {
this.reset()
this.form.id = row.id
this.open = true
},
save() {
this.$refs["form"].validate(valid => {
if (valid) {
studyFormApply_fz(this.form).then(response => {
this.open = false
this.$emit('callback')
}).finally(() => {
this.$modal.closeLoading()
})
}
})
}
}
}
</script>

+ 126
- 0
src/views/business/form/drug/comp/sqbd/Ghgsr.vue View File

@ -0,0 +1,126 @@
G<template>
<div>
<el-dialog :title="$t('page.business.study.studyFormApply.rybg')" :visible.sync="open" width="500px"
append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="24">
<el-form-item :label="$t('form.qmyy')" prop="qmyy">
<el-input type="text" :value="form.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('page.business.study.studyFormApply.reason')" prop="remark">
<el-input type="textarea" v-model="form.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">
<el-input type="password" v-model="form.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="save">{{ $t('form.confirm') }}</el-button>
<el-button @click="cancel">{{ $t('form.cancel') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { studyFormApply_ghgsr } from "@/api/business/study/studyFormApply"
import { mapGetters } from 'vuex'
export default {
name: "Ghgsr",
components: {},
data() {
return {
isBatch: false,
ids: [],
selectList: [],
open: false,
form: {},
rules: {
qmrmm: [{
required: true,
message: ' ',
trigger: 'blur'
}],
remark: [{
required: true,
message: ' ',
trigger: 'blur'
}],
qmyy: [{
required: true,
message: ' ',
trigger: 'blur'
}],
}
}
},
computed: {
...mapGetters([
'nickName'
]),
},
created() {
},
methods: {
cancel() {
this.open = false
},
reset() {
this.form = {
id: null,
qmyy: '更换归属人',
userId: null,
UserMc: null,
remark: null,
qmrmm: null
}
this.resetForm("form")
},
show(row) {
this.reset()
this.form.id = row.id
this.form.userId = row.userId
this.form.userMc = row.userMc
this.open = true
},
save() {
this.$refs["form"].validate(valid => {
if (valid) {
this.$modal.loading()
studyFormApply_ghgsr(this.form).then(response => {
this.open = false
this.$emit('callback')
this.$modal.closeLoading()
}).finally(() => {
this.$modal.closeLoading()
})
}
})
}
}
}
</script>

+ 126
- 0
src/views/business/form/drug/comp/sqbd/Jq.vue View File

@ -0,0 +1,126 @@
G<template>
<div>
<el-dialog :title="$t('page.business.study.studyFormApply.jiaqian')" :visible.sync="open" width="500px"
append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="24">
<el-form-item :label="$t('form.qmyy')" prop="qmyy">
<el-select v-model="form.qmyy" :placeholder="$t('form.placeholderSelect')" style="width: 100%;">
<el-option label="开始现场复核" value="开始现场复核" />
<el-option label="结束现场复核" value="结束现场复核" />
<el-option label="申明协作" value="申明协作" />
<el-option label="补充说明" value="补充说明" />
</el-select>
</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="form.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">
<el-input type="password" v-model="form.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="save">{{ $t('form.confirm') }}</el-button>
<el-button @click="cancel">{{ $t('form.cancel') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { studyFormApply_jq } from "@/api/business/study/studyFormApply"
import { mapGetters } from 'vuex'
export default {
name: "Fz",
components: {},
data() {
return {
isBatch: false,
ids: [],
selectList: [],
open: false,
form: {},
rules: {
qmrmm: [{
required: true,
message: ' ',
trigger: 'blur'
}],
remark: [{
required: true,
message: ' ',
trigger: 'blur'
}],
qmyy: [{
required: true,
message: ' ',
trigger: 'blur'
}],
}
}
},
computed: {
...mapGetters([
'nickName'
]),
},
created() {
},
methods: {
cancel() {
this.open = false
},
reset() {
this.form = {
id: null,
qmyy: null,
remark: null,
qmrmm: null
}
this.resetForm("form")
},
show(row) {
this.reset()
this.form.id = row.id
this.open = true
},
save() {
this.$refs["form"].validate(valid => {
if (valid) {
this.$modal.loading()
studyFormApply_jq(this.form).then(response => {
this.open = false
this.$emit('callback')
this.$modal.closeLoading()
}).finally(() => {
this.$modal.closeLoading()
})
}
})
}
}
}
</script>

+ 126
- 0
src/views/business/form/drug/comp/sqbd/Qrfz.vue View File

@ -0,0 +1,126 @@
G<template>
<div>
<el-dialog :title="$t('page.business.study.studyFormApply.qrfz')" :visible.sync="open" width="500px" append-to-body
:close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="24">
<el-form-item :label="$t('form.qmyy')" prop="qmyymc">
<el-input type="text" :value="form.qmyymc" 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('page.business.study.studyFormApply.reason')" prop="remark">
<el-input type="textarea" v-model="form.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">
<el-input type="password" v-model="form.qmrmm" maxlength="20"
:placeholder="$t('form.placeholderInput')" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer" style="text-align: center;">
<el-button type="danger" @click="reject">{{ $t('page.business.study.studyFormApply.reject') }}</el-button>
<el-button type="primary" @click="approve">{{ $t('page.business.study.studyFormApply.approve') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { studyFormApply_qrfz } from "@/api/business/study/studyFormApply"
import { mapGetters } from 'vuex'
export default {
name: "Qrfz",
components: {},
data() {
return {
isBatch: false,
ids: [],
selectList: [],
open: false,
form: {},
rules: {
qmrmm: [{
required: true,
message: ' ',
trigger: 'blur'
}],
remark: [{
required: true,
message: ' ',
trigger: 'blur'
}],
}
}
},
computed: {
...mapGetters([
'nickName'
]),
},
created() {
},
methods: {
cancel() {
this.open = false
},
reset() {
this.form = {
id: null,
qmyymc: '废止通过/拒绝',
qmyy: null,
remark: null,
qmrmm: null
}
this.resetForm("form")
},
show(row) {
this.reset()
this.form.id = row.id
this.open = true
},
reject() {
this.form.qmyy = 1
this.save()
},
approve() {
this.form.qmyy = 10
this.save()
},
save() {
this.$refs["form"].validate(valid => {
if (valid) {
this.$modal.loading()
studyFormApply_qrfz(this.form).then(response => {
this.open = false
this.$emit('callback')
this.$modal.closeLoading()
}).finally(() => {
this.$modal.closeLoading()
})
}
})
}
}
}
</script>

+ 216
- 0
src/views/business/form/drug/comp/sqbd/Sy.vue View File

@ -0,0 +1,216 @@
G<template>
<div>
<div class="edit-container">
<div class="edit-top">
<div class="left-top">
<img src="@/assets/images/back.png" @click="cancel()" />
<div class="left-title"></div>
</div>
<div class="center-top">
</div>
<div class="right-top">
<el-button @click="cancel()">{{ $t('form.cancel') }}</el-button>
<el-button type="primary" @click="showApprove">{{ $t('page.business.study.studyFormApply.shenyue')
}}</el-button>
</div>
</div>
<div class="edit-content">
<div class="content-left">
<TemplateTable ref="templateTable" :sn="form.templateSn" :templateData="form" fillType="readonly" />
<div class="content-title">
<div class="line"></div>
<div class="subtitle"> {{ $t('page.business.study.studyFormApply.qmxx') }}</div>
</div>
<div class="pal">
<el-table :data="qmxxList" v-loading="loadingQmxx">
<el-table-column :label="$t('page.business.study.studyFormApply.qmr')" align="center" prop="qmrMc"
width="150px" />
<el-table-column :label="$t('page.business.study.studyFormApply.qmyy')" align="center" prop="qmyy"
width="150px" />
<el-table-column :label="$t('page.business.study.studyFormApply.qmsj')" align="center" prop="createTime"
width="150px" />
<el-table-column :label="$t('page.business.study.studyFormApply.bzyy')" align="center" prop="remark"
:show-overflow-tooltip="true" />
</el-table>
</div>
<div class="pal">
<pagination v-show="totalQmxx > 0" :total="totalQmxx" :page.sync="queryParamsQmxx.pageNum"
:limit.sync="queryParamsQmxx.pageSize" @pagination="getQmxxList" />
</div>
</div>
<div class="content-right">
<div class="content-title">
<div class="line"></div>
<div class="subtitle"> {{ $t('page.business.study.studyFormApply.jcgj') }}</div>
</div>
<JcgjList ref="jcgjList" @handleQuery="getJjcgjList" :showXg="true"/>
<pagination v-show="jcgjTotal > 0" small layout="prev, pager, next" :total="jcgjTotal"
@pagination="getJjcgjList" />
</div>
</div>
</div>
<el-dialog :title="$t('page.business.study.studyFormApply.shenyue')" :visible.sync="openApprove" width="500px"
append-to-body :close-on-click-modal="false">
<el-form ref="formApprove" :model="formApprove" :rules="rulesApprove" label-width="120px">
<el-row>
<el-col :span="24">
<el-form-item :label="$t('form.qmyy')" prop="qmyy">
<el-input type="text" :value="formApprove.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="formApprove.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">
<el-input type="password" v-model="formApprove.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="approve">{{ $t('form.confirm') }}</el-button>
<el-button @click="openApprove = false">{{ $t('form.cancel') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { studyFormApply_sy, studyFormApply_info, studyFormApply_jcgj, studyFormApply_qmxx } from "@/api/business/study/studyFormApply"
import { mapGetters } from 'vuex'
import JcgjList from "@/views/business/comps/common/JcgjList";
import TemplateTable from '@/views/business/comps/template/TemplateTable';
export default {
name: "Sy",
components: { TemplateTable, JcgjList },
data() {
return {
form: {},
qmxxList: [],
totalQmxx: 0,
loadingQmxx: true,
queryParamsQmxx: {
formId: null,
pageNum: 1,
pageSize: 10
},
jcgjList: [],
jcgjTotal: 0,
queryParamsJcgj: {
pageNum: 1,
formId: null,
pageSize: 10,
},
openApprove: false,
formApprove: {},
rulesApprove: {
qmrmm: [{
required: true,
message: ' ',
trigger: 'blur'
}]
}
}
},
computed: {
...mapGetters([
'nickName'
]),
},
created() {
},
methods: {
getJjcgjList(val) {
this.$modal.loading()
studyFormApply_jcgj(_.merge({}, this.queryParamsJcgj, val)).then(response => {
this.jcgjList = response.rows
this.jcgjTotal = response.total
this.$refs.jcgjList.init(this.jcgjList)
this.$modal.closeLoading()
}).finally(() => {
this.$modal.closeLoading()
})
},
getQmxxList() {
this.loadingQmxx = true
studyFormApply_qmxx(this.queryParamsQmxx).then(response => {
this.qmxxList = response.rows
this.totalQmxx = response.total
this.loadingQmxx = false
})
},
cancel() {
this.$emit('close')
},
reset() {
this.form = {}
this.resetForm("form")
},
show(row) {
this.reset()
this.$modal.loading()
this.queryParamsJcgj.formId = row.id
this.queryParamsQmxx.formId = row.id
studyFormApply_info({ id: row.id }).then(response => {
this.form = response.data
this.getQmxxList()
this.getJjcgjList()
this.$modal.closeLoading()
}).finally(() => {
this.$modal.closeLoading()
})
},
showApprove() {
this.resetApprove()
this.formApprove.id = this.form.id
this.openApprove = true
},
resetApprove() {
this.formApprove = {
id: null,
qmyy: '已审阅',
remark: '',
qmrmm: '',
}
this.resetForm("formApprove")
},
approve() {
this.$refs["formApprove"].validate(valid => {
if (valid) {
this.$modal.loading()
studyFormApply_sy(this.formApprove).then(response => {
this.openApprove = false
this.$modal.closeLoading()
this.$emit('close')
}).finally(() => {
this.$modal.closeLoading()
})
}
})
}
}
}
</script>

+ 261
- 0
src/views/business/form/drug/comp/sqbd/Xq.vue View File

@ -0,0 +1,261 @@
G<template>
<div>
<div class="edit-container">
<div class="edit-top">
<div class="left-top">
<img src="@/assets/images/back.png" @click="cancel()" />
<div class="left-title"></div>
</div>
<div class="center-top">
</div>
<div class="right-top">
<el-button @click="cancel()">{{ $t('form.close') }}</el-button>
<el-button type="primary" v-if="form.bdzt === 5 && form.tbzt === 1" @click="openApprove = true">{{
$t('page.business.study.studyFormApply.tb') }}</el-button>
</div>
</div>
<div class="edit-content ">
<div class="content">
<div>
<el-button type="primary" @click="dcqbjcgj">{{ $t('page.business.study.studyFormApply.dcqbjcgj') }}
</el-button>
<el-button type="primary" @click="dclcjcgj">{{ $t('page.business.study.studyFormApply.dclcjcgj') }}
</el-button>
<el-button type="primary" @click="dcbjjcgj">{{ $t('page.business.study.studyFormApply.dcbjjcgj') }}
</el-button>
<el-button type="primary" @click="dcxgjcgj">{{ $t('page.business.study.studyFormApply.dcxgjcgj') }}
</el-button>
<el-button type="primary" @click="dcbhsjgj">{{ $t('page.business.study.studyFormApply.dcbhsjgj') }}
</el-button>
</div>
<TemplateTable ref="templateTable" :sn="form.templateSn" :templateData="form" fillType="readonly" />
<div class="content-title">
<div class="line"></div>
<div class="subtitle"> {{ $t('page.business.study.studyFormApply.qmxx') }}</div>
</div>
<div class="pal">
<el-table :data="qmxxList" v-loading="loadingQmxx">
<el-table-column :label="$t('page.business.study.studyFormApply.qmr')" align="center" prop="qmrMc"
width="150px" />
<el-table-column :label="$t('page.business.study.studyFormApply.qmyy')" align="center" prop="qmyy"
width="150px" />
<el-table-column :label="$t('page.business.study.studyFormApply.qmsj')" align="center" prop="createTime"
width="150px" />
<el-table-column :label="$t('page.business.study.studyFormApply.bzyy')" align="center" prop="remark"
:show-overflow-tooltip="true" />
</el-table>
</div>
<div class="pal">
<pagination v-show="totalQmxx > 0" :total="totalQmxx" :page.sync="queryParamsQmxx.pageNum"
:limit.sync="queryParamsQmxx.pageSize" @pagination="getQmxxList" />
</div>
<div class="content-title">
<div class="line"></div>
<div class="subtitle"> {{ $t('page.business.study.studyFormApply.jcgj') }}</div>
</div>
<JcgjList ref="jcgjList" @handleQuery="getJjcgjList" :showXg="true"/>
<pagination v-show="jcgjTotal > 0" small layout="prev, pager, next" :total="jcgjTotal"
@pagination="getJjcgjList" />
</div>
</div>
</div>
<!-- 填报 -->
<el-dialog :title="$t('page.business.study.studyFormApply.cjjl')" :visible.sync="openApprove" width="500px"
append-to-body :close-on-click-modal="false">
<el-form ref="formApprove" :model="formApprove" :rules="rulesApprove" label-width="120px">
<el-alert :title="$t('page.business.study.studyFormApply.ts')" :closable="false" type="success">
</el-alert>
<el-row>
<el-col :span="24">
<el-form-item :label="$t('form.qmyy')" prop="qmyy">
<el-input type="text" :value="formApprove.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="formApprove.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">
<el-input type="password" v-model="formApprove.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="approve">{{ $t('form.confirm') }}</el-button>
<el-button @click="openApprove = false">{{ $t('form.cancel') }}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { studyFormApply_tb, studyFormApply_info, studyFormApply_jcgj, studyFormApply_qmxx } from "@/api/business/study/studyFormApply"
import { mapGetters } from 'vuex'
import JcgjList from "@/views/business/comps/common/JcgjList";
import TemplateTable from '@/views/business/comps/template/TemplateTable';
export default {
name: "Xq",
components: { JcgjList, TemplateTable },
data() {
return {
openApprove: false,
formApprove: {
id: null,
qmyy: '创建记录',
remark: '',
qmrmm: '',
},
rulesApprove: {
qmrmm: [{
required: true,
message: ' ',
trigger: 'blur'
}]
},
qmxxList: [],
totalQmxx: 0,
loadingQmxx: true,
queryParamsQmxx: {
formId: null,
pageNum: 1,
pageSize: 10
},
open: false,
showIndex: 1,
form: {},
rules: {
bdmc: [{
required: true,
message: ' ',
trigger: 'blur'
}],
templateId: [{
required: true,
message: ' ',
trigger: 'blur'
}]
},
jcgjTotal: 0,
jcgjList: [],
queryParamsJcgj: {
pageNum: 1,
formId: null,
pageSize: 10,
}
}
},
computed: {
...mapGetters([
'nickName'
]),
},
created() {
},
methods: {
dcqbjcgj() {
alert('todo')
},
dclcjcgj() {
alert('todo')
},
dcbjjcgj() {
alert('todo')
},
dcxgjcgj() {
alert('todo')
},
dcbhsjgj() {
alert('todo')
},
getJjcgjList(val) {
this.$modal.loading()
studyFormApply_jcgj(_.merge({}, this.queryParamsJcgj, val)).then(response => {
this.jcgjList = response.rows
this.jcgjTotal = response.total
this.$refs.jcgjList.init(this.jcgjList)
this.$modal.closeLoading()
}).finally(() => {
this.$modal.closeLoading()
})
},
getQmxxList() {
this.loadingQmxx = true
studyFormApply_qmxx(this.queryParamsQmxx).then(response => {
this.qmxxList = response.rows
this.totalQmxx = response.total
this.loadingQmxx = false
})
},
cancel() {
this.$emit('close')
},
reset() {
this.form = {
id: null,
studyId: null,
bdbh: null,
bdmc: null,
bdsm: null,
templateId: null,
templateMc: null,
bdnr: null
}
this.resetForm("form")
},
show(row) {
this.reset()
this.$modal.loading()
this.formApprove.id = row.id
this.queryParamsJcgj.formId = row.id
this.queryParamsQmxx.formId = row.id
studyFormApply_info({ id: row.id }).then(response => {
this.form = response.data
this.getQmxxList()
this.getJjcgjList()
this.$modal.closeLoading()
}).finally(() => {
this.$modal.closeLoading()
})
},
approve() {
this.$refs["formApprove"].validate(valid => {
if (valid) {
this.$modal.loading()
studyFormApply_tb(this.formApprove).then(response => {
this.$emit('close')
this.openApprove = false
this.$modal.closeLoading()
}).finally(() => {
this.$modal.closeLoading()
})
}
})
}
}
}
</script>

+ 363
- 0
src/views/business/form/drug/comp/sqbdList.vue View File

@ -0,0 +1,363 @@
<template>
<div>
<div class="sqbd-list" v-show="!showDetail && !showEdit && !showAudit && !showFh">
<div class="sqbd-search">
<el-form :model="searchForm" ref="searchForm" :inline="true" label-width="100px">
<el-row>
<el-col :span="6">
<el-form-item :label="$t('page.business.form.bdmc')" prop="name">
<el-input v-model="searchForm.bdmc" :placeholder="$t('form.placeholderInput')" clearable
style="width: 200px" @keyup.enter.native="search" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('page.business.form.bdbh')" prop="sn">
<el-input v-model="searchForm.bdbh" :placeholder="$t('form.placeholderInput')" clearable
style="width: 200px" @keyup.enter.native="search" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('page.business.form.gsr')" prop="userId">
<SelectDeptUser v-model="searchForm.userId" style="width: 200px" :name="searchForm.userMc" key="userId"
@change="userChange" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
<div style="margin-left: 100px;">
<el-button type="primary" icon="el-icon-search" @click="search">{{ $t('form.search') }}</el-button>
<el-button icon="el-icon-refresh" @click="reset">{{ $t('form.reset') }}</el-button>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item :label="$t('page.business.form.xtmbmc')" prop="templateName">
<el-input v-model="searchForm.templateMc" :placeholder="$t('form.placeholderInput')" clearable
style="width: 200px" @keyup.enter.native="search" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('page.business.form.cjsj')">
<el-date-picker v-model="daterange" clearable type="daterange" range-separator="-"
:start-placeholder="$t('page.business.form.startDate')"
:end-placeholder="$t('page.business.form.endDate')" value-format="yyyy-MM-dd" @change="search"
style="width: 200px" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('page.business.form.tjsj')">
<el-date-picker v-model="daterangetj" clearable type="daterange" range-separator="-"
:start-placeholder="$t('page.business.form.startDate')"
:end-placeholder="$t('page.business.form.endDate')" value-format="yyyy-MM-dd" @change="search"
style="width: 200px" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('page.business.study.studyFormApply.sfbl')">
<el-select v-model="searchForm.sfbl" :placeholder="$t('form.placeholderSelect')" clearable
@change="search">
<el-option :label="$t('page.business.study.studyFormApply.yes')" :value="10" />
<el-option :label="$t('page.business.study.studyFormApply.no')" :value="1" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="sqbd-content">
<el-row class="add-box">
<el-col>
<el-button type="primary" icon="el-icon-plus" @click="add()" v-hasPermi="['business:studyFormApply:xz']">{{
$t('page.business.study.studyFormApply.xzbd') }}</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="list">
<el-table-column :label="$t('page.business.form.bh')" prop="bdbh" />
<el-table-column :label="$t('page.business.form.bdmc')" prop="bdmc" />
<el-table-column :label="$t('page.business.form.xtmbmc')" prop="templateMc" />
<el-table-column :label="$t('page.business.form.cjsj')" align="center" prop="createTime" width="140" />
<el-table-column :label="$t('page.business.form.gsr')" align="center" prop="userMc" width="100" />
<el-table-column :label="$t('page.business.form.status')" prop="status" align="center" width="100">
<template slot-scope="scope">
<span v-if="scope.row.bdzt === 1">{{ $t('page.business.study.studyFormApply.tbz') }}</span>
<span v-if="scope.row.bdzt === 3">{{ $t('page.business.study.studyFormApply.ytj') }}</span>
<span v-if="scope.row.bdzt === 5">{{ $t('page.business.study.studyFormApply.ywc') }}</span>
<span v-if="scope.row.bdzt === 7">{{ $t('page.business.study.studyFormApply.ywcfh') }}</span>
<span v-if="scope.row.bdzt === 9">{{ $t('page.business.study.studyFormApply.dfz') }}</span>
<span v-if="scope.row.bdzt === 11">{{ $t('page.business.study.studyFormApply.yfz') }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('page.business.study.studyFormApply.sfbl')" align="center" prop="status"
width="100">
<template slot-scope="scope">
<span v-if="scope.row.sfbl === 10">{{ $t('page.business.study.studyFormApply.yes') }}</span>
<span v-if="scope.row.sfbl === 1">{{ $t('page.business.study.studyFormApply.no') }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('page.business.form.tjsj')" align="center" prop="tjsj" width="140" />
<el-table-column :label="$t('form.operate')" align="left" fixed="right" width="200">
<template slot-scope="scope">
<!-- 表单状态1填报中3已提交5已完成经复核7已完成9待废止11已废止 -->
<!-- 详情 -->
<el-button type="text" @click="detail(scope.row)" v-hasPermi="['business:studyFormApply:xq']">{{
$t('form.detail') }}</el-button>
<!-- 编辑 -->
<el-button type="text" v-if="scope.row.bdzt === 1 || scope.row.bdzt === 5 || scope.row.bdzt === 7"
@click="edit(scope.row)" v-hasPermi="['business:studyFormApply:bj']">{{
$t('form.edit') }}</el-button>
<!-- 复核 -->
<el-button type="text" v-if="scope.row.bdzt === 3" @click="fh(scope.row)"
v-hasPermi="['business:studyFormApply:fh']">{{
$t('page.business.study.studyFormApply.fh') }}</el-button>
<!-- 加签 -->
<el-button type="text" v-if="scope.row.bdzt === 1" @click="jq(scope.row)"
v-hasPermi="['business:studyFormApply:jq']">{{
$t('page.business.study.studyFormApply.jq') }}</el-button>
<!-- 更换归属人 -->
<el-button type="text"
v-if="scope.row.bdzt === 1 || scope.row.bdzt === 3 || scope.row.bdzt === 5 || scope.row.bdzt === 7"
@click="ghgsr(scope.row)" v-hasPermi="['business:studyFormApply:ghgsr']">{{
$t('page.business.study.studyFormApply.ghgsr') }}</el-button>
<!-- 审阅 -->
<el-button type="text" v-if="scope.row.bdzt === 5 || scope.row.bdzt === 7" @click="sy(scope.row)"
v-hasPermi="['business:studyFormApply:sy']">{{
$t('page.business.study.studyFormApply.sy') }}</el-button>
<!-- 废止 -->
<el-button type="text" v-if="scope.row.bdzt === 1" @click="fz(scope.row)"
v-hasPermi="['business:studyFormApply:fz']">{{
$t('page.business.study.studyFormApply.fz') }}</el-button>
<!-- 确认废止 -->
<el-button type="text" v-if="scope.row.bdzt === 9" @click="qrfz(scope.row)"
v-hasPermi="['business:studyFormApply:qrfz']">{{
$t('page.business.study.studyFormApply.qrfz') }}</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="searchForm.pageNum" :limit.sync="searchForm.pageSize"
@pagination="getList" />
</div>
</div>
<!-- 编辑 -->
<Bj v-show="showEdit" key="Bj" ref="Bj" @close="bjClose" />
<!-- 详情 -->
<Xq v-show="showDetail" key="Xq" ref="Xq" @close="xqClose" />
<!-- 审阅 -->
<Sy v-show="showAudit" key="Sy" ref="Sy" @close="syClose" />
<!-- 复核 -->
<Fh v-show="showFh" key="Fh" ref="Fh" @close="fhClose" />
<!-- 废止 -->
<Fz key="Fz" ref="Fz" @callback="search" />
<!-- 确认废止 -->
<Qrfz key="Qrfz" ref="Qrfz" @callback="search" />
<!-- 加签 -->
<Jq key="Jq" ref="Jq" @callback="search" />
<!-- 更换归属人 -->
<Ghgsr key="Ghgsr" ref="Ghgsr" @callback="search" />
<SelectDeptUserDialog ref="selectDeptUserDialog" @change="ghgsrChange" />
</div>
</template>
<script>
import { studyFormApply_list } from '@/api/business/study/studyFormApply'
import Bj from "./sqbd/Bj";
import Xq from "./sqbd/Xq";
import Sy from "./sqbd/Sy";
import Fz from "./sqbd/Fz";
import Fh from "./sqbd/Fh";
import Qrfz from "./sqbd/Qrfz";
import Jq from "./sqbd/Jq";
import Ghgsr from "./sqbd/Ghgsr";
import SelectDeptUser from '@/views/business/comps/select/SelectDeptUser';
import SelectDeptUserDialog from '@/views/business/comps/select/SelectDeptUserDialog';
import { mapGetters } from 'vuex'
import moment from "moment";
export default {
name: 'SqbdList',
props: {
study: {
type: Object,
default: () => {
return {}
}
}
},
computed: {
...mapGetters([
'id'
]),
},
watch: {
study: {
handler(newVal) {
this.searchForm.studySn = newVal.sn
this.searchForm.studyMc = newVal.name
this.searchForm.studyId = newVal.studyId
this.searchForm.studySubjectId = newVal.studySubjectId
this.leader = newVal.leader
this.search()
},
immediate: true,
deep: true
}
},
components: { Ghgsr, Fh, Fz, Bj, Xq, Qrfz, Sy, Jq, SelectDeptUser, SelectDeptUserDialog },
data() {
return {
leader: null,
showFh: false,
showAudit: false,
showEdit: false,
showDetail: false,
daterangetj: [],
daterange: [],
searchForm: {
pageNum: 1,
pageSize: 10,
studyId: '',
studySn: '',
studyMc: '',
studySubjectId: '',
bdbh: '',
bdmc: '',
userId: '',
userMc: '',
templateMc: '',
cjsjjs: '',
cjsjks: '',
tjsjjs: '',
tjsjks: '',
},
loading: false,
total: 0,
list: [],
currentRow: null
}
},
created() { },
methods: {
ghgsr(row) {
this.currentRow = row
this.$refs.selectDeptUserDialog.show(null, null)
},
ghgsrChange(val) {
this.$refs.Ghgsr.show({ id: this.currentRow.id, userId: val.id, userMc: val.name })
},
jq(row) {
this.$refs.Jq.show(row)
},
qrfz(row) {
this.$refs.Qrfz.show(row)
},
fz(row) {
this.$refs.Fz.show(row)
},
userChange(val) {
this.searchForm.userId = val.id
this.searchForm.userMc = val.name
this.search()
},
search() {
this.searchForm.pageNum = 1
this.getList()
},
reset() {
this.resetForm("searchForm")
this.handleQuery()
},
getList() {
if (this.daterange != null && this.daterange.length > 0) {
this.searchForm.cjsjks = this.daterange[0]
this.searchForm.cjsjjs = moment().add(this.daterange[1], 'days').format('YYYY-MM-DD');
} else {
this.searchForm.cjsjks = ''
this.searchForm.cjsjjs = ''
}
if (this.daterangetj != null && this.daterangetj.length > 0) {
this.searchForm.tjsjks = this.daterangetj[0]
this.searchForm.tjsjjs = moment().add(this.daterangetj[1], 'days').format('YYYY-MM-DD');
} else {
this.searchForm.tjsjks = ''
this.searchForm.tjsjjs = ''
}
this.loading = true
studyFormApply_list(this.searchForm).then(response => {
this.list = response.rows
this.total = response.total
this.loading = false
})
},
add() {
this.showEdit = true
this.$emit('showDetail', this.showEdit)
this.$refs.Bj.edit({studySn:this.searchForm.studySn, studyMc:this.searchForm.studyMc, studyId: this.searchForm.studyId, studySubjectId: this.searchForm.studySubjectId })
},
edit(row) {
this.showEdit = true
this.$emit('showDetail', this.showEdit)
this.$refs.Bj.edit(row)
},
bjClose() {
this.showEdit = false
this.$emit('showDetail', this.showEdit)
this.search()
},
xqClose() {
this.showDetail = false
this.$emit('showDetail', this.showDetail)
this.search()
},
syClose() {
this.showAudit = false
this.$emit('showDetail', this.showAudit)
this.search()
},
fhClose() {
this.showFh = false
this.$emit('showDetail', this.showFh)
this.search()
},
detail(row) {
this.showDetail = true
this.$emit('showDetail', this.showDetail)
this.$refs.Xq.show(row)
},
sy(row) {
this.showAudit = true
this.$emit('showDetail', this.showAudit)
this.$refs.Sy.show(row)
},
fh(row) {
this.showFh = true
this.$emit('showDetail', this.showFh)
this.$refs.Fh.show(row)
},
}
}
</script>
<style lang="scss" scoped>
.sqbd-list {
.sqbd-search {
background: #fff;
padding: 20px;
margin-bottom: 10px;
.right-btn {
text-align: right
}
}
.sqbd-content {
padding: 20px;
background: #fff;
.add-box {
margin-bottom: 10px;
}
}
}
</style>

+ 66
- 0
src/views/business/form/drug/comp/syff.vue View File

@ -0,0 +1,66 @@
<template>
<div class="study-tbbd">
<div class="tbbd-right">
配置方法列表
</div>
</div>
</template>
<script>
export default {
name: 'StudySyff',
props: {
study:{
type:Object,
default:()=>{
return {}
}
}
},
watch:{
study: {
immediate: true,
handler(v) {
this.studyInfo = {
studyId:v.id,
studyLeader:v.leader,
studySubjectId:''
}
},
deep: true,
},
},
components: {},
computed: {},
filters: {},
data() {
return {
studyInfo:{
studyId:this.study.id,
studyLeader:this.study.leader,
studySubjectId:''
}
}
},
created() {},
methods: {
}
}
</script>
<style lang="scss" scoped>
.study-tbbd {
display: flex;
flex-direction: row;
.tbbd-left {
background: #fff;
padding: 20px;
margin-right: 10px;
flex-shrink: 0;
width: 350px;
}
.tbbd-right{
flex-grow: 1;
overflow: hidden;
}
}
</style>

+ 72
- 0
src/views/business/form/drug/comp/tbbd.vue View File

@ -0,0 +1,72 @@
<template>
<div class="study-tbbd">
<div class="tbbd-right">
填报表单列表
<!-- <tbbdList :study="studyInfo" @showDetail="showDetailCallback"/> -->
</div>
</div>
</template>
<script>
// import tbbdList from './tbbdList.vue'
export default {
name: 'StudyTbbd',
props: {
study:{
type:Object,
default:()=>{
return {}
}
}
},
watch:{
study: {
immediate: true,
handler(v) {
this.studyInfo = {
studyId:v.id,
studyLeader:v.leader,
studySubjectId:''
}
}
},
},
components: {
// tbbdList
},
computed: {},
filters: {},
data() {
return {
studyInfo:{
studyId:this.study.id,
studyLeader:this.study.leader,
studySubjectId:''
}
}
},
created() {},
methods: {
showDetailCallback(val){
this.$emit('showDetail',val)
}
}
}
</script>
<style lang="scss" scoped>
.study-tbbd {
display: flex;
flex-direction: row;
.tbbd-left {
background: #fff;
padding: 20px;
margin-right: 10px;
flex-shrink: 0;
width: 350px;
}
.tbbd-right{
flex-grow: 1;
overflow: hidden;
}
}
</style>

+ 40
- 0
src/views/business/form/drug/comp/wzlb.vue View File

@ -0,0 +1,40 @@
<template>
<div class="study-syxx">
物资列表
</div>
</template>
<script>
export default {
name: 'StudyWzlb',
props: {
study: {
type: Object,
default: () => {
return {}
}
}
},
watch: {
study: {
immediate: true,
handler(v) {
this.id = v.id
// this.getStudyInfo()
}
},
},
components: { },
data() {
return {
}
},
created() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
</style>

+ 72
- 0
src/views/business/form/drug/comp/ytbd.vue View File

@ -0,0 +1,72 @@
<template>
<div class="study-ytbd">
<div class="ytbd-right">
预填表单列表
<!-- <ytbdList :study="studyInfo" @showDetail="showDetailCallback"/> -->
</div>
</div>
</template>
<script>
// import ytbdList from './ytbdList.vue'
export default {
name: 'StudyYtbd',
props: {
study:{
type:Object,
default:()=>{
return {}
}
}
},
watch:{
study: {
immediate: true,
handler(v) {
this.studyInfo = {
studyId:v.id,
studyLeader:v.leader,
studySubjectId:''
}
}
},
},
components: {
// ytbdList
},
computed: {},
filters: {},
data() {
return {
studyInfo:{
studyId:this.study.id,
studyLeader:this.study.leader,
studySubjectId:''
}
}
},
created() {},
methods: {
showDetailCallback(val){
this.$emit('showDetail',val)
}
}
}
</script>
<style lang="scss" scoped>
.study-ytbd {
display: flex;
flex-direction: row;
.ytbd-left {
background: #fff;
padding: 20px;
margin-right: 10px;
flex-shrink: 0;
width: 350px;
}
.ytbd-right{
flex-grow: 1;
overflow: hidden;
}
}
</style>

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

@ -0,0 +1,391 @@
<template>
<div class="app-container study-page">
<div class="content-list" v-show="showType==='list'">
<el-form :model="searchForm" ref="searchForm" :inline="true" class="search-box">
<el-form-item :label="$t('page.business.study.drug.name')" prop="name">
<el-input v-model="searchForm.name" :placeholder="$t('form.placeholderInput')" clearable style="width: 150px" @keyup.enter.native="search" />
</el-form-item>
<el-form-item :label="$t('page.business.study.drug.sn')" prop="sn">
<el-input v-model="searchForm.sn" :placeholder="$t('form.placeholderInput')" clearable style="width: 150px" @keyup.enter.native="search" />
</el-form-item>
<el-form-item :label="$t('page.business.study.drug.dateRange')">
<el-date-picker v-model="daterange" clearable type="daterange" range-separator="-" :start-placeholder="$t('page.business.study.drug.startDate')"
:end-placeholder="$t('page.business.study.drug.endDate')" value-format="yyyy-MM-dd" @change="search" style="width: 220px" />
</el-form-item>
<el-form-item prop="status" :label="$t('page.business.study.drug.status')">
<el-select
v-model="searchForm.status"
:placeholder="$t('form.placeholderSelect')"
clearable
style="width: 100px"
@change="search"
>
<el-option :label="$t('page.business.study.drug.statusCg')" :value="1" />
<el-option :label="$t('page.business.study.drug.statusSyz')" :value="3" />
<el-option :label="$t('page.business.study.drug.statusYsd')" :value="5" />
<el-option :label="$t('page.business.study.drug.statusDgd')" :value="7" />
<el-option :label="$t('page.business.study.drug.statusGd')" :value="9" />
<el-option :label="$t('page.business.study.drug.statusDjd')" :value="10" />
</el-select>
</el-form-item>
<el-form-item prop="leaderName" :label="$t('page.business.study.drug.leader')">
<el-input v-model="searchForm.leaderName" :placeholder="$t('form.placeholderInput')" clearable style="width: 150px" @keyup.enter.native="search" />
</el-form-item>
<div class="right-btn">
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="search">{{ $t('form.search') }}</el-button>
<el-button icon="el-icon-refresh" @click="reset">{{ $t('form.reset') }}</el-button>
</el-form-item>
</div>
</el-form>
<div class="content-box">
<el-row class="add-box">
<el-col>
<el-button type="primary" icon="el-icon-plus" @click="edit(null)" v-hasPermi="['business:form:drug:add']">{{ $t('page.business.study.drug.add') }}</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="list">
<el-table-column :label="$t('page.business.study.drug.sort')" type="index" width="50" />
<el-table-column :label="$t('page.business.study.drug.name')" prop="name" />
<el-table-column :label="$t('page.business.study.drug.sn')" prop="sn" />
<el-table-column :label="$t('page.business.study.drug.status')" prop="status" width="100">
<template slot-scope="scope">
<span v-if="scope.row.status===1">{{$t('page.business.study.drug.statusCg')}}</span>
<span v-if="scope.row.status===3">{{$t('page.business.study.drug.statusSyz')}}</span>
<span v-if="scope.row.status===5">{{$t('page.business.study.drug.statusYsd')}}</span>
<span v-if="scope.row.status===7">{{$t('page.business.study.drug.statusDgd')}}</span>
<span v-if="scope.row.status===9">{{$t('page.business.study.drug.statusGd')}}</span>
<span v-if="scope.row.status===10">{{$t('page.business.study.drug.statusDjd')}}</span>
</template>
</el-table-column>
<el-table-column :label="$t('page.business.study.drug.borrowStatus')" prop="borrowStatus" width="100">
<template slot-scope="scope">
<span v-if="scope.row.borrowStatus===1">{{$t('page.business.study.drug.borrowStatusWjy')}}</span>
<span v-if="scope.row.borrowStatus===5">{{$t('page.business.study.drug.borrowStatusJyz')}}</span>
<span v-if="scope.row.borrowStatus===10">{{$t('page.business.study.drug.borrowStatusDjy')}}</span>
</template>
</el-table-column>
<el-table-column :label="$t('page.business.study.drug.formCount')" align="center" prop="formCount" width="100" />
<el-table-column :label="$t('page.business.study.drug.formFinishCount')" align="center" prop="formFinishCount" width="120" />
<el-table-column :label="$t('page.business.study.drug.leader')" align="center" prop="leaderName" width="100" />
<el-table-column :label="$t('page.business.study.drug.dept')" align="center" prop="deptName" width="120" />
<el-table-column :label="$t('page.business.study.drug.createDate')" align="center" prop="createTime" width="140" />
<el-table-column :label="$t('form.operate')" fixed="right" align="center" width="200">
<template slot-scope="scope">
<!-- 编辑 -->
<el-button type="text" @click="edit(scope.row)" v-hasPermi="['business:form:drug:edit']" v-if="(scope.row.leader==userId || checkRole(['TFM'])) && (scope.row.status===1 || scope.row.status===3)">{{$t('page.business.study.drug.edit')}}</el-button>
<!-- 删除 -->
<el-button type="text" @click="del(scope.row)" v-hasPermi="['business:form:drug:remove']" v-if="(scope.row.leader==userId || checkRole(['TFM'])) && scope.row.status===1">{{$t('page.business.study.drug.delete')}}</el-button>
<!-- 详情 -->
<el-button type="text" @click="detail(scope.row)" v-hasPermi="['business:form:drug:detail']" v-if="scope.row.status===1 || scope.row.status===3 || scope.row.status===5 || (scope.row.status===9 && scope.row.borrowStatus===10)">{{$t('page.business.study.drug.detail')}}</el-button>
<!-- 进入试验 -->
<el-button type="text" @click="enter(scope.row)" v-hasPermi="['business:form:drug:enter']" v-if="scope.row.status===3 || scope.row.status===5 || (scope.row.status===9 && scope.row.borrowStatus===10)">{{$t('page.business.study.drug.enter')}}</el-button>
<!-- 归档 -->
<el-button type="text" @click="gd(scope.row)" v-hasPermi="['business:form:drug:gd']" v-if="(scope.row.leader==userId || checkRole(['TFM'])) && scope.row.status===5">{{$t('page.business.study.drug.gd')}}</el-button>
<!-- 解锁 -->
<el-button type="text" @click="js(scope.row)" v-hasPermi="['business:form:drug:js']" v-if="(scope.row.leader==userId || checkRole(['TFM'])) && scope.row.status===5">{{$t('page.business.study.drug.js')}}</el-button>
<!-- 解档 -->
<el-button type="text" @click="jd(scope.row)" v-hasPermi="['business:form:drug:jd']" v-if="(scope.row.leader==userId || checkRole(['TFM'])) && scope.row.status===9 && scope.row.borrowStatus===1">{{$t('page.business.study.drug.jd')}}</el-button>
<!-- 借阅 -->
<el-button type="text" @click="jy(scope.row)" v-hasPermi="['business:form:drug:jy']" v-if="(scope.row.leader==userId || checkRole(['TFM'])) && scope.row.status===9 && scope.row.borrowStatus===1">{{$t('page.business.study.drug.jy')}}</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="searchForm.pageNum"
:limit.sync="searchForm.pageSize"
@pagination="getList"
/>
</div>
<!-- <el-dialog :close-on-click-modal="false" :title="infoDialog.title" :visible.sync="infoDialog.visible" width="600px" append-to-body>
<el-form ref="infoDialogForm" :model="infoDialog.formData" :rules="infoDialog.rules" label-width="100px">
<el-row>
<el-col :span="24">
<el-form-item :label="$t('page.business.study.drug.name')+':'" prop="name">
<el-input v-model="infoDialog.formData.name" :placeholder="$t('form.placeholderInput')" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label="$t('page.business.study.drug.sn')+':'" prop="sn">
<el-input v-model="infoDialog.formData.sn" :placeholder="$t('form.placeholderInput')" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label="$t('page.business.study.drug.leader')+':'" prop="leader">
<el-input v-model="infoDialog.formData.leader" :placeholder="$t('form.placeholderInput')" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label="$t('page.business.study.drug.remark')+':'" prop="remark">
<el-input type="textarea" :rows="5" :placeholder="$t('form.placeholderInput')" v-model="infoDialog.formData.remark"> </el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="save"> </el-button>
<el-button @click="infoDialog.visible = false"> </el-button>
</div>
</el-dialog> -->
</div>
<Edit ref="edit" v-show="showType==='edit'" @cancel="showType='list'" @save="save" />
<Enter ref="enter" v-show="showType==='enter'" @cancel="showType='list'" />
<Detail ref="detail" v-show="showType==='detail'" @cancel="showType='list'" />
<Sign ref="signRef" @callback="doSign" />
</div>
</template>
<script>
import { checkPermi, checkRole } from "@/utils/permission";
import { drug_list,drug_delete,drug_gd,drug_js,drug_jd,drug_jy} from "@/api/business/form/drug";
import Edit from './comp/edit.vue'
import Enter from './comp/enter.vue'
import Detail from './comp/detail.vue'
import Sign from './comp/sign.vue'
export default {
name: "NonTrial",
props:{
},
components:{
Edit,
Enter,
Detail,
Sign
},
computed: {
},
filters:{
},
data() {
return {
userId:this.$store.getters.id,
daterange:[],
searchForm: {
pageNum: 1,
pageSize: 10,
sn:'',
name:'',
leaderName:'',
status:'',
startDate:'',
endDate:'',
},
loading: true,
total: 0,
list: [],
//线list,edit
showType:'list',
operate:'',
operateRow:{},
};
},
created() {
this.getList();
},
methods: {
checkPermi,
checkRole,
getList() {
this.loading = true;
this.searchForm.startDate = this.daterange && this.daterange.length > 0 ? this.daterange[0] : ''
this.searchForm.endDate = this.daterange && this.daterange.length > 1 ? this.daterange[1] : ''
drug_list(this.searchForm).then(response => {
this.list = response.rows;
this.total = response.total;
}).finally(()=>{
this.loading = false;
})
},
search() {
this.searchForm.pageNum = 1;
this.getList();
},
reset(){
this.searchForm = {
pageNum: 1,
pageSize: 10,
sn:'',
name:'',
leaderName:'',
status:'',
startDate:'',
endDate:'',
}
this.daterange = []
this.search()
},
edit(row) {
this.showType = 'edit'
this.$refs.edit.edit(row)
},
save() {
this.showType = 'list'
this.getList()
},
enter(row){
this.showType = 'enter'
this.$refs.enter.show(row)
},
detail(row){
this.showType = 'detail'
this.$refs.detail.show(row)
},
del(row) {
this.operate = 'del'
this.operateRow = row
this.$refs.signRef.show(this.$t('page.business.study.drug.scsy'),this.$t('page.business.study.drug.scsy'))
},
doDel(signInfo) {
this.$modal.loading()
let postData = {
study:this.operateRow,
sign:signInfo
}
drug_delete(postData).then(() => {
this.$refs.signRef.cancel()
this.getList()
})
.finally(() => {
this.$modal.closeLoading()
})
},
gd(row) {
this.operate = 'gd'
this.operateRow = row
this.$refs.signRef.show(this.$t('page.business.study.drug.sqgd'),this.$t('page.business.study.drug.sqgd'))
},
doGd(signInfo) {
this.$modal.loading()
let postData = {
study:this.operateRow,
sign:signInfo
}
drug_gd(postData).then(() => {
this.$refs.signRef.cancel()
this.getList()
})
.finally(() => {
this.$modal.closeLoading()
})
},
js(row) {
this.operate = 'js'
this.operateRow = row
this.$refs.signRef.show(this.$t('page.business.study.drug.jssy'),this.$t('page.business.study.drug.jssy'))
},
doJs(signInfo) {
this.$modal.loading()
let postData = {
study:this.operateRow,
sign:signInfo
}
drug_js(postData).then(() => {
this.$refs.signRef.cancel()
this.getList()
})
.finally(() => {
this.$modal.closeLoading()
})
},
jd(row) {
this.operate = 'jd'
this.operateRow = row
this.$refs.signRef.show(this.$t('page.business.study.drug.sqjd'),this.$t('page.business.study.drug.sqjd'))
},
doJd(signInfo) {
this.$modal.loading()
let postData = {
study:this.operateRow,
sign:signInfo
}
drug_jd(postData).then(() => {
this.$refs.signRef.cancel()
this.getList()
})
.finally(() => {
this.$modal.closeLoading()
})
},
jy(row) {
this.operate = 'jy'
this.operateRow = row
this.$refs.signRef.show(this.$t('page.business.study.drug.sqjy'),this.$t('page.business.study.drug.sqjy'),true)
},
doJy(signInfo) {
this.$modal.loading()
let postData = {
study:this.operateRow,
sign:signInfo
}
drug_jy(postData).then(() => {
this.$refs.signRef.cancel()
this.getList()
})
.finally(() => {
this.$modal.closeLoading()
})
},
doSign(val){
if(this.operate==='del'){
this.doDel(val)
}
if(this.operate==='gd'){
this.doGd(val)
}
if(this.operate==='js'){
this.doJs(val)
}
if(this.operate==='jd'){
this.doJd(val)
}
if(this.operate==='jy'){
this.doJy(val)
}
},
}
};
</script>
<style lang="scss" scoped>
.study-page{
background: #f5f5f5;
padding: 0;
.content-list{
.search-box{
background: #fff;
padding: 20px 20px 2px 20px;
margin-bottom: 10px;
.right-btn{
text-align:right
}
}
.content-box{
background: #fff;
padding: 20px;
.add-box{
margin-bottom: 10px;
}
}
}
}
</style>

+ 1
- 1
src/views/business/form/nonTrial/comp/sign.vue View File

@ -5,7 +5,7 @@ G