Browse Source

Merge branch 'redUrgent' into mergeBranch

qymljy 9 months ago
parent
commit
8467ccb108

+ 17 - 1
src/SManagement/orderclue/components/file/index2.vue

@@ -8,7 +8,9 @@
       :style="[
         {'width': auto ? '100%' : '300px'},
         {'margin-right':marginRight + 'px'},
-        {'margin-bottom':marginRight + 'px'}
+        {'margin-bottom':marginBottom + 'px'},
+         {'margin-top':marginTop + 'px'},
+        {'border':'1px solid #CCCCCC'}
       ]"
     >
       <div class="left">
@@ -75,6 +77,20 @@ export default {
         return 0
       }
     },
+    /* 块margin-top */
+    marginTop: {
+      type:Number,
+      default () {
+        return 0
+      }
+    },
+    /* 块margin-bottom */
+    marginBottom: {
+      type:Number,
+      default () {
+        return 0
+      }
+    },
   },
   components: {
     SeeFile,

+ 25 - 14
src/SManagement/orderclue_detail/components/editFollow.vue

@@ -1,6 +1,8 @@
 <template>
   <div class="follow" style="margin-right:10px">
-    <el-button size="mini" type="text" @click="followBtn" :disabled="disabled">编辑</el-button>
+    <el-button size="mini" type="text" @click="followBtn" :disabled="disabled">
+      <svg t="1727070702944" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12802" width="14" height="14"><path d="M319.122286 565.101714a8.265143 8.265143 0 0 0-1.609143 2.852572l-51.2 188.928a32.109714 32.109714 0 0 0 39.277714 39.350857l187.538286-51.2h0.658286a8.118857 8.118857 0 0 0 5.851428-2.413714l501.540572-501.467429a80.457143 80.457143 0 0 0 23.04-57.344 98.011429 98.011429 0 0 0-29.257143-68.681143l-47.396572-47.469714a98.157714 98.157714 0 0 0-68.681143-29.257143 80.457143 80.457143 0 0 0-57.856 23.698286L319.853714 563.712c-0.512 0.512-0.365714 1.170286-0.731428 1.755429m632.685714-373.028572l-49.810286 49.810286-80.969143-81.92 49.078858-49.078857a23.332571 23.332571 0 0 1 31.744 2.267428l47.396571 47.469715a25.819429 25.819429 0 0 1 7.753143 17.993142 19.090286 19.090286 0 0 1-5.412572 13.604572m-543.524571 380.342857l361.764571-361.545143 80.457143 82.066286-360.521143 361.252571z m-65.828571 146.724571l26.185142-95.963428 69.778286 69.778286z m641.170285-328.704a34.742857 34.742857 0 0 0-34.596571 34.669715v467.894857a44.470857 44.470857 0 0 1-44.470857 44.397714H113.590857a44.544 44.544 0 0 1-44.470857-44.397714V130.486857a44.544 44.544 0 0 1 44.470857-44.470857h509.366857a34.596571 34.596571 0 0 0 0-69.193143H108.324571A108.544 108.544 0 0 0-0.073143 125.220571v773.558858a108.544 108.544 0 0 0 108.397714 108.397714h801.353143a108.470857 108.470857 0 0 0 108.397715-108.397714V426.130286a34.669714 34.669714 0 0 0-34.596572-34.450286" fill="#999999" p-id="12803"></path></svg>
+      <span style="color: #333333;font-size: 14px;margin-left: 5px;vertical-align: middle">编辑</span></el-button>
     <el-drawer title="线索跟进" append-to-body :visible.sync="dialogVisible" size="600px" :before-close="handleClose" :show-close="false">
       <div class="drawer__panel">
         <el-form :model="param" :rules="rules" ref="ruleForm" label-width="110px" class="demo-ruleForm"
@@ -42,6 +44,8 @@
           </file-item>
           <upload
               ref="upload"
+              @clickUpload="loading = true"
+              @uploadEnd="loading = false"
               :folderid="folderid"
               @onSuccess="onSuccess"
               :bindData=" {ownertable: 'sat_ordercluefollowuplog', ownerid: data.sat_ordercluefollowuplogid,usetype: 'default'}"
@@ -51,7 +55,7 @@
 
       </div>
       <div class="fixed__btn__panel">
-        <el-button size="small" @click="dialogVisible = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" @click="dialogVisible = false" class="normal-btn-width" :disabled="loading">取 消</el-button>
         <el-button size="small" type="primary" @click="followAction" class="normal-btn-width" :loading="loading">确 定</el-button>
       </div>
     </el-drawer>
@@ -143,10 +147,8 @@ export default {
     },
     followBtn () {
       this.dialogVisible = true
-      console.log(this.data,'可编辑的数据')
       this.getFollowType()
       this.param = Object.assign({},this.param,this.data)
-      console.log(this.param)
     },
     handleClose () {
       this.dialogVisible = false
@@ -154,6 +156,7 @@ export default {
     followAction () {
       this.$refs.ruleForm.validate(async val => {
         if (!val) return
+        this.loading = true
         this.param.sat_orderclueid = this.detailInfo.sat_orderclueid
         this.param.createdate = this.timer
         this.param.createdate = `${this.timer.getFullYear()}-${this.timer.getMonth() + 1}-${this.timer.getDate()} ${this.timer.getHours()}:${this.timer.getMinutes()}:${this.timer.getSeconds()}`
@@ -161,17 +164,25 @@ export default {
           "id":20221208100602,
           "content": this.param
         })
-        this.bindData = {
-          "ownertable": 'sat_ordercluefollowuplog',
-          "ownerid": res.data.sat_ordercluefollowuplogid,
-          "usetype": 'default',
-        }
-        this.loading = true
-        this.$refs['upload'].toUpload(() => {
+        if (res.code == 0){
           this.loading = false
-          this.$emit('onSuccess')
-          this.dialogVisible = false
-        })
+          this.tool.showMessage(res,()=>{})
+        }else {
+          this.tool.showMessage(res,()=>{
+            this.bindData = {
+              "ownertable": 'sat_ordercluefollowuplog',
+              "ownerid": res.data.sat_ordercluefollowuplogid,
+              "usetype": 'default',
+            }
+            this.loading = false
+            this.$refs['upload'].toUpload(() => {
+              this.loading = false
+              this.$emit('onSuccess')
+              this.dialogVisible = false
+            })
+          })
+        }
+
       })
     },
     onSuccess () {

+ 263 - 65
src/SManagement/orderclue_detail/components/followDetail.vue

@@ -2,77 +2,151 @@
   <div>
     <div class="select"  style="margin-top: -12px">
       <span class="demonstration">日期范围:</span>
-      <time-select @clearSelect="clearSelect" @timeChange="timeChange"></time-select>
+      <time-select class="inline-16" @clearSelect="clearSelect" @timeChange="timeChange"></time-select>
+      <el-input style="width: 200px" placeholder="搜索" :suffix-icon="search?search.length > 0?'':'':'el-icon-search'" v-model="search" @keyup.native.enter="searchChange" @clear="searchChange" size="small" class="input-with-select inline-16 layout_search__panel" clearable>
+      </el-input>
     </div>
     <div style="height:calc(100vh - 340px);overflow: auto;margin-top: 10px" v-if="follow.length > 0">
-      <el-timeline  style="margin: 10px" v-for="item in follow" :key="item.index">
-        <el-timeline-item :timestamp="item.createdate" placement="top"  color="#409eff">
-          <el-card class="card-border">
-            <el-row>
-              <el-col :span="16">
-                <div class="avatar">
-                  <img class="avatar__image" v-if="item.headpic" :src="item.headpic" alt="">
-                  <p v-else>{{item.createby.substr(0, 1)}}</p>
-                </div>
-                <div style="float:left;margin-left: 10px!important;">
-                  <p>{{ item.createby }}&nbsp;</p>
-                  <small style="color:#999999ad;margin-top:10px">部门:{{ item.depname?item.depname:"--" }}&emsp;职位:{{ item.position?item.position:"--" }}</small>
-                </div>
-              </el-col>
-              <el-col :span="8">
-                <div style="float: right;">
-                  <editFollow :data="item" @onSuccess="onSuccess" :disabled="disabled" v-if="!disabled "></editFollow>
-                  <upload
-                      v-if="!disabled"
-                      class="inline-16"
-                      ref="upload"
-                      :folderid="folderid"
-                      @onSuccess="onSuccess"
-                      :id="item.sat_ordercluefollowuplogid"
-                      :disabled="disabled"
-                      type="button">
-                  </upload>
-                  <el-button size="small" type="text" @click="onDel(item.sat_ordercluefollowuplogid)" :disabled="disabled" v-if="!disabled">删除</el-button>
-                </div>
-              </el-col>
-              <el-col :span="24">
-                <div style="float: left;margin-top: 10px">
-                  <p>跟进类型:{{item.followupmode}}</p>
-                </div>
-              </el-col>
-              <el-col :span="24">
-                <div class="div-border">
-                  {{item.content}}
+      <el-timeline>
+        <el-card v-for="item in follow" :key="item.index" shadow="hover" class="card-style">
+          <div style="display: flex;justify-content: space-between;align-items: center;margin-top: -5px">
+            <div class="dateLine">
+              <div class="div"></div>
+              <span class="span margin-5">{{item.createdate}}</span>
+            </div>
+            <div style="display: flex;align-items: center">
+              <div class="inline-16">
+                <el-button type="text" size="small" @click="commentClick(item)">
+                  <svg t="1727055468269" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#999999" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#999999" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#999999" p-id="11649"></path></svg>
+                  <span style="font-size: 14px;color: #3874F6;margin-left: 5px;vertical-align: middle">评论({{item.commentqty}})</span></el-button>
+              </div>
+              <marketingExpenses class="inline-16" ownertable="sat_orderclue" :ownerid="item.sat_ordercluefollowuplogid" :dataTime="item.createdate" :userid="item.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+              <upload
+                  v-if="!disabled && item.createuserid == userid"
+                  class="inline-16"
+                  ref="upload"
+                  :folderid="folderid"
+                  @onSuccess="onSuccess"
+                  :id="item.sat_ordercluefollowuplogid"
+                  :disabled="disabled"
+                  type="button">
+              </upload>
+              <editFollow :data="item" @onSuccess="onSuccess" :disabled="disabled" v-if="!disabled && item.createuserid == userid"></editFollow>
+              <el-button size="small" type="text" @click="onDel(item.sat_ordercluefollowuplogid)" :disabled="disabled" v-if="!disabled && item.createuserid == userid">
+                <svg t="1727070817000" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13097" width="14" height="14"><path d="M343.113143 156.379429h333.897143v-73.142858H343.113143v73.142858zM677.010286 0a83.456 83.456 0 0 1 83.456 83.456v64.146286h215.917714a46.299429 46.299429 0 1 1 0 92.672h-48.64v700.196571a83.456 83.456 0 0 1-83.456 83.456H176.128a83.456 83.456 0 0 1-83.456-83.456V240.054857H47.542857a46.299429 46.299429 0 0 1 0-92.452571h212.114286v-64.146286A83.456 83.456 0 0 1 343.113143 0h333.897143z m156.525714 241.371429H186.587429v688.859428h647.021714v-689.005714zM384.877714 345.6a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.691428-41.764571z m250.441143 0a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.545142-41.764571z" fill="#999999" p-id="13098"></path></svg>
+                <span style="font-size: 14px;color: #333;margin-left: 5px;vertical-align: middle">删除</span></el-button>
+
+            </div>
+          </div>
+          <el-divider></el-divider>
+          <div style="padding: 10px">
+            <div style="display:flex;">
+              <div class="avatar">
+                <img class="avatar__image" v-if="item.headpic" :src="item.headpic" alt="">
+                <p v-else>{{item.createby.substr(0, 1)}}</p>
+              </div>
+              <div style="float:left;margin-left: 10px!important;">
+                <p>{{ item.createby }}&nbsp;</p>
+                <small style="color:#999999ad;margin-top:10px">部门:{{ item.depname?item.depname:"--" }}&emsp;职位:{{ item.position?item.position:"--" }}</small>
+              </div>
+            </div>
+            <div style="margin-top: 10px;margin-bottom: 10px">
+              <p>跟进类型:{{item.followupmode}}</p>
+            </div>
+            <div style="margin-top: 10px;margin-bottom: 10px">
+              <p>跟进内容:{{item.content}}</p>
+            </div>
+            <div style="float: left">营销费用:</div>
+            <div style="float: left">
+              <div v-if="item.salesfeesamount || item.salesfeesamount == 0">
+                <span style="color: red">¥ </span>
+                <span style="font-size: 14px;color: red">{{tool.formatAmount(item.salesfeesamount,2)}}</span>
+              </div>
+              <div v-else>--</div>
+            </div>
+            <div v-if="item.attinfo" style="margin-bottom: 10px">
+              <file-item
+                  :marginRight="21"
+                  :margin-top="10"
+                  :rowCount="5"
+                  :isDownLoad="true"
+                  :fileData="item.attinfo"
+                  :isDelete="!disabled && item.createuserid == userid"
+                  @deleteSuccess="deleteFile">
+              </file-item>
+            </div>
+          </div>
+          <div style="padding: 10px" v-if="item.sat_ordercluefollowuplogid == sat_ordercluefollowuplogid">
+            <div style="border: 1px solid #9ca3af;padding: 10px;border-radius: 5px">
+              <el-input type="textarea" style="border: none;margin-bottom: 10px" :rows="1" v-model="content" placeholder="我评论:"></el-input>
+              <el-divider></el-divider>
+              <div style="display: flex;justify-content: right">
+                <el-button   type="primary" size="small" :disabled="content.length == 0" @click="onComment(item)">发布</el-button>
+              </div>
+            </div>
+          </div>
+          <div v-if="item.sat_ordercluefollowuplogid == sat_ordercluefollowuplogid && item.comment.length > 0" style="padding: 0 10px 10px 10px">
+            <div style="max-height: 360px;min-height:200px;background: #F5F5F5;border-radius: 2px;padding: 10px;overflow:auto">
+              <div style="color: #333;font-size: 16px;font-weight: bold">评论({{item.commentqty}})</div>
+              <div v-for="t in item.comment" :key="item.index" style="margin-top: 10px">
+                <div style="color: #333;font-size: 14px;font-weight: bold;margin-top: 5px">{{t.createby}}</div>
+                <div style="color:#666;font-size: 14px;margin-top: 5px">{{t.content}}</div>
+                <div style="display: flex;justify-content: space-between;align-items: center;margin-top: -5px;margin-bottom: -5px">
+                  <div style="display: flex;justify-content: space-between;align-items: center">
+                    <div style="font-size: 12px;color: #999">{{t.createdate}}</div>
+                    <el-button type="text" size="small" class="margin-5" v-if="userid == t.createuserid"><svg t="1727053625238" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11334" width="14" height="14"><path d="M343.113143 156.379429h333.897143v-73.142858H343.113143v73.142858zM677.010286 0a83.456 83.456 0 0 1 83.456 83.456v64.146286h215.917714a46.299429 46.299429 0 1 1 0 92.672h-48.64v700.196571a83.456 83.456 0 0 1-83.456 83.456H176.128a83.456 83.456 0 0 1-83.456-83.456V240.054857H47.542857a46.299429 46.299429 0 0 1 0-92.452571h212.114286v-64.146286A83.456 83.456 0 0 1 343.113143 0h333.897143z m156.525714 241.371429H186.587429v688.859428h647.021714v-689.005714zM384.877714 345.6a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.691428-41.764571z m250.441143 0a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.545142-41.764571z" fill="#999999" p-id="11335"></path></svg>
+                      <span style="color: #666666;font-size: 14px;margin-left: 5px;vertical-align: middle" @click="onCommentsDel(t)">删除</span></el-button>
+                  </div>
+                  <div>
+                    <el-button type="text"  v-if="!isContentShow" size="small" @click="isContentShow = true;sys_datacommentid = t.sys_datacommentid">
+                      <svg t="1727055468269" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#3874F6" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11649"></path></svg>
+                      <span style="color: #3874F6;font-size: 14px;margin-left: 5px;vertical-align: middle">回复</span></el-button>
+                    <el-button type="text"  v-if="isContentShow" size="small" @click="isContentShow = false;sys_datacommentid = ''">
+                      <svg t="1727055468269" class="icon" viewBox="0 0 1024 1024" version="1.1" style="vertical-align: middle" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#3874F6" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11649"></path></svg>
+                      <span style="color: #3874F6;font-size: 14px;margin-left: 5px;vertical-align: middle">取消回复</span></el-button>
+                  </div>
                 </div>
-              </el-col>
-              <el-col :span="24" >
-                <div v-if="item.attinfo" style="margin-top: 20px;margin-bottom: -10px">
-                  <file-item
-                      :marginRight="10"
-                      :rowCount="5"
-                      :isDownLoad="true"
-                      :fileData="item.attinfo"
-                      :isDelete="!disabled"
-                      @deleteSuccess="deleteFile">
-                  </file-item>
+                <div style="border: 1px solid #9ca3af;padding: 10px;border-radius: 5px" v-if="isContentShow && sys_datacommentid == t.sys_datacommentid">
+                  <el-input type="textarea" style="border: none;margin-bottom: 10px" :rows="1" v-model="replyContent" :placeholder="'我回复'+t.createby+':'"></el-input>
+                  <el-divider></el-divider>
+                  <div style="display: flex;justify-content: right">
+                    <el-button   type="primary" size="small" :disabled="replyContent.length == 0" @click="onReply(item.sat_ordercluefollowuplogid,t)">发布</el-button>
+                  </div>
                 </div>
-              </el-col>
-              <el-col :span="24">
-                <div style="float: left;margin-top: 10px" class="inline-16">
-                  <div style="float: left">营销费用:</div>
-                  <div style="float: left">
-                    <div v-if="item.salesfeesamount || item.salesfeesamount == 0">
-                      <span style="color: red">¥ </span>
-                      <span style="font-size: 12px;color: red">{{tool.formatAmount(item.salesfeesamount,2)}}</span>
+                <div v-if="t.subcomment.length > 0" style="margin-left: 10px">
+                  <div v-for="k in t.subcomment" :key="k.index">
+                    <div style="display: flex;justify-content: left;align-items: center">
+                      <div style="font-size: 14px;font-weight: bold;color:#333;margin-top: 5px;vertical-align: middle">{{k.createby}}</div><i style="margin: 5px 10px 0 10px;vertical-align: middle"  class="el-icon-caret-right"></i><div style="margin-top: 5px;font-size: 14px;font-weight: bold;color:#333;vertical-align: middle">{{k.replyusername}}</div>
+                    </div>
+                    <div style="color:#666;font-size: 14px;margin-top: 5px">{{k.content}}</div>
+                    <div style="display: flex;justify-content: space-between;align-items: center;margin-top: -5px;margin-bottom: -5px">
+                      <div style="display: flex;justify-content: space-between;align-items: center">
+                        <div style="font-size: 12px;color:#999;margin-right: 10px">{{k.createdate}}</div>
+                        <el-button type="text" size="small" v-if="userid == k.createuserid"><svg t="1727053625238" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11334" width="14" height="14"><path d="M343.113143 156.379429h333.897143v-73.142858H343.113143v73.142858zM677.010286 0a83.456 83.456 0 0 1 83.456 83.456v64.146286h215.917714a46.299429 46.299429 0 1 1 0 92.672h-48.64v700.196571a83.456 83.456 0 0 1-83.456 83.456H176.128a83.456 83.456 0 0 1-83.456-83.456V240.054857H47.542857a46.299429 46.299429 0 0 1 0-92.452571h212.114286v-64.146286A83.456 83.456 0 0 1 343.113143 0h333.897143z m156.525714 241.371429H186.587429v688.859428h647.021714v-689.005714zM384.877714 345.6a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.691428-41.764571z m250.441143 0a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.545142-41.764571z" fill="#999999" p-id="11335"></path></svg>
+                          <span style="color: #666666;font-size: 14px;margin-left: 5px" @click="onCommentsDel(k)">删除</span></el-button>
+                      </div>
+                      <div>
+                        <el-button  type="text" v-if="!isContentShow"  size="small" @click="isContentShow = true;sys_datacommentid = k.sys_datacommentid">
+                          <svg t="1727055468269" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#3874F6" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11649"></path></svg>
+                          <span style="color: #3874F6;font-size: 14px;margin-left: 5px;vertical-align: middle">回复</span></el-button>
+                        <el-button type="text" v-if="isContentShow" size="small" @click="isContentShow = false;sys_datacommentid = ''">
+                          <svg t="1727055468269" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#3874F6" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11649"></path></svg>
+                          <span style="color: #3874F6;font-size: 14px;margin-left: 5px;vertical-align: middle">取消回复</span></el-button>
+                      </div>
+                    </div>
+                    <div style="border: 1px solid #9ca3af;padding: 10px;border-radius: 5px" v-if="isContentShow && sys_datacommentid == k.sys_datacommentid">
+                      <el-input type="textarea" style="border: none;margin-bottom: 10px" :rows="1" v-model="replyContent" :placeholder="'我回复'+k.createby+':'"></el-input>
+                      <el-divider></el-divider>
+                      <div style="display: flex;justify-content: right">
+                        <el-button   type="primary" size="small" :disabled="replyContent.length == 0" @click="onReply(item.sat_ordercluefollowuplogid,k)">发布</el-button>
+                      </div>
                     </div>
-                    <div v-else>--</div>
                   </div>
                 </div>
-                <marketingExpenses style="margin-top: 8px" class="inline-16" ownertable="sat_orderclue" :ownerid="item.sat_ordercluefollowuplogid" :dataTime="item.createdate" :userid="item.createuserid" @onSuccess="onSuccess"></marketingExpenses>
-              </el-col>
-            </el-row>
-          </el-card>
-        </el-timeline-item>
+              </div>
+            </div>
+          </div>
+        </el-card>
       </el-timeline>
     </div>
     <div style="margin-top:16px;margin-bottom:-10px;text-align:right" v-if="follow.length > 0">
@@ -104,6 +178,7 @@ export default {
     return {
       bindData:{},
       folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid,
+      commentShowId:'',
       param: {
         "id": "20221101094602",
         "version":1,
@@ -135,7 +210,16 @@ export default {
       follow:[],
       timeArr:[],
       attinfo:[],
-      total:0
+      total:0,
+      search:'',
+      commentqty:0,
+      content:'',
+      isShow:false,
+      sys_datacommentid:'',
+      isContentShow:false,
+      replyContent:'',
+      sat_ordercluefollowuplogid:'',
+      userid:JSON.parse(sessionStorage.getItem('active_account')).userid,
     };
   },
   components:{ TimeSelect , FileItem,upload,editFollow,marketingExpenses},
@@ -172,6 +256,12 @@ export default {
       this.param.content.where.start = result[0]
       this.param.content.where.end = result[1]
       this.param.content.pageNumber = 1
+      this.param.content.where.condition = this.search
+      this.getFollowDetail()
+    },
+    searchChange(){
+      this.param.content.pageNumber = 1
+      this.param.content.where.condition = this.search
       this.getFollowDetail()
     },
     sortFun() {
@@ -200,6 +290,64 @@ export default {
       this.param.content.pageNumber = val
       this.getFollowDetail()
     },*/
+    async onComment(data){
+      const res = await this.$api.requested({
+        "id": 20240429161601,
+        "content": {
+          "ownertable":'sat_ordercluefollowuplog',//数据表
+          "ownerid":data.sat_ordercluefollowuplogid,//数据id
+          "content":this.content,//内容
+          "replyid":"0"//被回复评论id
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.content = ''
+        this.sat_ordercluefollowuplogid = ''
+        this.getFollowDetail()
+      })
+    },
+    async onReply(id,data){
+      console.log(id,data)
+      const res = await this.$api.requested({
+        "id": 20240429161601,
+        "content": {
+          "ownertable":'sat_ordercluefollowuplog',//数据表
+          "ownerid":id,//数据id
+          "content":this.replyContent,//内容
+          "replyid":data.sys_datacommentid//被回复评论id
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.replyContent = ''
+        this.isContentShow = false
+        this.sys_datacommentid = ''
+        this.getFollowDetail()
+      })
+    },
+    onCommentsDel(data){
+      console.log(data,'删除')
+      this.$confirm('确定删除该评论吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(async() => {
+        const res = await this.$api.requested({
+          "id": 20240429161701,
+          "content": {
+            "sys_datacommentid":data.sys_datacommentid
+          }
+        })
+        this.tool.showMessage(res,()=>{
+          this.getFollowDetail()
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        });
+      });
+
+    },
     onDel(id){
       this.$confirm('确定删除该跟进记录吗?', '提示', {
         confirmButtonText: '确定',
@@ -222,6 +370,13 @@ export default {
         });
       });
     },
+    commentClick(i){
+      if (this.sat_ordercluefollowuplogid == i.sat_ordercluefollowuplogid){
+        this.sat_ordercluefollowuplogid = ''
+      }else {
+        this.sat_ordercluefollowuplogid =  i.sat_ordercluefollowuplogid
+      }
+    },
     onSuccess () {
       this.getFollowDetail()
       this.$emit('onSuccess')
@@ -231,6 +386,18 @@ export default {
 </script>
 
 <style scoped>
+/deep/ .el-card__body {
+  padding: 0;
+}
+/deep/ .el-card:hover{
+  border: 1px solid #3874F6;
+}
+/deep/ .el-divider--horizontal {
+  display: block;
+  height: 1px;
+  width: 100%;
+  margin:0 0 10px 0 ;
+}
 *{
   box-sizing: border-box;
 }
@@ -282,4 +449,35 @@ export default {
   /deep/.el-card__body {
     padding: 10px;
   }
+.margin-5{
+  margin-left: 5px;
+}
+.padding-style{
+  padding: 0 10px 10px 10px;
+.span-style{
+  color: #999999;
+  font-size: 14px
+};
+}
+.card-style{
+  margin-bottom: 10px;
+.dateLine{
+  margin-bottom: 10px;
+  padding: 10px 10px 0 10px;
+  display: flex;
+  justify-content: left;
+  align-items: center;
+.div{
+  width: 8px;
+  height:8px;
+  border: 2px solid #3874F6;
+  background: #FFFFFF;
+  border-radius: 40px;
+}
+.span{
+  color: #3874F6;
+}
+}
+
+}
 </style>

+ 153 - 56
src/SManagement/orderclue_detail/components/followDetailCopy.vue

@@ -1,57 +1,109 @@
 <template>
-  <div class="normal-card" style="padding-right:0">
-    <el-descriptions>
-      <div slot="title">跟进记录 &nbsp;<i @click="sortFun" :class="param.content.sort[0].reversed == 1?'fa fa-sort-amount-asc':'fa fa-sort-amount-desc'"></i></div>
-    </el-descriptions>
-    <div class="select">
+  <div>
+    <div class="select"  style="margin-top: -12px">
       <span class="demonstration">日期范围:</span>
       <time-select @clearSelect="clearSelect" @timeChange="timeChange"></time-select>
     </div>
-    <div class="detail" v-if="follow.length > 0">
-      <div class="item" v-for="(item,index) in follow" :key="index">
-        <p>{{index + 1}}.{{item.createdate}},&nbsp;由<span style="font-weight:bold;margin:0 6px;font-size:13px">{{item.createby}}</span>开始跟进,跟进方式:<span style="font-weight:bold;margin:0 5px">{{item.followupmode}}</span>{{handleTxt[item.logtype]}}</p>
-
-        <div class="content">
-          <el-button type="text">删除</el-button>
-          <div style="margin-bottom:10px">
-            <p v-if="item.competitor">已购买品牌:{{item.competitor}}</p>
-            {{item.content}}
-          </div>
-          <file-item
-            :marginRight="10"
-            :rowCount="5"
-            :isDownLoad="true"
-            :fileData="item.attinfo"
-            @deleteSuccess="deleteFile">
-          </file-item>
-        </div>
-      </div>
+    <div style="height:calc(100vh - 340px);overflow: auto;margin-top: 10px" v-if="follow.length > 0">
+      <el-timeline  style="margin: 10px" v-for="item in follow" :key="item.index">
+        <el-timeline-item :timestamp="item.createdate" placement="top"  color="#409eff">
+          <el-card class="card-border">
+            <el-row>
+              <el-col :span="16">
+                <div class="avatar">
+                  <img class="avatar__image" v-if="item.headpic" :src="item.headpic" alt="">
+                  <p v-else>{{item.createby.substr(0, 1)}}</p>
+                </div>
+                <div style="float:left;margin-left: 10px!important;">
+                  <p>{{ item.createby }}&nbsp;</p>
+                  <small style="color:#999999ad;margin-top:10px">部门:{{ item.depname?item.depname:"--" }}&emsp;职位:{{ item.position?item.position:"--" }}</small>
+                </div>
+              </el-col>
+              <el-col :span="8">
+                <div style="float: right;">
+                  <editFollow :data="item" @onSuccess="onSuccess" :disabled="disabled" v-if="!disabled "></editFollow>
+                  <upload
+                      v-if="!disabled"
+                      class="inline-16"
+                      ref="upload"
+                      :folderid="folderid"
+                      @onSuccess="onSuccess"
+                      :id="item.sat_ordercluefollowuplogid"
+                      :disabled="disabled"
+                      type="button">
+                  </upload>
+                  <el-button size="small" type="text" @click="onDel(item.sat_ordercluefollowuplogid)" :disabled="disabled" v-if="!disabled">删除</el-button>
+                </div>
+              </el-col>
+              <el-col :span="24">
+                <div style="float: left;margin-top: 10px">
+                  <p>跟进类型:{{item.followupmode}}</p>
+                </div>
+              </el-col>
+              <el-col :span="24">
+                <div class="div-border">
+                  {{item.content}}
+                </div>
+              </el-col>
+              <el-col :span="24" >
+                <div v-if="item.attinfo" style="margin-top: 20px;margin-bottom: -10px">
+                  <file-item
+                      :marginRight="10"
+                      :rowCount="5"
+                      :isDownLoad="true"
+                      :fileData="item.attinfo"
+                      :isDelete="!disabled"
+                      @deleteSuccess="deleteFile">
+                  </file-item>
+                </div>
+              </el-col>
+              <el-col :span="24">
+                <div style="float: left;margin-top: 10px" class="inline-16">
+                  <div style="float: left">营销费用:</div>
+                  <div style="float: left">
+                    <div v-if="item.salesfeesamount || item.salesfeesamount == 0">
+                      <span style="color: red">¥ </span>
+                      <span style="font-size: 12px;color: red">{{tool.formatAmount(item.salesfeesamount,2)}}</span>
+                    </div>
+                    <div v-else>--</div>
+                  </div>
+                </div>
+                <marketingExpenses style="margin-top: 8px" class="inline-16" ownertable="sat_orderclue" :ownerid="item.sat_ordercluefollowuplogid" :dataTime="item.createdate" :userid="item.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+              </el-col>
+            </el-row>
+          </el-card>
+        </el-timeline-item>
+      </el-timeline>
     </div>
-    <el-empty title="暂无数据" v-else></el-empty>
-    <div style="margin-top:16px;text-align:right">
+    <div style="margin-top:16px;margin-bottom:-10px;text-align:right" v-if="follow.length > 0">
       <el-pagination
-      background
-      small
-      @size-change="handleSizeChange"
-      @current-change="handleCurrentChange"
-      :current-page="param.content.pageNumber"
-      :page-size="param.content.pageSize"
-      layout="total, prev, pager, next"
-      :total="total">
+          background
+          small
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="param.content.pageNumber"
+          :page-size="param.content.pageSize"
+          layout="total, prev, pager, next"
+          :total="total">
       </el-pagination>
     </div>
+    <el-empty title="暂无数据" v-if="follow.length === 0"></el-empty>
   </div>
 </template>
 
 <script>
 import FileItem from '../../orderclue/components/file/index2'
-
+import upload from './uploadNew.vue'
+import editFollow from './editFollow'
 import TimeSelect from '@/SManagement/submitedit_one/components/TimeSelect'
-import { log } from '@antv/g2plot/lib/utils';
+import marketingExpenses from '@/components/marketingExpenses/index'
 export default {
   name: 'followDetail',
+  props:['disabled','data'],
   data() {
     return {
+      bindData:{},
+      folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid,
       param: {
         "id": "20221101094602",
         "version":1,
@@ -82,10 +134,11 @@ export default {
       },
       follow:[],
       timeArr:[],
+      attinfo:[],
       total:0
     };
   },
-  components:{ TimeSelect , FileItem},
+  components:{ TimeSelect , FileItem,upload,editFollow,marketingExpenses},
   computed:{
   },
   watch:{
@@ -102,7 +155,7 @@ export default {
         item.attinfo = this.fileType.fileList(item.attinfo)
       })
       this.param.content.sort = res.sort
-      console.log(this.follow);
+
 
     },
     handleCurrentChange(n) {
@@ -142,10 +195,36 @@ export default {
       this.param.content.pageSize = val
       this.getFollowDetail()
     },
-    handleCurrentChange(val) {
+   /* handleCurrentChange(val) {
       // console.log(`当前页: ${val}`);
       this.param.content.pageNumber = val
       this.getFollowDetail()
+    },*/
+    onDel(id){
+      this.$confirm('确定删除该跟进记录吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(async () => {
+        const res = await this.$api.requested({
+          "id": 20221208112002,
+          "content": {
+            "sat_ordercluefollowuplogid":id
+          }
+        })
+        this.tool.showMessage(res,()=>{
+          this.getFollowDetail()
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        });
+      });
+    },
+    onSuccess () {
+      this.getFollowDetail()
+      this.$emit('onSuccess')
     },
   },
 };
@@ -155,34 +234,52 @@ export default {
 *{
   box-sizing: border-box;
 }
-  .normal-card .title {
-    font-size: 16px;
-    color: #000000;
-    font-weight: bold;
-  }
-  .normal-card .select {
-    margin: 25px 10px 15px 0;
+  .select{
     display: flex;
     align-items: center;
   }
-  .normal-card .select .demonstration {
+  .demonstration {
     font-size: 14px;
     margin-right: 10px;
   }
-  .normal-card .detail {
-    font-size: 14px;
-    overflow-y: scroll;
-    height: calc(100vh - 400px);
-    padding-right: 10px;
+  .avatar__image{
+    height: 100%;
+    width: 100%;
+  }
+  .avatar:hover .avatar__model{
+    display: block;
+  }
+  .avatar{
+    position: relative;
+    float: left;
+    margin-left: 0px;
+    height:40px;
+    width: 40px;
+    margin-bottom: 5px;
+    border-radius: 100%;
+    text-align: center;
+    line-height: 40px;
+    color:#fff;
+    font-weight: 500;
+    background: #3874F6;
+    cursor: pointer;
+    overflow: hidden;
   }
-  .normal-card .detail .content {
-    margin: 10px 0 16px 0;
+  .card-border{
     background: #F2F2F2;
-    padding: 16px;
+  }
+  .card-border .div-border{
+    background: #FFFFFF;
+    margin-top: 20px;
+    padding: 10px;
+    width: 100%;
+    height: 90px;
     border-radius: 5px;
-    font-size: 14px;
   }
   /deep/.el-descriptions__header {
     margin-bottom: 0 !important;
   }
+  /deep/.el-card__body {
+    padding: 10px;
+  }
 </style>

+ 2 - 0
src/SManagement/orderclue_detail/components/upload.vue

@@ -56,6 +56,7 @@ export default {
   },
   methods: {
     onChange (file,filelist) {
+      this.$emit('clickUpload')
       this.fileList.push(file)
       console.log(this.fileList);
 
@@ -75,6 +76,7 @@ export default {
         let postfix = file.name.substr(file.name.lastIndexOf('.') + 1)
 
         that.fileLinkList.push(that.fileType.fileList([{document:file.name,url:result,type:file.type,name:file.name,postfix:postfix}])[0])
+        that.$emit('uploadEnd')
         console.log(that.fileLinkList);
 
       }

+ 4 - 1
src/SManagement/orderclue_detail/components/uploadNew.vue

@@ -22,7 +22,9 @@
       :show-file-list="false"
       :auto-upload="false"
       multiple>
-      <el-button size="small" type="text" v-loading.fullscreen.lock="fullscreenLoading" :disabled="disabled">上传附件</el-button>
+      <el-button size="small" type="text" v-loading.fullscreen.lock="fullscreenLoading" :disabled="disabled">
+        <svg t="1727070968047" class="icon" viewBox="0 0 1055 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13346" width="14" height="14"><path d="M1012.809143 684.982857a42.861714 42.861714 0 0 0-41.837714 41.837714 154.916571 154.916571 0 0 1-139.629715 167.424h-577.828571a154.331429 154.331429 0 0 1-139.264-167.424 42.861714 42.861714 0 0 0-41.837714-41.837714 42.861714 42.861714 0 0 0-41.837715 41.837714 238.299429 238.299429 0 0 0 223.305143 251.245715h577.828572a238.299429 238.299429 0 0 0 223.232-251.245715 42.861714 42.861714 0 0 0-42.130286-41.837714z" fill="#999999" p-id="13347"></path><path d="M569.051429 57.270857a47.250286 47.250286 0 0 0-61.293715 0L348.745143 216.356571a41.472 41.472 0 0 0 58.514286 58.514286l86.601142-86.528V662.674286a41.837714 41.837714 0 1 0 83.602286 0V188.342857l86.528 86.528a41.472 41.472 0 1 0 58.514286-58.514286z" fill="#999999" p-id="13348"></path></svg>
+        <span style="font-size: 14px;color: #333;margin-left: 5px;vertical-align: middle">上传附件</span></el-button>
     </el-upload>
   </div>
 </template>
@@ -151,6 +153,7 @@ export default {
       if (res.code ===  1) {
         this.fullscreenLoading = false
         this.$emit('onSuccess',res)
+
         this.fileList = []
         this.fileLinkList = []
       }

+ 3 - 1
src/components/marketingExpenses/index.vue

@@ -1,6 +1,8 @@
 <template>
   <div>
-    <el-button type="text" @click="onShow" size="mini">营销费用明细></el-button>
+    <el-button type="text" @click="onShow" size="mini">
+      <svg t="1727063099768" class="icon" viewBox="0 0 1027 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12550" width="14" height="14"><path d="M291.648 112.448h697.6c19.2 0 38.4 19.2 38.4 38.4s-19.2 32-38.4 32h-697.6c-19.2 0-38.4-19.2-38.4-38.4s19.2-32 38.4-32z m-147.2-76.8h-70.4c-38.4 0-70.4 32-70.4 70.4v76.8c0 38.4 32 70.4 70.4 70.4h70.4c38.4 0 70.4-32 70.4-70.4v-70.4c6.4-44.8-25.6-76.8-70.4-76.8z m0 147.2h-70.4v-70.4h70.4v70.4z m147.2 294.4h256c19.2 0 38.4 19.2 38.4 38.4s-19.2 32-38.4 32h-256c-19.2 0-38.4-19.2-38.4-38.4s19.2-32 38.4-32z m-147.2-76.8h-70.4c-38.4 0-70.4 32-70.4 70.4v70.4c0 38.4 32 70.4 70.4 70.4h70.4c38.4 0 70.4-32 70.4-70.4v-64c6.4-44.8-25.6-76.8-70.4-76.8z m0 147.2h-70.4v-70.4h70.4v70.4z m147.2 294.4h256c19.2 0 38.4 19.2 38.4 38.4s-19.2 38.4-38.4 38.4h-256c-19.2 0-38.4-19.2-38.4-38.4s19.2-38.4 38.4-38.4z m-147.2-76.8h-70.4c-38.4 0-70.4 32-70.4 70.4v70.4c0 38.4 32 70.4 70.4 70.4h70.4c38.4 0 70.4-32 70.4-70.4v-70.4c6.4-32-25.6-70.4-70.4-70.4z m0 147.2h-70.4v-70.4h70.4v70.4z m550.4-147.2h294.4c19.2 0 38.4 19.2 38.4 38.4s-19.2 38.4-38.4 38.4h-294.4c-19.2 0-38.4-19.2-38.4-38.4s19.2-38.4 38.4-38.4z m0-140.8h294.4c19.2 0 38.4 19.2 38.4 38.4s-19.2 32-38.4 32h-294.4c-19.2 0-38.4-19.2-38.4-38.4s19.2-32 38.4-32z" fill="#999999" p-id="12551"></path><path d="M880.448 950.848v-326.4c0-19.2-19.2-38.4-38.4-38.4s-38.4 19.2-38.4 38.4v326.4c0 19.2 19.2 38.4 38.4 38.4s38.4-19.2 38.4-38.4z" fill="#999999" p-id="12552"></path><path d="M835.648 682.048l179.2-179.2c12.8-19.2 12.8-38.4-6.4-51.2-12.8-12.8-32-12.8-51.2 0l-179.2 179.2c-19.2 12.8-19.2 38.4-6.4 51.2 12.8 19.2 38.4 19.2 64 0-6.4 6.4-6.4 0 0 0z" fill="#999999" p-id="12553"></path><path d="M848.448 682.048l-179.2-179.2c-12.8-19.2-12.8-38.4 6.4-51.2 12.8-12.8 32-12.8 51.2 0l179.2 179.2c12.8 19.2 12.8 38.4-6.4 51.2-12.8 12.8-38.4 12.8-51.2 0z" fill="#999999" p-id="12554"></path></svg>
+      <span style="font-size: 14px;color: #333333;margin-left: 5px;vertical-align: middle">费用明细</span></el-button>
     <el-dialog
       :title="title"
       :visible.sync="dialogVisible"

+ 8 - 3
src/components/normal-basic-layout-new/details/modules/followUp/addLog.vue

@@ -44,6 +44,8 @@
           <el-form-item>
             <upload
               ref="upload"
+              @clickUpload="loading = true"
+              @uploadEnd="loading = false"
               :folderid="folderid"
               @onSuccess="onSuccess"
               :bindData="bindData"
@@ -55,8 +57,8 @@
         </el-form>
       </div>
       <div class="fixed__btn__panel">
-        <el-button size="small" @click="onClose">取 消</el-button>
-        <el-button type="warning" size="small" @click="submitLog">保 存</el-button>
+        <el-button size="small" @click="onClose" :disabled="loading">取 消</el-button>
+        <el-button type="warning" size="small" @click="submitLog" :loading="loading">保 存</el-button>
       </div>
     </el-drawer>
   </div>
@@ -76,6 +78,7 @@ export default {
   data () {
     return {
       dialogFormVisible:false,
+      loading:false,
       form:{
         content:'',
         type:'',
@@ -134,7 +137,7 @@ export default {
           "content": {
             "sys_datafollowupid":0,
             "ownertable":this.ownertable,
-            "ownerid":this.ownerid,
+            "ownerid":this.$route.query.id,
             "type":this.form.type,
             "content":this.form.content,
             "target":this.form.target,//目的
@@ -163,7 +166,9 @@ export default {
 
     },
     onSuccess() {
+      console.log('上传成功了')
       this.$emit('onSuccess')
+      this.loading = false
       this.dialogFormVisible = false
     },
     onSelect(row){

+ 18 - 8
src/components/normal-basic-layout-new/details/modules/followUp/editLog.vue

@@ -1,6 +1,8 @@
 <template>
   <div class="inline-16">
-    <el-button icon="el-icon-edit" type="text" size="mini" @click="onShow(dialogFormVisible = true)" :disabled="status === '已结案' || status === '已失败'">编 辑</el-button>
+    <el-button type="text" size="mini" @click="onShow(dialogFormVisible = true)" :disabled="status === '已结案' || status === '已失败'">
+      <svg t="1727058404479" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12347" width="14" height="14"><path d="M319.122286 565.101714a8.265143 8.265143 0 0 0-1.609143 2.852572l-51.2 188.928a32.109714 32.109714 0 0 0 39.277714 39.350857l187.538286-51.2h0.658286a8.118857 8.118857 0 0 0 5.851428-2.413714l501.540572-501.467429a80.457143 80.457143 0 0 0 23.04-57.344 98.011429 98.011429 0 0 0-29.257143-68.681143l-47.396572-47.469714a98.157714 98.157714 0 0 0-68.681143-29.257143 80.457143 80.457143 0 0 0-57.856 23.698286L319.853714 563.712c-0.512 0.512-0.365714 1.170286-0.731428 1.755429m632.685714-373.028572l-49.810286 49.810286-80.969143-81.92 49.078858-49.078857a23.332571 23.332571 0 0 1 31.744 2.267428l47.396571 47.469715a25.819429 25.819429 0 0 1 7.753143 17.993142 19.090286 19.090286 0 0 1-5.412572 13.604572m-543.524571 380.342857l361.764571-361.545143 80.457143 82.066286-360.521143 361.252571z m-65.828571 146.724571l26.185142-95.963428 69.778286 69.778286z m641.170285-328.704a34.742857 34.742857 0 0 0-34.596571 34.669715v467.894857a44.470857 44.470857 0 0 1-44.470857 44.397714H113.590857a44.544 44.544 0 0 1-44.470857-44.397714V130.486857a44.544 44.544 0 0 1 44.470857-44.470857h509.366857a34.596571 34.596571 0 0 0 0-69.193143H108.324571A108.544 108.544 0 0 0-0.073143 125.220571v773.558858a108.544 108.544 0 0 0 108.397714 108.397714h801.353143a108.470857 108.470857 0 0 0 108.397715-108.397714V426.130286a34.669714 34.669714 0 0 0-34.596572-34.450286" fill="#999999" p-id="12348"></path></svg>
+      <span style="font-size: 14px;color: #333;margin-left: 5px;vertical-align: middle">编辑</span></el-button>
     <el-drawer title="编辑跟进动态" size="600px" append-to-body :visible.sync="dialogFormVisible" @close="onClose">
       <div class="drawer__panel">
         <el-form ref="form" :model="form" label-position="top" label-width="80px">
@@ -53,6 +55,7 @@
           </div>
           <upload
             :folderid="folderid"
+            @upload="loading = true"
             btntype="icon"
             @onSuccess="onSuccess"
             :hidemediastock="false"
@@ -61,8 +64,8 @@
         </el-form>
       </div>
       <div class="fixed__btn__panel">
-        <el-button size="small" @click="onClose">取 消</el-button>
-        <el-button type="warning" size="small" @click="submitLog">保 存</el-button>
+        <el-button size="small" @click="onClose" :disabled="loading">取 消</el-button>
+        <el-button type="warning" size="small" @click="submitLog" :loading="loading">保 存</el-button>
       </div>
     </el-drawer>
   </div>
@@ -82,6 +85,7 @@ export default {
   data () {
     return {
       dialogFormVisible:false,
+      loading:false,
       sys_enterpriseid:'',
       form:{
         content:'',
@@ -109,9 +113,10 @@ export default {
       const res = await this.$store.dispatch('optiontypeselect','followuptype')
       this.followUpType = res.data
     },
-    onSuccess(res) {
-      res.attinfos = JSON.parse(res.attinfos)
+    onSuccess(res,type) {
+      res.attinfos = type == '删除'?res.attinfos:JSON.parse(res.attinfos)
       this.attachmentids = [...this.attachmentids,...res.attinfos.data]
+      this.loading = false
       this.$emit('onSuccess')
     },
 
@@ -127,7 +132,7 @@ export default {
           "content": {
             "sys_datafollowupid":this.data.sys_datafollowupid,
             "ownertable":this.ownertable,
-            "ownerid":this.ownerid,
+            "ownerid":this.$route.query.id,
             "type":this.form.type,
             "content":this.form.content,
             "target":this.form.target,//目的
@@ -173,8 +178,13 @@ export default {
           "linksids":[row.linksid]
         }
       })
-      this.tool.showMessage(res,()=>{
-        this.queryLogs()
+      this.tool.showMessage(res,async ()=>{
+        this.data.attinfos.forEach(item=>{
+          if (item.rowindex == row.rowindex){
+            console.log('删除')
+            this.data.attinfos.splice(item,1)
+          }
+        })
       })
     },
     onSelect(row){

+ 295 - 131
src/components/normal-basic-layout-new/details/modules/followUp/followUp.vue

@@ -1,153 +1,194 @@
 <template>
   <div class="normal-panel follow__panel" id="containerFull">
-    <div class="container flex-align-center flex-between">
+    <div class="container flex-align-center flex-between" style="padding: 10px 10px 0 10px !important;">
       <div>
         <slot name="collapse"></slot>
         <p class="inline-16">跟进动态</p>
       </div>
       <div style="display: flex;justify-content: space-between">
         <fullScreen class="inline-16" domId="containerFull" @onFull="onFull" @backFull="backFull"></fullScreen>
-        <addLog :ownertable="ownertable" :ownerid="owneridNew" @onSuccess="queryLogs" :status="status"></addLog>
+        <addLog :ownertable="ownertable" @onSuccess="queryLogs" :status="status"></addLog>
       </div>
     </div>
-    <div  class="container" >
+    <div style="padding: 0 10px 0 10px">
+      <el-input style="width: 100%" placeholder="搜索" :suffix-icon="search?search.length > 0?'':'':'el-icon-search'" v-model="search" @keyup.native.enter="queryLogs" @clear="queryLogs" size="small" class="input-with-select inline-16 layout_search__panel" clearable>
+      </el-input>
+    </div>
+    <div class="container" style="padding: 10px;!important;">
       <div v-if="logList.length === 0">
         <el-empty description="暂无记录" :image-size="40"></el-empty>
       </div>
-      <div :style="{overflow: isFull?'auto':'none',height:isFull?(windowHeight - 100) + 'px':''}">
-        <el-timeline>
-          <el-timeline-item
-            v-for="i in logList" :key="i.index"
-            :timestamp="i.createdate">
-              <div slot="dot" class="dot"></div>
-              <div class="step__panel normal-margin">
-                <div class="flex-align-center " style="margin-bottom:10px" v-if="i.userextend.length > 0">
-                  <!-- <p><small>跟进人:</small>{{i.changeby}}</p> -->
-<!--                    <img height="30" width="30" :src="i.headpic" alt="">-->
-                      <div class="avatar" >
-                        <img class="avatar__image" v-if="i.headpic" :src="i.headpic" alt="">
-                        <p v-else>{{i.userextend[0].name.substr(0, 1)}}</p>
-                      </div>
-                      <div style="margin-left: 10px">
-                        <p>{{ i.userextend[0].name }}&nbsp;</p>
-                        <small style="color:#999999ad;margin-top:10px">部门:{{ i.userextend[0].depname?i.userextend[0].depname:"--" }}&emsp;职位:{{ i.userextend[0].position?i.userextend[0].position:"--" }}</small>
-                      </div>
-<!--                  <div style="margin-left: 20px">
-                    <small style="color:#999">{{i.createdate}}</small>
-                  </div>-->
-
-                </div>
-                <div class="flex-align-center " style="margin-bottom:10px" v-else>
-                  <!-- <p><small>跟进人:</small>{{i.changeby}}</p> -->
-                  <!--                    <img height="30" width="30" :src="i.headpic" alt="">-->
-                  <div class="avatar" >
-                    <img class="avatar__image" v-if="i.headpic" :src="i.headpic" alt="">
-                    <p v-else>{{i.createby.substr(0, 1)}}</p>
-                  </div>
-                  <div style="margin-left: 10px">
-                    <p>{{ i.createby }}&nbsp;</p>
-                    <small style="color:#999999ad;margin-top:10px">部门:{{"--" }}&emsp;职位:{{ "--" }}</small>
-                  </div>
-                  <!--                  <div style="margin-left: 20px">
-                                      <small style="color:#999">{{i.createdate}}</small>
-                                    </div>-->
-
-                </div>
-<!--                <div >
-                  <span>{{i.userextend[0].name}}</span>
-                  <span>
-                    <small>部门:{{i.userextend[0].depname}}</small>
-                    <small>职位:{{i.userextend[0].position}}</small>
-                  </span>
-                </div>-->
-                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
-                  <span>跟进类型:{{i.type}}</span>
-                </div>
-                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
-                  <span>跟进对象:</span>
-                  <span v-for="item in i.contacts" :key="item.index">
-                    <span v-if="item.rowindex === i.contacts.length">
+      <el-timeline v-else>
+        <el-card v-for="i in logList" :key="i.index" shadow="hover" class="card-style">
+          <div class="dateLine">
+            <div class="div"></div>
+            <span class="span margin-5">{{i.createdate}}</span>
+          </div>
+          <div slot="dot" class="dot"></div>
+          <div class="step__panel normal-margin" style="padding: 0 10px 0 10px">
+            <div class="flex-align-center " style="margin-bottom:10px" v-if="i.userextend.length > 0">
+              <div class="avatar" >
+                <img class="avatar__image" v-if="i.headpic" :src="i.headpic" alt="">
+                <p v-else>{{i.userextend[0].name.substr(0, 1)}}</p>
+              </div>
+              <div style="margin-left: 10px">
+                <p style="font-weight: bold;font-size: 15px;color:#333333;">{{ i.userextend[0].name }}&nbsp;</p>
+                <small style="color:#999999;margin-top:10px;font-size: 12px">部门:{{ i.userextend[0].depname?i.userextend[0].depname:"--" }}&emsp;职位:{{ i.userextend[0].position?i.userextend[0].position:"--" }}</small>
+              </div>
+            </div>
+            <div class="flex-align-center " style="margin-bottom:10px" v-else>
+              <div class="avatar" >
+                <img class="avatar__image" v-if="i.headpic" :src="i.headpic" alt="">
+                <p v-else>{{i.createby.substr(0, 1)}}</p>
+              </div>
+              <div style="margin-left: 10px">
+                <p>{{ i.createby }}&nbsp;</p>
+                <small style="color:#999999ad;margin-top:10px;font-size: 12px">部门:{{"--" }}&emsp;职位:{{ "--" }}</small>
+              </div>
+            </div>
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+            <span class="span-style">跟进类型:{{i.type}}</span>
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+            <span class="span-style">跟进对象:</span>
+            <span  v-for="item in i.contacts" :key="item.index">
+                    <span v-if="item.rowindex === i.contacts.length" class="span-style">
                       {{item.name}}
                     </span>
-                    <span v-else>
+                    <span v-else class="span-style">
                        {{item.name + ','}}
                     </span>
 
                   </span>
-                </div>
-                 <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
-                  <span>目的:{{i.target}}</span>
-                </div>
-                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
-                  <span>过程:{{i.content}}</span>
-                </div>
-                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
-                  <span>结果:{{i.results}}</span>
-                </div>
-                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
-                  <span>下次跟进计划:{{i.nextplan}}</span>
-                </div>
-                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
-                  <span>营销费用:</span>
-                  <span v-if="i.salesfeesamount || i.salesfeesamount == 0">
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+            <span class="span-style">目的:{{i.target}}</span>
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+            <span class="span-style">过程:{{i.content}}</span>
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+            <span class="span-style">结果:{{i.results}}</span>
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+            <span class="span-style">下次跟进计划:{{i.nextplan}}</span>
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+            <span class="span-style">营销费用:</span>
+            <span v-if="i.salesfeesamount || i.salesfeesamount == 0">
                     <span style="color: red">¥ </span>
-                      <span style="font-size: 12px;color: red">{{tool.formatAmount(i.salesfeesamount,2)}}</span>
+                      <span style="font-size: 14px;color: red">{{tool.formatAmount(i.salesfeesamount,2)}}</span>
                   </span>
-                  <span v-else>--</span>
-                </div>
-                <div v-if="$route.path === '/projectChangeDetail'">
-                  <marketingExpenses  class="inline-16" ownertable="sa_project" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
-                </div>
-                <div v-if="$route.path === '/customerDetail'">
-                  <marketingExpenses  class="inline-16" ownertable="sa_customers" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+            <span v-else>--</span>
+          </div>
+          <div class="padding-style" v-if="$route.path !== '/projectChangeDetail' && $route.path !== '/customerDetail' && $route.path !== '/PublicCustomerDetail' || $route.path !== '/phonebookDetail'">
+            <span class="span-style">跟进内容:{{i.content}}</span>
+          </div>
+          <div style="padding: 0 10px 10px 10px">
+            <div class="flex-align-center flex-between pionter" v-for="img in i.attinfos" :key="img.index" style="padding:10px;margin-bottom:5px;border: 1px solid #ccc">
+              <div class="flex-align-center" style="flex:1;width:100%;">
+                <img width="30" :src="checkFileType(img.postfix) === 'file'?require('@/assets/file_icons/file.svg'):img.url" class="inline-16" alt="">
+                <div class="file__link">
+                  <a :href="img.url">{{img.document}}</a>
+                  <p>{{(img.contentlength / 1024).toFixed(2)}}kb</p>
                 </div>
-                <div v-if="$route.path === '/PublicCustomerDetail'">
-                  <marketingExpenses  class="inline-16" ownertable="sa_customers" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+              </div>
+              <i style="color:#999999;" class="el-icon-delete" v-if="nowUserid === i.createuserid" @click="deleteFile(img)"></i>
+            </div>
+          </div>
+          <div style="padding: 10px" v-if="commentShowId == i.sys_datafollowupid">
+            <div style="border: 1px solid #9ca3af;padding: 10px;border-radius: 5px">
+              <el-input type="textarea" style="border: none;margin-bottom: 10px" :rows="1" v-model="content" placeholder="我评论:"></el-input>
+              <el-divider></el-divider>
+              <div style="display: flex;justify-content: right">
+                <el-button   type="primary" size="small" :disabled="content.length == 0" @click="onComment(i)">发布</el-button>
+              </div>
+            </div>
+          </div>
+          <div v-if="commentShowId == i.sys_datafollowupid && i.comment.length > 0" style="padding: 0 10px 10px 10px">
+            <div style="max-height: 360px;min-height:200px;background: #F5F5F5;border-radius: 2px;padding: 10px;overflow:auto">
+              <div style="color: #333;font-size: 16px;font-weight: bold">评论({{i.commentqty}})</div>
+              <div v-for="item in i.comment" :key="item.index" style="margin-top: 10px">
+                <div style="color: #333;font-size: 14px;font-weight: bold;margin-top: 5px">{{item.createby}}</div>
+                <div style="color:#666;font-size: 14px;margin-top: 5px">{{item.content}}</div>
+                <div style="display: flex;justify-content: space-between;align-items: center;margin-top: -5px;margin-bottom: -5px">
+                  <div style="display: flex;justify-content: space-between;align-items: center">
+                    <div style="font-size: 12px;color: #999">{{item.createdate}}</div>
+                    <el-button type="text" size="small" class="margin-5" v-if="userid == item.createuserid"><svg t="1727053625238" class="icon" style="vertical-align: middle" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11334" width="14" height="14"><path d="M343.113143 156.379429h333.897143v-73.142858H343.113143v73.142858zM677.010286 0a83.456 83.456 0 0 1 83.456 83.456v64.146286h215.917714a46.299429 46.299429 0 1 1 0 92.672h-48.64v700.196571a83.456 83.456 0 0 1-83.456 83.456H176.128a83.456 83.456 0 0 1-83.456-83.456V240.054857H47.542857a46.299429 46.299429 0 0 1 0-92.452571h212.114286v-64.146286A83.456 83.456 0 0 1 343.113143 0h333.897143z m156.525714 241.371429H186.587429v688.859428h647.021714v-689.005714zM384.877714 345.6a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.691428-41.764571z m250.441143 0a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.545142-41.764571z" fill="#999999" p-id="11335"></path></svg>
+                      <span style="color: #666666;font-size: 14px;margin-left: 5px;vertical-align: middle" @click="onDel(item)">删除</span></el-button>
+                  </div>
+                  <div>
+                    <el-button type="text"  v-if="!isContentShow" size="small" @click="isContentShow = true;sys_datacommentid = item.sys_datacommentid">
+                      <svg t="1727055468269" class="icon" style="vertical-align: middle" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#3874F6" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11649"></path></svg>
+                      <span style="color: #3874F6;font-size: 14px;margin-left: 5px;vertical-align: middle">回复</span></el-button>
+                    <el-button type="text"  v-if="isContentShow" size="small" @click="isContentShow = false;sys_datacommentid = ''">
+                      <svg t="1727055468269" style="vertical-align: middle" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#3874F6" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11649"></path></svg>
+                      <span style="color: #3874F6;font-size: 14px;margin-left: 5px;vertical-align: middle">取消回复</span></el-button>
+                  </div>
                 </div>
-                <div v-if="$route.path === '/phonebookDetail'">
-                  <marketingExpenses  class="inline-16" :ownertable="i.ownertable" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+                <div style="border: 1px solid #9ca3af;padding: 10px;border-radius: 5px" v-if="isContentShow && sys_datacommentid == item.sys_datacommentid">
+                  <el-input type="textarea" style="border: none;margin-bottom: 10px" :rows="1" v-model="replyContent" :placeholder="'我回复'+item.createby+':'"></el-input>
+                  <el-divider></el-divider>
+                  <div style="display: flex;justify-content: right">
+                    <el-button   type="primary" size="small" :disabled="replyContent.length == 0" @click="onReply(i.sys_datafollowupid,item)">发布</el-button>
+                  </div>
                 </div>
-                <div class="follow-progress">
-                  <p v-if="$route.path !== '/projectChangeDetail' && $route.path !== '/customerDetail' && $route.path !== '/PublicCustomerDetail' && $route.path !== '/phonebookDetail'">{{i.content}}</p>
-                  <div>
-                    <!-- <previewImage v-show="checkFileType(img.postfix) === 'img'" style="width:60px;height:60px;margin-left:5px" v-for="img in i.attinfos" :key="img.index" :image="img" :deletebtn="true" @onSuccess="queryLogs"></previewImage> -->
-                    <div class="flex-align-center flex-between pionter" v-for="img in i.attinfos" :key="img.index" style="padding:10px;margin-bottom:5px">
-                      <div class="flex-align-center" style="flex:1;width:100%">
-                        <img width="30" :src="checkFileType(img.postfix) === 'file'?require('@/assets/file_icons/file.svg'):img.url" class="inline-16" alt="">
-                        <div class="file__link">
-                          <a :href="img.url">{{img.document}}</a>
-                          <p>{{(img.contentlength / 1024).toFixed(2)}}kb</p>
-                        </div>
+                <div v-if="item.subcomment.length > 0" style="margin-left: 10px">
+                  <div v-for="k in item.subcomment" :key="k.index" style="margin-top: 10px">
+                    <div style="display: flex;justify-content: left;align-items: center">
+                      <div style="font-size: 14px;font-weight: bold;color:#333;">{{k.createby}}</div><i style="margin: 0 10px 0 10px" class="el-icon-caret-right"></i><div style="font-size: 14px;font-weight: bold;color:#333;">{{k.replyusername}}</div>
+                    </div>
+                    <div style="color:#666;font-size: 14px;margin-top: 5px">{{k.content}}</div>
+                    <div style="display: flex;justify-content: space-between;align-items: center;margin-top: -5px;margin-bottom: -5px">
+                      <div style="display: flex;justify-content: space-between;align-items: center">
+                        <div style="font-size: 12px;color:#999;margin-right: 10px">{{k.createdate}}</div>
+                        <el-button type="text" size="small" v-if="userid == k.createuserid"><svg style="vertical-align: middle" t="1727053625238" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11334" width="14" height="14"><path d="M343.113143 156.379429h333.897143v-73.142858H343.113143v73.142858zM677.010286 0a83.456 83.456 0 0 1 83.456 83.456v64.146286h215.917714a46.299429 46.299429 0 1 1 0 92.672h-48.64v700.196571a83.456 83.456 0 0 1-83.456 83.456H176.128a83.456 83.456 0 0 1-83.456-83.456V240.054857H47.542857a46.299429 46.299429 0 0 1 0-92.452571h212.114286v-64.146286A83.456 83.456 0 0 1 343.113143 0h333.897143z m156.525714 241.371429H186.587429v688.859428h647.021714v-689.005714zM384.877714 345.6a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.691428-41.764571z m250.441143 0a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.545142-41.764571z" fill="#999999" p-id="11335"></path></svg>
+                          <span style="color: #666666;font-size: 14px;margin-left: 5px;vertical-align: middle" @click="onDel(k)">删除</span></el-button>
+                      </div>
+                      <div>
+                        <el-button  type="text" v-if="!isContentShow"  size="small" @click="isContentShow = true;sys_datacommentid = k.sys_datacommentid">
+                          <svg t="1727055468269" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#3874F6" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11649"></path></svg>
+                          <span style="color: #3874F6;font-size: 14px;margin-left: 5px;vertical-align: middle">回复</span></el-button>
+                        <el-button type="text" v-if="isContentShow" size="small" @click="isContentShow = false;sys_datacommentid = ''">
+                          <svg t="1727055468269" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#3874F6" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11649"></path></svg>
+                          <span style="color: #3874F6;font-size: 14px;margin-left: 5px;vertical-align: middle">取消回复</span></el-button>
+                      </div>
+                    </div>
+                    <div style="border: 1px solid #9ca3af;padding: 10px;border-radius: 5px" v-if="isContentShow && sys_datacommentid == k.sys_datacommentid">
+                      <el-input type="textarea" style="border: none;margin-bottom: 10px" :rows="1" v-model="replyContent" :placeholder="'我回复'+k.createby+':'"></el-input>
+                      <el-divider></el-divider>
+                      <div style="display: flex;justify-content: right">
+                        <el-button   type="primary" size="small" :disabled="replyContent.length == 0" @click="onReply(i.sys_datafollowupid,k)">发布</el-button>
                       </div>
-                      <i style="color:red;" class="el-icon-delete" v-if="nowUserid === i.createuserid" @click="deleteFile(img)"></i>
                     </div>
-                  </div>
-                  <!-- <div v-show="checkFileType(file.postfix) === 'file'"  class="flex-align-center pionter" style="margin-bottom:10px;" v-for="file in i.attinfos" :key="file.index">
-                    <a class="file__link" :href="file.url">{{file.document}}</a>
-                    <i style="color:red;" class="el-icon-delete" @click="deleteFile(file)"></i>
-                  </div> -->
-                  <div style="text-align:right" v-if="nowUserid === i.createuserid">
-                    <upload class="inline-16" slot="upload"
-                      :folderid="folderid"
-                      :status="status"
-                      btntype="icon"
-                      :bindData="{ ownertable: 'sys_datafollowup', ownerid: i.sys_datafollowupid,usetype: 'default' }"
-                      @onSuccess="queryLogs">
-                    </upload>
-                    <editLog :status="status" ref="edits" :data="i" :ownertable="ownertableNew" :ownerid="owneridNew" @onSuccess="queryLogs"></editLog>
-                    <el-popconfirm
-                        title="确定删除该跟进动态吗?"
-                        @confirm="deleteLogs(i)"
-                    >
-                      <el-button slot="reference" icon="el-icon-delete" size="mini" type="text" :disabled="status === '已结案' || status === '已失败'">删 除</el-button>
-                    </el-popconfirm>
-
                   </div>
                 </div>
               </div>
-          </el-timeline-item>
-        </el-timeline>
-      </div>
+            </div>
+          </div>
+          <el-divider></el-divider>
+          <div style="display: flex;justify-content: space-between;align-items:center;padding: 0 10px 0 10px;margin-top: -5px">
+            <div>
+              <el-button type="text" size="small" @click="commentClick(i)">
+                <svg t="1727055468269" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#999999" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#999999" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#999999" p-id="11649"></path></svg>
+                <span style="font-size: 14px;color: #3874F6;margin-left: 5px;vertical-align: middle">评论({{i.commentqty}})</span></el-button>
+            </div>
+            <div>
+              <marketingExpenses  v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'"  class="inline-16" ownertable="sa_customers" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+              <editLog v-if="nowUserid === i.createuserid" :status="status" ref="edits" :data="i" :ownertable="ownertable" @onSuccess="queryLogs"></editLog>
+              <el-popconfirm
+                  title="确定删除该跟进动态吗?"
+                  @confirm="deleteLogs(i)"
+              >
+                <el-button v-if="nowUserid === i.createuserid" slot="reference"  size="mini" type="text" :disabled="status === '已结案' || status === '已失败'">
+                  <svg t="1727058242243" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12098" width="14" height="14"><path d="M343.113143 156.379429h333.897143v-73.142858H343.113143v73.142858zM677.010286 0a83.456 83.456 0 0 1 83.456 83.456v64.146286h215.917714a46.299429 46.299429 0 1 1 0 92.672h-48.64v700.196571a83.456 83.456 0 0 1-83.456 83.456H176.128a83.456 83.456 0 0 1-83.456-83.456V240.054857H47.542857a46.299429 46.299429 0 0 1 0-92.452571h212.114286v-64.146286A83.456 83.456 0 0 1 343.113143 0h333.897143z m156.525714 241.371429H186.587429v688.859428h647.021714v-689.005714zM384.877714 345.6a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.691428-41.764571z m250.441143 0a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.545142-41.764571z" fill="#999999" p-id="12099"></path></svg>
+                  <span style="font-size: 14px;color: #333;margin-left: 5px;vertical-align: middle">删除</span></el-button>
+              </el-popconfirm>
+            </div>
+          </div>
+        </el-card>
+      </el-timeline>
     </div>
   </div>
 </template>
@@ -172,28 +213,36 @@ export default {
   data () {
     return {
       folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid,
+      userid:JSON.parse(sessionStorage.getItem('active_account')).userid,
       logList:[],
+      commentShowId:'',
       nowUserid:'',
       ownertableNew:'',
       owneridNew:'',
       isFull:false,
+      search:'',
       windowHeight: window.innerHeight,  //实时屏幕高度
+      commentqty:0,
+      content:'',
+      isShow:false,
+      sys_datacommentid:'',
+      isContentShow:false,
+      replyContent:'',
     }
   },
   methods:{
     async queryLogs() {
-    /*  this.owneridNew = ownerid
-      this.ownertableNew = ownertable*/
       const res = await this.$api.requested({
         "id": 20220930121501,
         "content": {
-            "ownertable": this.ownertableNew,
-            "ownerid":this.owneridNew
+          "ownertable":this.ownertable,
+          "ownerid":this.$route.query.id,
+          "where":{
+            "condition":this.search
+          }
         }
       })
       this.logList = res.data
-     /* console.log(this.logList,'跟进数据')
-      console.log(this.logList.length,'数据')*/
     },
     async queryLogsNew(ownertable,ownerid) {
       this.owneridNew = ownerid
@@ -206,6 +255,8 @@ export default {
         }
       })
       this.logList = res.data
+      console.log(this.logList,'跟进数据')
+      console.log(this.logList.length,'数据')
     },
     async deleteLogs (val) {
       const res = await this.$api.requested({
@@ -252,10 +303,75 @@ export default {
     onSuccess(){
       this.queryLogs()
       this.$emit('logSuccess')
+    },
+    async onComment(data){
+      const res = await this.$api.requested({
+        "id": 20240429161601,
+        "content": {
+          "ownertable":'sys_datafollowup',//数据表
+          "ownerid":data.sys_datafollowupid,//数据id
+          "content":this.content,//内容
+          "replyid":"0"//被回复评论id
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.content = ''
+        this.sys_datacommentid = ''
+        this.queryLogs()
+      })
+    },
+    async onReply(id,data){
+      const res = await this.$api.requested({
+        "id": 20240429161601,
+        "content": {
+          "ownertable":'sys_datafollowup',//数据表
+          "ownerid":id,//数据id
+          "content":this.replyContent,//内容
+          "replyid":data.sys_datacommentid//被回复评论id
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.replyContent = ''
+        this.isContentShow = false
+        this.sys_datacommentid = ''
+        this.queryLogs()
+      })
+    },
+    onDel(data){
+      console.log(data,'删除')
+      this.$confirm('确定删除该评论吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(async() => {
+        const res = await this.$api.requested({
+          "id": 20240429161701,
+          "content": {
+            "sys_datacommentid":data.sys_datacommentid
+          }
+        })
+        this.tool.showMessage(res,()=>{
+          this.queryLogs()
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        });
+      });
+
+    },
+    commentClick(i){
+      if (this.commentShowId == i.sys_datafollowupid){
+        this.commentShowId = ''
+      }else {
+        this.commentShowId = i.sys_datafollowupid
+      }
     }
   },
   mounted () {
-   /* this.queryLogs()*/
+    this.queryLogs()
+    console.log(this.windowHeight,'windowHeight高度')
     this.nowUserid = JSON.parse(sessionStorage.getItem('active_account')).userid
 
     var that = this;
@@ -269,7 +385,7 @@ export default {
   },
   watch: {
     $route () {
-     /* this.queryLogs()*/
+      this.queryLogs()
     },
     windowHeight (val) {
       console.log("实时屏幕高度:",val );
@@ -280,14 +396,30 @@ export default {
 
 </script>
 <style>
+
 .el-step__description{
   padding-right:0px !important;
 }
 </style>
 <style scoped>
-.step__panel{
-  background-color: #eff4ff;
+/deep/ .el-card__body {
+  padding: 0;
+}
+/deep/ .el-divider--horizontal {
+  display: block;
+  height: 1px;
+  width: 100%;
+  margin:0 0 10px 0 ;
+}
+.el-card__body {
   padding: 10px;
+}
+/deep/ .el-card:hover{
+  border: 1px solid #3874F6;
+}
+.step__panel{
+  /* background-color: #eff4ff;*/
+  /*padding: 10px;*/
   border-radius: 5px;
   color:#666
 }
@@ -361,5 +493,37 @@ export default {
 }
 .flex-wrap{
   flex-wrap: wrap
+}
+.margin-5{
+  margin-left: 5px;
+}
+.padding-style{
+  padding: 0 10px 10px 10px;
+.span-style{
+  color: #999999;
+  font-size: 14px
 };
+}
+.card-style{
+  margin-bottom: 10px;
+.dateLine{
+  margin-bottom: 10px;
+  padding: 10px 10px 0 10px;
+  display: flex;
+  justify-content: left;
+  align-items: center;
+.div{
+  width: 8px;
+  height:8px;
+  border: 2px solid #3874F6;
+  background: #FFFFFF;
+  border-radius: 40px;
+}
+.span{
+  color: #3874F6;
+}
+}
+
+}
+
 </style>

+ 365 - 0
src/components/normal-basic-layout-new/details/modules/followUp/followUpCopy.vue

@@ -0,0 +1,365 @@
+<template>
+  <div class="normal-panel follow__panel" id="containerFull">
+    <div class="container flex-align-center flex-between">
+      <div>
+        <slot name="collapse"></slot>
+        <p class="inline-16">跟进动态</p>
+      </div>
+      <div style="display: flex;justify-content: space-between">
+        <fullScreen class="inline-16" domId="containerFull" @onFull="onFull" @backFull="backFull"></fullScreen>
+        <addLog :ownertable="ownertable" :ownerid="owneridNew" @onSuccess="queryLogs" :status="status"></addLog>
+      </div>
+    </div>
+    <div  class="container" >
+      <div v-if="logList.length === 0">
+        <el-empty description="暂无记录" :image-size="40"></el-empty>
+      </div>
+      <div :style="{overflow: isFull?'auto':'none',height:isFull?(windowHeight - 100) + 'px':''}">
+        <el-timeline>
+          <el-timeline-item
+            v-for="i in logList" :key="i.index"
+            :timestamp="i.createdate">
+              <div slot="dot" class="dot"></div>
+              <div class="step__panel normal-margin">
+                <div class="flex-align-center " style="margin-bottom:10px" v-if="i.userextend.length > 0">
+                  <!-- <p><small>跟进人:</small>{{i.changeby}}</p> -->
+<!--                    <img height="30" width="30" :src="i.headpic" alt="">-->
+                      <div class="avatar" >
+                        <img class="avatar__image" v-if="i.headpic" :src="i.headpic" alt="">
+                        <p v-else>{{i.userextend[0].name.substr(0, 1)}}</p>
+                      </div>
+                      <div style="margin-left: 10px">
+                        <p>{{ i.userextend[0].name }}&nbsp;</p>
+                        <small style="color:#999999ad;margin-top:10px">部门:{{ i.userextend[0].depname?i.userextend[0].depname:"--" }}&emsp;职位:{{ i.userextend[0].position?i.userextend[0].position:"--" }}</small>
+                      </div>
+<!--                  <div style="margin-left: 20px">
+                    <small style="color:#999">{{i.createdate}}</small>
+                  </div>-->
+
+                </div>
+                <div class="flex-align-center " style="margin-bottom:10px" v-else>
+                  <!-- <p><small>跟进人:</small>{{i.changeby}}</p> -->
+                  <!--                    <img height="30" width="30" :src="i.headpic" alt="">-->
+                  <div class="avatar" >
+                    <img class="avatar__image" v-if="i.headpic" :src="i.headpic" alt="">
+                    <p v-else>{{i.createby.substr(0, 1)}}</p>
+                  </div>
+                  <div style="margin-left: 10px">
+                    <p>{{ i.createby }}&nbsp;</p>
+                    <small style="color:#999999ad;margin-top:10px">部门:{{"--" }}&emsp;职位:{{ "--" }}</small>
+                  </div>
+                  <!--                  <div style="margin-left: 20px">
+                                      <small style="color:#999">{{i.createdate}}</small>
+                                    </div>-->
+
+                </div>
+<!--                <div >
+                  <span>{{i.userextend[0].name}}</span>
+                  <span>
+                    <small>部门:{{i.userextend[0].depname}}</small>
+                    <small>职位:{{i.userextend[0].position}}</small>
+                  </span>
+                </div>-->
+                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+                  <span>跟进类型:{{i.type}}</span>
+                </div>
+                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+                  <span>跟进对象:</span>
+                  <span v-for="item in i.contacts" :key="item.index">
+                    <span v-if="item.rowindex === i.contacts.length">
+                      {{item.name}}
+                    </span>
+                    <span v-else>
+                       {{item.name + ','}}
+                    </span>
+
+                  </span>
+                </div>
+                 <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+                  <span>目的:{{i.target}}</span>
+                </div>
+                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+                  <span>过程:{{i.content}}</span>
+                </div>
+                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+                  <span>结果:{{i.results}}</span>
+                </div>
+                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+                  <span>下次跟进计划:{{i.nextplan}}</span>
+                </div>
+                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'">
+                  <span>营销费用:</span>
+                  <span v-if="i.salesfeesamount || i.salesfeesamount == 0">
+                    <span style="color: red">¥ </span>
+                      <span style="font-size: 12px;color: red">{{tool.formatAmount(i.salesfeesamount,2)}}</span>
+                  </span>
+                  <span v-else>--</span>
+                </div>
+                <div v-if="$route.path === '/projectChangeDetail'">
+                  <marketingExpenses  class="inline-16" ownertable="sa_project" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+                </div>
+                <div v-if="$route.path === '/customerDetail'">
+                  <marketingExpenses  class="inline-16" ownertable="sa_customers" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+                </div>
+                <div v-if="$route.path === '/PublicCustomerDetail'">
+                  <marketingExpenses  class="inline-16" ownertable="sa_customers" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+                </div>
+                <div v-if="$route.path === '/phonebookDetail'">
+                  <marketingExpenses  class="inline-16" :ownertable="i.ownertable" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+                </div>
+                <div class="follow-progress">
+                  <p v-if="$route.path !== '/projectChangeDetail' && $route.path !== '/customerDetail' && $route.path !== '/PublicCustomerDetail' && $route.path !== '/phonebookDetail'">{{i.content}}</p>
+                  <div>
+                    <!-- <previewImage v-show="checkFileType(img.postfix) === 'img'" style="width:60px;height:60px;margin-left:5px" v-for="img in i.attinfos" :key="img.index" :image="img" :deletebtn="true" @onSuccess="queryLogs"></previewImage> -->
+                    <div class="flex-align-center flex-between pionter" v-for="img in i.attinfos" :key="img.index" style="padding:10px;margin-bottom:5px">
+                      <div class="flex-align-center" style="flex:1;width:100%">
+                        <img width="30" :src="checkFileType(img.postfix) === 'file'?require('@/assets/file_icons/file.svg'):img.url" class="inline-16" alt="">
+                        <div class="file__link">
+                          <a :href="img.url">{{img.document}}</a>
+                          <p>{{(img.contentlength / 1024).toFixed(2)}}kb</p>
+                        </div>
+                      </div>
+                      <i style="color:red;" class="el-icon-delete" v-if="nowUserid === i.createuserid" @click="deleteFile(img)"></i>
+                    </div>
+                  </div>
+                  <!-- <div v-show="checkFileType(file.postfix) === 'file'"  class="flex-align-center pionter" style="margin-bottom:10px;" v-for="file in i.attinfos" :key="file.index">
+                    <a class="file__link" :href="file.url">{{file.document}}</a>
+                    <i style="color:red;" class="el-icon-delete" @click="deleteFile(file)"></i>
+                  </div> -->
+                  <div style="text-align:right" v-if="nowUserid === i.createuserid">
+                    <upload class="inline-16" slot="upload"
+                      :folderid="folderid"
+                      :status="status"
+                      btntype="icon"
+                      :bindData="{ ownertable: 'sys_datafollowup', ownerid: i.sys_datafollowupid,usetype: 'default' }"
+                      @onSuccess="queryLogs">
+                    </upload>
+                    <editLog :status="status" ref="edits" :data="i" :ownertable="ownertableNew" :ownerid="owneridNew" @onSuccess="queryLogs"></editLog>
+                    <el-popconfirm
+                        title="确定删除该跟进动态吗?"
+                        @confirm="deleteLogs(i)"
+                    >
+                      <el-button slot="reference" icon="el-icon-delete" size="mini" type="text" :disabled="status === '已结案' || status === '已失败'">删 除</el-button>
+                    </el-popconfirm>
+
+                  </div>
+                </div>
+              </div>
+          </el-timeline-item>
+        </el-timeline>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import upload from '@/components/upload/hw_obs_upload.vue'
+import previewImage from '@/components/previewImage/index.vue'
+import fullScreen from "@/views/salesData/components/fullScreen";
+import addLog from './addLog.vue'
+import editLog from './editLog.vue'
+import marketingExpenses from '@/components/marketingExpenses/index'
+export default {
+  props:['ownertable','status'],
+  components:{
+    addLog,
+    editLog,
+    upload,
+    previewImage,
+    fullScreen,
+    marketingExpenses
+  },
+  data () {
+    return {
+      folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid,
+      logList:[],
+      nowUserid:'',
+      ownertableNew:'',
+      owneridNew:'',
+      isFull:false,
+      windowHeight: window.innerHeight,  //实时屏幕高度
+    }
+  },
+  methods:{
+    async queryLogs() {
+    /*  this.owneridNew = ownerid
+      this.ownertableNew = ownertable*/
+      const res = await this.$api.requested({
+        "id": 20220930121501,
+        "content": {
+            "ownertable": this.ownertableNew,
+            "ownerid":this.owneridNew
+        }
+      })
+      this.logList = res.data
+     /* console.log(this.logList,'跟进数据')
+      console.log(this.logList.length,'数据')*/
+    },
+    async queryLogsNew(ownertable,ownerid) {
+      this.owneridNew = ownerid
+      this.ownertableNew = ownertable
+      const res = await this.$api.requested({
+        "id": 20220930121501,
+        "content": {
+          "ownertable":this.ownertableNew,
+          "ownerid":this.owneridNew
+        }
+      })
+      this.logList = res.data
+    },
+    async deleteLogs (val) {
+      const res = await this.$api.requested({
+        "id": 20220930121701,
+        "content": {
+          "sys_datafollowupid":val.sys_datafollowupid
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.queryLogs()
+      })
+    },
+    checkFileType (type) {
+      let arr = ['JPG','JPEG','PNG']
+      if (arr.includes(type.toUpperCase())) {
+        return 'img'
+      } else {
+        return 'file'
+      }
+    },
+    async deleteFile (row) {
+      const res = await this.$api.requested({
+        "classname": "system.attachment.Attachment",
+        "method": "deleteFileLink",
+        "content": {
+          "linksids":[row.linksid]
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.queryLogs()
+      })
+    },
+    /*全屏*/
+    onFull(){
+      this.heightChart = this.windowWidth > 1128 ? 'calc(100vh - 85px)':'calc(100vh - 115px)'
+      this.isFull = true
+    },
+    /*退出全屏*/
+    backFull(val){
+      this.heightChart = '100%'
+      this.isFull = false
+      this.$emit('backFull',val)
+    },
+    onSuccess(){
+      this.queryLogs()
+      this.$emit('logSuccess')
+    }
+  },
+  mounted () {
+   /* this.queryLogs()*/
+    this.nowUserid = JSON.parse(sessionStorage.getItem('active_account')).userid
+
+    var that = this;
+    // <!--把window.onresize事件挂在到mounted函数上-->
+    window.onresize = () => {
+      return (() => {
+        window.fullHeight = document.documentElement.clientHeight;
+        that.windowHeight = window.fullHeight; // 高
+      })()
+    };
+  },
+  watch: {
+    $route () {
+     /* this.queryLogs()*/
+    },
+    windowHeight (val) {
+      console.log("实时屏幕高度:",val );
+      console.log(this.windowHeight)
+    }
+  }
+}
+
+</script>
+<style>
+.el-step__description{
+  padding-right:0px !important;
+}
+</style>
+<style scoped>
+.step__panel{
+  background-color: #eff4ff;
+  padding: 10px;
+  border-radius: 5px;
+  color:#666
+}
+.follow-progress p{
+  width:100%;
+  margin-bottom:5px;
+  font-size:14px;
+  word-wrap: break-word;
+}
+.file__link{
+  color:#999;
+  font-size: 12px;
+  padding: 0 5px;
+  display:block;
+  width: 100%;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.pionter{
+  margin:6px 0;
+  padding: 10px;
+  transition: .2s linear;
+  cursor: pointer;
+  border-radius: 5px;
+  background: #ffff;
+}
+.pionter:hover{
+  box-shadow: 0 5px 10px rgb(0 0 0 / 10%);
+}
+.sticky{
+  position: sticky;
+  top:0px;
+  /* background: #fff; */
+  z-index: 9999;
+}
+.dot{
+  background:#fff;height:10px;width:10px;border-radius:100%;border:2px solid #3874F6;
+}
+.normal-panel{
+  border-radius: 5px;
+}
+.avatar__image{
+  height: 100%;
+  width: 100%;
+}
+.avatar:hover .avatar__model{
+  display: block;
+}
+.avatar{
+  position: relative;
+  height:40px;
+  width: 40px;
+  margin-bottom: 5px;
+  border-radius: 100%;
+  text-align: center;
+  line-height: 40px;
+  color:#fff;
+  font-weight: 500;
+  background: #3874F6;
+  cursor: pointer;
+  overflow: hidden;
+}
+.scroll{
+  height: 410px;
+  overflow: auto;
+}
+.scroll::-webkit-scrollbar-thumb { /*滚动条滑块*/
+  border-radius: 10px;
+  background-color: #CACACA;
+}
+.flex-wrap{
+  flex-wrap: wrap
+};
+</style>

+ 5 - 2
src/components/normal-basic-layout/details/modules/followUp/addLog.vue

@@ -45,6 +45,8 @@
             <upload
               ref="upload"
               :folderid="folderid"
+              @clickUpload="loading = true"
+              @uploadEnd="loading = false"
               @onSuccess="onSuccess"
               :bindData="bindData"
               type="button">
@@ -55,8 +57,8 @@
         </el-form>
       </div>
       <div class="fixed__btn__panel">
-        <el-button size="small" @click="onClose">取 消</el-button>
-        <el-button type="warning" size="small" @click="submitLog">保 存</el-button>
+        <el-button size="small" @click="onClose" :disabled="loading">取 消</el-button>
+        <el-button type="warning" size="small" @click="submitLog" :loading="loading">保 存</el-button>
       </div>
     </el-drawer>
   </div>
@@ -76,6 +78,7 @@ export default {
   data () {
     return {
       dialogFormVisible:false,
+      loading:false,
       form:{
         content:'',
         type:'',

+ 14 - 4
src/components/normal-basic-layout/details/modules/followUp/editLog.vue

@@ -1,6 +1,8 @@
 <template>
   <div class="inline-16">
-    <el-button icon="el-icon-edit" type="text" size="mini" @click="onShow(dialogFormVisible = true)" :disabled="status === '已结案' || status === '已失败'">编 辑</el-button>
+    <el-button  type="text" size="mini" @click="onShow(dialogFormVisible = true)" :disabled="status === '已结案' || status === '已失败'">
+      <svg t="1727058404479" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12347" width="14" height="14"><path d="M319.122286 565.101714a8.265143 8.265143 0 0 0-1.609143 2.852572l-51.2 188.928a32.109714 32.109714 0 0 0 39.277714 39.350857l187.538286-51.2h0.658286a8.118857 8.118857 0 0 0 5.851428-2.413714l501.540572-501.467429a80.457143 80.457143 0 0 0 23.04-57.344 98.011429 98.011429 0 0 0-29.257143-68.681143l-47.396572-47.469714a98.157714 98.157714 0 0 0-68.681143-29.257143 80.457143 80.457143 0 0 0-57.856 23.698286L319.853714 563.712c-0.512 0.512-0.365714 1.170286-0.731428 1.755429m632.685714-373.028572l-49.810286 49.810286-80.969143-81.92 49.078858-49.078857a23.332571 23.332571 0 0 1 31.744 2.267428l47.396571 47.469715a25.819429 25.819429 0 0 1 7.753143 17.993142 19.090286 19.090286 0 0 1-5.412572 13.604572m-543.524571 380.342857l361.764571-361.545143 80.457143 82.066286-360.521143 361.252571z m-65.828571 146.724571l26.185142-95.963428 69.778286 69.778286z m641.170285-328.704a34.742857 34.742857 0 0 0-34.596571 34.669715v467.894857a44.470857 44.470857 0 0 1-44.470857 44.397714H113.590857a44.544 44.544 0 0 1-44.470857-44.397714V130.486857a44.544 44.544 0 0 1 44.470857-44.470857h509.366857a34.596571 34.596571 0 0 0 0-69.193143H108.324571A108.544 108.544 0 0 0-0.073143 125.220571v773.558858a108.544 108.544 0 0 0 108.397714 108.397714h801.353143a108.470857 108.470857 0 0 0 108.397715-108.397714V426.130286a34.669714 34.669714 0 0 0-34.596572-34.450286" fill="#999999" p-id="12348"></path></svg>
+      <span style="font-size: 14px;color: #333;margin-left: 5px;vertical-align: middle" >编辑</span></el-button>
     <el-drawer title="编辑跟进动态" size="600px" append-to-body :visible.sync="dialogFormVisible" @close="onClose">
       <div class="drawer__panel">
         <el-form ref="form" :model="form" label-position="top" label-width="80px">
@@ -53,6 +55,7 @@
           </div>
           <upload
             :folderid="folderid"
+            @upload="loading = true"
             btntype="icon"
             @onSuccess="onSuccess"
             :hidemediastock="false"
@@ -61,8 +64,8 @@
         </el-form>
       </div>
       <div class="fixed__btn__panel">
-        <el-button size="small" @click="onClose">取 消</el-button>
-        <el-button type="warning" size="small" @click="submitLog">保 存</el-button>
+        <el-button size="small" @click="onClose" :disabled="loading">取 消</el-button>
+        <el-button type="warning" size="small" @click="submitLog" :loading="loading">保 存</el-button>
       </div>
     </el-drawer>
   </div>
@@ -82,6 +85,7 @@ export default {
   data () {
     return {
       dialogFormVisible:false,
+      loading:false,
       sys_enterpriseid:'',
       form:{
         content:'',
@@ -112,6 +116,7 @@ export default {
     onSuccess(res) {
       res.attinfos = JSON.parse(res.attinfos)
       this.attachmentids = [...this.attachmentids,...res.attinfos.data]
+      this.loading = false
       this.$emit('onSuccess')
     },
 
@@ -171,7 +176,12 @@ export default {
         }
       })
       this.tool.showMessage(res,()=>{
-        this.queryLogs()
+        this.data.attinfos.forEach(item=>{
+          if (item.rowindex == row.rowindex){
+            console.log('删除')
+            this.data.attinfos.splice(item,1)
+          }
+        })
       })
     },
     onSelect(row){

+ 289 - 123
src/components/normal-basic-layout/details/modules/followUp/followUp.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="normal-panel follow__panel" id="containerFull">
-    <div class="container flex-align-center flex-between">
+    <div class="container flex-align-center flex-between" style="padding: 10px 10px 0 10px !important;">
       <div>
         <slot name="collapse"></slot>
         <p class="inline-16">跟进动态</p>
@@ -10,141 +10,185 @@
         <addLog :ownertable="ownertable" @onSuccess="queryLogs" :status="status"></addLog>
       </div>
     </div>
-    <div  class="container" >
+    <div style="padding: 0 10px 0 10px">
+      <el-input style="width: 100%" placeholder="搜索" :suffix-icon="search?search.length > 0?'':'':'el-icon-search'" v-model="search" @keyup.native.enter="queryLogs()" @clear="queryLogs" size="small" class="input-with-select inline-16 layout_search__panel" clearable>
+      </el-input>
+    </div>
+    <div class="container" style="padding: 10px;!important;">
       <div v-if="logList.length === 0">
         <el-empty description="暂无记录" :image-size="40"></el-empty>
       </div>
-      <div :style="{overflow: isFull?'auto':'none',height:isFull?(windowHeight - 100) + 'px':''}">
-        <el-timeline>
-          <el-timeline-item
-            v-for="i in logList" :key="i.index"
-            :timestamp="i.createdate">
-              <div slot="dot" class="dot"></div>
-              <div class="step__panel normal-margin">
-                <div class="flex-align-center " style="margin-bottom:10px" v-if="i.userextend.length > 0">
-                  <!-- <p><small>跟进人:</small>{{i.changeby}}</p> -->
-<!--                    <img height="30" width="30" :src="i.headpic" alt="">-->
-                      <div class="avatar" >
-                        <img class="avatar__image" v-if="i.headpic" :src="i.headpic" alt="">
-                        <p v-else>{{i.userextend[0].name.substr(0, 1)}}</p>
-                      </div>
-                      <div style="margin-left: 10px">
-                        <p>{{ i.userextend[0].name }}&nbsp;</p>
-                        <small style="color:#999999ad;margin-top:10px">部门:{{ i.userextend[0].depname?i.userextend[0].depname:"--" }}&emsp;职位:{{ i.userextend[0].position?i.userextend[0].position:"--" }}</small>
-                      </div>
-<!--                  <div style="margin-left: 20px">
-                    <small style="color:#999">{{i.createdate}}</small>
-                  </div>-->
-
-                </div>
-                <div class="flex-align-center " style="margin-bottom:10px" v-else>
-                  <!-- <p><small>跟进人:</small>{{i.changeby}}</p> -->
-                  <!--                    <img height="30" width="30" :src="i.headpic" alt="">-->
-                  <div class="avatar" >
-                    <img class="avatar__image" v-if="i.headpic" :src="i.headpic" alt="">
-                    <p v-else>{{i.createby.substr(0, 1)}}</p>
-                  </div>
-                  <div style="margin-left: 10px">
-                    <p>{{ i.createby }}&nbsp;</p>
-                    <small style="color:#999999ad;margin-top:10px">部门:{{"--" }}&emsp;职位:{{ "--" }}</small>
-                  </div>
-                  <!--                  <div style="margin-left: 20px">
-                                      <small style="color:#999">{{i.createdate}}</small>
-                                    </div>-->
-
-                </div>
-<!--                <div >
-                  <span>{{i.userextend[0].name}}</span>
-                  <span>
-                    <small>部门:{{i.userextend[0].depname}}</small>
-                    <small>职位:{{i.userextend[0].position}}</small>
-                  </span>
-                </div>-->
-                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
-                  <span>跟进类型:{{i.type}}</span>
-                </div>
-                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
-                  <span>跟进对象:</span>
-                  <span v-for="item in i.contacts" :key="item.index">
-                    <span v-if="item.rowindex === i.contacts.length">
+      <el-timeline v-else>
+        <el-card v-for="i in logList" :key="i.index" shadow="hover" class="card-style">
+          <div class="dateLine">
+            <div class="div"></div>
+            <span class="span margin-5">{{i.createdate}}</span>
+          </div>
+          <div slot="dot" class="dot"></div>
+          <div class="step__panel normal-margin" style="padding: 0 10px 0 10px">
+            <div class="flex-align-center " style="margin-bottom:10px" v-if="i.userextend.length > 0">
+              <div class="avatar" >
+                <img class="avatar__image" v-if="i.headpic" :src="i.headpic" alt="">
+                <p v-else>{{i.userextend[0].name.substr(0, 1)}}</p>
+              </div>
+              <div style="margin-left: 10px">
+                <p style="font-weight: bold;font-size: 15px;color:#333333;">{{ i.userextend[0].name }}&nbsp;</p>
+                <small style="color:#999999;margin-top:10px;font-size: 12px">部门:{{ i.userextend[0].depname?i.userextend[0].depname:"--" }}&emsp;职位:{{ i.userextend[0].position?i.userextend[0].position:"--" }}</small>
+              </div>
+            </div>
+            <div class="flex-align-center " style="margin-bottom:10px" v-else>
+              <div class="avatar" >
+                <img class="avatar__image" v-if="i.headpic" :src="i.headpic" alt="">
+                <p v-else>{{i.createby.substr(0, 1)}}</p>
+              </div>
+              <div style="margin-left: 10px">
+                <p>{{ i.createby }}&nbsp;</p>
+                <small style="color:#999999ad;margin-top:10px;font-size: 12px">部门:{{"--" }}&emsp;职位:{{ "--" }}</small>
+              </div>
+            </div>
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+            <span class="span-style">跟进类型:{{i.type}}</span>
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+            <span class="span-style">跟进对象:</span>
+            <span  v-for="item in i.contacts" :key="item.index">
+                    <span v-if="item.rowindex === i.contacts.length" class="span-style">
                       {{item.name}}
                     </span>
-                    <span v-else>
+                    <span v-else class="span-style">
                        {{item.name + ','}}
                     </span>
 
                   </span>
-                </div>
-                 <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
-                  <span>目的:{{i.target}}</span>
-                </div>
-                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
-                  <span>过程:{{i.content}}</span>
-                </div>
-                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
-                  <span>结果:{{i.results}}</span>
-                </div>
-                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
-                  <span>下次跟进计划:{{i.nextplan}}</span>
-                </div>
-                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
-                  <span>营销费用:</span>
-                  <span v-if="i.salesfeesamount || i.salesfeesamount == 0">
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+            <span class="span-style">目的:{{i.target}}</span>
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+            <span class="span-style">过程:{{i.content}}</span>
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+            <span class="span-style">结果:{{i.results}}</span>
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+            <span class="span-style">下次跟进计划:{{i.nextplan}}</span>
+          </div>
+          <div class="padding-style" v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+            <span class="span-style">营销费用:</span>
+            <span v-if="i.salesfeesamount || i.salesfeesamount == 0">
                     <span style="color: red">¥ </span>
-                      <span style="font-size: 12px;color: red">{{tool.formatAmount(i.salesfeesamount,2)}}</span>
+                      <span style="font-size: 14px;color: red">{{tool.formatAmount(i.salesfeesamount,2)}}</span>
                   </span>
-                  <span v-else>--</span>
-                </div>
-                <div v-if="$route.path === '/projectChangeDetail'">
-                  <marketingExpenses  class="inline-16" ownertable="sa_project" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+            <span v-else>--</span>
+          </div>
+          <div class="padding-style" v-if="$route.path !== '/projectChangeDetail' && $route.path !== '/customerDetail' && $route.path !== '/PublicCustomerDetail'">
+            <span class="span-style">跟进内容:{{i.content}}</span>
+          </div>
+          <div style="padding: 0 10px 10px 10px">
+            <div class="flex-align-center flex-between pionter" v-for="img in i.attinfos" :key="img.index" style="padding:10px;margin-bottom:5px;border: 1px solid #ccc">
+              <div class="flex-align-center" style="flex:1;width:100%;">
+                <img width="30" :src="checkFileType(img.postfix) === 'file'?require('@/assets/file_icons/file.svg'):img.url" class="inline-16" alt="">
+                <div class="file__link">
+                  <a :href="img.url">{{img.document}}</a>
+                  <p>{{(img.contentlength / 1024).toFixed(2)}}kb</p>
                 </div>
-                <div v-if="$route.path === '/customerDetail'">
-                  <marketingExpenses  class="inline-16" ownertable="sa_customers" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+              </div>
+              <i style="color:#999999;" class="el-icon-delete" v-if="nowUserid === i.createuserid" @click="deleteFile(img)"></i>
+            </div>
+          </div>
+          <div style="padding: 10px" v-if="commentShowId == i.sys_datafollowupid">
+            <div style="border: 1px solid #9ca3af;padding: 10px;border-radius: 5px">
+              <el-input type="textarea" style="border: none;margin-bottom: 10px" :rows="1" v-model="content" placeholder="我评论:"></el-input>
+              <el-divider></el-divider>
+              <div style="display: flex;justify-content: right">
+                <el-button   type="primary" size="small" :disabled="content.length == 0" @click="onComment(i)">发布</el-button>
+              </div>
+            </div>
+          </div>
+          <div v-if="commentShowId == i.sys_datafollowupid && i.comment.length > 0" style="padding: 0 10px 10px 10px">
+            <div style="max-height: 360px;min-height:200px;background: #F5F5F5;border-radius: 2px;padding: 10px;overflow:auto">
+              <div style="color: #333;font-size: 16px;font-weight: bold">评论({{i.commentqty}})</div>
+              <div v-for="item in i.comment" :key="item.index" style="margin-top: 10px">
+                <div style="color: #333;font-size: 14px;font-weight: bold;margin-top: 5px">{{item.createby}}</div>
+                <div style="color:#666;font-size: 14px;margin-top: 5px">{{item.content}}</div>
+                <div style="display: flex;justify-content: space-between;align-items: center;margin-top: -5px;margin-bottom: -5px">
+                  <div style="display: flex;justify-content: space-between;align-items: center">
+                    <div style="font-size: 12px;color: #999">{{item.createdate}}</div>
+                    <el-button type="text" size="small" class="margin-5" v-if="userid == item.createuserid"><svg style="vertical-align: middle" t="1727053625238" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11334" width="14" height="14"><path d="M343.113143 156.379429h333.897143v-73.142858H343.113143v73.142858zM677.010286 0a83.456 83.456 0 0 1 83.456 83.456v64.146286h215.917714a46.299429 46.299429 0 1 1 0 92.672h-48.64v700.196571a83.456 83.456 0 0 1-83.456 83.456H176.128a83.456 83.456 0 0 1-83.456-83.456V240.054857H47.542857a46.299429 46.299429 0 0 1 0-92.452571h212.114286v-64.146286A83.456 83.456 0 0 1 343.113143 0h333.897143z m156.525714 241.371429H186.587429v688.859428h647.021714v-689.005714zM384.877714 345.6a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.691428-41.764571z m250.441143 0a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.545142-41.764571z" fill="#999999" p-id="11335"></path></svg>
+                      <span style="color: #666666;font-size: 14px;margin-left: 5px;vertical-align: middle" @click="onDel(item)">删除</span></el-button>
+                  </div>
+                  <div>
+                    <el-button type="text"  v-if="!isContentShow" size="small" @click="isContentShow = true;sys_datacommentid = item.sys_datacommentid">
+                      <svg t="1727055468269" class="icon" style="vertical-align: middle" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#3874F6" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11649"></path></svg>
+                      <span style="color: #3874F6;font-size: 14px;margin-left: 5px;vertical-align: middle">回复</span></el-button>
+                    <el-button type="text"  v-if="isContentShow" size="small" @click="isContentShow = false;sys_datacommentid = ''">
+                      <svg t="1727055468269" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#3874F6" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11649"></path></svg>
+                      <span style="color: #3874F6;font-size: 14px;margin-left: 5px;vertical-align: middle">取消回复</span></el-button>
+                  </div>
                 </div>
-                <div v-if="$route.path === '/PublicCustomerDetail'">
-                  <marketingExpenses  class="inline-16" ownertable="sa_customers" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+                <div style="border: 1px solid #9ca3af;padding: 10px;border-radius: 5px" v-if="isContentShow && sys_datacommentid == item.sys_datacommentid">
+                  <el-input type="textarea" style="border: none;margin-bottom: 10px" :rows="1" v-model="replyContent" :placeholder="'我回复'+item.createby+':'"></el-input>
+                  <el-divider></el-divider>
+                  <div style="display: flex;justify-content: right">
+                    <el-button   type="primary" size="small" :disabled="replyContent.length == 0" @click="onReply(i.sys_datafollowupid,item)">发布</el-button>
+                  </div>
                 </div>
-                <div class="follow-progress">
-                  <p v-if="$route.path !== '/projectChangeDetail' && $route.path !== '/customerDetail' && $route.path !== '/PublicCustomerDetail'">{{i.content}}</p>
-                  <div>
-                    <!-- <previewImage v-show="checkFileType(img.postfix) === 'img'" style="width:60px;height:60px;margin-left:5px" v-for="img in i.attinfos" :key="img.index" :image="img" :deletebtn="true" @onSuccess="queryLogs"></previewImage> -->
-                    <div class="flex-align-center flex-between pionter" v-for="img in i.attinfos" :key="img.index" style="padding:10px;margin-bottom:5px">
-                      <div class="flex-align-center" style="flex:1;width:100%">
-                        <img width="30" :src="checkFileType(img.postfix) === 'file'?require('@/assets/file_icons/file.svg'):img.url" class="inline-16" alt="">
-                        <div class="file__link">
-                          <a :href="img.url">{{img.document}}</a>
-                          <p>{{(img.contentlength / 1024).toFixed(2)}}kb</p>
-                        </div>
+                <div v-if="item.subcomment.length > 0" style="margin-left: 10px;margin-top: 10px">
+                  <div v-for="k in item.subcomment" :key="k.index" style="margin-top: 10px">
+                    <div style="display: flex;justify-content: left;align-items: center">
+                      <div style="font-size: 14px;font-weight: bold;color:#333;">{{k.createby}}</div><i style="margin: 0 10px 0 10px" class="el-icon-caret-right"></i><div style="font-size: 14px;font-weight: bold;color:#333;">{{k.replyusername}}</div>
+                    </div>
+                    <div style="color:#666;font-size: 14px;margin-top: 5px">{{k.content}}</div>
+                    <div style="display: flex;justify-content: space-between;align-items: center;margin-top: -5px;margin-bottom: -5px">
+                      <div style="display: flex;justify-content: space-between;align-items: center">
+                        <div style="font-size: 12px;color:#999;margin-right: 10px">{{k.createdate}}</div>
+                        <el-button type="text" size="small" v-if="userid == k.createuserid"><svg style="vertical-align: middle" t="1727053625238" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11334" width="14" height="14"><path d="M343.113143 156.379429h333.897143v-73.142858H343.113143v73.142858zM677.010286 0a83.456 83.456 0 0 1 83.456 83.456v64.146286h215.917714a46.299429 46.299429 0 1 1 0 92.672h-48.64v700.196571a83.456 83.456 0 0 1-83.456 83.456H176.128a83.456 83.456 0 0 1-83.456-83.456V240.054857H47.542857a46.299429 46.299429 0 0 1 0-92.452571h212.114286v-64.146286A83.456 83.456 0 0 1 343.113143 0h333.897143z m156.525714 241.371429H186.587429v688.859428h647.021714v-689.005714zM384.877714 345.6a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.691428-41.764571z m250.441143 0a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.545142-41.764571z" fill="#999999" p-id="11335"></path></svg>
+                          <span style="color: #666666;font-size: 14px;margin-left: 5px;vertical-align: middle" @click="onDel(k)">删除</span></el-button>
+                      </div>
+                      <div>
+                        <el-button  type="text" v-if="!isContentShow"  size="small" @click="isContentShow = true;sys_datacommentid = k.sys_datacommentid">
+                          <svg t="1727055468269" class="icon" style="vertical-align: middle" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#3874F6" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11649"></path></svg>
+                          <span style="color: #3874F6;font-size: 14px;margin-left: 5px;vertical-align: middle">回复</span></el-button>
+                        <el-button type="text" v-if="isContentShow" size="small" @click="isContentShow = false;sys_datacommentid = ''">
+                          <svg t="1727055468269" style="vertical-align: middle" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#3874F6" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#3874F6" p-id="11649"></path></svg>
+                          <span style="color: #3874F6;font-size: 14px;margin-left: 5px;vertical-align: middle">取消回复</span></el-button>
+                      </div>
+                    </div>
+                    <div style="border: 1px solid #9ca3af;padding: 10px;border-radius: 5px" v-if="isContentShow && sys_datacommentid == k.sys_datacommentid">
+                      <el-input type="textarea" style="border: none;margin-bottom: 10px" :rows="1" v-model="replyContent" :placeholder="'我回复'+k.createby+':'"></el-input>
+                      <el-divider></el-divider>
+                      <div style="display: flex;justify-content: right">
+                        <el-button   type="primary" size="small" :disabled="replyContent.length == 0" @click="onReply(i.sys_datafollowupid,k)">发布</el-button>
                       </div>
-                      <i style="color:red;" class="el-icon-delete" v-if="nowUserid === i.createuserid" @click="deleteFile(img)"></i>
                     </div>
-                  </div>
-                  <!-- <div v-show="checkFileType(file.postfix) === 'file'"  class="flex-align-center pionter" style="margin-bottom:10px;" v-for="file in i.attinfos" :key="file.index">
-                    <a class="file__link" :href="file.url">{{file.document}}</a>
-                    <i style="color:red;" class="el-icon-delete" @click="deleteFile(file)"></i>
-                  </div> -->
-                  <div style="text-align:right" v-if="nowUserid === i.createuserid">
-                    <upload class="inline-16" slot="upload"
-                      :folderid="folderid"
-                      :status="status"
-                      btntype="icon"
-                      :bindData="{ ownertable: 'sys_datafollowup', ownerid: i.sys_datafollowupid,usetype: 'default' }"
-                      @onSuccess="queryLogs">
-                    </upload>
-                    <editLog :status="status" ref="edits" :data="i" :ownertable="ownertable" @onSuccess="queryLogs"></editLog>
-                    <el-popconfirm
-                        title="确定删除该跟进动态吗?"
-                        @confirm="deleteLogs(i)"
-                    >
-                      <el-button slot="reference" icon="el-icon-delete" size="mini" type="text" :disabled="status === '已结案' || status === '已失败'">删 除</el-button>
-                    </el-popconfirm>
-
                   </div>
                 </div>
               </div>
-          </el-timeline-item>
-        </el-timeline>
-      </div>
+            </div>
+          </div>
+          <el-divider></el-divider>
+          <div style="display: flex;justify-content: space-between;align-items:center;vertical-align:middle;padding: 0 10px 0 10px;margin-top: -5px">
+            <div>
+              <el-button type="text" size="small" @click="commentClick(i)">
+                <svg t="1727055468269" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11646" width="14" height="14"><path d="M643.657143 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286 36.571429 0 58.514286-29.257143 58.514285-58.514286 0-36.571429-29.257143-58.514286-58.514285-58.514286-29.257143-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#999999" p-id="11647"></path><path d="M1024 142.774857c0-43.885714-43.885714-87.771429-87.771429-87.771428H87.771429c-43.885714 0-87.771429 36.571429-87.771429 87.771428v621.714286c0 51.2 43.885714 87.771429 87.771429 87.771428h307.2l117.028571 117.028572 117.028571-117.028572h307.2c51.2 0 87.771429-43.885714 87.771429-87.771428v-621.714286z m-65.828571 592.457143c0 29.257143-21.942857 51.2-51.2 51.2H592.457143l-80.457143 80.457143-80.457143-80.457143H117.028571c-29.257143 0-51.2-21.942857-51.2-51.2v-563.2c0-29.257143 21.942857-51.2 51.2-51.2h789.942858c29.257143 0 51.2 21.942857 51.2 51.2v563.2z" fill="#999999" p-id="11648"></path><path d="M453.485714 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514286-58.514286c0-36.571429-21.942857-65.828571-58.514286-65.828572s-58.514286 29.257143-58.514286 65.828572M256 457.289143c0 36.571429 29.257143 58.514286 58.514286 58.514286s58.514286-29.257143 58.514285-58.514286c0-36.571429-29.257143-58.514286-58.514285-58.514286-36.571429-7.314286-58.514286 21.942857-58.514286 58.514286" fill="#999999" p-id="11649"></path></svg>
+                <span style="font-size: 14px;color: #3874F6;margin-left: 5px;vertical-align: middle">评论({{i.commentqty}})</span></el-button>
+            </div>
+            <div>
+              <marketingExpenses  v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'"  class="inline-16" ownertable="sa_customers" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+              <editLog v-if="nowUserid === i.createuserid" :status="status" ref="edits" :data="i" :ownertable="ownertable" @onSuccess="queryLogs"></editLog>
+              <el-popconfirm
+                  title="确定删除该跟进动态吗?"
+                  @confirm="deleteLogs(i)"
+              >
+                <el-button slot="reference" v-if="nowUserid === i.createuserid"  size="mini" type="text" :disabled="status === '已结案' || status === '已失败'">
+                  <svg t="1727058242243" class="icon" viewBox="0 0 1024 1024" style="vertical-align: middle" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12098" width="14" height="14"><path d="M343.113143 156.379429h333.897143v-73.142858H343.113143v73.142858zM677.010286 0a83.456 83.456 0 0 1 83.456 83.456v64.146286h215.917714a46.299429 46.299429 0 1 1 0 92.672h-48.64v700.196571a83.456 83.456 0 0 1-83.456 83.456H176.128a83.456 83.456 0 0 1-83.456-83.456V240.054857H47.542857a46.299429 46.299429 0 0 1 0-92.452571h212.114286v-64.146286A83.456 83.456 0 0 1 343.113143 0h333.897143z m156.525714 241.371429H186.587429v688.859428h647.021714v-689.005714zM384.877714 345.6a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.691428-41.764571z m250.441143 0a41.764571 41.764571 0 0 1 41.764572 41.764571v333.897143a41.764571 41.764571 0 0 1-83.456 0V387.364571a41.764571 41.764571 0 0 1 41.545142-41.764571z" fill="#999999" p-id="12099"></path></svg>
+                  <span style="font-size: 14px;color: #333;margin-left: 5px;vertical-align: middle">删除</span></el-button>
+              </el-popconfirm>
+            </div>
+          </div>
+        </el-card>
+      </el-timeline>
     </div>
   </div>
 </template>
@@ -169,12 +213,21 @@ export default {
   data () {
     return {
       folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid,
+      userid:JSON.parse(sessionStorage.getItem('active_account')).userid,
+      commentShowId:'',
       logList:[],
       nowUserid:'',
       ownertableNew:'',
       owneridNew:'',
       isFull:false,
+      search:'',
       windowHeight: window.innerHeight,  //实时屏幕高度
+      commentqty:0,
+      content:'',
+      isShow:false,
+      sys_datacommentid:'',
+      isContentShow:false,
+      replyContent:'',
     }
   },
   methods:{
@@ -183,12 +236,13 @@ export default {
         "id": 20220930121501,
         "content": {
             "ownertable":this.ownertable,
-            "ownerid":this.$route.query.id
+            "ownerid":this.$route.query.id,
+            "where":{
+              "condition":this.search
+            }
         }
       })
       this.logList = res.data
-      console.log(this.logList,'跟进数据')
-      console.log(this.logList.length,'数据')
     },
     async queryLogsNew(ownertable,ownerid) {
       this.owneridNew = ownerid
@@ -249,6 +303,70 @@ export default {
     onSuccess(){
       this.queryLogs()
       this.$emit('logSuccess')
+    },
+    async onComment(data){
+      const res = await this.$api.requested({
+        "id": 20240429161601,
+        "content": {
+          "ownertable":'sys_datafollowup',//数据表
+          "ownerid":data.sys_datafollowupid,//数据id
+          "content":this.content,//内容
+          "replyid":"0"//被回复评论id
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.content = ''
+        this.sys_datacommentid = ''
+        this.queryLogs()
+      })
+    },
+    async onReply(id,data){
+      const res = await this.$api.requested({
+        "id": 20240429161601,
+        "content": {
+          "ownertable":'sys_datafollowup',//数据表
+          "ownerid":id,//数据id
+          "content":this.replyContent,//内容
+          "replyid":data.sys_datacommentid//被回复评论id
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.replyContent = ''
+        this.isContentShow = false
+        this.sys_datacommentid = ''
+        this.queryLogs()
+      })
+    },
+    onDel(data){
+      console.log(data,'删除')
+      this.$confirm('确定删除该评论吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(async() => {
+        const res = await this.$api.requested({
+          "id": 20240429161701,
+          "content": {
+            "sys_datacommentid":data.sys_datacommentid
+          }
+        })
+        this.tool.showMessage(res,()=>{
+          this.queryLogs()
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        });
+      });
+
+    },
+    commentClick(i){
+      if (this.commentShowId == i.sys_datafollowupid){
+        this.commentShowId = ''
+      }else {
+        this.commentShowId = i.sys_datafollowupid
+      }
     }
   },
   mounted () {
@@ -278,14 +396,30 @@ export default {
 
 </script>
 <style>
+
 .el-step__description{
   padding-right:0px !important;
 }
 </style>
 <style scoped>
-.step__panel{
-  background-color: #eff4ff;
+/deep/ .el-card__body {
+  padding: 0;
+}
+/deep/ .el-card:hover{
+  border: 1px solid #3874F6;
+}
+/deep/ .el-divider--horizontal {
+  display: block;
+  height: 1px;
+  width: 100%;
+  margin:0 0 10px 0 ;
+}
+.el-card__body {
   padding: 10px;
+}
+.step__panel{
+ /* background-color: #eff4ff;*/
+  /*padding: 10px;*/
   border-radius: 5px;
   color:#666
 }
@@ -359,5 +493,37 @@ export default {
 }
 .flex-wrap{
   flex-wrap: wrap
-};
+}
+.margin-5{
+  margin-left: 5px;
+}
+.padding-style{
+  padding: 0 10px 10px 10px;
+  .span-style{
+    color: #999999;
+    font-size: 14px
+  };
+}
+.card-style{
+  margin-bottom: 10px;
+  .dateLine{
+    margin-bottom: 10px;
+    padding: 10px 10px 0 10px;
+    display: flex;
+    justify-content: left;
+    align-items: center;
+    .div{
+      width: 8px;
+      height:8px;
+      border: 2px solid #3874F6;
+      background: #FFFFFF;
+      border-radius: 40px;
+    }
+    .span{
+      color: #3874F6;
+    }
+  }
+
+}
+
 </style>

+ 363 - 0
src/components/normal-basic-layout/details/modules/followUp/followUpCopy.vue

@@ -0,0 +1,363 @@
+<template>
+  <div class="normal-panel follow__panel" id="containerFull">
+    <div class="container flex-align-center flex-between">
+      <div>
+        <slot name="collapse"></slot>
+        <p class="inline-16">跟进动态</p>
+      </div>
+      <div style="display: flex;justify-content: space-between">
+        <fullScreen class="inline-16" domId="containerFull" @onFull="onFull" @backFull="backFull"></fullScreen>
+        <addLog :ownertable="ownertable" @onSuccess="queryLogs" :status="status"></addLog>
+      </div>
+    </div>
+    <div  class="container" >
+      <div v-if="logList.length === 0">
+        <el-empty description="暂无记录" :image-size="40"></el-empty>
+      </div>
+      <div :style="{overflow: isFull?'auto':'none',height:isFull?(windowHeight - 100) + 'px':''}">
+        <el-timeline>
+          <el-timeline-item
+            v-for="i in logList" :key="i.index"
+            :timestamp="i.createdate">
+              <div slot="dot" class="dot"></div>
+              <div class="step__panel normal-margin">
+                <div class="flex-align-center " style="margin-bottom:10px" v-if="i.userextend.length > 0">
+                  <!-- <p><small>跟进人:</small>{{i.changeby}}</p> -->
+<!--                    <img height="30" width="30" :src="i.headpic" alt="">-->
+                      <div class="avatar" >
+                        <img class="avatar__image" v-if="i.headpic" :src="i.headpic" alt="">
+                        <p v-else>{{i.userextend[0].name.substr(0, 1)}}</p>
+                      </div>
+                      <div style="margin-left: 10px">
+                        <p>{{ i.userextend[0].name }}&nbsp;</p>
+                        <small style="color:#999999ad;margin-top:10px">部门:{{ i.userextend[0].depname?i.userextend[0].depname:"--" }}&emsp;职位:{{ i.userextend[0].position?i.userextend[0].position:"--" }}</small>
+                      </div>
+<!--                  <div style="margin-left: 20px">
+                    <small style="color:#999">{{i.createdate}}</small>
+                  </div>-->
+
+                </div>
+                <div class="flex-align-center " style="margin-bottom:10px" v-else>
+                  <!-- <p><small>跟进人:</small>{{i.changeby}}</p> -->
+                  <!--                    <img height="30" width="30" :src="i.headpic" alt="">-->
+                  <div class="avatar" >
+                    <img class="avatar__image" v-if="i.headpic" :src="i.headpic" alt="">
+                    <p v-else>{{i.createby.substr(0, 1)}}</p>
+                  </div>
+                  <div style="margin-left: 10px">
+                    <p>{{ i.createby }}&nbsp;</p>
+                    <small style="color:#999999ad;margin-top:10px">部门:{{"--" }}&emsp;职位:{{ "--" }}</small>
+                  </div>
+                  <!--                  <div style="margin-left: 20px">
+                                      <small style="color:#999">{{i.createdate}}</small>
+                                    </div>-->
+
+                </div>
+<!--                <div >
+                  <span>{{i.userextend[0].name}}</span>
+                  <span>
+                    <small>部门:{{i.userextend[0].depname}}</small>
+                    <small>职位:{{i.userextend[0].position}}</small>
+                  </span>
+                </div>-->
+                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+                  <span>跟进类型:{{i.type}}</span>
+                </div>
+                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+                  <span>跟进对象:</span>
+                  <span v-for="item in i.contacts" :key="item.index">
+                    <span v-if="item.rowindex === i.contacts.length">
+                      {{item.name}}
+                    </span>
+                    <span v-else>
+                       {{item.name + ','}}
+                    </span>
+
+                  </span>
+                </div>
+                 <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+                  <span>目的:{{i.target}}</span>
+                </div>
+                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+                  <span>过程:{{i.content}}</span>
+                </div>
+                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+                  <span>结果:{{i.results}}</span>
+                </div>
+                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+                  <span>下次跟进计划:{{i.nextplan}}</span>
+                </div>
+                <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
+                  <span>营销费用:</span>
+                  <span v-if="i.salesfeesamount || i.salesfeesamount == 0">
+                    <span style="color: red">¥ </span>
+                      <span style="font-size: 12px;color: red">{{tool.formatAmount(i.salesfeesamount,2)}}</span>
+                  </span>
+                  <span v-else>--</span>
+                </div>
+                <div v-if="$route.path === '/projectChangeDetail'">
+                  <marketingExpenses  class="inline-16" ownertable="sa_project" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+                </div>
+                <div v-if="$route.path === '/customerDetail'">
+                  <marketingExpenses  class="inline-16" ownertable="sa_customers" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+                </div>
+                <div v-if="$route.path === '/PublicCustomerDetail'">
+                  <marketingExpenses  class="inline-16" ownertable="sa_customers" :ownerid="i.sys_datafollowupid" :dataTime="i.createdate" :userid="i.createuserid" @onSuccess="onSuccess"></marketingExpenses>
+                </div>
+                <div class="follow-progress">
+                  <p v-if="$route.path !== '/projectChangeDetail' && $route.path !== '/customerDetail' && $route.path !== '/PublicCustomerDetail'">{{i.content}}</p>
+                  <div>
+                    <!-- <previewImage v-show="checkFileType(img.postfix) === 'img'" style="width:60px;height:60px;margin-left:5px" v-for="img in i.attinfos" :key="img.index" :image="img" :deletebtn="true" @onSuccess="queryLogs"></previewImage> -->
+                    <div class="flex-align-center flex-between pionter" v-for="img in i.attinfos" :key="img.index" style="padding:10px;margin-bottom:5px">
+                      <div class="flex-align-center" style="flex:1;width:100%">
+                        <img width="30" :src="checkFileType(img.postfix) === 'file'?require('@/assets/file_icons/file.svg'):img.url" class="inline-16" alt="">
+                        <div class="file__link">
+                          <a :href="img.url">{{img.document}}</a>
+                          <p>{{(img.contentlength / 1024).toFixed(2)}}kb</p>
+                        </div>
+                      </div>
+                      <i style="color:red;" class="el-icon-delete" v-if="nowUserid === i.createuserid" @click="deleteFile(img)"></i>
+                    </div>
+                  </div>
+                  <!-- <div v-show="checkFileType(file.postfix) === 'file'"  class="flex-align-center pionter" style="margin-bottom:10px;" v-for="file in i.attinfos" :key="file.index">
+                    <a class="file__link" :href="file.url">{{file.document}}</a>
+                    <i style="color:red;" class="el-icon-delete" @click="deleteFile(file)"></i>
+                  </div> -->
+                  <div style="text-align:right" v-if="nowUserid === i.createuserid">
+                    <upload class="inline-16" slot="upload"
+                      :folderid="folderid"
+                      :status="status"
+                      btntype="icon"
+                      :bindData="{ ownertable: 'sys_datafollowup', ownerid: i.sys_datafollowupid,usetype: 'default' }"
+                      @onSuccess="queryLogs">
+                    </upload>
+                    <editLog :status="status" ref="edits" :data="i" :ownertable="ownertable" @onSuccess="queryLogs"></editLog>
+                    <el-popconfirm
+                        title="确定删除该跟进动态吗?"
+                        @confirm="deleteLogs(i)"
+                    >
+                      <el-button slot="reference" icon="el-icon-delete" size="mini" type="text" :disabled="status === '已结案' || status === '已失败'">删 除</el-button>
+                    </el-popconfirm>
+
+                  </div>
+                </div>
+              </div>
+          </el-timeline-item>
+        </el-timeline>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import upload from '@/components/upload/hw_obs_upload.vue'
+import previewImage from '@/components/previewImage/index.vue'
+import fullScreen from "@/views/salesData/components/fullScreen";
+import addLog from './addLog.vue'
+import editLog from './editLog.vue'
+import marketingExpenses from '@/components/marketingExpenses/index'
+export default {
+  props:['ownertable','status'],
+  components:{
+    addLog,
+    editLog,
+    upload,
+    previewImage,
+    fullScreen,
+    marketingExpenses
+  },
+  data () {
+    return {
+      folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid,
+      logList:[],
+      nowUserid:'',
+      ownertableNew:'',
+      owneridNew:'',
+      isFull:false,
+      windowHeight: window.innerHeight,  //实时屏幕高度
+    }
+  },
+  methods:{
+    async queryLogs() {
+      const res = await this.$api.requested({
+        "id": 20220930121501,
+        "content": {
+            "ownertable":this.ownertable,
+            "ownerid":this.$route.query.id
+        }
+      })
+      this.logList = res.data
+      console.log(this.logList,'跟进数据')
+      console.log(this.logList.length,'数据')
+    },
+    async queryLogsNew(ownertable,ownerid) {
+      this.owneridNew = ownerid
+      this.ownertableNew = ownertable
+      const res = await this.$api.requested({
+        "id": 20220930121501,
+        "content": {
+          "ownertable":this.ownertableNew,
+          "ownerid":this.owneridNew
+        }
+      })
+      this.logList = res.data
+      console.log(this.logList,'跟进数据')
+      console.log(this.logList.length,'数据')
+    },
+    async deleteLogs (val) {
+      const res = await this.$api.requested({
+        "id": 20220930121701,
+        "content": {
+          "sys_datafollowupid":val.sys_datafollowupid
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.queryLogs()
+      })
+    },
+    checkFileType (type) {
+      let arr = ['JPG','JPEG','PNG']
+      if (arr.includes(type.toUpperCase())) {
+        return 'img'
+      } else {
+        return 'file'
+      }
+    },
+    async deleteFile (row) {
+      const res = await this.$api.requested({
+        "classname": "system.attachment.Attachment",
+        "method": "deleteFileLink",
+        "content": {
+          "linksids":[row.linksid]
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.queryLogs()
+      })
+    },
+    /*全屏*/
+    onFull(){
+      this.heightChart = this.windowWidth > 1128 ? 'calc(100vh - 85px)':'calc(100vh - 115px)'
+      this.isFull = true
+    },
+    /*退出全屏*/
+    backFull(val){
+      this.heightChart = '100%'
+      this.isFull = false
+      this.$emit('backFull',val)
+    },
+    onSuccess(){
+      this.queryLogs()
+      this.$emit('logSuccess')
+    }
+  },
+  mounted () {
+    this.queryLogs()
+    console.log(this.windowHeight,'windowHeight高度')
+    this.nowUserid = JSON.parse(sessionStorage.getItem('active_account')).userid
+
+    var that = this;
+    // <!--把window.onresize事件挂在到mounted函数上-->
+    window.onresize = () => {
+      return (() => {
+        window.fullHeight = document.documentElement.clientHeight;
+        that.windowHeight = window.fullHeight; // 高
+      })()
+    };
+  },
+  watch: {
+    $route () {
+      this.queryLogs()
+    },
+    windowHeight (val) {
+      console.log("实时屏幕高度:",val );
+      console.log(this.windowHeight)
+    }
+  }
+}
+
+</script>
+<style>
+.el-step__description{
+  padding-right:0px !important;
+}
+</style>
+<style scoped>
+.step__panel{
+  background-color: #eff4ff;
+  padding: 10px;
+  border-radius: 5px;
+  color:#666
+}
+.follow-progress p{
+  width:100%;
+  margin-bottom:5px;
+  font-size:14px;
+  word-wrap: break-word;
+}
+.file__link{
+  color:#999;
+  font-size: 12px;
+  padding: 0 5px;
+  display:block;
+  width: 100%;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.pionter{
+  margin:6px 0;
+  padding: 10px;
+  transition: .2s linear;
+  cursor: pointer;
+  border-radius: 5px;
+  background: #ffff;
+}
+.pionter:hover{
+  box-shadow: 0 5px 10px rgb(0 0 0 / 10%);
+}
+.sticky{
+  position: sticky;
+  top:0px;
+  /* background: #fff; */
+  z-index: 9999;
+}
+.dot{
+  background:#fff;height:10px;width:10px;border-radius:100%;border:2px solid #3874F6;
+}
+.normal-panel{
+  border-radius: 5px;
+}
+.avatar__image{
+  height: 100%;
+  width: 100%;
+}
+.avatar:hover .avatar__model{
+  display: block;
+}
+.avatar{
+  position: relative;
+  height:40px;
+  width: 40px;
+  margin-bottom: 5px;
+  border-radius: 100%;
+  text-align: center;
+  line-height: 40px;
+  color:#fff;
+  font-weight: 500;
+  background: #3874F6;
+  cursor: pointer;
+  overflow: hidden;
+}
+.scroll{
+  height: 410px;
+  overflow: auto;
+}
+.scroll::-webkit-scrollbar-thumb { /*滚动条滑块*/
+  border-radius: 10px;
+  background-color: #CACACA;
+}
+.flex-wrap{
+  flex-wrap: wrap
+};
+</style>

+ 3 - 0
src/components/upload/hw_obs_upload.vue

@@ -91,6 +91,7 @@ export default {
   methods: {
     handleChange (file, filelist) {
       console.log(file)
+      this.$emit('upload')
       this.filelist = filelist
       var index = file.raw.name.lastIndexOf(".");
       var ext = file.name.substr(index + 1);
@@ -146,6 +147,8 @@ export default {
       if (this.count == this.filelist.length) {
         this.$emit('onSuccess',res)
         this.count = 0
+        this.$refs['my-upload'].clearFiles()
+        this.filelist = []
         console.log('触发');
       }
       // if (res.code ===  1) {

+ 6 - 4
src/components/upload/preview_upload.vue

@@ -63,6 +63,7 @@ export default {
   },
   methods: {
     onChange (file,filelist) {
+      this.$emit('clickUpload')
       this.fileList = filelist
       this.beforeUpload(file.raw)
     },
@@ -77,6 +78,7 @@ export default {
 
         var result = e.target.result;
         that.fileLinkList.push({url:result,type:file.type,name:file.name})
+        that.$emit('uploadEnd')
       }
     },
     handleRemove (index) {
@@ -100,7 +102,7 @@ export default {
         this.params.content.filetype = ext
         this.getUploadUrl(file, ext)
       })
-     
+
     },
 
     // 获取华为云上传地址
@@ -114,7 +116,7 @@ export default {
     },
 
     // 上传到华为云
-    async upoladFileToServer (url, file, ext, obsfilename) {      
+    async upoladFileToServer (url, file, ext, obsfilename) {
       let THIS = this
       let config = {
         headers: ext === 'pdf' ? { 'Content-Type': 'application/pdf' } : ext === 'svg'?{ 'Content-Type': 'image/svg+xml' } : { 'Content-Type': 'application/octet-stream' },
@@ -142,7 +144,7 @@ export default {
         this.$refs.upload.clearFiles()
       }
       console.log(this.fileList)
-      
+
     },
   }
 }
@@ -190,4 +192,4 @@ export default {
 .pionter:hover{
   box-shadow: 0 5px 10px rgb(0 0 0 / 10%);
 }
-</style>
+</style>