Browse Source

feat: [表单管理] [非试验表单] 新增页面

master
memorylkf 1 week ago
parent
commit
d63483a8d2
18 changed files with 1441 additions and 7 deletions
  1. +84
    -0
      src/api/business/form/nonTrial.js
  2. +5
    -1
      src/lang/en.js
  3. +72
    -0
      src/lang/en/business/study/nonTrial.js
  4. +3
    -1
      src/lang/en/business/study/studyEnter.js
  5. +5
    -1
      src/lang/zh.js
  6. +73
    -0
      src/lang/zh/business/study/nonTrial.js
  7. +3
    -1
      src/lang/zh/business/study/studyEnter.js
  8. +152
    -0
      src/views/business/form/nonTrial/comp/detail.vue
  9. +179
    -0
      src/views/business/form/nonTrial/comp/edit.vue
  10. +103
    -0
      src/views/business/form/nonTrial/comp/enter.vue
  11. +119
    -0
      src/views/business/form/nonTrial/comp/sign.vue
  12. +66
    -0
      src/views/business/form/nonTrial/comp/syff.vue
  13. +72
    -0
      src/views/business/form/nonTrial/comp/tbbd.vue
  14. +40
    -0
      src/views/business/form/nonTrial/comp/wzlb.vue
  15. +72
    -0
      src/views/business/form/nonTrial/comp/ytbd.vue
  16. +391
    -0
      src/views/business/form/nonTrial/list.vue
  17. +1
    -1
      src/views/business/study/comp/edit.vue
  18. +1
    -2
      src/views/system/user/index.vue

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

@ -0,0 +1,84 @@
import request from '@/utils/request'
export function nonTrial_list(query) {
return request({
url: '/system/business/nonTrial/list',
method: 'get',
params: query
})
}
export function nonTrial_info(query) {
return request({
url: '/system/business/nonTrial/info',
method: 'get',
params: query
})
}
export function nonTrial_save(data) {
return request({
url: '/system/business/nonTrial/save',
method: 'post',
data: data
})
}
export function nonTrial_delete(data) {
return request({
url: '/system/business/nonTrial/delete',
method: 'post',
data: data
})
}
export function nonTrial_jcgjList(query) {
return request({
url: '/system/business/nonTrial/jcgjList',
method: 'get',
params: query
})
}
export function nonTrial_gd(data) {
return request({
url: '/system/business/nonTrial/gd',
method: 'post',
data: data
})
}
export function nonTrial_checkSd(data) {
return request({
url: '/system/business/nonTrial/checkSd',
method: 'post',
data: data
})
}
export function nonTrial_sd(data) {
return request({
url: '/system/business/nonTrial/sd',
method: 'post',
data: data
})
}
export function nonTrial_js(data) {
return request({
url: '/system/business/nonTrial/js',
method: 'post',
data: data
})
}
export function nonTrial_jd(data) {
return request({
url: '/system/business/nonTrial/jd',
method: 'post',
data: data
})
}
export function nonTrial_jy(data) {
return request({
url: '/system/business/nonTrial/jy',
method: 'post',
data: data
})
}

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

@ -15,6 +15,8 @@ import commonTemplate from './en/template/commonTemplate'
// 试验管理 // 试验管理
import study from './en/business/study/study' import study from './en/business/study/study'
import studyEnter from './en/business/study/studyEnter' import studyEnter from './en/business/study/studyEnter'
//非试验表单
import nonTrial from './en/business/study/nonTrial'
//预填表单 //预填表单
import studyFormPre from './en/business/study/studyFormPre' import studyFormPre from './en/business/study/studyFormPre'
//填报表单 //填报表单
@ -135,7 +137,9 @@ export default {
studyFormPre: studyFormPre, studyFormPre: studyFormPre,
studyFormFill: studyFormFill, studyFormFill: studyFormFill,
studyFormPlan: studyFormPlan, studyFormPlan: studyFormPlan,
studyFormApply: studyFormApply
studyFormApply: studyFormApply,
nonTrial: nonTrial
}, },
form: form form: form
} }

+ 72
- 0
src/lang/en/business/study/nonTrial.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'
}

+ 3
- 1
src/lang/en/business/study/studyEnter.js View File

@ -14,5 +14,7 @@ export default {
xzxk: 'Discipline Setup', xzxk: 'Discipline Setup',
xk: 'Discipline', xk: 'Discipline',
czfzr: 'Leader', czfzr: 'Leader',
xzfzr: 'Choose'
xzfzr: 'Choose',
pzfflb: '配置方法列表'
} }

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

@ -15,6 +15,8 @@ import commonTemplate from './zh/template/commonTemplate'
// 试验管理 // 试验管理
import study from './zh/business/study/study' import study from './zh/business/study/study'
import studyEnter from './zh/business/study/studyEnter' import studyEnter from './zh/business/study/studyEnter'
//非试验表单
import nonTrial from './zh/business/study/nonTrial'
//预填表单 //预填表单
import studyFormPre from './zh/business/study/studyFormPre' import studyFormPre from './zh/business/study/studyFormPre'
//填报表单 //填报表单
@ -132,7 +134,9 @@ export default {
studyFormPre: studyFormPre, studyFormPre: studyFormPre,
studyFormFill: studyFormFill, studyFormFill: studyFormFill,
studyFormPlan: studyFormPlan, studyFormPlan: studyFormPlan,
studyFormApply: studyFormApply
studyFormApply: studyFormApply,
nonTrial: nonTrial
}, },
form: form form: form
} }

+ 73
- 0
src/lang/zh/business/study/nonTrial.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: '借阅时间'
}

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

@ -14,5 +14,7 @@ export default {
xzxk: '选择学科', xzxk: '选择学科',
xk: '学科', xk: '学科',
czfzr: '学科/操作负责人', czfzr: '学科/操作负责人',
xzfzr: '选择负责人'
xzfzr: '选择负责人',
pzfflb: '配置方法列表'
} }

+ 152
- 0
src/views/business/form/nonTrial/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.nonTrial.detail')}}
</div>
</div>
<!-- <div class="detail-title"><img src="@/assets/images/detail-title.png" >{{ $t('page.business.study.nonTrial.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.nonTrial.jbxx') }}</div>
</div>
<div class="pal">
<div class="left">
<div class="left-title">{{ $t('page.business.study.nonTrial.name') }}</div>
<el-input type="text" :value="form.name" maxlength="50" disabled />
</div>
<div class="right">
<div class="right-title">{{ $t('page.business.study.nonTrial.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.nonTrial.bdsl') }}</div>
<el-input type="text" :value="form.formCount" maxlength="50" disabled />
</div>
<div class="right">
<div class="right-title">{{ $t('page.business.study.nonTrial.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.nonTrial.createDate') }}</div>
<el-input type="text" :value="form.createTime" maxlength="50" disabled />
</div>
<div class="right">
<div class="right-title">{{ $t('page.business.study.nonTrial.status') }}</div>
<el-select v-model="form.status" disabled style="width: 100%;">
<el-option :label="$t('page.business.study.nonTrial.statusCg')" :value="1" />
<el-option :label="$t('page.business.study.nonTrial.statusSyz')" :value="3" />
<el-option :label="$t('page.business.study.nonTrial.statusYsd')" :value="5" />
<el-option :label="$t('page.business.study.nonTrial.statusDgd')" :value="7" />
<el-option :label="$t('page.business.study.nonTrial.statusGd')" :value="9" />
<el-option :label="$t('page.business.study.nonTrial.statusDjd')" :value="10" />
</el-select>
</div>
</div>
<div class="pal">
<div class="left">
<div class="left-title">{{ $t('page.business.study.nonTrial.borrowStatus') }}</div>
<el-select v-model="form.borrowStatus" disabled style="width: 100%;">
<el-option :label="$t('page.business.study.nonTrial.borrowStatusWjy')" :value="1" />
<el-option :label="$t('page.business.study.nonTrial.borrowStatusJyz')" :value="5" />
<el-option :label="$t('page.business.study.nonTrial.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.nonTrial.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.nonTrial.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 { nonTrial_info, nonTrial_jcgjList } from "@/api/business/form/nonTrial"
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
nonTrial_jcgjList(_.merge({}, this.queryJcgjParams, val)).then(response => {
this.jcgjList = response.rows
this.jcgjTotal = response.total
this.$refs.jcgjList.init(this.jcgjList)
})
},
getJjcgjList() {
nonTrial_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
nonTrial_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/nonTrial/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.nonTrial.create')}}</div>
</div>
<div class="right-top">
<el-button @click="cancel()">{{$t('page.business.study.nonTrial.cancel')}}</el-button>
<el-button type="primary" @click="save(1)" plain v-if="!infoDialog.formData.status || infoDialog.formData.status===1">{{$t('page.business.study.nonTrial.save')}}</el-button>
<el-button type="primary" @click="save(3)">{{$t('page.business.study.nonTrial.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.nonTrial.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.nonTrial.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.nonTrial.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.nonTrial.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 { nonTrial_info,nonTrial_save} from "@/api/business/form/nonTrial";
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.nonTrial.inputName'), trigger: "blur" }
],
sn: [
{ required: true, message: this.$t('page.business.study.nonTrial.inputSn'), trigger: "blur" }
],
leader: [
{ required: true, message: this.$t('page.business.study.nonTrial.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()
nonTrial_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.nonTrial.submit'),this.$t('page.business.study.nonTrial.create'))
}else{
this.doSave({})
}
}
})
},
doSign(val){
this.doSave(val)
},
doSave(sign) {
this.$modal.loading()
nonTrial_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/nonTrial/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"/>
<syff v-if="active === 'syff'" :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 syff from './syff.vue'
import wzlb from './wzlb.vue'
export default {
name: 'StudyEnter',
props: {},
components: { ytbd, tbbd ,syff,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: 'wzlb', name: this.$t('page.business.study.studyEnter.wzlb') },
{ key: 'syff', name: this.$t('page.business.study.studyEnter.pzfflb') }
],
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/nonTrial/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.study.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>

+ 66
- 0
src/views/business/form/nonTrial/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/nonTrial/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/nonTrial/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/nonTrial/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/nonTrial/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.nonTrial.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.nonTrial.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.nonTrial.dateRange')">
<el-date-picker v-model="daterange" clearable type="daterange" range-separator="-" :start-placeholder="$t('page.business.study.nonTrial.startDate')"
:end-placeholder="$t('page.business.study.nonTrial.endDate')" value-format="yyyy-MM-dd" @change="search" style="width: 220px" />
</el-form-item>
<el-form-item prop="status" :label="$t('page.business.study.nonTrial.status')">
<el-select
v-model="searchForm.status"
:placeholder="$t('form.placeholderSelect')"
clearable
style="width: 100px"
@change="search"
>
<el-option :label="$t('page.business.study.nonTrial.statusCg')" :value="1" />
<el-option :label="$t('page.business.study.nonTrial.statusSyz')" :value="3" />
<el-option :label="$t('page.business.study.nonTrial.statusYsd')" :value="5" />
<el-option :label="$t('page.business.study.nonTrial.statusDgd')" :value="7" />
<el-option :label="$t('page.business.study.nonTrial.statusGd')" :value="9" />
<el-option :label="$t('page.business.study.nonTrial.statusDjd')" :value="10" />
</el-select>
</el-form-item>
<el-form-item prop="leaderName" :label="$t('page.business.study.nonTrial.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:nonTrial:add']">{{ $t('page.business.study.nonTrial.add') }}</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="list">
<el-table-column :label="$t('page.business.study.nonTrial.sort')" type="index" width="50" />
<el-table-column :label="$t('page.business.study.nonTrial.name')" prop="name" />
<el-table-column :label="$t('page.business.study.nonTrial.sn')" prop="sn" />
<el-table-column :label="$t('page.business.study.nonTrial.status')" prop="status" width="100">
<template slot-scope="scope">
<span v-if="scope.row.status===1">{{$t('page.business.study.nonTrial.statusCg')}}</span>
<span v-if="scope.row.status===3">{{$t('page.business.study.nonTrial.statusSyz')}}</span>
<span v-if="scope.row.status===5">{{$t('page.business.study.nonTrial.statusYsd')}}</span>
<span v-if="scope.row.status===7">{{$t('page.business.study.nonTrial.statusDgd')}}</span>
<span v-if="scope.row.status===9">{{$t('page.business.study.nonTrial.statusGd')}}</span>
<span v-if="scope.row.status===10">{{$t('page.business.study.nonTrial.statusDjd')}}</span>
</template>
</el-table-column>
<el-table-column :label="$t('page.business.study.nonTrial.borrowStatus')" prop="borrowStatus" width="100">
<template slot-scope="scope">
<span v-if="scope.row.borrowStatus===1">{{$t('page.business.study.nonTrial.borrowStatusWjy')}}</span>
<span v-if="scope.row.borrowStatus===5">{{$t('page.business.study.nonTrial.borrowStatusJyz')}}</span>
<span v-if="scope.row.borrowStatus===10">{{$t('page.business.study.nonTrial.borrowStatusDjy')}}</span>
</template>
</el-table-column>
<el-table-column :label="$t('page.business.study.nonTrial.formCount')" align="center" prop="formCount" width="100" />
<el-table-column :label="$t('page.business.study.nonTrial.formFinishCount')" align="center" prop="formFinishCount" width="120" />
<el-table-column :label="$t('page.business.study.nonTrial.leader')" align="center" prop="leaderName" width="100" />
<el-table-column :label="$t('page.business.study.nonTrial.dept')" align="center" prop="deptName" width="120" />
<el-table-column :label="$t('page.business.study.nonTrial.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:nonTrial:edit']" v-if="(scope.row.leader==userId || checkRole(['TFM'])) && (scope.row.status===1 || scope.row.status===3)">{{$t('page.business.study.nonTrial.edit')}}</el-button>
<!-- 删除 -->
<el-button type="text" @click="del(scope.row)" v-hasPermi="['business:form:nonTrial:remove']" v-if="(scope.row.leader==userId || checkRole(['TFM'])) && scope.row.status===1">{{$t('page.business.study.nonTrial.delete')}}</el-button>
<!-- 详情 -->
<el-button type="text" @click="detail(scope.row)" v-hasPermi="['business:form:nonTrial: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.nonTrial.detail')}}</el-button>
<!-- 进入试验 -->
<el-button type="text" @click="enter(scope.row)" v-hasPermi="['business:form:nonTrial:enter']" v-if="scope.row.status===3 || scope.row.status===5 || (scope.row.status===9 && scope.row.borrowStatus===10)">{{$t('page.business.study.nonTrial.enter')}}</el-button>
<!-- 归档 -->
<el-button type="text" @click="gd(scope.row)" v-hasPermi="['business:form:nonTrial:gd']" v-if="(scope.row.leader==userId || checkRole(['TFM'])) && scope.row.status===5">{{$t('page.business.study.nonTrial.gd')}}</el-button>
<!-- 解锁 -->
<el-button type="text" @click="js(scope.row)" v-hasPermi="['business:form:nonTrial:js']" v-if="(scope.row.leader==userId || checkRole(['TFM'])) && scope.row.status===5">{{$t('page.business.study.nonTrial.js')}}</el-button>
<!-- 解档 -->
<el-button type="text" @click="jd(scope.row)" v-hasPermi="['business:form:nonTrial:jd']" v-if="(scope.row.leader==userId || checkRole(['TFM'])) && scope.row.status===9 && scope.row.borrowStatus===1">{{$t('page.business.study.nonTrial.jd')}}</el-button>
<!-- 借阅 -->
<el-button type="text" @click="jy(scope.row)" v-hasPermi="['business:form:nonTrial:jy']" v-if="(scope.row.leader==userId || checkRole(['TFM'])) && scope.row.status===9 && scope.row.borrowStatus===1">{{$t('page.business.study.nonTrial.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.nonTrial.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.nonTrial.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.nonTrial.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.nonTrial.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 { nonTrial_list,nonTrial_delete,nonTrial_gd,nonTrial_js,nonTrial_jd,nonTrial_jy} from "@/api/business/form/nonTrial";
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] : ''
nonTrial_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.nonTrial.scsy'),this.$t('page.business.study.nonTrial.scsy'))
},
doDel(signInfo) {
this.$modal.loading()
let postData = {
study:this.operateRow,
sign:signInfo
}
nonTrial_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.nonTrial.sqgd'),this.$t('page.business.study.nonTrial.sqgd'))
},
doGd(signInfo) {
this.$modal.loading()
let postData = {
study:this.operateRow,
sign:signInfo
}
nonTrial_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.nonTrial.jssy'),this.$t('page.business.study.nonTrial.jssy'))
},
doJs(signInfo) {
this.$modal.loading()
let postData = {
study:this.operateRow,
sign:signInfo
}
nonTrial_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.nonTrial.sqjd'),this.$t('page.business.study.nonTrial.sqjd'))
},
doJd(signInfo) {
this.$modal.loading()
let postData = {
study:this.operateRow,
sign:signInfo
}
nonTrial_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.nonTrial.sqjy'),this.$t('page.business.study.nonTrial.sqjy'),true)
},
doJy(signInfo) {
this.$modal.loading()
let postData = {
study:this.operateRow,
sign:signInfo
}
nonTrial_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/study/comp/edit.vue View File

@ -113,7 +113,7 @@ export default {
if (valid) { if (valid) {
this.infoDialog.formData.status = status this.infoDialog.formData.status = status
if(status === 3){ if(status === 3){
this.$refs.editSignRef.show(this.$t('page.business.study.study.submit'),'创建试验')
this.$refs.editSignRef.show(this.$t('page.business.study.study.submit'),this.$t('page.business.study.study.create'))
}else{ }else{
this.doSave({}) this.doSave({})
} }

+ 1
- 2
src/views/system/user/index.vue View File

@ -177,7 +177,6 @@
v-model="form.status" v-model="form.status"
:placeholder="$t('form.placeholderSelect')" :placeholder="$t('form.placeholderSelect')"
style="width:100%" style="width:100%"
:disabled="readonly"
> >
<el-option key="0" :label="$t('page.system.user.statusEnable')" value="0" /> <el-option key="0" :label="$t('page.system.user.statusEnable')" value="0" />
<el-option key="1" :label="$t('page.system.user.statusDisable')" value="1" /> <el-option key="1" :label="$t('page.system.user.statusDisable')" value="1" />
@ -487,7 +486,7 @@ export default {
this.dateRange = [] this.dateRange = []
this.resetForm("queryForm") this.resetForm("queryForm")
this.queryParams.deptId = undefined this.queryParams.deptId = undefined
this.$refs.tree.setCurrentKey(null)
// this.$refs.tree.setCurrentKey(null)
this.handleQuery() this.handleQuery()
}, },
// //

Loading…
Cancel
Save