上传
This commit is contained in:
@@ -15,8 +15,8 @@
|
||||
<div class="flex justify-between" style="height: 32px">
|
||||
<div class="flex" style="align-items: center">
|
||||
<b class="mr-5px text-24px">{{ info.name }}</b>
|
||||
<div class="mr-5px text-16px">1888888888</div>
|
||||
<el-tag type="success">A高意向</el-tag>
|
||||
<div class="mr-5px text-16px">{{ info.phone }}</div>
|
||||
<el-tag type="success">{{ info.intentionState }}</el-tag>
|
||||
</div>
|
||||
<div>
|
||||
<el-button type="primary" plain>修改</el-button>
|
||||
@@ -177,6 +177,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import * as ClueApi from '@/api/clue'
|
||||
import DialogFollow from './DialogFollow.vue'
|
||||
import ImgFlag from '@/assets/imgs/flag/position_blue.png'
|
||||
import AMapLoader from '@amap/amap-jsapi-loader'
|
||||
@@ -214,9 +215,9 @@ const schema = ref([
|
||||
}
|
||||
])
|
||||
|
||||
const followContent = `<p style="color: red;">这是本次跟进的内容。</p><br/><p>我还能放图片,但需要你自己排版:</p><br/><img style="width: 200px;" src="https://q6.itc.cn/images01/20240407/0e6be21aebc847648109304f20370790.jpeg">`
|
||||
const followContent = ``
|
||||
|
||||
const followContent2 = `<p style="color: red;">这是本次跟进的内容。</p>`
|
||||
const followContent2 = ``
|
||||
|
||||
const followList = ref([
|
||||
{
|
||||
@@ -237,13 +238,17 @@ const followList = ref([
|
||||
const dialogMap = ref(null)
|
||||
const aMap = ref(null)
|
||||
|
||||
function open(row) {
|
||||
info.value = row
|
||||
show.value = true
|
||||
if (!dialogMap.value) {
|
||||
nextTick(() => {
|
||||
initMap()
|
||||
})
|
||||
async function open(id) {
|
||||
try {
|
||||
info.value = await ClueApi.getClue(id)
|
||||
show.value = true
|
||||
if (!dialogMap.value) {
|
||||
nextTick(() => {
|
||||
initMap()
|
||||
})
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,30 +1,33 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="relative">
|
||||
<el-tabs v-model="searchForm.mode" size="small">
|
||||
<el-tabs v-model="queryType" size="small">
|
||||
<el-tab-pane label="全部" name="0" />
|
||||
<el-tab-pane name="1">
|
||||
<template #label>
|
||||
<Tooltip message="除了无效线索和已成交的线索" />
|
||||
<el-badge :value="123" :max="9999">
|
||||
<el-badge v-if="clueCount.unSignNum" :value="clueCount.unSignNum" :max="9999">
|
||||
<span class="ml-3px">未成交</span>
|
||||
</el-badge>
|
||||
<span v-else class="ml-3px">未成交</span>
|
||||
</template>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane name="2">
|
||||
<template #label>
|
||||
<Tooltip message="下次跟进时间在今日之前的未成交线索" />
|
||||
<el-badge :value="234" :max="9999">
|
||||
<el-badge v-if="clueCount.followNum" :value="clueCount.followNum" :max="9999">
|
||||
<span class="ml-3px">待跟进</span>
|
||||
</el-badge>
|
||||
<span v-else class="ml-3px">待跟进</span>
|
||||
</template>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane name="3">
|
||||
<template #label>
|
||||
<Tooltip message="只有创建时间,无下次跟进时间的未成交线索" />
|
||||
<el-badge :value="423" :max="9999">
|
||||
<el-badge v-if="clueCount.newNum" :value="clueCount.newNum" :max="9999">
|
||||
<span class="ml-3px">新线索</span>
|
||||
</el-badge>
|
||||
<span v-else class="ml-3px">新线索</span>
|
||||
</template>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="公海" name="4" />
|
||||
@@ -37,7 +40,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<!-- 搜索工作栏 -->
|
||||
<Search :schema="allSchemas.searchSchema" labelWidth="0">
|
||||
<Search v-if="!loading" ref="searchRef" :schema="allSchemas.searchSchema" labelWidth="0">
|
||||
<template #actionMore>
|
||||
<el-button @click="getTableList" v-hasPermi="['clue:pool:search']"> 搜索 </el-button>
|
||||
<el-button @click="resetQuery" v-hasPermi="['clue:pool:reset']"> 重置 </el-button>
|
||||
@@ -45,6 +48,7 @@
|
||||
</Search>
|
||||
<!-- 列表 -->
|
||||
<SSTable
|
||||
v-if="!loading"
|
||||
class="mt-20px"
|
||||
v-model:tableObject="tableObject"
|
||||
:tableColumns="allSchemas.tableColumns"
|
||||
@@ -74,6 +78,9 @@
|
||||
<span>{{ row[item.field] }}</span>
|
||||
<Icon class="ml-5px" icon="ep:phone" @click="makeCall(row.contact)" />
|
||||
</div>
|
||||
<div v-else-if="item.form?.component == 'DatePicker'">
|
||||
<span>{{ formatDate(row[item.field]) }}</span>
|
||||
</div>
|
||||
<span v-else>{{ row[item.field] }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -116,27 +123,44 @@
|
||||
</template>
|
||||
|
||||
<script setup name="CluePool">
|
||||
import { allSchemas } from './cluePool.data'
|
||||
import { getSimpleFieldList } from '@/api/clue/clueField'
|
||||
import DialogClue from './Comp/DialogClue.vue'
|
||||
import DrawerClue from './Comp/DrawerClue.vue'
|
||||
import DialogSuccess from './Comp/DialogSuccess.vue'
|
||||
import DialogFollow from './Comp/DialogFollow.vue'
|
||||
|
||||
const searchForm = ref({
|
||||
mode: '2'
|
||||
})
|
||||
import { removeNullField } from '@/utils'
|
||||
import { formatDate } from '@/utils/formatTime'
|
||||
|
||||
import * as ClueApi from '@/api/clue'
|
||||
|
||||
const searchRef = ref()
|
||||
const queryType = ref('2')
|
||||
|
||||
const formRef = ref()
|
||||
const drawerRef = ref()
|
||||
const successRef = ref()
|
||||
const followRef = ref()
|
||||
|
||||
// const { tableObject, tableMethods } = useTable({
|
||||
// getListApi: MailTemplateApi.getMailTemplatePage, // 分页接口
|
||||
// delListApi: MailTemplateApi.deleteMailTemplate // 删除接口
|
||||
// })
|
||||
const loading = ref(true)
|
||||
|
||||
const allSchemas = ref({})
|
||||
|
||||
async function getCurdSchemas() {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await getSimpleFieldList()
|
||||
allSchemas.value = useCrudSchemas(data).allSchemas
|
||||
} finally {
|
||||
loading.value = false
|
||||
nextTick(() => {
|
||||
getTableList()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const tableObject = ref({
|
||||
tableList: [{ name: '测试', contact: '17318531354' }],
|
||||
tableList: [],
|
||||
loading: false,
|
||||
total: 1,
|
||||
pageSize: 20,
|
||||
@@ -151,15 +175,39 @@ function getCheckedColumns(list) {
|
||||
}
|
||||
|
||||
function resetQuery() {
|
||||
searchForm.value = {
|
||||
pageNo: 1,
|
||||
pageSize: 10
|
||||
}
|
||||
searchRef.value.reset()
|
||||
tableObject.value.currentPage = 1
|
||||
getTableList()
|
||||
}
|
||||
|
||||
function getTableList() {
|
||||
async function getTableList() {
|
||||
// 查询
|
||||
tableObject.value.loading = true
|
||||
try {
|
||||
const queryParams = await searchRef.value.getFormModel()
|
||||
const params = {
|
||||
...queryParams,
|
||||
pageNo: tableObject.value.currentPage,
|
||||
pageSize: tableObject.value.pageSize,
|
||||
queryType: queryType.value
|
||||
}
|
||||
const data = await ClueApi.getCluePage(removeNullField(params))
|
||||
tableObject.value.tableList = data.list
|
||||
tableObject.value.total = data.total
|
||||
} finally {
|
||||
tableObject.value.loading = false
|
||||
}
|
||||
}
|
||||
|
||||
const clueCount = ref({
|
||||
unSignNum: 0,
|
||||
followNum: 0,
|
||||
newNum: 0
|
||||
})
|
||||
function getSearchCount() {
|
||||
ClueApi.getClueCount().then((data) => {
|
||||
clueCount.value = data
|
||||
})
|
||||
}
|
||||
|
||||
// 新增
|
||||
@@ -172,7 +220,7 @@ function handleEdit(row) {
|
||||
}
|
||||
// 详情
|
||||
function handleDetail(row) {
|
||||
drawerRef.value.open(row)
|
||||
drawerRef.value.open(row.clueId)
|
||||
}
|
||||
|
||||
function handleFollow(row) {
|
||||
@@ -187,6 +235,11 @@ async function makeCall(phone) {
|
||||
function handleSuccess(row) {
|
||||
successRef.value.open(row)
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getSearchCount()
|
||||
getCurdSchemas()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
|
||||
Reference in New Issue
Block a user