|
@@ -1,106 +1,133 @@
|
|
|
<template>
|
|
|
<div class="app-container">
|
|
|
+ <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="编码" prop="code">
|
|
|
+ <el-input v-model="queryParams.code" placeholder="请输入编码" clearable @keyup.enter.native="handleQuery"/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="目标名称" prop="goalName">
|
|
|
+ <el-input v-model="queryParams.goalName" placeholder="请输入目标名称" clearable @keyup.enter.native="handleQuery"/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="单据日期" prop="documentDate">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="documentDateRange"
|
|
|
+ @change="setBeginAndEnd"
|
|
|
+ type="daterange"
|
|
|
+ align="right"
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ @keyup.enter.native="handleQuery"
|
|
|
+ :picker-options="pickerOptions">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-form-item>
|
|
|
+ <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
|
+ <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
|
|
- <el-form-item label="编码" prop="code">
|
|
|
- <el-input v-model="queryParams.code" placeholder="请输入编码" clearable @keyup.enter.native="handleQuery"/>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="目标名称" prop="goalName">
|
|
|
- <el-input v-model="queryParams.goalName" placeholder="请输入目标名称" clearable @keyup.enter.native="handleQuery"/>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="单据日期" prop="documentDate">
|
|
|
- <el-date-picker
|
|
|
- v-model="documentDateRange"
|
|
|
- @change="setBeginAndEnd"
|
|
|
- type="daterange"
|
|
|
- align="right"
|
|
|
- unlink-panels
|
|
|
- range-separator="至"
|
|
|
- start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期"
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
- @keyup.enter.native="handleQuery"
|
|
|
- :picker-options="pickerOptions">
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
|
- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="年度" prop="annual">
|
|
|
- <el-date-picker
|
|
|
- v-model="queryParams.annual"
|
|
|
- type="year"
|
|
|
- clearable
|
|
|
- value-format="yyyy"
|
|
|
- @keyup.enter.native="handleQuery"
|
|
|
- placeholder="请输入年度">
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="月份" prop="monthly">
|
|
|
- <el-date-picker
|
|
|
- v-model="queryParams.monthly"
|
|
|
- type="month"
|
|
|
- clearable
|
|
|
- value-format="yyyy-MM"
|
|
|
- @keyup.enter.native="handleQuery"
|
|
|
- placeholder="请输入月份">
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="制单人" prop="creator">
|
|
|
- <el-popover-select-v2 v-model="queryParams.creator" title="制单人" valueKey="name"
|
|
|
- referName="CONTACTS_PARAM"
|
|
|
- :dataMapping="{ creatorCode: 'code', creator: 'name'}"
|
|
|
- :source.sync="queryParams" placeholder="请输入制单人">
|
|
|
- </el-popover-select-v2>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="部门" prop="dept">
|
|
|
- <el-popover-select-v2 v-model="queryParams.dept" title="部门" valueKey="name"
|
|
|
- referName="DEPT_PARAM"
|
|
|
- :dataMapping="{ deptCode: 'code', dept: 'name'}"
|
|
|
- :source.sync="queryParams" placeholder="请输入部门">
|
|
|
- </el-popover-select-v2>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="目标类型" prop="goalCategory">
|
|
|
- <el-select v-model="queryParams.goalCategory" placeholder="请输入目标类型" @change="changeGoalCategoryQuery" @keyup.enter.native="handleQuery">
|
|
|
- <el-option
|
|
|
- v-for="item in goalCategoryList"
|
|
|
- :key="item.value"
|
|
|
- :label="item.label"
|
|
|
- :value="item.value">
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item v-if="queryParams.goalCategory === '客户维度'" label="客户" prop="custom">
|
|
|
- <el-popover-select-v2 v-model="queryParams.custom" title="客户" valueKey="name"
|
|
|
- referName="CUSTOMER_PARAM"
|
|
|
- :dataMapping="{ customCode: 'code', custom: 'name'}"
|
|
|
- :source.sync="queryParams" placeholder="请输入客户">
|
|
|
- </el-popover-select-v2>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item v-if="queryParams.goalCategory === '销售区域'" label="销售区域" prop="saleZone">
|
|
|
- <el-popover-select-v2 v-model="queryParams.saleZoneCode" title="销售区域" valueKey="name"
|
|
|
- referName="DEPT_PARAM"
|
|
|
- :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
|
|
|
- :source.sync="queryParams" placeholder="请输入销售区域">
|
|
|
- </el-popover-select-v2>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item v-if="queryParams.goalCategory === '一级分类'" label="一级分类" prop="oneLevelClassify">
|
|
|
- <el-select v-model="queryParams.oneLevelClassify" size="mini" clearable
|
|
|
- @focus="chooseTreeReferForQuery('MATERIALCLASSIFY_PARAM', false, '一级物料分类')"
|
|
|
- style="width: 200px">
|
|
|
- <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item v-if="queryParams.goalCategory === '二级分类'" label="二级分类" prop="custom">
|
|
|
- <el-select v-model="queryParams.twoLevelClassify" size="mini" clearable
|
|
|
- @focus="chooseTreeReferForQuery('MATERIALCLASSIFY_PARAM', false, '二级物料分类')"
|
|
|
- style="width: 200px">
|
|
|
- <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="年度" prop="annual">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="queryParams.annual"
|
|
|
+ type="year"
|
|
|
+ clearable
|
|
|
+ value-format="yyyy"
|
|
|
+ @keyup.enter.native="handleQuery"
|
|
|
+ placeholder="请输入年度">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="月份" prop="monthly">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="queryParams.monthly"
|
|
|
+ type="month"
|
|
|
+ clearable
|
|
|
+ value-format="yyyy-MM"
|
|
|
+ @keyup.enter.native="handleQuery"
|
|
|
+ placeholder="请输入月份">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="制单人" prop="creator">
|
|
|
+ <el-popover-select-v2 v-model="queryParams.creator" title="制单人" valueKey="name"
|
|
|
+ referName="CONTACTS_PARAM"
|
|
|
+ :dataMapping="{ creatorCode: 'code', creator: 'name'}"
|
|
|
+ :source.sync="queryParams" placeholder="请输入制单人">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="部门" prop="dept">
|
|
|
+ <el-popover-select-v2 v-model="queryParams.dept" title="部门" valueKey="name"
|
|
|
+ referName="DEPT_PARAM"
|
|
|
+ :dataMapping="{ deptCode: 'code', dept: 'name'}"
|
|
|
+ :source.sync="queryParams" placeholder="请输入部门">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="目标类型" prop="goalCategory">
|
|
|
+ <el-select v-model="queryParams.goalCategory" placeholder="请输入目标类型" @change="changeGoalCategoryQuery" @keyup.enter.native="handleQuery">
|
|
|
+ <el-option
|
|
|
+ v-for="item in goalCategoryList"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item v-if="queryParams.goalCategory === '客户维度'" label="客户" prop="custom">
|
|
|
+ <el-popover-select-v2 v-model="queryParams.custom" title="客户" valueKey="name"
|
|
|
+ referName="CUSTOMER_PARAM"
|
|
|
+ :dataMapping="{ customCode: 'code', custom: 'name'}"
|
|
|
+ :source.sync="queryParams" placeholder="请输入客户">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="queryParams.goalCategory === '销售区域'" label="销售区域" prop="saleZone">
|
|
|
+ <el-popover-select-v2 v-model="queryParams.saleZoneCode" title="销售区域" valueKey="name"
|
|
|
+ referName="MK_SALESAREA_PARAM"
|
|
|
+ :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
|
|
|
+ :source.sync="queryParams" placeholder="请输入销售区域">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="queryParams.goalCategory === '一级分类'" label="一级分类" prop="oneLevelClassify">
|
|
|
+ <el-select v-model="queryParams.oneLevelClassify" size="mini" clearable
|
|
|
+ @focus="chooseTreeReferForQuery('MATERIALCLASSIFY_PARAM', false, '一级物料分类')"
|
|
|
+ style="width: 200px">
|
|
|
+ <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="queryParams.goalCategory === '二级分类'" label="二级分类" prop="custom">
|
|
|
+ <el-select v-model="queryParams.twoLevelClassify" size="mini" clearable
|
|
|
+ @focus="chooseTreeReferForQuery('MATERIALCLASSIFY_PARAM', false, '二级物料分类')"
|
|
|
+ style="width: 200px">
|
|
|
+ <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</el-form>
|
|
|
|
|
|
- <el-row :gutter="10" class="mb8">
|
|
|
+ <el-row :gutter="10" class="mb8" style="float: right">
|
|
|
<el-col :span="1.5">
|
|
|
<el-button
|
|
|
type="primary"
|
|
@@ -179,6 +206,13 @@
|
|
|
<el-button
|
|
|
size="mini"
|
|
|
type="text"
|
|
|
+ icon="el-icon-document-copy"
|
|
|
+ @click="handleCopy(scope.row.id)"
|
|
|
+ >复制
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ size="mini"
|
|
|
+ type="text"
|
|
|
icon="el-icon-edit"
|
|
|
@click="handleUpdate(scope.row)"
|
|
|
>修改
|
|
@@ -289,14 +323,14 @@
|
|
|
<el-form-item v-if="form.goalCategory === '客户维度'" label="客户" prop="custom">
|
|
|
<el-popover-select-v2 v-model="form.custom" title="客户" valueKey="name"
|
|
|
referName="CUSTOMER_PARAM"
|
|
|
- :dataMapping="{ customCode: 'code', custom: 'name'}"
|
|
|
+ :dataMapping="{custom: 'name'}"
|
|
|
:source.sync="form" placeholder="请输入客户">
|
|
|
</el-popover-select-v2>
|
|
|
</el-form-item>
|
|
|
<el-form-item v-if="form.goalCategory === '销售区域'" label="销售区域" prop="saleZone">
|
|
|
- <el-popover-select-v2 v-model="form.saleZoneCode" title="销售区域" valueKey="name"
|
|
|
- referName="ORG_PARAM"
|
|
|
- :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
|
|
|
+ <el-popover-select-v2 v-model="form.saleZone" title="销售区域" valueKey="name"
|
|
|
+ referName="MK_SALESAREA_PARAM"
|
|
|
+ :dataMapping="{saleZone: 'name'}"
|
|
|
:source.sync="form" placeholder="请输入销售区域">
|
|
|
</el-popover-select-v2>
|
|
|
</el-form-item>
|
|
@@ -316,133 +350,212 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
- <el-form-item label="操作">
|
|
|
- <el-button type="primary" @click="submitForm">确 定</el-button>
|
|
|
- <el-button @click="cancel">取 消</el-button>
|
|
|
+ <el-form-item label="单据状态" prop="documentStatus">
|
|
|
+ <el-input v-model="form.documentStatus" placeholder="未提交" disabled/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</el-form>
|
|
|
|
|
|
- <el-row :gutter="10" class="mb8">
|
|
|
-<!-- <el-col :span="1.5">
|
|
|
- <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddDetails">增 行</el-button>
|
|
|
- </el-col>-->
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button type="primary" plain icon="el-icon-folder-opened" size="mini" @click="clickMerge">合 并</el-button>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-tabs v-model="activeName">
|
|
|
- <el-tab-pane label="月销售目标合并明细" name="monthGoalMergeDetails">
|
|
|
- <el-table v-loading="loading" :data="monthGoalMergeDetailsList" @selection-change="handleSelectionChange">
|
|
|
- <el-table-column type="selection" width="55" align="center" fixed />
|
|
|
- <el-table-column label="销售组织" align="center" prop="saleOrg" width="180">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
|
|
|
- referName="CUSTOMER_PARAM" disabled
|
|
|
- :dataMapping="{ saleOrgCode: 'code', saleOrg: 'name'}"
|
|
|
- :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入销售组织">
|
|
|
- </el-popover-select-v2>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="销售区域" align="center" prop="saleZone" width="180">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
|
|
|
- referName="CUSTOMER_PARAM" disabled
|
|
|
- :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
|
|
|
- :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入销售区域">
|
|
|
- </el-popover-select-v2>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="客户" align="center" prop="custom" width="180">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].custom" title="客户" valueKey="name"
|
|
|
- referName="CUSTOMER_PARAM" disabled
|
|
|
- :dataMapping="{ customCode: 'code', custom: 'name'}"
|
|
|
- :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入客户">
|
|
|
- </el-popover-select-v2>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="部门" align="center" prop="dept" width="180">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].dept" title="部门" valueKey="name"
|
|
|
- referName="DEPT_PARAM" disabled
|
|
|
- :dataMapping="{ deptCode: 'code', dept: 'name'}"
|
|
|
- :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入客户">
|
|
|
- </el-popover-select-v2>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="制单人" align="center" prop="creator" width="180">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].creator" title="负责人" valueKey="name"
|
|
|
- referName="CONTACTS_PARAM" disabled
|
|
|
- :dataMapping="{ creatorCode: 'code', creator: 'name'}"
|
|
|
- :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入负责人">
|
|
|
- </el-popover-select-v2>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="科室" align="center" prop="department" width="180">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-input v-model="monthGoalMergeDetailsList[scope.$index].department" placeholder="请输入科室" disabled></el-input>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="一级分类" align="center" prop="oneLevelClassify" width="220">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-select v-model="monthGoalMergeDetailsList[scope.$index].oneLevelClassify" size="mini" clearable
|
|
|
- @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '一级物料分类', scope.$index)"
|
|
|
- style="width: 200px" disabled>
|
|
|
- <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
- </el-select>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="二级分类" align="center" prop="twoLevelClassify" width="220">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-select v-model="monthGoalMergeDetailsList[scope.$index].twoLevelClassify" size="mini" clearable
|
|
|
- @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '二级物料分类', scope.$index)"
|
|
|
- style="width: 200px" disabled>
|
|
|
- <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
- </el-select>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="物料" align="center" prop="material" width="180">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].material" title="物料" valueKey="name"
|
|
|
- referName="MATERIAL_PARAM" disabled
|
|
|
- :dataMapping="{ materialCode: 'code', material: 'name'}"
|
|
|
- :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入物料">
|
|
|
- </el-popover-select-v2>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="月份" align="center" prop="monthly" width="250">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-date-picker disabled v-model="monthGoalMergeDetailsList[scope.$index].monthly" value-format="yyyy-MM" type="month" placeholder="选择月份">
|
|
|
- </el-date-picker>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="目标值" align="center" prop="totalGoal" width="220">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-input-number @change="computeTotal" v-model="monthGoalMergeDetailsList[scope.$index].goalValue" :precision="2" :step="1" :min="0"></el-input-number>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
-<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="120px" fixed="right">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-button
|
|
|
- size="mini"
|
|
|
- type="text"
|
|
|
- icon="el-icon-delete"
|
|
|
- @click="handleDeleteDetails(scope.$index, scope.row)"
|
|
|
- >删除</el-button>
|
|
|
- <el-button
|
|
|
- size="mini"
|
|
|
- type="text"
|
|
|
- icon="el-icon-delete"
|
|
|
- @click="handleCopyDetails(scope.row)"
|
|
|
- >复制</el-button>
|
|
|
- </template>
|
|
|
- </el-table-column>-->
|
|
|
- </el-table>
|
|
|
- </el-tab-pane>
|
|
|
- </el-tabs>
|
|
|
+ <div>
|
|
|
+ <el-row :gutter="10" class="mb8" style="margin-left: 94%">
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button type="primary" plain icon="el-icon-folder-opened" size="mini" @click="clickMerge">合 并</el-button>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-tabs v-model="activeName" @tab-click="getNewTwoArray">
|
|
|
+ <el-tab-pane label="月销售目标合并明细" name="monthGoalMergeDetails">
|
|
|
+ <el-table v-loading="loading" :data="monthGoalMergeDetailsList" @selection-change="handleSelectionChange">
|
|
|
+ <el-table-column type="selection" width="55" align="center" fixed />
|
|
|
+ <el-table-column label="销售组织" align="center" prop="saleOrg" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
|
|
|
+ referName="ORG_PARAM" disabled
|
|
|
+ :dataMapping="{ saleOrgCode: 'code', saleOrg: 'name'}"
|
|
|
+ :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入销售组织">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="销售区域" align="center" prop="saleZone" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
|
|
|
+ referName="MK_SALESAREA_PARAM" disabled
|
|
|
+ :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
|
|
|
+ :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入销售区域">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="客户" align="center" prop="custom" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].custom" title="客户" valueKey="name"
|
|
|
+ referName="CUSTOMER_PARAM" disabled
|
|
|
+ :dataMapping="{ customCode: 'code', custom: 'name'}"
|
|
|
+ :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入客户">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="部门" align="center" prop="dept" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].dept" title="部门" valueKey="name"
|
|
|
+ referName="DEPT_PARAM" disabled
|
|
|
+ :dataMapping="{ deptCode: 'code', dept: 'name'}"
|
|
|
+ :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入客户">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="制单人" align="center" prop="creator" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].creator" title="负责人" valueKey="name"
|
|
|
+ referName="CONTACTS_PARAM" disabled
|
|
|
+ :dataMapping="{ creatorCode: 'code', creator: 'name'}"
|
|
|
+ :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入负责人">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="科室" align="center" prop="department" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input v-model="monthGoalMergeDetailsList[scope.$index].department" placeholder="请输入科室" disabled></el-input>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="一级分类" align="center" prop="oneLevelClassify" width="220">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-select v-model="monthGoalMergeDetailsList[scope.$index].oneLevelClassify" size="mini" clearable
|
|
|
+ @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '一级物料分类', scope.$index)"
|
|
|
+ style="width: 200px" disabled>
|
|
|
+ <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="二级分类" align="center" prop="twoLevelClassify" width="220">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-select v-model="monthGoalMergeDetailsList[scope.$index].twoLevelClassify" size="mini" clearable
|
|
|
+ @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '二级物料分类', scope.$index)"
|
|
|
+ style="width: 200px" disabled>
|
|
|
+ <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="物料" align="center" prop="material" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].material" title="物料" valueKey="name"
|
|
|
+ referName="MATERIAL_PARAM" disabled
|
|
|
+ :dataMapping="{ materialCode: 'code', material: 'name'}"
|
|
|
+ :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入物料">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="月份" align="center" prop="monthly" width="250">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-date-picker disabled v-model="monthGoalMergeDetailsList[scope.$index].monthly" value-format="yyyy-MM" type="month" placeholder="选择月份">
|
|
|
+ </el-date-picker>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="目标值" align="center" prop="totalGoal" width="220">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input-number @change="computeTotal" v-model="monthGoalMergeDetailsList[scope.$index].goalValue" :precision="2" :step="1" :min="0"></el-input-number>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="120px" fixed="right">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-button
|
|
|
+ size="mini"
|
|
|
+ type="text"
|
|
|
+ icon="el-icon-delete"
|
|
|
+ @click="handleDeleteDetails(scope.$index, scope.row)"
|
|
|
+ >删除</el-button>
|
|
|
+ <el-button
|
|
|
+ size="mini"
|
|
|
+ type="text"
|
|
|
+ icon="el-icon-delete"
|
|
|
+ @click="handleCopyDetails(scope.row)"
|
|
|
+ >复制</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>-->
|
|
|
+ </el-table>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="区域目标汇总(月)" name="zoneGoalSum">
|
|
|
+ <el-table :data="zoneGoalSumList">
|
|
|
+ <el-table-column label="序号" type="index" width="55" align="center" fixed />
|
|
|
+ <el-table-column label="销售组织" align="center" prop="saleOrg" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-popover-select-v2 v-model="zoneGoalSumList[scope.$index].saleOrg" title="销售组织" valueKey="name"
|
|
|
+ referName="ORG_PARAM" disabled
|
|
|
+ :dataMapping="{ saleOrgCode: 'code', saleOrg: 'name'}"
|
|
|
+ :source.sync="zoneGoalSumList[scope.$index]" placeholder="请输入销售组织">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="销售区域" align="center" prop="saleZone" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-popover-select-v2 v-model="zoneGoalSumList[scope.$index].saleZone" title="销售区域" valueKey="name"
|
|
|
+ referName="ORG_PARAM" disabled
|
|
|
+ :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
|
|
|
+ :source.sync="zoneGoalSumList[scope.$index]" placeholder="请输入销售区域">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="月份" align="center" prop="monthly" width="250">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-date-picker disabled v-model="zoneGoalSumList[scope.$index].monthly" value-format="yyyy-MM" type="month" placeholder="选择月份">
|
|
|
+ </el-date-picker>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="目标值" align="center" prop="totalGoal" width="220">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input-number @change="computeTotal" v-model="zoneGoalSumList[scope.$index].goalValue" :precision="2" :step="1" :min="0" disabled></el-input-number>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="客户目标汇总(月)" name="customGoalSum">
|
|
|
+ <el-table :data="customGoalSumList">
|
|
|
+ <el-table-column label="序号" type="index" width="55" align="center" fixed />
|
|
|
+ <el-table-column label="销售组织" align="center" prop="saleOrg" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-popover-select-v2 v-model="customGoalSumList[scope.$index].saleOrg" title="销售组织" valueKey="name"
|
|
|
+ referName="ORG_PARAM" disabled
|
|
|
+ :dataMapping="{ saleOrgCode: 'code', saleOrg: 'name'}"
|
|
|
+ :source.sync="customGoalSumList[scope.$index]" placeholder="请输入销售组织">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="销售区域" align="center" prop="saleZone" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-popover-select-v2 v-model="customGoalSumList[scope.$index].saleZone" title="销售区域" valueKey="name"
|
|
|
+ referName="ORG_PARAM" disabled
|
|
|
+ :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
|
|
|
+ :source.sync="customGoalSumList[scope.$index]" placeholder="请输入销售区域">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="客户" align="center" prop="custom" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-popover-select-v2 v-model="customGoalSumList[scope.$index].custom" title="客户" valueKey="name"
|
|
|
+ referName="CUSTOMER_PARAM" disabled
|
|
|
+ :dataMapping="{ customCode: 'code', custom: 'name'}"
|
|
|
+ :source.sync="customGoalSumList[scope.$index]" placeholder="请输入客户">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="月份" align="center" prop="monthly" width="250">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-date-picker disabled v-model="customGoalSumList[scope.$index].monthly" value-format="yyyy-MM" type="month" placeholder="选择月份">
|
|
|
+ </el-date-picker>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="目标值" align="center" prop="totalGoal" width="220">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input-number @change="computeTotal" v-model="customGoalSumList[scope.$index].goalValue" :precision="2" :step="1" :min="0" disabled></el-input-number>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
+ <div slot="footer" class="dialog-footer" style="margin-left: 88%; margin-top: 1%">
|
|
|
+ <el-button type="primary" @click="submitForm" size="medium">确 定</el-button>
|
|
|
+ <el-button @click="cancel" size="medium">返 回</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</el-drawer>
|
|
|
|
|
|
<TreeRefers ref="treeQuery" @doSubmit="selectionsToInputForQuery" :single="true"/>
|
|
@@ -485,12 +598,14 @@ export default {
|
|
|
// 非多个禁用
|
|
|
multiple: true,
|
|
|
// 显示搜索条件
|
|
|
- showSearch: true,
|
|
|
+ showSearch: false,
|
|
|
// 总条数
|
|
|
total: 0,
|
|
|
// 月销售目标合并表格数据
|
|
|
monthGoalMergeList: [],
|
|
|
monthGoalMergeDetailsList: [],
|
|
|
+ zoneGoalSumList: [],
|
|
|
+ customGoalSumList: [],
|
|
|
// 弹出层标题
|
|
|
title: "",
|
|
|
// 是否显示弹出层
|
|
@@ -572,7 +687,8 @@ export default {
|
|
|
oneLevelClassify: null,
|
|
|
twoLevelClassifyCode: null,
|
|
|
twoLevelClassify: null,
|
|
|
- monthMergeDetailsList: null
|
|
|
+ monthMergeDetailsList: null,
|
|
|
+ oldMonthMergeDetailsList: null
|
|
|
},
|
|
|
formDetails: {
|
|
|
id: null,
|
|
@@ -669,7 +785,9 @@ export default {
|
|
|
oneLevelClassifyCode: null,
|
|
|
oneLevelClassify: null,
|
|
|
twoLevelClassifyCode: null,
|
|
|
- twoLevelClassify: null
|
|
|
+ twoLevelClassify: null,
|
|
|
+ monthMergeDetailsList: null,
|
|
|
+ oldMonthMergeDetailsList: null
|
|
|
};
|
|
|
this.resetForm("form");
|
|
|
},
|
|
@@ -719,8 +837,16 @@ export default {
|
|
|
handleAdd() {
|
|
|
this.reset();
|
|
|
this.monthGoalMergeDetailsList = []
|
|
|
+ this.customGoalSumList = []
|
|
|
+ this.zoneGoalSumList = []
|
|
|
+ this.activeName = 'monthGoalMergeDetails'
|
|
|
this.open = true;
|
|
|
- this.title = "添加月销售目标合并";
|
|
|
+ this.title = "添加--月销售目标合并";
|
|
|
+ this.form.documentDate = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0') + '-' + new Date().getDate().toString().padStart(2, '0')
|
|
|
+ this.form.annual = new Date().getFullYear().toString()
|
|
|
+ this.form.monthly = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0')
|
|
|
+ this.form.creator = this.$store.state.user.nickName
|
|
|
+ this.form.dept = this.$store.state.user.deptName
|
|
|
},
|
|
|
handleAddDetails() {
|
|
|
let list = {
|
|
@@ -747,20 +873,43 @@ export default {
|
|
|
/** 修改按钮操作 */
|
|
|
handleUpdate(row) {
|
|
|
this.reset();
|
|
|
+ this.customGoalSumList = []
|
|
|
+ this.zoneGoalSumList = []
|
|
|
+ this.activeName = 'monthGoalMergeDetails'
|
|
|
const id = row.id || this.ids
|
|
|
getMonthGoalMerge(id).then(response => {
|
|
|
this.form = response.data;
|
|
|
this.monthGoalMergeDetailsList = this.form.monthMergeDetailsList
|
|
|
this.open = true;
|
|
|
- this.title = "修改月销售目标合并";
|
|
|
+ this.title = "修改--月销售目标合并";
|
|
|
});
|
|
|
},
|
|
|
+ // 复制按钮操作
|
|
|
+ handleCopy(id) {
|
|
|
+ this.reset()
|
|
|
+ this.monthGoalMergeDetailsList = []
|
|
|
+ this.customGoalSumList = []
|
|
|
+ this.zoneGoalSumList = []
|
|
|
+ this.activeName = 'monthGoalMergeDetails'
|
|
|
+ getMonthGoalMerge(id).then(response => {
|
|
|
+ this.form = response.data
|
|
|
+ this.form.id = null
|
|
|
+ this.form.code = null
|
|
|
+ this.title = "添加--月销售目标合并";
|
|
|
+ this.form.documentDate = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0') + '-' + new Date().getDate().toString().padStart(2, '0')
|
|
|
+ this.form.annual = new Date().getFullYear().toString()
|
|
|
+ this.form.monthly = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0')
|
|
|
+ this.open = true
|
|
|
+ this.changeGoalCategoryForm()
|
|
|
+ })
|
|
|
+ },
|
|
|
/** 提交按钮 */
|
|
|
submitForm() {
|
|
|
this.$refs["form"].validate(valid => {
|
|
|
if (valid) {
|
|
|
if (this.form.id !== null) {
|
|
|
- this.form.monthMergeDetailsList = this.monthGoalMergeDetailsList
|
|
|
+ this.form.monthMergeDetailsList = JSON.parse(JSON.stringify(this.monthGoalMergeDetailsList))
|
|
|
+ console.log(this.form);
|
|
|
updateMonthGoalMerge(this.form).then(response => {
|
|
|
this.$modal.msgSuccess("修改成功");
|
|
|
this.open = false;
|
|
@@ -1042,32 +1191,32 @@ export default {
|
|
|
},
|
|
|
// 合并数据
|
|
|
clickMerge() {
|
|
|
- let classify = this.form.goalCategory
|
|
|
- let classifyValue;
|
|
|
- if (classify === null || classify === '') {
|
|
|
+ if (this.form.id !== null) {
|
|
|
+ this.form.oldMonthMergeDetailsList = JSON.parse(JSON.stringify(this.monthGoalMergeDetailsList))
|
|
|
+ }
|
|
|
+ if (this.activeName !== 'monthGoalMergeDetails') {
|
|
|
+ return this.$message.error('当前标签不是月销售目标合并明细')
|
|
|
+ }
|
|
|
+ let query = JSON.parse(JSON.stringify(this.form))
|
|
|
+ if (query.goalCategory === null || query.goalCategory === '') {
|
|
|
return this.$message.error('请输入目标分类')
|
|
|
- } else if (classify === '销售区域') {
|
|
|
- classifyValue = this.form.saleZone
|
|
|
- if (classifyValue === null) {
|
|
|
+ } else if (query.goalCategory === '销售区域') {
|
|
|
+ if (query.saleZone === null) {
|
|
|
return this.$message.error('请输入销售区域')
|
|
|
}
|
|
|
- } else if (classify === '一级分类') {
|
|
|
- classifyValue = this.form.oneLevelClassify
|
|
|
- if (classifyValue === null) {
|
|
|
+ } else if (query.goalCategory === '一级分类') {
|
|
|
+ if (query.oneLevelClassify === null) {
|
|
|
return this.$message.error('请输入一级分类')
|
|
|
}
|
|
|
- } else if (classify === '二级分类') {
|
|
|
- classifyValue = this.form.twoLevelClassify
|
|
|
- if (classifyValue === null) {
|
|
|
+ } else if (query.goalCategory === '二级分类') {
|
|
|
+ if (query.twoLevelClassify === null) {
|
|
|
return this.$message.error('请输入二级分类')
|
|
|
}
|
|
|
- } else if (classify === '客户维度') {
|
|
|
- classifyValue = this.form.custom
|
|
|
- if (classifyValue === null) {
|
|
|
+ } else if (query.goalCategory === '客户维度') {
|
|
|
+ if (query.custom === null) {
|
|
|
return this.$message.error('请输入客户')
|
|
|
}
|
|
|
}
|
|
|
- let query = { classify: classify, classifyValue: classifyValue }
|
|
|
mergeMonthSaleMergeDetails(query).then(response => {
|
|
|
console.log(response);
|
|
|
this.monthGoalMergeDetailsList = response.data.monthGoalMergeDetails
|
|
@@ -1099,7 +1248,42 @@ export default {
|
|
|
console.log('导出明细');
|
|
|
this.handleExportDetails()
|
|
|
}
|
|
|
- }
|
|
|
+ },
|
|
|
+ // 获得区域目标汇总or客户目标汇总
|
|
|
+ getNewTwoArray() {
|
|
|
+ let arr = JSON.parse(JSON.stringify(this.monthGoalMergeDetailsList))
|
|
|
+ // 如果子表标签是annualSaleGoalMergeDetails 或者 主表的目标分类是“销售区域”
|
|
|
+ if (this.activeName === 'monthGoalMergeDetails' || this.form.goalCategory !== '销售区域') {
|
|
|
+ this.zoneGoalSumList = null
|
|
|
+ this.customGoalSumList = null
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 根据某三个属性进行合并并相加totalGoal的函数
|
|
|
+ const mergeAndSumTotalGoal = (array) => {
|
|
|
+ return Array.from(array.reduce((map, obj) => {
|
|
|
+ let key = null
|
|
|
+ if (this.activeName === 'zoneGoalSum') {
|
|
|
+ key = `${obj.saleOrg}-${obj.saleZone}-${obj.monthly}`
|
|
|
+ } else if (this.activeName === 'customerGoalSum') {
|
|
|
+ key = `${obj.saleOrg}-${obj.saleZone}-${obj.custom}-${obj.monthly}`
|
|
|
+ }
|
|
|
+ if (map.has(key)) {
|
|
|
+ const existingObj = map.get(key)
|
|
|
+ existingObj.goalValue += obj.goalValue
|
|
|
+ } else {
|
|
|
+ map.set(key, { ...obj })
|
|
|
+ }
|
|
|
+ return map
|
|
|
+ }, new Map()).values())
|
|
|
+ }
|
|
|
+ // 调用合并函数
|
|
|
+ const mergedArray = mergeAndSumTotalGoal(arr)
|
|
|
+ if (this.activeName === 'zoneGoalSum') {
|
|
|
+ this.zoneGoalSumList = mergedArray
|
|
|
+ } else if (this.activeName === 'customGoalSum') {
|
|
|
+ this.customGoalSumList = mergedArray
|
|
|
+ }
|
|
|
+ },
|
|
|
}
|
|
|
};
|
|
|
</script>
|