codeMan 2 年 前
コミット
4f2b886541

+ 133 - 16
src/HManagement/siteManage/systemRemind/components/edit.vue

@@ -43,8 +43,30 @@
           </el-col>
           <el-col :span="24" v-if="form.isrole">
             <el-form-item label="角色选择" prop="rolename">
-              <multipleRole ref="role" :data="form" @onResult="roleResult">
-                <el-input type="text" readonly slot="input" v-model="form.rolename" @focus="$refs.role.drawer=true;$refs.role.normalSetId()"></el-input>
+              <multipleRole ref="role" :data="form" @onResult="roleResult" idName="roleid">
+                <div slot="input">
+                  <el-tag
+                    :key="index"
+                    v-for="(tag,index) in form.roleArr"
+                    closable
+                    :disable-transitions="false"
+                    @close="handleCloseRole(tag)"
+                    style="margin-right:10px;margin-bottom:10px">
+                    {{tag.rolename}}
+                  </el-tag>
+                  <el-input
+                    class="input-new-tag"
+                    v-if="inputVisibleRole"
+                    v-model="inputValueRole"
+                    ref="saveTagInputRole"
+                    size="small"
+                    @keyup.enter.native="handleInputConfirmRole"
+                    @blur="handleInputConfirmRole"
+                    style="width:88.81px"
+                  >
+                  </el-input>
+                  <el-button v-else class="button-new-tag" size="small" @click="showInputRole">+ 添 加</el-button>
+                </div>
               </multipleRole>
             </el-form-item>
           </el-col>
@@ -55,8 +77,32 @@
           </el-col>
           <el-col :span="24" v-if="form.isuser">
             <el-form-item label="人员选择" prop="username">
-              <multiplePeople :data="form" ref="user" @onResult="userResult">
-                <el-input type="text" readonly slot="input" v-model="form.username" @focus="$refs.user.drawer=true;$refs.user.normalSetId()"></el-input>
+              <multiplePeople :data="form" ref="user" @onResult="userResult" idName="userid">
+                <div slot="input">
+                  <el-tag
+                    :key="index"
+                    v-for="(tag,index) in form.userArr"
+                    closable
+                    :disable-transitions="false"
+                    @close="handleClose(tag)"
+                    style="margin-right:10px;margin-bottom:10px">
+                    {{tag.name}}
+                  </el-tag>
+                  <el-input
+                    class="input-new-tag"
+                    v-if="inputVisible"
+                    v-model="inputValue"
+                    ref="saveTagInput"
+                    size="small"
+                    @keyup.enter.native="handleInputConfirm"
+                    @blur="handleInputConfirm"
+                    style="width:88.81px"
+                  >
+                  </el-input>
+                  <el-button v-else class="button-new-tag" size="small" @click="showInput">+ 添 加</el-button>
+                </div>
+                
+                <!-- <el-input type="text" readonly slot="input" v-model="form.username" @focus="$refs.user.drawer=true;$refs.user.normalSetId()"></el-input> -->
               </multiplePeople>
             </el-form-item>
           </el-col>
@@ -93,9 +139,11 @@ export default {
         isrole:1,
         roleids:[],
         rolename:'',
+        roleArr:[],
         isuser:1,
         userids:[],
         username:'',
+        userArr:[],
         issql:1,
         sqlstr:''
       },
@@ -106,19 +154,36 @@ export default {
         accountname:[
           { required: true, message: '输入账户名称', trigger: 'blur'}
         ]
-      }
+      },
+      inputVisible:false,
+      inputValue:'',
+      inputVisibleRole:false,
+      inputValueRole:''
     }
   },
   methods:{
     editBtn () {
       this.dialogFormVisible = true
       this.form = Object.assign({},this.form,this.data)
-      this.form.rolename = Object.values(this.form.rolemsg).join(',')
-      this.form.username = Object.values(this.form.usermsg).join(',')
+      console.log(this.data,'数据')
+      this.form.userArr = this.form.userids.map(item => {
+        return {
+          name:this.form.usermsg[item],
+          userid:item
+        }
+      })
+      this.form.roleArr = this.form.roleids.map(item => {
+        return {
+          rolename:this.form.rolemsg[item],
+          roleid:item
+        }
+      })
     },
     onSubmit(){
       this.$refs['form'].validate(async (valid) => {
         if (!valid) return false
+        this.form.userids = this.form.userArr.map(item => item.userid)
+        this.form.roleids = this.form.roleArr.map(item => item.roleid)
         const res = await this.$api.requested({
           "id": "20221220153201",
           "version":1,
@@ -131,21 +196,73 @@ export default {
         })
       })
     },
+    handleClose(tag) {
+      this.form.userArr.splice(this.form.userArr.indexOf(tag), 1);
+      this.form.userids.splice(this.form.userids.indexOf(tag.userid),1)
+    },
+
+    showInput() {
+      this.inputVisible = true;
+      this.$nextTick(_ => {
+        this.$refs.saveTagInput.$refs.input.focus();
+        this.$refs.user.normalSetId()
+        this.$refs.user.drawer = true
+      });
+    },
+
+    handleInputConfirm() {
+      let inputValue = this.inputValue
+      if (inputValue) {
+        this.form.usermsg.push(inputValue)
+      }
+      this.inputVisible = false
+      this.inputValue = ''
+    },
+    handleCloseRole(tag) {
+      this.form.roleArr.splice(this.form.roleArr.indexOf(tag), 1);
+      this.form.roleids.splice(this.form.roleids.indexOf(tag.roleid),1)
+    },
+
+    showInputRole() {
+      this.inputVisibleRole = true;
+      this.$nextTick(_ => {
+        this.$refs.saveTagInputRole.$refs.input.focus();
+        this.$refs.role.normalSetId()
+        this.$refs.role.drawer = true
+      });
+    },
+
+    handleInputConfirmRole() {
+      let inputValueRole = this.inputValueRole
+      if (inputValueRole) {
+        this.form.usermsg.push(inputValueRole)
+      }
+      this.inputVisibleRole = false
+      this.inputValueRole = ''
+    },
     /* 角色选择结果 */
     roleResult (result) {
-      this.form.rolename = result.map(item => item.rolename).join(',')
-      this.form.roleids = result.map(item => item.roleid)
-      console.log(this.form.rolename,result);
-      
+      result.forEach(item => {
+        let is = this.form.roleArr.filter(item2 => item2.roleid == item.roleid)
+        if (!is.length) this.form.roleArr.push(item)
+      })
+      console.log(this.form.roleArr);
     },
     /* 人员选择结果 */
     userResult (result) {
       console.log(result);
-      
-      this.form.username = result.map(item => item.name).join(',')
-      this.form.userids = result.map(item => item.userid)
-      console.log(this.form.username,this.form.userids);
-      
+      result.forEach(item => {
+        let is = this.form.userArr.filter(item2 => item2.userid == item.userid)
+        if (!is.length) this.form.userArr.push(item)
+      })
+      // this.form.userArr.forEach(u => {
+      //   result.forEach(r => {
+      //     let result = u.filter(f => f.userid == r.userid)
+      //     if (!result.length) {
+      //       this.form.userArr.push(r)
+      //     }
+      //   })
+      // })
     }
   } 
 }

+ 20 - 1
src/template/multiplePeople/index.vue

@@ -15,6 +15,7 @@
       <div class="produtMag-panel" style="margin-top: 10px">
         <el-table
             @select="selectionChange"
+            @select-all="selectAll"
             border
             ref="tables"
             :data="list"
@@ -65,7 +66,7 @@
 
 <script>
 export default {
-  props:['data'],
+  props:['data','idName'],
   components:{
   },
   data () {
@@ -132,8 +133,26 @@ export default {
       
       this.selectRowId = this.data.userids
     },
+    selectAll (val) {
+      if (val.length == 0) {
+        this.data.forEach((item,index) => {
+          this.selectAllData.splice(item,1)
+          this.selectRowId.splice(index,1)
+        })
+      } else {
+        val.forEach(item => {
+          let res = this.selectAllData.every(item2 => item[this.idName] != item2[this.idName])
+          console.log(res);
+          res ? this.selectAllData.push(item) : ''
+        })
+      }
+    },
     onSbmit () {
       this.$emit('onResult',this.selectAllData)
+      this.$refs.tables.clearSelection()
+      console.log(this.$refs.tables.clearSelection);
+      this.selectAllData = []
+      this.selectRowId = []
       this.drawer = false
     },
     handleSizeChange(val) {

+ 20 - 1
src/template/multipleRole/index.vue

@@ -15,6 +15,7 @@
       <div class="produtMag-panel" style="margin-top: 10px">
         <el-table
             @select="selectionChange"
+            @select-all="selectAll"
             border
             ref="tables"
             :data="list"
@@ -65,7 +66,7 @@
 
 <script>
 export default {
-  props:['data'],
+  props:['data','idName'],
   components:{
   },
   data () {
@@ -132,8 +133,26 @@ export default {
       
       this.selectRowId = this.data.roleids
     },
+    selectAll (val) {
+      if (val.length == 0) {
+        this.data.forEach((item,index) => {
+          this.selectAllData.splice(item,1)
+          this.selectRowId.splice(index,1)
+        })
+      } else {
+        val.forEach(item => {
+          let res = this.selectAllData.every(item2 => item[this.idName] != item2[this.idName])
+          console.log(res);
+          res ? this.selectAllData.push(item) : ''
+        })
+      }
+    },
     onSbmit () {
       this.$emit('onResult',this.selectAllData)
+      this.$refs.tables.clearSelection()
+      console.log(this.$refs.tables.clearSelection);
+      this.selectAllData = []
+      this.selectRowId = []
       this.drawer = false
     },
     handleSizeChange(val) {

+ 1 - 1
src/views/message/components/list.vue

@@ -39,7 +39,7 @@ export default {
       this.dialogVisible = false
     },
     async detailClick(item) {
-      
+      console.log(item);
       this.$emit('messageItemClick',item)
     }
   },

+ 106 - 83
src/views/message/index.vue

@@ -28,7 +28,7 @@
           </p>
           <div class="content-txt">
             <p class="txt">{{message.message}}</p>
-            <p class="link" @click="goDetail" v-if="currentItem == 1 && message.link">请前往 {{message.name}}>></p>
+            <p class="link" @click="goDetail" v-if="currentItem == 1 && message.link">请前往 {{message.title}}>></p>
           </div>
         </div>
       </el-col>
@@ -59,7 +59,7 @@ export default {
           }
         }
       },
-      list: '',
+      list: [],
       total: 0,
       message:'',
       isAllClick: true
@@ -77,12 +77,11 @@ export default {
     async getMessageList () {
       this.param.content.type = this.currentItem == 0 ? '系统' : '应用'
       let res = await this.$api.requested(this.param)
+      res.data.forEach(item => {
+        this.isCategory(item)
+      })
       this.list = res.data
-      if(this.currentItem == 1) {
-        this.list.forEach(item => {
-          this.isCategory(item)
-        })
-      }
+      
       console.log(this.list);
       
       if(this.list[0]) this.messageItemClick(this.list[0])
@@ -112,6 +111,7 @@ export default {
       res.data.link = data.link
       res.data.modules = data.modules
       this.message = res.data
+      console.log(this.message);
     },
     async allRead() {
       if(!this.isAllClick) return
@@ -135,84 +135,107 @@ export default {
     //跳转到消息具体页面
     goDetail() {
       sessionStorage.setItem('active_modules',JSON.stringify(this.message.modules))
-      this.$router.push(this.message.link)
+      this.$router.push(this.message.link.listPath)
+      if (this.message.link.detail) {
+        setTimeout(() => {
+          this.$store.dispatch('changeDetailDrawer',true)
+          this.$router.push({
+            path:this.message.link.detail,
+            query:{
+              id:this.message.objectid
+            }
+          })
+        })
+      }
+      
     },
     isCategory(data) {
-      
-      switch (data.objectname) {
-        case 'sat_courseware':
-            data.name = '商学院'
-            JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {
-              item1.modules.forEach(item2 => {
-                if(item2.systemmodulename == data.name) {
-                  data.modules = item2
-                  data.link = item2.apps[0].path
-                  return
-                }
-              })
-            })
-            break;
-        case 'sat_sharematerial':
-            data.name = '推广素材'
-            JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {
-              item1.modules.forEach(item2 => {
-                if(item2.systemmodulename == data.name) {
-                  data.modules = item2
-                  data.link = item2.apps[0].path
-                  return
-                }
-              })
-            })
-            break;
-        case 'sat_notice':
-            data.name = '通告'
-            JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {
-              item1.modules.forEach(item2 => {
-                if(item2.systemmodulename == data.name) {
-                  data.modules = item2
-                  data.link = item2.apps[0].path
-                  return
-                }
-              })
-            })
-            break;
-        case 'sat_submitedit':
-            data.name = '提报'
-            JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {
-              item1.modules.forEach(item2 => {
-                if(item2.systemmodulename == data.name) {
-                  data.modules = item2
-                  data.link = item2.apps[0].path
-                  return
-                }
-              })
-            })
-            break;
-        case 'sat_orderclue':
-            data.name = '销售线索'
-            JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {
-              item1.modules.forEach(item2 => {
-                if(item2.systemmodulename == data.name) {
-                  data.modules = item2
-                  data.link = item2.apps[0].path
-                  return
-                }
-              })
-            })
-            break;
-        case 'sys_attachment':
-            data.name = '营销物料'
-            JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {
-              item1.modules.forEach(item2 => {
-                if(item2.systemmodulename == data.name) {
-                  data.modules = item2
-                  data.link = item2.apps[0].path
-                  return
-                }
-              })
-            })
-            break;
-      }
+      JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {
+        item1.modules.forEach(item2 => {
+          item2.apps.forEach(item3 => {
+            if(item3.systemappid == data.systemappid) {
+              data.modules = item3
+              data.link = {listPath:item3.path,detail:item3.path_index}
+              return
+            }
+          })
+        })
+      })
+
+//       switch (data.objectname) {
+//         case 'sat_courseware':
+//             data.name = '商学院'
+//             JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {
+//               item1.modules.forEach(item2 => {
+//                 if(item2.systemmodulename == data.name) {
+//                   data.modules = item2
+//                   data.link = item2.apps[0].path
+//                   return
+//                 }
+//               })
+//             })
+//             break;
+//         case 'sat_sharematerial':
+//             data.name = '推广素材'
+//             JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {
+//               item1.modules.forEach(item2 => {
+//                 if(item2.systemmodulename == data.name) {
+//                   data.modules = item2
+//                   data.link = item2.apps[0].path
+//                   return
+//                 }
+//               })
+//             })
+//             break;
+//         case 'sat_notice':
+//             data.name = '通告'
+//             JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {
+//               item1.modules.forEach(item2 => {
+//                 if(item2.systemmodulename == data.name) {
+//                   data.modules = item2
+//                   data.link = item2.apps[0].path
+//                   return
+//                 }
+//               })
+//             })
+//             break;
+//         case 'sat_submitedit':
+//             data.name = '提报'
+//             JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {
+//               item1.modules.forEach(item2 => {
+//                 if(item2.systemmodulename == data.name) {
+//                   data.modules = item2
+//                   data.link = item2.apps[0].path
+//                   return
+//                 }
+//               })
+//             })
+//             break;
+//         case 'sat_orderclue':
+//             data.name = '销售线索'
+//             JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {
+//               item1.modules.forEach(item2 => {
+//                 if(item2.systemmodulename == data.name) {
+//                   data.modules = item2
+//                   data.link = item2.apps[0].path
+//                   return
+//                 }
+//               })
+//             })
+//             break;
+//         case 'sys_attachment':
+//             data.name = '营销物料'
+//             JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {
+//               item1.modules.forEach(item2 => {
+//                 if(item2.systemmodulename == data.name) {
+//                   data.modules = item2
+//                   data.link = item2.apps[0].path
+//                   return
+//                 }
+//               })
+//             })
+//             break;
+//       }
     }
   },
 };