|
@@ -18,11 +18,17 @@
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="单据日期" prop="documentDate">
|
|
|
- <el-date-picker clearable
|
|
|
- v-model="queryParams.documentDate"
|
|
|
- type="date"
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
- placeholder="请选择单据日期">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="documentDateRange"
|
|
|
+ @change="setBeginAndEnd"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ type="daterange"
|
|
|
+ align="right"
|
|
|
+ unlink-panels
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ :picker-options="pickerOptions">
|
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="年度" prop="annual">
|
|
@@ -116,8 +122,8 @@
|
|
|
</el-table-column>
|
|
|
<el-table-column label="年度" align="center" prop="annual"/>
|
|
|
<el-table-column label="客户" align="center" prop="custom"/>
|
|
|
- <el-table-column label="销售区域" align="center" prop="saleZone"/>
|
|
|
<el-table-column label="制单人" align="center" prop="creator"/>
|
|
|
+ <el-table-column label="销售区域" align="center" prop="saleZone"/>
|
|
|
<el-table-column label="部门" align="center" prop="dept"/>
|
|
|
<el-table-column label="目标合计" align="center" prop="goalSum"/>
|
|
|
<el-table-column label="备注" align="center" prop="notes"/>
|
|
@@ -143,6 +149,196 @@
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
+ <pagination
|
|
|
+ v-show="total>0"
|
|
|
+ :total="total"
|
|
|
+ :page.sync="queryParams.pageNum"
|
|
|
+ :limit.sync="queryParams.pageSize"
|
|
|
+ @pagination="getList"
|
|
|
+ />
|
|
|
+
|
|
|
+ <el-drawer :title="title" :visible.sync="open" direction="rtl" :before-close="handleClose" size="100%">
|
|
|
+ <el-form ref="form" :model="form" :rules="rules" label-width="120px">
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="编码" prop="code">
|
|
|
+ <el-input v-model="form.code" placeholder="编码后端自动生成" disabled/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="目标名称" prop="goalName">
|
|
|
+ <el-input v-model="form.goalName" placeholder="目标名称后端自动生成" disabled/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="单据日期" prop="documentDate">
|
|
|
+ <el-date-picker clearable
|
|
|
+ v-model="form.documentDate"
|
|
|
+ type="date"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ placeholder="请选择单据日期">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="年度" prop="annual">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="form.annual"
|
|
|
+ type="year"
|
|
|
+ value-format="yyyy"
|
|
|
+ placeholder="选择年度">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="客户" prop="custom">
|
|
|
+ <el-popover-select-v2 v-model="form.custom" title="客户" valueKey="name"
|
|
|
+ referName="CUSTOMER_PARAM"
|
|
|
+ :dataMapping="{ customCode: 'code', custom: 'name'}"
|
|
|
+ :source.sync="form" placeholder="请输入客户">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="制单人" prop="creator">
|
|
|
+ <el-popover-select-v2 v-model="form.creator" title="制单人" valueKey="name"
|
|
|
+ referName="CONTACTS_PARAM"
|
|
|
+ :dataMapping="{ creatorCode: 'code', creator: 'name'}"
|
|
|
+ :source.sync="form" placeholder="请输入制单人">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="销售区域" prop="saleZone">
|
|
|
+ <el-popover-select-v2 v-model="form.saleZone" title="销售区域" valueKey="name"
|
|
|
+ referName="CUSTOMER_PARAM"
|
|
|
+ :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
|
|
|
+ :source.sync="form" 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="form.dept" title="部门" valueKey="name"
|
|
|
+ referName="DEPT_PARAM"
|
|
|
+ :dataMapping="{ deptCode: 'code', dept: 'name'}"
|
|
|
+ :source.sync="form" 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="goalSum">
|
|
|
+ <el-input v-model="form.goalSum" placeholder="目标合计自动计算" disabled />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="备注" prop="notes">
|
|
|
+ <el-input v-model="form.notes" placeholder="请输入备注"/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="单据状态" prop="documentStatus">
|
|
|
+ <el-input v-model="form.documentStatus" placeholder="新增页默认'未提交'" disabled/>
|
|
|
+ </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>
|
|
|
+ </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-row>
|
|
|
+ <el-tabs v-model="activeName">
|
|
|
+ <el-tab-pane label="月回款目标明细" name="monthReturnGoalDetails">
|
|
|
+<!-- v-loading="loading"-->
|
|
|
+ <el-table :data="monthReturnGoalDetailsList" @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="monthReturnGoalDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
|
|
|
+ referName="CUSTOMER_PARAM"
|
|
|
+ :dataMapping="{saleOrg: 'name'}"
|
|
|
+ :source.sync="monthReturnGoalDetailsList[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="monthReturnGoalDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
|
|
|
+ referName="CUSTOMER_PARAM"
|
|
|
+ :dataMapping="{saleZone: 'name'}"
|
|
|
+ :source.sync="monthReturnGoalDetailsList[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="monthReturnGoalDetailsList[scope.$index].custom" title="客户" valueKey="name"
|
|
|
+ referName="CUSTOMER_PARAM"
|
|
|
+ :dataMapping="{custom: 'name'}"
|
|
|
+ :source.sync="monthReturnGoalDetailsList[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="monthReturnGoalDetailsList[scope.$index].dept" title="部门" valueKey="name"
|
|
|
+ referName="DEPT_PARAM"
|
|
|
+ :dataMapping="{dept: 'name'}"
|
|
|
+ :source.sync="monthReturnGoalDetailsList[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="monthReturnGoalDetailsList[scope.$index].creator" title="负责人" valueKey="name"
|
|
|
+ referName="CONTACTS_PARAM"
|
|
|
+ :dataMapping="{creator: 'name'}"
|
|
|
+ :source.sync="monthReturnGoalDetailsList[scope.$index]" placeholder="请输入负责人">
|
|
|
+ </el-popover-select-v2>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="月份" align="center" prop="num" width="250">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-date-picker v-model="monthReturnGoalDetailsList[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="monthReturnGoalDetailsList[scope.$index].goalSum" :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>
|
|
|
+ </el-drawer>
|
|
|
|
|
|
</div>
|
|
|
</template>
|
|
@@ -155,7 +351,11 @@ import {
|
|
|
addMonthReturnGoal,
|
|
|
updateMonthReturnGoal,
|
|
|
delMonthReturnGoal
|
|
|
-} from "@/api/business/spd/goal_management/monthReturnGoal"
|
|
|
+} from "@/api/business/spd/goal_management/monthReturnGoal";
|
|
|
+import {
|
|
|
+ getMonthReturnGoalDetails,
|
|
|
+ delMonthReturnGoalDetails
|
|
|
+} from "@/api/business/spd/goal_management/monthReturnGoalDetails"
|
|
|
|
|
|
// 树形参照
|
|
|
import TreeRefers from '@/components/Refers/treeRefer.vue'
|
|
@@ -206,7 +406,7 @@ export default {
|
|
|
goalSum: null,
|
|
|
notes: null,
|
|
|
documentStatus: null,
|
|
|
- documentDateRange: null
|
|
|
+ params: { beginTime: null, endTime: null,}
|
|
|
},
|
|
|
// 表单参数
|
|
|
form: {
|
|
@@ -240,6 +440,36 @@ export default {
|
|
|
},
|
|
|
// 表单校验
|
|
|
rules: {},
|
|
|
+ // 子表导航名
|
|
|
+ activeName: 'monthReturnGoalDetails',
|
|
|
+ documentDateRange: null,
|
|
|
+ pickerOptions: {
|
|
|
+ shortcuts: [{
|
|
|
+ text: '最近一周',
|
|
|
+ onClick(picker) {
|
|
|
+ const end = new Date();
|
|
|
+ const start = new Date();
|
|
|
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
|
|
|
+ picker.$emit('pick', [start, end]);
|
|
|
+ }
|
|
|
+ }, {
|
|
|
+ text: '最近一个月',
|
|
|
+ onClick(picker) {
|
|
|
+ const end = new Date();
|
|
|
+ const start = new Date();
|
|
|
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
|
|
|
+ picker.$emit('pick', [start, end]);
|
|
|
+ }
|
|
|
+ }, {
|
|
|
+ text: '最近三个月',
|
|
|
+ onClick(picker) {
|
|
|
+ const end = new Date();
|
|
|
+ const start = new Date();
|
|
|
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
|
|
|
+ picker.$emit('pick', [start, end]);
|
|
|
+ }
|
|
|
+ }]
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
@@ -255,6 +485,17 @@ export default {
|
|
|
this.loading = false;
|
|
|
});
|
|
|
},
|
|
|
+ getListDetails() {
|
|
|
+ this.loading = true
|
|
|
+ getMonthReturnGoalDetails(this.form.id).then(response => {
|
|
|
+ this.monthReturnGoalDetailsList = response.data
|
|
|
+ this.computeTotal()
|
|
|
+ this.form.monthReturnGoalDetailsList = this.monthReturnGoalDetailsList
|
|
|
+ updateMonthReturnGoal(this.form).then(response => {
|
|
|
+ })
|
|
|
+ this.loading = false
|
|
|
+ })
|
|
|
+ },
|
|
|
// 取消按钮
|
|
|
cancel() {
|
|
|
this.open = false;
|
|
@@ -305,6 +546,28 @@ export default {
|
|
|
this.open = true;
|
|
|
this.title = "添加--月回款目标填报";
|
|
|
},
|
|
|
+ handleAddDetails() {
|
|
|
+ let list = {
|
|
|
+ id: null,
|
|
|
+ code: null,
|
|
|
+ saleOrg: null,
|
|
|
+ saleZone: null,
|
|
|
+ custom: null,
|
|
|
+ dept: null,
|
|
|
+ creator: null,
|
|
|
+ oneLevelClassifyCode: null,
|
|
|
+ oneLevelClassify: null,
|
|
|
+ twoLevelClassifyCode: null,
|
|
|
+ twoLevelClassify: null,
|
|
|
+ materialCode: null,
|
|
|
+ material: null,
|
|
|
+ department: null,
|
|
|
+ num: null,
|
|
|
+ monthly: null,
|
|
|
+ goalValue: null
|
|
|
+ }
|
|
|
+ this.monthReturnGoalDetailsList.push(list)
|
|
|
+ },
|
|
|
/** 修改按钮操作 */
|
|
|
handleUpdate(row) {
|
|
|
this.reset();
|
|
@@ -351,6 +614,26 @@ export default {
|
|
|
}).catch(() => {
|
|
|
});
|
|
|
},
|
|
|
+ handleDeleteDetails(index, row) {
|
|
|
+ if (this.form.id === null) {
|
|
|
+ this.monthReturnGoalDetailsList.splice(index, 1)
|
|
|
+ this.computeTotal()
|
|
|
+ } else {
|
|
|
+ if (row.id !== null) {
|
|
|
+ this.$modal.confirm('是否确认删除月销售目标填报明细编号为"' + row.id + '"的数据项?').then(function () {
|
|
|
+ return delMonthReturnGoalDetails(row.id);
|
|
|
+ }).then(() => {
|
|
|
+ this.getListDetails();
|
|
|
+ this.$modal.msgSuccess("删除成功");
|
|
|
+ }).catch(() => {
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ this.monthReturnGoalDetailsList.splice(index, 1)
|
|
|
+ this.$message.success('删除成功')
|
|
|
+ this.computeTotal()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
/** 导出按钮操作 */
|
|
|
handleExport() {
|
|
|
this.download('goal_management/monthReturnGoal/export', {
|
|
@@ -364,6 +647,40 @@ export default {
|
|
|
})
|
|
|
.catch(_ => {
|
|
|
});
|
|
|
+ },
|
|
|
+ // 计算主表合计
|
|
|
+ computeTotal() {
|
|
|
+ let list = this.monthReturnGoalDetailsList
|
|
|
+ let sum = 0
|
|
|
+ for (const listElement of list) {
|
|
|
+ sum = (sum * 1000000 + listElement.goalSum * 1000000) / 1000000
|
|
|
+ }
|
|
|
+ this.form.goalSum = sum
|
|
|
+ },
|
|
|
+ // 复制明细
|
|
|
+ handleCopyDetails(row) {
|
|
|
+ let list = {
|
|
|
+ id: null,
|
|
|
+ code: row.code,
|
|
|
+ saleOrg: row.saleOrg,
|
|
|
+ saleZone: row.saleZone,
|
|
|
+ custom: row.custom,
|
|
|
+ creator: row.creator,
|
|
|
+ monthly: row.monthly,
|
|
|
+ goalSum: row.goalSum
|
|
|
+ }
|
|
|
+ this.monthReturnGoalDetailsList.push(list)
|
|
|
+ this.computeTotal()
|
|
|
+ },
|
|
|
+ setBeginAndEnd() {
|
|
|
+ let array = this.documentDateRange
|
|
|
+ if (array !== null) {
|
|
|
+ this.queryParams.params.beginTime = array[0]
|
|
|
+ this.queryParams.params.endTime = array[1]
|
|
|
+ } else {
|
|
|
+ this.queryParams.beginTime = null
|
|
|
+ this.queryParams.endTime = null
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|