+
-
-
-
- {{ definition.name }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- 申请信息【{{ selectProcessDefinition.name }}】
-
- 选择其它流程
-
-
-
-
-
-
-
- 指定审批人
-
+
+
+
+
+
+
+ {{ getCategoryName(categoryCode as any) }}
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ {{ definition.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/bpm/processInstance/create/index_old.vue b/src/views/bpm/processInstance/create/index_old.vue
new file mode 100644
index 00000000..83e1ff46
--- /dev/null
+++ b/src/views/bpm/processInstance/create/index_old.vue
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ definition.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 申请信息【{{ selectProcessDefinition.name }}】
+
+ 选择其它流程
+
+
+
+
+
+
+
+ 指定审批人
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue b/src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue
index 8912593a..781263d2 100644
--- a/src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue
+++ b/src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue
@@ -1,54 +1,61 @@
-
- 流程图
-
-
+
-
diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue b/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue
new file mode 100644
index 00000000..894a5d44
--- /dev/null
+++ b/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue
@@ -0,0 +1,989 @@
+
+
+
+
+
+
+ {{ getButtonDisplayName(OperationButtonType.APPROVE) }}
+
+
+
+
+
+
+
+ 填写表单【{{ runningTask?.formName }}】
+
+
+
+
+
+
+
+
+ {{ getButtonDisplayName(OperationButtonType.APPROVE) }}
+
+ 取消
+
+
+
+
+
+
+
+
+
+ {{ getButtonDisplayName(OperationButtonType.REJECT) }}
+
+
+
+
+
+
+
+
+
+
+ {{ getButtonDisplayName(OperationButtonType.REJECT) }}
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+ {{ getButtonDisplayName(OperationButtonType.COPY) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getButtonDisplayName(OperationButtonType.COPY) }}
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+ {{ getButtonDisplayName(OperationButtonType.TRANSFER) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getButtonDisplayName(OperationButtonType.TRANSFER) }}
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+ {{ getButtonDisplayName(OperationButtonType.DELEGATE) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getButtonDisplayName(OperationButtonType.DELEGATE) }}
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+ {{ getButtonDisplayName(OperationButtonType.ADD_SIGN) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 向前{{ getButtonDisplayName(OperationButtonType.ADD_SIGN) }}
+
+
+ 向后{{ getButtonDisplayName(OperationButtonType.ADD_SIGN) }}
+
+ 取消
+
+
+
+
+
+
+
+
+
+ 减签
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 减签
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+ {{ getButtonDisplayName(OperationButtonType.RETURN) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getButtonDisplayName(OperationButtonType.RETURN) }}
+
+ 取消
+
+
+
+
+
+
+
+
+
+ 取消
+
+
+
+
+
+ 取消后,该审批流程将自动结束
+
+
+
+
+ 确认
+
+ 取消
+
+
+
+
+
+
+ 再次提交
+
+
+
+
+
+
diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue b/src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue
new file mode 100644
index 00000000..0808bec9
--- /dev/null
+++ b/src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue
@@ -0,0 +1,168 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue b/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue
index f82e8003..8690e58f 100644
--- a/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue
+++ b/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue
@@ -1,85 +1,50 @@
-
-
- 审批记录
-
-
-
-
-
-
- 结束流程:在 {{ formatDate(processInstance?.endTime) }} 结束
-
-
-
-
-
- 审批任务:{{ item.name }}
-
-
- 子任务
-
-
- 查看表单
-
-
-
-
-
-
-
-
-
-
- 审批建议:{{ item.reason }}
-
-
-
-
- 发起流程:【{{ processInstance.startUser?.nickname }}】在
- {{ formatDate(processInstance?.startTime) }} 发起【 {{ processInstance.name }} 】流程
-
-
-
-
-
-
+
+
+
+
+ {{ scope.row.assigneeUser?.nickname || scope.row.ownerUser?.nickname }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.reason }}
+
+ 查看表单
+
+
+
+
+
+ {{ formatPast2(scope.row.durationInMillis) }}
+
+
+
-
-
diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceTimeline.vue b/src/views/bpm/processInstance/detail/ProcessInstanceTimeline.vue
new file mode 100644
index 00000000..56b466a9
--- /dev/null
+++ b/src/views/bpm/processInstance/detail/ProcessInstanceTimeline.vue
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
{{ activity.name }}
+
+
+ {{ getApprovalNodeTime(activity) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ user.nickname.substring(0, 1) }}
+
+ {{ user.nickname }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ task.assigneeUser?.nickname.substring(0, 1) }}
+
+ {{ task.assigneeUser?.nickname }}
+
+
+
+
+ {{ task.ownerUser?.nickname.substring(0, 1) }}
+
+ {{ task.ownerUser?.nickname }}
+
+
+
+
+
+
+
+
+
+ 审批意见:{{ task.reason }}
+
+
+
+
+
+
+
+ {{ user.nickname.substring(0, 1) }}
+
+ {{ user.nickname }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/bpm/processInstance/detail/dialog/TaskDelegateForm.vue b/src/views/bpm/processInstance/detail/dialog/TaskDelegateForm.vue
deleted file mode 100644
index 178b1b97..00000000
--- a/src/views/bpm/processInstance/detail/dialog/TaskDelegateForm.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
diff --git a/src/views/bpm/processInstance/detail/dialog/TaskReturnForm.vue b/src/views/bpm/processInstance/detail/dialog/TaskReturnForm.vue
deleted file mode 100644
index a1391697..00000000
--- a/src/views/bpm/processInstance/detail/dialog/TaskReturnForm.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
diff --git a/src/views/bpm/processInstance/detail/dialog/TaskSignCreateForm.vue b/src/views/bpm/processInstance/detail/dialog/TaskSignCreateForm.vue
deleted file mode 100644
index 9e4998c1..00000000
--- a/src/views/bpm/processInstance/detail/dialog/TaskSignCreateForm.vue
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
-
diff --git a/src/views/bpm/processInstance/detail/dialog/TaskSignDeleteForm.vue b/src/views/bpm/processInstance/detail/dialog/TaskSignDeleteForm.vue
deleted file mode 100644
index 19bb2dce..00000000
--- a/src/views/bpm/processInstance/detail/dialog/TaskSignDeleteForm.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
diff --git a/src/views/bpm/processInstance/detail/dialog/TaskSignList.vue b/src/views/bpm/processInstance/detail/dialog/TaskSignList.vue
deleted file mode 100644
index 648e86b5..00000000
--- a/src/views/bpm/processInstance/detail/dialog/TaskSignList.vue
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
-
-
- 【{{ parentTask.name }} 】审批人:{{ parentTask?.assigneeUser?.nickname }}
-
- 减签
-
-
-
-
-
-
- {{ scope.row.assigneeUser?.nickname || scope.row.ownerUser?.nickname }}
-
-
-
-
- {{ scope.row.assigneeUser?.deptName || scope.row.ownerUser?.deptName }}
-
-
-
-
-
-
-
-
-
-
-
-
- 减签
-
-
-
-
-
-
-
-
-
-
diff --git a/src/views/bpm/processInstance/detail/dialog/TaskTransferForm.vue b/src/views/bpm/processInstance/detail/dialog/TaskTransferForm.vue
deleted file mode 100644
index c1012ac9..00000000
--- a/src/views/bpm/processInstance/detail/dialog/TaskTransferForm.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
diff --git a/src/views/bpm/processInstance/detail/index.vue b/src/views/bpm/processInstance/detail/index.vue
index f3072e56..9809f7a8 100644
--- a/src/views/bpm/processInstance/detail/index.vue
+++ b/src/views/bpm/processInstance/detail/index.vue
@@ -1,174 +1,170 @@
-
-
-
-
- 审批任务【{{ item.name }}】
-
-
-
-
- {{ processInstance.name }}
-
-
- {{ processInstance?.startUser.nickname }}
- {{ processInstance?.startUser.deptName }}
-
-
-
-
- 填写表单【{{ runningTasks[index]?.formName }}】
-
-
-
-
-
-
+
+
+
+ 编号:{{ id }}
+
+
+
{{ processInstance.name }}
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
- 通过
-
-
-
- 不通过
-
-
-
- 转办
-
-
-
- 委派
-
-
-
- 加签
-
-
-
- 回退
-
+
+ {{ processInstance?.startUser?.nickname.substring(0, 1) }}
+
+ {{ processInstance?.startUser?.nickname }}
+
+
{{ formatDate(processInstance.startTime) }} 提交
-
-
-
-
-
- 申请信息【{{ processInstance.name }}】
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
+
+
+
+
-
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+ 流转评论
+
+
+
+
+
+
+
+
+
diff --git a/src/views/bpm/processInstance/index.vue b/src/views/bpm/processInstance/index.vue
index 018a4a98..a47b8bf7 100644
--- a/src/views/bpm/processInstance/index.vue
+++ b/src/views/bpm/processInstance/index.vue
@@ -1,5 +1,5 @@
-
+
@@ -10,7 +10,7 @@
:inline="true"
label-width="68px"
>
-
+
-
-
+
+
+ 搜索
-
+
+
+
+
-
+
+
-
-
-
-
- 搜索
- 重置
-
+
+
+
- 发起流程
-
+
+
+ 高级筛选
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确认
+ 取消
+ 清空
+
+
@@ -95,6 +137,8 @@
min-width="100"
fixed="left"
/>
+
+
@@ -114,7 +158,7 @@
width="180"
:formatter="dateFormatter"
/>
-
+
取消
-
+
重新发起
@@ -162,11 +206,14 @@
+
diff --git a/src/views/bpm/processInstance/manager/index.vue b/src/views/bpm/processInstance/manager/index.vue
index 38c6d5ad..21e3a9ea 100644
--- a/src/views/bpm/processInstance/manager/index.vue
+++ b/src/views/bpm/processInstance/manager/index.vue
@@ -1,5 +1,5 @@
-
+
@@ -76,9 +76,13 @@
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
- class="!w-220px"
+ class="!w-240px"
/>
+
+ 搜索
+ 重置
+
diff --git a/src/views/bpm/processListener/ProcessListenerForm.vue b/src/views/bpm/processListener/ProcessListenerForm.vue
index 8d4e9796..a9684dff 100644
--- a/src/views/bpm/processListener/ProcessListenerForm.vue
+++ b/src/views/bpm/processListener/ProcessListenerForm.vue
@@ -15,7 +15,7 @@
{{ dict.label }}
diff --git a/src/views/bpm/processListener/index.vue b/src/views/bpm/processListener/index.vue
index d9668177..8b5c36e7 100644
--- a/src/views/bpm/processListener/index.vue
+++ b/src/views/bpm/processListener/index.vue
@@ -1,5 +1,5 @@
-
+
diff --git a/src/views/bpm/simple/SimpleModelDesign.vue b/src/views/bpm/simple/SimpleModelDesign.vue
new file mode 100644
index 00000000..1740e03f
--- /dev/null
+++ b/src/views/bpm/simple/SimpleModelDesign.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/src/views/bpm/simpleWorkflow/index.vue b/src/views/bpm/simpleWorkflow/index.vue
deleted file mode 100644
index 144615e0..00000000
--- a/src/views/bpm/simpleWorkflow/index.vue
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/src/views/bpm/task/copy/index.vue b/src/views/bpm/task/copy/index.vue
index b61ab101..f32a52a5 100644
--- a/src/views/bpm/task/copy/index.vue
+++ b/src/views/bpm/task/copy/index.vue
@@ -1,5 +1,9 @@
+
@@ -7,6 +11,7 @@
-
+
-
-
+
+
+ {{ scope.row.createUser?.nickname || '系统' }}
+
+
{
/** 处理审批按钮 */
const handleAudit = (row: any) => {
+ const query = {
+ id: row.processInstanceId,
+ activityId: undefined
+ }
+ if (row.activityId) {
+ query.activityId = row.activityId
+ }
push({
name: 'BpmProcessInstanceDetail',
- query: {
- id: row.processInstanceId
- }
+ query: query
})
}
diff --git a/src/views/bpm/task/done/index.vue b/src/views/bpm/task/done/index.vue
index 1f6f1e86..4d9cbd58 100644
--- a/src/views/bpm/task/done/index.vue
+++ b/src/views/bpm/task/done/index.vue
@@ -1,5 +1,11 @@
-
+
+
+
+
@@ -10,7 +16,7 @@
class="-mb-15px"
label-width="68px"
>
-
+
-
-
-
搜索
-
-
- 重置
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 高级筛选
+
+
+
+
+
+
+
+
+
+
+
+
+ 确认
+ 取消
+ 清空
+
+
+
+
@@ -104,9 +179,10 @@
diff --git a/src/views/bpm/task/manager/index.vue b/src/views/bpm/task/manager/index.vue
index d42bd29e..688e5150 100644
--- a/src/views/bpm/task/manager/index.vue
+++ b/src/views/bpm/task/manager/index.vue
@@ -1,5 +1,5 @@
-
+
diff --git a/src/views/bpm/task/todo/index.vue b/src/views/bpm/task/todo/index.vue
index beca15dc..32129376 100644
--- a/src/views/bpm/task/todo/index.vue
+++ b/src/views/bpm/task/todo/index.vue
@@ -1,5 +1,11 @@
-
+
+
+
+
@@ -10,7 +16,7 @@
class="-mb-15px"
label-width="68px"
>
-
+
-
-
-
搜索
-
-
- 重置
-
+
+
+
+
+
+
+
+
+
+
+
+
+ 高级筛选
+
+
+
+
+
+
+
+
+
+
+
+
+ 确认
+ 取消
+ 清空
+
+
+
+
@@ -89,6 +147,7 @@
diff --git a/src/views/crm/backlog/index.vue b/src/views/crm/backlog/index.vue
index aad46226..49a1d4ce 100644
--- a/src/views/crm/backlog/index.vue
+++ b/src/views/crm/backlog/index.vue
@@ -1,5 +1,5 @@
-
+
diff --git a/src/views/crm/business/index.vue b/src/views/crm/business/index.vue
index 6ef1866e..84e447c0 100644
--- a/src/views/crm/business/index.vue
+++ b/src/views/crm/business/index.vue
@@ -1,5 +1,6 @@
-
+
+
diff --git a/src/views/crm/business/status/index.vue b/src/views/crm/business/status/index.vue
index 32c5c7ee..ef514888 100644
--- a/src/views/crm/business/status/index.vue
+++ b/src/views/crm/business/status/index.vue
@@ -1,5 +1,6 @@
-
+
+
diff --git a/src/views/crm/clue/ClueForm.vue b/src/views/crm/clue/ClueForm.vue
index 82a13204..3562c1cb 100644
--- a/src/views/crm/clue/ClueForm.vue
+++ b/src/views/crm/clue/ClueForm.vue
@@ -127,6 +127,7 @@
placeholder="选择下次联系时间"
type="datetime"
value-format="x"
+ class="!w-1/1"
/>
diff --git a/src/views/crm/clue/index.vue b/src/views/crm/clue/index.vue
index 053736f2..f90d497b 100644
--- a/src/views/crm/clue/index.vue
+++ b/src/views/crm/clue/index.vue
@@ -1,5 +1,6 @@
-
+
+
diff --git a/src/views/crm/contact/ContactForm.vue b/src/views/crm/contact/ContactForm.vue
index ac749da9..81813e6a 100644
--- a/src/views/crm/contact/ContactForm.vue
+++ b/src/views/crm/contact/ContactForm.vue
@@ -90,7 +90,7 @@
{{ dict.label }}
@@ -153,6 +153,7 @@
placeholder="选择下次联系时间"
type="datetime"
value-format="x"
+ class="!w-1/1"
/>
diff --git a/src/views/crm/contact/index.vue b/src/views/crm/contact/index.vue
index 476781bb..ec26f1e9 100644
--- a/src/views/crm/contact/index.vue
+++ b/src/views/crm/contact/index.vue
@@ -1,5 +1,6 @@
-
+
+
diff --git a/src/views/crm/contract/config/index.vue b/src/views/crm/contract/config/index.vue
index e1015695..c5921233 100644
--- a/src/views/crm/contract/config/index.vue
+++ b/src/views/crm/contract/config/index.vue
@@ -1,5 +1,6 @@
-
+
+
- 不提醒
- 提醒
+ 不提醒
+ 提醒
diff --git a/src/views/crm/contract/detail/index.vue b/src/views/crm/contract/detail/index.vue
index 0829e100..9d5e14ca 100644
--- a/src/views/crm/contract/detail/index.vue
+++ b/src/views/crm/contract/detail/index.vue
@@ -36,7 +36,7 @@
ref="permissionListRef"
:biz-id="contract.id!"
:biz-type="BizTypeEnum.CRM_CONTRACT"
- :show-action="false"
+ :show-action="true"
@quit-team="close"
/>
diff --git a/src/views/crm/contract/index.vue b/src/views/crm/contract/index.vue
index 938e64ae..0c9d7286 100644
--- a/src/views/crm/contract/index.vue
+++ b/src/views/crm/contract/index.vue
@@ -1,5 +1,6 @@
-
+
+
diff --git a/src/views/crm/customer/CustomerForm.vue b/src/views/crm/customer/CustomerForm.vue
index 82869719..9a904d2e 100644
--- a/src/views/crm/customer/CustomerForm.vue
+++ b/src/views/crm/customer/CustomerForm.vue
@@ -127,6 +127,7 @@
placeholder="选择下次联系时间"
type="datetime"
value-format="x"
+ class="!w-1/1"
/>
diff --git a/src/views/crm/customer/index.vue b/src/views/crm/customer/index.vue
index 91f0389c..86bddc0e 100644
--- a/src/views/crm/customer/index.vue
+++ b/src/views/crm/customer/index.vue
@@ -1,5 +1,6 @@
-
+
+
diff --git a/src/views/crm/customer/limitConfig/index.vue b/src/views/crm/customer/limitConfig/index.vue
index 86136c57..01f3ef6b 100644
--- a/src/views/crm/customer/limitConfig/index.vue
+++ b/src/views/crm/customer/limitConfig/index.vue
@@ -1,5 +1,6 @@
-
+
+
diff --git a/src/views/crm/customer/pool/index.vue b/src/views/crm/customer/pool/index.vue
index 3d1ae53e..eab90e0c4 100644
--- a/src/views/crm/customer/pool/index.vue
+++ b/src/views/crm/customer/pool/index.vue
@@ -1,5 +1,6 @@
-
+
+
diff --git a/src/views/crm/customer/poolConfig/index.vue b/src/views/crm/customer/poolConfig/index.vue
index 9713c916..28d58a66 100644
--- a/src/views/crm/customer/poolConfig/index.vue
+++ b/src/views/crm/customer/poolConfig/index.vue
@@ -1,5 +1,6 @@
-
+
+
- 不启用
- 启用
+ 不启用
+ 启用
@@ -43,8 +44,8 @@
@change="changeNotifyEnable"
class="ml-4"
>
-
不提醒
-
提醒
+
不提醒
+
提醒
diff --git a/src/views/crm/permission/components/PermissionForm.vue b/src/views/crm/permission/components/PermissionForm.vue
index 9cf8867f..632a3471 100644
--- a/src/views/crm/permission/components/PermissionForm.vue
+++ b/src/views/crm/permission/components/PermissionForm.vue
@@ -23,7 +23,7 @@
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PERMISSION_LEVEL)"
:key="dict.value"
>
-
+
{{ dict.label }}
@@ -34,9 +34,9 @@
label="同时添加至"
>
- 联系人
- 商机
- 合同
+ 联系人
+ 商机
+ 合同
diff --git a/src/views/crm/permission/components/TransferForm.vue b/src/views/crm/permission/components/TransferForm.vue
index 311071be..43d5af74 100644
--- a/src/views/crm/permission/components/TransferForm.vue
+++ b/src/views/crm/permission/components/TransferForm.vue
@@ -20,8 +20,8 @@
- 移除
- 加入团队
+ 移除
+ 加入团队
@@ -30,7 +30,7 @@
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PERMISSION_LEVEL)"
:key="dict.value"
>
-
+
{{ dict.label }}
@@ -38,9 +38,9 @@
- 联系人
- 商机
- 合同
+ 联系人
+ 商机
+ 合同
diff --git a/src/views/crm/product/category/index.vue b/src/views/crm/product/category/index.vue
index 80a07d5b..631c170a 100644
--- a/src/views/crm/product/category/index.vue
+++ b/src/views/crm/product/category/index.vue
@@ -1,5 +1,5 @@
-
+
diff --git a/src/views/crm/product/detail/index.vue b/src/views/crm/product/detail/index.vue
index ff9efd9e..65fdd0f9 100644
--- a/src/views/crm/product/detail/index.vue
+++ b/src/views/crm/product/detail/index.vue
@@ -24,7 +24,7 @@ defineOptions({ name: 'CrmProductDetail' })
const route = useRoute()
const message = useMessage()
-const id = Number(route.params.id) // 编号
+const id = route.params.id // 编号
const loading = ref(true) // 加载中
const product = ref({} as ProductApi.ProductVO) // 详情
diff --git a/src/views/crm/product/index.vue b/src/views/crm/product/index.vue
index 8f35d3e1..5d656dfd 100644
--- a/src/views/crm/product/index.vue
+++ b/src/views/crm/product/index.vue
@@ -1,5 +1,5 @@
-
+
diff --git a/src/views/crm/receivable/ReceivableForm.vue b/src/views/crm/receivable/ReceivableForm.vue
index a44164a3..61fac08d 100644
--- a/src/views/crm/receivable/ReceivableForm.vue
+++ b/src/views/crm/receivable/ReceivableForm.vue
@@ -124,6 +124,7 @@
placeholder="选择回款日期"
type="date"
value-format="x"
+ class="!w-100%"
/>
diff --git a/src/views/crm/receivable/index.vue b/src/views/crm/receivable/index.vue
index 1b5a6907..6928942f 100644
--- a/src/views/crm/receivable/index.vue
+++ b/src/views/crm/receivable/index.vue
@@ -1,5 +1,6 @@
-
+
+
diff --git a/src/views/crm/receivable/plan/ReceivablePlanForm.vue b/src/views/crm/receivable/plan/ReceivablePlanForm.vue
index 0d4ef179..f321592a 100644
--- a/src/views/crm/receivable/plan/ReceivablePlanForm.vue
+++ b/src/views/crm/receivable/plan/ReceivablePlanForm.vue
@@ -89,6 +89,7 @@
placeholder="选择计划回款日期"
type="date"
value-format="x"
+ class="!w-100%"
/>
diff --git a/src/views/crm/receivable/plan/index.vue b/src/views/crm/receivable/plan/index.vue
index 635ba2bc..43abe154 100644
--- a/src/views/crm/receivable/plan/index.vue
+++ b/src/views/crm/receivable/plan/index.vue
@@ -1,5 +1,6 @@
-
+
+
diff --git a/src/views/crm/statistics/performance/components/ContractCountPerformance.vue b/src/views/crm/statistics/performance/components/ContractCountPerformance.vue
index f911bb2d..fa5a897b 100644
--- a/src/views/crm/statistics/performance/components/ContractCountPerformance.vue
+++ b/src/views/crm/statistics/performance/components/ContractCountPerformance.vue
@@ -1,5 +1,4 @@
-
@@ -64,13 +63,13 @@ const echartsOption = reactive({
data: []
},
{
- name: '同比增长率(%)',
+ name: '环比增长率(%)',
type: 'line',
yAxisIndex: 1,
data: []
},
{
- name: '环比增长率(%)',
+ name: '同比增长率(%)',
type: 'line',
yAxisIndex: 1,
data: []
@@ -173,7 +172,9 @@ const loadData = async () => {
(s: StatisticsPerformanceRespVO) => s.lastMonthCount
)
echartsOption.series[3]['data'] = performanceList.map((s: StatisticsPerformanceRespVO) =>
- s.lastMonthCount !== 0 ? ((s.currentMonthCount / s.lastMonthCount) * 100).toFixed(2) : 'NULL'
+ s.lastMonthCount !== 0
+ ? (((s.currentMonthCount - s.lastMonthCount) / s.lastMonthCount) * 100).toFixed(2)
+ : 'NULL'
)
}
if (echartsOption.series && echartsOption.series[2] && echartsOption.series[2]['data']) {
@@ -181,7 +182,9 @@ const loadData = async () => {
(s: StatisticsPerformanceRespVO) => s.lastYearCount
)
echartsOption.series[4]['data'] = performanceList.map((s: StatisticsPerformanceRespVO) =>
- s.lastYearCount !== 0 ? ((s.currentMonthCount / s.lastYearCount) * 100).toFixed(2) : 'NULL'
+ s.lastYearCount !== 0
+ ? (((s.currentMonthCount - s.lastYearCount) / s.lastYearCount) * 100).toFixed(2)
+ : 'NULL'
)
}
@@ -197,8 +200,8 @@ const tableData = reactive([
{ title: '当月合同数量统计(个)' },
{ title: '上月合同数量统计(个)' },
{ title: '去年当月合同数量统计(个)' },
- { title: '同比增长率(%)' },
- { title: '环比增长率(%)' }
+ { title: '环比增长率(%)' },
+ { title: '同比增长率(%)' }
])
// 定义 convertListData 方法,数据行列转置,展示每月数据
@@ -214,9 +217,13 @@ const convertListData = () => {
tableData[1]['prop' + index] = item.lastMonthCount
tableData[2]['prop' + index] = item.lastYearCount
tableData[3]['prop' + index] =
- item.lastMonthCount !== 0 ? (item.currentMonthCount / item.lastMonthCount).toFixed(2) : 'NULL'
+ item.lastMonthCount !== 0
+ ? (((item.currentMonthCount - item.lastMonthCount) / item.lastMonthCount) * 100).toFixed(2)
+ : 'NULL'
tableData[4]['prop' + index] =
- item.lastYearCount !== 0 ? (item.currentMonthCount / item.lastYearCount).toFixed(2) : 'NULL'
+ item.lastYearCount !== 0
+ ? (((item.currentMonthCount - item.lastYearCount) / item.lastYearCount) * 100).toFixed(2)
+ : 'NULL'
})
}
diff --git a/src/views/crm/statistics/performance/components/ContractPricePerformance.vue b/src/views/crm/statistics/performance/components/ContractPricePerformance.vue
index f97b612c..dd52d9fb 100644
--- a/src/views/crm/statistics/performance/components/ContractPricePerformance.vue
+++ b/src/views/crm/statistics/performance/components/ContractPricePerformance.vue
@@ -1,5 +1,4 @@
-
@@ -64,13 +63,13 @@ const echartsOption = reactive({
data: []
},
{
- name: '同比增长率(%)',
+ name: '环比增长率(%)',
type: 'line',
yAxisIndex: 1,
data: []
},
{
- name: '环比增长率(%)',
+ name: '同比增长率(%)',
type: 'line',
yAxisIndex: 1,
data: []
@@ -173,7 +172,9 @@ const loadData = async () => {
(s: StatisticsPerformanceRespVO) => s.lastMonthCount
)
echartsOption.series[3]['data'] = performanceList.map((s: StatisticsPerformanceRespVO) =>
- s.lastMonthCount !== 0 ? ((s.currentMonthCount / s.lastMonthCount) * 100).toFixed(2) : 'NULL'
+ s.lastMonthCount !== 0
+ ? (((s.currentMonthCount - s.lastMonthCount) / s.lastMonthCount) * 100).toFixed(2)
+ : 'NULL'
)
}
if (echartsOption.series && echartsOption.series[2] && echartsOption.series[2]['data']) {
@@ -181,7 +182,9 @@ const loadData = async () => {
(s: StatisticsPerformanceRespVO) => s.lastYearCount
)
echartsOption.series[4]['data'] = performanceList.map((s: StatisticsPerformanceRespVO) =>
- s.lastYearCount !== 0 ? ((s.currentMonthCount / s.lastYearCount) * 100).toFixed(2) : 'NULL'
+ s.lastYearCount !== 0
+ ? (((s.currentMonthCount - s.lastYearCount) / s.lastYearCount) * 100).toFixed(2)
+ : 'NULL'
)
}
@@ -197,8 +200,8 @@ const tableData = reactive([
{ title: '当月合同金额统计(元)' },
{ title: '上月合同金额统计(元)' },
{ title: '去年当月合同金额统计(元)' },
- { title: '同比增长率(%)' },
- { title: '环比增长率(%)' }
+ { title: '环比增长率(%)' },
+ { title: '同比增长率(%)' }
])
// 定义 init 方法
@@ -214,9 +217,13 @@ const convertListData = () => {
tableData[1]['prop' + index] = item.lastMonthCount
tableData[2]['prop' + index] = item.lastYearCount
tableData[3]['prop' + index] =
- item.lastMonthCount !== 0 ? (item.currentMonthCount / item.lastMonthCount).toFixed(2) : 'NULL'
+ item.lastMonthCount !== 0
+ ? (((item.currentMonthCount - item.lastMonthCount) / item.lastMonthCount) * 100).toFixed(2)
+ : 'NULL'
tableData[4]['prop' + index] =
- item.lastYearCount !== 0 ? (item.currentMonthCount / item.lastYearCount).toFixed(2) : 'NULL'
+ item.lastYearCount !== 0
+ ? (((item.currentMonthCount - item.lastYearCount) / item.lastYearCount) * 100).toFixed(2)
+ : 'NULL'
})
}
diff --git a/src/views/crm/statistics/performance/components/ReceivablePricePerformance.vue b/src/views/crm/statistics/performance/components/ReceivablePricePerformance.vue
index 14f59909..169f074b 100644
--- a/src/views/crm/statistics/performance/components/ReceivablePricePerformance.vue
+++ b/src/views/crm/statistics/performance/components/ReceivablePricePerformance.vue
@@ -17,7 +17,6 @@
:prop="item.prop"
align="center"
>
-
{{ scope.row[item.prop] }}
@@ -64,13 +63,13 @@ const echartsOption = reactive({
data: []
},
{
- name: '同比增长率(%)',
+ name: '环比增长率(%)',
type: 'line',
yAxisIndex: 1,
data: []
},
{
- name: '环比增长率(%)',
+ name: '同比增长率(%)',
type: 'line',
yAxisIndex: 1,
data: []
@@ -121,7 +120,6 @@ const echartsOption = reactive({
type: 'value',
name: '',
axisTick: {
- // TODO @scholar:IDEA 爆红的处理
alignWithLabel: true,
lineStyle: {
width: 0
@@ -174,7 +172,9 @@ const loadData = async () => {
(s: StatisticsPerformanceRespVO) => s.lastMonthCount
)
echartsOption.series[3]['data'] = performanceList.map((s: StatisticsPerformanceRespVO) =>
- s.lastMonthCount !== 0 ? ((s.currentMonthCount / s.lastMonthCount) * 100).toFixed(2) : 'NULL'
+ s.lastMonthCount !== 0
+ ? (((s.currentMonthCount - s.lastMonthCount) / s.lastMonthCount) * 100).toFixed(2)
+ : 'NULL'
)
}
if (echartsOption.series && echartsOption.series[2] && echartsOption.series[1]['data']) {
@@ -182,7 +182,9 @@ const loadData = async () => {
(s: StatisticsPerformanceRespVO) => s.lastYearCount
)
echartsOption.series[4]['data'] = performanceList.map((s: StatisticsPerformanceRespVO) =>
- s.lastYearCount !== 0 ? ((s.currentMonthCount / s.lastYearCount) * 100).toFixed(2) : 'NULL'
+ s.lastYearCount !== 0
+ ? (((s.currentMonthCount - s.lastYearCount) / s.lastYearCount) * 100).toFixed(2)
+ : 'NULL'
)
}
@@ -193,14 +195,13 @@ const loadData = async () => {
}
// 初始化数据
-// TODO @scholar:加个 as any[],避免 idea 爆红
-const columnsData = reactive([] as any[])
+const columnsData = reactive([])
const tableData = reactive([
{ title: '当月回款金额统计(元)' },
{ title: '上月回款金额统计(元)' },
{ title: '去年当月回款金额统计(元)' },
- { title: '同比增长率(%)' },
- { title: '环比增长率(%)' }
+ { title: '环比增长率(%)' },
+ { title: '同比增长率(%)' }
])
// 定义 init 方法
@@ -215,11 +216,14 @@ const convertListData = () => {
tableData[0]['prop' + index] = item.currentMonthCount
tableData[1]['prop' + index] = item.lastMonthCount
tableData[2]['prop' + index] = item.lastYearCount
- // TODO @scholar:百分比,使用 erpCalculatePercentage 直接计算;如果是 0,则返回 0,统一就好哈;
tableData[3]['prop' + index] =
- item.lastMonthCount !== 0 ? (item.currentMonthCount / item.lastMonthCount).toFixed(2) : 'NULL'
+ item.lastMonthCount !== 0
+ ? (((item.currentMonthCount - item.lastMonthCount) / item.lastMonthCount) * 100).toFixed(2)
+ : 'NULL'
tableData[4]['prop' + index] =
- item.lastYearCount !== 0 ? (item.currentMonthCount / item.lastYearCount).toFixed(2) : 'NULL'
+ item.lastYearCount !== 0
+ ? (((item.currentMonthCount - item.lastYearCount) / item.lastYearCount) * 100).toFixed(2)
+ : 'NULL'
})
}
diff --git a/src/views/crm/statistics/performance/index.vue b/src/views/crm/statistics/performance/index.vue
index 4a443c55..822afec9 100644
--- a/src/views/crm/statistics/performance/index.vue
+++ b/src/views/crm/statistics/performance/index.vue
@@ -73,7 +73,7 @@
import * as DeptApi from '@/api/system/dept'
import * as UserApi from '@/api/system/user'
import { useUserStore } from '@/store/modules/user'
-import { beginOfDay, formatDate } from '@/utils/formatTime'
+import { beginOfDay, endOfDay, formatDate } from '@/utils/formatTime'
import { defaultProps, handleTree } from '@/utils/tree'
import ContractCountPerformance from './components/ContractCountPerformance.vue'
import ContractPricePerformance from './components/ContractPricePerformance.vue'
@@ -85,8 +85,8 @@ const queryParams = reactive({
deptId: useUserStore().getUser.deptId,
userId: undefined,
times: [
- // 默认显示当年的数据
- formatDate(beginOfDay(new Date(new Date().getTime() - 3600 * 1000 * 24 * 7)))
+ formatDate(beginOfDay(new Date(new Date().getFullYear(), 0, 1))),
+ formatDate(endOfDay(new Date(new Date().getFullYear(), 11, 31)))
]
})
@@ -100,31 +100,20 @@ const userListByDeptId = computed(() =>
: []
)
-// TODO @scholar:改成尾注释,保证 vue 内容短一点;变量名小写
// 活跃标签
const activeTab = ref('ContractCountPerformance')
-// 1.员工合同数量统计
-const ContractCountPerformanceRef = ref()
-// 2.员工合同金额统计
-const ContractPricePerformanceRef = ref()
-// 3.员工回款金额统计
-const ReceivablePricePerformanceRef = ref()
+const ContractCountPerformanceRef = ref() // 员工合同数量统计
+const ContractPricePerformanceRef = ref() // 员工合同金额统计
+const ReceivablePricePerformanceRef = ref() // 员工回款金额统计
/** 搜索按钮操作 */
const handleQuery = () => {
// 从 queryParams.times[0] 中获取到了年份
const selectYear = parseInt(queryParams.times[0])
+ queryParams.times[0] = formatDate(beginOfDay(new Date(selectYear, 0, 1)))
+ queryParams.times[1] = formatDate(endOfDay(new Date(selectYear, 11, 31)))
- // 创建一个新的 Date 对象,设置为指定的年份的第一天
- const fullDate = new Date(selectYear, 0, 1, 0, 0, 0)
-
- // 将完整的日期时间格式化为需要的字符串形式,比如 2004-01-01 00:00:00
- // TODO @scholar:看看,是不是可以使用 year 哈
- queryParams.times[0] = `${fullDate.getFullYear()}-${String(fullDate.getMonth() + 1).padStart(
- 2,
- '0'
- )}-${String(fullDate.getDate()).padStart(2, '0')} ${String(fullDate.getHours()).padStart(2, '0')}:${String(fullDate.getMinutes()).padStart(2, '0')}:${String(fullDate.getSeconds()).padStart(2, '0')}`
-
+ // 执行查询
switch (activeTab.value) {
case 'ContractCountPerformance':
ContractCountPerformanceRef.value?.loadData?.()
diff --git a/src/views/infra/apiAccessLog/index.vue b/src/views/infra/apiAccessLog/index.vue
index 2398f550..570f579e 100644
--- a/src/views/infra/apiAccessLog/index.vue
+++ b/src/views/infra/apiAccessLog/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/infra/apiErrorLog/index.vue b/src/views/infra/apiErrorLog/index.vue
index a199a67b..ca145a76 100644
--- a/src/views/infra/apiErrorLog/index.vue
+++ b/src/views/infra/apiErrorLog/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/infra/build/index.vue b/src/views/infra/build/index.vue
index 571acffe..ed1091e7 100644
--- a/src/views/infra/build/index.vue
+++ b/src/views/infra/build/index.vue
@@ -1,16 +1,17 @@
-
-
-
-
- 生成 JSON
- 生成 Options
- 生成组件
-
-
-
+
-
+
+
+
+ 生成JSON
+ 生成Options
+ 生成组件
+
+
+
@@ -43,6 +44,35 @@ defineOptions({ name: 'InfraBuild' })
const { t } = useI18n() // 国际化
const message = useMessage() // 消息
+// 表单设计器配置
+const designerConfig = ref({
+ switchType: [], // 是否可以切换组件类型,或者可以相互切换的字段
+ autoActive: true, // 是否自动选中拖入的组件
+ useTemplate: false, // 是否生成vue2语法的模板组件
+ formOptions: {
+ form: {
+ labelWidth: '100px' // 设置默认的 label 宽度为 100px
+ }
+ }, // 定义表单配置默认值
+ fieldReadonly: false, // 配置field是否可以编辑
+ hiddenDragMenu: false, // 隐藏拖拽操作按钮
+ hiddenDragBtn: false, // 隐藏拖拽按钮
+ hiddenMenu: [], // 隐藏部分菜单
+ hiddenItem: [], // 隐藏部分组件
+ hiddenItemConfig: {}, // 隐藏组件的部分配置项
+ disabledItemConfig: {}, // 禁用组件的部分配置项
+ showSaveBtn: false, // 是否显示保存按钮
+ showConfig: true, // 是否显示右侧的配置界面
+ showBaseForm: true, // 是否显示组件的基础配置表单
+ showControl: true, // 是否显示组件联动
+ showPropsForm: true, // 是否显示组件的属性配置表单
+ showEventForm: true, // 是否显示组件的事件配置表单
+ showValidateForm: true, // 是否显示组件的验证配置表单
+ showFormConfig: true, // 是否显示表单配置
+ showInputData: true, // 是否显示录入按钮
+ showDevice: true, // 是否显示多端适配选项
+ appendConfigData: [] // 定义渲染规则所需的formData
+})
const designer = ref() // 表单设计器
const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('') // 弹窗的标题
@@ -140,3 +170,13 @@ onMounted(async () => {
hljs.registerLanguage('json', json)
})
+
+
diff --git a/src/views/infra/codegen/components/ColumInfoForm.vue b/src/views/infra/codegen/components/ColumInfoForm.vue
index 737c2e2b..f5260226 100644
--- a/src/views/infra/codegen/components/ColumInfoForm.vue
+++ b/src/views/infra/codegen/components/ColumInfoForm.vue
@@ -37,26 +37,26 @@
-
+
-
+
-
+
@@ -75,7 +75,7 @@
-
+
diff --git a/src/views/infra/codegen/components/GenerateInfoForm.vue b/src/views/infra/codegen/components/GenerateInfoForm.vue
index d2a01cc0..aaf176fb 100644
--- a/src/views/infra/codegen/components/GenerateInfoForm.vue
+++ b/src/views/infra/codegen/components/GenerateInfoForm.vue
@@ -285,8 +285,8 @@
- 一对多
- 一对一
+ 一对多
+ 一对一
diff --git a/src/views/infra/codegen/index.vue b/src/views/infra/codegen/index.vue
index a25b956c..69c3d125 100644
--- a/src/views/infra/codegen/index.vue
+++ b/src/views/infra/codegen/index.vue
@@ -1,4 +1,8 @@
+
+
+
+
diff --git a/src/views/infra/config/ConfigForm.vue b/src/views/infra/config/ConfigForm.vue
index f61face0..4f7333a6 100644
--- a/src/views/infra/config/ConfigForm.vue
+++ b/src/views/infra/config/ConfigForm.vue
@@ -24,7 +24,7 @@
{{ dict.label }}
diff --git a/src/views/infra/config/index.vue b/src/views/infra/config/index.vue
index 36833a59..c7838c27 100644
--- a/src/views/infra/config/index.vue
+++ b/src/views/infra/config/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/infra/demo/demo01/Demo01ContactForm.vue b/src/views/infra/demo/demo01/Demo01ContactForm.vue
index 5d28112a..f317fe76 100644
--- a/src/views/infra/demo/demo01/Demo01ContactForm.vue
+++ b/src/views/infra/demo/demo01/Demo01ContactForm.vue
@@ -15,7 +15,7 @@
{{ dict.label }}
diff --git a/src/views/infra/demo/demo01/index.vue b/src/views/infra/demo/demo01/index.vue
index 8a42ca8e..e111ab63 100644
--- a/src/views/infra/demo/demo01/index.vue
+++ b/src/views/infra/demo/demo01/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/infra/demo/demo02/index.vue b/src/views/infra/demo/demo02/index.vue
index 60949438..9faa8c96 100644
--- a/src/views/infra/demo/demo02/index.vue
+++ b/src/views/infra/demo/demo02/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/infra/demo/demo03/erp/Demo03StudentForm.vue b/src/views/infra/demo/demo03/erp/Demo03StudentForm.vue
index 758c7e5d..b73f4233 100644
--- a/src/views/infra/demo/demo03/erp/Demo03StudentForm.vue
+++ b/src/views/infra/demo/demo03/erp/Demo03StudentForm.vue
@@ -15,7 +15,7 @@
{{ dict.label }}
diff --git a/src/views/infra/demo/demo03/erp/index.vue b/src/views/infra/demo/demo03/erp/index.vue
index 78c62764..e0f1cf48 100644
--- a/src/views/infra/demo/demo03/erp/index.vue
+++ b/src/views/infra/demo/demo03/erp/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/infra/demo/demo03/inner/Demo03StudentForm.vue b/src/views/infra/demo/demo03/inner/Demo03StudentForm.vue
index 98c1b7bf..8621593b 100644
--- a/src/views/infra/demo/demo03/inner/Demo03StudentForm.vue
+++ b/src/views/infra/demo/demo03/inner/Demo03StudentForm.vue
@@ -15,7 +15,7 @@
{{ dict.label }}
diff --git a/src/views/infra/demo/demo03/inner/index.vue b/src/views/infra/demo/demo03/inner/index.vue
index 4b40defd..9b32460a 100644
--- a/src/views/infra/demo/demo03/inner/index.vue
+++ b/src/views/infra/demo/demo03/inner/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/infra/demo/demo03/normal/Demo03StudentForm.vue b/src/views/infra/demo/demo03/normal/Demo03StudentForm.vue
index 4815357e..42613c4d 100644
--- a/src/views/infra/demo/demo03/normal/Demo03StudentForm.vue
+++ b/src/views/infra/demo/demo03/normal/Demo03StudentForm.vue
@@ -15,7 +15,7 @@
{{ dict.label }}
diff --git a/src/views/infra/demo/demo03/normal/index.vue b/src/views/infra/demo/demo03/normal/index.vue
index 481673f5..8a5dc1a9 100644
--- a/src/views/infra/demo/demo03/normal/index.vue
+++ b/src/views/infra/demo/demo03/normal/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/infra/druid/index.vue b/src/views/infra/druid/index.vue
index 14b39afa..2ac99d23 100644
--- a/src/views/infra/druid/index.vue
+++ b/src/views/infra/druid/index.vue
@@ -1,7 +1,9 @@
+
+
-
-
+
+
diff --git a/src/views/mall/product/spu/form/ProductPropertyAddForm.vue b/src/views/mall/product/spu/form/ProductPropertyAddForm.vue
index 9a8eee00..f45281b1 100644
--- a/src/views/mall/product/spu/form/ProductPropertyAddForm.vue
+++ b/src/views/mall/product/spu/form/ProductPropertyAddForm.vue
@@ -7,9 +7,25 @@
:model="formData"
:rules="formRules"
label-width="80px"
+ @keydown.enter.prevent="submitForm"
>
-
+
+
+
@@ -36,6 +52,7 @@ const formRules = reactive({
})
const formRef = ref() // 表单 Ref
const attributeList = ref([]) // 商品属性列表
+const attributeOptions = ref([] as PropertyApi.PropertyVO[]) // 商品属性名称下拉框
const props = defineProps({
propertyList: {
type: Array,
@@ -59,15 +76,39 @@ watch(
const open = async () => {
dialogVisible.value = true
resetForm()
+ // 加载列表
+ await getAttributeOptions()
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
/** 提交表单 */
const submitForm = async () => {
- // 校验表单
+ // 1.1 重复添加校验
+ for (const attrItem of attributeList.value) {
+ if (attrItem.name === formData.value.name) {
+ return message.error('该属性已存在,请勿重复添加')
+ }
+ }
+ // 1.2 校验表单
if (!formRef) return
const valid = await formRef.value.validate()
if (!valid) return
+
+ // 2.1 情况一:属性名已存在,则直接使用并结束
+ const existProperty = attributeOptions.value.find((item) => item.name === formData.value.name)
+ if (existProperty) {
+ // 添加到属性列表
+ attributeList.value.push({
+ id: existProperty.id,
+ ...formData.value,
+ values: []
+ })
+ // 关闭弹窗
+ dialogVisible.value = false
+ return
+ }
+
+ // 2.2 情况二:如果是不存在的属性,则需要执行新增
// 提交请求
formLoading.value = true
try {
@@ -79,6 +120,7 @@ const submitForm = async () => {
...formData.value,
values: []
})
+ // 关闭弹窗
message.success(t('common.createSuccess'))
dialogVisible.value = false
} finally {
@@ -93,4 +135,14 @@ const resetForm = () => {
}
formRef.value?.resetFields()
}
+
+/** 获取商品属性下拉选项 */
+const getAttributeOptions = async () => {
+ formLoading.value = true
+ try {
+ attributeOptions.value = await PropertyApi.getPropertySimpleList()
+ } finally {
+ formLoading.value = false
+ }
+}
diff --git a/src/views/mall/product/spu/form/SkuForm.vue b/src/views/mall/product/spu/form/SkuForm.vue
index 0bd79723..18cd0296 100644
--- a/src/views/mall/product/spu/form/SkuForm.vue
+++ b/src/views/mall/product/spu/form/SkuForm.vue
@@ -1,20 +1,27 @@
-
-
+
+
- 默认设置
- 单独设置
+ 默认设置
+ 单独设置
-
-
- 单规格
- 多规格
+
+
+ 单规格
+ 多规格
@@ -29,22 +36,22 @@
添加属性
-
+
@@ -94,7 +101,7 @@ const ruleConfig: RuleConfig[] = [
]
const message = useMessage() // 消息弹窗
-
+const formLoading = ref(false)
const props = defineProps({
propFormData: {
type: Object as PropType,
@@ -181,7 +188,7 @@ const onChangeSpec = () => {
}
/** 调用 SkuList generateTableData 方法*/
-const generateSkus = (propertyList) => {
+const generateSkus = (propertyList: any[]) => {
skuListRef.value.generateTableData(propertyList)
}
diff --git a/src/views/mall/product/spu/form/index.vue b/src/views/mall/product/spu/form/index.vue
index de874524..c4e4b7b2 100644
--- a/src/views/mall/product/spu/form/index.vue
+++ b/src/views/mall/product/spu/form/index.vue
@@ -63,7 +63,7 @@ import SkuForm from './SkuForm.vue'
import DeliveryForm from './DeliveryForm.vue'
import { convertToInteger, floatToFixed2, formatToFraction } from '@/utils'
-defineOptions({ name: 'ProductSpuForm' })
+defineOptions({ name: 'ProductSpuAdd' })
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
diff --git a/src/views/mall/product/spu/index.vue b/src/views/mall/product/spu/index.vue
index 398e69d5..0451ef3a 100644
--- a/src/views/mall/product/spu/index.vue
+++ b/src/views/mall/product/spu/index.vue
@@ -1,5 +1,6 @@
+
@@ -243,6 +244,7 @@ import * as ProductCategoryApi from '@/api/mall/product/category'
defineOptions({ name: 'ProductSpu' })
const message = useMessage() // 消息弹窗
+const route = useRoute() // 路由
const { t } = useI18n() // 国际化
const { push } = useRouter() // 路由跳转
@@ -430,6 +432,11 @@ onActivated(() => {
/** 初始化 **/
onMounted(async () => {
+ // 解析路由的 categoryId
+ if (route.query.categoryId) {
+ queryParams.value.categoryId = Number(route.query.categoryId)
+ }
+ // 获得商品信息
await getTabsCount()
await getList()
// 获得分类树
diff --git a/src/views/mall/promotion/article/ArticleForm.vue b/src/views/mall/promotion/article/ArticleForm.vue
index 1e44fad6..3f269cb0 100644
--- a/src/views/mall/promotion/article/ArticleForm.vue
+++ b/src/views/mall/promotion/article/ArticleForm.vue
@@ -51,7 +51,7 @@
{{ dict.label }}
@@ -64,7 +64,7 @@
{{ dict.label }}
@@ -77,7 +77,7 @@
{{ dict.label }}
diff --git a/src/views/mall/promotion/article/category/ArticleCategoryForm.vue b/src/views/mall/promotion/article/category/ArticleCategoryForm.vue
index e029195d..2e6e9e29 100644
--- a/src/views/mall/promotion/article/category/ArticleCategoryForm.vue
+++ b/src/views/mall/promotion/article/category/ArticleCategoryForm.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/promotion/article/index.vue b/src/views/mall/promotion/article/index.vue
index 323204df..875168eb 100644
--- a/src/views/mall/promotion/article/index.vue
+++ b/src/views/mall/promotion/article/index.vue
@@ -1,4 +1,5 @@
+
@@ -79,6 +80,7 @@
+
diff --git a/src/views/mall/promotion/banner/BannerForm.vue b/src/views/mall/promotion/banner/BannerForm.vue
index 03bca0f9..9d1b7fc7 100644
--- a/src/views/mall/promotion/banner/BannerForm.vue
+++ b/src/views/mall/promotion/banner/BannerForm.vue
@@ -34,7 +34,7 @@
{{ dict.label }}
@@ -47,7 +47,7 @@
{{ dict.label }}
diff --git a/src/views/mall/promotion/banner/index.vue b/src/views/mall/promotion/banner/index.vue
index acc91033..e25431af 100644
--- a/src/views/mall/promotion/banner/index.vue
+++ b/src/views/mall/promotion/banner/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/promotion/bargain/activity/index.vue b/src/views/mall/promotion/bargain/activity/index.vue
index 3ba7a0f2..40449fea 100644
--- a/src/views/mall/promotion/bargain/activity/index.vue
+++ b/src/views/mall/promotion/bargain/activity/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/promotion/bargain/record/index.vue b/src/views/mall/promotion/bargain/record/index.vue
index f7677eb6..306d8ea1 100644
--- a/src/views/mall/promotion/bargain/record/index.vue
+++ b/src/views/mall/promotion/bargain/record/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/promotion/combination/activity/index.vue b/src/views/mall/promotion/combination/activity/index.vue
index 2ee8fe35..a40044df 100644
--- a/src/views/mall/promotion/combination/activity/index.vue
+++ b/src/views/mall/promotion/combination/activity/index.vue
@@ -1,29 +1,30 @@
+
- 搜索
- 重置
+
+
+ 搜索
+
+
+
+ 重置
+
- 新增
+
+ 新增
@@ -50,77 +58,77 @@
-
-
-
+
+
+
{{ formatDate(scope.row.startTime, 'YYYY-MM-DD') }}
~ {{ formatDate(scope.row.endTime, 'YYYY-MM-DD') }}
-
+
-
+
-
+
{{ formatCombinationPrice(scope.row.products) }}
-
-
-
-
+
+
+
+
-
+
编辑
关闭
删除
@@ -129,9 +137,9 @@
@@ -140,12 +148,11 @@
-
+
+
diff --git a/src/views/mall/promotion/combination/components/CombinationTableSelect.vue b/src/views/mall/promotion/combination/components/CombinationTableSelect.vue
new file mode 100644
index 00000000..36395214
--- /dev/null
+++ b/src/views/mall/promotion/combination/components/CombinationTableSelect.vue
@@ -0,0 +1,345 @@
+
+
+
+
+
diff --git a/src/views/mall/promotion/combination/record/index.vue b/src/views/mall/promotion/combination/record/index.vue
index caef4026..223a7237 100644
--- a/src/views/mall/promotion/combination/record/index.vue
+++ b/src/views/mall/promotion/combination/record/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/promotion/components/SpuAndSkuList.vue b/src/views/mall/promotion/components/SpuAndSkuList.vue
index facc6cf3..1a0598ca 100644
--- a/src/views/mall/promotion/components/SpuAndSkuList.vue
+++ b/src/views/mall/promotion/components/SpuAndSkuList.vue
@@ -29,6 +29,16 @@
+
+
+ 删除
+
+
diff --git a/src/views/mall/promotion/coupon/components/CouponSendForm.vue b/src/views/mall/promotion/coupon/components/CouponSendForm.vue
index be0223a0..4b9edb7c 100644
--- a/src/views/mall/promotion/coupon/components/CouponSendForm.vue
+++ b/src/views/mall/promotion/coupon/components/CouponSendForm.vue
@@ -67,7 +67,7 @@
:disabled="sendLoading"
:loading="sendLoading"
@click="handleSendCoupon(scope.row.id)"
- v-hasPermi="['member:level:update']"
+ v-hasPermi="['promotion:coupon:send']"
>
发送
diff --git a/src/views/mall/promotion/coupon/formatter.ts b/src/views/mall/promotion/coupon/formatter.ts
index f00138a6..8005d0c0 100644
--- a/src/views/mall/promotion/coupon/formatter.ts
+++ b/src/views/mall/promotion/coupon/formatter.ts
@@ -16,10 +16,14 @@ export const discountFormat = (row: CouponTemplateVO) => {
// 格式化【领取上限】
export const takeLimitCountFormat = (row: CouponTemplateVO) => {
- if (row.takeLimitCount === -1) {
- return '无领取限制'
+ if (row.takeLimitCount) {
+ if (row.takeLimitCount === -1) {
+ return '无领取限制'
+ }
+ return `${row.takeLimitCount} 张/人`
+ } else {
+ return ' '
}
- return `${row.takeLimitCount} 张/人`
}
// 格式化【有效期限】
@@ -33,8 +37,19 @@ export const validityTypeFormat = (row: CouponTemplateVO) => {
return '未知【' + row.validityType + '】'
}
+// 格式化【totalCount】
+export const totalCountFormat = (row: CouponTemplateVO) => {
+ if (row.totalCount === -1) {
+ return '不限制'
+ }
+ return row.totalCount
+}
+
// 格式化【剩余数量】
export const remainedCountFormat = (row: CouponTemplateVO) => {
+ if (row.totalCount === -1) {
+ return '不限制'
+ }
return row.totalCount - row.takeCount
}
diff --git a/src/views/mall/promotion/coupon/index.vue b/src/views/mall/promotion/coupon/index.vue
index abd17ef5..25d2e942 100755
--- a/src/views/mall/promotion/coupon/index.vue
+++ b/src/views/mall/promotion/coupon/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/promotion/coupon/template/CouponTemplateForm.vue b/src/views/mall/promotion/coupon/template/CouponTemplateForm.vue
index 408f381a..b076dea1 100644
--- a/src/views/mall/promotion/coupon/template/CouponTemplateForm.vue
+++ b/src/views/mall/promotion/coupon/template/CouponTemplateForm.vue
@@ -10,12 +10,24 @@
+
+
+
{{ dict.label }}
@@ -40,7 +52,7 @@
{{ dict.label }}
@@ -101,8 +113,9 @@
- 直接领取
- 指定发放
+ 直接领取
+ 指定发放
+ 新人劵
@@ -130,7 +143,7 @@
{{ dict.label }}
@@ -144,7 +157,6 @@
@@ -218,6 +230,7 @@ const formData = ref({
fixedStartTerm: undefined,
fixedEndTerm: undefined,
productScope: PromotionProductScopeEnum.ALL.scope,
+ description: undefined,
productScopeValues: [], // 商品范围:值为 品类编号列表 或 商品编号列表 ,用于提交
productCategoryIds: [], // 仅用于表单,不提交
productSpuIds: [] // 仅用于表单,不提交
@@ -297,7 +310,9 @@ const submitForm = async () => {
validEndTime:
formData.value.validTimes && formData.value.validTimes.length === 2
? formData.value.validTimes[1]
- : undefined
+ : undefined,
+ totalCount: formData.value.takeType === 1 ? formData.value.totalCount : -1,
+ takeLimitCount: formData.value.takeType === 1 ? formData.value.takeLimitCount : -1
} as unknown as CouponTemplateApi.CouponTemplateVO
// 设置商品范围
@@ -323,6 +338,7 @@ const resetForm = () => {
formData.value = {
id: undefined,
name: undefined,
+ description: undefined,
discountType: PromotionDiscountTypeEnum.PRICE.type,
discountPrice: undefined,
discountPercent: undefined,
diff --git a/src/views/mall/promotion/coupon/template/index.vue b/src/views/mall/promotion/coupon/template/index.vue
index d2211683..bc121ead 100755
--- a/src/views/mall/promotion/coupon/template/index.vue
+++ b/src/views/mall/promotion/coupon/template/index.vue
@@ -1,4 +1,5 @@
+
@@ -108,7 +109,12 @@
prop="validityType"
width="185"
/>
-
+
-
-
-
-
选择商品
-
-
+
+
-
-
+
+
@@ -43,10 +57,12 @@
diff --git a/src/views/mall/promotion/discountActivity/discountActivity.data.ts b/src/views/mall/promotion/discountActivity/discountActivity.data.ts
index d79dcab7..81540b0f 100644
--- a/src/views/mall/promotion/discountActivity/discountActivity.data.ts
+++ b/src/views/mall/promotion/discountActivity/discountActivity.data.ts
@@ -1,10 +1,8 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter2 } from '@/utils/formatTime'
-// TODO @zhangshai:
// 表单校验
export const rules = reactive({
- spuId: [required],
name: [required],
startTime: [required],
endTime: [required],
@@ -72,17 +70,6 @@ const crudSchemas = reactive([
width: 120
}
},
- {
- label: '优惠类型',
- field: 'discountType',
- dictType: DICT_TYPE.PROMOTION_DISCOUNT_TYPE,
- dictClass: 'number',
- isSearch: true,
- form: {
- component: 'Radio',
- value: 1
- }
- },
{
label: '活动商品',
field: 'spuId',
diff --git a/src/views/mall/promotion/discountActivity/index.vue b/src/views/mall/promotion/discountActivity/index.vue
index b0321bcc..1841603a 100644
--- a/src/views/mall/promotion/discountActivity/index.vue
+++ b/src/views/mall/promotion/discountActivity/index.vue
@@ -1,4 +1,5 @@
+
@@ -69,17 +70,17 @@
~ {{ formatDate(scope.row.endTime, 'YYYY-MM-DD') }}
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/diy/page/index.vue b/src/views/mall/promotion/diy/page/index.vue
index cc55c229..f2253325 100644
--- a/src/views/mall/promotion/diy/page/index.vue
+++ b/src/views/mall/promotion/diy/page/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/promotion/diy/template/decorate.vue b/src/views/mall/promotion/diy/template/decorate.vue
index e7838f29..82edbe5f 100644
--- a/src/views/mall/promotion/diy/template/decorate.vue
+++ b/src/views/mall/promotion/diy/template/decorate.vue
@@ -18,7 +18,7 @@
@change="handleTemplateItemChange"
>
-
+
diff --git a/src/views/mall/promotion/diy/template/index.vue b/src/views/mall/promotion/diy/template/index.vue
index 44ea3f50..50c5d292 100644
--- a/src/views/mall/promotion/diy/template/index.vue
+++ b/src/views/mall/promotion/diy/template/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/promotion/kefu/components/KeFuConversationList.vue b/src/views/mall/promotion/kefu/components/KeFuConversationList.vue
new file mode 100644
index 00000000..075edc33
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/KeFuConversationList.vue
@@ -0,0 +1,254 @@
+
+
+
+ 会话记录({{ kefuStore.getConversationList.length }})
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.userNickname }}
+
+ {{ lastMessageTimeMap.get(item.id) ?? '计算中' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/kefu/components/KeFuMessageList.vue b/src/views/mall/promotion/kefu/components/KeFuMessageList.vue
new file mode 100644
index 00000000..577df673
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/KeFuMessageList.vue
@@ -0,0 +1,525 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatDate(item.createTime) }}
+
+
+
+ {{ item.content }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 有新消息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/kefu/components/asserts/a.png b/src/views/mall/promotion/kefu/components/asserts/a.png
new file mode 100644
index 0000000000000000000000000000000000000000..32939004d69bf26555bebe6ca040a82d3fe84c3b
GIT binary patch
literal 4237
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
literal 0
HcmV?d00001
diff --git a/src/views/mall/promotion/kefu/components/asserts/aixin.png b/src/views/mall/promotion/kefu/components/asserts/aixin.png
new file mode 100644
index 0000000000000000000000000000000000000000..25e64223495ba2e55aaffd690f1cd4a553b77afd
GIT binary patch
literal 4431
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
VzsvqC7w`Z8002ovPDHLkV1hA~aHs$P
literal 0
HcmV?d00001
diff --git a/src/views/mall/promotion/kefu/components/asserts/baiyan.png b/src/views/mall/promotion/kefu/components/asserts/baiyan.png
new file mode 100644
index 0000000000000000000000000000000000000000..d16260afd6443e2bb7a257d0b425f18c4c2c7ccd
GIT binary patch
literal 3792
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
literal 0
HcmV?d00001
diff --git a/src/views/mall/promotion/kefu/components/asserts/dajing.png b/src/views/mall/promotion/kefu/components/asserts/dajing.png
new file mode 100644
index 0000000000000000000000000000000000000000..8649727ecd4219f16fa5440a53774274ebccd3a0
GIT binary patch
literal 4298
zcmV;*5H;_KP)RCt{2oqKRx)qTf5XJ1#+N?OUrk`>u&*+v2r3l#Hm98rtn
zG-(aRxG72LB*>6Z9tm-#lbNmjTkWs*`
zg^j$}4ibK?t+jTg-97!|?A_ff?ejiXveNI&ncaK$?m54EzUTKl=lsq~NGZ8sa8Pss
z4Mm^pkh>k1#YTuZNy7h%9-u1~+JN;YW7-3Z0E56Fm&{Fa<^~A|L>sUv70hOMsn`QN
z5A0@@9CSFXk}!KD{8qG~GJPwstl+a%o!}0nKI;p|n>Y*6AxMPPXJH%x`hk8{%aKyV
zb^?_rVZZ1>W&F)Kf3IE*{x7M|>Q1QoytVYAAHc*AO#BuiudC18*aK|i3i-UX1j|R|
zNO({50)6Bv^?|QK{a2y(i{M-0tQ?a^Vf;-v`)dgQI@c3NfIhw;`<)de1LsNDCwhQw
zz!ir3z9rCf2Q2s+xa*viAs-Uw;M6lP_NXGqh$BERS2;V4XyV=-BtFdXD80>gJTcF*}c<$
zd4P4Y&xs`MC1F6cF}?I_pMzz84UIkarBexVi6Ld(~|U29Jovw@?(gin5%eJ2cTWxahBw>>1hD*AvQrLX-L!^M9K{*~6_o(qT^
zf{*?gA|GYneUR(rRy(4%PQuHgAGkez-TX(e;$HCht;IXn5Rbs&hhg-k?7KUGUN*=x
zR-!gf!f!+au$%0r=cPY@<{PZYGxst23jEJcv+wK&diaWYBFvHS;xqz0epvlC&|tB5
zd!b-_1P1?JX@`O$;*ZS{Q9cPTK{Vg(t>{pkDlh>>jwzE
z|1q)gC;)-x27*^Cr+wXJRMl3MBd_gw3^xk!8B13n=7Uj(eWrd9@s(X{ZL8IYkrN}eta9v
zE1UB_bowLM`%w0sTi9HhTf8_4J46F&h*0%}FZojlcISOOJbIQ#?|rOf0(1mBmvGyU
zZ!POTX7TI;I~jiSP+9-c{2F&W{7nMQ1qPLlzY8BcrC)`CE;bi;akz@6F6l=SKmv?6P3_Sj}Y577!#|Z5oDV#>f
z29;L|>v>ibb#3G);aSlDSxjE`C*TplWZrPlL(q#
zFCQqJjz_4x%AhZmmwAz&1j)9v8EW}FG%N-=RWOVlK56L%0mcrUD4LGh5PJW3aRG{8
z^w6o|X*Dc{r3SOKtx%kvoOhoQZKV4H8nmxds#XM{p|LVwDHq};rDZy9ix~U(bZPP}
zzY>mr0Pz^W?K~s;`C9Iw(%d9uo1x`vz>TVSDgl{rE-jg`DV`GKa|7*b;lLjKP9M;d
z>(QAc{7UqoyCte>VQB}--c-2h+2Ogi_^eX@kS>LUbHpJ--q?{P|36$fXIH+I;!y
z%4t9v4r+p3B$OlH^3`zQE&ZyG9NJ(c;c3x^-XyK6fyJ$rCt<#rBOQxd;cyK^&jYOI
zY0<{5#tz(cO~}%MN}C}a^T-_OSl$5#($il1fZpt%r<0(5^myQ+g|lFaVBVP{fW^%)
z?16Y3U=vS^25!x`yE7y_B{re^hZbH0?&R!{FyG9Pj>RqT$tR%lSf7~!7&W0c^M{LO
zNef_JY63v>LY)LCKtc}yRT>2RAgy<7OhG1{OIs#wipPX}eof_VGzM@pPl*P;u1u05
z;lHv>(Sim@*d(kONaGX>R8#vHvT;|hnH2Cp0>0dml7w<{`6sR}NbYPL2@Cj>nSF09|X@XWQEXUEj%wt}@
zT7Pyy=+VFEnxLky)Yn2XX*#s8(agSE8o^6EmSiXtI@b6s%h$d}vnEGVSw
z7f*_wbPCngmejq&A_>7ueKariIA)Fl3tR**wMIn88qJyvg5T`9k}s=X6Q
z(;?6(=)Sqe^b6kb4Zo%IO9?l8!~7iC?we}}Gzx1nXd3DKPE`Xg)H-1WuXR(%EN;Q>-M-43|ikVrs^1R)W5ZL!eO*XmmsN!X1awGK=8K934%k
zWSrJu+c?uMFq{&XD4AIy_TU-$n7Z-Gz}IlbUgiN6n6Y)lF*3bNtK1}>jm9^
zSRo=lI|;E=NA_D%WVMc*Yoh8H{S~v9USOK`Il&!-Bo<2nV!aDtkO(Hz>D7W?Rb1NpRWMZVrb9`}WO!w?RG(
z47ll787C01vB5Gmm3=h=${b}#h}&z91_tJqr?gzeVyJhp)f^cnLJR`9=#?W#!m7t?
zU*#M=BN_Ve!qoyDLm#>cpON;Nqj)@Hj(TN^1clu|>Y;=!W4Q;1FMI-Y92|Drk|)Gd
zgSb0LVOC`*3HQ9A#)_u3m+@ob=13jT;x)X^<#+$XXO-!6K9DPnbfNZ
zH!Ixr)C(`IZZ)WXHaW$KT>uSSM+?W2
z5#F8}<5(gxjx2MWjZED9Dcrs1G5$?!rmY(g(
zejfNfkYcPdZTk(rB{@rPA^3!w&DwHy#nc8N8?|8B>0aY)qE7gDdFIZ*xnbF*BXgP}
zFb;2SLnlEdK|1eeU*%~mn}BS5+1F|@{RU1XCm4*Eun69&b5j^d?9aZ)91G2&bW)TsHS3wi3mi(h;t`la+Zelj9RdTyYg@KUwAjjUu5kDtXD1-g7gQF
zOWMI}aUI-L3~_o4F;?34o3=oZU7zmZF4((SPphdCSpy12Wv-Q!E&u>29xg(AXcJ2CGN270)=^utxl
z+q(Z>MHld%F^1CrK5t>n!dtkfyz@KD^A6o32Z1dG1o-`f@%^`yO8}U0(cL5a`F|pE
z^_#Y&@}_K0CMJG=Oj9lb?lph-oq1>Vy=jdIrv;lW*G45Vb25r00>F;L
z?*1i5tI5Uu(~6meEDUVoKI=yXTOZB8PY$B?$H*L>lVpBr#mx6nr%2gA0N6nSz3b4LaA8;4x!++sihz>)0mWeddCU*xIE_|tVVNl1^cb@y4D|Bd@|&Q=VE^PI
zC1e|_#3<+`YOZTWemQpnZB7sXP96^r@Q~<1jjI}cPIFB&a+iEiKA>K{Yme>E2WLsp
z@pI9O+NgV(F?D8-knD`lo%wxy&%T4N3!yS3=ul*AC6_l=U?jx}WM_Kr*RE*h>!>UV
zI({a4PI2|9iz8c;jsX3ldf2Rb?C#=m!>
zX2U(t{nkzvw~E;%VLFtC=wZFhvF|}G)Z5Md&a`sOVs4Qz9S@2wRCBirXdrv%N_DN*
sEl1FICQukeEs`GuM)XO*%m4rY07*qoM6N<$f`+F!egFUf
literal 0
HcmV?d00001
diff --git a/src/views/mall/promotion/kefu/components/asserts/danao.png b/src/views/mall/promotion/kefu/components/asserts/danao.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa85a294752cf73cbc8885dfdfe5b3d7e8036d84
GIT binary patch
literal 4568
zcmV;}5hw16P)u8XEf5iI`^D&f8X=_o!|MLbI+AzS>}>~TWSWX
zvZiy$okg#UhLC0@37<+GK=b6M30RkBPF=tN&=2%;
zflgM){Y5TI6=sfv!%`DM=-Yv%8Pi&vptntaS7y#PG6De?M10~qGX{ZOz%EwG18S;W
z43wUPLsADq@EcS9U$zpg*NN{kCs?j7th~S{Fz$l!!{C2ce5Xbiu#;8t-ogsZ9i=1T
zV`(d}gH)~Fb_-PA0`t~_>9XS1W8wr{d>=+$1K(?@QVaq+__n;OxD|<`_$2g69l%at
zRnmFWWl(o7%)bNl6~(PXIz&d{+>0>$tRN>DgTPi+7r!$v9tk~C6T;pmceE92V9~?k
zdp2S81Nibu@tuq=U@NV~>obZ&!h6zogz2%x&Q-QR!-G(}#AqL!d>Tf2r~dOe
z*UCGJQKYscbW2T4ZT;rOu=LNMx61t>K2m<1*
zf60BY=q}LD)257>z=>bL@n0mK@d4Xer(MUb4GC{aJAj|Wj;&X~6@LxZ%L~tYHo*TG
z9Q#M`A4@#@1UJgtwaC7365fz@0e>7juD=TfEfKC>S~2jJ*W6VDt1I{1V9iO7$HSEmqQu)@l}f~o>X
zx0ebo4nY6k3hfXOMBJJm5xJA_N(ut5`8$}GIs7x{aB&bm{QK!d+?G2Lxs$L@>O^rt
z4dt-whQRUc3EakcuCp>ybM5D6|~+D
z26N$+oy!OZq30PGk2y$>@m+amrc2V3@X{1Bbj>|b{WbT5)Z+Yc`0#n<$Okm>-Slp2
zdUGVR6NP}qS3}i8kVD#4bS|T6AuRb0cw=U1C$KeL^3M@PWP|f1pRR>v9~V7v34Q$wuP5GApw5~&%v*7zyB4Up08r(%~m7r
zcROg=xIF#EU%KH)mvYp_9dbviWYf*jZ=?8zeXuPWiv5N4b&1*jsCHv@O8iRy*qm5rRL1``~FjJ!i6}
zHWg;!*yU7_rbFS$0Dk(
zvA530(OQGOZT^fAA_RX9ch6ZoJ?B(kXK$U4^Y`j-wAHA);JsHN5Q{A>p2yR30r$c4stIXaS%JN^8b@0dwz}euLjwK?o`dIc_lSC`fw^2y
zqq71>Yc=+^YAjZLZiRk%9FD}6z3%4DDC34Z
z