- {{ t('action.edit') }}
+ {{ t('action.edit') }}
- {{ t('action.detail') }}
+ {{ t('action.detail') }}
-
+
- {{ t('action.del') }}
+ {{ t('action.del') }}
@@ -81,7 +81,11 @@ const props = defineProps({
fileType: propTypes.array.def(['image/jpeg', 'image/png', 'image/gif']), // 图片类型限制 ==> 非必传(默认为 ["image/jpeg", "image/png", "image/gif"])
height: propTypes.string.def('150px'), // 组件高度 ==> 非必传(默认为 150px)
width: propTypes.string.def('150px'), // 组件宽度 ==> 非必传(默认为 150px)
- borderradius: propTypes.string.def('8px') // 组件边框圆角 ==> 非必传(默认为 8px)
+ borderradius: propTypes.string.def('8px'), // 组件边框圆角 ==> 非必传(默认为 8px)
+ // 是否显示删除按钮
+ showDelete: propTypes.bool.def(true),
+ // 是否显示按钮文字
+ showBtnText: propTypes.bool.def(true)
})
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts
index aa260cf1..70dc5b2f 100644
--- a/src/router/modules/remaining.ts
+++ b/src/router/modules/remaining.ts
@@ -459,6 +459,34 @@ const remainingRouter: AppRouteRecordRaw[] = [
component: () => import('@/views/pay/cashier/index.vue')
}
]
+ },
+ {
+ path: '/diy',
+ name: 'DiyCenter',
+ meta: { hidden: true },
+ component: Layout,
+ children: [
+ {
+ path: 'template/decorate/:id',
+ name: 'DiyTemplateDecorate',
+ meta: {
+ title: '模板装修',
+ noCache: true,
+ hidden: true
+ },
+ component: () => import('@/views/mall/promotion/diy/template/decorate.vue')
+ },
+ {
+ path: 'page/decorate/:id',
+ name: 'DiyPageDecorate',
+ meta: {
+ title: '页面装修',
+ noCache: true,
+ hidden: true
+ },
+ component: () => import('@/views/mall/promotion/diy/page/decorate.vue')
+ }
+ ]
}
]
diff --git a/src/utils/dict.ts b/src/utils/dict.ts
index 12d01507..5a818fa9 100644
--- a/src/utils/dict.ts
+++ b/src/utils/dict.ts
@@ -190,5 +190,8 @@ export enum DICT_TYPE {
// ========== CRM - 客户管理模块 ==========
CRM_RECEIVABLE_CHECK_STATUS = 'crm_receivable_check_status',
- CRM_RETURN_TYPE = 'crm_return_type'
+ CRM_RETURN_TYPE = 'crm_return_type',
+ CRM_CUSTOMER_INDUSTRY = 'crm_customer_industry',
+ CRM_CUSTOMER_LEVEL = 'crm_customer_level',
+ CRM_CUSTOMER_SOURCE = 'crm_customer_source'
}
diff --git a/src/views/Login/components/MobileForm.vue b/src/views/Login/components/MobileForm.vue
index ff9069f4..7f5d9942 100644
--- a/src/views/Login/components/MobileForm.vue
+++ b/src/views/Login/components/MobileForm.vue
@@ -102,6 +102,7 @@ import { usePermissionStore } from '@/store/modules/permission'
import { getTenantIdByName, sendSmsCode, smsLogin } from '@/api/login'
import LoginFormTitle from './LoginFormTitle.vue'
import { LoginStateEnum, useFormValid, useLoginState } from './useLogin'
+import { ElLoading } from 'element-plus'
defineOptions({ name: 'MobileForm' })
diff --git a/src/views/crm/clue/ClueForm.vue b/src/views/crm/clue/ClueForm.vue
index e72e4228..877b26d9 100644
--- a/src/views/crm/clue/ClueForm.vue
+++ b/src/views/crm/clue/ClueForm.vue
@@ -7,28 +7,6 @@
label-width="100px"
v-loading="formLoading"
>
-
-
-
- {{ dict.label }}
-
-
-
-
-
-
- {{ dict.label }}
-
-
-
@@ -80,8 +58,6 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
const formType = ref('') // 表单的类型:create - 新增;update - 修改
const formData = ref({
id: undefined,
- transformStatus: undefined,
- followUpStatus: undefined,
name: undefined,
customerId: undefined,
contactNextTime: undefined,
@@ -93,10 +69,8 @@ const formData = ref({
remark: undefined
})
const formRules = reactive({
- transformStatus: [{ required: true, message: '转化状态不能为空', trigger: 'blur' }],
- followUpStatus: [{ required: true, message: '跟进状态不能为空', trigger: 'blur' }],
name: [{ required: true, message: '线索名称不能为空', trigger: 'blur' }],
- customerId: [{ required: true, message: '客户id不能为空', trigger: 'blur' }]
+ customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }]
})
const formRef = ref() // 表单 Ref
@@ -148,8 +122,6 @@ const submitForm = async () => {
const resetForm = () => {
formData.value = {
id: undefined,
- transformStatus: undefined,
- followUpStatus: undefined,
name: undefined,
customerId: undefined,
contactNextTime: undefined,
diff --git a/src/views/crm/clue/index.vue b/src/views/crm/clue/index.vue
index 42f20545..e866a725 100644
--- a/src/views/crm/clue/index.vue
+++ b/src/views/crm/clue/index.vue
@@ -8,36 +8,6 @@
:inline="true"
label-width="68px"
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
搜索
重置
@@ -238,17 +148,9 @@ const list = ref([]) // 列表的数据
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
- transformStatus: null,
- followUpStatus: null,
name: null,
- customerId: null,
- contactNextTime: [],
telephone: null,
- mobile: null,
- address: null,
- ownerUserId: null,
- contactLastTime: [],
- createTime: []
+ mobile: null
})
const queryFormRef = ref() // 搜索的表单
const exportLoading = ref(false) // 导出的加载中
diff --git a/src/views/crm/contract/index.vue b/src/views/crm/contract/index.vue
index 7a8211be..1670c418 100644
--- a/src/views/crm/contract/index.vue
+++ b/src/views/crm/contract/index.vue
@@ -166,7 +166,7 @@ import download from '@/utils/download'
import * as ContractApi from '@/api/crm/contract'
import ContractForm from './ContractForm.vue'
-defineOptions({ name: 'Contract' })
+defineOptions({ name: 'CrmContract' })
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化
diff --git a/src/views/crm/customer/CustomerForm.vue b/src/views/crm/customer/CustomerForm.vue
new file mode 100644
index 00000000..6e5cd62e
--- /dev/null
+++ b/src/views/crm/customer/CustomerForm.vue
@@ -0,0 +1,205 @@
+
+
+
+
diff --git a/src/views/crm/customer/index.vue b/src/views/crm/customer/index.vue
new file mode 100644
index 00000000..ace56dac
--- /dev/null
+++ b/src/views/crm/customer/index.vue
@@ -0,0 +1,228 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/banner/BannerForm.vue b/src/views/mall/promotion/banner/BannerForm.vue
index 687f26a8..03bca0f9 100644
--- a/src/views/mall/promotion/banner/BannerForm.vue
+++ b/src/views/mall/promotion/banner/BannerForm.vue
@@ -9,12 +9,12 @@
>
-
-
+
+
-
+
@@ -42,7 +42,7 @@
-
+
+
+
+
diff --git a/src/views/mall/promotion/diy/page/decorate.vue b/src/views/mall/promotion/diy/page/decorate.vue
new file mode 100644
index 00000000..76336bc4
--- /dev/null
+++ b/src/views/mall/promotion/diy/page/decorate.vue
@@ -0,0 +1,99 @@
+
+
+
+
diff --git a/src/views/mall/promotion/diy/page/index.vue b/src/views/mall/promotion/diy/page/index.vue
new file mode 100644
index 00000000..6436c2f7
--- /dev/null
+++ b/src/views/mall/promotion/diy/page/index.vue
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 装修
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/diy/template/DiyTemplateForm.vue b/src/views/mall/promotion/diy/template/DiyTemplateForm.vue
new file mode 100644
index 00000000..e4289f65
--- /dev/null
+++ b/src/views/mall/promotion/diy/template/DiyTemplateForm.vue
@@ -0,0 +1,115 @@
+
+
+
+
diff --git a/src/views/mall/promotion/diy/template/decorate.vue b/src/views/mall/promotion/diy/template/decorate.vue
new file mode 100644
index 00000000..9c7500b2
--- /dev/null
+++ b/src/views/mall/promotion/diy/template/decorate.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/diy/template/index.vue b/src/views/mall/promotion/diy/template/index.vue
new file mode 100644
index 00000000..dcf13698
--- /dev/null
+++ b/src/views/mall/promotion/diy/template/index.vue
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 装修
+
+
+ 编辑
+
+
+
+ 使用
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/trade/order/detail/index.vue b/src/views/mall/trade/order/detail/index.vue
index 38b9342e..67e54767 100644
--- a/src/views/mall/trade/order/detail/index.vue
+++ b/src/views/mall/trade/order/detail/index.vue
@@ -16,7 +16,7 @@
-
+
{{ formData.brokerageUser?.nickname }}
@@ -26,7 +26,7 @@
-
+
{{ formData.receiverMobile }}
-
+
{{ formData.receiverAreaName }} {{ formData.receiverDetailAddress }}
-
+
{{ deliveryExpressList.find((item) => item.id === formData.logisticsId)?.name }}
-
+
{{ formData.logisticsNo }}
-
+
{{ formatDate(formData.deliveryTime) }}
-
+
-
+
{{ pickUpStore?.name }}
diff --git a/src/views/mall/trade/order/index.vue b/src/views/mall/trade/order/index.vue
index e08715df..c892292a 100644
--- a/src/views/mall/trade/order/index.vue
+++ b/src/views/mall/trade/order/index.vue
@@ -125,10 +125,10 @@
-
+
+
-
-
+
详情
- handleCommand(command, row)">
+ handleCommand(command, row)"
+ >
更多
diff --git a/src/views/member/user/detail/UserOrderList.vue b/src/views/member/user/detail/UserOrderList.vue
index 1f4359ca..b6870bc3 100644
--- a/src/views/member/user/detail/UserOrderList.vue
+++ b/src/views/member/user/detail/UserOrderList.vue
@@ -162,7 +162,8 @@
-
+
+
diff --git a/stylelint.config.js b/stylelint.config.js
index b970bd25..890b45bc 100644
--- a/stylelint.config.js
+++ b/stylelint.config.js
@@ -16,8 +16,8 @@ module.exports = {
ignoreAtRules: ['function', 'if', 'each', 'include', 'mixin']
}
],
- // 命名规范
- "selector-class-pattern": null,
+ 'media-query-no-invalid': null,
+ 'function-no-unknown': null,
'no-empty-source': null,
'named-grid-areas-no-invalid': null,
'unicode-bom': 'never',
@@ -215,6 +215,8 @@ module.exports = {
extends: ['stylelint-config-recommended', 'stylelint-config-html'],
rules: {
'keyframes-name-pattern': null,
+ 'selector-class-pattern': null,
+ 'no-duplicate-selectors': null,
'selector-pseudo-class-no-unknown': [
true,
{