Skip to content

Commit c96902d

Browse files
YunaiVgitee-org
authored andcommitted
!433 CRM: 修复客户导入、销售漏斗。上传组件的文件列表给拓展一个下载 。
Merge pull request !433 from puhui999/dev-crm
2 parents f55c9b7 + 0076236 commit c96902d

File tree

6 files changed

+80
-39
lines changed

6 files changed

+80
-39
lines changed
File renamed without changes.

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
"private": false,
77
"scripts": {
88
"i": "pnpm install",
9-
"dev": "vite --mode local-dev",
10-
"dev-server": "vite --mode dev",
9+
"local-dev": "vite --mode local-dev",
10+
"dev": "vite --mode dev",
1111
"ts:check": "vue-tsc --noEmit",
1212
"build:local-dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode local-dev",
13-
"build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode local-dev",
13+
"build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode dev",
1414
"build:test": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode test",
1515
"build:stage": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode stage",
1616
"build:prod": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode prod",

src/components/UploadFile/src/UploadFile.vue

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,25 @@
3232
格式为 <b style="color: #f56c6c">{{ fileType.join('/') }}</b> 的文件
3333
</div>
3434
</template>
35+
<template #file="row">
36+
<div class="flex items-center">
37+
<span>{{ row.file.name }}</span>
38+
<div class="ml-10px">
39+
<el-link
40+
:href="row.file.url"
41+
:underline="false"
42+
download
43+
target="_blank"
44+
type="primary"
45+
>
46+
下载
47+
</el-link>
48+
</div>
49+
<div class="ml-10px">
50+
<el-button link type="danger" @click="handleRemove(row.file)"> 删除</el-button>
51+
</div>
52+
</div>
53+
</template>
3554
</el-upload>
3655
</div>
3756
</template>

src/plugins/echarts/index.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,24 @@ import * as echarts from 'echarts/core'
22

33
import {
44
BarChart,
5+
FunnelChart,
6+
GaugeChart,
57
LineChart,
6-
PieChart,
78
MapChart,
89
PictorialBarChart,
9-
RadarChart,
10-
GaugeChart
10+
PieChart,
11+
RadarChart
1112
} from 'echarts/charts'
1213

1314
import {
14-
TitleComponent,
15-
TooltipComponent,
16-
GridComponent,
17-
PolarComponent,
1815
AriaComponent,
19-
ParallelComponent,
16+
GridComponent,
2017
LegendComponent,
18+
ParallelComponent,
19+
PolarComponent,
20+
TitleComponent,
2121
ToolboxComponent,
22+
TooltipComponent,
2223
VisualMapComponent
2324
} from 'echarts/components'
2425

@@ -41,7 +42,8 @@ echarts.use([
4142
CanvasRenderer,
4243
PictorialBarChart,
4344
RadarChart,
44-
GaugeChart
45+
GaugeChart,
46+
FunnelChart
4547
])
4648

4749
export default echarts

src/views/crm/customer/CustomerImportForm.vue

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
<!-- 客户导入窗口 -->
22
<template>
33
<Dialog v-model="dialogVisible" title="客户导入" width="400">
4+
<div class="flex items-center my-10px">
5+
<span class="mr-10px">负责人</span>
6+
<el-select v-model="ownerUserId" class="!w-240px" clearable>
7+
<el-option
8+
v-for="item in userOptions"
9+
:key="item.id"
10+
:label="item.nickname"
11+
:value="item.id"
12+
/>
13+
</el-select>
14+
</div>
415
<el-upload
516
ref="uploadRef"
617
v-model:file-list="fileList"
718
:auto-upload="false"
819
:disabled="formLoading"
9-
:headers="uploadHeaders"
1020
:limit="1"
11-
:on-error="submitFormError"
1221
:on-exceed="handleExceed"
13-
:on-success="submitFormSuccess"
1422
accept=".xlsx, .xls"
1523
action="none"
1624
drag
@@ -43,9 +51,10 @@
4351
</template>
4452
<script lang="ts" setup>
4553
import * as CustomerApi from '@/api/crm/customer'
46-
import { getAccessToken, getTenantId } from '@/utils/auth'
4754
import download from '@/utils/download'
4855
import type { UploadUserFile } from 'element-plus'
56+
import * as UserApi from '@/api/system/user'
57+
import { useUserStore } from '@/store/modules/user'
4958
5059
defineOptions({ name: 'SystemUserImportForm' })
5160
@@ -54,15 +63,18 @@ const message = useMessage() // 消息弹窗
5463
const dialogVisible = ref(false) // 弹窗的是否展示
5564
const formLoading = ref(false) // 表单的加载中
5665
const uploadRef = ref()
57-
const uploadHeaders = ref() // 上传 Header 头
5866
const fileList = ref<UploadUserFile[]>([]) // 文件列表
5967
const updateSupport = ref(false) // 是否更新已经存在的客户数据
68+
const ownerUserId = ref<undefined | number>() // 负责人编号
69+
const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
6070
6171
/** 打开弹窗 */
62-
const open = () => {
72+
const open = async () => {
6373
dialogVisible.value = true
64-
fileList.value = []
65-
resetForm()
74+
await resetForm()
75+
// 获得用户列表
76+
userOptions.value = await UserApi.getSimpleUserList()
77+
ownerUserId.value = useUserStore().getUser.id
6678
}
6779
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
6880
@@ -72,17 +84,20 @@ const submitForm = async () => {
7284
message.error('请上传文件')
7385
return
7486
}
75-
// 提交请求
76-
uploadHeaders.value = {
77-
Authorization: 'Bearer ' + getAccessToken(),
78-
'tenant-id': getTenantId()
79-
}
87+
8088
formLoading.value = true
81-
const formData = new FormData()
82-
formData.append('updateSupport', updateSupport.value)
83-
formData.append('file', fileList.value[0].raw)
84-
// TODO @芋艿:后面是不是可以采用这种形式,去掉 uploadHeaders
85-
await CustomerApi.handleImport(formData)
89+
try {
90+
const formData = new FormData()
91+
formData.append('updateSupport', String(updateSupport.value))
92+
formData.append('file', fileList.value[0].raw as Blob)
93+
formData.append('ownerUserId', String(ownerUserId.value))
94+
const res = await CustomerApi.handleImport(formData)
95+
submitFormSuccess(res)
96+
} catch {
97+
submitFormError()
98+
} finally {
99+
formLoading.value = false
100+
}
86101
}
87102
88103
/** 文件上传成功 */
@@ -108,6 +123,8 @@ const submitFormSuccess = (response: any) => {
108123
text += '< ' + customerName + ': ' + data.failureCustomerNames[customerName] + ' >'
109124
}
110125
message.alert(text)
126+
formLoading.value = false
127+
dialogVisible.value = false
111128
// 发送操作成功的事件
112129
emits('success')
113130
}
@@ -119,9 +136,12 @@ const submitFormError = (): void => {
119136
}
120137
121138
/** 重置表单 */
122-
const resetForm = () => {
139+
const resetForm = async () => {
123140
// 重置上传状态和文件
124-
formLoading.value = false
141+
fileList.value = []
142+
updateSupport.value = false
143+
ownerUserId.value = undefined
144+
await nextTick()
125145
uploadRef.value?.clearFiles()
126146
}
127147

src/views/crm/customer/index.vue

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
<Icon class="mr-5px" icon="ep:search" />
8080
搜索
8181
</el-button>
82-
<el-button @click="resetQuery(undefined)">
82+
<el-button @click="resetQuery">
8383
<Icon class="mr-5px" icon="ep:refresh" />
8484
重置
8585
</el-button>
@@ -113,7 +113,7 @@
113113
<el-tab-pane label="下属负责的" name="3" />
114114
</el-tabs>
115115
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true">
116-
<el-table-column align="center" label="客户名称" fixed="left" prop="name" width="160">
116+
<el-table-column align="center" fixed="left" label="客户名称" prop="name" width="160">
117117
<template #default="scope">
118118
<el-link :underline="false" type="primary" @click="openDetail(scope.row.id)">
119119
{{ scope.row.name }}
@@ -125,9 +125,9 @@
125125
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="scope.row.source" />
126126
</template>
127127
</el-table-column>
128-
<el-table-column label="手机" align="center" prop="mobile" width="120" />
129-
<el-table-column label="电话" align="center" prop="telephone" width="130" />
130-
<el-table-column label="邮箱" align="center" prop="email" width="180" />
128+
<el-table-column align="center" label="手机" prop="mobile" width="120" />
129+
<el-table-column align="center" label="电话" prop="telephone" width="130" />
130+
<el-table-column align="center" label="邮箱" prop="email" width="180" />
131131
<el-table-column align="center" label="客户级别" prop="level" width="135">
132132
<template #default="scope">
133133
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="scope.row.level" />
@@ -164,7 +164,7 @@
164164
width="180px"
165165
/>
166166
<el-table-column align="center" label="最后跟进记录" prop="contactLastContent" width="200" />
167-
<el-table-column label="地址" align="center" prop="detailAddress" width="180" />
167+
<el-table-column align="center" label="地址" prop="detailAddress" width="180" />
168168
<el-table-column align="center" label="距离进入公海天数" prop="poolDay" width="140">
169169
<template #default="scope"> {{ scope.row.poolDay }} 天</template>
170170
</el-table-column>
@@ -254,7 +254,7 @@ const activeName = ref('1') // 列表 tab
254254
255255
/** tab 切换 */
256256
const handleTabClick = (tab: TabsPaneContext) => {
257-
queryParams.sceneType = tab.paneName
257+
queryParams.sceneType = tab.paneName as string
258258
handleQuery()
259259
}
260260

0 commit comments

Comments
 (0)