Browse Source

详情页新增跟进动态

qymljy 1 year ago
parent
commit
040d8a18bc

+ 2 - 2
src/components/attachment_list/index.vue

@@ -30,7 +30,7 @@
           slot-scope="scope"
         >{{scope.row.contentlength > 1073741824?(scope.row.contentlength / Math.pow(1024,3)).toFixed(2)+'GB':scope.row.contentlength > 1048576?(scope.row.contentlength / Math.pow(1024,2)).toFixed(2)+'MB':scope.row.contentlength > 1024?(scope.row.contentlength / Math.pow(1024,1)).toFixed(2)+'KB':scope.row.contentlength+'B'}}</template>
       </el-table-column>
-      <el-table-column :label="$t(`操作`)" min-width="170">
+      <el-table-column :label="$t(`操作`)" :min-width="minWidth?minWidth:170">
         <template slot-scope="scope">
           <div v-if="actid === scope.row.attachmentid">
             <el-button
@@ -82,7 +82,7 @@
 <script>
 import SeeFile from "@/components/file-block/components/SeeFile1";
 export default {
-  props: ["attinfos", "onlyread", "status","attachmentDisabled","disabled"],
+  props: ["attinfos", "onlyread", "status","attachmentDisabled","disabled","minWidth"],
   data() {
     return {
       actid: null,

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

@@ -1,6 +1,7 @@
 <template>
   <div>
-    <el-button type="text" @click="onShow" size="mini">
+    <el-button v-if="isOperation" type="text" @click="onShow" size="mini">{{$t(`费用明细`)}}</el-button>
+    <el-button v-else 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">{{$t(`费用明细`)}}</span></el-button>
     <el-dialog
@@ -154,7 +155,7 @@
 <script>
 export default {
   name: "index",
-  props: ["ownertable", "ownerid", "dataTime", "userid"],
+  props: ["ownertable", "ownerid", "dataTime", "userid","isOperation"],
   data() {
     return {
       dialogVisible: false,

+ 7 - 2
src/components/normal-basic-layout-new/details/index.vue

@@ -60,7 +60,7 @@
       <el-row class="flex-align-stretch no-wrap" :gutter="activeApp.isdatateam?10:activeApp.isdatafollowup?10:0">
         <el-col style="flex:1 0 auto;" :span="activeApp.isdatateam?18:activeApp.isdatafollowup?18:24">
           <slot name="customBefore"></slot>
-          <tabTemp :status="status" :tabs="tabs" :editData="editData" :idname="idname" :ownerid="ownerid" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" @onTabClick="onTabClick">
+          <tabTemp ref="tabRef" :status="status" :tabs="tabs" :editData="editData" :idname="idname" :ownerid="ownerid" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" @onTabClick="onTabClick" @newFollow="newFollow" :isFollow="activeApp.isdatafollowup">
             <div :slot="'slot' + index" v-for="(tab,index) in tabs" :key="tab.index">
               <slot :name="'slot' + index"></slot>
             </div>
@@ -74,7 +74,7 @@
           <group v-if="activeApp.isdatateam" :isGroup="isGroup" :status="status" ref="group" style="margin-bottom:10px"  :justsaler="justsaler" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" @onSuccess="onSuccess" @teamList="teamList">
             <el-button slot="collapse" type="text" icon="el-icon-s-unfold" class="inline-16" @click="onCollapse"></el-button>
           </group>
-          <follow-up v-if="activeApp.isdatafollowup" :status="status" ref="follow" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" :editData="editData" :idname="idname" @logSuccess="logSuccess">
+          <follow-up v-if="activeApp.isdatafollowup" :status="status" ref="follow" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" :editData="editData" :idname="idname" @logSuccess="logSuccess" @onMore="$refs.tabRef.$refs.followRef.listData()">
             <el-button slot="collapse" type="text" icon="el-icon-s-unfold" class="inline-16" @click="onCollapse"></el-button>
           </follow-up>
         </el-col>
@@ -420,6 +420,11 @@ export default {
     },
     logSuccess(){
       this.$emit('logSuccess')
+    },
+    newFollow(){
+      setTimeout(()=>{
+        this.$refs.follow.queryLogs()
+      },1000)
     }
   },
   mounted () {

+ 371 - 0
src/components/normal-basic-layout-new/details/modules/followTable/index.vue

@@ -0,0 +1,371 @@
+<template>
+  <div>
+    <el-input  style="width:200px;" :placeholder="$t('搜索')" :suffix-icon="param.content.where.condition?param.content.where.condition.length > 0?'':'':'el-icon-search'" v-model="param.content.where.condition" @keyup.native.enter="listData(param.content.pageNumber = 1)" @clear="clearSearchValue" size="small" class="input-with-select inline-16 layout_search__panel mt-10" clearable>
+    </el-input>
+    <el-table
+        ref="table"
+        :row-class-name="tableClassName"
+        :data="tableData"
+        highlight-current-row
+        size="mini"
+        :header-cell-style="{height:'40px',color:'#606266',fontWeight:'400',fontSize:'14px'}"
+        :cell-style="{height:'40px',color:'#666666',fontWeight:'400'}"
+        border
+    >
+      <el-table-column
+          prop="createby"
+          label="跟进人"
+          width="89">
+      </el-table-column>
+      <el-table-column
+          prop="createdate"
+          label="跟进时间"
+          width="150">
+      </el-table-column>
+      <el-table-column
+          v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'"
+          prop="type"
+          label="跟进类型"
+          width="180">
+      </el-table-column>
+      <el-table-column
+          prop="contacts"
+          v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'"
+          label="跟进对象"
+          width="180">
+        <template slot-scope="scope">
+          <div v-for="item in scope.row.contacts" :key="item.index">
+            <span v-if="item.rowindex === scope.row.contacts.length" class="span-style">
+              {{item.name}}
+            </span>
+            <span v-else class="span-style">
+              {{item.name + ','}}
+            </span>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+          prop="content"
+          label="跟进内容"
+          >
+        <template slot-scope="scope">
+          <div v-if="($route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail')">
+            <div>{{$t(`目的:`)}}{{scope.row.target}}</div>
+            <div>{{$t(`过程:`)}}{{scope.row.content}}</div>
+            <div>{{$t(`结果:`)}}{{scope.row.results}}</div>
+            <div>{{$t(`下次跟进计划:`)}}{{scope.row.nextplan}}</div>
+          </div>
+          <div v-else>{{scope.row.content}}</div>
+        </template>
+      </el-table-column>
+      <el-table-column
+          prop="attcount"
+          label="附件数"
+          width="89">
+        <template slot-scope="scope">
+          <el-button type="text" size="small" @click="showFiles(scope.row)">{{scope.row.attcount}}</el-button>
+        </template>
+      </el-table-column>
+      <el-table-column
+          v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'"
+          prop="salesfeesamount"
+          label="营销费用"
+          width="100">
+        <template slot-scope="scope">
+          {{scope.row.salesfeesamount?tool.formatAmount(scope.row.salesfeesamount,2,'¥'):'¥0.00'}}
+        </template>
+      </el-table-column>
+      <el-table-column
+          label="操作"
+          width="220">
+        <template slot-scope="scope">
+          <el-button type="text" size="small" @click="showReview(scope.row)" class="inline-16">{{$t(`评论`)}}({{scope.row.commentqty}})</el-button>
+          <editLog v-if="userid === scope.row.createuserid && !disabled"  ref="edits" :data="scope.row" :ownertable="ownertable" @onSuccess="onSuccess" :isOperation="true"></editLog>
+          <el-button type="text" size="small" class="inline-16" @click="onDelFollow(scope.row)" v-if="userid === scope.row.createuserid && !disabled">{{$t(`删除`)}}</el-button>
+          <marketingExpenses  v-if="($route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail') && !disabled"
+                              class="inline-16" ownertable="sa_customers" :ownerid="scope.row.sys_datafollowupid" :dataTime="scope.row.createdate" :userid="scope.row.createuserid" :isOperation="true"
+                              @onSuccess="listData"></marketingExpenses>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div  class="container normal-panel" style="text-align:right">
+      <el-pagination
+          background
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-sizes="[20, 50, 100, 200]"
+          :page-size="100"
+          layout="total,sizes, prev, pager, next, jumper"
+          :total="total">
+      </el-pagination>
+    </div>
+    <normalDialog ref="normalDialogFile" title="附件" >
+      <template slot="content">
+        <attachmentList style="margin-top: -10px;margin-bottom: 10px" :attinfos="attinfo_attachment" :onlyread="true" minWidth="80">
+        </attachmentList>
+      </template>
+    </normalDialog>
+    <normalDialog ref="normalDialogReview" title="评论" @closeDialog="closeDialog">
+      <template slot="content">
+        <div style="padding: 10px">
+          <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="$t(`我评论`)+':'"></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">{{$t(`发布`)}}</el-button>
+            </div>
+          </div>
+        </div>
+        <div 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">{{$t(`评论`)}}({{commentqty}})</div>
+            <div v-for="item in 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)">{{$t(`删除`)}}</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">{{$t(`回复`)}}</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">{{$t(`取消回复`)}}</span></el-button>
+                </div>
+              </div>
+              <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="$t('我回复')+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(sys_datafollowupid,item)">{{$t(`发布`)}}</el-button>
+                </div>
+              </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)">{{$t(`删除`)}}</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">{{$t(`回复`)}}</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">{{$t(`取消回复`)}}</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="$t('我回复')+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(sys_datafollowupid,k)">{{$t(`发布`)}}</el-button>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </template>
+    </normalDialog>
+  </div>
+</template>
+
+<script>
+import marketingExpenses from '@/components/marketingExpenses/index'
+import normalDialog from '@/template/dialogTemplate/normal'
+import attachmentList from '@/components/attachment_list/index.vue'
+import editLog from '../followUp/editLog'
+export default {
+  name: "index",
+  props:['ownertable','disabled'],
+  components:{marketingExpenses,normalDialog,attachmentList,editLog},
+  data() {
+    return {
+      tableData:[],
+      currentPage:0,
+      total:0,
+      attinfo_attachment:[],
+      content:'',
+      comment:[],
+      commentqty:0,
+      userid:JSON.parse(sessionStorage.getItem('active_account')).userid,
+      isContentShow:false,
+      sys_datacommentid:'',
+      replyContent:'',
+      sys_datafollowupid:'',
+      param:{
+        "id": 20220930121501,
+        "content": {
+          "ownertable":'',
+          "ownerid":'',
+          "pageNumber": 1,
+          "pageSize": 50,
+          "where":{
+            "condition":''
+          }
+        }
+      }
+    }
+  },
+  methods:{
+    async listData(type,id){
+      this.param.content.ownerid = this.$route.query.id
+      this.param.content.ownertable = this.ownertable
+      const res = await this.$api.requested(this.param)
+      this.tableData = res.data
+      this.total = res.total
+      this.currentPage = res.pageNumber
+      if (type){
+        this.tableData.forEach(item=>{
+          if (item.sys_datafollowupid == id){
+            this.comment = item.comment
+            this.commentqty = item.commentqty
+          }
+        })
+      }
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val
+      this.listData()
+    },
+    tableClassName({ row, rowIndex }) {
+      row.index = rowIndex;
+    },
+    clearSearchValue () {
+      this.$store.dispatch('clearSearchValue')
+      this.listData(this.param.content.pageNumber = 1)
+    },
+    showFiles(data){
+      this.$refs.normalDialogFile.dialogVisible = true
+      this.attinfo_attachment = data.attinfos
+    },
+    showReview(data){
+      this.$refs.normalDialogReview.dialogVisible = true
+      this.comment = data.comment
+      this.commentqty = data.commentqty
+      this.sys_datafollowupid = data.sys_datafollowupid
+    },
+    onDel(data){
+      console.log(data,'删除')
+      this.$confirm(this.$t('确定删除该评论吗')+'?', this.$t('提示'), {
+        confirmButtonText: this.$t('确定'),
+        cancelButtonText: this.$t('取消'),
+        type: 'warning'
+      }).then(async() => {
+        const res = await this.$api.requested({
+          "id": 20240429161701,
+          "content": {
+            "sys_datacommentid":data.sys_datacommentid
+          }
+        })
+        this.tool.showMessage(res,()=>{
+          this.listData('删除',this.sys_datafollowupid)
+          this.$emit('newFollow')
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: this.$t('已取消删除'),
+        });
+      });
+
+    },
+    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.listData('回复',this.sys_datafollowupid)
+        this.$emit('newFollow')
+      })
+    },
+    async onComment(){
+      const res = await this.$api.requested({
+        "id": 20240429161601,
+        "content": {
+          "ownertable":'sys_datafollowup',//数据表
+          "ownerid":this.sys_datafollowupid,//数据id
+          "content":this.content,//内容
+          "replyid":"0"//被回复评论id
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.content = ''
+        this.sys_datacommentid = ''
+        this.listData('回复',this.sys_datafollowupid)
+        this.$emit('newFollow')
+      })
+    },
+    closeDialog(){
+      this.content = ''
+      this.replyContent = ''
+      this.isContentShow = false
+    },
+    onSuccess(){
+      this.listData()
+      this.$emit('newFollow')
+    },
+    onDelFollow(val){
+      this.$confirm(this.$t('确定删除该跟进动态吗?'), this.$t('提示'), {
+        confirmButtonText: this.$t('确定'),
+        cancelButtonText: this.$t('取消'),
+        type: 'warning'
+      }).then(async() => {
+        const res = await this.$api.requested({
+          "id": 20220930121701,
+          "content": {
+            "sys_datafollowupid":val.sys_datafollowupid
+          }
+        })
+        this.tool.showMessage(res,()=>{
+          this.listData()
+          this.$emit('newFollow')
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        });
+      });
+    }
+  },
+  mounted() {
+    this.listData()
+  }
+}
+</script>
+
+<style scoped>
+  .table-style{
+    width: 100%;
+    height: calc(100vh - 390px);
+  }
+</style>

+ 3 - 2
src/components/normal-basic-layout-new/details/modules/followUp/editLog.vue

@@ -1,6 +1,7 @@
 <template>
   <div class="inline-16">
-    <el-button type="text" size="mini" @click="onShow(dialogFormVisible = true)" :disabled="status === '已结案' || status === '已失败'">
+    <el-button v-if="isOperation" type="text" @click="onShow(dialogFormVisible = true)" size="mini">{{$t(`编辑`)}}</el-button>
+    <el-button v-else 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">{{$t(`编辑`)}}</span></el-button>
     <el-drawer :title="$t(`编辑跟进动态`)" size="600px" append-to-body :visible.sync="dialogFormVisible" @close="onClose">
@@ -76,7 +77,7 @@ import upload from '@/components/upload/hw_obs_upload.vue'
 import previewImage from '@/components/previewImage/index.vue'
 import contactsList from '@/template/projectChange/contactsList.vue'
 export default {
-  props:['data','ownertable','status','ownerid'],
+  props:['data','ownertable','status','ownerid','disabled','isOperation'],
   components:{
     upload,
     previewImage,

+ 12 - 2
src/components/normal-basic-layout-new/details/modules/followUp/followUp.vue

@@ -3,10 +3,10 @@
     <div class="container flex-align-center flex-between" style="padding: 10px 10px 0 10px !important;">
       <div>
         <slot name="collapse"></slot>
-        <p class="inline-16">{{$t(`跟进动态`)}}</p>
+        <p class="inline-16">{{$t(`跟进动态`)}}{{'('+ total +')'}}</p>
       </div>
       <div style="display: flex;justify-content: space-between">
-        <fullScreen class="inline-16" domId="containerFull" @onFull="onFull" @backFull="backFull"></fullScreen>
+        <el-button type="default" size="mini" @click="onMore" class="inline-16">{{$t(`查看更多`)}}</el-button>
         <addLog :ownertable="ownertable" @onSuccess="queryLogs" :status="status"></addLog>
       </div>
     </div>
@@ -229,6 +229,7 @@ export default {
       sys_datacommentid:'',
       isContentShow:false,
       replyContent:'',
+      total:0
     }
   },
   methods:{
@@ -238,12 +239,18 @@ export default {
         "content": {
           "ownertable":this.ownertable,
           "ownerid":this.$route.query.id,
+          "pageNumber": 1,
+          "pageSize": 9999,
           "where":{
             "condition":this.search
           }
         }
       })
       this.logList = res.data
+      this.total = res.total
+      setTimeout(()=>{
+        this.onMore()
+      },1000)
     },
     async queryLogsNew(ownertable,ownerid) {
       this.owneridNew = ownerid
@@ -368,6 +375,9 @@ export default {
       }else {
         this.commentShowId = i.sys_datafollowupid
       }
+    },
+    onMore(){
+      this.$emit('onMore')
     }
   },
   mounted () {

+ 11 - 2
src/components/normal-basic-layout-new/details/modules/tabs/tab.vue

@@ -3,6 +3,7 @@
     <div>
       <el-tabs v-model="activeName"  @tab-click="handleClick">
         <el-tab-pane v-for="(tab,index) in tabs" :key="index" :label="$t(tab)" :name="'tab' + index"></el-tab-pane>
+        <el-tab-pane v-if="isFollow" :label="$t('跟进动态')" name="follow"></el-tab-pane>
         <el-tab-pane :label="$t('附件')" name="file"></el-tab-pane>
         <el-tab-pane :label="$t('操作记录')" name="log"></el-tab-pane>
       </el-tabs>
@@ -11,6 +12,9 @@
     <div v-show="'tab'+index === activeName" v-for="(item,index) in tabs" :key="index">
       <slot v-if="'tab'+index === activeName"  :name="'slot' + index"></slot>
     </div>
+    <div v-show="activeName === 'follow'">
+      <followTable :ownertable="ownertable" :disabled="disabled" @newFollow="newFollow" ref="followRef"></followTable>
+    </div>
     <div v-show="activeName === 'file'">
       <attachmentList v-if="activeName === 'file'" :status="status" :attinfos="attinfo_attachment" @onSuccess="queryAttments" @cancelEdit="queryAttments">
         <upload slot="upload" :folderid="folderid" :status="status"
@@ -28,13 +32,15 @@
 import attachmentList from '@/components/attachment_list/index.vue'
 import upload from '@/components/upload/hw_obs_upload.vue'
 import datalog from '../datalog/index.vue'
+import followTable from '../followTable/index'
 
 export default {
-  props:['tabs','editData','ownertable','idname','status','ownerid'],
+  props:['tabs','editData','ownertable','idname','status','ownerid','disabled','isFollow'],
   components:{
     attachmentList,
     upload,
-    datalog
+    datalog,
+    followTable
   },
   data () {
     return {
@@ -63,6 +69,9 @@ export default {
       console.log(this.activeName)
       /*this.queryAttments()*/
       this.$emit('onTabClick')
+    },
+    newFollow(){
+      this.$emit('newFollow')
     }
   },
   mounted () {

+ 7 - 2
src/components/normal-basic-layout/details/index.vue

@@ -82,7 +82,7 @@
       <el-row class="flex-align-stretch no-wrap" :gutter="activeApp.isdatateam?10:activeApp.isdatafollowup?10:0">
         <el-col style="flex:1 0 auto;" :span="activeApp.isdatateam?18:activeApp.isdatafollowup?18:24">
           <slot name="customBefore"></slot>
-          <tabTemp ref="tabRef" :disabled="disabled" :status="status" :tabs="tabs" :editData="editData" :idname="idname" :attachmentDisabled="attachmentDisabled" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" @onTabClick="onTabClick" :isFollow="activeApp.isdatafollowup">
+          <tabTemp ref="tabRef" :disabled="disabled" :status="status" :tabs="tabs" :editData="editData" :idname="idname" :attachmentDisabled="attachmentDisabled" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" @onTabClick="onTabClick" @newFollow="newFollow" :isFollow="activeApp.isdatafollowup">
             <div :slot="'slot' + index" v-for="(tab,index) in tabs" :key="tab.index">
               <slot :name="'slot' + index"></slot>
             </div>
@@ -96,7 +96,7 @@
           <group v-if="activeApp.isdatateam" :isGroup="isGroup" :status="status" :disabled="disabled" ref="group" style="margin-bottom:10px"  :justsaler="justsaler" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" @onSuccess="onSuccess" @teamList="teamList">
             <el-button slot="collapse" type="text" icon="el-icon-s-unfold" class="inline-16" @click="onCollapse"></el-button>
           </group>
-          <follow-up v-if="activeApp.isdatafollowup" :status="status" ref="follow" :disabled="disabled" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" :editData="editData" :idname="idname" @logSuccess="logSuccess" @onMore="$refs.tabRef.activeName = 'follow'">
+          <follow-up v-if="activeApp.isdatafollowup" :status="status" ref="follow" :disabled="disabled" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" :editData="editData" :idname="idname" @logSuccess="logSuccess" @onMore="$refs.tabRef.$refs.followRef.listData()">
             <el-button slot="collapse" type="text" icon="el-icon-s-unfold" class="inline-16" @click="onCollapse"></el-button>
           </follow-up>
         </el-col>
@@ -500,6 +500,11 @@ export default {
     },
     logSuccess(){
       this.$emit('logSuccess')
+    },
+    newFollow(){
+      setTimeout(()=>{
+        this.$refs.follow.queryLogs()
+      },1000)
     }
   },
   mounted () {

+ 225 - 13
src/components/normal-basic-layout/details/modules/followTable/index.vue

@@ -23,12 +23,14 @@
           width="150">
       </el-table-column>
       <el-table-column
+          v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'"
           prop="type"
           label="跟进类型"
           width="180">
       </el-table-column>
       <el-table-column
           prop="contacts"
+          v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'"
           label="跟进对象"
           width="180">
         <template slot-scope="scope">
@@ -46,26 +48,42 @@
           prop="content"
           label="跟进内容"
           >
+        <template slot-scope="scope">
+          <div v-if="($route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail')">
+            <div>{{$t(`目的:`)}}{{scope.row.target}}</div>
+            <div>{{$t(`过程:`)}}{{scope.row.content}}</div>
+            <div>{{$t(`结果:`)}}{{scope.row.results}}</div>
+            <div>{{$t(`下次跟进计划:`)}}{{scope.row.nextplan}}</div>
+          </div>
+          <div v-else>{{scope.row.content}}</div>
+        </template>
       </el-table-column>
       <el-table-column
           prop="attcount"
           label="附件数"
           width="89">
+        <template slot-scope="scope">
+          <el-button type="text" size="small" @click="showFiles(scope.row)">{{scope.row.attcount}}</el-button>
+        </template>
       </el-table-column>
       <el-table-column
+          v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'"
           prop="salesfeesamount"
           label="营销费用"
           width="100">
+        <template slot-scope="scope">
+          {{scope.row.salesfeesamount?tool.formatAmount(scope.row.salesfeesamount,2,'¥'):'¥0.00'}}
+        </template>
       </el-table-column>
       <el-table-column
           label="操作"
-          width="180">
+          width="220">
         <template slot-scope="scope">
-          <el-button type="text">评论</el-button>
-          <el-button type="text">编辑</el-button>
-          <el-button type="text">删除</el-button>
+          <el-button type="text" size="small" @click="showReview(scope.row)" class="inline-16">{{$t(`评论`)}}({{scope.row.commentqty}})</el-button>
+          <editLog v-if="userid === scope.row.createuserid && !disabled"  ref="edits" :data="scope.row" :ownertable="ownertable" @onSuccess="onSuccess" :isOperation="true"></editLog>
+          <el-button type="text" size="small" class="inline-16" @click="onDelFollow(scope.row)" v-if="userid === scope.row.createuserid && !disabled">{{$t(`删除`)}}</el-button>
           <marketingExpenses  v-if="($route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail') && !disabled"
-                              class="inline-16" ownertable="sa_customers" :ownerid="scope.row.sys_datafollowupid" :dataTime="scope.row.createdate" :userid="scope.row.createuserid"
+                              class="inline-16" ownertable="sa_customers" :ownerid="scope.row.sys_datafollowupid" :dataTime="scope.row.createdate" :userid="scope.row.createuserid" :isOperation="true"
                               @onSuccess="listData"></marketingExpenses>
         </template>
       </el-table-column>
@@ -82,20 +100,112 @@
           :total="total">
       </el-pagination>
     </div>
+    <normalDialog ref="normalDialogFile" title="附件" >
+      <template slot="content">
+        <attachmentList style="margin-top: -10px;margin-bottom: 10px" :attinfos="attinfo_attachment" :onlyread="true" minWidth="80">
+        </attachmentList>
+      </template>
+    </normalDialog>
+    <normalDialog ref="normalDialogReview" title="评论" @closeDialog="closeDialog">
+      <template slot="content">
+        <div style="padding: 10px">
+          <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="$t(`我评论`)+':'"></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">{{$t(`发布`)}}</el-button>
+            </div>
+          </div>
+        </div>
+        <div 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">{{$t(`评论`)}}({{commentqty}})</div>
+            <div v-for="item in 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)">{{$t(`删除`)}}</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">{{$t(`回复`)}}</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">{{$t(`取消回复`)}}</span></el-button>
+                </div>
+              </div>
+              <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="$t('我回复')+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(sys_datafollowupid,item)">{{$t(`发布`)}}</el-button>
+                </div>
+              </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)">{{$t(`删除`)}}</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">{{$t(`回复`)}}</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">{{$t(`取消回复`)}}</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="$t('我回复')+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(sys_datafollowupid,k)">{{$t(`发布`)}}</el-button>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </template>
+    </normalDialog>
   </div>
 </template>
 
 <script>
 import marketingExpenses from '@/components/marketingExpenses/index'
+import normalDialog from '@/template/dialogTemplate/normal'
+import attachmentList from '@/components/attachment_list/index.vue'
+import editLog from '../followUp/editLog'
 export default {
   name: "index",
   props:['ownertable','disabled'],
-  components:{marketingExpenses},
+  components:{marketingExpenses,normalDialog,attachmentList,editLog},
   data() {
     return {
       tableData:[],
       currentPage:0,
       total:0,
+      attinfo_attachment:[],
+      content:'',
+      comment:[],
+      commentqty:0,
+      userid:JSON.parse(sessionStorage.getItem('active_account')).userid,
+      isContentShow:false,
+      sys_datacommentid:'',
+      replyContent:'',
+      sys_datafollowupid:'',
       param:{
         "id": 20220930121501,
         "content": {
@@ -111,13 +221,21 @@ export default {
     }
   },
   methods:{
-    async listData(){
+    async listData(type,id){
       this.param.content.ownerid = this.$route.query.id
       this.param.content.ownertable = this.ownertable
       const res = await this.$api.requested(this.param)
       this.tableData = res.data
       this.total = res.total
       this.currentPage = res.pageNumber
+      if (type){
+        this.tableData.forEach(item=>{
+          if (item.sys_datafollowupid == id){
+            this.comment = item.comment
+            this.commentqty = item.commentqty
+          }
+        })
+      }
     },
     handleSizeChange(val) {
       // console.log(`每页 ${val} 条`);
@@ -136,14 +254,108 @@ export default {
       this.$store.dispatch('clearSearchValue')
       this.listData(this.param.content.pageNumber = 1)
     },
-    scrollToBottom() {
-      this.$nextTick(() => {
-        if (this.$refs.table) {
-          const scrollHeight = this.$refs.table.scrollHeight;
-          this.$refs.table.scrollTop = scrollHeight; // 将滚动条移动到底部
-        }
+    showFiles(data){
+      this.$refs.normalDialogFile.dialogVisible = true
+      this.attinfo_attachment = data.attinfos
+    },
+    showReview(data){
+      this.$refs.normalDialogReview.dialogVisible = true
+      this.comment = data.comment
+      this.commentqty = data.commentqty
+      this.sys_datafollowupid = data.sys_datafollowupid
+    },
+    onDel(data){
+      console.log(data,'删除')
+      this.$confirm(this.$t('确定删除该评论吗')+'?', this.$t('提示'), {
+        confirmButtonText: this.$t('确定'),
+        cancelButtonText: this.$t('取消'),
+        type: 'warning'
+      }).then(async() => {
+        const res = await this.$api.requested({
+          "id": 20240429161701,
+          "content": {
+            "sys_datacommentid":data.sys_datacommentid
+          }
+        })
+        this.tool.showMessage(res,()=>{
+          this.listData('删除',this.sys_datafollowupid)
+          this.$emit('newFollow')
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: this.$t('已取消删除'),
+        });
       });
+
+    },
+    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.listData('回复',this.sys_datafollowupid)
+        this.$emit('newFollow')
+      })
+    },
+    async onComment(){
+      const res = await this.$api.requested({
+        "id": 20240429161601,
+        "content": {
+          "ownertable":'sys_datafollowup',//数据表
+          "ownerid":this.sys_datafollowupid,//数据id
+          "content":this.content,//内容
+          "replyid":"0"//被回复评论id
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.content = ''
+        this.sys_datacommentid = ''
+        this.listData('回复',this.sys_datafollowupid)
+        this.$emit('newFollow')
+      })
+    },
+    closeDialog(){
+      this.content = ''
+      this.replyContent = ''
+      this.isContentShow = false
+    },
+    onSuccess(){
+      this.listData()
+      this.$emit('newFollow')
     },
+    onDelFollow(val){
+      this.$confirm(this.$t('确定删除该跟进动态吗?'), this.$t('提示'), {
+        confirmButtonText: this.$t('确定'),
+        cancelButtonText: this.$t('取消'),
+        type: 'warning'
+      }).then(async() => {
+        const res = await this.$api.requested({
+          "id": 20220930121701,
+          "content": {
+            "sys_datafollowupid":val.sys_datafollowupid
+          }
+        })
+        this.tool.showMessage(res,()=>{
+          this.listData()
+          this.$emit('newFollow')
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        });
+      });
+    }
   },
   mounted() {
     this.listData()

+ 3 - 2
src/components/normal-basic-layout/details/modules/followUp/editLog.vue

@@ -1,6 +1,7 @@
 <template>
   <div class="inline-16">
-    <el-button  type="text" size="mini" @click="onShow(dialogFormVisible = true)" :disabled="status === '已结案' || status === '已失败'">
+    <el-button v-if="isOperation" type="text" @click="onShow(dialogFormVisible = true)" size="mini">{{$t(`编辑`)}}</el-button>
+    <el-button v-else 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" >{{$t(`编辑`)}}</span></el-button>
     <el-drawer :title="$t(`编辑跟进动态`)" size="600px" append-to-body :visible.sync="dialogFormVisible" @close="onClose">
@@ -76,7 +77,7 @@ import upload from '@/components/upload/hw_obs_upload.vue'
 import previewImage from '@/components/previewImage/index.vue'
 import contactsList from '@/template/projectChange/contactsList.vue'
 export default {
-  props:['data','ownertable','status','disabled'],
+  props:['data','ownertable','status','disabled','isOperation'],
   components:{
     upload,
     previewImage,

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

@@ -249,6 +249,9 @@ export default {
       })
       this.logList = res.data
       this.total = res.total
+      setTimeout(()=>{
+        this.onMore()
+      },1000)
     },
     async queryLogsNew(ownertable,ownerid) {
       this.owneridNew = ownerid

+ 4 - 1
src/components/normal-basic-layout/details/modules/tabs/tab.vue

@@ -13,7 +13,7 @@
       <slot v-if="'tab'+index === activeName"  :name="'slot' + index"></slot>
     </div>
     <div v-show="activeName === 'follow'">
-      <followTable :ownertable="ownertable" :disabled="disabled"></followTable>
+      <followTable :ownertable="ownertable" :disabled="disabled" @newFollow="newFollow" ref="followRef"></followTable>
     </div>
     <div v-show="activeName === 'file'">
       <attachmentList v-if="activeName === 'file'" :disabled="disabled" :status="status" :attachmentDisabled="attachmentDisabled"  :attinfos="attinfo_attachment" @onSuccess="queryAttments" @cancelEdit="queryAttments">
@@ -67,6 +67,9 @@ export default {
     handleClick(){
       console.log(this.activeName)
       this.$emit('onTabClick')
+    },
+    newFollow(){
+      this.$emit('newFollow')
     }
   },
   mounted () {

+ 79 - 0
src/template/dialogTemplate/normal.vue

@@ -0,0 +1,79 @@
+<template>
+  <div>
+    <el-dialog
+        :title="title"
+        :visible.sync="dialogVisible"
+        width="700px"
+        append-to-body
+        :show-close="false"
+        >
+      <slot name="content"></slot>
+      <div slot="footer" class="dialog-footer" style="margin-top: 0;!important;">
+        <el-button @click="onClose" size="small" style="width: 200px">{{$t(`关闭`)}}</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+
+export default {
+  name: "normal",
+  props:{
+    title:String,
+  },
+  data() {
+    return {
+      dialogVisible:false
+    }
+  },
+  methods:{
+    onClose(){
+      this.dialogVisible = false
+      this.$emit('closeDialog')
+    }
+  },
+}
+</script>
+
+<style scoped>
+  /deep/ .el-dialog__title {
+    line-height: 24px;
+    font-size: 16px;
+    color: #303133;
+  }
+  /deep/ .el-dialog__header {
+    padding: 10px 10px;
+    padding-bottom: 10px;
+  }
+  /deep/ .el-dialog__footer {
+    padding: 10px;
+    padding-top: 10px;
+    text-align: right;
+    box-sizing: border-box;
+  }
+  /deep/ .el-dialog__headerbtn {
+    position: absolute;
+    top: 10px;
+    right: 10px;
+    padding: 0;
+    background: 0 0;
+    border: none;
+    outline: 0;
+    cursor: pointer;
+    font-size: 16px;
+  }
+  /deep/ .el-dialog__body {
+    padding: 0px 10px !important;
+  }
+  /deep/ .el-form-item__label {
+    text-align: right;
+    vertical-align: middle;
+    float: left;
+    font-size: 13px;
+    color: #606266;
+    line-height: 40px;
+    padding: 0 12px 0 0;
+    box-sizing: border-box;
+  }
+</style>