forked from qiushanhe/dm-manage-web
Merge branch 'caozong' of http://114.55.169.15:3000/qiushanhe/dm-manage-web into caozong
commit
0ba4d3fe26
@ -1,8 +1,8 @@ |
|||||||
# 页面标题 |
# 页面标题 |
||||||
VUE_APP_TITLE = 莳松管理系统 |
VUE_APP_TITLE = 开心学车管理系统 |
||||||
|
|
||||||
# 生产环境配置 |
# 生产环境配置 |
||||||
ENV = 'production' |
ENV = 'production' |
||||||
|
|
||||||
# 莳松管理系统/生产环境 |
# 开心学车管理系统/生产环境 |
||||||
VUE_APP_BASE_API = '/duima' |
VUE_APP_BASE_API = '/duima' |
||||||
|
@ -1,10 +1,10 @@ |
|||||||
# 页面标题 |
# 页面标题 |
||||||
VUE_APP_TITLE = 莳松管理系统 |
VUE_APP_TITLE = 开心学车管理系统 |
||||||
|
|
||||||
NODE_ENV = production |
NODE_ENV = production |
||||||
|
|
||||||
# 测试环境配置 |
# 测试环境配置 |
||||||
ENV = 'staging' |
ENV = 'staging' |
||||||
|
|
||||||
# 莳松管理系统/测试环境 |
# 开心学车管理系统/测试环境 |
||||||
VUE_APP_BASE_API = '/stage-api' |
VUE_APP_BASE_API = '/stage-api' |
||||||
|
@ -0,0 +1,59 @@ |
|||||||
|
/* |
||||||
|
* @Author: riverQiu |
||||||
|
* @Date: 2023-10-07 17:14:32 |
||||||
|
* @LastEditors: riverQiu |
||||||
|
* @LastEditTime: 2023-10-10 17:00:57 |
||||||
|
* @Description:教练接口 |
||||||
|
*/ |
||||||
|
import request from '@/utils/request'; |
||||||
|
|
||||||
|
// 查询教练列表
|
||||||
|
export function listCoach(query) { |
||||||
|
return request({ |
||||||
|
url: '/sch/coach/list', |
||||||
|
method: 'get', |
||||||
|
params: query |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 查询教练详细
|
||||||
|
export function getCoach(coachId) { |
||||||
|
return request({ |
||||||
|
url: '/sch/coach/' + coachId, |
||||||
|
method: 'get' |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 新增教练
|
||||||
|
export function addCoach(data) { |
||||||
|
return request({ |
||||||
|
url: '/sch/coach', |
||||||
|
method: 'post', |
||||||
|
data: data |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 修改教练
|
||||||
|
export function updateCoach(data) { |
||||||
|
return request({ |
||||||
|
url: '/sch/coach', |
||||||
|
method: 'put', |
||||||
|
data: data |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 删除教练
|
||||||
|
export function delCoach(coachId) { |
||||||
|
return request({ |
||||||
|
url: '/sch/coach/' + coachId, |
||||||
|
method: 'delete' |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
export function getAllCoaches(query){ |
||||||
|
return request({ |
||||||
|
url: '/sch/coach/all', |
||||||
|
method: 'get', |
||||||
|
params: query |
||||||
|
}); |
||||||
|
} |
@ -0,0 +1,59 @@ |
|||||||
|
/* |
||||||
|
* @Author: riverQiu |
||||||
|
* @Date: 2023-10-14 00:31:37 |
||||||
|
* @LastEditors: riverQiu |
||||||
|
* @LastEditTime: 2023-10-15 00:37:52 |
||||||
|
* @Description:
|
||||||
|
*/ |
||||||
|
import request from '@/utils/request' |
||||||
|
|
||||||
|
// 查询关键话术列表
|
||||||
|
export function listSkill(query) { |
||||||
|
return request({ |
||||||
|
url: '/system/skill/list', |
||||||
|
method: 'get', |
||||||
|
params: query |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 查询关键话术详细
|
||||||
|
export function getSkill(skillId) { |
||||||
|
return request({ |
||||||
|
url: '/system/skill/' + skillId, |
||||||
|
method: 'get' |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
export function getSkillKey() { |
||||||
|
return request({ |
||||||
|
url: '/system/skill/key', |
||||||
|
method: 'get' |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 新增关键话术
|
||||||
|
export function addSkill(data) { |
||||||
|
return request({ |
||||||
|
url: '/system/skill', |
||||||
|
method: 'post', |
||||||
|
data: data |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 修改关键话术
|
||||||
|
export function updateSkill(data) { |
||||||
|
return request({ |
||||||
|
url: '/system/skill', |
||||||
|
method: 'put', |
||||||
|
data: data |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 删除关键话术
|
||||||
|
export function delSkill(skillId) { |
||||||
|
return request({ |
||||||
|
url: '/system/skill/' + skillId, |
||||||
|
method: 'delete' |
||||||
|
}) |
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
/* |
||||||
|
* @Author: riverQiu |
||||||
|
* @Date: 2023-10-07 17:14:38 |
||||||
|
* @LastEditors: riverQiu |
||||||
|
* @LastEditTime: 2023-10-07 17:14:44 |
||||||
|
* @Description: 线索反馈接口 |
||||||
|
*/ |
||||||
|
import request from '@/utils/request'; |
||||||
|
|
||||||
|
// 查询线索反馈列表
|
||||||
|
export function listFeedback(query) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/list', |
||||||
|
method: 'get', |
||||||
|
params: query |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 查询线索反馈详细
|
||||||
|
export function getFeedback(feedbackId) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/' + feedbackId, |
||||||
|
method: 'get' |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 新增线索反馈
|
||||||
|
export function addFeedback(data) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback', |
||||||
|
method: 'post', |
||||||
|
data: data |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 修改线索反馈
|
||||||
|
export function updateFeedback(data) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback', |
||||||
|
method: 'put', |
||||||
|
data: data |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 删除线索反馈
|
||||||
|
export function delFeedback(feedbackId) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/' + feedbackId, |
||||||
|
method: 'delete' |
||||||
|
}); |
||||||
|
} |
@ -0,0 +1,74 @@ |
|||||||
|
/* |
||||||
|
* @Author: riverQiu |
||||||
|
* @Date: 2023-10-11 20:48:02 |
||||||
|
* @LastEditors: riverQiu |
||||||
|
* @LastEditTime: 2023-10-11 20:57:06 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* @Author: riverQiu |
||||||
|
* @Date: 2023-10-10 16:08:39 |
||||||
|
* @LastEditors: riverQiu |
||||||
|
* @LastEditTime: 2023-10-10 16:10:06 |
||||||
|
* @Description: 反馈单 |
||||||
|
*/ |
||||||
|
import request from '@/utils/request'; |
||||||
|
|
||||||
|
// 查询线索反馈列表
|
||||||
|
export function listFeedbackDetail(query) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/detail/list', |
||||||
|
method: 'get', |
||||||
|
params: query |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 查询线索反馈详细
|
||||||
|
export function getFeedbackDetail(feedbackId) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/detail/' + feedbackId, |
||||||
|
method: 'get' |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
export function getFeedbackDetailInfo(query){ |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/detail/info', |
||||||
|
method: 'get', |
||||||
|
params: query |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 查询线索反馈详细
|
||||||
|
export function getFeedbackDetailByClueId(clueId) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/detail/' + clueId, |
||||||
|
method: 'get' |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 新增线索反馈
|
||||||
|
export function addFeedbackDetail(data) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/detail', |
||||||
|
method: 'post', |
||||||
|
data: data |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 修改线索反馈
|
||||||
|
export function updateFeedbackDetail(data) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/detail', |
||||||
|
method: 'put', |
||||||
|
data: data |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 删除线索反馈
|
||||||
|
export function delFeedbackDetail(feedbackId) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/detail/' + feedbackId, |
||||||
|
method: 'delete' |
||||||
|
}); |
||||||
|
} |
@ -0,0 +1,59 @@ |
|||||||
|
/* |
||||||
|
* @Author: riverQiu |
||||||
|
* @Date: 2023-10-10 16:08:39 |
||||||
|
* @LastEditors: riverQiu |
||||||
|
* @LastEditTime: 2023-10-10 16:10:06 |
||||||
|
* @Description: 反馈单 |
||||||
|
*/ |
||||||
|
import request from '@/utils/request'; |
||||||
|
|
||||||
|
// 查询线索反馈列表
|
||||||
|
export function listFeedbackOrder(query) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/order/list', |
||||||
|
method: 'get', |
||||||
|
params: query |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 查询线索反馈详细
|
||||||
|
export function getFeedbackOrder(feedbackId) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/order/' + feedbackId, |
||||||
|
method: 'get' |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 查询线索反馈详细
|
||||||
|
export function getFeedbackOrderByClueId(clueId) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/order/' + clueId, |
||||||
|
method: 'get' |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 新增线索反馈
|
||||||
|
export function addFeedbackOrder(data) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/order', |
||||||
|
method: 'post', |
||||||
|
data: data |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 修改线索反馈
|
||||||
|
export function updateFeedbackOrder(data) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/order', |
||||||
|
method: 'put', |
||||||
|
data: data |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
// 删除线索反馈
|
||||||
|
export function delFeedbackOrder(feedbackId) { |
||||||
|
return request({ |
||||||
|
url: '/zs/feedback/order/' + feedbackId, |
||||||
|
method: 'delete' |
||||||
|
}); |
||||||
|
} |
@ -0,0 +1,53 @@ |
|||||||
|
import request from '@/utils/request' |
||||||
|
|
||||||
|
// 查询邀约列表
|
||||||
|
export function listInvitation(query) { |
||||||
|
return request({ |
||||||
|
url: '/zs/invitation/list', |
||||||
|
method: 'get', |
||||||
|
params: query |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 查询邀约详细
|
||||||
|
export function getInvitation(invitationId) { |
||||||
|
return request({ |
||||||
|
url: '/zs/invitation/' + invitationId, |
||||||
|
method: 'get' |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 查询邀约详细
|
||||||
|
export function getInvitationByClue(query) { |
||||||
|
return request({ |
||||||
|
url: '/zs/invitation/clue', |
||||||
|
method: 'get', |
||||||
|
params: query |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 新增邀约
|
||||||
|
export function addInvitation(data) { |
||||||
|
return request({ |
||||||
|
url: '/zs/invitation', |
||||||
|
method: 'post', |
||||||
|
data: data |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 修改邀约
|
||||||
|
export function updateInvitation(data) { |
||||||
|
return request({ |
||||||
|
url: '/zs/invitation', |
||||||
|
method: 'put', |
||||||
|
data: data |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 删除邀约
|
||||||
|
export function delInvitation(invitationId) { |
||||||
|
return request({ |
||||||
|
url: '/zs/invitation/' + invitationId, |
||||||
|
method: 'delete' |
||||||
|
}) |
||||||
|
} |
@ -0,0 +1,136 @@ |
|||||||
|
|
||||||
|
<template> |
||||||
|
<el-dialog title="接待人信息" :close-on-click-modal="false" append-to-body :visible.sync="visible" width="600px" @close="closeDialog"> |
||||||
|
<div> |
||||||
|
<el-form ref="dialogForm" :model="dialogForm" :rules="dataRule" label-position="top" @keyup.enter.native="dialogFormSubmit()"> |
||||||
|
<el-form-item label="所属驾校" prop="schoolId"> |
||||||
|
<el-select v-model="dialogForm.schoolId" filterable placeholder="请选择" value-key="schoolId" clearable size="small" style="width:100%"> |
||||||
|
<el-option v-for="(dict, index) in schoolOptions" :key="index" :label="dict.schoolName" :value="dict.schoolId" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="所属场地" prop="placeId"> |
||||||
|
<el-select v-model="dialogForm.placeId" filterable placeholder="请选择" clearable value-key="placeId" size="small" style="width:100%"> |
||||||
|
<el-option v-for="(dict, index) in placeOptions.filter(item => item.schoolId === dialogForm.schoolId)" :key="index" :label="dict.name" :value="dict.placeId" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="接待人" prop="coachName"> |
||||||
|
<el-input v-model="dialogForm.coachName" placeholder="请输入教练名" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="联系方式" prop="phone"> |
||||||
|
<el-input v-model="dialogForm.phone" placeholder="请输入联系方式" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="微信openid" prop="openId"> |
||||||
|
<el-input v-model="dialogForm.openId" placeholder="请输入微信openid" /> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
|
||||||
|
</div> |
||||||
|
<span slot="footer" class="dialog-footer"> |
||||||
|
<el-button plain @click="(visible=false)">取消</el-button> |
||||||
|
<el-button v-jclick type="primary" :disabled="!canSubmit" @click="dialogFormSubmit()">确定</el-button> |
||||||
|
</span> |
||||||
|
</el-dialog> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { addCoach, updateCoach } from '@/api/sch/coach'; |
||||||
|
|
||||||
|
export default { |
||||||
|
props: { |
||||||
|
schoolOptions: { |
||||||
|
type: Array, |
||||||
|
default: [] |
||||||
|
}, |
||||||
|
placeOptions: { |
||||||
|
type: Array, |
||||||
|
default: [] |
||||||
|
} |
||||||
|
}, |
||||||
|
data () { |
||||||
|
return { |
||||||
|
visible: false, |
||||||
|
canSubmit: true, |
||||||
|
dialogForm: { |
||||||
|
coachId: null, |
||||||
|
deptId: null, |
||||||
|
schoolId: null, |
||||||
|
placeId: null, |
||||||
|
coachName: null, |
||||||
|
phone: null, |
||||||
|
openId: null |
||||||
|
}, |
||||||
|
dataRule: { |
||||||
|
schoolId: [{ required: true, message: '所属驾校不能为空', trigger: 'blur' }], |
||||||
|
placeId: [{ required: true, message: '场地不能为空', trigger: 'blur' }], |
||||||
|
coachName: [{ required: true, message: '教练名不能为空', trigger: 'blur' }], |
||||||
|
phone: [{ required: true, message: '联系方式不能为空', trigger: 'blur' }] |
||||||
|
|
||||||
|
} |
||||||
|
}; |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
init (info = undefined) { |
||||||
|
// debugger |
||||||
|
this.visible = true; |
||||||
|
this.$nextTick(() => { |
||||||
|
this.resetDialogForm(); |
||||||
|
this.$refs['dialogForm'].resetFields(); |
||||||
|
if (info) { |
||||||
|
this.dialogForm = this.deepClone(info); |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
resetDialogForm () { |
||||||
|
this.dialogForm = { |
||||||
|
coachId: null, |
||||||
|
deptId: null, |
||||||
|
schoolId: null, |
||||||
|
placeId: null, |
||||||
|
coachName: null, |
||||||
|
phone: null, |
||||||
|
openId: null |
||||||
|
}; |
||||||
|
}, |
||||||
|
closeDialog () { |
||||||
|
this.$emit('update:dialogVisible', false); |
||||||
|
}, |
||||||
|
// 表单提交 |
||||||
|
dialogFormSubmit () { |
||||||
|
this.$refs.dialogForm.validate((valid) => { |
||||||
|
if (valid) { |
||||||
|
this.canSubmit = false; |
||||||
|
|
||||||
|
if (this.dialogForm.coachId) { |
||||||
|
// 校验完成,调接口 |
||||||
|
updateCoach(this.dialogForm) |
||||||
|
.then((resp) => { |
||||||
|
this.canSubmit = true; |
||||||
|
if (resp.code == 200) { |
||||||
|
this.$message.success('保存成功'); |
||||||
|
this.$emit('refreshDataList'); |
||||||
|
this.visible = false; |
||||||
|
} |
||||||
|
}) |
||||||
|
.catch(() => { |
||||||
|
this.canSubmit = true; |
||||||
|
}); |
||||||
|
} else { |
||||||
|
addCoach(this.dialogForm) |
||||||
|
.then((resp) => { |
||||||
|
this.canSubmit = true; |
||||||
|
if (resp.code == 200) { |
||||||
|
this.$message.success('保存成功'); |
||||||
|
this.$emit('refreshDataList'); |
||||||
|
this.visible = false; |
||||||
|
} |
||||||
|
}) |
||||||
|
.catch(() => { |
||||||
|
this.canSubmit = true; |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
@ -0,0 +1,159 @@ |
|||||||
|
<template> |
||||||
|
<div class="app-container"> |
||||||
|
<el-form v-show="showSearch" ref="queryForm" :model="queryParams" size="small" :inline="true" label-width="68px"> |
||||||
|
<el-form-item label="所属驾校" prop="schoolId"> |
||||||
|
<el-select v-model="queryParams.schoolId" filterable placeholder="请选择" value-key="schoolId" clearable size="small"> |
||||||
|
<el-option v-for="(dict, index) in schoolOptions" :key="index" :label="dict.schoolName" :value="dict.schoolId" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="所属场地" prop="placeId"> |
||||||
|
<el-select v-model="queryParams.placeId" filterable placeholder="请选择" clearable value-key="placeId" size="small"> |
||||||
|
<el-option v-for="(dict, index) in placeOptions.filter(item => item.schoolId === queryParams.schoolId)" :key="index" :label="dict.name" :value="dict.placeId" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="接待人" prop="coachName"> |
||||||
|
<el-input v-model="queryParams.coachName" placeholder="请输入" clearable @keyup.enter.native="handleQuery" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="联系方式" prop="phone"> |
||||||
|
<el-input v-model="queryParams.phone" placeholder="请输入联系方式" clearable @keyup.enter.native="handleQuery" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item> |
||||||
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |
||||||
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8"> |
||||||
|
<el-col :span="1.5"> |
||||||
|
<el-button v-hasPermi="['sch:coach:add']" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddAndUpdate(undefined)">新增</el-button> |
||||||
|
</el-col> |
||||||
|
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" /> |
||||||
|
</el-row> |
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="coachList"> |
||||||
|
<el-table-column type="index" width="55" align="center" /> |
||||||
|
<el-table-column label="所属驾校" align="center" prop="schoolName" /> |
||||||
|
<el-table-column label="所属场地" align="center" prop="placeName" /> |
||||||
|
<el-table-column label="接待人" align="center" prop="coachName" /> |
||||||
|
<el-table-column label="联系方式" align="center" prop="phone" /> |
||||||
|
<el-table-column label="微信openid" align="center" prop="openId" /> |
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<el-button v-hasPermi="['sch:coach:edit']" size="mini" type="text" icon="el-icon-edit" @click="handleAddAndUpdate(scope.row)">修改</el-button> |
||||||
|
<el-button v-hasPermi="['sch:coach:remove']" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
|
||||||
|
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> |
||||||
|
|
||||||
|
<!-- 添加或修改教练对话框 --> |
||||||
|
<coach-form v-if="dialogVisible" ref="dialogForm" :dialog-visible="dialogVisible" :school-options="schoolOptions" :place-options="placeOptions" @refreshDataList="getList" /> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { listCoach, getCoach, delCoach } from '@/api/sch/coach'; |
||||||
|
import CoachForm from './components/CoachForm.vue'; |
||||||
|
import schoolAPi from '@/api/sch/school'; |
||||||
|
import { getAllPlaces } from '@/api/sch/place'; |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'Coach', |
||||||
|
components: { CoachForm }, |
||||||
|
data () { |
||||||
|
return { |
||||||
|
// 遮罩层 |
||||||
|
loading: true, |
||||||
|
// 选中数组 |
||||||
|
ids: [], |
||||||
|
// 非单个禁用 |
||||||
|
single: true, |
||||||
|
// 非多个禁用 |
||||||
|
multiple: true, |
||||||
|
// 显示搜索条件 |
||||||
|
showSearch: true, |
||||||
|
// 总条数 |
||||||
|
total: 0, |
||||||
|
// 教练表格数据 |
||||||
|
coachList: [], |
||||||
|
// 查询参数 |
||||||
|
queryParams: { |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 10, |
||||||
|
schoolId: null, |
||||||
|
placeId: null, |
||||||
|
coachName: null, |
||||||
|
phone: null |
||||||
|
}, |
||||||
|
dialogVisible: false, |
||||||
|
schoolOptions: [], |
||||||
|
placeOptions: [] |
||||||
|
}; |
||||||
|
}, |
||||||
|
created () { |
||||||
|
this.getSchools(); |
||||||
|
this.getPlaces(); |
||||||
|
this.getList(); |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
/** 查询教练列表 */ |
||||||
|
getList () { |
||||||
|
this.loading = true; |
||||||
|
listCoach(this.queryParams).then(response => { |
||||||
|
this.coachList = response.rows; |
||||||
|
this.total = response.total; |
||||||
|
this.loading = false; |
||||||
|
}); |
||||||
|
}, |
||||||
|
// 取消按钮 |
||||||
|
cancel () { |
||||||
|
this.open = false; |
||||||
|
this.reset(); |
||||||
|
}, |
||||||
|
/** 搜索按钮操作 */ |
||||||
|
handleQuery () { |
||||||
|
this.queryParams.pageNum = 1; |
||||||
|
this.getList(); |
||||||
|
}, |
||||||
|
/** 重置按钮操作 */ |
||||||
|
resetQuery () { |
||||||
|
this.resetForm('queryForm'); |
||||||
|
this.handleQuery(); |
||||||
|
}, |
||||||
|
/** 新增或修改按钮操作 */ |
||||||
|
handleAddAndUpdate (item) { |
||||||
|
this.dialogVisible = true; |
||||||
|
this.$nextTick(() => { |
||||||
|
this.$refs.dialogForm.init(item); |
||||||
|
}); |
||||||
|
}, |
||||||
|
/** 删除按钮操作 */ |
||||||
|
handleDelete (row) { |
||||||
|
const coachIds = row.coachId || this.ids; |
||||||
|
this.$modal.confirm('是否确认删除教练编号为"' + coachIds + '"的数据项?').then(function () { |
||||||
|
return delCoach(coachIds); |
||||||
|
}).then(() => { |
||||||
|
this.getList(); |
||||||
|
this.$modal.msgSuccess('删除成功'); |
||||||
|
}).catch(() => { }); |
||||||
|
}, |
||||||
|
/** 导出按钮操作 */ |
||||||
|
handleExport () { |
||||||
|
this.download('system/coach/export', { |
||||||
|
...this.queryParams |
||||||
|
}, `coach_${new Date().getTime()}.xlsx`); |
||||||
|
}, |
||||||
|
getSchools () { |
||||||
|
schoolAPi.allList().then((resp) => { |
||||||
|
this.schoolOptions = resp.data; |
||||||
|
}); |
||||||
|
}, |
||||||
|
getPlaces () { |
||||||
|
getAllPlaces({ status: '0', showInMap: true }).then((resp) => { |
||||||
|
this.placeOptions = resp.data; |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
@ -0,0 +1,193 @@ |
|||||||
|
<template> |
||||||
|
<div class="app-container"> |
||||||
|
<el-form v-show="showSearch" ref="queryForm" :model="queryParams" size="small" :inline="true" label-width="68px"> |
||||||
|
<el-form-item label="关键词" prop="skillKey"> |
||||||
|
<el-input v-model="queryParams.skillKey" placeholder="请输入关键词" clearable @keyup.enter.native="handleQuery" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item> |
||||||
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |
||||||
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8"> |
||||||
|
<el-col :span="1.5"> |
||||||
|
<el-button v-hasPermi="['system:skill:add']" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button> |
||||||
|
</el-col> |
||||||
|
|
||||||
|
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" /> |
||||||
|
</el-row> |
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="skillList" @selection-change="handleSelectionChange"> |
||||||
|
<el-table-column type="index" width="55" align="center" /> |
||||||
|
<el-table-column label="关键词" align="center" prop="skillKey" /> |
||||||
|
<el-table-column label="话术内容" align="center" prop="content" /> |
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<el-button v-hasPermi="['system:skill:edit']" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button> |
||||||
|
<el-button v-hasPermi="['system:skill:remove']" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
|
||||||
|
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> |
||||||
|
|
||||||
|
<!-- 添加或修改关键话术对话框 --> |
||||||
|
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> |
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
||||||
|
<el-form-item label="关键词" prop="skillKey"> |
||||||
|
<el-input v-model="form.skillKey" placeholder="请输入关键词" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="话术内容"> |
||||||
|
<editor v-model="form.content" :min-height="192" /> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
<div slot="footer" class="dialog-footer"> |
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button> |
||||||
|
<el-button @click="cancel">取 消</el-button> |
||||||
|
</div> |
||||||
|
</el-dialog> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { listSkill, getSkill, delSkill, addSkill, updateSkill } from '@/api/system/skill'; |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'Skill', |
||||||
|
data () { |
||||||
|
return { |
||||||
|
// 遮罩层 |
||||||
|
loading: true, |
||||||
|
// 选中数组 |
||||||
|
ids: [], |
||||||
|
// 非单个禁用 |
||||||
|
single: true, |
||||||
|
// 非多个禁用 |
||||||
|
multiple: true, |
||||||
|
// 显示搜索条件 |
||||||
|
showSearch: true, |
||||||
|
// 总条数 |
||||||
|
total: 0, |
||||||
|
// 关键话术表格数据 |
||||||
|
skillList: [], |
||||||
|
// 弹出层标题 |
||||||
|
title: '', |
||||||
|
// 是否显示弹出层 |
||||||
|
open: false, |
||||||
|
// 查询参数 |
||||||
|
queryParams: { |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 10, |
||||||
|
deptId: null, |
||||||
|
skillKey: null, |
||||||
|
content: null |
||||||
|
}, |
||||||
|
// 表单参数 |
||||||
|
form: {}, |
||||||
|
// 表单校验 |
||||||
|
rules: { |
||||||
|
skillKey: [{ required: true, message: '关键词不能为空', trigger: 'blur' }], |
||||||
|
content: [{ required: true, message: '话术内容不能为空', trigger: 'blur' }] |
||||||
|
} |
||||||
|
}; |
||||||
|
}, |
||||||
|
created () { |
||||||
|
this.getList(); |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
/** 查询关键话术列表 */ |
||||||
|
getList () { |
||||||
|
this.loading = true; |
||||||
|
listSkill(this.queryParams).then(response => { |
||||||
|
this.skillList = response.rows; |
||||||
|
this.total = response.total; |
||||||
|
this.loading = false; |
||||||
|
}); |
||||||
|
}, |
||||||
|
// 取消按钮 |
||||||
|
cancel () { |
||||||
|
this.open = false; |
||||||
|
this.reset(); |
||||||
|
}, |
||||||
|
// 表单重置 |
||||||
|
reset () { |
||||||
|
this.form = { |
||||||
|
skillId: null, |
||||||
|
deptId: null, |
||||||
|
skillKey: null, |
||||||
|
content: null |
||||||
|
}; |
||||||
|
this.resetForm('form'); |
||||||
|
}, |
||||||
|
/** 搜索按钮操作 */ |
||||||
|
handleQuery () { |
||||||
|
this.queryParams.pageNum = 1; |
||||||
|
this.getList(); |
||||||
|
}, |
||||||
|
/** 重置按钮操作 */ |
||||||
|
resetQuery () { |
||||||
|
this.resetForm('queryForm'); |
||||||
|
this.handleQuery(); |
||||||
|
}, |
||||||
|
// 多选框选中数据 |
||||||
|
handleSelectionChange (selection) { |
||||||
|
this.ids = selection.map(item => item.skillId); |
||||||
|
this.single = selection.length !== 1; |
||||||
|
this.multiple = !selection.length; |
||||||
|
}, |
||||||
|
/** 新增按钮操作 */ |
||||||
|
handleAdd () { |
||||||
|
this.reset(); |
||||||
|
this.open = true; |
||||||
|
this.title = '添加关键话术'; |
||||||
|
}, |
||||||
|
/** 修改按钮操作 */ |
||||||
|
handleUpdate (row) { |
||||||
|
this.reset(); |
||||||
|
const skillId = row.skillId || this.ids; |
||||||
|
getSkill(skillId).then(response => { |
||||||
|
this.form = response.data; |
||||||
|
this.open = true; |
||||||
|
this.title = '修改关键话术'; |
||||||
|
}); |
||||||
|
}, |
||||||
|
/** 提交按钮 */ |
||||||
|
submitForm () { |
||||||
|
this.$refs['form'].validate(valid => { |
||||||
|
if (valid) { |
||||||
|
if (this.form.skillId != null) { |
||||||
|
updateSkill(this.form).then(response => { |
||||||
|
this.$modal.msgSuccess('修改成功'); |
||||||
|
this.open = false; |
||||||
|
this.getList(); |
||||||
|
}); |
||||||
|
} else { |
||||||
|
addSkill(this.form).then(response => { |
||||||
|
this.$modal.msgSuccess('新增成功'); |
||||||
|
this.open = false; |
||||||
|
this.getList(); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
/** 删除按钮操作 */ |
||||||
|
handleDelete (row) { |
||||||
|
const skillIds = row.skillId || this.ids; |
||||||
|
this.$modal.confirm('是否确认删除关键话术编号为"' + skillIds + '"的数据项?').then(function () { |
||||||
|
return delSkill(skillIds); |
||||||
|
}).then(() => { |
||||||
|
this.getList(); |
||||||
|
this.$modal.msgSuccess('删除成功'); |
||||||
|
}).catch(() => { }); |
||||||
|
}, |
||||||
|
/** 导出按钮操作 */ |
||||||
|
handleExport () { |
||||||
|
this.download('system/skill/export', { |
||||||
|
...this.queryParams |
||||||
|
}, `skill_${new Date().getTime()}.xlsx`); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
@ -1,136 +1,136 @@ |
|||||||
export const defaultColumns = [{ |
export const defaultColumns = [{ |
||||||
key: 0, |
key: 0, |
||||||
prop: 'createTime', |
prop: 'createTime', |
||||||
label: '创建时间', |
label: '创建时间', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: false |
overflow: false |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 1, |
key: 1, |
||||||
prop: 'source', |
prop: 'source', |
||||||
label: '线索来源', |
label: '线索来源', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: false |
overflow: false |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 2, |
key: 2, |
||||||
prop: 'name', |
prop: 'name', |
||||||
label: '姓名', |
label: '姓名', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: false |
overflow: false |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 3, |
key: 3, |
||||||
prop: 'phone', |
prop: 'phone', |
||||||
label: '联系方式', |
label: '联系方式', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: false |
overflow: false |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 4, |
key: 4, |
||||||
prop: 'weChat', |
prop: 'weChat', |
||||||
label: '微信号', |
label: '微信号', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: false |
overflow: false |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 5, |
key: 5, |
||||||
prop: 'address', |
prop: 'address', |
||||||
label: '位置', |
label: '位置', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: false |
overflow: false |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 6, |
key: 6, |
||||||
prop: 'requirement', |
prop: 'requirement', |
||||||
label: '学员诉求', |
label: '学员诉求', |
||||||
visible: true, |
visible: true, |
||||||
overflow: false |
overflow: false |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 7, |
key: 7, |
||||||
prop: 'licenseType', |
prop: 'licenseType', |
||||||
label: '咨询车型', |
label: '咨询车型', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: false |
overflow: false |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 8, |
key: 8, |
||||||
prop: 'followTime', |
prop: 'followTime', |
||||||
label: '下次跟进时间', |
label: '下次跟进时间', |
||||||
width: 120, |
width: 120, |
||||||
visible: true, |
visible: true, |
||||||
overflow: false |
overflow: false |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 9, |
key: 9, |
||||||
prop: 'firstFollowUserName', |
prop: 'firstFollowUserName', |
||||||
label: '首次跟进人员', |
label: '首次跟进人员', |
||||||
width: 120, |
width: 120, |
||||||
visible: true, |
visible: true, |
||||||
overflow: false |
overflow: false |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 10, |
key: 10, |
||||||
prop: 'followUserName', |
prop: 'followUserName', |
||||||
label: '跟进人员', |
label: '跟进人员', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: false |
overflow: false |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 11, |
key: 11, |
||||||
prop: 'recentLook', |
prop: 'recentLook', |
||||||
label: '是否近期看场地', |
label: '是否近期看场地', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: false |
overflow: false |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 12, |
key: 12, |
||||||
prop: 'offlineReceiverName', |
prop: 'offlineReceiverName', |
||||||
label: '线下接待人员', |
label: '线下接待人员', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: false |
overflow: false |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 13, |
key: 13, |
||||||
prop: 'clueMemo', |
prop: 'clueMemo', |
||||||
label: '备注', |
label: '备注', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: true |
overflow: true |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 14, |
key: 14, |
||||||
prop: 'goodName', |
prop: 'goodName', |
||||||
label: '商品名称', |
label: '商品名称', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: true |
overflow: true |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 15, |
key: 15, |
||||||
prop: 'amountReceived', |
prop: 'amountReceived', |
||||||
label: '订单实收', |
label: '订单实收', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: true |
overflow: true |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
key: 16, |
key: 16, |
||||||
prop: 'writeOffTime', |
prop: 'writeOffTime', |
||||||
label: '核销时间', |
label: '核销时间', |
||||||
width: 140, |
width: 140, |
||||||
visible: true, |
visible: true, |
||||||
overflow: true |
overflow: true |
||||||
} |
} |
||||||
]; |
]; |
||||||
|
@ -0,0 +1,112 @@ |
|||||||
|
<template> |
||||||
|
<el-dialog title="分发" :close-on-click-modal="false" append-to-body :visible.sync="visible" width="600px" @close="closeDialog"> |
||||||
|
<el-form ref="dialogForm" :model="dialogForm" :rules="rules" label-width="110px"> |
||||||
|
<el-row> |
||||||
|
<el-col :span="24"> |
||||||
|
<el-form-item label="场地" prop="newPlaceList"> |
||||||
|
<span v-if="oldForm.placeNames">{{ oldForm.placeNames }}</span> |
||||||
|
|
||||||
|
<el-select v-model="dialogForm.newPlaceList" filterable multiple placeholder="请选择" clearable style="width: 100%;"> |
||||||
|
<el-option v-for="dict in placeOptions" :key="dict.placeId" :label="dict.name" :value="dict.placeId" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
</el-form> |
||||||
|
<span slot="footer" class="dialog-footer"> |
||||||
|
<el-button plain @click="(visible = false)">取消</el-button> |
||||||
|
<el-button v-jclick type="primary" :disabled="!canSubmit" @click="dialogFormSubmit()">确定</el-button> |
||||||
|
</span> |
||||||
|
</el-dialog> |
||||||
|
</template> |
||||||
|
<script> |
||||||
|
import { getCluePlaceList, saveCluePlace } from '@/api/zs/clue'; |
||||||
|
import { getAllPlaces } from '@/api/sch/place'; |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'DistributeFormDialog', |
||||||
|
|
||||||
|
data () { |
||||||
|
return { |
||||||
|
visible: false, |
||||||
|
canSubmit: true, |
||||||
|
dialogForm: {}, |
||||||
|
oldForm: {}, |
||||||
|
rules: { |
||||||
|
newPlaceList: { |
||||||
|
required: true, |
||||||
|
message: '场地不能为空不能为空', |
||||||
|
trigger: 'blur' |
||||||
|
} |
||||||
|
}, |
||||||
|
placeOptions: [] |
||||||
|
}; |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
init (info = undefined) { |
||||||
|
this.getPlaces(); |
||||||
|
this.visible = true; |
||||||
|
this.$nextTick(() => { |
||||||
|
this.resetDialogForm(); |
||||||
|
this.$refs['dialogForm'].resetFields(); |
||||||
|
if (info) { |
||||||
|
this.dialogForm.clueId = info; |
||||||
|
// 查询该线索的分发情况 |
||||||
|
this.getDistributePlaces(info); |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
resetDialogForm () { |
||||||
|
this.dialogForm = { |
||||||
|
oldPlaceList: [], |
||||||
|
newPlaceList: [], |
||||||
|
placeIdList: [], |
||||||
|
clueId: undefined |
||||||
|
}; |
||||||
|
this.oldForm = {}; |
||||||
|
}, |
||||||
|
closeDialog () { |
||||||
|
this.$emit('update:dialog.batchUpdateVisible', false); |
||||||
|
}, |
||||||
|
getDistributePlaces (clueId) { |
||||||
|
getCluePlaceList({ clueId: clueId }).then(resp => { |
||||||
|
if (resp.code == 200) { |
||||||
|
this.oldForm = resp.data; |
||||||
|
this.dialogForm.oldPlaceList = this.oldForm.placeIdList; |
||||||
|
if (this.oldForm.placeIdList && this.oldForm.placeIdList) { |
||||||
|
this.placeOptions = this.placeOptions.filter(item => this.oldForm.placeIdList.indexOf(item.placeId) == -1); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
// 表单提交 |
||||||
|
dialogFormSubmit () { |
||||||
|
this.$refs.dialogForm.validate((valid) => { |
||||||
|
if (valid) { |
||||||
|
this.canSubmit = false; |
||||||
|
this.dialogForm.placeIdList = this.dialogForm.oldPlaceList.concat(this.dialogForm.newPlaceList); |
||||||
|
// 校验完成,调接口 |
||||||
|
saveCluePlace(this.dialogForm) |
||||||
|
.then((resp) => { |
||||||
|
this.canSubmit = true; |
||||||
|
if (resp.code == 200) { |
||||||
|
this.$message.success('分发成功'); |
||||||
|
this.$emit('refreshDataList'); |
||||||
|
this.visible = false; |
||||||
|
} |
||||||
|
}) |
||||||
|
.catch(() => { |
||||||
|
this.canSubmit = true; |
||||||
|
}); |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
getPlaces () { |
||||||
|
getAllPlaces({ status: '0' }).then((resp) => { |
||||||
|
this.placeOptions = resp.data; |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
@ -0,0 +1,143 @@ |
|||||||
|
<template> |
||||||
|
<el-dialog title="邀约" :close-on-click-modal="false" append-to-body :visible.sync="visible" width="600px" @close="closeDialog"> |
||||||
|
<el-form ref="dialogForm" :model="dialogForm" :rules="rules" label-width="110px" :disabled="dialogForm.invitationId != undefined"> |
||||||
|
<el-form-item label="姓名" prop="name"> |
||||||
|
<el-input v-model="dialogForm.name" placeholder="请输入姓名" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="联系方式" prop="phone"> |
||||||
|
<el-input v-model="dialogForm.phone" placeholder="请输入联系方式" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="场地" prop="placeId"> |
||||||
|
<el-select v-model="dialogForm.placeId" filterable placeholder="请选择" clearable style="width: 100%;" @change="getCoaChes"> |
||||||
|
<el-option v-for="dict in placeOptions" :key="dict.placeId" :label="dict.name" :value="dict.placeId" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="约定时间" prop="invitationTime"> |
||||||
|
<el-date-picker clearable |
||||||
|
v-model="dialogForm.invitationTime" |
||||||
|
type="datetime" |
||||||
|
value-format="yyyy-MM-dd HH:mm" |
||||||
|
format="yyyy-MM-dd HH:mm" |
||||||
|
placeholder="请选择约定时间"> |
||||||
|
</el-date-picker> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="备注" prop="remark"> |
||||||
|
<el-input v-model="dialogForm.remark" type="textarea" placeholder="请输入" /> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
</el-form> |
||||||
|
<span slot="footer" class="dialog-footer"> |
||||||
|
<el-button plain @click="(visible = false)">取消</el-button> |
||||||
|
<el-button v-jclick type="primary" :disabled="!canSubmit" @click="dialogFormSubmit()">确定</el-button> |
||||||
|
</span> |
||||||
|
</el-dialog> |
||||||
|
</template> |
||||||
|
<script> |
||||||
|
import { addInvitation, getInvitationByClue } from '@/api/zs/invitation'; |
||||||
|
import { getAllPlaces } from '@/api/sch/place'; |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'InvitationFormDialog', |
||||||
|
|
||||||
|
data() { |
||||||
|
return { |
||||||
|
visible: false, |
||||||
|
canSubmit: true, |
||||||
|
dialogForm: { |
||||||
|
invitationId: undefined, |
||||||
|
clueId: undefined, |
||||||
|
name: undefined, |
||||||
|
phone: undefined, |
||||||
|
address: undefined, |
||||||
|
placeId: undefined, |
||||||
|
invitationTime: undefined, |
||||||
|
remark: undefined |
||||||
|
}, |
||||||
|
rules: { |
||||||
|
name: { required: true, message: '姓名不能为空', trigger: 'blur'}, |
||||||
|
phone: { required: true, message: '姓名不能为空', trigger: 'blur'}, |
||||||
|
placeId: { required: true, message: '场地不能为空', trigger: 'blur'}, |
||||||
|
placeId: { required: true, message: '场地不能为空', trigger: 'blur'}, |
||||||
|
invitationTime: { required: true, message: '约定时间不能为空', trigger: 'blur'} |
||||||
|
|
||||||
|
}, |
||||||
|
placeOptions:[] |
||||||
|
}; |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
init(info = undefined) { |
||||||
|
this.visible = true; |
||||||
|
this.getPlaces() |
||||||
|
this.$nextTick(() => { |
||||||
|
this.resetDialogForm(); |
||||||
|
this.$refs['dialogForm'].resetFields(); |
||||||
|
if (info) { |
||||||
|
this.dialogForm = { |
||||||
|
invitationId: undefined, |
||||||
|
clueId: info.clueId, |
||||||
|
name: info.name, |
||||||
|
phone: info.phone, |
||||||
|
address: info.address, |
||||||
|
placeId: undefined, |
||||||
|
invitationTime: undefined, |
||||||
|
remark: undefined |
||||||
|
}; |
||||||
|
if(info.clueId){ |
||||||
|
getInvitationByClue({clueId:info.clueId}).then(resp => { |
||||||
|
if(resp.data){ |
||||||
|
this.dialogForm = resp.data; |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
resetDialogForm() { |
||||||
|
this.dialogForm = { |
||||||
|
invitationId:undefined, |
||||||
|
clueId: undefined, |
||||||
|
name: undefined, |
||||||
|
phone: undefined, |
||||||
|
address: undefined, |
||||||
|
placeId: undefined, |
||||||
|
invitationTime: undefined, |
||||||
|
remark: undefined |
||||||
|
}; |
||||||
|
}, |
||||||
|
closeDialog() { |
||||||
|
this.$emit('update:dialog.batchUpdateVisible', false); |
||||||
|
}, |
||||||
|
async getInvitationInfo(clueId){ |
||||||
|
l |
||||||
|
}, |
||||||
|
// 表单提交 |
||||||
|
dialogFormSubmit() { |
||||||
|
this.$refs.dialogForm.validate((valid) => { |
||||||
|
if (valid) { |
||||||
|
this.canSubmit = false; |
||||||
|
// 校验完成,调接口 |
||||||
|
addInvitation(this.dialogForm) |
||||||
|
.then((resp) => { |
||||||
|
this.canSubmit = true; |
||||||
|
if (resp.code == 200) { |
||||||
|
this.$message.success('邀约成功'); |
||||||
|
this.$emit('refreshDataList'); |
||||||
|
this.visible = false; |
||||||
|
} |
||||||
|
}) |
||||||
|
.catch(() => { |
||||||
|
this.canSubmit = true; |
||||||
|
}); |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
getPlaces () { |
||||||
|
getAllPlaces({ status: '0' }).then((resp) => { |
||||||
|
this.placeOptions = resp.data; |
||||||
|
}); |
||||||
|
}, |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
|
@ -0,0 +1,70 @@ |
|||||||
|
<!-- |
||||||
|
* @Author: riverQiu |
||||||
|
* @Date: 2023-10-14 13:21:37 |
||||||
|
* @LastEditors: riverQiu |
||||||
|
* @LastEditTime: 2023-10-15 00:55:44 |
||||||
|
* @Description: |
||||||
|
--> |
||||||
|
<template> |
||||||
|
<el-dialog title="话术" :close-on-click-modal="false" append-to-body :visible.sync="visible" width="700px" height="700"> |
||||||
|
<div> |
||||||
|
<!-- 搜索框 --> |
||||||
|
<el-select v-model="skillId" placeholder="请选择关键词" filterable style="width: 90%;" @change="selectKey"> |
||||||
|
<el-option v-for="item in keyOptions" :key="item.skillId" :label="item.skillKey" :value="item.skillId" /> |
||||||
|
</el-select> <!-- 常用关键词 --> |
||||||
|
|
||||||
|
<!-- 话术内容 --> |
||||||
|
<el-card class="box-card"> |
||||||
|
|
||||||
|
<div class="text item"> |
||||||
|
<span v-html="content" /> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
</div> |
||||||
|
</el-dialog> |
||||||
|
</template> |
||||||
|
<script> |
||||||
|
import { getSkillKey, getSkill } from '@/api/system/skill'; |
||||||
|
export default { |
||||||
|
name: 'SkillDialog', |
||||||
|
data () { |
||||||
|
return { |
||||||
|
visible: false, |
||||||
|
loading: true, |
||||||
|
keyOptions: [], |
||||||
|
content: undefined, |
||||||
|
skillId: undefined |
||||||
|
}; |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
init () { |
||||||
|
this.visible = true; |
||||||
|
this.getSkillKeyOption(); |
||||||
|
}, |
||||||
|
getSkillKeyOption () { |
||||||
|
getSkillKey().then((resp) => { |
||||||
|
if (resp && resp.code === 200) { |
||||||
|
this.keyOptions = resp.data; |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
selectKey (item) { |
||||||
|
if (item) { |
||||||
|
getSkill(item).then((resp) => { |
||||||
|
if (resp && resp.code === 200) { |
||||||
|
this.content = resp.data.content; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.box-card { |
||||||
|
width: 500px; |
||||||
|
min-height: 100px; |
||||||
|
} |
||||||
|
</style> |
||||||
|
|
@ -0,0 +1,122 @@ |
|||||||
|
<template> |
||||||
|
<div class="app-container" style="width:90%;margin:auto;"> |
||||||
|
<!-- 添加或修改线索反馈对话框 --> |
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
||||||
|
<el-form-item label="学员姓名"> |
||||||
|
<span>{{ order.stuName }}</span> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="联系方式"> |
||||||
|
<span>{{ order.phone }}</span> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="地址"> |
||||||
|
<span>{{ order.address }}</span> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="接待人"> |
||||||
|
<span>{{ order.coachName }}</span> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="到场状态" prop="arrivalStatus"> |
||||||
|
<el-radio-group v-model="form.arrivalStatus" size="small" :disabled="type != 'JDR'"> |
||||||
|
<el-radio :label="1">未到场</el-radio> |
||||||
|
<el-radio :label="2">到场未成交</el-radio> |
||||||
|
<el-radio :label="3">到场已成交</el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="备注" prop="remark"> |
||||||
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" :disabled="type != 'JDR'" /> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
<div v-if="type === 'JDR'" style="text-align: center;"> |
||||||
|
<div style="text-align: center;"> |
||||||
|
<el-button type="primary" @click="submitForm">提 交</el-button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { getFeedbackDetailInfo, addFeedbackDetail, updateFeedbackDetail } from '@/api/zs/feedbackDetail'; |
||||||
|
|
||||||
|
import { getFeedbackOrder } from '@/api/zs/feedbackOrder'; |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'Follow', |
||||||
|
data () { |
||||||
|
return { |
||||||
|
// 遮罩层 |
||||||
|
loading: true, |
||||||
|
// 表单参数 |
||||||
|
form: {}, |
||||||
|
// 表单校验 |
||||||
|
rules: { |
||||||
|
}, |
||||||
|
order: {}, |
||||||
|
orderId: undefined, |
||||||
|
type: undefined |
||||||
|
}; |
||||||
|
}, |
||||||
|
created () { |
||||||
|
console.log(this.$route.query.no); |
||||||
|
this.type = this.$route.query.type; |
||||||
|
this.reset(); |
||||||
|
this.getFeedbackOrder(this.$route.query.no); |
||||||
|
this.getFeedbackDetailInfo(this.$route.query.no); |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
/** 查询线索反馈表单 */ |
||||||
|
getFeedbackOrder (orderId) { |
||||||
|
this.loading = true; |
||||||
|
getFeedbackOrder(orderId).then(response => { |
||||||
|
this.order = response.data; |
||||||
|
if (this.order.clueId) { |
||||||
|
this.form.clueId = this.order.clueId; |
||||||
|
} |
||||||
|
if (this.order.coachId) { |
||||||
|
this.form.coachId = this.order.coachId; |
||||||
|
} |
||||||
|
if (this.order.orderId) { |
||||||
|
this.form.orderId = this.order.orderId; |
||||||
|
} |
||||||
|
this.loading = false; |
||||||
|
}); |
||||||
|
}, |
||||||
|
/** 查询线索反馈表单 */ |
||||||
|
getFeedbackDetailInfo (orderId) { |
||||||
|
this.loading = true; |
||||||
|
getFeedbackDetailInfo({ orderId: orderId, feedbackType: 2 }).then(response => { |
||||||
|
if (response.data) { |
||||||
|
this.form = response.data; |
||||||
|
} |
||||||
|
this.loading = false; |
||||||
|
}); |
||||||
|
}, |
||||||
|
// 表单重置 |
||||||
|
reset () { |
||||||
|
this.form = { |
||||||
|
feedbackId: null, |
||||||
|
clueId: null, |
||||||
|
feedbackType: 2, |
||||||
|
coachId: null, |
||||||
|
arrivalStatus: 1, |
||||||
|
remark: null |
||||||
|
}; |
||||||
|
this.resetForm('form'); |
||||||
|
}, |
||||||
|
/** 提交按钮 */ |
||||||
|
submitForm () { |
||||||
|
this.$refs['form'].validate(valid => { |
||||||
|
if (valid) { |
||||||
|
if (this.form.feedbackId != null) { |
||||||
|
updateFeedbackDetail(this.form).then(response => { |
||||||
|
this.$modal.msgSuccess('提交成功'); |
||||||
|
}); |
||||||
|
} else { |
||||||
|
addFeedbackDetail(this.form).then(response => { |
||||||
|
this.$modal.msgSuccess('提交成功'); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
@ -0,0 +1,126 @@ |
|||||||
|
<template> |
||||||
|
<div class="app-container" style="width:90%;margin:auto;"> |
||||||
|
<!-- 添加或修改线索反馈对话框 --> |
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
||||||
|
<el-form-item label="学员姓名"> |
||||||
|
<span>{{ order.stuName }}</span> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="联系方式"> |
||||||
|
<span>{{ order.phone }}</span> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="地址"> |
||||||
|
<span>{{ order.address }}</span> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="接待人" prop="coachId"> |
||||||
|
<span>{{ order.coachName }}</span> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="是否联系" prop="isContact"> |
||||||
|
<el-radio-group v-model="form.isContact" size="small" :disabled="type != 'JDR'"> |
||||||
|
<el-radio :label="1">是</el-radio> |
||||||
|
<el-radio :label="0">否</el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="到场时间" prop="arrivalTime"> |
||||||
|
<el-date-picker v-model="form.arrivalTime" :disabled="type != 'JDR'" clearable type="datetime" format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" placeholder="请选择到场时间" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="备注" prop="remark"> |
||||||
|
<el-input v-model="form.remark" :disabled="type != 'JDR'" type="textarea" placeholder="请输入内容" /> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
<div v-if="type === 'JDR'" style="text-align: center;"> |
||||||
|
<div style="text-align: center;"> |
||||||
|
<el-button type="primary" @click="submitForm">提 交</el-button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { getFeedbackDetailInfo, addFeedbackDetail, updateFeedbackDetail } from '@/api/zs/feedbackDetail'; |
||||||
|
|
||||||
|
import { getFeedbackOrder } from '@/api/zs/feedbackOrder'; |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'Follow', |
||||||
|
data () { |
||||||
|
return { |
||||||
|
// 遮罩层 |
||||||
|
loading: true, |
||||||
|
// 表单参数 |
||||||
|
form: {}, |
||||||
|
// 表单校验 |
||||||
|
rules: { |
||||||
|
}, |
||||||
|
order: {}, |
||||||
|
orderId: undefined, |
||||||
|
type: undefined |
||||||
|
}; |
||||||
|
}, |
||||||
|
created () { |
||||||
|
console.log(this.$route.query.no); |
||||||
|
this.type = this.$route.query.type; |
||||||
|
this.reset(); |
||||||
|
this.getFeedbackOrder(this.$route.query.no); |
||||||
|
this.getFeedbackDetailInfo(this.$route.query.no); |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
/** 查询线索反馈表单 */ |
||||||
|
getFeedbackOrder (orderId) { |
||||||
|
this.loading = true; |
||||||
|
getFeedbackOrder(orderId).then(response => { |
||||||
|
this.order = response.data; |
||||||
|
if (this.order.clueId) { |
||||||
|
this.form.clueId = this.order.clueId; |
||||||
|
} |
||||||
|
if (this.order.coachId) { |
||||||
|
this.form.coachId = this.order.coachId; |
||||||
|
} |
||||||
|
if (this.order.orderId) { |
||||||
|
this.form.orderId = this.order.orderId; |
||||||
|
} |
||||||
|
this.loading = false; |
||||||
|
}); |
||||||
|
}, |
||||||
|
/** 查询线索反馈表单 */ |
||||||
|
getFeedbackDetailInfo (orderId) { |
||||||
|
this.loading = true; |
||||||
|
getFeedbackDetailInfo({ orderId: orderId, feedbackType: 1 }).then(response => { |
||||||
|
if (response.data) { |
||||||
|
this.form = response.data; |
||||||
|
} |
||||||
|
this.loading = false; |
||||||
|
}); |
||||||
|
}, |
||||||
|
// 表单重置 |
||||||
|
reset () { |
||||||
|
this.form = { |
||||||
|
feedbackId: null, |
||||||
|
clueId: null, |
||||||
|
feedbackType: 1, |
||||||
|
coachId: null, |
||||||
|
feedbackTime: null, |
||||||
|
isContact: 0, |
||||||
|
arrivalTime: null, |
||||||
|
remark: null |
||||||
|
}; |
||||||
|
this.resetForm('form'); |
||||||
|
}, |
||||||
|
/** 提交按钮 */ |
||||||
|
submitForm () { |
||||||
|
this.$refs['form'].validate(valid => { |
||||||
|
if (valid) { |
||||||
|
if (this.form.feedbackId != null) { |
||||||
|
updateFeedbackDetail(this.form).then(response => { |
||||||
|
this.$modal.msgSuccess('提交成功'); |
||||||
|
}); |
||||||
|
} else { |
||||||
|
addFeedbackDetail(this.form).then(response => { |
||||||
|
this.$modal.msgSuccess('提交成功'); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
@ -0,0 +1,253 @@ |
|||||||
|
<template> |
||||||
|
<div class="app-container"> |
||||||
|
<el-form v-show="showSearch" ref="queryForm" :model="queryParams" size="small" :inline="true" label-width="68px"> |
||||||
|
<el-form-item label="线索id" prop="clueId"> |
||||||
|
<el-input v-model="queryParams.clueId" placeholder="请输入线索id" clearable @keyup.enter.native="handleQuery" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="教练id" prop="coachId"> |
||||||
|
<el-input v-model="queryParams.coachId" placeholder="请输入教练id" clearable @keyup.enter.native="handleQuery" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="反馈时间" prop="feedbackTime"> |
||||||
|
<el-date-picker v-model="queryParams.feedbackTime" clearable type="date" value-format="yyyy-MM-dd" placeholder="请选择反馈时间" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="是否联系" prop="isContact"> |
||||||
|
<el-input v-model="queryParams.isContact" placeholder="请输入是否联系" clearable @keyup.enter.native="handleQuery" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="到场时间" prop="arrivalTime"> |
||||||
|
<el-date-picker v-model="queryParams.arrivalTime" clearable type="date" value-format="yyyy-MM-dd" placeholder="请选择到场时间" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item> |
||||||
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |
||||||
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8"> |
||||||
|
<el-col :span="1.5"> |
||||||
|
<el-button v-hasPermi="['system:feedback:add']" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button> |
||||||
|
</el-col> |
||||||
|
<el-col :span="1.5"> |
||||||
|
<el-button v-hasPermi="['system:feedback:edit']" type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate">修改</el-button> |
||||||
|
</el-col> |
||||||
|
<el-col :span="1.5"> |
||||||
|
<el-button v-hasPermi="['system:feedback:remove']" type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">删除</el-button> |
||||||
|
</el-col> |
||||||
|
<el-col :span="1.5"> |
||||||
|
<el-button v-hasPermi="['system:feedback:export']" type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button> |
||||||
|
</el-col> |
||||||
|
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" /> |
||||||
|
</el-row> |
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="feedbackList" @selection-change="handleSelectionChange"> |
||||||
|
<el-table-column type="selection" width="55" align="center" /> |
||||||
|
<el-table-column label="${comment}" align="center" prop="feedbackId" /> |
||||||
|
<el-table-column label="线索id" align="center" prop="clueId" /> |
||||||
|
<el-table-column label="反馈类型 1 跟进反馈 2 到场负反馈" align="center" prop="feedbackType" /> |
||||||
|
<el-table-column label="教练id" align="center" prop="coachId" /> |
||||||
|
<el-table-column label="反馈内容" align="center" prop="content" /> |
||||||
|
<el-table-column label="反馈时间" align="center" prop="feedbackTime" width="180"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<span>{{ parseTime(scope.row.feedbackTime, '{y}-{m}-{d}') }}</span> |
||||||
|
</template>00000000000000000000000 |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="是否联系" align="center" prop="isContact" /> |
||||||
|
<el-table-column label="到场时间" align="center" prop="arrivalTime" width="180"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<span>{{ parseTime(scope.row.arrivalTime, '{y}-{m}-{d}') }}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="到场状态" align="center" prop="arrivalStatus" /> |
||||||
|
<el-table-column label="备注" align="center" prop="remark" /> |
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<el-button v-hasPermi="['system:feedback:edit']" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button> |
||||||
|
<el-button v-hasPermi="['system:feedback:remove']" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
|
||||||
|
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> |
||||||
|
|
||||||
|
<!-- 添加或修改线索反馈对话框 --> |
||||||
|
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> |
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
||||||
|
<el-form-item label="线索id" prop="clueId"> |
||||||
|
<el-input v-model="form.clueId" placeholder="请输入线索id" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="教练id" prop="coachId"> |
||||||
|
<el-input v-model="form.coachId" placeholder="请输入教练id" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="反馈内容"> |
||||||
|
<editor v-model="form.content" :min-height="192" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="反馈时间" prop="feedbackTime"> |
||||||
|
<el-date-picker v-model="form.feedbackTime" clearable type="date" value-format="yyyy-MM-dd" placeholder="请选择反馈时间" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="是否联系" prop="isContact"> |
||||||
|
<el-input v-model="form.isContact" placeholder="请输入是否联系" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="到场时间" prop="arrivalTime"> |
||||||
|
<el-date-picker v-model="form.arrivalTime" clearable type="date" value-format="yyyy-MM-dd" placeholder="请选择到场时间" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="备注" prop="remark"> |
||||||
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
<div slot="footer" class="dialog-footer"> |
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button> |
||||||
|
<el-button @click="cancel">取 消</el-button> |
||||||
|
</div> |
||||||
|
</el-dialog> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { listFeedback, getFeedback, delFeedback, addFeedback, updateFeedback } from '@/api/zs/feedback'; |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'Feedback', |
||||||
|
data () { |
||||||
|
return { |
||||||
|
// 遮罩层 |
||||||
|
loading: true, |
||||||
|
// 选中数组 |
||||||
|
ids: [], |
||||||
|
// 非单个禁用 |
||||||
|
single: true, |
||||||
|
// 非多个禁用 |
||||||
|
multiple: true, |
||||||
|
// 显示搜索条件 |
||||||
|
showSearch: true, |
||||||
|
// 总条数 |
||||||
|
total: 0, |
||||||
|
// 线索反馈表格数据 |
||||||
|
feedbackList: [], |
||||||
|
// 弹出层标题 |
||||||
|
title: '', |
||||||
|
// 是否显示弹出层 |
||||||
|
open: false, |
||||||
|
// 查询参数 |
||||||
|
queryParams: { |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 10, |
||||||
|
clueId: null, |
||||||
|
feedbackType: null, |
||||||
|
coachId: null, |
||||||
|
content: null, |
||||||
|
feedbackTime: null, |
||||||
|
isContact: null, |
||||||
|
arrivalTime: null, |
||||||
|
arrivalStatus: null |
||||||
|
}, |
||||||
|
// 表单参数 |
||||||
|
form: {}, |
||||||
|
// 表单校验 |
||||||
|
rules: { |
||||||
|
} |
||||||
|
}; |
||||||
|
}, |
||||||
|
created () { |
||||||
|
this.getList(); |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
/** 查询线索反馈列表 */ |
||||||
|
getList () { |
||||||
|
this.loading = true; |
||||||
|
listFeedback(this.queryParams).then(response => { |
||||||
|
this.feedbackList = response.rows; |
||||||
|
this.total = response.total; |
||||||
|
this.loading = false; |
||||||
|
}); |
||||||
|
}, |
||||||
|
// 取消按钮 |
||||||
|
cancel () { |
||||||
|
this.open = false; |
||||||
|
this.reset(); |
||||||
|
}, |
||||||
|
// 表单重置 |
||||||
|
reset () { |
||||||
|
this.form = { |
||||||
|
feedbackId: null, |
||||||
|
clueId: null, |
||||||
|
feedbackType: null, |
||||||
|
coachId: null, |
||||||
|
content: null, |
||||||
|
feedbackTime: null, |
||||||
|
isContact: null, |
||||||
|
arrivalTime: null, |
||||||
|
arrivalStatus: 0, |
||||||
|
remark: null |
||||||
|
}; |
||||||
|
this.resetForm('form'); |
||||||
|
}, |
||||||
|
/** 搜索按钮操作 */ |
||||||
|
handleQuery () { |
||||||
|
this.queryParams.pageNum = 1; |
||||||
|
this.getList(); |
||||||
|
}, |
||||||
|
/** 重置按钮操作 */ |
||||||
|
resetQuery () { |
||||||
|
this.resetForm('queryForm'); |
||||||
|
this.handleQuery(); |
||||||
|
}, |
||||||
|
// 多选框选中数据 |
||||||
|
handleSelectionChange (selection) { |
||||||
|
this.ids = selection.map(item => item.feedbackId); |
||||||
|
this.single = selection.length !== 1; |
||||||
|
this.multiple = !selection.length; |
||||||
|
}, |
||||||
|
/** 新增按钮操作 */ |
||||||
|
handleAdd () { |
||||||
|
this.reset(); |
||||||
|
this.open = true; |
||||||
|
this.title = '添加线索反馈'; |
||||||
|
}, |
||||||
|
/** 修改按钮操作 */ |
||||||
|
handleUpdate (row) { |
||||||
|
this.reset(); |
||||||
|
const feedbackId = row.feedbackId || this.ids; |
||||||
|
getFeedback(feedbackId).then(response => { |
||||||
|
this.form = response.data; |
||||||
|
this.open = true; |
||||||
|
this.title = '修改线索反馈'; |
||||||
|
}); |
||||||
|
}, |
||||||
|
/** 提交按钮 */ |
||||||
|
submitForm () { |
||||||
|
this.$refs['form'].validate(valid => { |
||||||
|
if (valid) { |
||||||
|
if (this.form.feedbackId != null) { |
||||||
|
updateFeedback(this.form).then(response => { |
||||||
|
this.$modal.msgSuccess('修改成功'); |
||||||
|
this.open = false; |
||||||
|
this.getList(); |
||||||
|
}); |
||||||
|
} else { |
||||||
|
addFeedback(this.form).then(response => { |
||||||
|
this.$modal.msgSuccess('新增成功'); |
||||||
|
this.open = false; |
||||||
|
this.getList(); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
/** 删除按钮操作 */ |
||||||
|
handleDelete (row) { |
||||||
|
const feedbackIds = row.feedbackId || this.ids; |
||||||
|
this.$modal.confirm('是否确认删除线索反馈编号为"' + feedbackIds + '"的数据项?').then(function () { |
||||||
|
return delFeedback(feedbackIds); |
||||||
|
}).then(() => { |
||||||
|
this.getList(); |
||||||
|
this.$modal.msgSuccess('删除成功'); |
||||||
|
}).catch(() => { }); |
||||||
|
}, |
||||||
|
/** 导出按钮操作 */ |
||||||
|
handleExport () { |
||||||
|
this.download('system/feedback/export', { |
||||||
|
...this.queryParams |
||||||
|
}, `feedback_${new Date().getTime()}.xlsx`); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
@ -0,0 +1,104 @@ |
|||||||
|
<template> |
||||||
|
<!-- 结算对话框 --> |
||||||
|
<el-dialog v-if="visible" v-loading="signLoading" title="结算" :visible.sync="visible" width="600px" append-to-body :close-on-click-modal="false" style> |
||||||
|
<el-form ref="modalForm" :model="modalForm" :rules="modalRules" label-width="110px" > |
||||||
|
<el-row> |
||||||
|
|
||||||
|
<!-- <el-col :span="24"> |
||||||
|
<el-form-item label="学员姓名" prop="name"> |
||||||
|
<el-input v-model="modalForm.name" :disabled="modalForm.clueId != undefined" /> |
||||||
|
</el-form-item> |
||||||
|
</el-col> --> |
||||||
|
<el-col :span="24"> |
||||||
|
<el-form-item label="结算金额" prop="settlementMoney"> |
||||||
|
<el-input v-model="modalForm.settlementMoney" /> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
</el-form> |
||||||
|
<span slot="footer"> |
||||||
|
<el-button @click="visible = false">取 消</el-button> |
||||||
|
<el-button type="primary" :disabled="!canSubmit" @click="handleSubmit">提 交</el-button> |
||||||
|
</span> |
||||||
|
</el-dialog> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { updateSign } from '@/api/zs/sign'; |
||||||
|
import { validateMoney } from '@/utils/validate'; |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'SettlementDialog', |
||||||
|
data() { |
||||||
|
return { |
||||||
|
admin: localStorage.getItem('admin'), |
||||||
|
preUrl: process.env.VUE_APP_BASE_API, |
||||||
|
userId: localStorage.getItem('userId'), |
||||||
|
visible: false, |
||||||
|
signLoading: false, |
||||||
|
modalForm: {}, |
||||||
|
modalRules: { |
||||||
|
settlementMoney: [{ required: true, message: '结算金额不为空', trigger: 'blur' }, |
||||||
|
{ required: true, validator: validateMoney, trigger: 'blur' }] |
||||||
|
}, |
||||||
|
}; |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
init(info = undefined) { |
||||||
|
this.canSubmit = true; |
||||||
|
this.$nextTick(() => { |
||||||
|
this.resetForm('modalForm'); |
||||||
|
if (info && info.signId) { |
||||||
|
this.modalForm = {... info} |
||||||
|
} |
||||||
|
this.visible = true; |
||||||
|
}); |
||||||
|
}, |
||||||
|
// 重置表单 |
||||||
|
resetForm() { |
||||||
|
this.modalForm = { |
||||||
|
signId: undefined, |
||||||
|
settlementMoney: undefined, |
||||||
|
}; |
||||||
|
}, |
||||||
|
handleSubmit() { |
||||||
|
// 保存结算表 |
||||||
|
this.$refs.modalForm.validate((valid) => { |
||||||
|
if (valid) { |
||||||
|
this.canSubmit = false; |
||||||
|
updateSign(this.modalForm).then((resp) => { |
||||||
|
if (resp.code == 200) { |
||||||
|
this.$message.success('提交成功'); |
||||||
|
this.visible = false; |
||||||
|
this.$emit('refreshDataList'); |
||||||
|
} else { |
||||||
|
this.canSubmit = true; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
|
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
.demo-image__item { |
||||||
|
width: 100px; |
||||||
|
height: 100px; |
||||||
|
display: inline-block; |
||||||
|
} |
||||||
|
|
||||||
|
.image-list-item { |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
.el-upload--picture-card { |
||||||
|
width: 100px !important; |
||||||
|
height: 100px !important; |
||||||
|
} |
||||||
|
</style> |
||||||
|
|
||||||
|
|
Loading…
Reference in new issue