liuhj 1 месяц назад
Родитель
Сommit
3929095e43

+ 95 - 3
src/assets/icon/demo_index.html

@@ -54,6 +54,30 @@
       <div class="content unicode" style="display: block;">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+              <span class="icon iconfont">&#xe602;</span>
+                <div class="name">文件</div>
+                <div class="code-name">&amp;#xe602;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe74e;</span>
+                <div class="name">添加</div>
+                <div class="code-name">&amp;#xe74e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe65f;</span>
+                <div class="name">添加</div>
+                <div class="code-name">&amp;#xe65f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe733;</span>
+                <div class="name">Pdf</div>
+                <div class="code-name">&amp;#xe733;</div>
+              </li>
+          
             <li class="dib">
               <span class="icon iconfont">&#xe607;</span>
                 <div class="name">客户资料</div>
@@ -246,9 +270,9 @@
 <pre><code class="language-css"
 >@font-face {
   font-family: 'iconfont';
-  src: url('iconfont.woff2?t=1710382466980') format('woff2'),
-       url('iconfont.woff?t=1710382466980') format('woff'),
-       url('iconfont.ttf?t=1710382466980') format('truetype');
+  src: url('iconfont.woff2?t=1761634331634') format('woff2'),
+       url('iconfont.woff?t=1761634331634') format('woff'),
+       url('iconfont.ttf?t=1761634331634') format('truetype');
 }
 </code></pre>
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -274,6 +298,42 @@
       <div class="content font-class">
         <ul class="icon_lists dib-box">
           
+          <li class="dib">
+            <span class="icon iconfont icon-wenjian"></span>
+            <div class="name">
+              文件
+            </div>
+            <div class="code-name">.icon-wenjian
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-tianjia"></span>
+            <div class="name">
+              添加
+            </div>
+            <div class="code-name">.icon-tianjia
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-a-chuangjiantianjiapiliangtianjia"></span>
+            <div class="name">
+              添加
+            </div>
+            <div class="code-name">.icon-a-chuangjiantianjiapiliangtianjia
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-Pdf"></span>
+            <div class="name">
+              Pdf
+            </div>
+            <div class="code-name">.icon-Pdf
+            </div>
+          </li>
+          
           <li class="dib">
             <span class="icon iconfont icon-kehuziliao"></span>
             <div class="name">
@@ -562,6 +622,38 @@
       <div class="content symbol">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-wenjian"></use>
+                </svg>
+                <div class="name">文件</div>
+                <div class="code-name">#icon-wenjian</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-tianjia"></use>
+                </svg>
+                <div class="name">添加</div>
+                <div class="code-name">#icon-tianjia</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-a-chuangjiantianjiapiliangtianjia"></use>
+                </svg>
+                <div class="name">添加</div>
+                <div class="code-name">#icon-a-chuangjiantianjiapiliangtianjia</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-Pdf"></use>
+                </svg>
+                <div class="name">Pdf</div>
+                <div class="code-name">#icon-Pdf</div>
+            </li>
+          
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#icon-kehuziliao"></use>

+ 7 - 3
src/assets/icon/iconfont.css

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "iconfont"; /* Project id 3950759 */
-  src: url('iconfont.woff2?t=1710382466980') format('woff2'),
-       url('iconfont.woff?t=1710382466980') format('woff'),
-       url('iconfont.ttf?t=1710382466980') format('truetype');
+  src: url('iconfont.woff2?t=1761634331634') format('woff2'),
+       url('iconfont.woff?t=1761634331634') format('woff'),
+       url('iconfont.ttf?t=1761634331634') format('truetype');
 }
 
 .iconfont {
@@ -13,6 +13,10 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.icon-wenjian:before {
+  content: "\e602";
+}
+
 .icon-kehuziliao:before {
   content: "\e607";
   margin-right: 5px;

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
src/assets/icon/iconfont.js


+ 28 - 0
src/assets/icon/iconfont.json

@@ -5,6 +5,34 @@
   "css_prefix_text": "icon-",
   "description": "",
   "glyphs": [
+    {
+      "icon_id": "1118",
+      "name": "文件",
+      "font_class": "wenjian",
+      "unicode": "e602",
+      "unicode_decimal": 58882
+    },
+    {
+      "icon_id": "26179141",
+      "name": "添加",
+      "font_class": "tianjia",
+      "unicode": "e74e",
+      "unicode_decimal": 59214
+    },
+    {
+      "icon_id": "36747428",
+      "name": "添加",
+      "font_class": "a-chuangjiantianjiapiliangtianjia",
+      "unicode": "e65f",
+      "unicode_decimal": 58975
+    },
+    {
+      "icon_id": "6376410",
+      "name": "Pdf",
+      "font_class": "Pdf",
+      "unicode": "e733",
+      "unicode_decimal": 59187
+    },
     {
       "icon_id": "714274",
       "name": "客户资料",

BIN
src/assets/icon/iconfont.ttf


BIN
src/assets/icon/iconfont.woff


BIN
src/assets/icon/iconfont.woff2


+ 3 - 6
src/components/OP/GroupProgress.vue

@@ -4,7 +4,7 @@
             <el-form style="display: flex;justify-content: space-between;align-items: center;" :inline="true" :model="formInline" class="demo-form-inline">
                 <el-form-item>
                     <el-select filterable @change="GetGroupNameList" v-model="diid" placeholder="团组名称" style="width: 250px;">
-                        <el-option v-for="(item, index) in AuditStatus" :key="index" :label="item.groupName"
+                        <el-option :style="item.hasProcess?'color: #409EFF;':''" v-for="(item, index) in AuditStatus" :key="index" :label="item.groupName"
                             :value="item.id"></el-option>
                     </el-select>
                 </el-form-item>
@@ -255,16 +255,13 @@ export default {
         GetGroupNameList(){
             this.progressloading=true;
             this.AuditStatus=[];
-            var url = "/api/Business/GetGroupNameList"
+            var url = "/api/Groups/GroupProcessGroupNames"
             var that = this
             this.$axios({
-                method: 'post',
+                method: 'get',
                 url: url,
                 headers: {
                     Authorization: 'Bearer '
-                },
-                data:{
-                    portType:1,
                 }
             }).then(function (res) {
                 if(res.data.code==200){

+ 207 - 33
src/components/home.vue

@@ -1,12 +1,27 @@
 <template>
   <div class="all-box">
+    <el-dialog :close-on-click-modal="false" title="提醒录入费用列表" :visible.sync="homeVisible">
+      <div style="color: red;font-size: 14px;font-weight: 600;">PS: 请确认以下团组是否发生成本,有的话请及时录入成本费用,以便于财务收款!</div>
+      <el-table height="500px" border :data="gridData" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55"></el-table-column>
+        <el-table-column property="groupName" label="团组名称"></el-table-column>
+        <el-table-column property="visitDate" label="出访日期">
+          <template slot-scope="scope">
+           {{processingdate(scope.row.visitDate)}}
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" width="120px">
+          <template slot-scope="scope">
+            <el-button size="mini" @click="Confirmknow(scope.row.id)" type="primary">无成本费用</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div style="margin-top: 15px;text-align: right;">
+        <el-button @click="Confirmknow('批量')" type="primary">无成本费用(批量)</el-button>
+      </div>
+    </el-dialog>
     <div class="home-dialog">
-      <el-dialog
-       :close-on-click-modal="false"
-      top="0"
-      title="系统通知"
-      :visible.sync="dialogVisible"
-      width="30%">
+      <el-dialog :close-on-click-modal="false" top="0" title="系统通知" :visible.sync="dialogVisible" width="30%">
         <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
           <el-tab-pane v-for="(msgitem,index) in msgtype" :key="index" :label="msgitem.id+''" :name="msgitem.name">
             <span slot="label">
@@ -16,8 +31,8 @@
           </el-tab-pane>
           <div class="msg-box">
             <div class="read-btn">
-              <el-button type="primary" @click="taskclicks(2)"  size="mini" :plain="tasknobtn" >未读</el-button>
-              <el-button type="primary" @click="taskclicks(3)" size="mini" :plain="taskbtn" >已读</el-button>
+              <el-button type="primary" @click="taskclicks(2)" size="mini" :plain="tasknobtn">未读</el-button>
+              <el-button type="primary" @click="taskclicks(3)" size="mini" :plain="taskbtn">已读</el-button>
             </div>
             <div class="scroll-box">
               <div class="news-box" v-for="(item,index) in msglist" :key="index">
@@ -34,12 +49,14 @@
                     <div v-if="type==1020">发布时间: {{item.releaseTime}}</div>
                     <div v-if="type!=1020">发送时间: {{item.releaseTime}}</div>
                   </div>
-                  <div v-if="type==1020" class="news-list-btn" >
-                    <el-button @click="DeleMsg(index,item)" size="mini" v-if="item.isRead==0" type="primary">前往任务</el-button>
+                  <div v-if="type==1020" class="news-list-btn">
+                    <el-button @click="DeleMsg(index,item)" size="mini" v-if="item.isRead==0"
+                      type="primary">前往任务</el-button>
                     <el-button v-if="item.isRead==1" size="mini" type="info">已读任务</el-button>
                   </div>
-                  <div v-else class="news-list-btn" >
-                    <el-button @click="DeleMsg(index,item)" size="mini" v-if="item.isRead==0" type="primary">确认已读</el-button>
+                  <div v-else class="news-list-btn">
+                    <el-button @click="DeleMsg(index,item)" size="mini" v-if="item.isRead==0"
+                      type="primary">确认已读</el-button>
                     <el-button v-if="item.isRead==1" size="mini" type="info">已读</el-button>
                   </div>
                 </div>
@@ -60,7 +77,7 @@
     </div>
     <el-container class="all">
       <el-aside class="delwh menubar">
-        <div  ref="haeds" class="user">
+        <div ref="haeds" class="user">
           <div class="user-box">
             <div class="user-img">
               <img src="../assets/logo2.png" />
@@ -86,8 +103,8 @@
             </div>
           </div>
         </div>
-        <el-menu :style="gaodu" :default-active="indexs" class="el-menu-vertical-demo meun-ul" @open="handleOpen" @close="handleClose"
-          :collapse="isCollapse">
+        <el-menu :style="gaodu" :default-active="indexs" class="el-menu-vertical-demo meun-ul" @open="handleOpen"
+          @close="handleClose" :collapse="isCollapse">
           <el-menu-item v-for="(item, filindex) in filmenuList" :key="filindex + '/'"
             :index="item.modulid + '-' + item.pageList[0].pageid" @click="toURLs($event.index, item)">
             <i :class="iconfont+item.remark"></i>
@@ -118,6 +135,9 @@
             <div class="header-title">首页</div>
           </div>
           <div class="name-box">
+            <div class="instrument" @click="Openitactively">
+              <i class="iconfont icon-wenjian"></i>
+            </div>
             <div class="instrument" @click="instrumentclick('.instrument-box', $event)">
               <i class="iconfont icon-shiyonggongju"></i>
             </div>
@@ -137,13 +157,13 @@
             <div class="instrument-box-title">实用工具</div>
             <div class="instrument-box-inif">
               <div class="box-inif-ul">
-                <div @click="gptdialogbtn('KIMI')"  class="box-inif-li">
+                <div @click="gptdialogbtn('KIMI')" class="box-inif-li">
                   <div class="inif-li-img">
                     <img src="../assets/kimi.png" alt="" />
                   </div>
                   <div class="inif-li-text">KIMI</div>
                 </div>
-                <div @click="gptdialogbtn('有道')"  class="box-inif-li">
+                <div @click="gptdialogbtn('有道')" class="box-inif-li">
                   <div class="inif-li-img">
                     <img src="../assets/youdao.png" alt="" />
                   </div>
@@ -180,17 +200,14 @@
           </div>
         </el-header>
         <div class="Jumplists">
-          <el-breadcrumb separator="|"
-          class="Jumparr-ul"
-          @mousedown.native="downCursor"
-          @mousemove.native="moveCursor"
-          :style="{transform: 'translateX('+disX+'px)'}"
-          >
-            <el-breadcrumb-item  v-for="(item,index) in Jumparr" :key="index" :to="{ path: '/home'+item.webUrl }">
+          <el-breadcrumb separator="|" class="Jumparr-ul" @mousedown.native="downCursor" @mousemove.native="moveCursor"
+            :style="{transform: 'translateX('+disX+'px)'}">
+            <el-breadcrumb-item v-for="(item,index) in Jumparr" :key="index" :to="{ path: '/home'+item.webUrl }">
               <div class="Jumparr-li" :class="{'activeCss':activeVar==item.indexs}" @click="SelectJump(item,index)">
                 <div style="display: flex;align-items: center;">
                   <div>{{item.pageName}}</div>
-                  <div v-if="!item.pageName.includes('主页')" @click.stop="Jumparrdel(item,index)" class="Jumparr-cha">✖</div>
+                  <div v-if="!item.pageName.includes('主页')" @click.stop="Jumparrdel(item,index)" class="Jumparr-cha">✖
+                  </div>
                   <div v-else class="Jumparr-chas"></div>
                 </div>
               </div>
@@ -198,7 +215,7 @@
           </el-breadcrumb>
         </div>
         <el-main style="height: 100%;">
-          <router-view  @transfer="getUser"/> 
+          <router-view @transfer="getUser" />
         </el-main>
       </el-container>
     </el-container>
@@ -264,12 +281,27 @@ export default {
       Jumparrbox:'',
       disX:0,
       disXs:0,
+
+
+      ///定时访问
+      currentTime: '',
+      nextExecution: '',
+      status: '等待中',
+      timer: null,
+      gridData:[],
+      homeVisible:false,
+      multipleSelection:[],
     };
   },
   // components: {
   //   child
   // },
   methods: {
+    //处理日期
+    processingdate(vals){
+        vals=vals+""
+        return vals.split(' ')[0]
+    },
     //鼠标按下事件
     downCursor(e){
       this.Cursoridentification=true;
@@ -302,7 +334,7 @@ export default {
     },
     moveCursor(e){
       // if (this.Cursoridentification==true) {
-      //   let moveX = e.clientX - this.disXs;
+      //   let moveX = e.clien tX - this.disXs;
       //   console.log(moveX);
         
       //   if (moveX <= 0) {
@@ -485,6 +517,45 @@ export default {
       this.pageIndex++
       this.PotsMessagePageList()
     },
+    //确认知晓
+    Confirmknow(val){
+      var arrdiid=[];
+      if (val=='批量') {
+        arrdiid=this.multipleSelection.map(item=>item.id)
+        if (arrdiid.length==0) {
+          this.$message.error("请至少选择一条数据进行确认知晓!");
+          return
+        }
+      }else{
+        arrdiid.push(val)
+      }
+      var url = "/api/Groups/FeeEntryAcknowledgeCrate"
+      var that = this
+      this.$axios({
+          method: 'post',
+          url: url,
+          headers: {
+              Authorization: 'Bearer ' + that.token
+          },
+          data:{
+            currUserId:that.userId,
+            groupIds:arrdiid,
+            daysAgo:10
+          }
+      }).then(function (res) {
+          if(res.data.code==200){
+            that.$message({
+              type: 'success',
+              message: res.data.msg
+            });
+            that.gridData=res.data.data.groupNames;
+          }else{
+            that.$message.error(res.data.msg);
+          }
+      }).catch(function (error) {
+          that.$message.error("获取消息列表失败!");
+      });
+    },
     //消息list
     PotsMessagePageList(){
       console.log(this.type)
@@ -723,7 +794,95 @@ export default {
         this.activeVar=this.Jumparr[0].indexs;
       }
       // this.activeVar= JSON.parse(localStorage.getItem('activeVar')) || 0;
-    }
+    },
+
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+      console.log(this.multipleSelection);
+      
+    },
+    //10点钟定时
+    getNextExecutionTime() {
+      const now = new Date()
+      const targetTime = new Date()
+      // 设置目标时间为今天的10:00:00
+      targetTime.setHours(10, 0, 0, 0)
+      // 如果今天10点已过,设置为明天10点
+      if (now > targetTime) {
+        targetTime.setDate(targetTime.getDate() + 1)
+      }
+      return targetTime
+    },
+    
+    calculateTimeUntilNext() {
+      const now = new Date()
+      const nextTime = this.getNextExecutionTime()
+      const diff = nextTime - now
+      
+      return {
+        nextTime,
+        diff
+
+      }
+    },
+    
+    async executeTask() {
+      try {
+        this.status = '执行每日任务中...'
+        var that = this;
+        this.$axios({ 
+          method: 'get',
+          url: '/api/Groups/GetGroupNamesByUserId?currUserId='+this.userId+'&daysAgo=8',
+           
+        }).then(function (res) {
+          console.log(res);
+          if(res.data.code==200){
+            that.gridData=res.data.data.groupNames;
+            that.homeVisible=res.data.data.isTips;
+          }
+        })
+        this.status = `今日任务已完成 (${new Date().toLocaleTimeString()})`
+        // 重新设置下一次执行
+        this.scheduleNextExecution()
+      } catch (error) {
+        console.error('任务执行失败:', error)
+        this.status = '执行失败,1分钟后重试'
+        setTimeout(this.scheduleNextExecution, 60000)
+      }
+    },
+    Openitactively(){
+      this.homeVisible = true;
+      var that = this;
+      this.$axios({
+        method: 'get',
+        url: '/api/Groups/GetGroupNamesByUserId?currUserId=' + this.userId + '&daysAgo=8',
+
+      }).then(function (res) {
+        console.log(res);
+        if (res.data.code == 200) {
+          that.gridData = res.data.data.groupNames;
+          that.homeVisible = res.data.data.isTips;
+        }
+      })
+    },
+    scheduleNextExecution() {
+      const { nextTime, diff } = this.calculateTimeUntilNext()
+      this.nextExecution = nextTime.toLocaleString()
+      this.status = `等待下一次执行 (${Math.round(diff/1000/60)}分钟后)`
+      // 清除之前的定时器
+      if (this.timer) {
+        clearTimeout(this.timer)
+      }
+      // 设置新的定时器
+      this.timer = setTimeout(() => {
+        this.executeTask()
+      }, diff)
+    },
+    
+    updateCurrentTime() {
+      this.currentTime = new Date().toLocaleString()
+    },
+    //ding
   },
   mounted() {
     
@@ -739,19 +898,31 @@ export default {
     
     this.PotsMsgTypeData();
 
-    let timer = setInterval(() => {
+    let timers = setInterval(() => {
       this.PotsMessageUnreadTotalCount();
     }, 10000)
     this.$once('hook:beforeDestroy', () => {
-      clearInterval(timer)
-      timer = null
+      clearInterval(timers)
+      timers = null
     })
+
+    // 每秒更新当前时间
+    setInterval(this.updateCurrentTime, 1000)
+    this.updateCurrentTime()
+    
+    // 开始调度
+    this.scheduleNextExecution()
     // setTimeout(this.PotsMessagePageList(),500)
     // this.setIntervaltime();
     // setInterval(this.PotsMessageUnreadTotalCount, 10000);
     // setInterval(this.PsotMsgPageList, 3000);
     // this.chatHub();
   },
+  beforeUnmount(){
+    if (this.timer) {
+      clearTimeout(this.timer)
+    }
+  },
   created() {
     this.userId=JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
     this.sex=JSON.parse(localStorage.getItem('userinif')).userInfo.sex;
@@ -1123,10 +1294,13 @@ html {
 }
 
 i.icon-shiyonggongju {
-  font-size: 32px;
+  font-size: 31px;
   color: #2198f3;
 }
-
+i.icon-wenjian {
+    font-size: 31px;
+    color: #2198f3;
+}
 i.icon-tongzhi {
   font-size: 32px;
   color: #2198f3;