Browse Source

Merge branch 'cmy/develop-bi' into develop

chenmy 2 years ago
parent
commit
c39349e733

+ 6 - 3
TEAMModelBI/ClientApp/src/api/index.js

@@ -459,10 +459,13 @@ export default {
         return post('/notice/get-info', data)
     },
     //发送端外通知(消息通知)
-    sendMsgs(data){
-        return post('notice/push-info',data)
+    sendMsgs(data) {
+        return post('notice/push-info', data)
+    },
+    //获取消息列表
+    getMsglist(data) {
+        return post('/notice/get-infos', data)
     },
-
     //第三方相关API(BI)
     //创建or保存 第三方信息
     // setThirdparty(data) {

+ 3 - 2
TEAMModelBI/ClientApp/src/components/AbilityTree.vue

@@ -21,9 +21,9 @@
           <el-dropdown>
             <span class="el-dropdown-link">
               {{$t(`abilityManages.addresource`)}}
-              <el-icon class="el-icon--right">
+              <!-- <el-icon class="el-icon--right">
                 <arrow-down />
-              </el-icon>
+              </el-icon> -->
             </span>
             <template #dropdown>
               <el-dropdown-menu>
@@ -732,6 +732,7 @@ export default {
   border: 1px dashed #ccc;
   border-radius: 5px;
   padding: 5px;
+  padding-top: 10px;
 }
 .chapter::before,
 .resource::before {

+ 0 - 1
TEAMModelBI/ClientApp/src/until/common.js

@@ -88,7 +88,6 @@ export default {
         }
         var strDate = state !== 'all' ? Y + M + D : Y + M + D + h + m + s;
         return strDate; //2020-07-30 01:05:54
-
     },
     toCode(str) { //加密字符串
         //定义密钥,36个字母和数字

+ 77 - 67
TEAMModelBI/ClientApp/src/view/systemConfig/pushmsg/createdpush.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="createdpush">
     <div class="backbtn">
-      <el-button>返回列表</el-button>
+      <el-button @click="backtoindex">返回列表</el-button>
     </div>
     <div class="clearfix"></div>
     <div class="stepsshow">
@@ -27,7 +27,7 @@
             <el-form-item label="消息类型" prop="content" class="form-type">
               <el-radio-group v-model="constructorData.basic.type" class="radio-type">
                 <el-radio label="1">
-                  <el-tag type="info">系统型</el-tag>
+                  <el-tag color="rgba(99, 205, 218,.5)">系统型</el-tag>
                 </el-radio>
                 <el-radio label="2">
                   <el-tag type="info">普通型</el-tag>
@@ -95,14 +95,14 @@
                 <div class="type-select-header">
                   <el-image :src="logoImg" fit="cover" v-if="typeselect ===0" class="logoImg" />
                   <div class="pathtext" v-else>
-                    <span @click="typeselect=0">根据学区选择</span>/
-                    <span @click="typeselect=1">智慧教育学区</span>
+                    <span @click="typeselect=0">{{typeselect ===1 || typeselect ===2 ? '根据学区选择':typeselect ===3 ? '根据学校选择':''}}</span>/
+                    <span @click="typeselect=1">{{clickname}}</span>
                   </div>
                 </div>
                 <div class="type-select-content">
                   <!--选择根据学区or学校-->
                   <div class="type-list" v-if="typeselect ===0">
-                    <div class="itemtype" @click="typeselect=1">
+                    <div class="itemtype" @click="typeselect=1,clickname=''">
                       <svg class="select-icon" aria-hidden="true">
                         <use xlink:href="#icon-icon_yingyongfanweiguang"></use>
                       </svg>
@@ -113,7 +113,7 @@
                         </el-icon>
                       </div>
                     </div>
-                    <div class="itemtype" @click="typeselect=3">
+                    <div class="itemtype" @click="typeselect=3,clickname=''">
                       <svg class="select-icon" aria-hidden="true">
                         <use xlink:href="#icon-xuexiao7"></use>
                       </svg>
@@ -131,7 +131,7 @@
                     <el-checkbox-group v-model="constructorData.receivedata.area" @change="pitchChange">
                       <div class="itemtype-area" v-for="item in allList.allArea" :title="item.name">
                         <el-checkbox :label="item.name" :key="item.id" />
-                        <div class="next-icon" @click="subordinate(item.id),typeselect=2">
+                        <div class="next-icon" @click="subordinate(item.id),typeselect=2,clickname=item.name">
                           下级
                           <el-icon>
                             <ArrowRight />
@@ -300,11 +300,11 @@
             <div class="receivetype">
               <div class="receivetype-title">接收类型:</div>
               <div class="receivetype-select">
-                <el-checkbox-group v-model="constructorData.receiveType">
-                  <el-checkbox label="HiTeach" />
-                  <el-checkbox label="HiTA" />
-                  <el-checkbox label="IES5" />
-                </el-checkbox-group>
+                <el-radio-group v-model="constructorData.receiveType">
+                  <el-radio label="hita" />
+                  <el-radio label="HiTeach" disabled />
+                  <el-radio label="IES" disabled />
+                </el-radio-group>
               </div>
             </div>
             <!-- <div class="skip-switch">
@@ -341,9 +341,10 @@
           <div class="type">
             <p class="result-title">接收产品类型</p>
             <div class="typebox">
-              <el-tag class="crowd-tag" v-for="item in constructorData.receiveType" :type="item ==='HiTeach' ? '':item ==='HiTA' ? 'success':item ==='IES5' ? 'info':''" closable effect="dark" round>
+              <!-- <el-tag class="crowd-tag" v-for="item in constructorData.receiveType" :type="item ==='HiTeach' ? '':item ==='HiTA' ? 'success':item ==='IES5' ? 'info':''" closable effect="dark" round>
                 {{item}}
-              </el-tag>
+              </el-tag> -->
+              <el-tag class=crowd-tag>{{constructorData.receiveType}}</el-tag>
             </div>
           </div>
           <div class="push-content">
@@ -360,7 +361,7 @@
                   <el-form-item label="消息类型" prop="content" class="form-type">
                     <el-radio-group v-model="constructorData.basic.type" class="radio-type">
                       <el-radio label="1">
-                        <el-tag type="info">系统型</el-tag>
+                        <el-tag color="rgba(99, 205, 218,.5)">系统型</el-tag>
                       </el-radio>
                       <el-radio label="2">
                         <el-tag type="info">普通型</el-tag>
@@ -405,13 +406,13 @@
                 <div class="source-box">
                   <span>消息来源:</span>
                   <el-radio-group v-model="constructorData.source" class="radio-time" @change="timechange">
-                    <el-radio label="BI">
+                    <el-radio label="BI" disabled>
                       系统(BI)
                     </el-radio>
-                    <el-radio label="ies5">
+                    <el-radio label="ies">
                       IES5(代替)
                     </el-radio>
-                    <el-radio label="hita">
+                    <el-radio label="hita" disabled>
                       HiTA(代替)
                     </el-radio>
                   </el-radio-group>
@@ -426,7 +427,7 @@
                       预约时间发布
                     </el-radio>
                   </el-radio-group>
-                  <el-date-picker v-model="constructorData.time" :locale="locale"  value-format="YYYY-MM-DD HH:mm:ss"  type="datetime" placeholder="选择预约发布的时间" v-if="constructorData.timeType =='preordered'" />
+                  <el-date-picker v-model="constructorData.time" :locale="locale" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择预约发布的时间" v-if="constructorData.timeType =='preordered'" />
                 </div>
               </div>
             </div>
@@ -447,10 +448,12 @@ import { ref, getCurrentInstance, watch, onMounted, computed } from 'vue'
 import { ArrowRight, Search, User, Finished } from '@element-plus/icons-vue'
 import { ElMessageBox, ElMessage, ElLoading } from 'element-plus'
 import zhCn from "element-plus/lib/locale/lang/zh-cn";
+import { useRouter } from 'vue-router'
 let locale = zhCn
 let { proxy } = getCurrentInstance()
 let logoImg = require('@/assets/img/logox.png')
 let active = ref(0)
+let router = useRouter()
 //发送消息总信息
 let constructorData = ref({
   basic: {
@@ -468,11 +471,12 @@ let constructorData = ref({
     personage: [],
     batchPersonage: []
   },
-  receiveType: [],
+  receiveType: 'hita',
   source: '',
   timeType: 'immediately',      // immediately or preordered
   time: 0,
 })
+let clickname = ref('')
 //接受人群 (学区、学校列表)
 let allList = ref({
   allArea: [],
@@ -702,60 +706,66 @@ function pitchonly (val) {
 }
 //发布消息
 function publish () {
-  if(!constructorData.value.source){ 
-    ElMessage.error('请选择消息来源后,再执行发布消息操作') 
+  if (!constructorData.value.source) {
+    ElMessage.error('请选择消息来源后,再执行发布消息操作')
     return
   }
-  console.log(constructorData.value,receivedatas.value,'信息')
-  let data=constructorData.value
+  console.log(constructorData.value, receivedatas.value, '信息')
+  let data = constructorData.value
   //处理接受人群分类
-  let areaArr=[];let schoolArr=[];let personageArr=[];
-  receivedatas.value.forEach((item)=>{item.hasOwnProperty('dataType') ? item.dataType ==='area' ? areaArr.push(item.id):item.dataType ==='school' ? schoolArr.push(item.id):'':personageArr.push(item.id)})
-  let timePs=data.timeType === 'immediately' ? new Date().getTime():new Date(data.time).getTime()
-  let submitdata={
-          type:Number(data.basic.type)-1,
-          jumpUrl:data.basic.skipstate ? data.basic.skipUrl:'',
-          callbackUrl:data.basic.callbackstate ? data.basic.callbackFn:'',
-          theme:data.basic.title,
-          content:data.basic.content,
-          tmdIds:personageArr,
-          schoolIds:schoolArr,
-          areaIds:areaArr,
-          crowdType:data.receiveType,
-          sendTime:timePs,
-          source:data.source
-    }
+  let areaArr = []; let schoolArr = []; let personageArr = [];
+  receivedatas.value.forEach((item) => { item.hasOwnProperty('dataType') ? item.dataType === 'area' ? areaArr.push({ id: item.id, name: item.name }) : item.dataType === 'school' ? schoolArr.push({ id: item.id, name: item.name }) : '' : personageArr.push({ id: item.id, name: item.name }) })
+  let timePs = data.timeType === 'immediately' ? new Date().getTime() : new Date(data.time).getTime()
+  let submitdata = {
+    type: Number(data.basic.type) - 1,
+    jumpUrl: data.basic.skipstate ? data.basic.skipUrl : '',
+    callbackUrl: data.basic.callbackstate ? data.basic.callbackFn : '',
+    theme: data.basic.title,
+    content: data.basic.content,
+    tmdIds: personageArr,
+    schoolIds: schoolArr,
+    areaIds: areaArr,
+    crowdType: data.receiveType,
+    sendTime: timePs,
+    source: data.source,
+  }
+  if (personageArr.length === 0 && schoolArr.length === 0 && areaArr.length === 0) {
+    ElMessage.error('请选择正确的接收人群')
+    return
+  }
   console.log(submitdata)
-  proxy.$api.sendMsgs(submitdata).then((res)=>{
-    console.log(res,'发送消息返回')
-    res.state === 200 ? (ElMessage.success('消息发送成功'),clearData()):''
-  }).catch((error)=>{
+  proxy.$api.sendMsgs(submitdata).then((res) => {
+    console.log(res, '发送消息返回')
+    res.state === 200 ? (ElMessage.success('消息发送成功'), clearData()) : ''
+  }).catch((error) => {
     ElMessage.error('API异常,消息发送失败!')
   })
- }
+}
 //clear数据
-function clearData(){
-  constructorData.value.basic.title=''
-  constructorData.value.basic.content=''
-  constructorData.value.basic.content=0,
-  constructorData.value.basic.skipstate=false
-  constructorData.value.basic.skipUrl=''
-  constructorData.value.basic.callbackstate=false
-  constructorData.value.basic.callbackFn=''
-  constructorData.value.receivedata.area=[]
-  constructorData.value.receivedata.school=[]
-  constructorData.value.receivedata.personage=[]
-  constructorData.value.receivedata.batchPersonage=[]
-  constructorData.value.receiveType=[]
-  constructorData.value.source=''
-  constructorData.value.timeType='immediately'
-  constructorData.value.time=0
-receiveArr.value.listArea=[]
-receiveArr.value.listSchool=[]
-receiveArr.value.listPersonage=[]
-receiveArr.value.listBatchperson=[]
-active.value=0
-} 
+function clearData () {
+  constructorData.value.basic.title = ''
+  constructorData.value.basic.content = ''
+  constructorData.value.basic.skipstate = false
+  constructorData.value.basic.skipUrl = ''
+  constructorData.value.basic.callbackstate = false
+  constructorData.value.basic.callbackFn = ''
+  constructorData.value.receivedata.area = []
+  constructorData.value.receivedata.school = []
+  constructorData.value.receivedata.personage = []
+  constructorData.value.receivedata.batchPersonage = []
+  constructorData.value.receiveType = []
+  constructorData.value.source = ''
+  constructorData.value.timeType = 'immediately'
+  constructorData.value.time = 0
+  receiveArr.value.listArea = []
+  receiveArr.value.listSchool = []
+  receiveArr.value.listPersonage = []
+  receiveArr.value.listBatchperson = []
+  active.value = 0
+}
+function backtoindex () {
+  router.push('/home/pushmsg')
+}
 initSchool()
 </script>
 <style scoped>

+ 313 - 43
TEAMModelBI/ClientApp/src/view/systemConfig/pushmsg/index.vue

@@ -2,7 +2,7 @@
   <div class="msgbox">
     <div class="header">
       <div class="block">
-        <el-date-picker v-model="value1" type="daterange" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" :locale="locale" :disabled-date="disabledDate" />
+        <el-date-picker v-model="value1" type="daterange" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" :locale="locale" />
       </div>
       <div>
         <el-button type="primary" @click="skipcreated">
@@ -13,80 +13,177 @@
         </el-button>
       </div>
     </div>
-    <div class="center-table">
-      <el-table :data="tableData" style="width: 100%">
+    <div class="center-table" v-if="showState =='default'">
+      <el-table :data="tableData" style="width: 100%" height="82vh" v-loading="loading" element-loading-text="数据加载中..." empty-text="暂无消息数据">
         <el-table-column label="类型" align="center">
           <template #header>
-            <el-select v-model="tableSelect.value" class="m-2" placeholder="类型选择" size="small">
+            <el-select v-model="tableSelect.value" class="m-2" placeholder="类型选择" size="small" @change="changeTag">
               <el-option v-for="item in tableSelect.options" :key="item.value" :label="item.label" :value="item.value" />
             </el-select>
           </template>
           <template #default="scope">
-            <el-tag type="info" effect="dark" v-if="scope.row.type ===1">普通</el-tag>
-            <el-tag type="" effect="dark" v-if="scope.row.type ===2">提示</el-tag>
-            <el-tag type="success" effect="dark" v-if="scope.row.type ===3">特殊</el-tag>
+            <el-tag color="rgba(99, 205, 218,.5)" effect="dark" v-if="scope.row.type ===1">系统</el-tag>
+            <el-tag type="info" effect="dark" v-if="scope.row.type ===2">普通</el-tag>
+            <el-tag type="" effect="dark" v-if="scope.row.type ===3">提示</el-tag>
+            <el-tag type="success" effect="dark" v-if="scope.row.type ===4">特殊</el-tag>
           </template>
         </el-table-column>
         <el-table-column prop="theme" label="消息主题" align="center" />
         <el-table-column prop="content" label="消息内容" align="center" />
-        <el-table-column prop="address" label="接收" align="center">
+        <el-table-column prop="address" label="接收产品" align="center">
           <template #default="scope">
-            <el-tag class="ml-2 product-tag" v-for="(item,index) in scope.row.receive" :key="index" :type="item ==='HiTA'? 'success':item ==='HiTeach' ? '':'info'" size="small" effect="light ">{{item}}</el-tag>
+            <!-- <el-tag class="ml-2 product-tag" v-for="(item,index) in scope.row.crowd.types" :key="index" :type="item ==='hita5' || item ==='HiTA'? 'success':item ==='HiTeach' ? '':'info'" size="small" effect="light ">{{item}}</el-tag> -->
+            {{scope.row.crowd.types}}
           </template>
         </el-table-column>
         <el-table-column prop="time" label="时间" align="center" />
         <el-table-column label="操作" fixed="right" align="center">
-          <template #default>
+          <template #default="scope">
             <div class="look-btn">
-              <el-button type="primary" size="small">查看</el-button>
+              <el-button type="primary" size="small" @click="detailsMsg(scope.row)">查看</el-button>
             </div>
-            <div class="del-btn">
+            <!-- <div class="del-btn">
               <el-button type="danger" size="small">删除</el-button>
-            </div>
+            </div> -->
           </template>
         </el-table-column>
       </el-table>
     </div>
+    <div class="center-table" v-else-if="showState ==='details'">
+      <div class="detailsbox">
+        <div class="datumbox">
+          <div class="crowd">
+            <p class="result-title">接收人群</p>
+            <div class="crowdbox">
+              <el-tag class="crowd-tag" v-for="item in nowPitch.receive" :type="item.dataType ==='area' ? 'warning':item.dataType ==='school' ? 'success':'' ">
+                {{item.name}}
+              </el-tag>
+            </div>
+          </div>
+          <div class="type">
+            <p class="result-title">接收产品类型</p>
+            <div class="typebox">
+              <el-tag class="crowd-tag" v-for="item in nowPitch.crowd.types" :type="item ==='HiTeach' ? '':item ==='HiTA' ? 'success':item ==='IES5' ? 'info':''" effect="dark" round>
+                {{item}}
+              </el-tag>
+            </div>
+          </div>
+          <div class="push-content">
+            <p class="result-title">消息内容</p>
+            <div class="pushbox-content">
+              <div class="pushcontent">
+                <el-form :model="nowPitch" class="created-one-form" label-position="left">
+                  <el-form-item label="消息主题" prop="theme">
+                    <el-input v-model="nowPitch.theme" placeholder="请填写推送消息的主题" disabled />
+                  </el-form-item>
+                  <el-form-item label="消息内容" prop="content">
+                    <el-input v-model="nowPitch.content" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" placeholder="推送消息的内容" disabled />
+                  </el-form-item>
+                  <el-form-item label="消息类型" prop="content" class="form-type">
+                    <el-radio-group v-model="nowPitch.type" class="radio-type">
+                      <el-radio label="1" disabled>
+                        <el-tag color="rgba(99, 205, 218,.5)">系统型</el-tag>
+                      </el-radio>
+                      <el-radio label="2" disabled>
+                        <el-tag type="info">普通型</el-tag>
+                      </el-radio>
+                      <el-radio label="3" disabled>
+                        <el-tag>提示型</el-tag>
+                      </el-radio>
+                      <el-radio label="4" disabled>
+                        <el-tag type="success">特殊型</el-tag>
+                      </el-radio>
+                    </el-radio-group>
+                  </el-form-item>
+                  <el-form-item label="是否跳转" prop="content" class="skip-switch">
+                    <div class="skip-switch">
+                      <!-- <div class="skip-title">是否跳转地址</div> -->
+                      <div class="skip-content">
+                        <div>
+                          <el-switch v-model="nowPitch.skipstate" class="ml-2" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #b2bec3" disabled />
+                        </div>
+                      </div>
+                      <div class="skip-url" v-show="nowPitch.jumpUrl ? true:false">
+                        <el-input v-model="nowPitch.jumpUrl" placeholder="填写跳转地址" disabled />
+                      </div>
+                    </div>
+                  </el-form-item>
+                  <el-form-item label="回调执行" prop="content" class="skip-switch">
+                    <div class="skip-switch">
+                      <!-- <div class="skip-title">是否跳转地址</div> -->
+                      <div class="skip-content">
+                        <div>
+                          <el-switch v-model="nowPitch.callbackstate" class="ml-2" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #b2bec3" disabled />
+                        </div>
+                      </div>
+                      <div class="skip-functions" v-show="nowPitch.callbackUrl ? true:false">
+                        <el-input v-model="nowPitch.callbackUrl" placeholder="填写回调执行名称" disabled />
+                      </div>
+                    </div>
+                  </el-form-item>
+                  <el-form-item label="消息来源">
+                    <div class="sourcetitle">{{nowPitch.source}}</div>
+                  </el-form-item>
+                  <el-form-item label="发送时间">
+                    <div class="sourcetitle">{{nowPitch.time}}</div>
+                  </el-form-item>
+                </el-form>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="copybox">
+          <el-button>复用此条消息</el-button>
+        </div>
+        <div class="back">
+          <el-button @click="backs">返回列表</el-button>
+        </div>
+      </div>
+    </div>
   </div>
 </template>
 <script setup>
 import { ref, getCurrentInstance, watch, onMounted, } from 'vue'
 import { ChatDotSquare } from '@element-plus/icons-vue'
+import { ElMessageBox, ElMessage, ElLoading } from 'element-plus'
 import zhCn from "element-plus/lib/locale/lang/zh-cn";
 import { useRouter } from 'vue-router'
 let value1 = ref('')
+let { proxy } = getCurrentInstance()
 let locale = zhCn
 const router = useRouter()
-const tableData = [
-  {
-    theme: '测试主题1',
-    content: '测试内容123456789',
-    receive: ['HiTeach', 'HiTA'],
-    time: '2016-05-04',
-    type: 1
-  },
-  {
-    theme: '测试主题2',
-    content: '测试内容123456789',
-    receive: ['HiTA'],
-    time: '2016-05-04',
-    type: 2
-  },
-  {
-    theme: '测试主题3',
-    content: '测试内容123456789',
-    receive: ['HiTA'],
-    time: '2016-05-04',
-    type: 3
-  },
-  {
-    theme: '测试主题4',
-    content: '测试内容123456789',
-    receive: ['HiTA', 'HiTeach'],
-    time: '2016-05-04',
-    type: 1
-  }
-]
+let tableData = ref([
+  // {
+  //   theme: '测试主题1',
+  //   content: '测试内容123456789',
+  //   receive: ['HiTeach', 'HiTA'],
+  //   time: '2016-05-04',
+  //   type: 1
+  // },
+  // {
+  //   theme: '测试主题2',
+  //   content: '测试内容123456789',
+  //   receive: ['HiTA'],
+  //   time: '2016-05-04',
+  //   type: 2
+  // },
+  // {
+  //   theme: '测试主题3',
+  //   content: '测试内容123456789',
+  //   receive: ['HiTA'],
+  //   time: '2016-05-04',
+  //   type: 3
+  // },
+  // {
+  //   theme: '测试主题4',
+  //   content: '测试内容123456789',
+  //   receive: ['HiTA', 'HiTeach'],
+  //   time: '2016-05-04',
+  //   type: 1
+  // }
+])
+let originalData = ref([])
+let nowPitch = ref()
 const disabledDate = () => {
   let time = new Date()
   return time.getTime() > Date.now()
@@ -100,9 +197,63 @@ let tableSelect = ref({
     { value: 'special', label: '特殊' },
   ]
 })
+let showState = ref('default')
+let loading = ref(false)
 function skipcreated () {
   router.push('/home/createdpush')
 }
+function init () {
+  loading.value = true
+  proxy.$api.getMsglist({}).then((res) => {
+    console.log(res, '78787878787')
+    if (res.state === 200) {
+      res.bINotices.forEach((item) => {
+        item.time = proxy.$common.timestampToTime(item.sendTime, 'all');
+        item.type = Number(item.type) + 1
+        item.receive = []
+        item.crowd.areaIds.forEach((areas) => { item.receive.push({ id: areas.id, name: areas.name, dataType: 'area' }) })
+        item.crowd.schoolIds.forEach((school) => { item.receive.push({ id: school.id, name: school.name, dataType: 'school' }) })
+        item.crowd.tmdIds.forEach((tmdinfo) => { item.receive.push({ id: tmdinfo.id, name: tmdinfo.name, dataType: 'tmdinfo' }) })
+      })
+      console.log(res.bINotices, 'update')
+      tableData.value = res.bINotices
+      originalData.value = res.bINotices
+      loading.value = false
+    }
+  }).catch((err) => {
+    loading.value = false
+    ElMessage.error('获取消息列表异常,API异常')
+  })
+}
+function changeTag (val) {
+  console.log(val)
+  let values = val
+  if (values === 'all') {
+    tableData.value = originalData.value
+  } else if (values === 'common') {
+    tableData.value = originalData.value.filter((item) => { return item.type === 2 })
+  } else if (values === 'hint') {
+    tableData.value = originalData.value.filter((item) => { return item.type === 3 })
+  } else if (values === 'special') {
+    tableData.value = originalData.value.filter((item) => { return item.type === 4 })
+  }
+}
+function detailsMsg (val) {
+  val.skipstate = val.jumpUrl ? true : false
+  val.callbackstate = val.callbackUrl ? true : false
+  val.type = val.type.toString()
+  nowPitch.value = val
+  showState.value = 'details'
+  console.log(nowPitch.value, '详情')
+}
+function backs () {
+  showState.value = 'default'
+  init()
+}
+function copyReuse () {
+
+}
+init()
 </script>
 <style scoped>
 .msgbox {
@@ -139,9 +290,128 @@ function skipcreated () {
   overflow: hidden;
   margin-left: 0px;
 } */
+.detailsbox {
+  width: 100%;
+  height: 82vh;
+  padding: 1%;
+  background-color: #fff;
+  display: flex;
+}
+.datumbox {
+  width: 85%;
+  height: 100%;
+  /* margin: 0 auto; */
+  border: 1px solid #ccc;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  line-height: 20px;
+  /* box-shadow: 0px 5px 10px 0px rgba(204, 204, 204, 0.7); */
+}
+.type {
+  width: 35%;
+  height: 40%;
+}
+.crowd {
+  width: 65%;
+  height: 40%;
+  overflow: hidden;
+}
+.crowd {
+  border-right: 1px solid #ccc;
+}
+.push-content {
+  width: 100%;
+  height: 60%;
+  border-top: 1px solid #ccc;
+}
+.result-title {
+  font-size: 14px;
+  color: #b2bec3;
+  line-height: 28px;
+  position: sticky;
+  margin-bottom: 10px;
+  border-bottom: 1px dashed #ccc;
+  box-shadow: 0 2px 5px #e9e9e9;
+}
+.crowdbox {
+  margin: 1%;
+  /* border: 1px solid #ccc; */
+  line-height: 20px;
+  overflow-y: auto;
+  height: 15vh;
+}
+.crowd-tag {
+  margin: 0.5% 0.2%;
+}
+.pushcontent {
+  width: 85%;
+  margin: 0 auto;
+}
+.pushtime {
+  width: 85%;
+  margin: 0 auto;
+  font-weight: bold;
+  color: #409eff;
+  display: flex;
+  justify-content: space-between;
+}
+.back {
+  width: 5%;
+  text-align: center;
+}
+.copybox {
+  width: 10%;
+  margin-top: 3%;
+}
+.sourcetitle {
+  font-size: 14px;
+  font-weight: bold;
+  color: #95afc0;
+}
 </style>
 <style>
 .header .el-date-editor .el-range-separator {
   width: 10%;
 }
+.copybox .el-button {
+  color: rgba(255, 255, 255, 0.9);
+  border-radius: 20px;
+  /* width: 300px;
+  height: 100px; */
+  /* font-size: 30px; */
+  text-align: center;
+  /* line-height: 100px; */
+  background: linear-gradient(-45deg, #ffa63d, #ff3d77, #338aff, #3cf0c5);
+  background-size: 600%;
+  -webkit-animation: anime 6s linear infinite;
+  animation: anime 6s linear infinite;
+}
+@keyframes anime {
+  0% {
+    background-position: 0% 50%;
+  }
+
+  50% {
+    background-position: 100% 50%;
+  }
+
+  100% {
+    background-position: 0% 50%;
+  }
+}
+
+@-webkit-keyframes anime {
+  0% {
+    background-position: 0% 50%;
+  }
+
+  50% {
+    background-position: 100% 50%;
+  }
+
+  100% {
+    background-position: 0% 50%;
+  }
+}
 </style>

+ 28 - 6
TEAMModelBI/ClientApp/src/view/teachermanage/traitmanage.vue

@@ -131,7 +131,8 @@
     <div v-else-if="treeModel === 'tree'" class="treeinfo">
       <div class="synchronizationuIcon" v-show="nowPitch.hasOwnProperty('cutArea') && nowPitch.cutArea"><span>已同步省平台</span></div>
       <div class="backbtn">
-        <el-button type="primary" icon="el-icon-back" size="small" @click="treeModel = 'default'">返回</el-button>
+        <el-button type="primary" @click="treeModel = 'default'">返回</el-button>
+        <!-- <el-icon><Back /></el-icon> -->
       </div>
       <div class="ability-box">
         <div class="abilitys">
@@ -139,11 +140,26 @@
             <i class="dian"></i>
             <span class="tabname">{{ $t(`abilityManages.abilityname`) }}({{ abilitylenth }})</span>
             <span class="tabinfos">
-              <i class="el-icon-search" @click="operateModel = search"></i>
-              <i class="el-icon-s-tools" @click="setAbility" v-if="PowerShow && intactShow"></i>
-              <i class="el-icon-edit" @click="editAbility('redact')" v-if="PowerShow && intactShow"></i>
-              <i class="el-icon-delete-solid  deleAbility" @click="operationAbility('del')" v-if="PowerShow && intactShow"></i>
-              <i class="el-icon-plus" @click="editAbility('add')" v-if="PowerShow && intactShow"></i>
+              <!-- <i class="el-icon-search" ></i> -->
+              <el-icon @click="operateModel = search">
+                <Search />
+              </el-icon>
+              <!-- <i class="el-icon-s-tools" @click="setAbility" v-if="PowerShow && intactShow"></i> -->
+              <el-icon @click="setAbility" v-if="PowerShow && intactShow">
+                <Setting />
+              </el-icon>
+              <!-- <i class="el-icon-edit" @click="editAbility('redact')" v-if="PowerShow && intactShow"></i> -->
+              <el-icon @click="editAbility('redact')" v-if="PowerShow && intactShow">
+                <Edit />
+              </el-icon>
+              <!-- <i class="el-icon-delete-solid  deleAbility" @click="operationAbility('del')" v-if="PowerShow && intactShow"></i> -->
+              <el-icon class="deleAbility" @click="operationAbility('del')" v-if="PowerShow && intactShow">
+                <Delete />
+              </el-icon>
+              <!-- <i class="el-icon-plus" @click="editAbility('add')" v-if="PowerShow && intactShow"></i> -->
+              <el-icon @click="editAbility('add')" v-if="PowerShow && intactShow">
+                <Plus />
+              </el-icon>
             </span>
           </p>
           <p class="abilitys-one" v-if="operateModel === search">
@@ -374,9 +390,15 @@ import { useStore } from 'vuex'
 import AbilityTree from '@/components/AbilityTree.vue'
 import dimension from '@/static/dimension.js'
 import { ElMessage, ElMessageBox, ElLoading } from 'element-plus'
+import { Search, Setting, Edit, Delete, Plus } from '@element-plus/icons-vue'
 export default {
   components: {
     AbilityTree,
+    Search,
+    Setting,
+    Edit,
+    Delete,
+    Plus,
   },
   setup () {
     let { proxy } = getCurrentInstance()