Files
juipvue/src/components/user/index.vue
2020-11-14 18:14:03 +08:00

342 lines
13 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div v-loading="loading">
<div class="heior_box">
<el-button size="small" type="primary" icon="el-icon-plus" @click="add">添加会员</el-button>
<el-button size="small" type="primary" icon="el-icon-sold-out" @click="dataExport" v-if="$local.isRoot()">导出</el-button>
<div class="search-box">
<el-input v-model="searchModel.keyWord" placeholder="请输入会员号/名称" clearable size="small">
<el-button slot="append" icon="el-icon-search" @click="search"></el-button>
</el-input>
</div>
</div>
<el-table :data="retData.Data" size="medium" :height="$getHeight(100)" row-key="Id" border>
<!-- <el-table-column prop="LoginCode" label="会员号" width="120px"></el-table-column> -->
<!-- <el-table-column prop="Name" label="名称"></el-table-column> -->
<el-table-column prop="LoginCode" label="会员号" width="120px">
<template slot-scope="scope">
<phoneHide :text="scope.row.LoginCode"></phoneHide>
</template>
</el-table-column>
<el-table-column prop="CreateTime" label="注册时间" width="160px"></el-table-column>
<el-table-column prop="CreateType" label="注册方式" :formatter="formatterCreateType"></el-table-column>
<!-- <el-table-column prop="ProductAccountCount" label="账号总数"></el-table-column>
<el-table-column prop="ExpiredProductAccountCount" label="过期数"></el-table-column>
<el-table-column prop="ExpiredProductAccountCount" label="未过期数"></el-table-column>-->
<!-- <el-table-column prop="ConsumeAmount" label="消费总额"></el-table-column> -->
<el-table-column prop="RestAmount" label="余额"></el-table-column>
<el-table-column prop="RestAmount" label="测试限额/领用数">
<template slot-scope="scope">
{{scope.row.TestCountLimit==0?'3':scope.row.TestCountLimit}}/{{scope.row.UseTestCount==0?'--':scope.row.UseTestCount}}
</template>
</el-table-column>
<el-table-column prop="ManagerName" label="客户经理"></el-table-column>
<el-table-column label="操作" width="400px">
<template slot-scope="scope">
<span class="handel cursor edit" @click="showUpdateTest(scope.row)">设置测试</span>
<span class="handel cursor edit" @click="showAmount(scope.row,1)" v-if="IsRoot">充值</span>
<span class="handel cursor edit" @click="showAmount(scope.row,2)">扣款</span>
<router-link :to="{name:'account',query:{userId:scope.row.Id}}">
<span class="handel cursor edit">账号</span>
</router-link>
<router-link :to="{name:'userprice',query:{id:scope.row.Id}}">
<span class="handel cursor edit">会员价</span>
</router-link>
<span class="handel cursor edit" @click="edit(scope.row)">编辑</span>
<span class="handel cursor edit" @click="showAmountDetail(scope.row)">明细</span>
<el-popover @show="showHandle(scope.row)" placement="bottom" trigger="hover" width="180">
<div class="popover_box">
<span>QQ号{{scope.row.QQ||'--'}}</span>
<span>微信{{scope.row.Wx||'--'}}</span>
<span>淘宝{{scope.row.TaoBao||'--'}}</span>
<span>邮箱:{{scope.row.Email||'--'}}</span>
</div>
<span class="handel cursor more" slot="reference">更多</span>
</el-popover>
</template>
</el-table-column>
</el-table>
<div class="block">
<el-pagination
v-if="retData.Data.length>0"
@current-change="get"
:page-size="50"
:current-page.sync="searchModel.PageIndex"
layout="total,prev, pager, next"
:total="retData.TotalCount"
></el-pagination>
</div>
<el-dialog title="会员维护" :visible.sync="showDialog" width="400px">
<el-form :model="userModel" :rules="rules" ref="inputUserForm" label-width="80px">
<el-form-item prop="LoginCode" label="登录名称">
<el-input v-model="userModel.LoginCode" :disabled="optype==2" size="small"></el-input>
</el-form-item>
<el-form-item prop="Password" label="密码">
<el-input v-model="userModel.Password" show-password size="small"></el-input>
</el-form-item>
<el-form-item prop="Phone" label="手机号">
<el-input v-model="userModel.Phone" size="small"></el-input>
</el-form-item>
<el-form-item prop="QQ" label="QQ号">
<el-input v-model="userModel.QQ" size="small"></el-input>
</el-form-item>
<el-form-item prop="Wx" label="微信">
<el-input v-model="userModel.Wx" size="small"></el-input>
</el-form-item>
<el-form-item prop="TaoBao" label="淘宝">
<el-input v-model="userModel.TaoBao" size="small"></el-input>
</el-form-item>
<el-form-item prop="Email" label="邮箱">
<el-input v-model="userModel.Email" size="small"></el-input>
</el-form-item>
<el-form-item prop="Remark" label="备注">
<el-input v-model="userModel.Remark" size="small"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="resetForm('inputUserForm')"> </el-button>
<el-button type="primary" @click="save('inputUserForm')">确定</el-button>
</span>
</el-dialog>
<el-dialog
:title="amountModel.opAmountType==1?'充值':'扣费'"
:visible.sync="amountModel.showAmountDialog"
width="300px"
>
<el-form :model="amountModel" :rules="amountRules" ref="inputAmountForm" label-width="80px">
<el-form-item prop="rest" label="当前余额">
<el-input v-model="amountModel.rest" size="small" disabled></el-input>
</el-form-item>
<el-form-item prop="amount" :label="amountModel.opAmountType==1?'充值金额':'扣费金额'">
<el-input v-model="amountModel.amount" size="small" type="number"></el-input>
</el-form-item>
<el-form-item prop="attchInfo" label="备注">
<el-input v-model="amountModel.attchInfo" size="small" ></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="resetForm('inputAmountForm')"> </el-button>
<el-button type="primary" @click="updateAmount('inputAmountForm')">确定</el-button>
</span>
</el-dialog>
<el-dialog title="测试限额设置" :visible.sync="showTestDialog" width="300px">
<el-form :model="testLimitModel" ref="inputTestForm" label-width="80px">
<el-form-item prop="limit" label="限制次数">
<el-input v-model="testLimitModel.limit" size="small" type="number"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="resetForm('inputTestForm')"> </el-button>
<el-button type="primary" @click="updateTestLimit()">确定</el-button>
</span>
</el-dialog>
<el-dialog title="资金明细" :visible.sync="showDetailDialog" width="500px">
<el-table
:data="detailAmountData"
size="medium"
:height="$getHeight(300)"
row-key="Id"
border
>
<el-table-column prop="ScoreTypeName" label="资金项目"></el-table-column>
<el-table-column prop="ScoreValue" label="金额"></el-table-column>
</el-table>
</el-dialog>
</div>
</template>
<script>
export default {
name: "userIndex",
components: {
cutTip: () => import("@/components/common/cutTip"),
phoneHide: () => import("@/components/common/phonehide")
},
data() {
return {
isRoot:false,
loading: false,
showDialog: false,
showTestDialog: false,
showDetailDialog: false,
optype: 1, //1:添加 2编辑
userModel: {
LoginCode: "",
Phone: "",
Password: "",
Remark: ""
},
amountModel: {
rest: 0,
amount: 0,
opAmountType: 1, ////1:充值 2扣款
showAmountDialog: false,
attchInfo:''
},
testLimitModel: {
userId: 0,
limit: 3
},
retData: { TotalCount: 0, Data: [] },
searchModel: {
PageIndex: 1,
keyWord: ""
},
rules: {
LoginCode: [this.$vaild.required("登录名称")],
Phone: [this.$vaild.required("手机号")],
// Password: [this.$vaild.required("密码")]
},
amountRules: {
// amount: [{ type: 'number', message: '金额必须为数字值'}],
},
detailAmountData: [],
formatterCreateType(row, column, cellValue, index) {
switch (cellValue) {
case 1:
return "管理员添加";
case 2:
return "用户注册";
case 3:
return "淘宝注册";
}
return "";
}
};
},
created () {
this.$store.commit('setCurrentNav', '用户管理>>会员管理')
var currentUser = this.$local.getUserByCache()
this.IsRoot = currentUser.Manager.IsRootUser
this.get()
// eslint-disable-next-line camelcase
let user_info = this.$local.getUserByCache().Manager.RealName
this.$api.post(this.$api.phpURL + 'logs/index/clickVipInfo', {
user: user_info,
operation: '点击客户管理',
record: '查询客户信息列表'
}).then(res => {})
},
methods: {
search(){
this.searchModel.PageIndex=1;
this.get();
},
get() {
this.$api.get("baseinfo/v1/user/page", this.searchModel).then(res => {
this.retData = res;
});
},
del(item) {
var that = this;
this.$confirm("确定删除?", "", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(_ => {
this.$api.post("baseinfo/v1/user/Delete?id=" + item.Id).then(res => {
that.get();
});
});
},
add() {
this.showDialog = true;
this.optype = 1;
},
edit(item) {
this.showDialog = true;
this.optype = 2;
this.userModel = clone(item);
},
resetForm(formName) {
this.$refs[formName].resetFields();
this.showDialog = false;
this.amountModel.showAmountDialog = false;
this.showTestDialog = false;
},
save(formName) {
this.userModel.LoginCode = this.userModel.LoginCode.trim()
this.$refs[formName].validate(valid => {
if (!valid) return;
if (this.optype == 1) {
this.$api.post("baseinfo/v1/user/post", this.userModel).then(res => {
this.resetForm("inputUserForm");
this.get();
});
} else {
this.$api.post("baseinfo/v1/user/put", this.userModel).then(res => {
this.resetForm("inputUserForm");
this.get();
});
}
});
},
showAmount(item, type) {
this.amountModel.rest = item.RestAmount;
this.amountModel.opAmountType = type;
this.amountModel.showAmountDialog = true;
this.amountModel.UserId = item.Id;
},
updateAmount(formName) {
this.$refs[formName].validate(valid => {
if (!valid) return;
this.$api
.post("baseinfo/v1/user/UpdateAmount", this.amountModel)
.then(res => {
this.resetForm("inputAmountForm");
this.get();
});
});
},
showUpdateTest(item) {
this.showTestDialog = true;
this.testLimitModel.UserId = item.Id;
this.testLimitModel.limit = item.TestCountLimit;
},
updateTestLimit() {
this.$api
.post("baseinfo/v1/user/UpdateTestCount", this.testLimitModel)
.then(res => {
this.resetForm("inputTestForm");
this.get();
});
},
showAmountDetail(item) {
this.showDetailDialog = true;
this.$api
.get("baseinfo/v1/user/AmountDetail?userId=" + item.Id)
.then(res => {
this.detailAmountData = res.Data
});
},
showHandle (r) {
// eslint-disable-next-line camelcase
let user_info = this.$local.getUserByCache().Manager.RealName
this.$api.post(this.$api.phpURL + 'logs/index/hoveInfo', {
user: user_info,
operation: '点击客户信息会员价',
record: '查看会员的产品价格',
info: r.LoginCode
}).then(res => {})
},
dataExport () {
this.$api.getDownloadFile('/baseinfo/v1/user/Export')
// eslint-disable-next-line camelcase
let user_info = this.$local.getUserByCache().Manager.RealName
this.$api.post(this.$api.phpURL + 'logs/index/export', {
user: user_info,
operation: '点击导出所有客户信息',
record: '导出所有客户信息列表',
info: '本次点击时间之前所有客户数据'
}).then(res => {})
}
}
}
</script>
<style scoped>
</style>