Explorar el Código

Merge branch 'redUrgent' into allTestUrgent

qymljy hace 5 meses
padre
commit
fd95a1a956

+ 265 - 0
src/HManagement/actsRecMag/index.vue

@@ -0,0 +1,265 @@
+<template>
+  <div>
+    <normal-layout style="height: calc(100vh - 125px)">
+      <div slot="titleRight">
+        <exportFile class="inline-16" :param="param" :columns="tablecols" fileName="应收账款" :dataid="param.content.dataid" :custom="true" :point="param.content.point" :dateData="dateData"></exportFile>
+        <balanceUpd class="inline-16" ref="balanceRef" v-if="tool.checkAuth($route.name,'balanceUpdated')"></balanceUpd>
+      </div>
+      <div slot="content">
+        <div class="container">
+          <template>
+            <div class="mt-10 inline-16">
+              <label class="search__label">{{$t('查询方式')}}:</label>
+              <el-select v-model="param.content.point" :placeholder="$t('请选择')" size="small" @change="listData">
+                <el-option :label="$t(`出货`)" value="出货" ></el-option>
+                <el-option :label="$t(`开票`)" value="开票" ></el-option>
+              </el-select>
+            </div>
+            <div class="mt-10 inline-16" style="margin-left: 20px">
+              <departmentSalesperson ref="departmentSalesperson" class="inline-16" @depSelect="depSelect" @personSelect="personSelect" ></departmentSalesperson>
+            </div>
+            <div>
+              <el-row :gutter="20">
+                <el-col :span="6" class="mt-10">
+                  <div class="acccounet__panel" style="border:1px solid #d8dde8">
+                    <p class="normal-margin">{{$t('总应收')}}</p>
+                    <p class="normal-title" style="font-size:29px;color:#151515" >
+                      <small>{{allList.sumtotalamount || allList.sumtotalamount == '0'?'¥':''}}</small>
+                      {{allList.sumtotalamount || allList.sumtotalamount == 0?tool.formatAmount(allList.sumtotalamount,2):'--'}}
+                    </p>
+                  </div>
+                </el-col>
+              </el-row>
+            </div>
+            <div style="flex:0 1 auto;width: 100%;">
+              <tableMainLayout :layout="tablecols" height="calc(100vh - 410px)" :data="list" fixedName="operation" :width="true" :custom="true"
+                               :headerOptions="['openingbalance','receivableamount','totalamount']">
+                <template v-slot:header="scope">
+                  <div v-if="scope.column.columnname === 'openingbalance'">
+                    {{dateData?'期初余额'+'('+dateData+')':'期初余额(2021-12-31)'}}
+                  </div>
+                  <div v-if="scope.column.columnname == 'receivableamount'">
+                    <div v-if="param.content.point == '出货'">{{$t(`出货总金额(2022-01-01至今)`)}}</div>
+                    <div v-else>{{$t(`开票总金额(2022-01-01至今)`)}}</div>
+                  </div>
+                  <div v-if="scope.column.columnname == 'totalamount'">
+                    <div v-if="param.content.point == '出货'">{{$t(`出货总应收`)}}</div>
+                    <div v-else>{{$t(`开票总应收`)}}</div>
+                  </div>
+                </template>
+                <template v-slot:customcol="scope">
+                  <div v-if="scope.column.columnname === 'openingbalance'">
+                    <span><small>¥ </small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'receivableamount'">
+                    <span><small>¥ </small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'revenueamount'">
+                    <span><small>¥ </small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'totalamount'">
+                    <span><small>¥ </small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
+                  </div>
+                  <p v-else>{{scope.column.data[scope.column.columnname] || scope.column.columnname === 'operation'?$t(scope.column.data[scope.column.columnname]):'--'}}</p>
+                </template>
+                <template v-slot:opreation="scope">
+                  <detailInfo :data="scope.data" :items="param.content" :point="param.content.point"></detailInfo>
+                </template>
+              </tableMainLayout>
+            </div>
+            <div class="container normal-panel" style="text-align:right">
+              <el-pagination
+                  background
+                  @size-change="handleSizeChange"
+                  @current-change="handleCurrentChange"
+                  :current-page="currentPage"
+                  :page-sizes="[100, 50, 100, 200]"
+                  :page-size="100"
+                  layout="total,sizes, prev, pager, next, jumper"
+                  :total="total">
+              </el-pagination>
+            </div>
+          </template>
+        </div>
+      </div>
+    </normal-layout>
+  </div>
+</template>
+
+<script>
+import departmentSalesperson from "@/views/salesData/components/departmentSalesperson";
+import detailInfo from './modules/detailInfo'
+import exportFile from '@/components/export_file/index'
+import balanceUpd from '../actsRecMag/modules/balanceUpd'
+export default {
+  name: "index",
+  components:{departmentSalesperson,detailInfo,exportFile,balanceUpd},
+  data(){
+    return {
+      value:'全部',
+      options:[],
+      tablecols:[],
+      list:[],
+      currentPage:0,
+      total:0,
+      allList:{},
+      depmentParam:{
+        "id": 20230620102004,
+        "content": {
+        }
+      },
+      param:{
+        "id": 20241217135703,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 100,
+          "type":"0",//1按部门 0按人员
+          "dataid":JSON.parse(sessionStorage.getItem('active_account')).userid,//部门人员id
+          "querytype":1,//0按业务员 1按客户
+          "point":"开票",// 入账节点
+          "where": {
+            "condition": ""
+          }
+        }
+      },
+      dateData:null
+    }
+  },
+  methods:{
+    async listData(){
+      const res = await this.$api.requested(this.param)
+      this.list = res.data
+      this.allList = res.data.length > 0 ? res.data[0]:{}
+      this.total = res.total
+      this.currentPage = res.pageNumber
+    },
+    async departmentrtment() {
+      const res = await this.$api.requested(this.depmentParam)
+      this.$refs.departmentSalesperson.deplist = this.createMenu(res.data.dep)
+      this.$refs.departmentSalesperson.personnelList = res.data.hr
+      this.$refs.departmentSalesperson.depment = res.data.dep[0].departmentid
+      this.param.content.type = 1
+      this.param.content.dataid = res.data.dep[0].departmentid
+      this.queryDate()
+    },
+    /*获取期初日期*/
+    async queryDate(){
+      const res = await this.$api.requested({
+        "id": 20241218101003,
+        "content": {
+          "where":{
+            "condition":"",
+            "begindate":"",
+            "enddate":""
+          }
+        }
+      })
+      if (res.code == 0){
+        this.tool.showMessage(res,()=>{})
+      }else {
+        if (res.data.length > 0){
+          const newDate = new Date(res.data[0].openingdate)
+          this.dateData = this.tool.getDataChange(newDate)
+        }else {
+          this.dateData = null
+        }
+        this.listData()
+      }
+    },
+    createMenu (array) {
+      var that = this
+      let arr = []
+      function convertToElementTree(node) {
+        // 新节点
+        if (node.subdep.length === 0){
+          var elNode = {
+            label: node["depname"],
+            parentid:node['parentid'],
+            parentname:node['parentname'],
+            departmentid:node["departmentid"],
+            value:node["departmentid"],
+            remarks:node["remarks"],
+            isused:node["isused"],
+            changedate:node['changedate'],
+            changeby:node['changeby'],
+            createdate:node['createdate'],
+            createby:node['createby'],
+            depno:node['depno'],
+            disabled:that.pageOnlyRead,
+          }
+        }else {
+          var elNode = {
+            label: node["depname"],
+            parentid:node['parentid'],
+            parentname:node['parentname'],
+            departmentid:node["departmentid"],
+            value:node["departmentid"],
+            remarks:node["remarks"],
+            isused:node["isused"],
+            changedate:node['changedate'],
+            changeby:node['changeby'],
+            createdate:node['createdate'],
+            createby:node['createby'],
+            depno:node['depno'],
+            disabled:that.pageOnlyRead,
+            children: []
+          }
+        }
+        if (node.subdep && node.subdep.length > 0) {
+          // 如果存在子节点
+          for (var index = 0; index < node.subdep.length; index++) {
+            // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
+            elNode.children.push(convertToElementTree(node.subdep[index]));
+          }
+        }
+        return elNode;
+      }
+      array.forEach((element) => {
+        arr.push(convertToElementTree(element))
+      });
+      return arr
+    },
+    /*选择部门*/
+    depSelect(val){
+      this.param.content.type = 1
+      this.param.content.dataid = val
+      this.dataid = val
+      this.listData()
+    },
+    /*选择业务员*/
+    personSelect(val){
+      this.param.content.type = 0
+      this.param.content.dataid = val
+      this.dataid = val
+      this.listData()
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val
+      this.listData()
+    },
+  },
+  mounted() {
+    this.departmentrtment()
+  },
+  created() {
+    this.tablecols = this.tool.tabelCol(this.$route.name).actsRecTable.tablecols
+  }
+}
+</script>
+
+<style scoped>
+.acccounet__panel{
+  padding: 10px;
+  line-height: 30px;
+  border:1px solid #f1f2f3;
+  color:#666;
+  border-radius: 5px;
+  cursor: pointer;
+}
+</style>

+ 153 - 0
src/HManagement/actsRecMag/modules/balanceUpd.vue

@@ -0,0 +1,153 @@
+<template>
+  <div>
+    <el-button size="small" type="primary"  @click="showBalance">{{$t(`期初余额更新`)}}</el-button>
+    <el-drawer
+        title="期初余额更新记录"
+        :visible.sync="drawVisible"
+        size="80%"
+        direction="rtl"
+        append-to-body
+        :show-close="false"
+    >
+      <div class="drawer__panel" style="margin-bottom: 0 !important;padding-bottom: 0!important;">
+        <div style="margin-bottom: 10px;">
+          <importFile class="inline-16" title="期初余额更新" :bindData="{ownertable:'balance',ownerid:'',usetype:'default'}" :errorUrl="errorUrl" @clearUrl="errorUrl = null" @onSuccess="bindImport"></importFile>
+          <div class="mt-10 inline-16">
+            <div class="search__label">{{$t(`更新时间:`)}}</div>
+            <el-date-picker
+                size="small"
+                v-model="selectDate"
+                type="daterange"
+                @change="dateChange"
+                value-format="yyyy-MM-dd"
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期">
+            </el-date-picker>
+          </div>
+          <div class="mt-10 inline-16">
+            <div class="search__label">{{$t(`搜索:`)}}</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" clearable>
+            </el-input>
+          </div>
+        </div>
+        <tableNewLayout :layout="tablecols"  height="calc(100vh - 190px)" :data="list" fixedName="operation" :width="true" :custom="true">
+          <template v-slot:customcol="scope">
+            <div v-if="scope.column.columnname === 'openingbalance'">
+              <span><small>¥</small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
+            </div>
+            <p v-else>{{scope.column.data[scope.column.columnname] || scope.column.columnname === 'operation'?$t(scope.column.data[scope.column.columnname]):'--'}}</p>
+          </template>
+          <template v-slot:opreation="scope"></template>
+        </tableNewLayout>
+        <div class="container normal-panel" style="text-align:right">
+          <el-pagination
+              background
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+              :current-page="currentPage"
+              :page-sizes="[100,150, 200]"
+              :page-size="100"
+              layout="total,sizes, prev, pager, next, jumper"
+              :total="total">
+          </el-pagination>
+        </div>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import importFile from './importFile'
+export default {
+  name: "balanceUpd",
+  components:{importFile},
+  props:{
+
+  },
+  data(){
+    return {
+      drawVisible:false,
+      errorUrl:null,
+      param:{
+        "id": 20241218101003,
+        "content": {
+          "pageNumber":1,
+          "pageSize":100,
+          "where":{
+            "condition":"",
+            "begindate":"",
+            "enddate":""
+          }
+        }
+      },
+      list:[],
+      tablecols:[],
+      currentPage:0,
+      total:0,
+      selectDate:[]
+    }
+  },
+  methods:{
+    showBalance(){
+      this.drawVisible = true
+      this.listData()
+    },
+    async listData(){
+      const res = await this.$api.requested(this.param)
+      this.list = res.data
+      this.total = res.total
+      this.currentPage = res.pageNumber
+      console.log(res.data)
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val
+      this.listData()
+    },
+    async bindImport (id) {
+      const res = await this.$api.requested({
+        "id": 20241218102503,
+        "content": {
+          "attachmentid":id
+        }
+      })
+      if (res.code == 0){
+        this.tool.showMessage(res,()=>{})
+      }else {
+        if (res.data !== '成功') {
+          this.errorUrl = res.data
+        }
+        this.listData()
+      }
+    },
+    clearSearchValue () {
+      this.$store.dispatch('clearSearchValue')
+      this.listData(this.param.content.pageNumber = 1)
+    },
+    dateChange(){
+      if (this.selectDate){
+        this.param.content.where.begindate = this.selectDate[0]
+        this.param.content.where.enddate = this.selectDate[1]
+      }else {
+        this.param.content.where.begindate = ''
+        this.param.content.where.enddate = ''
+      }
+      this.listData()
+    }
+
+  },
+  created() {
+    this.tablecols = this.tool.tabelCol(this.$route.name).balanceUpdTable.tablecols
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 109 - 0
src/HManagement/actsRecMag/modules/detailInfo.vue

@@ -0,0 +1,109 @@
+<template>
+  <div>
+    <el-button size="mini" type="text" @click="onShow(dialogVisible = true)">{{$t('明细')}}</el-button>
+    <el-drawer
+        :title="$t(point == '开票'?'客户开票明细':'客户出货明细')"
+        :visible.sync="dialogVisible"
+        size="80%"
+        direction="rtl"
+        append-to-body
+        :show-close="false"
+        >
+      <div class="drawer__panel" style="margin-bottom: 0 !important;">
+        <exportFile style="margin-bottom: 20px" :param="param" :columns="tablecols" :fileName="point == '开票'?'客户开票明细':'客户出货明细'" :dataid="param.content.dataid" :custom="true" :point="point"></exportFile>
+        <tableNewLayout :layout="tablecols"  height="calc(100vh - 165px)" :data="list" fixedName="operation" :width="true" :custom="true" :headerOptions="['overdueamount']">
+          <template v-slot:header="scope">
+            <div v-if="scope.column.columnname === 'overdueamount'">
+              {{$t(point == '开票'?'开票金额':'出货金额')}}
+            </div>
+          </template>
+          <template v-slot:customcol="scope">
+            <div v-if="scope.column.columnname === 'overdueamount'">
+              <span><small>¥</small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
+            </div>
+            <div v-else-if="scope.column.columnname === 'amount'">
+              <span><small>¥</small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
+            </div>
+            <p v-else>{{scope.column.data[scope.column.columnname] || scope.column.columnname === 'operation'?$t(scope.column.data[scope.column.columnname]):'--'}}</p>
+          </template>
+          <template v-slot:opreation="scope"></template>
+        </tableNewLayout>
+<!--        <div class="container normal-panel" style="text-align:right">
+          <el-pagination
+              background
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+              :current-page="currentPage"
+              :page-sizes="[100,150, 200]"
+              :page-size="100"
+              layout="total,sizes, prev, pager, next, jumper"
+              :total="total">
+          </el-pagination>
+        </div>-->
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import departmentSalesperson from "@/views/salesData/components/departmentSalesperson";
+import exportFile from '@/components/export_file/index'
+export default {
+  name: "detailInfo",
+  components:{departmentSalesperson,exportFile},
+  props:['data','items','point'],
+  data(){
+    return {
+      dialogVisible:false,
+      tablecols:[],
+      list:[],
+      currentPage:0,
+      total:0,
+      param:{
+        "id": 20241217135903,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 100,
+          "dataid":"",// 按业务员时 传userid 按客户时传 sa_customersid
+          "querytype":"1",//0按业务员 1按客户
+          "point":"",//入账节点
+          "where": {
+            "condition": ""
+          }
+        }
+      }
+    }
+  },
+  methods:{
+    onShow(){
+      this.param.content.dataid = this.items.querytype == '0'?this.data.userid:this.data.sa_customersid
+      this.param.content.querytype = this.items.querytype
+      this.param.content.point = this.items.point
+      this.listData()
+    },
+    async listData(){
+      const res = await this.$api.requested(this.param)
+      this.list = res.data
+      this.total = res.total
+      this.currentPage = res.pageNumber
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val
+      this.listData()
+    },
+  },
+  created() {
+    this.tablecols = this.tool.tabelCol(this.$route.name).detailTable.tablecols
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 208 - 0
src/HManagement/actsRecMag/modules/importFile.vue

@@ -0,0 +1,208 @@
+<template>
+  <div>
+    <el-button type="primary" size="small" @click="onShow">{{$t(title)}}</el-button>
+    <el-dialog :title="$t('文件上传')" class="import-panel" :visible.sync="dialogUploadVisible" width="500px" append-to-body :close-on-click-modal="false" :show-close="false" @close="clearFiles">
+      <div slot="title"></div>
+      <div style="background:#f1f2f3" class="my-tabs" >
+        <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
+          <!-- <el-tab-pane :label="$t('导入经销商线索')" name="first"></el-tab-pane> -->
+          <el-tab-pane :label="$t(`导入`)" name="second"></el-tab-pane>
+        </el-tabs>
+      </div>
+      <div style="padding:20px">
+        <el-upload
+            style="width:100%"
+            ref="my-upload"
+            class="upload-demo normal-margin"
+            :accept="accept"
+            action="#"
+            :auto-upload="false"
+            :show-file-list="false"
+            :on-change="handleChange"
+            drag
+            multiple>
+          <i class="el-icon-upload"></i>
+          <div class="el-upload__text">{{$t('将文件拖到此处,或') + ' '}}<em>{{$t('点击上传')}}</em></div>
+        </el-upload>
+        <div class="progress_panel" v-for="file in filelist" :key="file.uid">
+          <img v-if="file.type === 'DOC' || file.type === 'DOCX'" width="30" src="@/assets/file_icons/word.png"
+               alt="">
+          <img v-else-if="file.type === 'PDF'" width="30" src="@/assets/file_icons/PDF.png" alt="">
+          <img v-else-if="file.type === 'MP4' || file.type === 'AVI'" width="30" src="@/assets/file_icons/video.png"
+               alt="">
+          <img v-else-if="file.type === 'XLS' || file.type === 'XLSX'" width="30" src="@/assets/file_icons/excel.png"
+               alt="">
+          <img v-else-if="file.type === 'PNG' || file.type === 'JPG'|| file.type === 'JPEG'" width="30"
+               src="@/assets/file_icons/image.png" alt="">
+          <img v-else-if="file.type === 'PPT' || file.type === 'PPTX'" width="30" src="@/assets/file_icons/PPT.png"
+               alt="">
+          <img v-else width="30" src="@/assets/file_icons/unknow.png" alt="">
+          <div>
+            <p v-if="file.progress === 100" style="float:right"><span style="color:#67C23A">●</span>{{$t('上传成功')}}</p>
+            <p>{{file.raw?file.raw.name:$t('暂无上传文件')}}</p>
+            <el-progress :percentage="file.progress" :show-text="false"></el-progress>
+          </div>
+        </div>
+        <slot name="errorFile"></slot>
+        <p class="tips">• + {{$t('为保证数据导入顺利,推荐您下载并使用' + ' ')}}<a :href="modelurl">《{{$t('Excel标准模板')}}》</a></p>
+        <p class="tips">• {{$t('文件中数据不能超过5000行')}}</p>
+        <a :href="errorUrl" class="tips" style="color:red" v-if="errorUrl">•{{$t(`下载错误数据`)}}</a>
+        <div class="dialog-footer">
+          <el-button size="small" @click="cancel" class="normal-btn-width">{{$t('取 消')}}</el-button>
+          <el-button size="small" type="warning" @click="dialogUploadVisible = false" class="normal-btn-width btn-warning">{{$t('确 定')}}</el-button>
+        </div>
+      </div>
+
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "importFile",
+  props:['ordertype','btntype','accept','bindData','errorUrl','title'],
+  data () {
+    return {
+      dialogUploadVisible: false,
+      params: {
+        "classname": "system.attachment.huawei.OBS",
+        "method": "getFileName",
+        "content": {
+          "filename": '',
+          "filetype": '',
+          "parentid": ""//归属文件夹ID
+        }
+      },
+      file: {},
+      filelist: [],
+      CampaignList:[],
+      activeName:'last',
+      modelurl:'',
+      campaignid:'',
+      folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid,
+      orderType:0
+    }
+  },
+  methods: {
+    onShow (type) {
+      this.orderType = type
+      this.dialogUploadVisible = true
+      this.getModelUrl()
+    },
+    cancel () {
+      this.dialogUploadVisible = false
+      this.campaignid = ''
+      this.$refs['my-upload'].clearFiles()
+      this.filelist = []
+    },
+    handleChange (file, filelist) {
+      this.filelist = filelist
+      var index = file.raw.name.lastIndexOf(".");
+      var ext = file.name.substr(index + 1);
+      this.params.content.filename = file.raw.name
+      this.params.content.filetype = ext
+      this.getUploadUrl(file, ext)
+    },
+    handleClick () {
+      this.getModelUrl()
+    },
+    // 获取导入模板
+    async getModelUrl () {
+      const res = await this.$api.requested({
+        "id":20241218102403,
+        "content": {
+        }
+      })
+      this.modelurl = res.data
+
+    },
+    // 获取华为云上传地址
+    async getUploadUrl (file, ext) {
+      this.params.content.parentid = this.folderid
+      const res = await this.$api.requested(this.params)
+      let url = res.data.uploadurl
+      let obsfilename = res.data.serialfilename
+
+      this.upoladFileToServer(url, file, ext, obsfilename)
+    },
+    // 上传到华为云
+    async upoladFileToServer (url, file, ext, obsfilename) {
+      let THIS = this
+      let config = {
+        headers: ext === 'pdf' ? { 'Content-Type': 'application/pdf' } : { 'Content-Type': 'application/octet-stream' },
+        onUploadProgress: function (progressEvent) {
+          let percent = progressEvent.loaded / progressEvent.total * 100
+          THIS.filelist.forEach(e => {
+            if (e.uid === file.uid) {
+              THIS.$set(e, 'type', ext.toUpperCase());
+              THIS.$set(e, 'progress', percent);
+            }
+          })
+        },
+      }
+      const res = await this.$upload.hw_upload(url, file.raw, config)
+      console.log(res.data,'1111111')
+      this.createFileRecord(obsfilename)
+    },
+
+    // 上传成功以后生成附件记录
+    async createFileRecord (obsfilename) {
+      let obj = {
+        "serialfilename": obsfilename
+      }
+      obj = Object.assign({},obj,this.bindData)
+      let param = {
+        "classname": "system.attachment.huawei.OBS",
+        "method": "uploadSuccess",
+        "content":obj
+      }
+
+      const res = await this.$api.requested(param)
+      console.log(res.data,'获取附件')
+      this.$emit('onSuccess',res.data.attachmentids[0])
+    },
+
+    clearFiles () {
+      this.$refs['my-upload'].clearFiles()
+      this.filelist = []
+      this.dialogUploadVisible = false
+      this.$emit('clearUrl')
+    },
+  }
+}
+</script>
+
+<style scoped>
+.import-panel .el-dialog__header,.import-panel .el-dialog__body{
+  padding: 0 !important;
+}
+.upload-demo > div {
+  width: 100% !important;
+}
+.upload-demo .el-upload-dragger {
+  width: 100% !important;
+}
+</style>
+  <style scoped>
+  .progress_panel {
+    display: flex;
+    align-items: center;
+    padding: 10px;
+    margin: 10px 0;
+    border-radius: 5px;
+    transition: linear 0.2s all;
+  }
+.progress_panel:hover {
+  box-shadow: 0px 0px 5px #ccc;
+}
+.progress_panel > div {
+  flex: 1;
+  padding: 0 10px;
+}
+.progress_panel > div > p {
+  line-height: 30px;
+}
+.tips{
+  line-height: 30px;
+}
+</style>

+ 264 - 0
src/SManagement/actsRec/index.vue

@@ -0,0 +1,264 @@
+<template>
+  <div>
+    <normal-layout style="height: calc(100vh - 125px)">
+      <div slot="titleRight">
+        <exportFile :param="param" :columns="tablecols" fileName="应收账款" :dataid="param.content.dataid" :custom="true" :point="param.content.point" :dateData="dateData"></exportFile>
+      </div>
+      <div slot="content">
+        <div class="container">
+          <template>
+            <div class="mt-10 inline-16">
+              <label class="search__label">{{$t('查询方式')}}:</label>
+              <el-select v-model="param.content.point" :placeholder="$t('请选择')" size="small" @change="listData">
+                <el-option :label="$t(`出货`)" value="出货" ></el-option>
+                <el-option :label="$t(`开票`)" value="开票" ></el-option>
+              </el-select>
+            </div>
+            <div class="mt-10 inline-16" style="margin-left: 20px">
+              <departmentSalesperson ref="departmentSalesperson" class="inline-16" @depSelect="depSelect" @personSelect="personSelect" ></departmentSalesperson>
+            </div>
+            <div>
+              <el-row :gutter="20">
+                <el-col :span="6" class="mt-10">
+                  <div class="acccounet__panel" style="border:1px solid #d8dde8">
+                    <p class="normal-margin">{{$t('总应收')}}</p>
+                    <p class="normal-title" style="font-size:29px;color:#151515" >
+                      <small>{{allList.sumtotalamount || allList.sumtotalamount == '0'?'¥':''}}</small>
+                      {{allList.sumtotalamount || allList.sumtotalamount == 0?tool.formatAmount(allList.sumtotalamount,2):'--'}}
+                    </p>
+                  </div>
+                </el-col>
+              </el-row>
+            </div>
+            <div style="flex:0 1 auto;width: 100%;">
+              <tableMainLayout :layout="tablecols" height="calc(100vh - 410px)" :data="list" fixedName="operation" :width="true" :custom="true"
+                               :headerOptions="['receivableamount','totalamount','openingbalance']">
+                <template v-slot:header="scope">
+                  <div v-if="scope.column.columnname === 'openingbalance'">
+                    {{dateData?'期初余额'+'('+dateData+')':'期初余额(2021-12-31)'}}
+                  </div>
+                  <div v-if="scope.column.columnname == 'receivableamount'">
+                    <div v-if="param.content.point == '出货'">{{$t(`出货总金额(2022-01-01至今)`)}}</div>
+                    <div v-else>{{$t(`开票总金额(2022-01-01至今)`)}}</div>
+                  </div>
+                  <div v-if="scope.column.columnname == 'totalamount'">
+                    <div v-if="param.content.point == '出货'">{{$t(`出货总应收`)}}</div>
+                    <div v-else>{{$t(`开票总应收`)}}</div>
+                  </div>
+                </template>
+                <template v-slot:customcol="scope">
+                  <div v-if="scope.column.columnname === 'openingbalance'">
+                    <span><small>¥ </small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'receivableamount'">
+                    <span><small>¥ </small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'revenueamount'">
+                    <span><small>¥ </small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'totalamount'">
+                    <span><small>¥ </small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
+                  </div>
+                  <p v-else>{{scope.column.data[scope.column.columnname] || scope.column.columnname === 'operation'?$t(scope.column.data[scope.column.columnname]):'--'}}</p>
+                </template>
+                <template v-slot:opreation="scope">
+                  <detailInfo :data="scope.data" :items="param.content" :point="param.content.point"></detailInfo>
+                </template>
+              </tableMainLayout>
+            </div>
+            <div class="container normal-panel" style="text-align:right">
+              <el-pagination
+                  background
+                  @size-change="handleSizeChange"
+                  @current-change="handleCurrentChange"
+                  :current-page="currentPage"
+                  :page-sizes="[100, 50, 100, 200]"
+                  :page-size="100"
+                  layout="total,sizes, prev, pager, next, jumper"
+                  :total="total">
+              </el-pagination>
+            </div>
+          </template>
+        </div>
+      </div>
+    </normal-layout>
+  </div>
+</template>
+
+<script>
+import departmentSalesperson from "@/views/salesData/components/departmentSalesperson";
+import detailInfo from './modules/detailInfo'
+import exportFile from '@/components/export_file/index'
+export default {
+  name: "index",
+  components:{departmentSalesperson,detailInfo,exportFile},
+  data(){
+    return {
+      value:'全部',
+      options:[],
+      tablecols:[],
+      list:[],
+      currentPage:0,
+      total:0,
+      allList:{},
+      depmentParam:{
+        "id": 20230620102004,
+        "content": {
+        }
+      },
+      param:{
+        "id": 20241217135803,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 100,
+          "type":"0",//1按部门 0按人员
+          "dataid":JSON.parse(sessionStorage.getItem('active_account')).userid,//部门人员id
+          "querytype":1,//0按业务员 1按客户
+          "point":"开票",// 入账节点
+          "where": {
+            "condition": ""
+          }
+        }
+      },
+      dateData:null
+    }
+  },
+  methods:{
+    async listData(){
+      const res = await this.$api.requested(this.param)
+      console.log(res.data,'数据')
+      this.list = res.data
+      this.allList = res.data.length > 0 ? res.data[0]:{}
+      this.total = res.total
+      this.currentPage = res.pageNumber
+    },
+    async departmentrtment() {
+      const res = await this.$api.requested(this.depmentParam)
+      this.$refs.departmentSalesperson.deplist = this.createMenu(res.data.dep)
+      this.$refs.departmentSalesperson.personnelList = res.data.hr
+      const name = JSON.parse(sessionStorage.getItem('active_account')).name
+      this.$refs.departmentSalesperson.person = name
+      this.queryDate()
+    },
+    /*获取期初日期*/
+    async queryDate(){
+      const res = await this.$api.requested({
+        "id": 20241218101003,
+        "content": {
+          "where":{
+            "condition":"",
+            "begindate":"",
+            "enddate":""
+          }
+        }
+      })
+      if (res.code == 0){
+        this.tool.showMessage(res,()=>{})
+      }else {
+        if (res.data.length > 0){
+          const newDate = new Date(res.data[0].openingdate)
+          this.dateData = this.tool.getDataChange(newDate)
+        }else {
+          this.dateData = null
+        }
+        this.listData()
+      }
+    },
+    createMenu (array) {
+      var that = this
+      let arr = []
+      function convertToElementTree(node) {
+        // 新节点
+        if (node.subdep.length === 0){
+          var elNode = {
+            label: node["depname"],
+            parentid:node['parentid'],
+            parentname:node['parentname'],
+            departmentid:node["departmentid"],
+            value:node["departmentid"],
+            remarks:node["remarks"],
+            isused:node["isused"],
+            changedate:node['changedate'],
+            changeby:node['changeby'],
+            createdate:node['createdate'],
+            createby:node['createby'],
+            depno:node['depno'],
+            disabled:that.pageOnlyRead,
+          }
+        }else {
+          var elNode = {
+            label: node["depname"],
+            parentid:node['parentid'],
+            parentname:node['parentname'],
+            departmentid:node["departmentid"],
+            value:node["departmentid"],
+            remarks:node["remarks"],
+            isused:node["isused"],
+            changedate:node['changedate'],
+            changeby:node['changeby'],
+            createdate:node['createdate'],
+            createby:node['createby'],
+            depno:node['depno'],
+            disabled:that.pageOnlyRead,
+            children: []
+          }
+        }
+        if (node.subdep && node.subdep.length > 0) {
+          // 如果存在子节点
+          for (var index = 0; index < node.subdep.length; index++) {
+            // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
+            elNode.children.push(convertToElementTree(node.subdep[index]));
+          }
+        }
+        return elNode;
+      }
+      array.forEach((element) => {
+        arr.push(convertToElementTree(element))
+      });
+      return arr
+    },
+    /*选择部门*/
+    depSelect(val){
+      console.log(val,'val3333')
+      this.param.content.type = 1
+      this.param.content.dataid = val
+      this.dataid = val
+      this.listData()
+    },
+    /*选择业务员*/
+    personSelect(val){
+      this.param.content.type = 0
+      this.param.content.dataid = val
+      this.dataid = val
+      this.listData()
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val
+      this.listData()
+    },
+  },
+  mounted() {
+    this.departmentrtment()
+  },
+  created() {
+    this.tablecols = this.tool.tabelCol(this.$route.name).actsRecTable.tablecols
+  }
+}
+</script>
+
+<style scoped>
+.acccounet__panel{
+  padding: 10px;
+  line-height: 30px;
+  border:1px solid #f1f2f3;
+  color:#666;
+  border-radius: 5px;
+  cursor: pointer;
+}
+</style>

+ 109 - 0
src/SManagement/actsRec/modules/detailInfo.vue

@@ -0,0 +1,109 @@
+<template>
+  <div>
+    <el-button size="mini" type="text" @click="onShow(dialogVisible = true)">{{$t('明细')}}</el-button>
+    <el-drawer
+        :title="$t(point == '开票'?'客户开票明细':'客户出货明细')"
+        :visible.sync="dialogVisible"
+        size="80%"
+        direction="rtl"
+        append-to-body
+        :show-close="false"
+        >
+      <div class="drawer__panel" style="margin-bottom: 0 !important;">
+        <exportFile style="margin-bottom: 20px" :param="param" :columns="tablecols" :fileName="point == '开票'?'客户开票明细':'客户出货明细'" :dataid="param.content.dataid" :custom="true" :point="point"></exportFile>
+        <tableNewLayout :layout="tablecols"  height="calc(100vh - 165px)" :data="list" fixedName="operation" :width="true" :custom="true" :headerOptions="['overdueamount']">
+          <template v-slot:header="scope">
+            <div v-if="scope.column.columnname === 'overdueamount'">
+              {{$t(point == '开票'?'开票金额':'出货金额')}}
+            </div>
+          </template>
+          <template v-slot:customcol="scope">
+            <div v-if="scope.column.columnname === 'overdueamount'">
+              <span><small>¥</small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
+            </div>
+            <div v-else-if="scope.column.columnname === 'amount'">
+              <span><small>¥</small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
+            </div>
+            <p v-else>{{scope.column.data[scope.column.columnname] || scope.column.columnname === 'operation'?$t(scope.column.data[scope.column.columnname]):'--'}}</p>
+          </template>
+          <template v-slot:opreation="scope"></template>
+        </tableNewLayout>
+<!--        <div class="container normal-panel" style="text-align:right">
+          <el-pagination
+              background
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+              :current-page="currentPage"
+              :page-sizes="[100,150, 200]"
+              :page-size="100"
+              layout="total,sizes, prev, pager, next, jumper"
+              :total="total">
+          </el-pagination>
+        </div>-->
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import departmentSalesperson from "@/views/salesData/components/departmentSalesperson";
+import exportFile from '@/components/export_file/index'
+export default {
+  name: "detailInfo",
+  components:{departmentSalesperson,exportFile},
+  props:['data','items','point'],
+  data(){
+    return {
+      dialogVisible:false,
+      tablecols:[],
+      list:[],
+      currentPage:0,
+      total:0,
+      param:{
+        "id": 20241217135903,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 100,
+          "dataid":"",// 按业务员时 传userid 按客户时传 sa_customersid
+          "querytype":"1",//0按业务员 1按客户
+          "point":"",//入账节点
+          "where": {
+            "condition": ""
+          }
+        }
+      }
+    }
+  },
+  methods:{
+    onShow(){
+      this.param.content.dataid = this.items.querytype == '0'?this.data.userid:this.data.sa_customersid
+      this.param.content.querytype = this.items.querytype
+      this.param.content.point = this.items.point
+      this.listData()
+    },
+    async listData(){
+      const res = await this.$api.requested(this.param)
+      this.list = res.data
+      this.total = res.total
+      this.currentPage = res.pageNumber
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val
+      this.listData()
+    },
+  },
+  created() {
+    this.tablecols = this.tool.tabelCol(this.$route.name).detailTable.tablecols
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 4 - 0
src/components/dynamic-newTable/index.vue

@@ -29,6 +29,9 @@
         <template v-slot:header="{ column,$index }" v-if="customHeader">
           <slot name="header" :data="column"></slot>
         </template>
+        <template :slot="headerOptions ? headerOptions.includes(col.columnname) ? 'header' : '' : ''" slot-scope="scope">
+          <slot name="header" :column="{data:scope.row,columnname:col.columnname}"></slot>
+        </template>
         <template slot-scope="scope">
           <div class="table-panel">
             <!-- 自定义表格显示内容 -->
@@ -68,6 +71,7 @@ export default {
     "redirect",
     "customHeader",
     "minHeight",
+    "headerOptions"
   ],
   data() {
     return {

+ 19 - 1
src/components/export_file/index.vue

@@ -6,7 +6,7 @@
 
 <script>
 export default {
-  props: ["param", "type", "columns", "columnsIndex", "fileName", "dataid"],
+  props: ["param", "type", "columns", "columnsIndex", "fileName", "dataid","custom","point","dateData"],
   data() {
     return {
       columnsData: [],
@@ -24,6 +24,24 @@ export default {
           });
         });
       }
+      console.log(rs,'表格字段')
+      if (this.columns){
+        rs.forEach(item=>{
+          if (item.fieldname == 'totalamount'){
+            item.fieldlabel = this.point == '开票'?'开票总应收':'出货总应收'
+          }
+          if (item.fieldname == 'receivableamount'){
+            item.fieldlabel = this.point == '开票'?'开票总金额(2022-01-01至今)':'出货总金额(2022-01-01至今)'
+          }
+          if (item.fieldname == 'overdueamount'){
+            item.fieldlabel = this.point == '开票'?'开票金额':'出货金额'
+          }
+          if (item.fieldname == 'openingbalance' && this.dateData){
+            item.fieldlabel = this.dateData?'期初余额'+'('+this.dateData+')':'期初余额(2021-12-31)'
+          }
+        })
+      }
+      console.log(rs,'表格字段1111')
       this.param.content.dataid = this.dataid;
       this.param.content.exportFields = rs;
       this.param.content.isExport = 1;

+ 8 - 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" @logSuccess="logSuccess" @onMore="$refs.tabRef.$refs.followRef.listData()">
+          <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="onMore">
             <el-button slot="collapse" type="text" icon="el-icon-s-unfold" class="inline-16" @click="onCollapse"></el-button>
           </follow-up>
         </el-col>
@@ -425,6 +425,13 @@ export default {
       setTimeout(()=>{
         this.$refs.follow.queryLogs()
       },1000)
+    },
+    onMore(val){
+      console.log(val,'22222')
+      this.$refs.tabRef.$refs.followRef.listData()
+      if (val == '查看更多'){
+        this.$refs.tabRef.activeName = 'follow'
+      }
     }
   },
   mounted () {

+ 8 - 7
src/components/normal-basic-layout-new/details/modules/followTable/index.vue

@@ -15,24 +15,24 @@
       <el-table-column
           prop="createby"
           label="跟进人"
-          width="89">
+          min-width="69">
       </el-table-column>
       <el-table-column
           prop="createdate"
           label="跟进时间"
-          width="150">
+          min-width="139">
       </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">
+          min-width="80">
       </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">
+          min-width="117">
         <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">
@@ -47,6 +47,7 @@
       <el-table-column
           prop="content"
           label="跟进内容"
+          min-width="500"
           >
         <template slot-scope="scope">
           <div v-if="($route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail')">
@@ -61,7 +62,7 @@
       <el-table-column
           prop="attcount"
           label="附件数"
-          width="89">
+          min-width="69">
         <template slot-scope="scope">
           <el-button type="text" size="small" @click="showFiles(scope.row)">{{scope.row.attcount}}</el-button>
         </template>
@@ -70,14 +71,14 @@
           v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail' || $route.path === '/phonebookDetail'"
           prop="salesfeesamount"
           label="营销费用"
-          width="100">
+          min-width="80">
         <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">
+          min-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>

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

@@ -6,7 +6,7 @@
         <p class="inline-16">{{$t(`跟进动态`)}}{{'('+ total +')'}}</p>
       </div>
       <div style="display: flex;justify-content: space-between">
-        <el-button type="default" size="mini" @click="onMore" class="inline-16">{{$t(`查看更多`)}}</el-button>
+        <el-button type="default" size="mini" @click="onMore('查看更多')" class="inline-16">{{$t(`查看更多`)}}</el-button>
         <addLog :ownertable="ownertable" @onSuccess="queryLogs" :status="status"></addLog>
       </div>
     </div>
@@ -376,8 +376,8 @@ export default {
         this.commentShowId = i.sys_datafollowupid
       }
     },
-    onMore(){
-      this.$emit('onMore')
+    onMore(val){
+      this.$emit('onMore',val)
     }
   },
   mounted () {

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

@@ -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.$refs.followRef.listData()">
+          <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="onMore">
             <el-button slot="collapse" type="text" icon="el-icon-s-unfold" class="inline-16" @click="onCollapse"></el-button>
           </follow-up>
         </el-col>
@@ -505,6 +505,12 @@ export default {
       setTimeout(()=>{
         this.$refs.follow.queryLogs()
       },1000)
+    },
+    onMore(val){
+      this.$refs.tabRef.$refs.followRef.listData()
+      if (val == '查看更多'){
+        this.$refs.tabRef.activeName = 'follow'
+      }
     }
   },
   mounted () {

+ 8 - 7
src/components/normal-basic-layout/details/modules/followTable/index.vue

@@ -15,24 +15,24 @@
       <el-table-column
           prop="createby"
           label="跟进人"
-          width="89">
+          min-width="69">
       </el-table-column>
       <el-table-column
           prop="createdate"
           label="跟进时间"
-          width="150">
+          min-width="139">
       </el-table-column>
       <el-table-column
           v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'"
           prop="type"
           label="跟进类型"
-          width="180">
+          min-width="80">
       </el-table-column>
       <el-table-column
           prop="contacts"
           v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'"
           label="跟进对象"
-          width="180">
+          min-width="117">
         <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">
@@ -47,6 +47,7 @@
       <el-table-column
           prop="content"
           label="跟进内容"
+          min-width="500"
           >
         <template slot-scope="scope">
           <div v-if="($route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail')">
@@ -61,7 +62,7 @@
       <el-table-column
           prop="attcount"
           label="附件数"
-          width="89">
+          min-width="69">
         <template slot-scope="scope">
           <el-button type="text" size="small" @click="showFiles(scope.row)">{{scope.row.attcount}}</el-button>
         </template>
@@ -70,14 +71,14 @@
           v-if="$route.path === '/projectChangeDetail' || $route.path === '/customerDetail' || $route.path === '/PublicCustomerDetail'"
           prop="salesfeesamount"
           label="营销费用"
-          width="100">
+          min-width="80">
         <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">
+          min-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>

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

@@ -7,7 +7,7 @@
       </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>
+        <el-button type="default" size="mini" @click="onMore('查看更多')" class="inline-16">{{$t(`查看更多`)}}</el-button>
         <addLog :ownertable="ownertable" @onSuccess="queryLogs" :status="status" :disabled="disabled"></addLog>
       </div>
     </div>
@@ -377,8 +377,8 @@ export default {
         this.commentShowId = i.sys_datafollowupid
       }
     },
-    onMore(){
-      this.$emit('onMore')
+    onMore(val){
+      this.$emit('onMore',val)
     }
   },
   mounted () {

+ 10 - 0
src/router/HManagement.js

@@ -703,6 +703,16 @@ const HManagement = [
       keeproute: true
     },
     component: () => import(/* webpackChunkName: "about" */ '@/HManagement/serviceDataScreen/index')
+  },
+  {
+    path: '/actsRecMag',
+    name: 'actsRecMag',
+    meta: {
+      title: '应收账款管理',
+      ast_nav: true,
+      keeproute: true
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/HManagement/actsRecMag/index')
   }
 
 ]

+ 10 - 0
src/router/SManagement.js

@@ -273,5 +273,15 @@ const SManagement = [{
     },
   ]
 },
+  {
+    path: '/actsRec',
+    name: 'actsRec',
+    meta: {
+      title: '应收账款',
+      ast_nav: true,
+      keeproute: true
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/SManagement/actsRec/index')
+  }
 ]
 export default SManagement

+ 5 - 7
src/template/tableMainLayout/index.vue

@@ -13,6 +13,9 @@
           @handleSelectionChange="handleSelectionChange">
       </el-table-column>
       <el-table-column show-overflow-tooltip v-for="(col,index) in layout" :key="col.tablecolid" :prop="col.columnname" :label="col.title" :min-width="col.width || 150" :fixed="fixedName ? fixedName.indexOf(col.columnname)!= -1?redirect ? redirect : 'right' :false : false">
+        <template :slot="headerOptions ? headerOptions.includes(col.columnname) ? 'header' : '' : ''" slot-scope="scope">
+          <slot name="header" :column="{data:scope.row,columnname:col.columnname}"></slot>
+        </template>
         <template slot-scope="scope">
 
           <slot v-if="col.columnname !== 'operation'" name="customcol" :column="{data:scope.row,columnname:col.columnname}"></slot>
@@ -51,7 +54,7 @@ export default {
     custom:是否启用自定义结构;
     opwidth:操作列宽度
   */
-  props:['data','tableName','custom','layout','fixRightData','fixLeftData','height','fixedName','redirect','isCheck'],
+  props:['data','tableName','custom','layout','fixRightData','fixLeftData','height','fixedName','redirect','isCheck','headerOptions'],
   data () {
     return {
       list:[],
@@ -66,11 +69,6 @@ export default {
     })
   },
   watch:{
-    tableName () {
-      this.$nextTick(() => {
-        this.$refs.tables.doLayout()
-      });
-    },
     data(){
       this.$nextTick(() => {
         this.$refs.tables.doLayout()
@@ -99,7 +97,7 @@ export default {
     },
     inputChange (val) {
       this.value = val
-    }
+    },
   },
   mounted () {
   }