123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425 |
- <template>
- <div>
- <crumbs :title="title" linkTo="QualityControlTemp">
- </crumbs>
- <div class="contentWrapper">
- <div class="content">
- <el-form :model="form" :rules="rules" ref="form" class="selectHospital">
- <el-form-item label="模板名称:" prop="tempName" class="formItem">
- <el-input v-model="form.tempName" placeholder="请输入模板名称"></el-input>
- </el-form-item>
- <el-form-item label="所属医院:" prop="hospital" class="formItem">
- <el-select v-model="form.hospital" placeholder="请选择医院" class="selectHospital">
- <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="请选择模块" class="selectModule">
- <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="moduleInfo" class="formItem">
- <div class="moduleInfoItem" v-for="(item,index) in moduleInfoList">
- <div class="searchBox">
- <el-input v-model.trim="item.searchName" placeholder="搜索字段单元" @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.name"
- @click="selectSearchFiled(searchItem,index)"
- >
- {{searchItem.name}}
- </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.name}}
- <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" @click="addUnit">+单元组</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:"",
- module:"",
- },
- rules:{
- tempName:{ required: true, message: '请输入模块名称', trigger: ['blur', 'change']},
- hospital:{ required: true, message: '请选择医院', trigger: ['blur', 'change']},
- moduleName:{ required: true, message: '请输入选择模块', trigger: ['blur', 'change']},
- /*name:[{ required: true, message: '请输入显示名称',trigger: ['blur', 'change'] }],*/
- },
- searchIndex: -1,
-
- hospitalList:[],
- moduleList:[ ],
- moduleInfoList:[
- {
- searchName:"",
- activeIndex: -1,
- searchResult:[
- // {
- // name: "4姓名"
- // },
- // {
- // name: "5职业"
- // },
- // {
- // name: "6年龄"
- // }
- ],
- selectFiled:[
-
- ]
- }
- ]
- }
- },
- created(){
- this.getAllTypes();
- // if(isEdit){
- // // this.id =
- // }
- },
- methods:{
- getAllTypes(){
- if(localStorage.getItem("qcModuleTypes")){
- this.hospitalList = JSON.parse(localStorage.getItem("qcHospitalTypes"));
- this.moduleList = JSON.parse(localStorage.getItem("qcModuleTypes"));
- 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]));
- }else{
- this.warning("获取枚举信息失败");
- }
- });
- },
- addUnit(){
- if(!this.form.hospital){
- this.warning("请先选择所属医院")
- return
- }
- if(!this.form.modeId){
- this.warning("请先选择模块")
- return
- }
- this.moduleInfoList.push({
- searchName:"",
- activeIndex: -1,
- searchResult:[
-
- ],
- selectFiled:[
- {
- name: "姓名1"
- },
- {
- name: "职业1"
- },
- {
- name: "年龄1"
- }
- ]
- })
- },
- 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
- }
-
- },
- 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} = 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)
- }
-
- }
- let param = {
- name: tempName,
- modeId: moduleName,
- hospitalId: hospital,
- moduleDetail: moduleDetail,
- remark:''
- }
- 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;
- }
- .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;
- }
- .addUnit:hover{
- background: blue;
- color: #fff;
- }
- .searchBox{
- width: 200px;
- position: relative;
- }
- .searchResultBox{
- position: absolute;
- width: 200px;
- box-sizing: border-box;
- max-height: 200px;
- overflow-y: auto;
- background: #fff;
- z-index: 2;
- border: 1px solid #dcdfe6;
- }
- .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;
- }
- .activeFiledName{
- border: 1px solid #48C5D7;
- }
- </style>
|