Skip to content

Commit 34b788c

Browse files
committed
Merge branch 'dev-crm' of https://gitee.com/puhui999/yudao-ui-admin-vue3 into dev
# Conflicts: # src/views/bpm/definition/index.vue # src/views/bpm/model/index.vue # src/views/bpm/processInstance/create/index.vue # src/views/crm/statistics/customer/index.vue
2 parents 291dc51 + 3820710 commit 34b788c

File tree

16 files changed

+844
-26
lines changed

16 files changed

+844
-26
lines changed

src/api/crm/statistics/customer.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,36 @@ export interface CrmStatisticsCustomerDealCycleByDateRespVO {
4949
customerDealCycle: number
5050
}
5151

52+
export interface CrmStatisticCustomerBaseRespVO {
53+
customerCount: number
54+
dealCount: number
55+
dealPortion: number
56+
}
57+
58+
export interface CrmStatisticCustomerIndustryRespVO extends CrmStatisticCustomerBaseRespVO {
59+
industryId: number
60+
industryName: string
61+
industryPortion: number
62+
}
63+
64+
export interface CrmStatisticCustomerSourceRespVO extends CrmStatisticCustomerBaseRespVO {
65+
source: number
66+
sourceName: string
67+
sourcePortion: number
68+
}
69+
70+
export interface CrmStatisticCustomerLevelRespVO extends CrmStatisticCustomerBaseRespVO {
71+
level: number
72+
levelName: string
73+
levelPortion: number
74+
}
75+
76+
export interface CrmStatisticCustomerAreaRespVO extends CrmStatisticCustomerBaseRespVO {
77+
areaId: number
78+
areaName: string
79+
areaPortion: number
80+
}
81+
5282
export interface CrmStatisticsCustomerDealCycleByUserRespVO {
5383
ownerUserName: string
5484
customerDealCycle: number
@@ -112,5 +142,33 @@ export const StatisticsCustomerApi = {
112142
url: '/crm/statistics-customer/get-customer-deal-cycle-by-user',
113143
params
114144
})
145+
},
146+
// 6.1 获取客户行业统计数据
147+
getCustomerIndustry: (params: any) => {
148+
return request.get({
149+
url: '/crm/statistics-customer/get-customer-industry-summary',
150+
params
151+
})
152+
},
153+
// 6.1 获取客户来源统计数据
154+
getCustomerSource: (params: any) => {
155+
return request.get({
156+
url: '/crm/statistics-customer/get-customer-source-summary',
157+
params
158+
})
159+
},
160+
// 6.1 获取客户行业统计数据
161+
getCustomerLevel: (params: any) => {
162+
return request.get({
163+
url: '/crm/statistics-customer/get-customer-level-summary',
164+
params
165+
})
166+
},
167+
// 6.1 获取客户行业统计数据
168+
getCustomerArea: (params: any) => {
169+
return request.get({
170+
url: '/crm/statistics-customer/get-customer-area-summary',
171+
params
172+
})
115173
}
116174
}

src/api/mall/statistics/member.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { formatDate } from '@/utils/formatTime'
55

66
/** 会员分析 Request VO */
77
export interface MemberAnalyseReqVO {
8-
times: [dayjs.ConfigType, dayjs.ConfigType]
8+
times: dayjs.ConfigType[]
99
}
1010

1111
/** 会员分析 Response VO */

src/components/FormCreate/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import MyFormCreate from './src/MyFormCreate.vue'
2+
3+
export { MyFormCreate }
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<template>
2+
<form-create v-bind="attrs">
3+
<!-- 保障 form-create 的原始插槽 -->
4+
<template v-for="(_, name) in slots" #[name]="slotData">
5+
<slot :name="name" v-bind="slotData || {}"></slot>
6+
</template>
7+
<!-- 使用项目重新封装的文件上传组件实现文件上载 -->
8+
<template #type-upload="scope">
9+
<!-- {{ logC(scope) }}-->
10+
<template v-if="scope.prop.props.uploadType === 'file'">
11+
<!-- TODO puhui999: 考虑是否使用属性透传直接把整个 scope.prop.props 传递给组件 -->
12+
<UploadFile
13+
:disabled="scope.prop.props.disabled"
14+
:limit="scope.prop.props.limit"
15+
:modelValue="scope.model.value || scope.prop.value"
16+
@update:modelValue="(val) => setValue(scope, val)"
17+
/>
18+
</template>
19+
<template v-if="scope.prop.props.uploadType === 'image' && scope.prop.props.limit === 1">
20+
<UploadImg
21+
:disabled="scope.prop.props.disabled"
22+
:modelValue="scope.model.value || scope.prop.value"
23+
@update:modelValue="(val) => setValue(scope, val)"
24+
/>
25+
</template>
26+
<template v-if="scope.prop.props.uploadType === 'image' && scope.prop.props.limit > 1">
27+
<UploadImgs
28+
:disabled="scope.prop.props.disabled"
29+
:limit="scope.prop.props.limit"
30+
:modelValue="scope.model.value || scope.prop.value"
31+
@update:modelValue="(val) => setValue(scope, val)"
32+
/>
33+
</template>
34+
</template>
35+
</form-create>
36+
</template>
37+
38+
<script lang="ts" setup>
39+
defineOptions({ name: 'MyFormCreate' })
40+
const attrs = useAttrs()
41+
const slots = useSlots()
42+
43+
// 测试使用,查看组件 scope 值
44+
// const logC = (s) => {
45+
// console.log(s)
46+
// }
47+
48+
// 设置表单值
49+
const setValue = (scope: any, value: any) => {
50+
const obj = {}
51+
obj[scope.prop.field] = value
52+
scope.api.setValue(obj)
53+
}
54+
</script>

src/components/UploadFile/src/UploadFile.vue

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
:action="uploadUrl"
77
:auto-upload="autoUpload"
88
:before-upload="beforeUpload"
9+
:disabled="disabled"
910
:drag="drag"
11+
:http-request="httpRequest"
1012
:limit="props.limit"
1113
:multiple="props.limit > 1"
1214
:on-error="excelUploadError"
@@ -15,15 +17,14 @@
1517
:on-remove="handleRemove"
1618
:on-success="handleFileSuccess"
1719
:show-file-list="true"
18-
:http-request="httpRequest"
1920
class="upload-file-uploader"
2021
name="file"
2122
>
22-
<el-button type="primary">
23+
<el-button v-if="!disabled" type="primary">
2324
<Icon icon="ep:upload-filled" />
2425
选取文件
2526
</el-button>
26-
<template v-if="isShowTip" #tip>
27+
<template v-if="isShowTip && !disabled" #tip>
2728
<div style="font-size: 8px">
2829
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
2930
</div>
@@ -54,7 +55,8 @@ const props = defineProps({
5455
limit: propTypes.number.def(5), // 数量限制
5556
autoUpload: propTypes.bool.def(true), // 自动上传
5657
drag: propTypes.bool.def(false), // 拖拽上传
57-
isShowTip: propTypes.bool.def(true) // 是否显示提示
58+
isShowTip: propTypes.bool.def(true), // 是否显示提示
59+
disabled: propTypes.bool.def(false) // 是否禁用上传组件 ==> 非必传(默认为 false)
5860
})
5961
6062
// ========== 上传相关 ==========

src/components/UploadFile/src/UploadImg.vue

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@
66
:action="uploadUrl"
77
:before-upload="beforeUpload"
88
:class="['upload', drag ? 'no-border' : '']"
9+
:disabled="disabled"
910
:drag="drag"
11+
:http-request="httpRequest"
1012
:multiple="false"
1113
:on-error="uploadError"
1214
:on-success="uploadSuccess"
1315
:show-file-list="false"
14-
:http-request="httpRequest"
1516
>
1617
<template v-if="modelValue">
1718
<img :src="modelValue" class="upload-image" />
1819
<div class="upload-handle" @click.stop>
19-
<div class="handle-icon" @click="editImg" v-if="!disabled">
20+
<div v-if="!disabled" class="handle-icon" @click="editImg">
2021
<Icon icon="ep:edit" />
2122
<span v-if="showBtnText">{{ t('action.edit') }}</span>
2223
</div>
@@ -77,10 +78,8 @@ const props = defineProps({
7778
height: propTypes.string.def('150px'), // 组件高度 ==> 非必传(默认为 150px)
7879
width: propTypes.string.def('150px'), // 组件宽度 ==> 非必传(默认为 150px)
7980
borderradius: propTypes.string.def('8px'), // 组件边框圆角 ==> 非必传(默认为 8px)
80-
// 是否显示删除按钮
81-
showDelete: propTypes.bool.def(true),
82-
// 是否显示按钮文字
83-
showBtnText: propTypes.bool.def(true)
81+
showDelete: propTypes.bool.def(true), // 是否显示删除按钮
82+
showBtnText: propTypes.bool.def(true) // 是否显示按钮文字
8483
})
8584
const { t } = useI18n() // 国际化
8685
const message = useMessage() // 消息弹窗

src/components/UploadFile/src/UploadImgs.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66
:action="uploadUrl"
77
:before-upload="beforeUpload"
88
:class="['upload', drag ? 'no-border' : '']"
9+
:disabled="disabled"
910
:drag="drag"
11+
:http-request="httpRequest"
1012
:limit="limit"
1113
:multiple="true"
1214
:on-error="uploadError"
1315
:on-exceed="handleExceed"
1416
:on-success="uploadSuccess"
15-
:http-request="httpRequest"
1617
list-type="picture-card"
1718
>
1819
<div class="upload-empty">

src/utils/formCreate.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export const setConfAndFields = (designerRef: object, conf: string, fields: stri
4040
export const setConfAndFields2 = (
4141
detailPreview: object,
4242
conf: string,
43-
fields: string,
43+
fields: string[],
4444
value?: object
4545
) => {
4646
if (isRef(detailPreview)) {

src/views/bpm/form/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888

8989
<!-- 表单详情的弹窗 -->
9090
<Dialog v-model="detailVisible" title="表单详情" width="800">
91-
<form-create :option="detailData.option" :rule="detailData.rule" />
91+
<my-form-create :option="detailData.option" :rule="detailData.rule" />
9292
</Dialog>
9393
</template>
9494

src/views/bpm/processInstance/detail/index.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@
9191
</template>
9292
<!-- 情况一:流程表单 -->
9393
<el-col v-if="processInstance?.processDefinition?.formType === 10" :offset="6" :span="16">
94-
<form-create
95-
ref="fApi"
94+
<my-form-create
9695
v-model="detailForm.value"
96+
v-model:api="fApi"
9797
:option="detailForm.option"
9898
:rule="detailForm.rule"
9999
/>
@@ -280,9 +280,9 @@ const getProcessInstance = async () => {
280280
data.formVariables
281281
)
282282
nextTick().then(() => {
283-
fApi.value?.fapi?.btn.show(false)
284-
fApi.value?.fapi?.resetBtn.show(false)
285-
fApi.value?.fapi?.disabled(true)
283+
fApi.value?.btn.show(false)
284+
fApi.value?.resetBtn.show(false)
285+
fApi.value?.disabled(true)
286286
})
287287
} else {
288288
// 注意:data.processDefinition.formCustomViewPath 是组件的全路径,例如说:/crm/contract/detail/index.vue

0 commit comments

Comments
 (0)