Переглянути джерело

我的客户、公海客户、项目商机、通讯录、销售线索新增营销费用明细

qymljy 1 рік тому
батько
коміт
e0abc2ebc4

+ 1 - 0
src/HDrpManagement/projectChange/modules/detail.vue

@@ -14,6 +14,7 @@
     :status="mainData.status"
     @pageChange="pageChange"
     @onEditSuccess="queryMainData($route.query.id)"
+    @logSuccess="queryMainData"
     @sysTag="sysTag">
     <!-- 使用此插槽可不传[tags] -->
 <!--    <tagPanl slot="tags" :data="tagObj" ownertable="sa_project" :id="mainData.sa_projectid" @onSuccess="queryMainData"/>-->

+ 1 - 0
src/HManagement/addressList/addressBook/detail/index.vue

@@ -12,6 +12,7 @@
       :tabs="['详细信息','关联客户','关联项目']"
       :pageChange="true"
       @teamList="teamList"
+      @logSuccess="queryMainData"
       >
     <template slot="customOperation">
       <div class="inline-16">

+ 1 - 0
src/SDrpManagement/salerPrivatecustomer/detail/customerDetail.vue

@@ -13,6 +13,7 @@
         :tabs="['详细信息','联系人','客户地址','开票信息','项目商机','报价单','关联合同','账户余额','银行卡信息','关联线索']"
         @pageChange="pageChange"
         @onEditSuccess="onEditSuccess"
+        @logSuccess="queryMainData"
         @sysTag="sysTag">
       <div slot="tags">
         <!-- 使用此插槽可不传[tags] -->

+ 6 - 3
src/SManagement/orderclue_detail/components/followDetail.vue

@@ -58,7 +58,7 @@
                 </div>
               </el-col>
               <el-col :span="24">
-                <div style="float: left;margin-top: 10px">
+                <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">
@@ -68,6 +68,7 @@
                     <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>
@@ -95,9 +96,10 @@ 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 marketingExpenses from '@/components/marketingExpenses/index'
 export default {
   name: 'followDetail',
-  props:['disabled'],
+  props:['disabled','data'],
   data() {
     return {
       bindData:{},
@@ -136,7 +138,7 @@ export default {
       total:0
     };
   },
-  components:{ TimeSelect , FileItem,upload,editFollow},
+  components:{ TimeSelect , FileItem,upload,editFollow,marketingExpenses},
   computed:{
   },
   watch:{
@@ -222,6 +224,7 @@ export default {
     },
     onSuccess () {
       this.getFollowDetail()
+      this.$emit('onSuccess')
     },
   },
 };

+ 1 - 1
src/SManagement/orderclue_detail/index.vue

@@ -37,7 +37,7 @@
         <BaseInfo :detailInfo="detailInfo"/>
       </div>
       <div slot="slot0" class="container normal-panel" style="padding: 10px">
-        <followDetail ref="followDetail" :disabled="!isHandle || mainData.status === '已无效' || mainData.status === '已过期'"/>
+        <followDetail :data="mainData" ref="followDetail" :disabled="!isHandle || mainData.status === '已无效' || mainData.status === '已过期'" @onSuccess="queryMainData"/>
       </div>
       <div slot="slot2" class="container normal-panel">
         <sourceClues></sourceClues>

+ 275 - 0
src/components/marketingExpenses/index.vue

@@ -0,0 +1,275 @@
+<template>
+  <div>
+    <el-button type="text" @click="onShow" size="mini">营销费用明细></el-button>
+    <el-dialog
+        :title="title"
+        :visible.sync="dialogVisible"
+        width="60%"
+        append-to-body
+        :show-close="false"
+        >
+      <el-input style="width:200px;margin-bottom: 20px" placeholder="搜索" :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="listData(param.content.pageNumber = 1)" size="small" class="input-with-select inline-16 layout_search__panel" clearable>
+      </el-input>
+      <el-button class="inline-16" type="primary" size="small" @click="addClick" v-if="tool.checkAuth($route.name,'marketingExpenses')">新增费用明细</el-button>
+      <el-table :data="list"  border size="mini" :header-cell-style="{height:'40px',color:'#606266',fontWeight:'400',fontSize:'14px'}"
+                :cell-style="{height:'40px',color:'#666666',fontWeight:'400'}" height="calc(100vh - 600px)" >
+        <el-table-column width="200" label="单号">
+          <template slot-scope="scope">
+            <span style="margin-left: 10px">{{ scope.row.billno?scope.row.billno:'--' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column width="150" label="业务员">
+          <template slot-scope="scope">
+            <span style="margin-left: 10px">{{ scope.row.name?scope.row.name:'--' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column width="150"  label="部门">
+          <template slot-scope="scope">
+            <span style="margin-left: 10px">{{ scope.row.depname?scope.row.depname:'--' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column width="200"  label="客户名称">
+          <template slot-scope="scope">
+            <span style="margin-left: 10px">{{ scope.row.enterprisename?scope.row.enterprisename:'--' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column width="200"  label="项目名称">
+          <template slot-scope="scope">
+            <span style="margin-left: 10px">{{ scope.row.projectname?scope.row.projectname:'--' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column width="150"  label="联系人">
+          <template slot-scope="scope">
+            <span style="margin-left: 10px">{{ scope.row.names?scope.row.names:'--' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column width="200"  label="费用类型">
+          <template slot-scope="scope">
+            <span style="margin-left: 10px">{{ scope.row.feestypefullname?scope.row.feestypefullname:'--' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column width="200"  label="营销费用(元)">
+          <template slot-scope="scope">
+            <span style="margin-left: 10px">{{ scope.row.amount?scope.row.amount:'--' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column width="120"  label="操作"  fixed="right" v-if="tool.checkAuth($route.name,'marketingExpenses')">
+          <template slot-scope="scope">
+            <el-button type="text" class="inline-16" @click="editClick(scope.row)" >编辑</el-button>
+            <el-button type="text" class="inline-16" @click="delClick(scope.row)">删除</el-button>
+          </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="20"
+            layout="total,sizes, prev, pager, next, jumper"
+            :total="total">
+        </el-pagination>
+      </div>
+      <div slot="footer" class="dialog-footer" style="margin-top: 0;!important;">
+        <el-button @click="onClose" size="small">关闭</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog :title="formTitle" :visible.sync="dialogFormVisible" append-to-body :show-close="false">
+      <el-form :model="form" ref="formRef" label-width="120" :rules="rules" label-position="right" size="small">
+        <el-form-item label="费用类型:" prop="feestype">
+          <el-select v-model="form.feestype" placeholder="请选择营销费用类型" style="width: 85%">
+            <el-option v-for="item in feestype" :key="item.index" :label="item.value + item.remarks" :value="item.value"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="营销费用:" prop="amount">
+          <el-input type="number" style="width: 85%" v-model="form.amount" autocomplete="off" placeholder="请填写金额(元)" @change="amountChange"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false" size="small">取 消</el-button>
+        <el-button type="primary" @click="onSubmit" size="small">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "index",
+  props:['ownertable','ownerid','dataTime','userid'],
+  data(){
+    return{
+      dialogVisible:false,
+      list:[],
+      param:{
+        "id": 20240629082704,
+        "content": {
+          "ownertable": "",//传当前应用tablename 比如sat_orderclue,sa_customers,sa_project,sys_phonebook
+          "ownerid": '',//传跟进记录id  跟进线索为sat_ordercluefollowuplogid 其余跟进记录传sys_datafollowupid
+          "pageSize": 20,
+          "pageNumber": 1,
+          "where": {
+            "condition": ""
+          }
+        }
+      },
+      currentPage:0,
+      total:0,
+      title:'',
+      dialogFormVisible:false,
+      form:{
+        "ownertable": "",//传当前应用tablename 比如sat_orderclue,sa_customers,sa_project,sys_phonebook
+        "ownerid": '',//传跟进记录id  跟进线索为sat_ordercluefollowuplogid 其余跟进记录传sys_datafollowupid
+        "feestype": "",
+        "followupdate": "",
+        "amount":""
+      },
+      feestype:[],
+      formTitle:'',
+      rules: {
+        feestype: [
+          {required: true, message: '还未选择营销费用类型', trigger: 'change'},
+        ],
+        amount: [
+          {required: true, message: '请填写营销费用', trigger: 'blur'},
+        ],
+      }
+    }
+
+  },
+  methods:{
+    async onShow(){
+      this.dialogVisible = true
+      this.title = this.dataTime + ' 跟进_费用明细'
+      this.param.content.where.condition = ''
+      this.listData(this.param.content.pageNumber = 1)
+      const res = await this.$store.dispatch('optiontypeselect','feestype')
+      this.feestype = res.data
+      console.log(this.feestype,'feestype')
+    },
+    async listData(){
+      this.param.content.ownertable = this.ownertable
+      this.param.content.ownerid = this.ownerid
+      const res = await this.$api.requested(this.param)
+      this.list = res.data
+      this.currentPage = res.pageNumber
+      this.total = res.total
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val
+      this.listData()
+    },
+    addClick(){
+      this.dialogFormVisible = true
+      this.formTitle = '新建营销费用明细'
+    },
+    editClick(data){
+      this.dialogFormVisible = true
+      this.formTitle = '编辑营销费用明细'
+      this.form.feestype = data.feestype
+      this.form.amount = data.amount
+      this.form.sa_salesfeesid = data.sa_salesfeesid
+      this.form.sa_salesfeesdetailid = data.sa_salesfeesdetailid
+    },
+    onSubmit(){
+      this.$refs.formRef.validate(async (valid) => {
+        if (!valid) return false
+        if (this.formTitle == '新建营销费用明细'){
+          const res = await this.$api.requested({
+            "id": 20240629090604,
+            "content": {
+              "userid": this.userid,
+              "salesfeesdetail": {
+                "ownertable": this.ownertable,
+                "ownerid": this.ownerid,
+                "feestype": this.form.feestype,
+                "followupdate": this.dataTime,
+                "amount":this.form.amount
+              }
+            }
+          })
+          this.tool.showMessage(res,()=>{
+            this.dialogFormVisible = false
+            this.listData(this.param.content.pageNumber = 1)
+          })
+        }else {
+          const res = await this.$api.requested({
+            "id": "20240611093004",
+            "content": {
+              "sa_salesfeesid": this.form.sa_salesfeesid,
+              "salesfeesdetail": [
+                {
+                  "sa_salesfeesdetailid": this.form.sa_salesfeesdetailid,
+                  "ownerid": this.ownerid,
+                  "ownertable": this.ownertable,
+                  "feestype": this.form.feestype,
+                  "amount": this.form.amount,
+                  "followupdate": this.dataTime
+                }
+              ]
+            }
+          })
+          this.tool.showMessage(res,()=>{
+            this.dialogFormVisible = false
+            this.listData(this.param.content.pageNumber = 1)
+          })
+        }
+
+      })
+    },
+    onClose(){
+      this.dialogVisible = false
+      this.$emit('onSuccess')
+    },
+    delClick(data) {
+      this.$confirm('是否删除该数据?', '提示', {
+        confirmButtonText: '删除',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(async() => {
+        const res = await this.$api.requested({
+          "id": 20240611095304,
+          "content": {
+            "sa_salesfeesid":data.sa_salesfeesid,
+            "sa_salesfeesdetails": [
+              {
+                "sa_salesfeesdetailid": data.sa_salesfeesdetailid,
+                "followupdate": this.dataTime
+              }
+            ]
+          }
+        })
+        this.tool.showMessage(res,()=>{
+          this.listData(this.param.content.pageNumber = 1)
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        });
+      });
+    },
+    amountChange(){
+      if (this.form.amount < 0){
+        this.form.amount = -Math.round((Math.abs(this.form.amount))*100)/100
+      }else {
+        this.form.amount = Math.round(this.form.amount * 100)/100
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+/deep/ .el-dialog__body {
+  padding: 20px 20px 0 20px !important;
+}
+</style>

+ 4 - 1
src/components/normal-basic-layout-new/details/index.vue

@@ -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">
+          <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">
             <el-button slot="collapse" type="text" icon="el-icon-s-unfold" class="inline-16" @click="onCollapse"></el-button>
           </follow-up>
         </el-col>
@@ -417,6 +417,9 @@ export default {
     /*任务协助人*/
     teamList(val){
       this.$emit('teamList',val)
+    },
+    logSuccess(){
+      this.$emit('logSuccess')
     }
   },
   mounted () {

+ 19 - 1
src/components/normal-basic-layout-new/details/modules/followUp/followUp.vue

@@ -95,6 +95,18 @@
                   </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="sys_phonebook" :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>
@@ -146,6 +158,7 @@ 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:{
@@ -153,7 +166,8 @@ export default {
     editLog,
     upload,
     previewImage,
-    fullScreen
+    fullScreen,
+    marketingExpenses
   },
   data () {
     return {
@@ -234,6 +248,10 @@ export default {
       this.heightChart = '100%'
       this.isFull = false
       this.$emit('backFull',val)
+    },
+    onSuccess(){
+      this.queryLogs()
+      this.$emit('logSuccess')
     }
   },
   mounted () {

+ 4 - 1
src/components/normal-basic-layout/details/index.vue

@@ -77,7 +77,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">
+          <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">
             <el-button slot="collapse" type="text" icon="el-icon-s-unfold" class="inline-16" @click="onCollapse"></el-button>
           </follow-up>
         </el-col>
@@ -448,6 +448,9 @@ export default {
     /*任务协助人*/
     teamList(val){
       this.$emit('teamList',val)
+    },
+    logSuccess(){
+      this.$emit('logSuccess')
     }
   },
   mounted () {

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

@@ -88,7 +88,6 @@
                   <span>下次跟进计划:{{i.nextplan}}</span>
                 </div>
                 <div v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'">
-<!--                  <span>营销费用:{{i.salesfeesamount || i.salesfeesamount == 0?}}</span>-->
                   <span>营销费用:</span>
                   <span v-if="i.salesfeesamount || i.salesfeesamount == 0">
                     <span style="color: red">¥ </span>
@@ -96,6 +95,15 @@
                   </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>
@@ -147,6 +155,7 @@ 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:{
@@ -154,7 +163,8 @@ export default {
     editLog,
     upload,
     previewImage,
-    fullScreen
+    fullScreen,
+    marketingExpenses
   },
   data () {
     return {
@@ -235,6 +245,10 @@ export default {
       this.heightChart = '100%'
       this.isFull = false
       this.$emit('backFull',val)
+    },
+    onSuccess(){
+      this.queryLogs()
+      this.$emit('logSuccess')
     }
   },
   mounted () {