salary
qsh 5 months ago
parent f6dc5884ba
commit d22a380612
  1. 26
      src/api/clue/skill.js
  2. 228
      src/views/Clue/Pool/Comp/DialogFollow.vue
  3. 8
      src/views/Clue/Pool/Comp/DrawerClue.vue

@ -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')
})) }))

Loading…
Cancel
Save