diff --git a/src/api/sch/coach.js b/src/api/sch/coach.js index ebc8c2e..be32fc0 100644 --- a/src/api/sch/coach.js +++ b/src/api/sch/coach.js @@ -2,7 +2,7 @@ * @Author: riverQiu * @Date: 2023-10-07 17:14:32 * @LastEditors: riverQiu - * @LastEditTime: 2023-10-07 18:02:01 + * @LastEditTime: 2023-10-10 17:00:57 * @Description:教练接口 */ import request from '@/utils/request'; @@ -49,3 +49,11 @@ export function delCoach(coachId) { method: 'delete' }); } + +export function getAllCoaches(query){ + return request({ + url: '/sch/coach/all', + method: 'get', + params: query + }); +} diff --git a/src/api/system/skill.js b/src/api/system/skill.js new file mode 100644 index 0000000..edb38a8 --- /dev/null +++ b/src/api/system/skill.js @@ -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' + }) +} diff --git a/src/api/zs/feedbackDetail.js b/src/api/zs/feedbackDetail.js new file mode 100644 index 0000000..1d3ac59 --- /dev/null +++ b/src/api/zs/feedbackDetail.js @@ -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' + }); +} diff --git a/src/api/zs/feedbackOrder.js b/src/api/zs/feedbackOrder.js new file mode 100644 index 0000000..2e2073c --- /dev/null +++ b/src/api/zs/feedbackOrder.js @@ -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' + }); +} diff --git a/src/permission.js b/src/permission.js index 6bfb0f6..b14dc3e 100644 --- a/src/permission.js +++ b/src/permission.js @@ -1,3 +1,10 @@ +/* + * @Author: riverQiu + * @Date: 2023-08-16 22:04:23 + * @LastEditors: riverQiu + * @LastEditTime: 2023-10-11 22:17:43 + * @Description: + */ import router from './router'; import store from './store'; import { @@ -16,7 +23,7 @@ NProgress.configure({ showSpinner: false }); -const whiteList = ['/login', '/auth-redirect', '/bind', '/register', '/question', '/clue/feedback']; +const whiteList = ['/login', '/auth-redirect', '/bind', '/register', '/question', '/clue/feedback/follow', '/clue/feedback/arrival']; router.beforeEach((to, from, next) => { NProgress.start(); diff --git a/src/router/index.js b/src/router/index.js index beb6e9f..b143427 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -54,8 +54,13 @@ export const constantRoutes = [{ hidden: true }, { - path: '/clue/feedback', - component: () => import('@/views/zs/feedback/first'), + path: '/clue/feedback/follow', + component: () => import('@/views/zs/feedback/follow'), + hidden: true +}, +{ + path: '/clue/feedback/arrival', + component: () => import('@/views/zs/feedback/arrival'), hidden: true }, { diff --git a/src/views/sch/coach/components/CoachForm.vue b/src/views/sch/coach/components/CoachForm.vue index c5df3b1..cb2c854 100644 --- a/src/views/sch/coach/components/CoachForm.vue +++ b/src/views/sch/coach/components/CoachForm.vue @@ -1,6 +1,6 @@ + + diff --git a/src/views/zs/clue/ClueForm/index.vue b/src/views/zs/clue/ClueForm/index.vue index c419ced..6cbb56f 100644 --- a/src/views/zs/clue/ClueForm/index.vue +++ b/src/views/zs/clue/ClueForm/index.vue @@ -26,6 +26,8 @@ 保存后继续创建下一条 + 关键话术 + 确 定 @@ -39,12 +41,12 @@ - + - + @@ -64,57 +66,57 @@ - + - + - + - - + + {{ dict.dictValue }} - + - - - - + + + + {{ dict.dictValue }} - + - + - + - + @@ -131,7 +133,7 @@ - + @@ -139,7 +141,7 @@
- +
@@ -158,25 +160,28 @@ + +
- - \ No newline at end of file + + diff --git a/src/views/zs/clue/components/DistributeFormDialog.vue b/src/views/zs/clue/components/DistributeFormDialog.vue index 61781b4..4b5808b 100644 --- a/src/views/zs/clue/components/DistributeFormDialog.vue +++ b/src/views/zs/clue/components/DistributeFormDialog.vue @@ -1,32 +1,68 @@ + + + diff --git a/src/views/zs/clue/index.vue b/src/views/zs/clue/index.vue index 3eb5fdc..b90df3e 100644 --- a/src/views/zs/clue/index.vue +++ b/src/views/zs/clue/index.vue @@ -13,15 +13,22 @@ 导出 批量修改 公海 + 关键话术 +
- + + + + @@ -72,26 +81,27 @@ import SignFormDialog from '../sign/components/SignFormDialog.vue'; import ZhuangDanDialog from './components/ZhuangDanDialog.vue'; import MemoFormDialog from './components/MemoFormDialog.vue'; import DYClueFormDialog from './components/DYClueFormDialog.vue'; +import SkillDialog from './components/SkillDialog.vue'; import { defaultColumns } from './columns.js'; import { getClueList, deleteClue, getClueCountBadge, discardClue, getSign, getConsultRecord } from '@/api/zs/clue'; import empApi from '@/api/system/employee'; export default { name: 'Clue', - beforeRouteEnter(to, from, next) { + components: { + SearchForm, BatchUpdateDialog, PublicDialog, UploadDialog, SignFormDialog, DistributeFormDialog, ZhuangDanDialog, MemoFormDialog, + DYClueFormDialog, SkillDialog + }, + beforeRouteEnter (to, from, next) { if (from.name == 'ClueForm') { next(vm => { - vm._getTableList() - }) + vm._getTableList(); + }); } else { - next() + next(); } }, - components: { - SearchForm, BatchUpdateDialog, PublicDialog, UploadDialog, SignFormDialog, DistributeFormDialog, ZhuangDanDialog, MemoFormDialog, - DYClueFormDialog - }, - data() { + data () { return { admin: localStorage.getItem('admin'), userId: localStorage.getItem('userId'), @@ -120,13 +130,20 @@ export default { 报名他校: '#afaeb0', 无效线索: '#afaeb0' }, + feedbackTagColorMap: { + 0: '待分发', + 1: '待跟进', + 2: '已跟进', + 3: '已到场', + 4: '退单' + }, options: undefined, clueInfo: undefined, consultRecord: [], quickSearch: 0 }; }, - created() { + created () { const str = localStorage.getItem(`${this.$route.name}-table-columns`); this.columns = str ? JSON.parse(str) : defaultColumns; this._getClueCountBadge(); @@ -143,10 +160,10 @@ export default { }, methods: { // 分页查询表格数据 - _getTableList() { + _getTableList () { this.loading = true; const tempForm = this.$refs.SearchForm?.searchForm || {}; - this.quickSearch = tempForm.quickSearch + this.quickSearch = tempForm.quickSearch; const params = { ...this.searchForm, ...tempForm }; getClueList(params).then((response) => { this.tableList = response.rows; @@ -155,31 +172,36 @@ export default { }); }, // 获取已过期线索数 - async _getClueCountBadge() { + async _getClueCountBadge () { const resp = await getClueCountBadge(); if (resp.code === 200) { this.expireCount = resp.data; } }, // 新增或修改 - handleAddandUpdate(info) { + handleAddandUpdate (info) { this.$router.push('/zs/clue-form/index/' + (info ? info.clueId : 0)); }, - //抖音新增 - handleDYAddandUpdate(info){ + // 抖音新增 + handleDYAddandUpdate (info) { this.$nextTick(() => { this.$refs.DYClueFormDialog.init(info); }); }, + handleSkill () { + this.$nextTick(() => { + this.$refs.SkillDialog.init(); + }); + }, // 多选框选中数据 - handleSelectionChange(selection) { + handleSelectionChange (selection) { console.log(selection); this.ids = selection.map((item) => item.clueId); this.single = selection.length !== 1; this.multiple = !selection.length; }, // 释放线索操作 - handleDiscard(item) { + handleDiscard (item) { this.$confirm('是否确认释放该条线索(“' + item.name + '/' + item.phone + '”)到公海?', '警告', { confirmButtonText: '确定', cancelButtonText: '取消', @@ -196,7 +218,7 @@ export default { .catch(function () { }); }, // 删除 - handleDelete(item) { + handleDelete (item) { this.$confirm('是否确认删除该条线索(“' + item.name + '/' + item.phone + '”)?', '警告', { confirmButtonText: '确定', cancelButtonText: '取消', @@ -213,13 +235,13 @@ export default { .catch(function () { }); }, // 导入 - handleImport(ydtData, dYData) { + handleImport (ydtData, dYData) { this.$nextTick(() => { - this.$refs.uploadDialogForm.init({ydtData: ydtData, dYData: dYData}); + this.$refs.uploadDialogForm.init({ ydtData: ydtData, dYData: dYData }); }); }, /** 导出按钮操作 */ - handleExport() { + handleExport () { this.$confirm('是否确认导出所有学员信息项?', '警告', { confirmButtonText: '确定', cancelButtonText: '取消', @@ -230,12 +252,12 @@ export default { }); }, // 公海按钮点击时间 - handlePublicClue() { + handlePublicClue () { this.$nextTick(() => { this.$refs.publicDialogForm.init(); }); }, - getEmployee() { + getEmployee () { empApi.getEmployee().then((resp) => { if (resp.code === 200) { this.userOptions = resp.data; @@ -243,7 +265,7 @@ export default { }); }, // 批量修改 - handleBatChUpdate() { + handleBatChUpdate () { this.options = { userOptions: this.userOptions }; @@ -254,7 +276,7 @@ export default { }); }, // 登记成交 - async handleSign(item) { + async handleSign (item) { // 根据clueId查询登记信息 let signInfo = {}; this.clueInfo = item; @@ -266,39 +288,37 @@ export default { this.$refs.signDialogForm.init(signInfo); }); }, - //分发到场地 - handleDistribute(item) { - + // 分发到场地 + handleDistribute (item) { this.$nextTick(() => { this.$refs.distributeDialogForm.init(item.clueId); }); }, - //外呼 - handlePhone(item) { + // 外呼 + handlePhone (item) { }, - handleViewZhuangDan(item) { + handleViewZhuangDan (item) { this.$nextTick(() => { this.$refs.zhuangDanDialog.init(item.clueId); }); }, - handleRowClick(row) { + handleRowClick (row) { if (this.quickSearch != 8) { // if(row.source == '抖音直播'){ // this.handleDYAddandUpdate(row); // } else { - this.handleAddandUpdate(row) + this.handleAddandUpdate(row); // } } }, - handleCellClick(row, column, cell, event) { - //如果点击的是备注的话 开始备注编辑框 + handleCellClick (row, column, cell, event) { + // 如果点击的是备注的话 开始备注编辑框 if (column.property == 'clueMemo') { - console.log(row, column, cell, event) + console.log(row, column, cell, event); this.$nextTick(() => { this.$refs.memoDialog.init(row); }); - } } } diff --git a/src/views/zs/feedback/arrival.vue b/src/views/zs/feedback/arrival.vue new file mode 100644 index 0000000..1b397ae --- /dev/null +++ b/src/views/zs/feedback/arrival.vue @@ -0,0 +1,122 @@ + + + diff --git a/src/views/zs/feedback/first.vue b/src/views/zs/feedback/first.vue deleted file mode 100644 index 439d47b..0000000 --- a/src/views/zs/feedback/first.vue +++ /dev/null @@ -1,180 +0,0 @@ - - - diff --git a/src/views/zs/feedback/follow.vue b/src/views/zs/feedback/follow.vue new file mode 100644 index 0000000..9c0e179 --- /dev/null +++ b/src/views/zs/feedback/follow.vue @@ -0,0 +1,126 @@ + + +