Commit b288861f authored by 邓春圆's avatar 邓春圆

新客户变老客户

parent 0b80fa85
......@@ -159,3 +159,11 @@ export function importTemplate() {
responseType: 'blob'
})
}
//新客户变老客户
export function customerUpdateCustomerToOld(data){
return request({
url:'/ecw/customer/update-customer-to-old',
method:'put',
params:data
})
}
......@@ -4,18 +4,22 @@
<!--部门数据-->
<el-col :span="4" :xs="24">
<div class="head-container">
<el-input v-model="deptName" :placeholder="$t('请输入部门名称')" clearable size="small" prefix-icon="el-icon-search" style="margin-bottom: 20px"/>
<el-input v-model="deptName" :placeholder="$t('请输入部门名称')" clearable size="small"
prefix-icon="el-icon-search" style="margin-bottom: 20px"/>
</div>
<div class="head-container">
<el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false" :filter-node-method="filterNode"
<el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false"
:filter-node-method="filterNode"
ref="tree" default-expand-all @node-click="handleNodeClick"/>
</div>
</el-col>
<!--用户数据-->
<el-col :span="20" :xs="24">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
label-width="68px">
<el-form-item :label="$t('用户名称')" prop="username">
<el-input v-model="queryParams.username" :placeholder="$t('请输入用户名或昵称')" clearable style="width: 240px"
<el-input v-model="queryParams.username" :placeholder="$t('请输入用户名或昵称')" clearable
style="width: 240px"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item :label="$t('手机号码')" prop="mobile">
......@@ -24,12 +28,14 @@
</el-form-item>
<el-form-item :label="$t('状态')" prop="status">
<el-select v-model="queryParams.status" :placeholder="$t('用户状态')" clearable style="width: 240px">
<el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
<el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label"
:value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('创建时间')">
<el-date-picker v-model="dateRange" style="width: 240px" value-format="yyyy-MM-dd" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
range-separator="-" start-placeholder="开始日期"
end-placeholder="结束日期"></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t('搜索') }}</el-button>
......@@ -40,31 +46,40 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:user:create']">{{ $t('新增') }}</el-button>
v-hasPermi="['system:user:create']">{{ $t('新增') }}
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" icon="el-icon-upload2" size="mini" @click="handleImport"
v-hasPermi="['system:user:import']">{{ $t('导入') }}</el-button>
v-hasPermi="['system:user:import']">{{ $t('导入') }}
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:user:export']">{{ $t('导出') }}</el-button>
v-hasPermi="['system:user:export']">{{ $t('导出') }}
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="userList">
<el-table-column :label="$t('用户编号')" align="center" key="id" prop="id" v-if="columns[0].visible" />
<el-table-column :label="$t('用户名称')" align="center" key="username" prop="username" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column :label="$t('用户昵称')" align="center" key="nickname" prop="nickname" v-if="columns[2].visible" :show-overflow-tooltip="true" />
<el-table-column :label="$t('部门')" align="center" key="deptName" prop="dept.name" v-if="columns[3].visible" :show-overflow-tooltip="true" />
<el-table-column :label="$t('手机号码')" align="center" key="mobile" prop="mobile" v-if="columns[4].visible" width="120" />
<el-table-column :label="$t('用户编号')" align="center" key="id" prop="id" v-if="columns[0].visible"/>
<el-table-column :label="$t('用户名称')" align="center" key="username" prop="username"
v-if="columns[1].visible" :show-overflow-tooltip="true"/>
<el-table-column :label="$t('用户昵称')" align="center" key="nickname" prop="nickname"
v-if="columns[2].visible" :show-overflow-tooltip="true"/>
<el-table-column :label="$t('部门')" align="center" key="deptName" prop="dept.name" v-if="columns[3].visible"
:show-overflow-tooltip="true"/>
<el-table-column :label="$t('手机号码')" align="center" key="mobile" prop="mobile" v-if="columns[4].visible"
width="120"/>
<el-table-column :label="$t('状态')" key="status" v-if="columns[5].visible" align="center">
<template slot-scope="scope">
<el-switch v-model="scope.row.status" :active-value="0" :inactive-value="1" @change="handleStatusChange(scope.row)" />
<el-switch v-model="scope.row.status" :active-value="0" :inactive-value="1"
@change="handleStatusChange(scope.row)"/>
</template>
</el-table-column>
<el-table-column :label="$t('创建时间')" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<el-table-column :label="$t('创建时间')" align="center" prop="createTime" v-if="columns[6].visible"
width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
......@@ -72,18 +87,26 @@
<el-table-column :label="$t('操作')" align="center" width="160" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:user:update']">{{ $t('修改') }}</el-button>
<el-dropdown @command="(command) => handleCommand(command, scope.$index, scope.row)"
v-hasPermi="['system:user:delete', 'system:user:update-password', 'system:permission:assign-user-role']">
v-hasPermi="['system:user:update']">{{ $t('修改') }}
</el-button>
<el-dropdown @command="(command) => handleCommand(command, scope.$index, scope.row)"
v-hasPermi="['system:user:delete', 'system:user:update-password', 'system:permission:assign-user-role']">
<span class="el-dropdown-link">
<i class="el-icon-d-arrow-right el-icon--right"></i>{{ $t('更多') }}</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="handleDelete" v-if="scope.row.id !== 1" size="mini" type="text" icon="el-icon-delete"
v-hasPermi="['system:user:delete']">{{ $t('删除') }}</el-dropdown-item>
<el-dropdown-item command="handleDelete" v-if="scope.row.id !== 1" size="mini" type="text"
icon="el-icon-delete"
v-hasPermi="['system:user:delete']">{{ $t('删除') }}
</el-dropdown-item>
<el-dropdown-item command="handleResetPwd" size="mini" type="text" icon="el-icon-key"
v-hasPermi="['system:user:update-password']">{{ $t('重置密码') }}</el-dropdown-item>
<el-dropdown-item command="handleRole" size="mini" type="text" icon="el-icon-circle-check"
v-hasPermi="['system:permission:assign-user-role']">{{ $t('分配角色') }}</el-dropdown-item>
v-hasPermi="['system:user:update-password']">{{ $t('重置密码') }}
</el-dropdown-item>
<el-dropdown-item command="handleRole" size="mini" type="text" icon="el-icon-circle-check"
v-hasPermi="['system:permission:assign-user-role']">{{ $t('分配角色') }}
</el-dropdown-item>
<el-dropdown-item v-hasPermi="['system:permission:oldCustom']" v-show="scope.row.customerServiceId" command="oldCustom" size="mini" type="text" icon="el-icon-s-custom">
{{ $t('新客变老客') }}
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
......@@ -101,7 +124,7 @@
<el-row>
<el-col :span="12">
<el-form-item :label="$t('用户昵称')" prop="nickname">
<el-input v-model="form.nickname" :placeholder="$t('请输入用户昵称')" />
<el-input v-model="form.nickname" :placeholder="$t('请输入用户昵称')"/>
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -114,24 +137,24 @@
<el-row>
<el-col :span="12">
<el-form-item :label="$t('手机号码')" prop="mobile">
<el-input v-model="form.mobile" :placeholder="$t('请输入手机号码')" maxlength="11" />
<el-input v-model="form.mobile" :placeholder="$t('请输入手机号码')" maxlength="11"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('邮箱')" prop="email">
<el-input v-model="form.email" :placeholder="$t('请输入邮箱')" maxlength="50" />
<el-input v-model="form.email" :placeholder="$t('请输入邮箱')" maxlength="50"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="form.id === undefined" :label="$t('用户名称')" prop="username">
<el-input v-model="form.username" :placeholder="$t('请输入用户名称')" />
<el-input v-model="form.username" :placeholder="$t('请输入用户名称')"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.id === undefined" :label="$t('用户密码')" prop="password">
<el-input v-model="form.password" :placeholder="$t('请输入用户密码')" type="password" show-password />
<el-input v-model="form.password" :placeholder="$t('请输入用户密码')" type="password" show-password/>
</el-form-item>
</el-col>
</el-row>
......@@ -139,13 +162,14 @@
<el-col :span="12">
<el-form-item :label="$t('用户性别')">
<el-select v-model="form.sex" :placeholder="$t('请选择')">
<el-option v-for="dict in sexDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
<el-option v-for="dict in sexDictDatas" :key="parseInt(dict.value)" :label="dict.label"
:value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('岗位')">
<el-select v-model="form.postIds" multiple :placeholder="$t('请选择')">
<el-select v-model="form.postIds" multiple :placeholder="$t('请选择')">
<el-option
v-for="item in postOptions"
:key="item.id"
......@@ -156,14 +180,15 @@
</el-form-item>
</el-col>
<el-col :span="12" v-if="hasCustomerServicePost">
<el-form-item :label="$t('跟单客服')">
<el-form-item :label="$t('跟单客服')">
<el-select v-model="form.customerServiceId" :placeholder="$t('请选择')">
<el-option v-for="dict in followUpList" :key="parseInt(dict.id)" :label="dict.nickname" :value="parseInt(dict.id)"/>
<el-option v-for="dict in followUpList" :key="parseInt(dict.id)" :label="dict.nickname"
:value="parseInt(dict.id)"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-if="hasCustomerServicePost">
<el-form-item :label="$t('不掉公海')">
<el-form-item :label="$t('不掉公海')">
<el-switch v-model="form.notAllowedToEnterOpenSea"></el-switch>
</el-form-item>
</el-col>
......@@ -185,15 +210,19 @@
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">{{ $t('将文件拖到此处,或') }}<em>{{ $t('点击上传') }}</em></div>
<div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" />{{ $t('是否更新已经存在的用户数据') }}</div>
<el-checkbox v-model="upload.updateSupport"/>
{{ $t('是否更新已经存在的用户数据') }}
</div>
<span>仅允许导入xls、xlsx格式文件。</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">{{ $t('下载模板') }}</el-link>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
@click="importTemplate">{{ $t('下载模板') }}
</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
......@@ -206,10 +235,10 @@
<el-dialog :title="$t('分配角色')" :visible.sync="openRole" width="500px" append-to-body>
<el-form :model="form" label-width="80px">
<el-form-item :label="$t('用户名称')">
<el-input v-model="form.username" :disabled="true" />
<el-input v-model="form.username" :disabled="true"/>
</el-form-item>
<el-form-item :label="$t('用户昵称')">
<el-input v-model="form.nickname" :disabled="true" />
<el-input v-model="form.nickname" :disabled="true"/>
</el-form-item>
<el-form-item :label="$t('角色')">
<el-select v-model="form.roleIds" multiple :placeholder="$t('请选择')">
......@@ -234,7 +263,7 @@
<script>
import {
addUser,
changeUserStatus,
changeUserStatus, customerUpdateCustomerToOld,
delUser,
exportUser,
getUser,
......@@ -258,7 +287,7 @@ import {getBaseHeader} from "@/utils/request";
export default {
name: "User",
components: { Treeselect },
components: {Treeselect},
data() {
return {
// 遮罩层
......@@ -323,24 +352,24 @@ export default {
},
// 列信息
columns: [
{ key: 0, label: this.$t(`用户编号`), visible: true },
{ key: 1, label: this.$t(`用户名称`), visible: true },
{ key: 2, label: this.$t(`用户昵称`), visible: true },
{ key: 3, label: this.$t(`部门`), visible: true },
{ key: 4, label: this.$t(`手机号码`), visible: true },
{ key: 5, label: this.$t(`状态`), visible: true },
{ key: 6, label: this.$t(`创建时间`), visible: true }
{key: 0, label: this.$t(`用户编号`), visible: true},
{key: 1, label: this.$t(`用户名称`), visible: true},
{key: 2, label: this.$t(`用户昵称`), visible: true},
{key: 3, label: this.$t(`部门`), visible: true},
{key: 4, label: this.$t(`手机号码`), visible: true},
{key: 5, label: this.$t(`状态`), visible: true},
{key: 6, label: this.$t(`创建时间`), visible: true}
],
// 表单校验
rules: {
username: [
{ required: true, message: this.$t("用户名称不能为空"), trigger: "blur" }
{required: true, message: this.$t("用户名称不能为空"), trigger: "blur"}
],
nickname: [
{ required: true, message: this.$t("用户昵称不能为空"), trigger: "blur" }
{required: true, message: this.$t("用户昵称不能为空"), trigger: "blur"}
],
password: [
{ required: true, message: this.$t("用户密码不能为空"), trigger: "blur" }
{required: true, message: this.$t("用户密码不能为空"), trigger: "blur"}
],
email: [
{
......@@ -365,7 +394,7 @@ export default {
// 数据字典
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS),
sexDictDatas: getDictDatas(DICT_TYPE.SYSTEM_USER_SEX),
followUpList:[],
followUpList: [],
};
},
watch: {
......@@ -373,26 +402,26 @@ export default {
deptName(val) {
this.$refs.tree.filter(val);
},
'form.postIds'(val){
let codes = this.postOptions.filter(i => {
if(val.indexOf(i.id) > -1) return i
'form.postIds'(val) {
let codes = this.postOptions.filter(i => {
if (val.indexOf(i.id) > -1) return i
}).map(v => v.code).join(',');
if(codes){
if (codes) {
// console.log("codes:"+JSON.stringify(codes));
userList('documentary customer service').then(r => {
this.followUpList = r.data;
})
}else {
} else {
this.followUpList = [];
}
}
},
computed:{
hasCustomerServicePost(){
if(!this.form.postIds) return false
computed: {
hasCustomerServicePost() {
if (!this.form.postIds) return false
let has = false
this.postOptions.forEach(item => {
if(this.form.postIds.indexOf(item.id) > -1 && item.code == 'customer service'){
if (this.form.postIds.indexOf(item.id) > -1 && item.code == 'customer service') {
has = true
}
})
......@@ -423,6 +452,9 @@ export default {
case 'handleRole':
this.handleRole(row);
break;
case 'oldCustom':
this.setCustom(row);
break;
default:
break;
}
......@@ -434,10 +466,10 @@ export default {
this.dateRange[0] ? this.dateRange[0] + ' 00:00:00' : undefined,
this.dateRange[1] ? this.dateRange[1] + ' 23:59:59' : undefined,
])).then(response => {
this.userList = response.data.list;
this.total = response.data.total;
this.loading = false;
}
this.userList = response.data.list;
this.total = response.data.total;
this.loading = false;
}
);
},
/** 查询部门下拉树结构 + 岗位下拉 */
......@@ -467,14 +499,14 @@ export default {
// 用户状态修改
handleStatusChange(row) {
let text = row.status === CommonStatusEnum.ENABLE ? this.$t("启用") : this.$t("停用");
this.$modal.confirm('确认要"' + text + '""' + row.username + '"用户吗?').then(function() {
return changeUserStatus(row.id, row.status);
}).then(() => {
this.$modal.msgSuccess(text + "成功");
}).catch(function() {
row.status = row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.DISABLE
: CommonStatusEnum.ENABLE;
});
this.$modal.confirm('确认要"' + text + '""' + row.username + '"用户吗?').then(function () {
return changeUserStatus(row.id, row.status);
}).then(() => {
this.$modal.msgSuccess(text + "成功");
}).catch(function () {
row.status = row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.DISABLE
: CommonStatusEnum.ENABLE;
});
},
// 取消按钮
cancel() {
......@@ -486,6 +518,13 @@ export default {
this.openRole = false;
this.reset();
},
// 修改客户
setCustom(row) {
// console.log(row,'row')
customerUpdateCustomerToOld({customerServiceId:row.customerServiceId}).then(r =>{
this.$message.success(this.$t('修改成功!'))
})
},
// 表单重置
reset() {
this.form = {
......@@ -501,7 +540,7 @@ export default {
remark: undefined,
postIds: [],
roleIds: [],
customerServiceId:undefined
customerServiceId: undefined
};
this.resetForm("form");
},
......@@ -543,11 +582,12 @@ export default {
this.$prompt('请输入"' + row.username + '"的新密码', this.$t("提示"), {
confirmButtonText: this.$t("确定"),
cancelButtonText: this.$t("取消")
}).then(({ value }) => {
resetUserPwd(row.id, value).then(response => {
this.$modal.msgSuccess("修改成功,新密码是:" + value);
});
}).catch(() => {});
}).then(({value}) => {
resetUserPwd(row.id, value).then(response => {
this.$modal.msgSuccess("修改成功,新密码是:" + value);
});
}).catch(() => {
});
},
/** 分配用户角色操作 */
handleRole(row) {
......@@ -572,7 +612,7 @@ export default {
})
},
/** 提交按钮 */
submitForm: function() {
submitForm: function () {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id !== undefined) {
......@@ -592,7 +632,7 @@ export default {
});
},
/** 提交按钮(角色权限) */
submitRole: function() {
submitRole: function () {
if (this.form.id !== undefined) {
assignUserRole({
userId: this.form.id,
......@@ -607,12 +647,13 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除用户编号为"' + ids + '"的数据项?').then(function() {
return delUser(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
this.$modal.confirm('是否确认删除用户编号为"' + ids + '"的数据项?').then(function () {
return delUser(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
});
},
/** 导出按钮操作 */
handleExport() {
......@@ -621,12 +662,13 @@ export default {
this.dateRange[1] ? this.dateRange[1] + ' 23:59:59' : undefined,
]);
this.$modal.confirm('是否确认导出所有用户数据项?').then(() => {
this.exportLoading = true;
return exportUser(queryParams);
}).then(response => {
this.$download.excel(response, '用户数据.xls');
this.exportLoading = false;
}).catch(() => {});
this.exportLoading = true;
return exportUser(queryParams);
}).then(response => {
this.$download.excel(response, '用户数据.xls');
this.exportLoading = false;
}).catch(() => {
});
},
/** 导入按钮操作 */
handleImport() {
......@@ -666,7 +708,7 @@ export default {
for (const username in data.failureUsernames) {
text += '<br />&nbsp;&nbsp;&nbsp;&nbsp;' + username + this.$t('') + data.failureUsernames[username];
}
this.$alert(text, this.$t("导入结果"), { dangerouslyUseHTMLString: true });
this.$alert(text, this.$t("导入结果"), {dangerouslyUseHTMLString: true});
this.getList();
},
// 提交上传文件
......
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