Commit a64306eb authored by jiaorz's avatar jiaorz

1

parents 006672e5 09484cbc
<template>
<div id="app">
<router-view></router-view>
<keep-alive>
<router-view />
</keep-alive>
<!-- <router-view></router-view> -->
</div>
</template>
......
......@@ -112,7 +112,7 @@ export function jobs(obj) {
// 添加员工
export function addEditor(obj) {
return fetch({
url: '/api/admin/postion/admin/addUserPostion',
url: '/api/admin/postion/admin/updUserPostion',
method: 'post',
data: obj
});
......@@ -178,3 +178,66 @@ export function updUserChange(params) {
data: params
});
}
// 离职后在职
export function updAddPositionChangeRecord(params) {
return fetch({
url: 'api/admin/postion/admin/updAddPositionChangeRecord',
method: 'post',
data: params
});
}
// 信息修改
// export function updUserPostion(params) {
// return fetch({
// url: 'api/admin/postion/admin/updUserPostion',
// method: 'post',
// data: params
// });
// }
// 股东列表
export function stockholderList(query) {
return fetch({
url: 'api/admin/appShareholder/page',
method: 'post',
data: query
});
}
// 新增股东
export function addUserPostion(query) {
return fetch({
url: 'api/admin/appShareholder/addUserPostion',
method: 'post',
data: query
});
}
// 批量导入股东
export function exports(query) {
return fetch({
url: 'api/admin/appShareholder/export',
method: 'post',
data: query
});
}
// 编辑股东信息
export function updUserPostionEditor(query) {
return fetch({
url: 'api/admin/appShareholder/updUserPostion',
method: 'post',
data: query
});
}
// 股东信息变更记录
export function findShareholderChangeRecord(query) {
return fetch({
url: 'api/admin/appShareholder/findShareholderChangeRecord',
method: 'get',
params: query
});
}
\ No newline at end of file
......@@ -18,3 +18,23 @@ export function vehicleInfoExcel(params) {
responseType: 'blob'
});
}
//订单统计
export function received_statistics(params) {
return fetch({
url: 'api/order/admin/order/received_statistics',
method: 'post',
timeout:'50000',
data: params
});
}
// 订单统计导出
export function excelExport(query) {
return fetch({
url: 'api/order/admin/order/received_statistics/export',
method: 'post',
data: query,
responseType: 'blob'
});
}
\ No newline at end of file
......@@ -582,13 +582,13 @@ export const asyncRouterMap = [{
component: _import('appManagement/selectedActivities/index'),
name: '首页精选活动',
authority: 'selectedActivities'
},
{
path: 'pushManagement',
component: _import('appManagement/pushManagement/index'),
name: '消息推送',
authority: 'pushManagement'
}
// {
// path: 'pushManagement',
// component: _import('appManagement/pushManagement/index'),
// name: '消息推送',
// authority: 'pushManagement'
// }
]
},
{
......@@ -801,6 +801,12 @@ export const asyncRouterMap = [{
component: _import('interior/employeesInput'),
name: '员工录入',
authority: 'employeesInput'
},
{
path: 'shareholder',
component: _import('interior/shareholder'),
name: '股东列表',
authority: 'shareholder'
}
]
}
......
......@@ -399,6 +399,8 @@
const set = this.$refs;
set[formName].validate(valid => {
if (valid) {
console.log(this.form);
editObj(this.form).then(response => {
if (response.status === 200) {
this.bannerDialogVisible = false;
......
......@@ -53,13 +53,21 @@
<el-table-column prop="companyName" label="公司" align="center"></el-table-column>
<el-table-column prop="memberAmount" label="会员费" align="center"></el-table-column>
<el-table-column prop="rentVehilceAmount" label="租车费" align="center"></el-table-column>
<el-table-column prop="depositAmount" label="押金" align="center"></el-table-column>
<el-table-column prop="noDeductibleAmount" label="不计免赔费" align="center"></el-table-column>
<el-table-column prop="travelAmount" label="旅游费" align="center"></el-table-column>
<el-table-column prop="rentDays" label="租借天数" align="center"></el-table-column>
<!-- <el-table-column prop="extralAmount" label="其他费用" align="center"></el-table-column> -->
<el-table-column prop="departureNum" label="出车服务次数" align="center"></el-table-column>
<el-table-column prop="arrivalNum" label="收车服务次数" align="center"></el-table-column>
<el-table-column prop="lossSpecifiedAmount" label="定损金额" align="center"></el-table-column>
<el-table-column prop="lateFeeAmount" label="违约金额" align="center"></el-table-column>
<el-table-column label="押金" align="center">
<template scope="scope">
<span>{{ Math.round((scope.row.depositAmount+scope.row.depositRefundAmount)*100)/100}}</span>
</template>
</el-table-column>
<el-table-column prop="depositRefundAmount" label="已退押金" align="center"></el-table-column>
</el-table>
<el-pagination
......
<template>
<div class="app-container calendar-list-container">
<div class="filter-container">
<div class="filter-container" v-loading="loading">
<el-form ref="queryForm" :model="listQuery" label-width="100px">
<el-row>
<el-col :span="4">
<el-form-item label="姓名">
<el-input v-model.number="listQuery.name" placeholder="请输入姓名"></el-input>
<el-input v-model="listQuery.name" placeholder="请输入姓名"></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="手机号">
<el-input v-model.number="listQuery.phone" placeholder="请输入手机号"></el-input>
<el-input v-model="listQuery.phone" placeholder="请输入手机号"></el-input>
</el-form-item>
</el-col>
......@@ -28,10 +28,10 @@
</el-col>
<el-col :span="4">
<el-form-item label="身份">
<el-select class="filter-item" v-model="listQuery.status" placeholder="请选员工身份">
<el-select class="filter-item" v-model="listQuery.positionId" placeholder="请选员工身份">
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(item,index) in statusList "
v-for="(item,index) in statusList"
:key="index"
:label="item.name"
:value="item.id"
......@@ -68,7 +68,7 @@
<el-table-column prop="positionName" label="身份" align="center"></el-table-column>
<el-table-column label="状态" align="center">
<template scope="scope">
<span v-if="scope.row.status == 1" style="color:#20a0ff">离职</span>
<span v-if="scope.row.isQuit == 1" style="color:#20a0ff">离职</span>
<span v-else style="color:red">在职</span>
</template>
</el-table-column>
......@@ -103,10 +103,10 @@
<el-dialog :title="staffTitle" :visible.sync="bulkUploadMember" class="member" @close="closeAdd">
<el-form :model="staffTitleFrom" ref="userMembership" :rules="rules" label-width="100px">
<el-form-item label="员工姓名">
<el-input v-model.number="staffTitleFrom.name" placeholder="请输入姓名"></el-input>
<el-input v-model="staffTitleFrom.name" placeholder="请输入姓名"></el-input>
</el-form-item>
<el-form-item label="手机号">
<el-input v-model.number="staffTitleFrom.phone" placeholder="请输入手机号"></el-input>
<el-input v-model="staffTitleFrom.phone" placeholder="请输入手机号"></el-input>
</el-form-item>
<el-form-item label="入职日期" v-show="staffTitle == '新增员工'">
<el-date-picker
......@@ -147,7 +147,7 @@
<el-button type="text" v-show="whether == 2" @click="amend(3)">修改</el-button>
</el-form-item>
<el-form-item label="状态" v-show="whether == 2">
<el-input v-model="staffTitleFrom.status" disabled style="width:90%"></el-input>
<el-input v-model="staffTitleFrom.isQuit" disabled style="width:90%"></el-input>
<el-button type="text" @click="amend(5)">修改</el-button>
</el-form-item>
<el-form-item label="职位">
......@@ -177,7 +177,7 @@
</el-dialog>
<!--批量导入会员窗口-->
<el-dialog title="导入会员" :visible.sync="tolead">
<el-dialog title="导入员工" :visible.sync="tolead">
<el-form :model="fileForm">
<el-form-item label="上传文件" label-width="80px">
<el-button type="primary" icon="el-icon-download">
......@@ -223,7 +223,7 @@
</span>
<span>
<b>状态:</b>
{{staffInfo.info.status == 1?"离职":'在职'}}
{{staffInfo.info.isQuit == 1?"离职":'在职'}}
</span>
<span>
<b>当前所属分公司:</b>
......@@ -241,12 +241,14 @@
<p class="title" style="margin-top:20px">人事变动记录</p>
<p v-for="(item,index) in staffInfo.record" :key="index">
<b>{{item.relTime}}</b>
<span v-if="item.jobRemark == 1">入职</span>
<span v-if="item.jobRemark == 4">(人事调动) {{item.newCompanyName}} => {{item.oldCompanyName}}</span>
<span v-if="item.jobRemark == 2">(职位变更) {{item.newJobName}} => {{item.oldJobName}}</span>
<span v-if="item.jobRemark == 3">(身份变更) {{item.newPositionName}} => {{item.oldPositionName}}</span>
<span v-if="item.jobRemark == 5">离职</span>
<b v-show="!!item.jobRemark">{{item.relTime}}</b>
<span v-if="item.jobRemark == 1" v-show="!!item.relTime">入职</span>
<span v-else-if="item.jobRemark == 4">(人事调动) {{item.oldCompanyName}} => {{item.newCompanyName}}</span>
<span v-else-if="item.jobRemark == 2">(职位变更) {{item.oldJobName}} => {{item.newJobName}}</span>
<span v-else-if="item.jobRemark == 3">(身份变更) {{item.oldPositionName}} => {{item.newPositionName}}</span>
<span v-else-if="item.jobRemark == 5">离职</span>
<span v-else-if="item.jobRemark == 6">复职</span>
<!-- <span v-else></span> -->
</p>
</el-dialog>
<!-- 员工详情 E -->
......@@ -257,12 +259,12 @@
<div v-if="isShow == 4">
<el-form :model="amendCompany" ref="amendCompany" label-width="80px">
<el-form-item label="修改原因" style="width:80%">
<el-radio-group v-model="amendCompany.changeStatus" prop="changeStatus">
<el-radio-button label="3">人事调动</el-radio-button>
<el-radio-button label="2">信息修改</el-radio-button>
<el-radio-group v-model="amendStatus" prop="changeStatus">
<el-radio-button label="0">人事调动</el-radio-button>
<el-radio-button label="1">信息修改</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="调动日期" v-show="amendCompany.changeStatus == 3" prop="relTime">
<el-form-item label="调动日期" v-show="amendStatus == 0" prop="relTime">
<el-date-picker v-model="amendCompany.relTime" type="datetime" placeholder="选择日期时间"></el-date-picker>
</el-form-item>
<el-form-item label="分公司" prop="companyId">
......@@ -365,7 +367,8 @@ import {
jobs,
editorUpd,
findPositionChangeRecord,
updUserChange
updUserChange,
updAddPositionChangeRecord
} from 'src/api/admin/userManagement/index'
import { getToken } from 'src/utils/auth'
import { mapGetters } from 'vuex'
......@@ -401,11 +404,11 @@ export default {
position:{
relTime: null, //修改时间
jobId:null,//职位
},
loading:true,
amendStatus:0,//0人事调动 1信息修改
//修改分公司
amendCompany: {
changeStatus: 3,
companyId: null, //公司id
relTime: null //修改时间
},
......@@ -440,7 +443,7 @@ export default {
listQuery: {
name: '',
phone: '',
status: null,
positionId: null,
page: 1,
limit: 10,
companyId: '',
......@@ -483,7 +486,6 @@ export default {
this.amendContent = '修改所属公司'
this.isShow = val
this.amendCompany= {
changeStatus: 3,
companyId: null, //公司id
relTime: null //修改时间
}
......@@ -495,7 +497,7 @@ export default {
relTime:null,//变更日期
}
} else if (val == 5) {
this.amendContent = this.staffTitleFrom.status == '在职' ? '离职时间' : '入职时间'
this.amendContent = this.staffTitleFrom.isQuit == '在职' ? '离职时间' : '入职时间'
this.isShow = val
this.isJobForm={
relTime:null,//变更日期
......@@ -514,7 +516,7 @@ export default {
if (!this.amendCompany.companyId) {
this.$message('分公司不能为空')
return false
} else if (this.amendCompany.changeStatus == 3) {
} else if (this.amendStatus == 0) {
if (!this.amendCompany.relTime) {
this.$message('调动日期不能为空')
return false
......@@ -524,22 +526,38 @@ export default {
this.amendCompany.companyName = name[0].name
this.amendCompany.jobId = this.staffTitleFrom.jobId
this.amendCompany.positionId = this.staffTitleFrom.positionId
this.amendCompany.isDel = 0
this.amendCompany.changeStatus = 4
this.amendCompany.isQuit = this.staffTitleFrom.isQuit == '在职' ? 0 : 1
this.setApi(this.amendCompany)
}
} else {
//信息修改
let params = {};
let name = this.companyList.filter(item => item.id == this.amendCompany.companyId)
this.amendCompany.companyName = name[0].name
this.amendCompany.jobId = this.staffTitleFrom.jobId
this.amendCompany.positionId = this.staffTitleFrom.positionId
this.amendCompany.isDel = 0
this.setApi(this.amendCompany)
params.companyName = name[0].name
params.companyId = name[0].id
params.positionId = this.staffTitleFrom.positionId
params.name = this.staffTitleFrom.name
params.phone = this.staffTitleFrom.phone
params.id = this.staffTitleFrom.id
params.userId = this.staffTitleFrom.userId
editorUpd(params).then(data=>{
if (data.status == 200) {
this.$message.success('编辑成功')
this.amendPop = false;
this.bulkUploadMember = false
this.getList()
}else{
this.$message.error(data.message)
}
})
}
},
setApi(params){
params.phone = this.staffTitleFrom.phone
params.id = this.staffTitleFrom.id
params.name = this.staffTitleFrom.name
params.userId = this.staffTitleFrom.userId
updUserChange(params).then(data => {
if (data.status == 200) {
this.$message.success('编辑成功')
......@@ -553,7 +571,7 @@ export default {
},
//身份修改
amendIdentityBtn() {
this.amendIdentity.changeStatus = 2
this.amendIdentity.changeStatus = 3
if (!this.amendIdentity.positionId || !this.amendIdentity.relTime ) {
this.$message('身份和变更日期不能为空')
return false
......@@ -562,7 +580,7 @@ export default {
this.amendIdentity.companyName = this.staffTitleFrom.companyName
this.amendIdentity.jobId = this.staffTitleFrom.jobId
this.amendIdentity.companyId = this.staffTitleFrom.companyId
this.amendIdentity.isDel = 0
this.amendIdentity.isQuit = this.staffTitleFrom.isQuit == '在职' ? 0 : 1
this.setApi(this.amendIdentity)
}
......@@ -578,16 +596,44 @@ export default {
this.isJobForm.companyName = this.staffTitleFrom.companyName
this.isJobForm.positionId = this.staffTitleFrom.positionId
this.isJobForm.companyId = this.staffTitleFrom.companyId
this.isJobForm.isDel = 1
this.isJobForm.changeStatus = 2
this.isJobForm.isQuit = 1
this.isJobForm.changeStatus = 5
this.isJobForm.jobId = this.staffTitleFrom.jobId
if(val == '离职时间'){
this.setApi(this.isJobForm)
}else{//复职
// this.isJobForm.isQuit = 2
// this.isJobForm.changeStatus = 6
// this.setApi(this.isJobForm)
let params = {}
params.phone = this.staffTitleFrom.phone
params.relTime = formatDate(new Date(this.isJobForm.relTime), 'yyyy-MM-dd hh:mm:ss')
params.id = this.staffTitleFrom.id
params.companyName = this.staffTitleFrom.companyName
params.positionId = this.staffTitleFrom.positionId
params.companyId = this.staffTitleFrom.companyId
params.isQuit = 0
params.changeStatus = 6
params.jobId = this.staffTitleFrom.jobId
params.name = this.staffTitleFrom.name
params.userId = this.staffTitleFrom.userId
updAddPositionChangeRecord(params).then(data=>{
if (data.status == 200) {
this.$message.success('编辑成功')
this.amendPop = false;
this.bulkUploadMember = false
this.getList()
}else{
this.$message.error(data.message)
}
})
}
}
},
//职位变更
positionBtn(){
if(!this.position.jobId || !this.position.relTime){
this.$message('日期不能为空')
this.$message('身份和变更日期不能为空')
return false
}else{
this.position.changeStatus = 2
......@@ -595,7 +641,7 @@ export default {
this.position.companyName = this.staffTitleFrom.companyName
this.position.positionId = this.staffTitleFrom.positionId
this.position.companyId = this.staffTitleFrom.companyId
this.position.isDel = 0
this.position.isQuit = this.staffTitleFrom.isQuit == '在职' ? 0 : 1
this.setApi(this.position)
}
},
......@@ -720,6 +766,7 @@ export default {
},
//员工列表
getList() {
this.loading = true
staffList(this.listQuery).then(data => {
this.listLoading = true
if (data.status == 200) {
......@@ -728,6 +775,9 @@ export default {
this.listLoading = false
}
})
setTimeout(() => {
this.loading = false
}, 300);
},
handleSizeChange(val) {
this.listQuery.limit = val
......@@ -765,7 +815,7 @@ export default {
this.listQuery = {
name: '',
phone: '',
status: null,
positionId: null,
page: 1,
limit: 10,
companyId: '',
......@@ -803,26 +853,29 @@ export default {
companyName: row.companyName,
relTime: row.relTime,
id:row.id,
jobId:row.jobId,
status: row.status == 1 ? '离职' : '在职'
userId:row.userId,
jobId:row.jobId ==0 ? null : row.jobId,
isQuit: row.isQuit == 1 ? '离职' : '在职'
}
},
//员工详情
infoStaff(row) {
this.infoPop = true
this.staffInfo.info = row
console.log(row.phone)
findPositionChangeRecord({ phone: row.phone }).then(data => {
findPositionChangeRecord({ id: row.id }).then(data => {
if(data.status == 200){
this.staffInfo.record = data.data
}
})
},
//确定
confirm(formName) {
if (!!this.staffTitleFrom.relTime) this.staffTitleFrom.relTime = formatDate(this.staffTitleFrom.relTime,'yyyy-MM-dd hh:mm:ss')
if (this.staffTitle == '新增员工') {
if(!this.staffTitleFrom.jobId){
this.$message('职位不能为空')
}else{
if (!!this.staffTitleFrom.relTime) this.staffTitleFrom.relTime = formatDate(new Date(this.staffTitleFrom.relTime),'yyyy-MM-dd hh:mm:ss')
addEditor(this.staffTitleFrom).then(data => {
if (data.status == 200) {
this.$notify({
......@@ -842,8 +895,10 @@ export default {
})
}
})
}
} else {
this.staffTitleFrom.id = this.activeId
delete this.staffTitleFrom.isQuit
editorUpd(this.staffTitleFrom).then(data => {
if (data.status == 200) {
this.$notify({
......@@ -876,7 +931,7 @@ export default {
},
jobsFn() {
jobs().then(data => {
//console.log(data);
// console.log(data);
if (data.status == 200) {
this.jobsList = data.data
}
......
<template>
<div class="app-container calendar-list-container">
<div class="filter-container" v-loading="loading">
<el-form ref="queryForm" :model="listQuery" label-width="100px">
<el-row>
<el-col :span="4">
<el-form-item label="姓名">
<el-input v-model="listQuery.name" placeholder="请输入股东姓名"></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="手机号">
<el-input v-model="listQuery.phone" placeholder="请输入手机号"></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="分公司">
<el-select v-model="listQuery.companyId" clearable filterable placeholder="请选择">
<el-option v-for="item in companyList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="身份">
<el-select class="filter-item" v-model="listQuery.positionId" placeholder="请选员工身份">
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(item,index) in statusList"
:key="index"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-button class="filter-item" type="primary" v-waves icon="search" @click="handleFilter">搜索</el-button>
<el-button class="filter-item" type="primary" @click="cleaningQuery">清除搜索条件</el-button>
<el-button class="filter-item" type="primary" v-waves icon="search" @click="addData">新增股东</el-button>
<el-button class="filter-item" type="primary" @click="toLoad">批量导入股东</el-button>
</el-form>
<!--批量导入会员窗口-->
<el-dialog title="导入股东" :visible.sync="tolead">
<el-form :model="fileForm">
<el-form-item label="上传文件" label-width="80px">
<el-button type="primary" icon="el-icon-download" @click="download">
下载模板
<!-- <a class="el-icon-download" href="https://mgmt.dfangche.com/axshare/gudongdaoru.xlsx">下载模板</a> -->
</el-button>
<el-upload
ref="uploadExcel"
:limit="limitNum"
action
:headers="getHeaderWithToken"
accept=".xlsx"
:http-request="upLoad"
:on-remove="handleRemove"
:before-remove="beforeRemove"
:before-upload="beforeUploadFile"
:on-change="fileChange"
:on-exceed="exceedFile"
:file-list="fileList"
>
<el-button size="small" type="primary" icon="el-icon-edit">
上传文件
<i class="el-icon-upload el-icon--right"></i>
</el-button>
<div slot="tip" class="el-upload__tip">只能上传xlsx(Excel2007以上版本)文件,且不超过10M</div>
</el-upload>
<el-button size="small" class="filter-item" type="primary" @click="cancelNotDeleteForm">取消</el-button>
</el-form-item>
</el-form>
</el-dialog>
<!-- 提示 -->
<el-dialog title="上传提示" :visible.sync="uploadHiut">
<p>
上传成功:
<b>{{uploadListHiut.success}}</b>条,上传失败:
<b>{{uploadListHiut.error}}</b>条,重复:
<b>{{uploadListHiut.exist}}</b>
</p>
<ul class="defeated">
<li v-for="(item,index) in uploadListHiut.uploadList" :key="index">
<p>
失败行数:
<span>{{item.num}}</span>,失败原因:
<span>{{item.msg}}</span>
</p>
</li>
</ul>
</el-dialog>
<!-- 新增 || 编辑股东 -->
<el-dialog :title="addPopTitle" :visible.sync="addPop" class="member" @close="closeAdd">
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
label-width="100px"
class="demo-ruleForm"
>
<el-form-item label="姓名">
<el-input v-model="ruleForm.name" placeholder="请输入股东姓名"></el-input>
</el-form-item>
<el-form-item label="手机号">
<el-input v-model="ruleForm.phone" placeholder="请输入股东手机号"></el-input>
</el-form-item>
<el-form-item label="入股日期" v-show="addPopTitle == '新增'">
<el-date-picker v-model="time" type="date" placeholder="选择日期" style="width:100%"></el-date-picker>
</el-form-item>
<el-form-item label="入股公司">
<el-select v-model="ruleForm.companyList" filterable multiple placeholder="请选择" style="width:100%">
<el-option v-for="item in companyList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="状态" v-show="addPopTitle == '编辑'">
<el-input :placeholder="ruleForm.isQuit == 0 ? '持股中' : '已退股'" style="width:90%" disabled></el-input>
<el-button type="text" @click="amend">修改</el-button>
</el-form-item>
<el-row style="text-align:center">
<el-button type="primary" @click="submitBtn">确定</el-button>
<el-button type="primary" @click="addPop = false">取消</el-button>
</el-row>
</el-form>
</el-dialog>
<el-dialog :title="ruleForm.isQuit == 1 ? '入股时间' : '退股时间'" :visible.sync="sharePop" class="member" @close="closeShare">
<el-date-picker
v-model="times"
type="date"
:placeholder="ruleForm.isQuit == 1 ? '请选择入股时间' : '请选择退股时间'"
style="width:100%"
></el-date-picker>
<el-row style="text-align:center;margin-top:20px">
<el-button type="primary" @click="shareBtn">确定</el-button>
<el-button type="primary" @click="sharePop = false">取消</el-button>
</el-row>
</el-dialog>
<!-- 表格数据 -->
<el-table :key="tableKey" :data="list" border fit highlight-current-row style="width: 100%">
<el-table-column label="序号" align="center" width="70">
<template scope="scope">
<span>{{scope.$index+(listQuery.page - 1) * listQuery.limit + 1}}</span>
</template>
</el-table-column>
<el-table-column prop="name" label="姓名" width="180" align="center"></el-table-column>
<el-table-column prop="phone" label="手机号" align="center"></el-table-column>
<el-table-column prop="companyName" label="入股公司" align="center"></el-table-column>
<el-table-column prop="positionName" label="身份" align="center"></el-table-column>
<el-table-column prop="isQuit" label="状态" align="center">
<template scope="scope">
<span>{{scope.row.isQuit == 0 ? '持股中' :'已退股'}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="操作" fixed="right">
<template scope="scope">
<el-button
size="small"
class="el-button el-button--text el-button--small"
@click="infoStaff(scope.row)"
>详情</el-button>
<el-button
size="small"
class="el-button el-button--text el-button--small"
@click="editorStaff(scope.row)"
>编辑</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="listQuery.page"
:page-sizes="[10,20,30, 50]"
:page-size="listQuery.limit"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
style="margin-top:20px"
></el-pagination>
<!-- 股东详情 S -->
<el-dialog title="股东信息详情" :visible.sync="infoPop" class="member">
<p class="title">基础信息</p>
<p class="staff-info">
<span>
<b>姓名:</b>
{{staffInfo.info.name}}
</span>
<span>
<b>手机号:</b>
{{staffInfo.info.phone}}
</span>
<span>
<b>状态:</b>
{{staffInfo.info.isQuit == 1?"已退股":'持股中'}}
</span>
<span>
<b>入股公司:</b>
{{staffInfo.info.companyName}}
</span>
</p>
<p class="title" style="margin-top:20px">股权变动</p>
<p v-for="(item,index) in staffInfo.record" :key="index">
<b>{{item.relTime}}</b>
<span style="margin-left:10px">{{item.isQuit == 0 ? '(入股)' : "(退股)"}}</span>
<span>{{item.companyName}}</span>
</p>
</el-dialog>
<!-- 股东详情 E -->
</div>
</div>
</template>
<script>
import { getAll } from 'api/base_info/branch_company'
import { getrewardSetting } from 'api/purseManage'
import { getToken } from 'src/utils/auth'
import {
stockholderList,
addUserPostion,
exports,
updUserPostionEditor,
findShareholderChangeRecord
} from 'src/api/admin/userManagement/index'
import { formatDate } from 'utils/dateFormattor'
export default {
created() {
this.getList()
this.getAllFn()
this.getRank()
},
computed: {
getHeaderWithToken() {
return { Authorization: getToken() }
}
},
data() {
return {
times:null,
infoPop: false,
time: null,
sharePop: false,
shareTitle: 1,
BASE_API: process.env.BASE_API,
tableKey: 0,
total: null,
list: [],
ruleForm: {
name: null,
phone: null,
companyList: [],
relTime: null,
isQuit: 0
},
rules: {},
addPopTitle: '新增',
addPop: false,
uploadListHiut: {
uploadList: [],
success: '',
error: '',
exist:''
},
uploadHiut: false,
limitNum: 1,
fileList: [],
tolead: false, //批量导入
loading: false,
companyList: [], //分公司
statusList: [], //身份
listQuery: {
name: null,
phone: null,
companyId: null,
positionId: null,
page: 1,
limit: 10
},
fileForm: {
file: ''
},
staffInfo: {
info: {},
record: []
}
}
},
methods: {
closeShare(){
this.times = null
},
//下载模板
download() {
window.location.href =
'https://mgmt.dfangche.com/axshare/gudongdaoru.xlsx'
},
closeAdd() {
this.time = null
this.ruleForm = {
name: null,
phone: null,
companyList: [],
relTime: null
}
},
//入股 退股时间
shareBtn() {
this.ruleForm.isQuit == 1 ? this.ruleForm.changeState = 3 : this.ruleForm.changeState = 2
this.ruleForm.relTime = formatDate(this.times, 'yyyy-MM-dd') + ' 00:00:00'
updUserPostionEditor(this.ruleForm).then(data=>{
if (data.status == 200) {
this.$message.success('编辑成功')
this.addPop = false
this.sharePop = false
this.getList()
}else{
this.$message(data.message)
}
})
},
//详情
infoStaff(row) {
this.infoPop = true
this.staffInfo.info = row
findShareholderChangeRecord({id:row.id,phone:row.phone}).then(data=>{
if (data.status == 200) {
this.staffInfo.record = data.data
}
})
},
//编辑
editorStaff(row) {
this.addPopTitle = '编辑'
this.$nextTick(()=>{
this.ruleForm = {
name: row.name,
phone: row.phone,
isQuit:row.isQuit,
companyList: row.companyIdArray.split(',').map(Number),
// companyList:['1,1'],
id:row.id
}
this.addPop = true
})
},
//新增,编辑
submitBtn() {
if (this.addPopTitle == '新增') {
if (
!this.ruleForm.name ||
!this.ruleForm.phone ||
!this.ruleForm.companyList ||
!this.time
) {
this.$message('必填项不能为空')
} else {
this.ruleForm.relTime =
formatDate(this.time, 'yyyy-MM-dd') + ' 00:00:00'
addUserPostion(this.ruleForm).then(data => {
if (data.status == 200) {
this.$message.success('新增成功')
this.addPop = false
this.getList()
} else {
this.$message.error(data.message)
}
})
}
} else {
if (
!this.ruleForm.name ||
!this.ruleForm.phone ||
!this.ruleForm.companyList
) {
this.$message('必填项不能为空')
}else{
this.ruleForm.changeState =1
updUserPostionEditor(this.ruleForm).then(data=>{
if (data.status == 200) {
this.$message.success('编辑成功')
this.addPop = false
this.getList()
}else{
this.$message(data.message)
}
})
}
}
},
handleSizeChange(val) {
this.listQuery.limit = val
this.getList()
},
handleCurrentChange(val) {
this.listQuery.page = val
this.getList()
},
//修改分公司
amend() {
this.sharePop = true
},
//新增股东
addData() {
this.addPopTitle = '新增'
this.addPop = true
},
//分公司
getAllFn() {
getAll().then(data => {
if (data.status == 200) {
this.companyList = data.data
this.companyList.unshift({ name: '全部', id: '' })
}
})
},
//搜索
handleFilter() {
this.listQuery.page = 1
this.getList()
},
//清空搜索
cleaningQuery() {
this.listQuery = {
name: null,
phone: null,
companyId: null,
positionId: null,
page: 1,
limit: 10
}
this.getList()
},
getList() {
this.loading = true
stockholderList(this.listQuery).then(data => {
if (data.status == 200) {
this.list = data.data.data
this.total = data.data.totalCount
}
setTimeout(() => {
this.loading = false
}, 300)
})
},
//获取身份
getRank() {
getrewardSetting().then(data => {
if (data.status == 200) {
this.statusList = data.data
}
})
},
upLoad(file) {
var form = new FormData()
// 文件对象
form.append('file', file.file)
exports(form).then(res => {
this.uploadHiut = true
;(this.uploadListHiut = {
uploadList: res.data.data,
success: res.data.success,
error: res.data.error,
exist: res.data.exist
}),
this.getList()
})
},
// 文件超出个数限制时的钩子
exceedFile(files, fileList) {
this.$notify.warning({
title: '警告',
message: `只能选择 ${
this.limitNum
} 个文件,当前共选择了 ${files.length + fileList.length} 个`
})
},
cancelNotDeleteForm() {
this.tolead = false
this.$refs.uploadExcel.clearFiles()
},
//批量导入员工
toLoad() {
this.tolead = true
},
fileChange(file, fileList) {
//console.log("change");
//console.log(file);
this.fileForm.file = file.raw
//console.log(this.fileForm.file);
// console.log(fileList);
},
//excel上传
handleRemove(file, fileList) {
//console.log(file, fileList);
},
handlePreview(file) {
//console.log(file);
},
beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${file.name}?`)
},
// 上传文件之前的钩子, 参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传
beforeUploadFile(file) {
//console.log("before upload");
//console.log(file);
let extension = file.name.substring(file.name.lastIndexOf('.') + 1)
let size = file.size / 1024 / 1024
if (extension !== 'xlsx') {
this.$notify.warning({
title: '警告',
message: `只能上传Excel 2007以上版本(即后缀是.xlsx)的文件`
})
}
if (size > 10) {
this.$notify.warning({
title: '警告',
message: `文件大小不得超过10M`
})
}
}
}
}
</script>
<style>
.title {
color: #666;
border-bottom: 1px solid #d9d9d9;
padding-bottom: 10px;
}
.staff-info span {
display: inline-block;
margin: 10px 20px 0 0;
}
.member .el-dialog--small {
width: 500px;
}
.defeated {
padding: 0;
}
.defeated li {
list-style: none;
}
</style>
\ No newline at end of file
......@@ -253,7 +253,9 @@
<el-row>
<el-col :span="6">
<el-form-item label="注册终端:">
<span>{{userDetails.channel == 1 ? 'app' : '小程序'}}</span>
<span v-if="userDetails.channel == 1">安卓</span>
<span v-else-if="userDetails.channel == 2">小程序</span>
<span v-else-if="userDetails.channel == 3">ios</span>
</el-form-item>
</el-col>
<el-col :span="8">
......
<template>
<ve-line :data="chartData"></ve-line>
<div class="app-container calendar-list-container">
<div class="filter-container" v-loading="loading">
<el-form ref="listQuery" :model="listQuery" label-width="100px" :inline="true">
<el-row>
<el-form-item label="时间">
<!-- <el-date-picker
v-model="time"
placeholder="请选择时间"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>-->
<el-date-picker
v-model="time"
type="daterange"
placeholder="请选择时间范围"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
@change="changeTime"
></el-date-picker>
</el-form-item>
<el-form-item label="统计周期">
<el-radio-group v-model="listQuery.statisticalWay">
<el-radio-button :label="1"></el-radio-button>
<el-radio-button :label="2"></el-radio-button>
<el-radio-button :label="3"></el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="订单状态">
<el-select v-model="listQuery.orderState" clearable placeholder="请选择">
<!-- <el-option :value='null'>全部</el-option> -->
<el-option v-for="item in orderArr" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="订单来源">
<el-select v-model="listQuery.orderOrigin" clearable placeholder="请选择">
<el-option label="全部" :value="null"></el-option>
<el-option v-for="item in orderOriginArr" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="支付方式">
<el-select v-model="listQuery.payWay" clearable placeholder="请选择">
<el-option label="全部" :value="null"></el-option>
<el-option v-for="item in payWayArr" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<p style="border-top:1px solid #d9d9d9;padding:30px 0 10px 0">统计项目</p>
<div style="margin-bottom:20px">
<el-checkbox-group v-model="listQuery.statisticalSigns">
<span v-for="(item,index) in checkArr" :key="index" class="checkStyle">
<el-checkbox :label="item.id">{{item.name}}</el-checkbox>
<p v-show="item.id== 'ad_oavga' || item.id== 'ce_tavga' || item.id== 'bd_rvavga'"></p>
</span>
</el-checkbox-group>
</div>
<el-button type="primary" @click="search">搜索</el-button>
<el-button type="primary" @click="clearSearch">清空搜索</el-button>
<el-button type="primary" :loading="excelLoading" @click="downloadExcel">导出报表</el-button>
</el-row>
</el-form>
<div v-for="(item,index) in chartArr" :key="index">
<p style="text-align:center">{{checkArr.filter(val => val.id == item.title)[0].name}}</p>
<ve-line
:data="item"
:extend="extend"
:settings="chartSettings"
:legend-visible="false"
:data-zoom="dataZoom"
></ve-line>
</div>
</div>
</div>
</template>
<script>
export default {
data: function () {
import {
received_statistics,
excelExport
} from 'api/statistics/vehicleStatistics'
import { formatDate } from 'utils/dateFormattor'
import { objDeepCopy } from '../../utils'
export default {
data: function() {
this.extend = {
// 'xAxis.0.axisLabel.rotate': 45
}
this.dataZoom = [
{
type: 'slider',
start: 0,
end: 30
}
]
this.chartSettings = {
labelMap: {
orderAmount: '金额',
orderNum: '订单量'
}
}
return {
excelLoading: false,
loading: true,
time: null,
checkArr: [
{ name: '订单总额 ', id: 'aa_ota' },
{ name: '订单量 ', id: 'ab_otq' },
{ name: '订单平均量 ', id: 'ac_oavgq' },
{ name: '订单平均金额 ', id: 'ad_oavga' },
{ name: '租车订单总额 ', id: 'ba_rvta' },
{ name: '租车订单量', id: 'bb_rvtq' },
{ name: '租车订单平均量 ', id: 'bc_rvavgq' },
{ name: '租车平均金额 ', id: 'bd_rvavga' },
{ name: '旅游订单总额', id: 'ca_tta' },
{ name: '旅游订单量 ', id: 'cb_ttq' },
{ name: '旅游订单平均量 ', id: 'cd_tavgq' },
{ name: '旅游平均金额 ', id: 'ce_tavga' },
{ name: '会员订单总额 ', id: 'da_mta' },
{ name: '普通会员订单总额 ', id: 'db_cmta' },
{ name: '普通会员订单量 ', id: 'dc_cmtq' },
{ name: '黄金会员订单总额 ', id: 'dd_gmta' },
{ name: '黄金会员订单量 ', id: 'de_mgtq' },
{ name: '钻石会员订单总额 ', id: 'df_dmta' },
{ name: '钻石会员订单量 ', id: 'dg_dmtq' },
{ name: '会员平均金额 ', id: 'dh_mavga' },
],
//快捷筛选
listQuery: {
startDate: null, //开始时间
endDate: null, //结束时间
page: 1, //当前页
limit: 10, //每页条数
statisticalWay: 1, //统计方式
orderState: '', //订单状态
orderOrigin: null, //来源
payWay: null, //支付方式
statisticalSigns: ['aa_ota'] //筛选
},
//订单状态
orderArr: [
{
name: '全部',
id: ''
},
{
name: '未支付',
id: 0
},
{
name: '已支付',
id: 1
}
],
//订单来源
orderOriginArr: [
{
name: 'APP',
id: 1
},
{
name: '小程序',
id: 2
},
{
name: '后台',
id: 3
}
],
//支付方式
payWayArr: [
{
name: '微信公众号支付',
id: 1
},
{
name: '支付宝即时到账',
id: 2
}
],
chartData: {
columns: ['日期', '访问用户', '下单用户', '下单率'],
rows: [
{ '日期': '1/0', '访问用户': 1393, '下单用户': 1093, '下单率': 0.32 },
{ '日期': '1/1', '访问用户': 1393, '下单用户': 1093, '下单率': 0.32 },
{ '日期': '1/2', '访问用户': 3530, '下单用户': 3230, '下单率': 0.26 },
{ '日期': '1/3', '访问用户': 2923, '下单用户': 2623, '下单率': 0.76 },
{ '日期': '1/4', '访问用户': 1723, '下单用户': 1423, '下单率': 0.49 },
{ '日期': '1/5', '访问用户': 3792, '下单用户': 3492, '下单率': 0.323 },
{ '日期': '1/6', '访问用户': 4593, '下单用户': 4293, '下单率': 0.78 }
]
columns: ['dateStr', 'orderAmount'],
rows: []
},
chartArr: {}
}
},
created() {
this.getList()
},
methods: {
//时间关闭
changeTime(val) {
if (!val) {
this.time = null
this.listQuery.endDate = null
this.listQuery.startDate = null
}
},
//导出
downloadExcel() {
this.excelLoading = true
var u = navigator.userAgent,
app = navigator.appVersion
excelExport(this.listQuery, { responseType: 'arraybuffer' }).then(
res => {
const content = res
const blob = new Blob([content], {
type: 'application/vnd.ms-excel'
})
const fileName = '订单统计.xlsx'
if (u.indexOf('Edge') > -1) {
window.navigator.msSaveBlob(blob, fileName)
} else {
const elink = document.createElement('a')
elink.download = fileName
elink.style.display = 'none'
elink.href = URL.createObjectURL(blob)
document.body.appendChild(elink)
elink.click()
URL.revokeObjectURL(elink.href) // 释放URL 对象
document.body.removeChild(elink)
}
this.excelLoading = false
}
)
},
//搜索
search() {
if (!!this.time && !!this.time[0]) {
this.listQuery.startDate =
formatDate(new Date(this.time[0]), 'yyyy-MM-dd') +
' 00:00:00'
this.listQuery.endDate =
formatDate(new Date(this.time[1]), 'yyyy-MM-dd') +
' 23:59:59'
}
this.getList()
},
//清空搜索
clearSearch() {
this.listQuery = {
startDate: null, //开始时间
endDate: null, //结束时间
page: 1, //当前页
limit: 10, //每页条数
statisticalWay: 1, //统计方式
orderState: '', //订单状态
orderOrigin: null, //来源
payWay: null, //支付方式
statisticalSigns: ['aa_ota'] //筛选
}
this.time = null
this.getList()
},
getList() {
this.loading = true
received_statistics(this.listQuery).then(data => {
if (data.status == 200) {
let info = data.data
let params = {}
let choose = this.listQuery.statisticalSigns
let way = this.listQuery.statisticalWay
var x
var y
let dateIndex = way == 1 ? 2 : way == 2 ? 1 : 1
let orderIndex = way == 1 ? 3 : way == 2 ? 2 : 2
for (let i = 0; i < choose.length; i++) {
if (info[choose[i]] != '') {
params[choose[i]] = {
columns: [
Object.keys(info[choose[i]][0])[dateIndex], //年费
Object.keys(info[choose[i]][0])[orderIndex] //金额
],
rows: info[choose[i]].sort(function(a, b) {
if (way === 1) {
x = a.date
y = b.date
}
if (way === 2) {
x = a.weekOfYear
y = b.weekOfYear
}
if (way === 3) {
x = a.month
y = b.month
}
return x < y ? -1 : x > y ? 1 : 0
}),
title: choose[i]
}
}
}
this.chartArr = params
}
setTimeout(() => {
this.loading = false
}, 300)
})
}
}
}
</script>
<style scoped>
.checkStyle {
margin-right: 30px;
/* display: inline-block; */
line-height: 40px;
}
</style>
\ No newline at end of file
......@@ -92,7 +92,9 @@
</el-table-column>
<el-table-column width="110" align="center" label="注册终端">
<template scope="scope">
<span>{{scope.row.channel}}</span>
<span v-if="scope.row.channel == 1">安卓</span>
<span v-else-if="scope.row.channel == 2">小程序</span>
<span v-else-if="scope.row.channel == 3">ios</span>
</template>
</el-table-column>
<el-table-column width="90" align="center" label="来源">
......@@ -148,9 +150,9 @@
<el-button size="small" class="el-button el-button--text el-button--small" @click="viewDetails(scope.row)">
查看详情
</el-button>
<el-button size="small" class="el-button el-button--text el-button--small" v-if="admin_btn_user_postion_put"
<!-- <el-button size="small" class="el-button el-button--text el-button--small" v-if="admin_btn_user_postion_put"
@click="peopleSetting(scope.row)">身份设置
</el-button>
</el-button> -->
<el-button class="el-button el-button--text el-button--small" v-if="scope.row.status!=1&&userList_btn_edit"
size="small" @click=" setMember(scope.row)">设置会员信息
</el-button>
......@@ -226,7 +228,9 @@
<el-row>
<el-col :span="6">
<el-form-item label="注册终端:">
<span>{{userDetails.channel == 1 ? 'app' : '小程序'}}</span>
<span v-if="userDetails.channel == 1">安卓</span>
<span v-else-if="userDetails.channel == 2">小程序</span>
<span v-else-if="userDetails.channel == 3">ios</span>
</el-form-item>
</el-col>
<el-col :span="8">
......@@ -1127,7 +1131,7 @@
listKey.lastTime = listKey.lastTime ? timestamp2Date(listKey.lastTime) : '';
listKey.createTime = listKey.createTime ? timestamp2Date(listKey.createTime * 1000) : '';
listKey.buyCount = listKey.buyCount ? listKey.buyCount : 0;
listKey.channel = this.terminal[listKey.channel];
// listKey.channel = this.terminal[listKey.channel];
listKey.source = this.source[listKey.source];
listKey.validTime = listKey.validTime ? ((listKey.validTime == 0) ? '永久' : listKey.validTime) : '无';
listKey.visible2 = false
......
......@@ -681,6 +681,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="交强险单号" prop="strongInsuranceNo">
<el-input v-model.number="form.strongInsuranceNo" placeholder="请输入交强险单号"></el-input>
<el-input v-model.text="form.strongInsuranceNo" @input="handleInput" placeholder="请输入交强险单号"></el-input>
</el-form-item>
</el-col>
......@@ -1094,6 +1095,7 @@ export default {
strongInsuranceCompany: undefined,
strongInsuranceEndDate: undefined,
strongInsuranceNo: undefined,
strongInsuranceCompany: undefined
strongInsuranceCompany: undefined,
insurancePDF:undefined
},
......@@ -1862,6 +1864,7 @@ export default {
}
},
methods: {
handleInput(e){
this.form.strongInsuranceNo=e.target.value.replace(/[^\d]/g,'');
},
......@@ -2455,6 +2458,7 @@ export default {
},
beforeAvatarUpload(file) {
const isJPG =
file.type === 'image/jpeg' || file.type === 'image/gif'
file.type === 'image/jpeg' || file.type === 'image/gif' || file.type === 'image/pdf'
const isLt2M = file.size / 1024 / 1024 < 10
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment