This commit is contained in:
qsh
2024-08-02 18:03:21 +08:00
parent 605151c5c8
commit 925887f4c9
13 changed files with 251 additions and 60 deletions

View File

@@ -39,6 +39,7 @@
<script setup name="ClueMap">
import { getPlaceList } from '@/api/school/place'
import { getConfigByConfigKey } from '@/api/system/set'
import ImgPostion from '@/assets/imgs/flag/position_black.png'
import FlagRed from '@/assets/imgs/flag/flag_red.png'
@@ -69,9 +70,17 @@ const defaultLatLng = ref({
lat: 31.86119,
lng: 117.283042
})
const defaultCity = ref('合肥')
let AutoComplete = ref(null)
function initMap() {
async function initMap() {
const data = await getConfigByConfigKey({ configKey: 'defaultLocation' })
const cityInfo = JSON.parse(data.configValue)
defaultLatLng.value = {
lat: cityInfo.lat,
lng: cityInfo.lng
}
defaultCity.value = cityInfo.locationName
AMapLoader.load({
key: '713d839ff505943b0f18e6df45f3b0dc', //设置您的key
version: '2.0',
@@ -79,7 +88,7 @@ function initMap() {
}).then((AMap) => {
aMap.value = AMap
AutoComplete.value = new AMap.AutoComplete({
city: '合肥'
city: defaultCity.value
})
clueMap.value = new AMap.Map('mapClue', {
zoom: 14,

View File

@@ -0,0 +1,97 @@
<template>
<Dialog title="批量修改跟进人" v-model="show" width="400px">
<el-form :model="form" ref="formRef" :rules="rules" label-width="auto">
<el-form-item label="修改线索数">
{{ form.clueIdList.length }}
</el-form-item>
<el-form-item label="原跟进人" prop="originFollowUserId">
<el-select v-model="form.originFollowUserId" placeholder="原跟进人" filterable>
<el-option
v-for="item in props.userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="新跟进人" prop="newFollowUserId">
<el-select v-model="form.newFollowUserId" placeholder="新跟进人" filterable>
<el-option
v-for="item in props.userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<span>
<el-button @click="show = false"> </el-button>
<el-button :disabled="formLoading" type="primary" @click="handleSave"> </el-button>
</span>
</template>
</Dialog>
</template>
<script setup name="DialogBatchChangeFollow">
import { batchUpdateFollowUser } from '@/api/clue'
const props = defineProps({
userOptions: {
type: Array
}
})
const show = ref(false)
const form = ref({
clueIdList: [],
originFollowUserId: undefined,
newFollowUserId: undefined
})
const rules = ref({
originFollowUserId: { required: true, message: '原跟进人不可为空', trigger: 'change' },
newFollowUserId: { required: true, message: '新跟进人不可为空', trigger: 'change' }
})
function open(clueIdList) {
resetForm(clueIdList)
show.value = true
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
function resetForm(clueIdList) {
form.value = {
clueIdList,
originFollowUserId: undefined,
newFollowUserId: undefined
}
}
const formLoading = ref(false)
const emit = defineEmits(['success'])
const formRef = ref()
async function handleSave() {
// 校验表单
if (!formRef.value) return
const valid = await formRef.value.validate()
if (!valid) return
// 提交请求
formLoading.value = true
try {
await batchUpdateFollowUser(form.value)
message.success('修改成功!')
show.value = false
// 发送操作成功的事件
emit('success')
} catch (err) {
console.log(err)
} finally {
formLoading.value = false
}
}
</script>
<style lang="scss" scoped></style>

View File

@@ -133,6 +133,7 @@
import { useAppStore } from '@/store/modules/app'
import { useUserStore } from '@/store/modules/user'
import { getPlaceList } from '@/api/school/place'
import { getConfigByConfigKey } from '@/api/system/set'
import * as ClueApi from '@/api/clue'
import { getDiyFieldList } from '@/api/clue/clueField'
import { formatDate } from '@/utils/formatTime'
@@ -226,6 +227,7 @@ const defaultLatLng = ref({
lat: 31.86119,
lng: 117.283042
})
const defaultCity = ref('合肥')
const info = ref({})
const diyFieldArr = ref([])
@@ -265,9 +267,14 @@ const open = async (type, id) => {
}
]
address.value = ''
defaultLatLng.value = {
lat: 31.86119,
lng: 117.283042
if (appStore.getAppInfo?.instanceType == 1) {
const data = await getConfigByConfigKey({ configKey: 'defaultLocation' })
const cityInfo = JSON.parse(data.configValue)
defaultLatLng.value = {
lat: cityInfo.lat,
lng: cityInfo.lng
}
defaultCity.value = cityInfo.locationName
}
nextTick(() => {
formRef.value.setValues(info.value, true)
@@ -396,7 +403,7 @@ function initMap(data) {
})
addmark(defaultLatLng.value.lng, defaultLatLng.value.lat, AMap)
AutoComplete.value = new AMap.AutoComplete({
city: '合肥'
city: defaultCity.value
})
geoCoder.value = new AMap.Geocoder()
dialogMap.value.on('click', (e) => {

View File

@@ -328,6 +328,7 @@ import { getDiyFieldList } from '@/api/clue/orderField'
import { getPlaceList } from '@/api/school/place'
import { getClassTypeList } from '@/api/school/class'
import { getSimpleProductList } from '@/api/mall/product'
import { getConfigByConfigKey } from '@/api/system/set'
// import { getSimpleWarehouseList } from '@/api/mall/warehouse'
import { formatDate } from '@/utils/formatTime'
@@ -415,7 +416,8 @@ async function open(id) {
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
function resetForm(id) {
async function resetForm(id) {
const data = await getConfigByConfigKey({ configKey: 'companyCollectionConfig' })
form.value = {
clueId: id,
dealDate: formatDate(new Date()),
@@ -423,7 +425,7 @@ function resetForm(id) {
signPrice: 0,
payAmount: 0,
remark: undefined,
isCompanyReceipts: appStore.getAppInfo?.instanceType == 2,
isCompanyReceipts: data.configValue == 'true',
receiver: undefined,
extraPay: [],
signProducts: []

View File

@@ -53,6 +53,12 @@
<template #actionMore>
<el-button @click="getTableList" v-hasPermi="['clue:pool:search']"> 搜索 </el-button>
<el-button @click="resetQuery" v-hasPermi="['clue:pool:reset']"> 重置 </el-button>
<el-button
@click="handleBatchChangeFollow"
v-hasPermi="['clue:pool:batch-update-follow']"
>
批量修改跟进人
</el-button>
</template>
</Search>
<!-- 列表 -->
@@ -63,7 +69,9 @@
:tableColumns="allSchemas.tableColumns"
@get-list="getTableList"
@get-checked-columns="getCheckedColumns"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="60" />
<el-table-column
v-for="item in showColumns"
:key="item.field"
@@ -178,6 +186,11 @@
@success="getTableList"
/>
<DialogFollow ref="followRef" @success="getTableList" />
<DialogBatchChangeFollow
ref="batchChangeFollowDialog"
:userOptions="userOptions"
@success="getTableList"
/>
</div>
</template>
@@ -189,6 +202,7 @@ import DrawerClue from './Comp/DrawerClue.vue'
import DialogSuccess from './Comp/DialogSuccess.vue'
import DialogFollow from './Comp/DialogFollow.vue'
import ClueMap from './Comp/ClueMap.vue'
import DialogBatchChangeFollow from './Comp/DialogBatchChangeFollow.vue'
import { getSimpleUserList as getUserOption, getAllUserList } from '@/api/system/user'
import { removeNullField } from '@/utils'
@@ -216,7 +230,7 @@ async function getCurdSchemas() {
try {
const data = await getSimpleFieldList()
data.forEach((elem) => {
if (elem.field == 'followUser' || elem.field == 'convertPeople') {
if (['followUser', 'convertPeople', 'firstFollowUser'].includes(elem.field)) {
elem.search.options = userOptions.value
}
})
@@ -295,6 +309,20 @@ function getSearchCount() {
})
}
const batchIds = ref([])
function handleSelectionChange(val) {
batchIds.value = val.map((it) => it.clueId)
}
const batchChangeFollowDialog = ref()
function handleBatchChangeFollow() {
if (batchIds.value.length) {
batchChangeFollowDialog.value.open(batchIds.value)
} else {
message.info('请选择表格中的数据!')
}
}
// 新增
function handleInsert() {
formRef.value.open('create', null)