123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581 |
- <template>
- <div @click="closeSearch">
- <crumbs :title="title" :param="$route.params" linkTo="QualityControlTemp">
- </crumbs>
- <div class="contentWrapper">
- <div class="content">
- <el-form :model="form" :rules="rules" ref="form" class="selectHospital">
- <el-form-item label="所属医院:" prop="hospital" class="formItem">
- <el-select v-model="form.hospital" placeholder="请选择医院" :disabled="isEdit||isCopy" class="selectHospital" @change="changeHsopital">
- <el-option v-for="item in hospitalList" :key="item.id" :label="item.name" :value="item.val"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="所属模块:" prop="moduleName" class="formItem">
- <el-select v-model="form.moduleName" placeholder="请选择所属模块" :disabled="isEdit||isCopy" class="selectModule" @change="changeHsopital">
- <el-option v-for="item in moduleList" :key="item.id" :label="item.name" :value="item.val"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="模块类型:" prop="moduleType" class="formItem widthLarge">
- <el-select v-model="form.moduleType" :disabled="form.hospital==='' || form.moduleName===''" placeholder="请选择模块类型" @change="changeModuleType" class="selectModule">
- <el-option v-for="item in moduleTypeList" :key="item.id" :label="item.recTypeDetail" :value="item.id"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="模板名称:" prop="tempName" class="formItem widthLarge">
- <el-input v-model="form.tempName" placeholder="请输入模板名称" disabled></el-input>
- </el-form-item>
- <el-form-item label="示例:" v-if="form.moduleType !==''" prop="example" class="formItem formExam">
- <span class="exampleTxt">{{form.example}}</span>
- <!-- <el-input v-model="form.example" disabled placeholder="示例"></el-input> -->
- </el-form-item>
- <el-form-item label="模块内容:" prop="moduleInfo" class="formItem addCon">
- <div class="moduleInfoItem" v-for="(item,index) in moduleInfoList">
- <div class="orderBox">
- <span class="el-icon-arrow-up order" @click="upUnit(index)"></span>
- <span class="el-icon-arrow-down order" @click="downUnit(index)"></span>
- </div>
- <div class="searchBox">
- <el-input v-model.trim="item.searchName" placeholder="搜索字段单元" @click="stopClick" @input="searchFiled(index)">
- </el-input>
- <ul v-if="searchIndex == index && item.searchResult.length > 0" class="searchResultBox">
- <li class="searchItem"
- v-for="searchItem in item.searchResult"
- :title="searchItem.tagName"
- @click="selectSearchFiled(searchItem,index)"
- >
- {{searchItem.tagName}}
- </li>
- </ul>
- </div>
- <div>
- <p>已选择字段:</p>
- <div class="selectFiledBox">
- <div class="orderBox">
- <span class="el-icon-arrow-up order" @click="upFiled(index)"></span>
- <span class="el-icon-arrow-down order" @click="downFiled(index)"></span>
- </div>
- <div class="selectFiled" v-for="(it,ii) in item.selectFiled">
- <span class="filedName" :class="{activeFiledName: item.activeIndex == ii}" @click="setActiveIndex(index,ii)">{{it.tagName}}
- <span class="el-icon-circle-close delFiled" @click="delSelected(ii,index)"></span>
- </span>
-
- </div>
- </div>
-
- </div>
- <span class="el-icon-circle-close delUnit" @click="delUnit(index)"></span>
- </div>
- <span class="addUnit" >
- <el-button size="small" type="primary" @click="addUnit">+单元组</el-button>
- </span>
- </el-form-item>
- </el-form>
- <el-button class="disclButn" size="small" type="primary" :disabled = 'saveDisable' @click="confirm('form')">确定</el-button>
- </div>
- </div>
-
- </div>
- </template>
- <script>
- import api from '@api/qualityControl.js';
- export default {
- name:"AddQualityControlTemp",
- data: function(){
- return {
- title: "模板维护-添加",
- isEdit:false,
- isCopy: false,
- saveDisable: false,
- form:{
- tempName: "",
- hospital:"",
- moduleName:"",
- moduleType:"",
- nameType:""
- },
- rules:{
- tempName:{ required: true, message: '请输入模块名称', trigger: ['blur', 'change']},
- hospital:{ required: true, message: '请选择医院', trigger: ['blur', 'change']},
- moduleName:{ required: true, message: '请选择所属模块', trigger: ['blur', 'change']},
- moduleType:{ required: true, message: '请选择模块类型 ', trigger: ['blur', 'change']},
- /*name:[{ required: true, message: '请输入显示名称',trigger: ['blur', 'change'] }],*/
- },
- searchIndex: -1,
-
- hospitalList:[],
- moduleList:[ ],
- moduleTypeList:[], //模块类型列表
- moduleInfoList:[
- // {
- // searchName:"",
- // activeIndex: -1,
- // searchResult:[
- // // {
- // // name: "4姓名"
- // // },
- // // {
- // // name: "5职业"
- // // },
- // // {
- // // name: "6年龄"
- // // }
- // ],
- // selectFiled:[
-
- // ]
- // }
- ]
- }
- },
- created(){
- this.getAllTypes();
- const {isCopy, isEdit, data } = this.$route.params
- if(isEdit || isCopy) {
- this.form.hospital = ''+data.hospitalId
- this.form.moduleName = ''+data.modeId
- if(isEdit){
- this.isEdit = isEdit;
- this.id = data.id
- this.title ="模板维护-修改"
- this.form.tempName = data.name
- this.getModuleTypeList().then(res =>{
- this.form.moduleType = data.recordModuleId
- this.form.example = this.moduleTypeList.find(item => item.id == this.form.moduleType).behospitalCodes
- })
- }
- if(isCopy){
- this.isEdit = isEdit;
- this.isCopy = isCopy
- this.id = ""
- this.title ="模板维护-复制"
- this.form.tempName = ""
- this.form.moduleType=""
- this.form.example=""
- this.getModuleTypeList()
- }
- const moduleDetail = data.moduleDetail
- const keysList = Object.keys(moduleDetail)
- for(let i = 0; i < keysList.length; i++){
- let selectFiled = []
- for(let j = 0; j < moduleDetail[keysList[i]].length; j++){
- const item = moduleDetail[keysList[i]][j]
- selectFiled.push(item.questionDTO)
- }
- this.moduleInfoList.push({
- searchName:"",
- activeIndex: -1,
- searchResult:[
- ],
- selectFiled:selectFiled
- })
-
- }
-
-
- }
-
- },
- methods:{
- closeSearch(){
- if(this.searchIndex > -1){
- this.moduleInfoList[this.searchIndex].searchName = ""
- this.moduleInfoList[this.searchIndex].searchResult=[]
- this.searchIndex = -1
- }
-
- },
- getAllTypes(){
- if(localStorage.getItem("qcModuleTypes")){
- this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
- this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
- return new Promise(function(resolve, reject){
- resolve()
- });
- }
- //获取枚举信息
- return api.getQcTypes().then((res)=>{
- if(res.data.code==="0"){
- const data = res.data.data;
- localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
- localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
- localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
- this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
- this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
- }else{
- this.warning("获取枚举信息失败");
- }
- });
- },
- stopClick(e){
- console.log('11111')
- // e.stopPropagation()
- },
- changeHsopital(){
- this.form.moduleType = ""
- this.getModuleTypeList()
- },
- changeModule(){
- this.form.moduleType = ""
- this.getModuleTypeList()
- },
- changeModuleType(){
- this.form.example = this.moduleTypeList.find(item => item.id == this.form.moduleType).behospitalCodes
- this.form.tempName = this.moduleTypeList.find(item => item.id == this.form.moduleType).recTypeDetail
- },
- getModuleTypeList(){
- this.moduleTypeList = []
- if(this.form.hospital === "" || this.form.moduleName===""){
- return
- }
- return api.getModuleTypeList({hospitalId: this.form.hospital, modeId: this.form.moduleName}).then((res) =>{
- if(res.data.code==="0"){
- const data = res.data.data;
- this.moduleTypeList = data
- }else{
- this.moduleTypeList=[]
- this.warning("获取模块类型失败");
- }
- })
- },
- addUnit(){
- if(!this.form.hospital){
- this.warning("请先选择所属医院")
- return
- }
- if(!this.form.tempName){
- this.warning("请先选择模块")
- return
- }
- this.moduleInfoList.push({
- searchName:"",
- activeIndex: -1,
- searchResult:[
- ],
- selectFiled:[
-
- ]
- })
- },
- searchFiled(index){
- this.searchIndex = index
- const searchName = this.moduleInfoList[index].searchName
- if(!searchName){
- return
- }
- const param = {
- tagName: searchName,
- hospitalId: this.form.hospital,
- modeId: [this.form.moduleName],
- }
- api.getQCName(param).then(res =>{
- if(res.data.code == '0'){
- this.moduleInfoList[index].searchResult = []
- this.moduleInfoList[index].searchResult.push(...res.data.data)
- }
- }).catch(e =>{
- console.log(e)
- })
-
- },
- selectSearchFiled(searchItem,index){
- this.moduleInfoList[index].selectFiled.push(searchItem)
- this.searchIndex = -1
- this.moduleInfoList[index].searchName=""
- this.moduleInfoList[index].searchResult = []
- },
- setActiveIndex(index, ii){
- let activeIndex = this.moduleInfoList[index].activeIndex
- if( ii === activeIndex) {
- this.moduleInfoList[index].activeIndex = -1
- } else {
- this.moduleInfoList[index].activeIndex = ii
- }
-
- },
- upUnit(index){
- if(index == 0){
- return
- }
- const current = this.moduleInfoList[index]
- const currentPre = this.moduleInfoList[index-1]
- this.moduleInfoList.splice(index-1,2,current,currentPre)
- },
- downUnit(index){
- if(index == this.moduleInfoList.length -1){
- return
- }
- const current = this.moduleInfoList[index]
- const currentNext = this.moduleInfoList[index+1]
- this.moduleInfoList.splice(index,2,currentNext,current)
- },
- upFiled(index){
- let activeIndex = this.moduleInfoList[index].activeIndex
- if(activeIndex == 0 || activeIndex == -1){
- return
- }
- const current = this.moduleInfoList[index].selectFiled[activeIndex]
- const currentPre = this.moduleInfoList[index].selectFiled[activeIndex-1]
- this.moduleInfoList[index].selectFiled.splice(activeIndex-1,2,current,currentPre)
- this.moduleInfoList[index].activeIndex--
- },
- downFiled(index){
- let activeIndex = this.moduleInfoList[index].activeIndex
- if(activeIndex == this.moduleInfoList[index].selectFiled.length -1 || activeIndex == -1){
- return
- }
- const current = this.moduleInfoList[index].selectFiled[activeIndex]
- const currentNext = this.moduleInfoList[index].selectFiled[activeIndex+1]
- this.moduleInfoList[index].selectFiled.splice(activeIndex,2,currentNext,current)
- this.moduleInfoList[index].activeIndex++
- },
- delSelected(ii,index){
- this.moduleInfoList[index].selectFiled.splice(ii,1)
-
- },
- delUnit(index){
- this.moduleInfoList.splice(index,1)
- },
- confirm(form){
- // this.$refs[form].validate((valid) => {
- // if (valid) {
- const {tempName,hospital,moduleName,moduleType} = this.form
- let moduleDetail = [], moduleInfoList = this.moduleInfoList
- for(let i = 0; i < moduleInfoList.length; i++){
- for(let j = 0; j < moduleInfoList[i].selectFiled.length; j++){
- let item ={
- groupId: i,
- questionId: moduleInfoList[i].selectFiled[j].id
- }
- moduleDetail.push(item)
- }
-
- }
- if(!hospital){
- this.warning("请选择所属医院");
- return
- }
- if(!moduleName){
- this.warning("请选择所属模块");
- return
- }
- if(!moduleType){
- this.warning("请选择模块类型");
- return
- }
- if(!tempName){
- this.warning("请输入模块名称");
- return
- }
-
-
- if(moduleDetail.length === 0){
- this.warning('请添加模块内容')
- return
- }
- let param = {
- name: tempName,
- modeId: moduleName,
- hospitalId: hospital,
- moduleDetail: moduleDetail,
- remark:'',
- recordModuleId:moduleType
- }
- if(this.isEdit){
- param = Object.assign({}, param, {id: this.id})
- }
- if(this.id && !this.isCopy){//修改
-
- this.saveDisable = true //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
- api.saveOrUpdateQCTemp(param).then((res)=>{
- if(res.data.code==0){
- this.$message({
- message:"修改成功",
- type:'success'
- });
- //返回带搜索条件的首页
- this.$router.push({
- name: 'QualityControlTemp',
- params: Object.assign({}, this.$route.params, {currentPage: 1})
- });
- }else{
- this.$message({
- message:res.data.msg,
- type:'warning'
- });
- }
- this.saveDisable = false
- })
- }else{//添加
- this.saveDisable = true; //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
- api.saveOrUpdateQCTemp(param).then((res)=>{
- if(res.data.code==0){
- this.$message({
- message:"添加成功",
- type:'success'
- })
- this.$router.push({name: 'QualityControlTemp'});
- }else{
- this.$message({
- message:res.data.msg,
- type:'warning'
- });
- }
- this.saveDisable = false
- })
- }
- // } else {
- // return false;
- // }
- // });
- },
- warning(msg, type,time) {
- this.$message({
- showClose: true,
- message: msg,
- type: type || 'warning',
- duration:time || '3000'
- })
- },
- }
- }
- </script>
- <style lang="less" scoped>
- .contentWrapper{
- padding: 50px 20px 0;
- }
- .content{
- background: #fff;
- }
- .formItem{
- /deep/.el-form-item__label{
- width: 150px;
- }
- }
- /deep/.el-form-item__content{
- display: inline-block;
- }
- /deep/.el-input__inner {
- height: 30px;
- line-height: 30px;
- // width: 200px;
- }
- /deep/.widthLarge .el-input__inner {
- width: 350px;
- }
- /deep/.addCon .el-form-item__label:before {
- content: '*';
- color: #f56c6c;
- margin-right: 4px;
- }
- .formExam{
- /deep/.el-form-item__content{
- width: calc(100% - 185px);
- }
- }
- .exampleTxt{
- display: inline-block;
- position: relative;
- width: 100%;
- max-height: 200px;
- padding: 0 20px 0 0;
- height: 100%;
- word-break: break-all;
- overflow-y: auto;
- }
- .moduleInfoItem{
- width: 500px;
- min-height: 200px;
- padding: 0 50px 0 50px;
- border: 1px solid #dcdfe6;
- border-radius: 5px;
- margin-bottom: 20px;
- position: relative;
- }
- .addUnit{
- display: inline-block;
- border: 1px solid #dcdfe6;
- border-radius: 5px;
- width: 80px;
- text-align: center;
- height: 20px;
- line-height: 20px;
- cursor: pointer;
- }
- .searchBox{
- width: 500px;
- position: relative;
- }
- .searchResultBox{
- position: absolute;
- width: 500px;
- box-sizing: border-box;
- max-height: 200px;
- overflow-y: auto;
- background: #fff;
- z-index: 2;
- border: 1px solid #48c5d7;
- }
- .searchItem{
- height: 40px;
- line-height: 40px;
- padding: 0 20px;
- cursor: pointer;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
- }
- .searchItem:hover{
- background-color: #F5F7FA;
- }
- .selectFiled{
- position: relative;
- }
- .orderBox{
- position: absolute;
- left: -50px;
- top: 50%;
- width: 50px;
- height: 84px;
- margin-top: -42px;
- }
- .selectFiledBox{
- position: relative;
- min-height: 120px;
- }
- .order{
- display: inline-block;
- width: 30px;
- height: 30px;
- font-size: 30px;
- margin-left: 5px;
- border: 1px solid #dcdfe6;
- cursor: pointer;
-
- }
- .firstItem{
- margin-left: 28px;
- }
- .delUnit,.delFiled{
- position: absolute;
- top: -8px;
- right: -6px;
- cursor: pointer;
- }
- .delFiled{
- top: -7px;
- right: -9px;
- }
- .filedName{
- position: relative;
- border: 1px solid #dcdfe6;
- border-radius: 4px;
- padding: 5px 10px;
- display: inline-block;
- line-height: 20px;
- }
- .activeFiledName{
- border: 1px solid #48C5D7;
- }
- </style>
|