diff --git a/src/api/crm/statistics/customer.ts b/src/api/crm/statistics/customer.ts index 4358db773f914929e4d3786d6be0baf4cdf6de91..aeb3b3a229825282f6df18608f1aa7a583970451 100644 --- a/src/api/crm/statistics/customer.ts +++ b/src/api/crm/statistics/customer.ts @@ -49,6 +49,36 @@ export interface CrmStatisticsCustomerDealCycleByDateRespVO { customerDealCycle: number } +export interface CrmStatisticCustomerBaseRespVO { + customerCount: number + dealCount: number + dealPortion: number +} + +export interface CrmStatisticCustomerIndustryRespVO extends CrmStatisticCustomerBaseRespVO { + industryId: number + industryName: string + industryPortion: number +} + +export interface CrmStatisticCustomerSourceRespVO extends CrmStatisticCustomerBaseRespVO { + source: number + sourceName: string + sourcePortion: number +} + +export interface CrmStatisticCustomerLevelRespVO extends CrmStatisticCustomerBaseRespVO { + level: number + levelName: string + levelPortion: number +} + +export interface CrmStatisticCustomerAreaRespVO extends CrmStatisticCustomerBaseRespVO { + areaId: number + areaName: string + areaPortion: number +} + export interface CrmStatisticsCustomerDealCycleByUserRespVO { ownerUserName: string customerDealCycle: number @@ -112,5 +142,33 @@ export const StatisticsCustomerApi = { url: '/crm/statistics-customer/get-customer-deal-cycle-by-user', params }) + }, + // 6.1 获取客户行业统计数据 + getCustomerIndustry: (params: any) => { + return request.get({ + url: '/crm/statistics-customer/get-customer-industry-summary', + params + }) + }, + // 6.1 获取客户来源统计数据 + getCustomerSource: (params: any) => { + return request.get({ + url: '/crm/statistics-customer/get-customer-source-summary', + params + }) + }, + // 6.1 获取客户行业统计数据 + getCustomerLevel: (params: any) => { + return request.get({ + url: '/crm/statistics-customer/get-customer-level-summary', + params + }) + }, + // 6.1 获取客户行业统计数据 + getCustomerArea: (params: any) => { + return request.get({ + url: '/crm/statistics-customer/get-customer-area-summary', + params + }) } } diff --git a/src/api/mall/statistics/member.ts b/src/api/mall/statistics/member.ts index 92af031ed9448fec22c41187160388cbffbef87b..d9accf920d92de91901580e775e954361e0f4fe2 100644 --- a/src/api/mall/statistics/member.ts +++ b/src/api/mall/statistics/member.ts @@ -5,7 +5,7 @@ import { formatDate } from '@/utils/formatTime' /** 会员分析 Request VO */ export interface MemberAnalyseReqVO { - times: [dayjs.ConfigType, dayjs.ConfigType] + times: dayjs.ConfigType[] } /** 会员分析 Response VO */ diff --git a/src/components/FormCreate/index.ts b/src/components/FormCreate/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..df750822d00a61f5bfffee994e03d7d308841e05 --- /dev/null +++ b/src/components/FormCreate/index.ts @@ -0,0 +1,3 @@ +import MyFormCreate from './src/MyFormCreate.vue' + +export { MyFormCreate } diff --git a/src/components/FormCreate/src/MyFormCreate.vue b/src/components/FormCreate/src/MyFormCreate.vue new file mode 100644 index 0000000000000000000000000000000000000000..e72144b6feb1b94214f29a630f3f302f2ee4f379 --- /dev/null +++ b/src/components/FormCreate/src/MyFormCreate.vue @@ -0,0 +1,54 @@ + + + diff --git a/src/components/UploadFile/src/UploadFile.vue b/src/components/UploadFile/src/UploadFile.vue index c91f977a53d92da180d43e038692df3f6720eca7..71f944ed3c2c07efdcec40a51463e95c5fbc1f92 100644 --- a/src/components/UploadFile/src/UploadFile.vue +++ b/src/components/UploadFile/src/UploadFile.vue @@ -6,7 +6,9 @@ :action="uploadUrl" :auto-upload="autoUpload" :before-upload="beforeUpload" + :disabled="disabled" :drag="drag" + :http-request="httpRequest" :limit="props.limit" :multiple="props.limit > 1" :on-error="excelUploadError" @@ -15,15 +17,14 @@ :on-remove="handleRemove" :on-success="handleFileSuccess" :show-file-list="true" - :http-request="httpRequest" class="upload-file-uploader" name="file" > - + 选取文件 - - + - + diff --git a/src/views/bpm/processInstance/create/index.vue b/src/views/bpm/processInstance/create/index.vue index a10e0208845c2a8ae0e902b3045ffa27a5bd472c..988004c48f09220b77d89564a806e960e292ca2f 100644 --- a/src/views/bpm/processInstance/create/index.vue +++ b/src/views/bpm/processInstance/create/index.vue @@ -2,22 +2,23 @@ - - + + - + - - + + @@ -30,14 +31,15 @@
申请信息【{{ selectProcessInstance.name }}】 - 选择其它流程 + + 选择其它流程
- - + diff --git a/src/views/bpm/processInstance/detail/index.vue b/src/views/bpm/processInstance/detail/index.vue index 074d13294a1f9d9303712fcae71efd8067be5ca8..5b16a5583c40fa7d446b53bc462a1da6a3e41230 100644 --- a/src/views/bpm/processInstance/detail/index.vue +++ b/src/views/bpm/processInstance/detail/index.vue @@ -68,9 +68,9 @@ - @@ -229,9 +229,9 @@ const getProcessInstance = async () => { data.formVariables ) nextTick().then(() => { - fApi.value?.fapi?.btn.show(false) - fApi.value?.fapi?.resetBtn.show(false) - fApi.value?.fapi?.disabled(true) + fApi.value?.btn.show(false) + fApi.value?.resetBtn.show(false) + fApi.value?.disabled(true) }) } else { // 注意:data.processDefinition.formCustomViewPath 是组件的全路径,例如说:/crm/contract/detail/index.vue diff --git a/src/views/crm/statistics/customer/components/CustomerAddress.vue b/src/views/crm/statistics/customer/components/CustomerAddress.vue new file mode 100644 index 0000000000000000000000000000000000000000..c35638a603b97eacf18b7ca9705c71d69285cdd7 --- /dev/null +++ b/src/views/crm/statistics/customer/components/CustomerAddress.vue @@ -0,0 +1,150 @@ + + + diff --git a/src/views/crm/statistics/customer/components/CustomerIndustry.vue b/src/views/crm/statistics/customer/components/CustomerIndustry.vue new file mode 100644 index 0000000000000000000000000000000000000000..d505a41b4664e53fe8b1c1b338adc6316af3eceb --- /dev/null +++ b/src/views/crm/statistics/customer/components/CustomerIndustry.vue @@ -0,0 +1,171 @@ + + + diff --git a/src/views/crm/statistics/customer/components/CustomerLevel.vue b/src/views/crm/statistics/customer/components/CustomerLevel.vue new file mode 100644 index 0000000000000000000000000000000000000000..6afd56479d2a80088b7dbf2d46de95a18e6dfb15 --- /dev/null +++ b/src/views/crm/statistics/customer/components/CustomerLevel.vue @@ -0,0 +1,171 @@ + + + diff --git a/src/views/crm/statistics/customer/components/CustomerSource.vue b/src/views/crm/statistics/customer/components/CustomerSource.vue new file mode 100644 index 0000000000000000000000000000000000000000..11a5c68fd51f29b4a60d146d2f2d675232cb2258 --- /dev/null +++ b/src/views/crm/statistics/customer/components/CustomerSource.vue @@ -0,0 +1,171 @@ + + + diff --git a/src/views/crm/statistics/customer/index.vue b/src/views/crm/statistics/customer/index.vue index 9d804e3175f7a87dacbe01869565658d46f72dd3..37a9e999af76549f5c4fc6cdf28f1bb3bba7f247 100644 --- a/src/views/crm/statistics/customer/index.vue +++ b/src/views/crm/statistics/customer/index.vue @@ -3,49 +3,55 @@ - + - 搜索 - 重置 + + + 搜索 + + + + 重置 + @@ -54,24 +60,40 @@ - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + @@ -88,6 +110,10 @@ import CustomerFollowupSummary from './components/CustomerFollowupSummary.vue' import CustomerFollowupType from './components/CustomerFollowupType.vue' import CustomerConversionStat from './components/CustomerConversionStat.vue' import CustomerDealCycle from './components/CustomerDealCycle.vue' +import CustomerAddress from './components/CustomerAddress.vue' +import CustomerIndustry from './components/CustomerIndustry.vue' +import CustomerSource from './components/CustomerSource.vue' +import CustomerLevel from './components/CustomerLevel.vue' defineOptions({ name: 'CrmStatisticsCustomer' }) @@ -125,7 +151,13 @@ const conversionStatRef = ref() // 缺 crm_owner_record 表 // 6.成交周期分析 const dealCycleRef = ref() - +const addressRef = ref() +// 客户级别 +const levelRef = ref() +// 客户来源 +const sourceRef = ref() +// 客户行业 +const industryRef = ref() /** 搜索按钮操作 */ const handleQuery = () => { switch (activeTab.value) { @@ -144,6 +176,18 @@ const handleQuery = () => { case 'dealCycle': dealCycleRef.value?.loadData?.() break + case 'addressRef': + addressRef.value?.loadData?.() + break + case 'levelRef': + levelRef.value?.loadData?.() + break + case 'sourceRef': + sourceRef.value?.loadData?.() + break + case 'industryRef': + industryRef.value?.loadData?.() + break } } diff --git a/src/views/infra/build/index.vue b/src/views/infra/build/index.vue index 11bfc999886d6108ab687d81b3548b7a046e37ae..4f5099862b5382df966bf9553aa42fcb06c6f5c5 100644 --- a/src/views/infra/build/index.vue +++ b/src/views/infra/build/index.vue @@ -23,7 +23,7 @@
-
+
@@ -81,15 +81,14 @@ const makeTemplate = () => { const rule = designer.value.getRule() const opt = designer.value.getOption() return `