+
{{ t('action.edit') }}
@@ -77,10 +78,8 @@ const props = defineProps({
height: propTypes.string.def('150px'), // 组件高度 ==> 非必传(默认为 150px)
width: propTypes.string.def('150px'), // 组件宽度 ==> 非必传(默认为 150px)
borderradius: propTypes.string.def('8px'), // 组件边框圆角 ==> 非必传(默认为 8px)
- // 是否显示删除按钮
- showDelete: propTypes.bool.def(true),
- // 是否显示按钮文字
- showBtnText: propTypes.bool.def(true)
+ showDelete: propTypes.bool.def(true), // 是否显示删除按钮
+ showBtnText: propTypes.bool.def(true) // 是否显示按钮文字
})
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
diff --git a/src/components/UploadFile/src/UploadImgs.vue b/src/components/UploadFile/src/UploadImgs.vue
index bd19ebbe..85da64c0 100644
--- a/src/components/UploadFile/src/UploadImgs.vue
+++ b/src/components/UploadFile/src/UploadImgs.vue
@@ -6,13 +6,14 @@
:action="uploadUrl"
:before-upload="beforeUpload"
:class="['upload', drag ? 'no-border' : '']"
+ :disabled="disabled"
:drag="drag"
+ :http-request="httpRequest"
:limit="limit"
:multiple="true"
:on-error="uploadError"
:on-exceed="handleExceed"
:on-success="uploadSuccess"
- :http-request="httpRequest"
list-type="picture-card"
>
diff --git a/src/utils/formCreate.ts b/src/utils/formCreate.ts
index b9644d6f..850df8cb 100644
--- a/src/utils/formCreate.ts
+++ b/src/utils/formCreate.ts
@@ -40,7 +40,7 @@ export const setConfAndFields = (designerRef: object, conf: string, fields: stri
export const setConfAndFields2 = (
detailPreview: object,
conf: string,
- fields: string,
+ fields: string[],
value?: object
) => {
if (isRef(detailPreview)) {
diff --git a/src/views/bpm/form/index.vue b/src/views/bpm/form/index.vue
index 3d542c80..a0f1592c 100644
--- a/src/views/bpm/form/index.vue
+++ b/src/views/bpm/form/index.vue
@@ -88,7 +88,7 @@
diff --git a/src/views/bpm/processInstance/detail/index.vue b/src/views/bpm/processInstance/detail/index.vue
index ef260dee..6da1d415 100644
--- a/src/views/bpm/processInstance/detail/index.vue
+++ b/src/views/bpm/processInstance/detail/index.vue
@@ -91,9 +91,9 @@
-
@@ -280,9 +280,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 00000000..c35638a6
--- /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 00000000..d505a41b
--- /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 00000000..6afd5647
--- /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 00000000..11a5c68f
--- /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 c9d7268c..cea0d3b7 100644
--- a/src/views/crm/statistics/customer/index.vue
+++ b/src/views/crm/statistics/customer/index.vue
@@ -80,8 +80,24 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -99,6 +115,10 @@ import CustomerFollowUpType from './components/CustomerFollowUpType.vue'
import CustomerConversionStat from './components/CustomerConversionStat.vue'
import CustomerDealCycle from './components/CustomerDealCycle.vue'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
+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' })
@@ -132,6 +152,13 @@ const conversionStatRef = ref() // 4. 客户转化率分析
// 5. TODO 公海客户分析
// 缺 crm_owner_record 表 TODO @dhb52:可以先做界面 + 接口,接口数据直接写死返回,相当于 mock 出来
const dealCycleRef = ref() // 6. 成交周期分析
+const addressRef = ref()
+// 客户级别
+const levelRef = ref()
+// 客户来源
+const sourceRef = ref()
+// 客户行业
+const industryRef = ref()
/** 搜索按钮操作 */
const handleQuery = () => {
@@ -151,6 +178,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 11bfc999..4f509986 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 `
-
+ >