From f08c38b9cb4e1ac4185a98d21c9ad2696bd8a633 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期五, 24 一月 2025 16:17:39 +0800 Subject: [PATCH] 添加丹灵销售分析页面 --- src/views/purchase/danlingPerson.vue | 446 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/productPurchaseSearch.js | 11 + 2 files changed, 457 insertions(+), 0 deletions(-) diff --git a/src/api/productPurchaseSearch.js b/src/api/productPurchaseSearch.js index 69f5a98..9137e8d 100644 --- a/src/api/productPurchaseSearch.js +++ b/src/api/productPurchaseSearch.js @@ -14,6 +14,17 @@ }) } +export function getDLPersonListData(data) { + return request({ + headers:{ + 'Authorization': getToken() + }, + url: process.env.BASE_API+'/order/danLingSaleRecord4', + method: 'post', + data:data + }) +} + export function getCityInOut(data) { return request({ headers:{ diff --git a/src/views/purchase/danlingPerson.vue b/src/views/purchase/danlingPerson.vue new file mode 100644 index 0000000..b05ba4e --- /dev/null +++ b/src/views/purchase/danlingPerson.vue @@ -0,0 +1,446 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + + <div style="display: block;"> + <div class="basic_search" style="padding-top: 10px;"> + <span>按照时间查询:</span> + <el-date-picker + value-format="yyyy-MM-dd HH:mm:ss" + v-model="validTime" + type="daterange" + :default-time="['00:00:00','23:59:59']" + :picker-options="pickerOptions" + range-separator="-" + start-placeholder="开始日期" + end-placeholder="结束日期" + > + </el-date-picker> + </div> + + <div class="basic_search" style="padding-top: 10px;margin-left: 20px" > + <span>是否需上传身份证:</span> + <el-select v-model="listQuery.filter.isNeedUploadPhoto" placeholder="请选择" style="width:100px"> + <el-option + v-for="item in options" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option> + </el-select> + </div> + </div> + <div style="margin-top: 10px;"> +<!-- <div style="display: block">--> +<!-- <div class="basic_search">--> +<!-- <span>区域:</span>--> +<!-- <el-select v-model="listQuery.filter.province" clearable filterable size="small" @change="changeArea('province')">--> +<!-- <el-option--> +<!-- v-for="item in provinceList"--> +<!-- :key="item.id"--> +<!-- :label="item.name"--> +<!-- :value="item.name"--> +<!-- >--> +<!-- </el-option>--> +<!-- </el-select>--> +<!-- </div>--> +<!-- <div class="basic_search">--> +<!-- <el-select v-model="listQuery.filter.city" prop="city" clearable filterable size="small" @change="changeArea('city')">--> +<!-- <el-option--> +<!-- v-for="item in cityList"--> +<!-- :key="item.id"--> +<!-- :label="item.name"--> +<!-- :value="item.name"--> +<!-- >--> +<!-- </el-option>--> +<!-- </el-select>--> +<!-- </div>--> +<!-- <div class="basic_search">--> +<!-- <el-select v-model="listQuery.filter.district" clearable filterable size="small" @change="changeArea('district')">--> +<!-- <el-option--> +<!-- v-for="item in districtList"--> +<!-- :key="item.id"--> +<!-- :label="item.name"--> +<!-- :value="item.name"--> +<!-- >--> +<!-- </el-option>--> +<!-- </el-select>--> +<!-- </div>--> +<!-- <div class="basic_search">--> +<!-- <el-select v-model="listQuery.filter.street"clearable filterable size="small" @change="changeArea('street')" >--> +<!-- <el-option--> +<!-- v-for="item in streetList"--> +<!-- :key="item.id"--> +<!-- :label="item.name"--> +<!-- :value="item.name"--> +<!-- >--> +<!-- </el-option>--> +<!-- </el-select>--> +<!-- </div>--> +<!-- <div class="basic_search">--> +<!-- <el-select v-model="listQuery.filter.committee" size="small" clearable filterable>--> +<!-- <el-option--> +<!-- v-for="item in committeeList"--> +<!-- :key="item.id"--> +<!-- :label="item.name"--> +<!-- :value="item.name"--> +<!-- >--> +<!-- </el-option>--> +<!-- </el-select>--> +<!-- </div>--> +<!-- </div>--> + <div style="display: block;margin-top: 10px"> + <div class="basic_search" > + <span>购买人身份证:</span> + <el-input filterable clearable v-model="listQuery.filter.identify" size="small" style="width:200px"> + </el-input> + </div> + <div class="basic_search" style="margin-left: 15px"> + <span>产品流向码:</span> + <el-input filterable clearable v-model="listQuery.filter.directioncode" size="small" style="width:200px"> + </el-input> + </div> + <div class="basic_search" style="margin-left: 15px"> + <span>民族:</span> + <el-input filterable clearable v-model="listQuery.filter.nation" size="small" style="width:200px"> + </el-input> + </div> + </div> + + <div style="margin-top: 10px"> + <div class="basic_search" style="margin-left: 15px"> + <span>按企业名称:</span> + <el-input filterable clearable v-model="listQuery.filter.enterprisename" size="small" style="width:200px"> + </el-input> + </div> + <div class="basic_search" > + <el-button style="margin-left: 10px;" type="primary" @click="reset()" size="small">重置</el-button> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-search" @click="searchProductSearch('查询','')" size="small">查询</el-button> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-download" @click="exportToExcel" v-long-re-click size="small">导出</el-button> + </div> + + </div> + </div> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="personPurchaseData" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column label="序号" type="index" align="center" width="60"/> + <el-table-column label="地区" prop="city" align="center" width="150"> + </el-table-column> + <el-table-column label="公司名称" prop="enterprisename" align="center" width="200"> + </el-table-column> + <el-table-column label="公司编号" prop="companynumber" align="center"> + </el-table-column> + <el-table-column label="购买人姓名" prop="name" align="center"> + </el-table-column> + <el-table-column label="民族" prop="nation" align="center"> + </el-table-column> + <el-table-column label="购买人身份证" prop="identify" align="center" width="200"> + </el-table-column> + <el-table-column label="购买数量(挂、个)" prop="num" align="center" width="100"> + </el-table-column> + <el-table-column label="退货数量(挂、个)" prop="returnnum" align="center" width="100"> + </el-table-column> + <el-table-column label="最近购买时间" prop="saletime" align="center" width="200"> + <template slot-scope="scope"> + <span>{{scope.row.saletime | formatDate}}</span> + </template> + </el-table-column> + <el-table-column label="证件照" align="center"> + <template slot-scope="scope"> + <el-image + v-if="scope.row.path !== null" + style="width: 66px; height: 66px" + :src="scope.row.path" + :preview-src-list="previewList"> + </el-image> + </template> + </el-table-column> + <el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <!-- <el-button type="text" @click="showEditHandle(scope.row)">编辑</el-button>--> + <el-button type="text" @click="showPurchaseDetail(scope.row)" v-if="scope.row.companynumber !== undefined">查看</el-button> + <el-button type="text" @click="showUploadDialogHandler(scope.row.identify)" v-if="Cookies.get('isSupervision') !=='null'">上传</el-button> + </template> + </el-table-column> + </el-table> + <br> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[20, 50, 100, 200]" + :page-size="pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + <br> + </div> + <el-dialog + title="提示" + center + :visible.sync="reClickTip" + width="50%"> + <span style="color: red">由于导出数据量大,请各监管单位导出数据时不要连续点击,导出按钮已限制30s内只允许点击一次。</span> + <span slot="footer" class="dialog-footer"> + <el-button @click="reClickTip = false">取 消</el-button> + <el-button type="primary" @click="reClickTip = false">确 定</el-button> + </span> + </el-dialog> + <personPurchaseDetail ref="person"></personPurchaseDetail> + <upload-dialog ref="upload" @refresh="refresh"></upload-dialog> + </div> +</template> + +<script> +import personPurchaseDetail from './personPurchaseDetail/index' +import { computePageCount } from "../../utils"; +import {exportPerson, getDLPersonListData, getPersonListData} from "../../api/productPurchaseSearch"; +import {getCityListData, getProvinceListData , } from "../../api/area"; +import uploadDialog from "./customerPhoto/index"; +import Cookies from "js-cookie"; + +export default { + name: "person", + data(){ + return{ + tableKey:'', + validTime:['',''], + reClickTip: false, + listQuery: { + pageSize:10, + pageIndex:1, + filter: { + starttime: '', + endtime: '', + identify: '', + enterprisename: '', + directioncode:'', + isNeedUploadPhoto:'', + nation:'' + }, + }, + Cookies:Cookies, + pageSize: 20, + recordTotal: 0, + currentPage: 1, + pageTotal: 0, + listLoading:false, + personPurchaseData:[], + previewList:[], + options: [ + { label: '全部', value: '' }, + { label: '是', value:1 }, + { label: '否', value: -1 } + ], + 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]); + } + }] + }, + } + }, + components:{ + personPurchaseDetail, + uploadDialog + }, + created() { + this.initValidTime() + this.getPersonProductList() + }, + watch: { + }, + methods:{ + async getPersonProductList(){ + this.listLoading = true + if( this.validTime !== null ){ + this.listQuery.filter.starttime = this.validTime[0] + this.listQuery.filter.endtime = this.validTime[1] + }else{ + this.listQuery.filter.starttime = '' + this.listQuery.filter.endtime = '' + } + let res = await getDLPersonListData(this.listQuery) + let data = JSON.parse(Base64.decode(res.data)) + if(data.code === "200"){ + this.recordTotal = data.result.total + this.pageSize = data.result.size + this.pageTotal = computePageCount(data.result.total, data.result.size) + this.currentPage = data.result.current + data.result.records.map(item => item.path = (item.path === undefined ? null : process.env.IMG_API + item.path)) + this.previewList = data.result.records.map(item => item.path).filter(item=>item !== null) + this.personPurchaseData = data.result.records + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + this.listLoading = false + }, + + showPurchaseDetail(val){ + this.$refs.person.openPersonPurchaseDetail(this.listQuery.filter.starttime,this.listQuery.filter.endtime,val.identify,val.companynumber,this.listQuery.filter.directioncode) + }, + showUploadDialogHandler(idCard) { + this.$refs.upload.showDialog(idCard) + }, + refresh(){ + this.getPersonProductList() + }, + + async exportToExcel(){ + this.reClickTip = true + if( this.validTime !== null ){ + this.listQuery.filter.starttime = this.validTime[0] + this.listQuery.filter.endtime = this.validTime[1] + }else{ + this.listQuery.filter.starttime = '' + this.listQuery.filter.endtime = '' + } + let res = await exportPerson(this.listQuery) + if(res.data.code === '200'){ + this.reClickTip = false + if(res.data.result === null ||res.data.result === [] || res.data.result.length === 0){ + this.$message({ + type:'warning', + message:'无数据可导出' + }) + }else{ + let allData = res.data.result + import('@/vendor/Export2Excel').then((excel) => { + const tHeader = [ + '地区', + '公司名称', + '购买人姓名', + '民族', + '购买人身份证', + '购买数量(挂、个)', + '退货数量(挂、个)', + '最近购买时间', + ] + // const filterVal = [ + // 'province', + // 'enterprisename', + // 'companynumber', + // 'name', + // 'identify', + // 'num', + // 'returnnum', + // 'saletime', + // ] + const data = allData.map(item =>{ + return [ + item.city, + item.enterprisename, + item.name, + item.nation, + item.identify, + item.num, + item.returnnum, + item.saletime, + ] + }) + excel.export_json_to_excel({ + header: tHeader, + data, + filename: '实名销售分析' + }) + }) + } + + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + }, + + formatJson(filterVal, jsonData) { + return jsonData.map(v => filterVal.map(j => v[j])) + }, + + reset(){ + this.listQuery= { + pageSize:10, + pageIndex:1, + filter: { + starttime: '', + endtime: '', + identify: '', + enterprisename: '', + directioncode:'', + isNeedUploadPhoto:'', + nation:'' + }, + } + this.validTime = ['', ''] + this.initValidTime() + this.getPersonProductList() + }, + + searchProductSearch(){ + this.listQuery.pageIndex = 1 + const date1 = new Date(this.validTime[0]); + const date2 = new Date(this.validTime[1]); + const differenceInMs = Math.abs(date2 - date1); + const differenceInDays = differenceInMs / (1000 * 60 * 60 * 24) + if(differenceInDays > 32){ + this.$message({ + type: 'warning', + message: '时间跨度超过一个月的,请联系管理员查询数据' + }) + return + } + this.getPersonProductList() + }, + + handleSizeChange(val) { + this.listQuery.pageSize = val + this.getPersonProductList() + }, + handleCurrentChange(val) { + this.listQuery.pageIndex = val + this.getPersonProductList() + }, + initValidTime(){ + const end = new Date(); + this.validTime[0] = end.toISOString().slice(0, 10) + " 00:00:00"; + this.validTime[1] = end.toISOString().slice(0, 10) + " 23:59:59"; + } + }, +} +</script> + +<style scoped> +.basic_search{ + display:inline-block; +} + +</style> -- Gitblit v1.9.2