From 47a4498b8b2f736cd7f62e1f6e269fe6a53358ca Mon Sep 17 00:00:00 2001 From: qsh <> Date: Thu, 13 Jun 2024 17:12:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/clue/index.js | 6 ++ src/views/Clue/Pool/Comp/DialogClue.vue | 5 +- src/views/Clue/Pool/Comp/DialogFollow.vue | 109 ++++++++++++++++------ src/views/Clue/Pool/Comp/DrawerClue.vue | 57 ++++++++--- src/views/Clue/Pool/Comp/follow.data.js | 59 ------------ src/views/Clue/Pool/index.vue | 47 +++++++++- 6 files changed, 175 insertions(+), 108 deletions(-) delete mode 100644 src/views/Clue/Pool/Comp/follow.data.js diff --git a/src/api/clue/index.js b/src/api/clue/index.js index f278e9e..86eac5d 100644 --- a/src/api/clue/index.js +++ b/src/api/clue/index.js @@ -30,11 +30,17 @@ export const deleteClue = async (id) => { return await request.delete({ url: '/admin-api/crm/sch-clue/delete?id=' + id }) } +// 释放 +export const releaseClue = async (data) => { + return await request.put({ url: '/admin-api/crm/sch-clue/public/save', data }) +} + // 通用查询数量 export const getClueCount = async () => { return await request.get({ url: '/admin-api/crm/sch-clue/get-clue-num' }) } +// 获取操作记录 export const getOpearateRecord = async (params) => { return await request.get({ url: '/admin-api/crm/clue-operate-record/list', params }) } diff --git a/src/views/Clue/Pool/Comp/DialogClue.vue b/src/views/Clue/Pool/Comp/DialogClue.vue index 880d2f4..4ace2a1 100644 --- a/src/views/Clue/Pool/Comp/DialogClue.vue +++ b/src/views/Clue/Pool/Comp/DialogClue.vue @@ -153,7 +153,8 @@ const rules = { name: { required: true, message: '线索名称不可为空', trigger: 'blur' }, phone: { required: true, message: '联系方式不可为空', trigger: 'blur' }, source: { required: true, message: '线索来源不可为空', trigger: 'change' }, - intentionState: { required: true, message: '意向状态不可为空', trigger: 'change' } + intentionState: { required: true, message: '意向状态不可为空', trigger: 'change' }, + consultTime: { required: true, message: '咨询日期不可为空', trigger: 'change' } } const tabName = ref('info') @@ -193,7 +194,7 @@ const open = async (type, id) => { } } else { followList.value = [] - address.value = [] + address.value = '' defaultLatLng.value = { lat: 31.86119, lng: 117.283042 diff --git a/src/views/Clue/Pool/Comp/DialogFollow.vue b/src/views/Clue/Pool/Comp/DialogFollow.vue index 6a919d0..1648d4e 100644 --- a/src/views/Clue/Pool/Comp/DialogFollow.vue +++ b/src/views/Clue/Pool/Comp/DialogFollow.vue @@ -1,14 +1,46 @@ - diff --git a/src/views/Clue/Pool/Comp/DrawerClue.vue b/src/views/Clue/Pool/Comp/DrawerClue.vue index b43d503..f1feacf 100644 --- a/src/views/Clue/Pool/Comp/DrawerClue.vue +++ b/src/views/Clue/Pool/Comp/DrawerClue.vue @@ -19,8 +19,8 @@ {{ info.intentionState }}
- 修改 - 删除 + 修改 + 删除
@@ -102,11 +102,11 @@ - + - diff --git a/src/views/Clue/Pool/Comp/follow.data.js b/src/views/Clue/Pool/Comp/follow.data.js deleted file mode 100644 index 806de2d..0000000 --- a/src/views/Clue/Pool/Comp/follow.data.js +++ /dev/null @@ -1,59 +0,0 @@ -import { dateFormatter } from '@/utils/formatTime' - -// 表单校验 -export const rules = reactive({ - username: [required], - password: [required] -}) - -// CrudSchema:https://doc.iocoder.cn/vue3/crud-schema/ -const crudSchemas = reactive([ - { - label: '本次跟进时间', - field: 'createTime', - formatter: dateFormatter, - form: { - component: 'DatePicker', - componentProps: { - type: 'datetime', - format: 'YYYY-MM-DD HH:mm', - valueFormat: 'YYYY-MM-DD HH:mm', - placeholder: '本次跟进时间' - } - } - }, - { - label: '下次跟进时间', - field: 'nextTime', - isForm: true, - formatter: dateFormatter, - detail: { - dateFormat: 'YYYY-MM-DD HH:mm' - }, - form: { - component: 'DatePicker', - componentProps: { - type: 'datetime', - format: 'YYYY-MM-DD HH:mm', - valueFormat: 'YYYY-MM-DD HH:mm', - placeholder: '下次跟进时间' - } - } - }, - { - label: '跟进内容', - field: 'remark', - isTable: true, - form: { - component: 'Input', - componentProps: { - type: 'textarea', - autosize: { minRows: 5, maxRows: 10 } - }, - colProps: { - span: 24 - } - } - } -]) -export const { allSchemas } = useCrudSchemas(crudSchemas) diff --git a/src/views/Clue/Pool/index.vue b/src/views/Clue/Pool/index.vue index f70cde0..0310a4a 100644 --- a/src/views/Clue/Pool/index.vue +++ b/src/views/Clue/Pool/index.vue @@ -110,7 +110,14 @@ > 登记 - 释放 + + 释放 + @@ -122,9 +129,15 @@ :schema="allSchemas.formSchema" @sucess="getTableList" /> - + - + @@ -141,6 +154,8 @@ import { formatDate } from '@/utils/formatTime' import * as ClueApi from '@/api/clue' +const message = useMessage() // 消息弹窗 + const searchRef = ref() const queryType = ref('2') @@ -190,6 +205,7 @@ function resetQuery() { async function getTableList() { // 查询 tableObject.value.loading = true + getSearchCount() try { const queryParams = await searchRef.value.getFormModel() const params = { @@ -231,7 +247,7 @@ function handleDetail(row) { } function handleFollow(row) { - followRef.value.open('create', row) + followRef.value.open(row.clueId) } async function makeCall(phone) { @@ -242,12 +258,33 @@ async function makeCall(phone) { function handleSuccess(row) { successRef.value.open(row) } + +// 释放 +function handleRelease(id) { + message.prompt('请先输入释放原因', '是否确认释放线索?').then((res) => { + if (res.value) { + try { + ClueApi.releaseClue({ + clueId: id, + publicClue: true, + discardReason: res.value + }).then(() => { + message.success('释放成功') + }) + } finally { + getTableList() + } + } else { + message.info('请将释放原因填写完整!') + } + }) +} + const userOptions = ref([]) onMounted(() => { getUserOption().then((data) => { userOptions.value = data }) - getSearchCount() getCurdSchemas() })