提交
This commit is contained in:
26
src/api/clue/skill.js
Normal file
26
src/api/clue/skill.js
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 获得列表
|
||||||
|
export const getSkillPage = (params) => {
|
||||||
|
return request.get({ url: '/admin-api/crm/skill/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建
|
||||||
|
export const createSkill = (data) => {
|
||||||
|
return request.post({ url: '/admin-api/crm/skill/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新
|
||||||
|
export const updateSkill = (data) => {
|
||||||
|
return request.put({ url: '/admin-api/crm/skill/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除
|
||||||
|
export const deleteSkill = (id) => {
|
||||||
|
return request.delete({ url: `/admin-api/crm/skill/delete?id=${id}` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得
|
||||||
|
export const getSkill = (id) => {
|
||||||
|
return request.get({ url: `/admin-api/crm/skill/get?id=${id}` })
|
||||||
|
}
|
||||||
@@ -43,14 +43,14 @@
|
|||||||
|
|
||||||
<div class="ml-20px" style="width: 300px">
|
<div class="ml-20px" style="width: 300px">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="keyword"
|
v-model="skillSearch.question"
|
||||||
placeholder="请输入关键字查询关键话术"
|
placeholder="请输入关键字查询关键话术"
|
||||||
clearable
|
clearable
|
||||||
@keyup.enter="filterList"
|
@keyup.enter="getSkillList"
|
||||||
/>
|
/>
|
||||||
<el-collapse v-model="activeQues" :accordion="false">
|
<el-collapse v-model="activeQues" :accordion="false">
|
||||||
<el-collapse-item
|
<el-collapse-item
|
||||||
v-for="item in showList"
|
v-for="item in skillList"
|
||||||
:key="item.skillId"
|
:key="item.skillId"
|
||||||
:title="item.question"
|
:title="item.question"
|
||||||
:name="item.skillId"
|
:name="item.skillId"
|
||||||
@@ -58,6 +58,14 @@
|
|||||||
<div v-dompurify-html="item.content"></div>
|
<div v-dompurify-html="item.content"></div>
|
||||||
</el-collapse-item>
|
</el-collapse-item>
|
||||||
</el-collapse>
|
</el-collapse>
|
||||||
|
<Pagination
|
||||||
|
v-model:limit="skillSearch.pageSize"
|
||||||
|
v-model:page="skillSearch.pageNo"
|
||||||
|
:total="skillCount"
|
||||||
|
small
|
||||||
|
layout="total, prev, pager, next, jumper"
|
||||||
|
@pagination="getSkillList"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
@@ -70,6 +78,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="DialogFollow">
|
<script setup name="DialogFollow">
|
||||||
|
import { getSkillPage } from '@/api/clue/skill'
|
||||||
import { createFollow } from '@/api/clue/followRecord'
|
import { createFollow } from '@/api/clue/followRecord'
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
@@ -104,203 +113,22 @@ function resetForm(clueId) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const resultList = [
|
const skillList = ref([])
|
||||||
{
|
|
||||||
searchValue: null,
|
|
||||||
createBy: null,
|
|
||||||
createTime: null,
|
|
||||||
updateBy: null,
|
|
||||||
updateTime: null,
|
|
||||||
remark: null,
|
|
||||||
params: {},
|
|
||||||
orderName: null,
|
|
||||||
orderType: null,
|
|
||||||
skillId: 1,
|
|
||||||
deptId: 167,
|
|
||||||
question: '暂时先看题的',
|
|
||||||
skillKey: '先看科目一',
|
|
||||||
keyList: ['先看科目一'],
|
|
||||||
content:
|
|
||||||
'<p>科目一的题目不难的,等会可以加个微信给您发一些做题技巧,我们驾校离你也很近,后面您计划找驾校报名了可以接您来我们驾校实地看看的</p>',
|
|
||||||
status: 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
searchValue: null,
|
|
||||||
createBy: null,
|
|
||||||
createTime: null,
|
|
||||||
updateBy: null,
|
|
||||||
updateTime: null,
|
|
||||||
remark: null,
|
|
||||||
params: {},
|
|
||||||
orderName: null,
|
|
||||||
orderType: null,
|
|
||||||
skillId: 2,
|
|
||||||
deptId: 167,
|
|
||||||
question: '你们怎么练车的',
|
|
||||||
skillKey: '练车人数',
|
|
||||||
keyList: ['练车人数'],
|
|
||||||
content:
|
|
||||||
'<p>我们驾校这边练车是自己提前在微信上跟教练约时间来练车的,科二练车的时候到你练车了是你一个人一辆车,教练一对一教学的,也可以一对二,不用排队等的</p>',
|
|
||||||
status: 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
searchValue: null,
|
|
||||||
createBy: null,
|
|
||||||
createTime: null,
|
|
||||||
updateBy: null,
|
|
||||||
updateTime: null,
|
|
||||||
remark: null,
|
|
||||||
params: {},
|
|
||||||
orderName: null,
|
|
||||||
orderType: null,
|
|
||||||
skillId: 3,
|
|
||||||
deptId: 167,
|
|
||||||
question: '教练怎么样 凶嘛',
|
|
||||||
skillKey: '教练凶',
|
|
||||||
keyList: ['教练凶'],
|
|
||||||
content:
|
|
||||||
'<p>我们驾校教练都是驾校本部教练,也都是经过正规培训上岗的,脾气比较温和幽默的,不存在凶学员的情况,学车氛围也比较好;学员也不需要给教练送礼的</p>',
|
|
||||||
status: 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
searchValue: null,
|
|
||||||
createBy: null,
|
|
||||||
createTime: null,
|
|
||||||
updateBy: null,
|
|
||||||
updateTime: null,
|
|
||||||
remark: null,
|
|
||||||
params: {},
|
|
||||||
orderName: null,
|
|
||||||
orderType: null,
|
|
||||||
skillId: 4,
|
|
||||||
deptId: 167,
|
|
||||||
question: '驾校通过率咋样',
|
|
||||||
skillKey: '通过率',
|
|
||||||
keyList: ['通过率'],
|
|
||||||
content:
|
|
||||||
'<p>我们驾校在合肥也是老牌驾校的了,在合肥干了十几年了,并且拥有自家考场,科二科三考试都在我们自家考场考试,所以通过率一直非常高</p>',
|
|
||||||
status: 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
searchValue: null,
|
|
||||||
createBy: null,
|
|
||||||
createTime: null,
|
|
||||||
updateBy: null,
|
|
||||||
updateTime: null,
|
|
||||||
remark: null,
|
|
||||||
params: {},
|
|
||||||
orderName: null,
|
|
||||||
orderType: null,
|
|
||||||
skillId: 5,
|
|
||||||
deptId: 167,
|
|
||||||
question: '可以晚上练车吗?',
|
|
||||||
skillKey: '晚上练车',
|
|
||||||
keyList: ['晚上练车'],
|
|
||||||
content:
|
|
||||||
'<p>我们驾校练车时间是根据学员的时间来安排的,但是晚上练车视线不太好,因为考试的时候也是白天嘛,建议最好是白天过来练车,然后等熟练了后期可以让教练加加班晚上</p>',
|
|
||||||
status: 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
searchValue: null,
|
|
||||||
createBy: null,
|
|
||||||
createTime: null,
|
|
||||||
updateBy: null,
|
|
||||||
updateTime: null,
|
|
||||||
remark: null,
|
|
||||||
params: {},
|
|
||||||
orderName: null,
|
|
||||||
orderType: null,
|
|
||||||
skillId: 6,
|
|
||||||
deptId: 167,
|
|
||||||
question: '大学生有优惠嘛',
|
|
||||||
skillKey: '学生优惠',
|
|
||||||
keyList: ['学生优惠'],
|
|
||||||
content: '<p>学生我们驾校是有优惠的,而且我们驾校有专设学生班,练车不用排队,随到随练的</p>',
|
|
||||||
status: 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
searchValue: null,
|
|
||||||
createBy: null,
|
|
||||||
createTime: null,
|
|
||||||
updateBy: null,
|
|
||||||
updateTime: null,
|
|
||||||
remark: null,
|
|
||||||
params: {},
|
|
||||||
orderName: null,
|
|
||||||
orderType: null,
|
|
||||||
skillId: 7,
|
|
||||||
deptId: 167,
|
|
||||||
question: '拿证时间多久',
|
|
||||||
skillKey: '拿证时间',
|
|
||||||
keyList: ['拿证时间'],
|
|
||||||
content: '<p>C1手动挡正常拿证时间45天左右拿证,C2自动挡正常35天左右拿证</p>',
|
|
||||||
status: 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
searchValue: null,
|
|
||||||
createBy: null,
|
|
||||||
createTime: null,
|
|
||||||
updateBy: null,
|
|
||||||
updateTime: null,
|
|
||||||
remark: null,
|
|
||||||
params: {},
|
|
||||||
orderName: null,
|
|
||||||
orderType: null,
|
|
||||||
skillId: 8,
|
|
||||||
deptId: 167,
|
|
||||||
question: '驾校有熟人',
|
|
||||||
skillKey: '熟人',
|
|
||||||
keyList: ['熟人'],
|
|
||||||
content:
|
|
||||||
'<p>你朋友认识的人是教练还是驾校里面工作人员呢,驾校场地在哪呢 学车肯定是要对比的 要个近的合适的,我们驾校离你很近,而且学费目前也在做活动比较优惠,您可以对比一下的,找驾校也是可以自己来现场看过后再决定的</p>',
|
|
||||||
status: 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
searchValue: null,
|
|
||||||
createBy: null,
|
|
||||||
createTime: null,
|
|
||||||
updateBy: null,
|
|
||||||
updateTime: null,
|
|
||||||
remark: null,
|
|
||||||
params: {},
|
|
||||||
orderName: null,
|
|
||||||
orderType: null,
|
|
||||||
skillId: 9,
|
|
||||||
deptId: 167,
|
|
||||||
question: '考试地点在哪',
|
|
||||||
skillKey: '考试地点',
|
|
||||||
keyList: ['考试地点'],
|
|
||||||
content:
|
|
||||||
'<p>科一和科四是统一要去滨湖车管所考试的,科二科三合肥市总共六个考场,科二和科三考试是就近安排考场考试的,这样考试也方便些</p>',
|
|
||||||
status: 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
searchValue: null,
|
|
||||||
createBy: null,
|
|
||||||
createTime: null,
|
|
||||||
updateBy: null,
|
|
||||||
updateTime: null,
|
|
||||||
remark: null,
|
|
||||||
params: {},
|
|
||||||
orderName: null,
|
|
||||||
orderType: null,
|
|
||||||
skillId: 10,
|
|
||||||
deptId: 167,
|
|
||||||
question: '没时间练车',
|
|
||||||
skillKey: '没时间学车',
|
|
||||||
keyList: ['没时间学车'],
|
|
||||||
content:
|
|
||||||
'<p>我们驾校练车时间根据学员时间来安排,并且也不用每天都来的,一周抽时间来练个三四次就可以的,每次来一个小时这样,科二来个十来次 科三来个十来次就行,耽误不了你太多时间的</p>',
|
|
||||||
status: 2
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
const showList = ref(resultList)
|
|
||||||
const keyword = ref('')
|
|
||||||
const activeQues = ref('')
|
const activeQues = ref('')
|
||||||
|
|
||||||
function filterList() {
|
const skillSearch = ref({
|
||||||
showList.value = resultList.filter((it) => it.question.includes(keyword.value))
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
question: undefined
|
||||||
|
})
|
||||||
|
|
||||||
|
const skillCount = ref(0)
|
||||||
|
|
||||||
|
function getSkillList() {
|
||||||
|
getSkillPage(skillSearch.value).then((data) => {
|
||||||
|
skillList.value = data.list
|
||||||
|
skillCount.value = data.total
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleSave() {
|
async function handleSave() {
|
||||||
@@ -320,6 +148,10 @@ async function handleSave() {
|
|||||||
formLoading.value = false
|
formLoading.value = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getSkillList()
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped></style>
|
<style lang="scss" scoped></style>
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<b class="text-18px" style="line-height: 36px">{{ item.operateUserName }}</b>
|
<b class="text-18px" style="line-height: 36px">{{ item.operateUserName }}</b>
|
||||||
</div>
|
</div>
|
||||||
<div>{{ item.centent }}</div>
|
<div>{{ item.content }}</div>
|
||||||
<div class="flex mt-10px" style="align-items: center">
|
<div class="flex mt-10px" style="align-items: center">
|
||||||
<div class="flex" style="color: #666; align-items: center">
|
<div class="flex" style="color: #666; align-items: center">
|
||||||
<Icon icon="ep:clock" class="mr-5px" />
|
<Icon icon="ep:clock" class="mr-5px" />
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
<span>操作人:{{ item.operateUserName }}</span>
|
<span>操作人:{{ item.operateUserName }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="pt-5px pb-5px">
|
<div class="pt-5px pb-5px">
|
||||||
<span>{{ item.centent }}</span>
|
<span>{{ item.content }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex" style="align-items: center">
|
<div class="flex" style="align-items: center">
|
||||||
<Icon icon="ep:clock" class="mr-5px" />
|
<Icon icon="ep:clock" class="mr-5px" />
|
||||||
@@ -182,7 +182,7 @@ function getFollowList() {
|
|||||||
FollowApi.getFollowList({ clueId: clueId.value }).then((data) => {
|
FollowApi.getFollowList({ clueId: clueId.value }).then((data) => {
|
||||||
followRecordList.value = data.map((item) => ({
|
followRecordList.value = data.map((item) => ({
|
||||||
operateUserName: item.operateUserName,
|
operateUserName: item.operateUserName,
|
||||||
centent: item.centent,
|
content: item.content,
|
||||||
operateDate: formatDate(item.operateTime),
|
operateDate: formatDate(item.operateTime),
|
||||||
followTime: formatDate(item.operateTime, 'YYYY-MM-DD HH:mm'),
|
followTime: formatDate(item.operateTime, 'YYYY-MM-DD HH:mm'),
|
||||||
nextFollowTime: formatDate(item.nextFollowTime)
|
nextFollowTime: formatDate(item.nextFollowTime)
|
||||||
@@ -197,7 +197,7 @@ async function open(id) {
|
|||||||
ClueApi.getOpearateRecord({ clueId: id }).then((data) => {
|
ClueApi.getOpearateRecord({ clueId: id }).then((data) => {
|
||||||
operateRecordList.value = data.map((item) => ({
|
operateRecordList.value = data.map((item) => ({
|
||||||
operateUserName: item.operateUserName,
|
operateUserName: item.operateUserName,
|
||||||
centent: item.centent,
|
content: item.content,
|
||||||
operateDate: formatDate(item.operateTime),
|
operateDate: formatDate(item.operateTime),
|
||||||
followTime: formatDate(item.operateTime, 'YYYY-MM-DD HH:mm')
|
followTime: formatDate(item.operateTime, 'YYYY-MM-DD HH:mm')
|
||||||
}))
|
}))
|
||||||
|
|||||||
Reference in New Issue
Block a user