+
-
-
-
- {{ 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 00000000..32939004
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/a.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/aini.png b/src/views/mall/promotion/kefu/components/asserts/aini.png
new file mode 100644
index 00000000..02cf5c49
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/aini.png differ
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 00000000..25e64223
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/aixin.png differ
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 00000000..d16260af
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/baiyan.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/bizui.png b/src/views/mall/promotion/kefu/components/asserts/bizui.png
new file mode 100644
index 00000000..a3b18002
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/bizui.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/buhaoyisi.png b/src/views/mall/promotion/kefu/components/asserts/buhaoyisi.png
new file mode 100644
index 00000000..54c4b3f7
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/buhaoyisi.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/bukesiyi.png b/src/views/mall/promotion/kefu/components/asserts/bukesiyi.png
new file mode 100644
index 00000000..5f272e3e
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/bukesiyi.png differ
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 00000000..8649727e
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/dajing.png differ
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 00000000..aa85a294
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/danao.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/daxiao.png b/src/views/mall/promotion/kefu/components/asserts/daxiao.png
new file mode 100644
index 00000000..26206bc0
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/daxiao.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/dianzan.png b/src/views/mall/promotion/kefu/components/asserts/dianzan.png
new file mode 100644
index 00000000..2e7f00eb
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/dianzan.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/emo.png b/src/views/mall/promotion/kefu/components/asserts/emo.png
new file mode 100644
index 00000000..9c845516
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/emo.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/esi.png b/src/views/mall/promotion/kefu/components/asserts/esi.png
new file mode 100644
index 00000000..84e9726f
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/esi.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/fadai.png b/src/views/mall/promotion/kefu/components/asserts/fadai.png
new file mode 100644
index 00000000..0772de26
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/fadai.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/fankun.png b/src/views/mall/promotion/kefu/components/asserts/fankun.png
new file mode 100644
index 00000000..6e18dac3
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/fankun.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/feiwen.png b/src/views/mall/promotion/kefu/components/asserts/feiwen.png
new file mode 100644
index 00000000..be976165
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/feiwen.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/fennu.png b/src/views/mall/promotion/kefu/components/asserts/fennu.png
new file mode 100644
index 00000000..20c57338
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/fennu.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/ganga.png b/src/views/mall/promotion/kefu/components/asserts/ganga.png
new file mode 100644
index 00000000..30ec329d
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/ganga.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/ganmao.png b/src/views/mall/promotion/kefu/components/asserts/ganmao.png
new file mode 100644
index 00000000..35bbb89f
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/ganmao.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/hanyan.png b/src/views/mall/promotion/kefu/components/asserts/hanyan.png
new file mode 100644
index 00000000..a0bc838b
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/hanyan.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/haochi.png b/src/views/mall/promotion/kefu/components/asserts/haochi.png
new file mode 100644
index 00000000..2e52b6be
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/haochi.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/hongxin.png b/src/views/mall/promotion/kefu/components/asserts/hongxin.png
new file mode 100644
index 00000000..65b5de8f
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/hongxin.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/huaixiao.png b/src/views/mall/promotion/kefu/components/asserts/huaixiao.png
new file mode 100644
index 00000000..bc0e76c4
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/huaixiao.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/jingkong.png b/src/views/mall/promotion/kefu/components/asserts/jingkong.png
new file mode 100644
index 00000000..7aa65845
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/jingkong.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/jingshu.png b/src/views/mall/promotion/kefu/components/asserts/jingshu.png
new file mode 100644
index 00000000..0e984d68
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/jingshu.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/jingya.png b/src/views/mall/promotion/kefu/components/asserts/jingya.png
new file mode 100644
index 00000000..9ba6bab3
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/jingya.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/kaixin.png b/src/views/mall/promotion/kefu/components/asserts/kaixin.png
new file mode 100644
index 00000000..29c9f5dd
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/kaixin.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/keai.png b/src/views/mall/promotion/kefu/components/asserts/keai.png
new file mode 100644
index 00000000..d3b582c6
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/keai.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/keshui.png b/src/views/mall/promotion/kefu/components/asserts/keshui.png
new file mode 100644
index 00000000..cef489ea
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/keshui.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/kun.png b/src/views/mall/promotion/kefu/components/asserts/kun.png
new file mode 100644
index 00000000..1ddc388a
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/kun.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/lengku.png b/src/views/mall/promotion/kefu/components/asserts/lengku.png
new file mode 100644
index 00000000..c5c6feeb
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/lengku.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/liuhan.png b/src/views/mall/promotion/kefu/components/asserts/liuhan.png
new file mode 100644
index 00000000..e6ddc6f4
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/liuhan.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/liukoushui.png b/src/views/mall/promotion/kefu/components/asserts/liukoushui.png
new file mode 100644
index 00000000..3e2fba65
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/liukoushui.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/liulei.png b/src/views/mall/promotion/kefu/components/asserts/liulei.png
new file mode 100644
index 00000000..dbf82040
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/liulei.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/mengbi.png b/src/views/mall/promotion/kefu/components/asserts/mengbi.png
new file mode 100644
index 00000000..a4206eef
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/mengbi.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/mianwubiaoqing.png b/src/views/mall/promotion/kefu/components/asserts/mianwubiaoqing.png
new file mode 100644
index 00000000..6f315b98
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/mianwubiaoqing.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/nanguo.png b/src/views/mall/promotion/kefu/components/asserts/nanguo.png
new file mode 100644
index 00000000..19b9fb94
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/nanguo.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/outu.png b/src/views/mall/promotion/kefu/components/asserts/outu.png
new file mode 100644
index 00000000..2f9a06d6
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/outu.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/picture.svg b/src/views/mall/promotion/kefu/components/asserts/picture.svg
new file mode 100644
index 00000000..8811d495
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/asserts/picture.svg
@@ -0,0 +1,10 @@
+
+
diff --git a/src/views/mall/promotion/kefu/components/asserts/shengqi.png b/src/views/mall/promotion/kefu/components/asserts/shengqi.png
new file mode 100644
index 00000000..7dce41dc
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/shengqi.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/shuizhuo.png b/src/views/mall/promotion/kefu/components/asserts/shuizhuo.png
new file mode 100644
index 00000000..97d0f0a6
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/shuizhuo.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/tianshi.png b/src/views/mall/promotion/kefu/components/asserts/tianshi.png
new file mode 100644
index 00000000..eb922dd7
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/tianshi.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/xiaodiaoya.png b/src/views/mall/promotion/kefu/components/asserts/xiaodiaoya.png
new file mode 100644
index 00000000..29fbc0e1
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/xiaodiaoya.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/xiaoku.png b/src/views/mall/promotion/kefu/components/asserts/xiaoku.png
new file mode 100644
index 00000000..88a169d4
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/xiaoku.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/xinsui.png b/src/views/mall/promotion/kefu/components/asserts/xinsui.png
new file mode 100644
index 00000000..a0f572a1
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/xinsui.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/xiong.png b/src/views/mall/promotion/kefu/components/asserts/xiong.png
new file mode 100644
index 00000000..43dfd709
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/xiong.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/yiwen.png b/src/views/mall/promotion/kefu/components/asserts/yiwen.png
new file mode 100644
index 00000000..4c0da709
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/yiwen.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/yun.png b/src/views/mall/promotion/kefu/components/asserts/yun.png
new file mode 100644
index 00000000..56e5d021
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/yun.png differ
diff --git a/src/views/mall/promotion/kefu/components/asserts/ziya.png b/src/views/mall/promotion/kefu/components/asserts/ziya.png
new file mode 100644
index 00000000..593ef5e6
Binary files /dev/null and b/src/views/mall/promotion/kefu/components/asserts/ziya.png differ
diff --git a/src/views/mall/promotion/kefu/components/index.ts b/src/views/mall/promotion/kefu/components/index.ts
new file mode 100644
index 00000000..0f60a6e4
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/index.ts
@@ -0,0 +1,5 @@
+import KeFuConversationList from './KeFuConversationList.vue'
+import KeFuMessageList from './KeFuMessageList.vue'
+import MemberInfo from './member/MemberInfo.vue'
+
+export { KeFuConversationList, KeFuMessageList, MemberInfo }
diff --git a/src/views/mall/promotion/kefu/components/member/MemberInfo.vue b/src/views/mall/promotion/kefu/components/member/MemberInfo.vue
new file mode 100644
index 00000000..849992b3
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/member/MemberInfo.vue
@@ -0,0 +1,252 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/kefu/components/member/OrderBrowsingHistory.vue b/src/views/mall/promotion/kefu/components/member/OrderBrowsingHistory.vue
new file mode 100644
index 00000000..8fb8891c
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/member/OrderBrowsingHistory.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
diff --git a/src/views/mall/promotion/kefu/components/member/ProductBrowsingHistory.vue b/src/views/mall/promotion/kefu/components/member/ProductBrowsingHistory.vue
new file mode 100644
index 00000000..a9b38561
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/member/ProductBrowsingHistory.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/kefu/components/message/MessageItem.vue b/src/views/mall/promotion/kefu/components/message/MessageItem.vue
new file mode 100644
index 00000000..325a3639
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/message/MessageItem.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/kefu/components/message/OrderItem.vue b/src/views/mall/promotion/kefu/components/message/OrderItem.vue
new file mode 100644
index 00000000..9385f10b
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/message/OrderItem.vue
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
共 {{ getMessageContent?.productCount }} 件商品,总金额:
+
+
+ ¥{{ fenToYuan(getMessageContent?.payPrice) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/kefu/components/message/ProductItem.vue b/src/views/mall/promotion/kefu/components/message/ProductItem.vue
new file mode 100644
index 00000000..bc6cd979
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/message/ProductItem.vue
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
{{ title }}
+
+ 库存: {{ stock || 0 }}
+ 销量: {{ salesCount || 0 }}
+
+
+ ¥{{ fenToYuan(price) }}
+ 详情
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/kefu/components/tools/EmojiSelectPopover.vue b/src/views/mall/promotion/kefu/components/tools/EmojiSelectPopover.vue
new file mode 100644
index 00000000..43c096db
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/tools/EmojiSelectPopover.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/kefu/components/tools/PictureSelectUpload.vue b/src/views/mall/promotion/kefu/components/tools/PictureSelectUpload.vue
new file mode 100644
index 00000000..9742353a
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/tools/PictureSelectUpload.vue
@@ -0,0 +1,93 @@
+
+
+
+
![]()
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/kefu/components/tools/constants.ts b/src/views/mall/promotion/kefu/components/tools/constants.ts
new file mode 100644
index 00000000..750e7f55
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/tools/constants.ts
@@ -0,0 +1,17 @@
+// 客服消息类型枚举类
+export const KeFuMessageContentTypeEnum = {
+ TEXT: 1, // 文本消息
+ IMAGE: 2, // 图片消息
+ VOICE: 3, // 语音消息
+ VIDEO: 4, // 视频消息
+ SYSTEM: 5, // 系统消息
+ // ========== 商城特殊消息 ==========
+ PRODUCT: 10, // 商品消息
+ ORDER: 11 // 订单消息"
+}
+
+// Promotion 的 WebSocket 消息类型枚举类
+export const WebSocketMessageTypeConstants = {
+ KEFU_MESSAGE_TYPE: 'kefu_message_type', // 客服消息类型
+ KEFU_MESSAGE_ADMIN_READ: 'kefu_message_read_status_change' // 客服消息管理员已读
+}
diff --git a/src/views/mall/promotion/kefu/components/tools/emoji.ts b/src/views/mall/promotion/kefu/components/tools/emoji.ts
new file mode 100644
index 00000000..3755e38b
--- /dev/null
+++ b/src/views/mall/promotion/kefu/components/tools/emoji.ts
@@ -0,0 +1,129 @@
+import { isEmpty } from '@/utils/is'
+
+const emojiList = [
+ { name: '[笑掉牙]', file: 'xiaodiaoya.png' },
+ { name: '[可爱]', file: 'keai.png' },
+ { name: '[冷酷]', file: 'lengku.png' },
+ { name: '[闭嘴]', file: 'bizui.png' },
+ { name: '[生气]', file: 'shengqi.png' },
+ { name: '[惊恐]', file: 'jingkong.png' },
+ { name: '[瞌睡]', file: 'keshui.png' },
+ { name: '[大笑]', file: 'daxiao.png' },
+ { name: '[爱心]', file: 'aixin.png' },
+ { name: '[坏笑]', file: 'huaixiao.png' },
+ { name: '[飞吻]', file: 'feiwen.png' },
+ { name: '[疑问]', file: 'yiwen.png' },
+ { name: '[开心]', file: 'kaixin.png' },
+ { name: '[发呆]', file: 'fadai.png' },
+ { name: '[流泪]', file: 'liulei.png' },
+ { name: '[汗颜]', file: 'hanyan.png' },
+ { name: '[惊悚]', file: 'jingshu.png' },
+ { name: '[困~]', file: 'kun.png' },
+ { name: '[心碎]', file: 'xinsui.png' },
+ { name: '[天使]', file: 'tianshi.png' },
+ { name: '[晕]', file: 'yun.png' },
+ { name: '[啊]', file: 'a.png' },
+ { name: '[愤怒]', file: 'fennu.png' },
+ { name: '[睡着]', file: 'shuizhuo.png' },
+ { name: '[面无表情]', file: 'mianwubiaoqing.png' },
+ { name: '[难过]', file: 'nanguo.png' },
+ { name: '[犯困]', file: 'fankun.png' },
+ { name: '[好吃]', file: 'haochi.png' },
+ { name: '[呕吐]', file: 'outu.png' },
+ { name: '[龇牙]', file: 'ziya.png' },
+ { name: '[懵比]', file: 'mengbi.png' },
+ { name: '[白眼]', file: 'baiyan.png' },
+ { name: '[饿死]', file: 'esi.png' },
+ { name: '[凶]', file: 'xiong.png' },
+ { name: '[感冒]', file: 'ganmao.png' },
+ { name: '[流汗]', file: 'liuhan.png' },
+ { name: '[笑哭]', file: 'xiaoku.png' },
+ { name: '[流口水]', file: 'liukoushui.png' },
+ { name: '[尴尬]', file: 'ganga.png' },
+ { name: '[惊讶]', file: 'jingya.png' },
+ { name: '[大惊]', file: 'dajing.png' },
+ { name: '[不好意思]', file: 'buhaoyisi.png' },
+ { name: '[大闹]', file: 'danao.png' },
+ { name: '[不可思议]', file: 'bukesiyi.png' },
+ { name: '[爱你]', file: 'aini.png' },
+ { name: '[红心]', file: 'hongxin.png' },
+ { name: '[点赞]', file: 'dianzan.png' },
+ { name: '[恶魔]', file: 'emo.png' }
+]
+
+export interface Emoji {
+ name: string
+ url: string
+}
+
+export const useEmoji = () => {
+ const emojiPathList = ref([])
+
+ /** 加载本地图片 */
+ const initStaticEmoji = async () => {
+ const pathList = import.meta.glob(
+ '@/views/mall/promotion/kefu/components/asserts/*.{png,jpg,jpeg,svg}'
+ )
+ for (const path in pathList) {
+ const imageModule: any = await pathList[path]()
+ emojiPathList.value.push({ path: path, src: imageModule.default })
+ }
+ }
+
+ /** 初始化 */
+ onMounted(async () => {
+ if (isEmpty(emojiPathList.value)) {
+ await initStaticEmoji()
+ }
+ })
+
+ /**
+ * 将文本中的表情替换成图片
+ *
+ * @return 替换后的文本
+ * @param content 消息内容
+ */
+ const replaceEmoji = (content: string) => {
+ let newData = content
+ if (typeof newData !== 'object') {
+ const reg = /\[(.+?)]/g // [] 中括号
+ const zhEmojiName = newData.match(reg)
+ if (zhEmojiName) {
+ zhEmojiName.forEach((item) => {
+ const emojiFile = getEmojiFileByName(item)
+ newData = newData.replace(
+ item,
+ `
`
+ )
+ })
+ }
+ }
+ return newData
+ }
+
+ /**
+ * 获得所有表情
+ *
+ * @return 表情列表
+ */
+ function getEmojiList(): Emoji[] {
+ return emojiList.map((item) => ({
+ url: getEmojiFileByName(item.name),
+ name: item.name
+ })) as Emoji[]
+ }
+
+ function getEmojiFileByName(name: string) {
+ for (const emoji of emojiList) {
+ if (emoji.name === name) {
+ const emojiPath = emojiPathList.value.find(
+ (item: { path: string; src: string }) => item.path.indexOf(emoji.file) > -1
+ )
+ return emojiPath ? emojiPath.src : undefined
+ }
+ }
+ return false
+ }
+
+ return { replaceEmoji, getEmojiList }
+}
diff --git a/src/views/mall/promotion/kefu/index.vue b/src/views/mall/promotion/kefu/index.vue
new file mode 100644
index 00000000..f0fa2a02
--- /dev/null
+++ b/src/views/mall/promotion/kefu/index.vue
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/point/activity/PointActivityForm.vue b/src/views/mall/promotion/point/activity/PointActivityForm.vue
new file mode 100644
index 00000000..a09565cb
--- /dev/null
+++ b/src/views/mall/promotion/point/activity/PointActivityForm.vue
@@ -0,0 +1,227 @@
+
+
+
+
+
diff --git a/src/views/mall/promotion/point/activity/index.vue b/src/views/mall/promotion/point/activity/index.vue
new file mode 100644
index 00000000..ceceb7b5
--- /dev/null
+++ b/src/views/mall/promotion/point/activity/index.vue
@@ -0,0 +1,219 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+ 重置
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getRedeemedQuantity(row) }}
+
+
+
+
+
+
+ 编辑
+
+
+ 关闭
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/point/activity/pointActivity.data.ts b/src/views/mall/promotion/point/activity/pointActivity.data.ts
new file mode 100644
index 00000000..a3334eac
--- /dev/null
+++ b/src/views/mall/promotion/point/activity/pointActivity.data.ts
@@ -0,0 +1,55 @@
+import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
+
+// 表单校验
+export const rules = reactive({
+ spuId: [required],
+ sort: [required]
+})
+
+// CrudSchema https://doc.iocoder.cn/vue3/crud-schema/
+const crudSchemas = reactive([
+ {
+ label: '排序',
+ field: 'sort',
+ form: {
+ component: 'InputNumber',
+ value: 0
+ },
+ table: {
+ width: 80
+ }
+ },
+ {
+ label: '积分商城活动商品',
+ field: 'spuId',
+ isTable: true,
+ isSearch: false,
+ form: {
+ colProps: {
+ span: 24
+ }
+ },
+ table: {
+ width: 300
+ }
+ },
+ {
+ label: '备注',
+ field: 'remark',
+ isSearch: false,
+ form: {
+ component: 'Input',
+ componentProps: {
+ type: 'textarea',
+ rows: 4
+ },
+ colProps: {
+ span: 24
+ }
+ },
+ table: {
+ width: 300
+ }
+ }
+])
+export const { allSchemas } = useCrudSchemas(crudSchemas)
diff --git a/src/views/mall/promotion/point/components/PointShowcase.vue b/src/views/mall/promotion/point/components/PointShowcase.vue
new file mode 100644
index 00000000..82e490c5
--- /dev/null
+++ b/src/views/mall/promotion/point/components/PointShowcase.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/point/components/PointTableSelect.vue b/src/views/mall/promotion/point/components/PointTableSelect.vue
new file mode 100644
index 00000000..d68b5f15
--- /dev/null
+++ b/src/views/mall/promotion/point/components/PointTableSelect.vue
@@ -0,0 +1,300 @@
+
+
+
+
+
diff --git a/src/views/mall/promotion/rewardActivity/RewardForm.vue b/src/views/mall/promotion/rewardActivity/RewardForm.vue
index 9fb69a56..64a2dd4a 100644
--- a/src/views/mall/promotion/rewardActivity/RewardForm.vue
+++ b/src/views/mall/promotion/rewardActivity/RewardForm.vue
@@ -1,11 +1,11 @@
-
diff --git a/src/views/mall/promotion/rewardActivity/components/RewardRule.vue b/src/views/mall/promotion/rewardActivity/components/RewardRule.vue
new file mode 100644
index 00000000..2c63a427
--- /dev/null
+++ b/src/views/mall/promotion/rewardActivity/components/RewardRule.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
+ 活动层级{{ index + 1 }}
+
+ 删除
+
+
+
+ 满
+
+
+ {{ PromotionConditionTypeEnum.PRICE.type === formData.conditionType ? '元' : '件' }}
+
+
+
+ 订单金额优惠
+
+ 减
+
+ 元
+
+
+
+ 包邮:
+
+
+
+ 送积分:
+
+ 送
+
+ 积分
+
+
+
+ 送优惠券:
+
+
+
+
+
+
+
+ 添加优惠规则
+
+
+ 赠送积分为 0 时不赠送。未选优惠券时不赠送。
+
+
+
+
+
diff --git a/src/views/mall/promotion/rewardActivity/components/RewardRuleCouponSelect.vue b/src/views/mall/promotion/rewardActivity/components/RewardRuleCouponSelect.vue
new file mode 100644
index 00000000..ccadd0b9
--- /dev/null
+++ b/src/views/mall/promotion/rewardActivity/components/RewardRuleCouponSelect.vue
@@ -0,0 +1,136 @@
+
+ 添加优惠劵
+
+
+
+
优惠券名称:{{ item.name }}
+
+ 范围:
+
+
+
+ 优惠:
+
+ {{ discountFormat(item) }}
+
+
+
+ 送
+
+ 张
+ 删除
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/rewardActivity/index.vue b/src/views/mall/promotion/rewardActivity/index.vue
index fa5f143c..544420e1 100644
--- a/src/views/mall/promotion/rewardActivity/index.vue
+++ b/src/views/mall/promotion/rewardActivity/index.vue
@@ -1,32 +1,33 @@
+
- 搜索
- 重置
+
+
+ 搜索
+
+
+
+ 重置
+
- 新增
+
+ 新增
@@ -61,47 +69,61 @@
-
+
+
+
+
+
+
-
+
-
+
-
+
编辑
+ 关闭
+
+
删除
@@ -110,9 +132,9 @@
@@ -167,9 +189,22 @@ const resetQuery = () => {
}
/** 添加/修改操作 */
-const formRef = ref()
+const formRef = ref>()
const openForm = (type: string, id?: number) => {
- formRef.value.open(type, id)
+ formRef.value?.open(type, id)
+}
+
+/** 关闭按钮操作 */
+const handleClose = async (id: number) => {
+ try {
+ // 关闭的二次确认
+ await message.confirm('确认关闭该满减活动吗?')
+ // 发起关闭
+ await RewardActivityApi.closeRewardActivity(id)
+ message.success('关闭成功')
+ // 刷新列表
+ await getList()
+ } catch {}
}
/** 删除按钮操作 */
diff --git a/src/views/mall/promotion/seckill/activity/index.vue b/src/views/mall/promotion/seckill/activity/index.vue
index e91ac3da..bffe265a 100644
--- a/src/views/mall/promotion/seckill/activity/index.vue
+++ b/src/views/mall/promotion/seckill/activity/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/promotion/seckill/components/SeckillShowcase.vue b/src/views/mall/promotion/seckill/components/SeckillShowcase.vue
new file mode 100644
index 00000000..a924e8ca
--- /dev/null
+++ b/src/views/mall/promotion/seckill/components/SeckillShowcase.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/mall/promotion/seckill/components/SeckillTableSelect.vue b/src/views/mall/promotion/seckill/components/SeckillTableSelect.vue
new file mode 100644
index 00000000..3e4e67e9
--- /dev/null
+++ b/src/views/mall/promotion/seckill/components/SeckillTableSelect.vue
@@ -0,0 +1,343 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+ handleCheckOne(checked, row, true)"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatDate(scope.row.startTime, 'YYYY-MM-DD') }}
+ ~ {{ formatDate(scope.row.endTime, 'YYYY-MM-DD') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatSeckillPrice(scope.row.products) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确 定
+ 取 消
+
+
+
+
+
diff --git a/src/views/mall/promotion/seckill/config/SeckillConfigForm.vue b/src/views/mall/promotion/seckill/config/SeckillConfigForm.vue
index a7ce5fe7..185b2569 100644
--- a/src/views/mall/promotion/seckill/config/SeckillConfigForm.vue
+++ b/src/views/mall/promotion/seckill/config/SeckillConfigForm.vue
@@ -32,7 +32,7 @@
{{ dict.label }}
diff --git a/src/views/mall/promotion/seckill/config/index.vue b/src/views/mall/promotion/seckill/config/index.vue
index dbd0600c..9fa2c1e3 100644
--- a/src/views/mall/promotion/seckill/config/index.vue
+++ b/src/views/mall/promotion/seckill/config/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/statistics/member/index.vue b/src/views/mall/statistics/member/index.vue
index 25af5ac4..0e1bbaf6 100644
--- a/src/views/mall/statistics/member/index.vue
+++ b/src/views/mall/statistics/member/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/statistics/product/index.vue b/src/views/mall/statistics/product/index.vue
index 0376ef59..d1bcba63 100644
--- a/src/views/mall/statistics/product/index.vue
+++ b/src/views/mall/statistics/product/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/statistics/trade/index.vue b/src/views/mall/statistics/trade/index.vue
index 9dbdf2c0..0a25fd74 100644
--- a/src/views/mall/statistics/trade/index.vue
+++ b/src/views/mall/statistics/trade/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/trade/afterSale/detail/index.vue b/src/views/mall/trade/afterSale/detail/index.vue
index 26df0d34..024f4895 100644
--- a/src/views/mall/trade/afterSale/detail/index.vue
+++ b/src/views/mall/trade/afterSale/detail/index.vue
@@ -325,13 +325,13 @@ onMounted(async () => {
align-items: center;
min-height: 30px;
padding: 10px;
- background-color: #f7f8fa;
+ background-color: var(--app-content-bg-color);
&::before {
position: absolute;
top: 10px;
left: 13px;
- border-color: transparent #f7f8fa transparent transparent; /* 尖角颜色,左侧朝向 */
+ border-color: transparent var(--app-content-bg-color) transparent transparent; /* 尖角颜色,左侧朝向 */
border-style: solid;
border-width: 8px; /* 调整尖角大小 */
content: '';
diff --git a/src/views/mall/trade/afterSale/index.vue b/src/views/mall/trade/afterSale/index.vue
index c4bba98a..0c4d0b85 100644
--- a/src/views/mall/trade/afterSale/index.vue
+++ b/src/views/mall/trade/afterSale/index.vue
@@ -1,4 +1,5 @@
+
@@ -80,7 +81,7 @@
-
+
{{ fenToYuan(scope.row.refundPrice) }} 元
@@ -205,6 +206,7 @@ const queryParams = reactive({
way: null,
type: null
})
+
/** 查询列表 */
const getList = async () => {
loading.value = true
@@ -215,23 +217,26 @@ const getList = async () => {
delete data.status
}
// 执行查询
- const res = (await AfterSaleApi.getAfterSalePage(data)) as AfterSaleApi.TradeAfterSaleVO[]
- list.value = res.list
+ const res = await AfterSaleApi.getAfterSalePage(data)
+ list.value = res.list as AfterSaleApi.TradeAfterSaleVO[]
total.value = res.total
} finally {
loading.value = false
}
}
+
/** 搜索按钮操作 */
const handleQuery = async () => {
queryParams.pageNo = 1
await getList()
}
+
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields()
handleQuery()
}
+
/** tab 切换 */
const tabClick = async (tab: TabsPaneContext) => {
queryParams.status = tab.paneName
@@ -245,7 +250,7 @@ const openAfterSaleDetail = (id: number) => {
/** 查看订单详情 */
const openOrderDetail = (id: number) => {
- push({ name: 'TradeOrderDetail', params: { orderId: id } })
+ push({ name: 'TradeOrderDetail', params: { id } })
}
/** 商品图预览 */
diff --git a/src/views/mall/trade/brokerage/record/index.vue b/src/views/mall/trade/brokerage/record/index.vue
index 32d17a09..8f138adc 100644
--- a/src/views/mall/trade/brokerage/record/index.vue
+++ b/src/views/mall/trade/brokerage/record/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/trade/brokerage/user/BrokerageOrderListDialog.vue b/src/views/mall/trade/brokerage/user/BrokerageOrderListDialog.vue
index 54e3c16d..20b4a9ab 100644
--- a/src/views/mall/trade/brokerage/user/BrokerageOrderListDialog.vue
+++ b/src/views/mall/trade/brokerage/user/BrokerageOrderListDialog.vue
@@ -12,8 +12,8 @@
全部
- 一级推广人
- 二级推广人
+ 一级推广人
+ 二级推广人
diff --git a/src/views/mall/trade/brokerage/user/BrokerageUserListDialog.vue b/src/views/mall/trade/brokerage/user/BrokerageUserListDialog.vue
index 87dc8f67..732f4bbb 100644
--- a/src/views/mall/trade/brokerage/user/BrokerageUserListDialog.vue
+++ b/src/views/mall/trade/brokerage/user/BrokerageUserListDialog.vue
@@ -12,8 +12,8 @@
全部
- 一级推广人
- 二级推广人
+ 一级推广人
+ 二级推广人
diff --git a/src/views/mall/trade/brokerage/user/index.vue b/src/views/mall/trade/brokerage/user/index.vue
index 596dad4d..22daf1b2 100644
--- a/src/views/mall/trade/brokerage/user/index.vue
+++ b/src/views/mall/trade/brokerage/user/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/trade/brokerage/withdraw/index.vue b/src/views/mall/trade/brokerage/withdraw/index.vue
index a54d93ae..762451f1 100644
--- a/src/views/mall/trade/brokerage/withdraw/index.vue
+++ b/src/views/mall/trade/brokerage/withdraw/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/trade/config/index.vue b/src/views/mall/trade/config/index.vue
index 03bbe17a..6aa4b979 100644
--- a/src/views/mall/trade/config/index.vue
+++ b/src/views/mall/trade/config/index.vue
@@ -1,4 +1,6 @@
+
+
{{ dict.label }}
@@ -97,7 +99,7 @@
{{ dict.label }}
@@ -180,7 +182,7 @@
{{ dict.label }}
diff --git a/src/views/mall/trade/delivery/express/ExpressForm.vue b/src/views/mall/trade/delivery/express/ExpressForm.vue
index 232fb793..8b759f28 100644
--- a/src/views/mall/trade/delivery/express/ExpressForm.vue
+++ b/src/views/mall/trade/delivery/express/ExpressForm.vue
@@ -25,7 +25,7 @@
{{ dict.label }}
diff --git a/src/views/mall/trade/delivery/express/index.vue b/src/views/mall/trade/delivery/express/index.vue
index a830e482..1cde87d1 100644
--- a/src/views/mall/trade/delivery/express/index.vue
+++ b/src/views/mall/trade/delivery/express/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/trade/delivery/expressTemplate/ExpressTemplateForm.vue b/src/views/mall/trade/delivery/expressTemplate/ExpressTemplateForm.vue
index edbcbc3a..547aece6 100644
--- a/src/views/mall/trade/delivery/expressTemplate/ExpressTemplateForm.vue
+++ b/src/views/mall/trade/delivery/expressTemplate/ExpressTemplateForm.vue
@@ -15,7 +15,7 @@
{{ dict.label }}
diff --git a/src/views/mall/trade/delivery/expressTemplate/index.vue b/src/views/mall/trade/delivery/expressTemplate/index.vue
index eff8b9e1..9d0688a9 100644
--- a/src/views/mall/trade/delivery/expressTemplate/index.vue
+++ b/src/views/mall/trade/delivery/expressTemplate/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/mall/trade/delivery/pickUpOrder/index.vue b/src/views/mall/trade/delivery/pickUpOrder/index.vue
index bdca0c42..e864dd3e 100644
--- a/src/views/mall/trade/delivery/pickUpOrder/index.vue
+++ b/src/views/mall/trade/delivery/pickUpOrder/index.vue
@@ -1,4 +1,6 @@
+
+
@@ -24,9 +26,8 @@
重置
-
+
核销
+
+ 连接扫描枪
+
+
+ 断开扫描枪
+
@@ -214,18 +227,20 @@ import { DeliveryTypeEnum } from '@/utils/constants'
import { TradeOrderSummaryRespVO } from '@/api/mall/trade/order'
import { DeliveryPickUpStoreVO } from '@/api/mall/trade/delivery/pickUpStore'
import OrderPickUpForm from '@/views/mall/trade/order/form/OrderPickUpForm.vue'
+import { ref, onMounted } from 'vue'
+import { useUserStore } from '@/store/modules/user'
+const message = useMessage() // 消息弹窗
+
+const port = ref('')
+const ports = ref([])
+const reader = ref('')
defineOptions({ name: 'PickUpOrder' })
-// 列表的加载中
-const loading = ref(true)
-// 列表的总页数
-const total = ref(2)
-// 列表的数据
-const list = ref([])
-// 搜索的表单
-const queryFormRef = ref()
-// 初始表单参数
+const loading = ref(true) // 列表的加载中
+const total = ref(2) // 列表的总页数
+const list = ref([]) // 列表的数据
+const queryFormRef = ref() // 搜索的表单
const INIT_QUERY_PARAMS = {
// 页数
pageNo: 1,
@@ -236,14 +251,15 @@ const INIT_QUERY_PARAMS = {
// 配送方式
deliveryType: DeliveryTypeEnum.PICK_UP.type,
// 自提门店
- pickUpStoreId: undefined
-}
-// 表单搜索
-const queryParams = ref({ ...INIT_QUERY_PARAMS })
-// 订单搜索类型 queryParam
-const queryType = reactive({ queryParam: 'no' })
-// 订单统计数据
-const summary = ref()
+ pickUpStoreId: -1
+} // 初始表单参数
+
+const queryParams = ref({ ...INIT_QUERY_PARAMS }) // 表单搜索
+const queryType = reactive({ queryParam: 'no' }) // 订单搜索类型 queryParam
+const summary = ref() // 订单统计数据
+
+const serialPort = ref(false) // 是否连接扫码枪
+const isUse = ref(true) // 是否可核销
// 订单聚合搜索 select 类型配置(动态搜索)
const dynamicSearchList = ref([
@@ -292,13 +308,21 @@ const handleQuery = async () => {
const resetQuery = () => {
queryFormRef.value?.resetFields()
queryParams.value = { ...INIT_QUERY_PARAMS }
+ if (pickUpStoreList.value.length > 0) {
+ queryParams.value.pickUpStoreId = pickUpStoreList.value[0].id
+ }
handleQuery()
}
/** 自提门店精简列表 */
const pickUpStoreList = ref([])
const getPickUpStoreList = async () => {
- pickUpStoreList.value = await PickUpStoreApi.getListAllSimple()
+ pickUpStoreList.value = await PickUpStoreApi.getSimpleDeliveryPickUpStoreList()
+ // 移除自己无法核销的门店
+ const userId = useUserStore().getUser.id
+ pickUpStoreList.value = pickUpStoreList.value.filter((item) =>
+ item.verifyUserIds?.includes(userId)
+ )
}
/** 显示核销表单 */
@@ -307,10 +331,96 @@ const handlePickup = () => {
pickUpForm.value.open()
}
+/** 连接扫码枪 */
+const connectToSerialPort = async () => {
+ try {
+ // 判断浏览器支持串口通信
+ if (
+ 'serial' in navigator &&
+ navigator.serial != null &&
+ typeof navigator.serial === 'object' &&
+ 'requestPort' in navigator.serial
+ ) {
+ // 提示用户选择一个串口
+ port.value = await navigator.serial.requestPort()
+ } else {
+ message.error('浏览器不支持扫码枪连接,请更换浏览器重试')
+ return
+ }
+
+ // 获取用户之前授予该网站访问权限的所有串口。
+ ports.value = await navigator.serial.getPorts()
+
+ // console.log(port.value, ports.value);
+ // console.log(port.value)
+ // 等待串口打开
+ await port.value.open({ baudRate: 9600, dataBits: 8, stopBits: 2 })
+
+ // console.log(typeof port.value);
+ message.success('成功连接扫码枪')
+ serialPort.value = true
+ // readData(port.value);
+ readData()
+ } catch (error) {
+ // 处理连接串口出错的情况
+ console.log('Error connecting to serial port:', error)
+ }
+}
+
+/** 监听扫码枪输入 */
+const readData = async () => {
+ reader.value = port.value.readable.getReader()
+ let data = '' //扫码数据
+ // 监听来自串口的数据
+ while (true) {
+ const { value, done } = await reader.value.read()
+ if (done) {
+ // 允许稍后关闭串口
+ reader.value.releaseLock()
+ break
+ }
+ // 获取发送的数据
+ const serialData = new TextDecoder().decode(value)
+ data = `${data}${serialData}`
+ if (serialData.includes('\r')) {
+ //读取结束
+ let codeData = data.replace('\r', '')
+ data = '' //清空下次读取不会叠加
+ console.log(`二维码数据:${codeData}`)
+ //处理拿到数据逻辑
+ pickUpForm.value.open(codeData)
+ }
+ }
+}
+
+/** 断开扫码枪 */
+const cutPort = async () => {
+ if (port.value !== '') {
+ await reader.value.cancel()
+ await port.value.close()
+ port.value = ''
+ console.log('断开扫码枪连接')
+ message.success('已成功断开扫码枪连接')
+ serialPort.value = false
+ } else {
+ message.warning('请先连接或打开扫码枪')
+ }
+}
+
/** 初始化 **/
-onMounted(() => {
- getList()
- getPickUpStoreList()
+onMounted(async () => {
+ await getPickUpStoreList()
+ if (pickUpStoreList.value.length === 0) {
+ message.error('当前登录人没绑定任何自提点')
+ loading.value = false
+ isUse.value = true
+ return
+ }
+
+ // 查询
+ queryParams.value.pickUpStoreId = pickUpStoreList.value[0].id
+ isUse.value = false
+ await getList()
})
diff --git a/src/views/mall/trade/delivery/pickUpStore/components/StoreStaffTableSelect.vue b/src/views/mall/trade/delivery/pickUpStore/components/StoreStaffTableSelect.vue
new file mode 100644
index 00000000..4256fbc2
--- /dev/null
+++ b/src/views/mall/trade/delivery/pickUpStore/components/StoreStaffTableSelect.vue
@@ -0,0 +1,265 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+
+
+
+ handleCheckOne(checked, row, true)"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确 定
+ 取 消
+
+
+
+
diff --git a/src/views/mall/trade/delivery/pickUpStore/index.vue b/src/views/mall/trade/delivery/pickUpStore/index.vue
index b2b0dc9a..c7684bec 100644
--- a/src/views/mall/trade/delivery/pickUpStore/index.vue
+++ b/src/views/mall/trade/delivery/pickUpStore/index.vue
@@ -1,4 +1,5 @@
+
@@ -92,7 +93,7 @@
prop="createTime"
width="180"
/>
-
+
编辑
+
+ 绑定店员
+
+
+
+
diff --git a/src/views/member/config/index.vue b/src/views/member/config/index.vue
index ed6da6c8..2593509f 100644
--- a/src/views/member/config/index.vue
+++ b/src/views/member/config/index.vue
@@ -1,4 +1,5 @@
+
{{ dict.label }}
diff --git a/src/views/member/group/index.vue b/src/views/member/group/index.vue
index e8455833..ba925d6e 100644
--- a/src/views/member/group/index.vue
+++ b/src/views/member/group/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/member/level/LevelForm.vue b/src/views/member/level/LevelForm.vue
index 7e6873cc..2aa49480 100644
--- a/src/views/member/level/LevelForm.vue
+++ b/src/views/member/level/LevelForm.vue
@@ -67,7 +67,7 @@
{{ dict.label }}
diff --git a/src/views/member/level/index.vue b/src/views/member/level/index.vue
index 3512587b..3743eac9 100644
--- a/src/views/member/level/index.vue
+++ b/src/views/member/level/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/member/point/record/index.vue b/src/views/member/point/record/index.vue
index be3f7a1b..9676c2ed 100644
--- a/src/views/member/point/record/index.vue
+++ b/src/views/member/point/record/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/member/signin/config/SignInConfigForm.vue b/src/views/member/signin/config/SignInConfigForm.vue
index 616fd8fc..9e0a629a 100644
--- a/src/views/member/signin/config/SignInConfigForm.vue
+++ b/src/views/member/signin/config/SignInConfigForm.vue
@@ -24,7 +24,7 @@
{{ dict.label }}
diff --git a/src/views/member/signin/config/index.vue b/src/views/member/signin/config/index.vue
index 9d5d727e..14a84cdb 100644
--- a/src/views/member/signin/config/index.vue
+++ b/src/views/member/signin/config/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/member/signin/record/index.vue b/src/views/member/signin/record/index.vue
index 97582db4..e80e8546 100644
--- a/src/views/member/signin/record/index.vue
+++ b/src/views/member/signin/record/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/member/tag/index.vue b/src/views/member/tag/index.vue
index d248e1ec..59efc5e7 100644
--- a/src/views/member/tag/index.vue
+++ b/src/views/member/tag/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/member/user/UserForm.vue b/src/views/member/user/UserForm.vue
index 0da4ef61..70d83138 100644
--- a/src/views/member/user/UserForm.vue
+++ b/src/views/member/user/UserForm.vue
@@ -15,7 +15,7 @@
{{ dict.label }}
@@ -35,7 +35,7 @@
{{ dict.label }}
diff --git a/src/views/member/user/components/UserBalanceUpdateForm.vue b/src/views/member/user/components/UserBalanceUpdateForm.vue
new file mode 100644
index 00000000..36137cf7
--- /dev/null
+++ b/src/views/member/user/components/UserBalanceUpdateForm.vue
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 增加
+ 减少
+
+
+
+
+
+
+
+
+
+
+ 确 定
+ 取 消
+
+
+
+
diff --git a/src/views/member/user/UserLevelUpdateForm.vue b/src/views/member/user/components/UserLevelUpdateForm.vue
similarity index 100%
rename from src/views/member/user/UserLevelUpdateForm.vue
rename to src/views/member/user/components/UserLevelUpdateForm.vue
diff --git a/src/views/member/user/UserPointUpdateForm.vue b/src/views/member/user/components/UserPointUpdateForm.vue
similarity index 88%
rename from src/views/member/user/UserPointUpdateForm.vue
rename to src/views/member/user/components/UserPointUpdateForm.vue
index 967ebe03..ad673bea 100644
--- a/src/views/member/user/UserPointUpdateForm.vue
+++ b/src/views/member/user/components/UserPointUpdateForm.vue
@@ -1,11 +1,11 @@
-
+
@@ -18,24 +18,24 @@
- 增加
- 减少
+ 增加
+ 减少
-
+
- 确 定
+ 确 定
取 消
-
-
-
-
- 余额列表
-
-
-
diff --git a/src/views/member/user/detail/UserAccountInfo.vue b/src/views/member/user/detail/UserAccountInfo.vue
index 56a6ab63..fad174a8 100644
--- a/src/views/member/user/detail/UserAccountInfo.vue
+++ b/src/views/member/user/detail/UserAccountInfo.vue
@@ -1,82 +1,60 @@
-
+
-
+
{{ user.levelName || '无' }}
-
+
{{ user.experience || 0 }}
-
+
{{ user.point || 0 }}
-
+
{{ user.totalPoint || 0 }}
-
+
{{ fenToYuan(wallet.balance || 0) }}
-
+
{{ fenToYuan(wallet.totalExpense || 0) }}
-
+
{{ fenToYuan(wallet.totalRecharge || 0) }}
-
-
diff --git a/src/views/member/user/detail/UserAftersaleList.vue b/src/views/member/user/detail/UserAftersaleList.vue
new file mode 100644
index 00000000..03f3a535
--- /dev/null
+++ b/src/views/member/user/detail/UserAftersaleList.vue
@@ -0,0 +1,276 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.orderNo }}
+
+
+
+
+
+
+
+ {{ row.spuName }}
+
+ {{ property.propertyName }}: {{ property.valueName }}
+
+
+
+
+
+
+ {{ fenToYuan(scope.row.refundPrice) }} 元
+
+
+
+
+ {{ formatDate(scope.row.createTime) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 处理退款
+
+
+
+
+
+
+
+
diff --git a/src/views/member/user/detail/UserBalanceList.vue b/src/views/member/user/detail/UserBalanceList.vue
new file mode 100644
index 00000000..08179e07
--- /dev/null
+++ b/src/views/member/user/detail/UserBalanceList.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+ {{ fenToYuan(row.price) }} 元
+
+
+ {{ fenToYuan(row.balance) }} 元
+
+
+
+
+
+
+
+
+
diff --git a/src/views/member/user/detail/UserBasicInfo.vue b/src/views/member/user/detail/UserBasicInfo.vue
index 075450e9..0fe25380 100644
--- a/src/views/member/user/detail/UserBasicInfo.vue
+++ b/src/views/member/user/detail/UserBasicInfo.vue
@@ -3,83 +3,163 @@
-
+
-
+
-
+
{{ user.name || '空' }}
-
+
{{ user.nickname }}
-
+
{{ user.mobile }}
-
+
-
+
{{ user.areaName }}
-
+
{{ user.registerIp }}
-
+
- {{ user.birthday ? formatDate(user.birthday) : '空' }}
+ {{ user.birthday ? formatDate(user.birthday as any) : '空' }}
-
+
- {{ user.createTime ? formatDate(user.createTime) : '空' }}
+ {{ user.createTime ? formatDate(user.createTime as any) : '空' }}
-
+
- {{ user.loginDate ? formatDate(user.loginDate) : '空' }}
+ {{ user.loginDate ? formatDate(user.loginDate as any) : '空' }}
+
+
+
+
+
+
+
+ {{ user.name || '空' }}
+
+
+
+
+
+ {{ user.nickname }}
+
+
+
+
+
+ {{ user.mobile }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ user.areaName }}
+
+
+
+
+
+ {{ user.registerIp }}
+
+
+
+
+
+ {{ user.birthday ? formatDate(user.birthday as any) : '空' }}
+
+
+
+
+
+ {{ user.createTime ? formatDate(user.createTime as any) : '空' }}
+
+
+
+
+
+ {{ user.loginDate ? formatDate(user.loginDate as any) : '空' }}
+
+
+
-
-
diff --git a/src/views/member/user/detail/UserBrokerageList.vue b/src/views/member/user/detail/UserBrokerageList.vue
index db88787b..68c3c849 100644
--- a/src/views/member/user/detail/UserBrokerageList.vue
+++ b/src/views/member/user/detail/UserBrokerageList.vue
@@ -11,8 +11,8 @@
全部
- 一级推广人
- 二级推广人
+ 一级推广人
+ 二级推广人
diff --git a/src/views/member/user/detail/UserOrderList.vue b/src/views/member/user/detail/UserOrderList.vue
index b6870bc3..92ee70d9 100644
--- a/src/views/member/user/detail/UserOrderList.vue
+++ b/src/views/member/user/detail/UserOrderList.vue
@@ -267,13 +267,13 @@ const getList = async () => {
/** 查看订单详情 */
const openDetail = (id: number) => {
- push({ name: 'TradeOrderDetail', params: { orderId: id } })
+ push({ name: 'TradeOrderDetail', params: { id } })
}
/** 初始化 **/
onMounted(async () => {
await getList()
- pickUpStoreList.value = await PickUpStoreApi.getListAllSimple()
+ pickUpStoreList.value = await PickUpStoreApi.getSimpleDeliveryPickUpStoreList()
deliveryExpressList.value = await DeliveryExpressApi.getSimpleDeliveryExpressList()
})
diff --git a/src/views/member/user/detail/index.vue b/src/views/member/user/detail/index.vue
index 6237cca6..9818219a 100644
--- a/src/views/member/user/detail/index.vue
+++ b/src/views/member/user/detail/index.vue
@@ -7,7 +7,7 @@
@@ -16,16 +16,16 @@
-
+
-
+
-
+
@@ -39,15 +39,18 @@
-
- 余额(WIP)
+
+
+
- 售后管理(WIP)
+
+
+
@@ -65,7 +68,8 @@
-
-
+
diff --git a/src/views/report/goview/index.vue b/src/views/report/goview/index.vue
index 7d9a36a1..038b0624 100644
--- a/src/views/report/goview/index.vue
+++ b/src/views/report/goview/index.vue
@@ -1,6 +1,7 @@
-
+
+
diff --git a/src/views/report/jmreport/index.vue b/src/views/report/jmreport/index.vue
index 2054e420..37861519 100644
--- a/src/views/report/jmreport/index.vue
+++ b/src/views/report/jmreport/index.vue
@@ -1,14 +1,15 @@
-
+
+
diff --git a/src/views/system/area/index.vue b/src/views/system/area/index.vue
index 0013d7b6..72cbcad2 100644
--- a/src/views/system/area/index.vue
+++ b/src/views/system/area/index.vue
@@ -1,5 +1,6 @@
-
+
+
diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue
index e99d7f8a..5e47846b 100644
--- a/src/views/system/dept/index.vue
+++ b/src/views/system/dept/index.vue
@@ -8,11 +8,12 @@
:inline="true"
label-width="68px"
>
-
+
diff --git a/src/views/system/dict/DictTypeForm.vue b/src/views/system/dict/DictTypeForm.vue
index 5e416d78..b9159b50 100644
--- a/src/views/system/dict/DictTypeForm.vue
+++ b/src/views/system/dict/DictTypeForm.vue
@@ -22,7 +22,7 @@
{{ dict.label }}
diff --git a/src/views/system/dict/data/DictDataForm.vue b/src/views/system/dict/data/DictDataForm.vue
index 2094371d..bab18dbf 100644
--- a/src/views/system/dict/data/DictDataForm.vue
+++ b/src/views/system/dict/data/DictDataForm.vue
@@ -28,7 +28,7 @@
{{ dict.label }}
diff --git a/src/views/system/loginlog/index.vue b/src/views/system/loginlog/index.vue
index 45053592..eea2f198 100644
--- a/src/views/system/loginlog/index.vue
+++ b/src/views/system/loginlog/index.vue
@@ -1,4 +1,5 @@
+
@@ -63,9 +64,9 @@
-
+
-
+
diff --git a/src/views/system/mail/account/account.data.ts b/src/views/system/mail/account/account.data.ts
index 23b1f084..6de394e6 100644
--- a/src/views/system/mail/account/account.data.ts
+++ b/src/views/system/mail/account/account.data.ts
@@ -25,12 +25,26 @@ const crudSchemas = reactive([
{
label: '邮箱',
field: 'mail',
- isSearch: true
+ isSearch: true,
+ search: {
+ componentProps: {
+ style: {
+ width: '240px'
+ }
+ }
+ }
},
{
label: '用户名',
field: 'username',
- isSearch: true
+ isSearch: true,
+ search: {
+ componentProps: {
+ style: {
+ width: '240px'
+ }
+ }
+ }
},
{
label: '密码',
diff --git a/src/views/system/mail/account/index.vue b/src/views/system/mail/account/index.vue
index e02f74fb..8706338e 100644
--- a/src/views/system/mail/account/index.vue
+++ b/src/views/system/mail/account/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/system/mail/log/index.vue b/src/views/system/mail/log/index.vue
index 466bc020..810ee227 100644
--- a/src/views/system/mail/log/index.vue
+++ b/src/views/system/mail/log/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/system/mail/log/log.data.ts b/src/views/system/mail/log/log.data.ts
index 62cbf516..594a5d5f 100644
--- a/src/views/system/mail/log/log.data.ts
+++ b/src/views/system/mail/log/log.data.ts
@@ -21,7 +21,10 @@ const crudSchemas = reactive([
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
- defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
+ defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')],
+ style: {
+ width: '240px'
+ }
}
},
detail: {
@@ -36,7 +39,14 @@ const crudSchemas = reactive([
label: '用户编号',
field: 'userId',
isSearch: true,
- isTable: false
+ isTable: false,
+ search: {
+ componentProps: {
+ style: {
+ width: '240px'
+ }
+ }
+ }
},
{
label: '用户类型',
@@ -44,7 +54,14 @@ const crudSchemas = reactive([
dictType: DICT_TYPE.USER_TYPE,
dictClass: 'number',
isSearch: true,
- isTable: false
+ isTable: false,
+ search: {
+ componentProps: {
+ style: {
+ width: '240px'
+ }
+ }
+ }
},
{
label: '邮件标题',
@@ -65,7 +82,14 @@ const crudSchemas = reactive([
field: 'sendStatus',
dictType: DICT_TYPE.SYSTEM_MAIL_SEND_STATUS,
dictClass: 'string',
- isSearch: true
+ isSearch: true,
+ search: {
+ componentProps: {
+ style: {
+ width: '240px'
+ }
+ }
+ }
},
{
label: '邮箱账号',
@@ -79,6 +103,9 @@ const crudSchemas = reactive([
optionsAlias: {
labelField: 'mail',
valueField: 'id'
+ },
+ style: {
+ width: '240px'
}
}
}
@@ -93,7 +120,14 @@ const crudSchemas = reactive([
{
label: '模板编号',
field: 'templateId',
- isSearch: true
+ isSearch: true,
+ search: {
+ componentProps: {
+ style: {
+ width: '240px'
+ }
+ }
+ }
},
{
label: '模板编码',
diff --git a/src/views/system/mail/template/index.vue b/src/views/system/mail/template/index.vue
index 4d7eae99..0d736207 100644
--- a/src/views/system/mail/template/index.vue
+++ b/src/views/system/mail/template/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/system/mail/template/template.data.ts b/src/views/system/mail/template/template.data.ts
index e68f875a..c11d5fe9 100644
--- a/src/views/system/mail/template/template.data.ts
+++ b/src/views/system/mail/template/template.data.ts
@@ -22,12 +22,26 @@ const crudSchemas = reactive([
{
label: '模板编码',
field: 'code',
- isSearch: true
+ isSearch: true,
+ search: {
+ componentProps: {
+ style: {
+ width: '240px'
+ }
+ }
+ }
},
{
label: '模板名称',
field: 'name',
- isSearch: true
+ isSearch: true,
+ search: {
+ componentProps: {
+ style: {
+ width: '240px'
+ }
+ }
+ }
},
{
label: '模板标题',
@@ -59,6 +73,9 @@ const crudSchemas = reactive([
optionsAlias: {
labelField: 'mail',
valueField: 'id'
+ },
+ style: {
+ width: '240px'
}
}
},
@@ -82,7 +99,14 @@ const crudSchemas = reactive([
field: 'status',
isSearch: true,
dictType: DICT_TYPE.COMMON_STATUS,
- dictClass: 'number'
+ dictClass: 'number',
+ search: {
+ componentProps: {
+ style: {
+ width: '240px'
+ }
+ }
+ }
},
{
label: '备注',
@@ -100,7 +124,10 @@ const crudSchemas = reactive([
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
- defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
+ defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')],
+ style: {
+ width: '240px'
+ }
}
}
},
diff --git a/src/views/system/menu/MenuForm.vue b/src/views/system/menu/MenuForm.vue
index 2b4a90d1..ac37937c 100644
--- a/src/views/system/menu/MenuForm.vue
+++ b/src/views/system/menu/MenuForm.vue
@@ -25,7 +25,7 @@
{{ dict.label }}
@@ -66,7 +66,7 @@
{{ dict.label }}
@@ -77,8 +77,8 @@
- 显示
- 隐藏
+ 显示
+ 隐藏
@@ -89,8 +89,8 @@
/>
- 总是
- 不是
+ 总是
+ 不是
@@ -101,8 +101,8 @@
/>
- 缓存
- 不缓存
+ 缓存
+ 不缓存
diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue
index 217438fc..b2c93bbe 100644
--- a/src/views/system/menu/index.vue
+++ b/src/views/system/menu/index.vue
@@ -1,4 +1,6 @@
+
+
@@ -82,9 +84,17 @@
-
+
-
+ handleStatusChanged(scope.row, val as number)"
+ />
@@ -125,8 +135,10 @@
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { handleTree } from '@/utils/tree'
import * as MenuApi from '@/api/system/menu'
+import { MenuVO } from '@/api/system/menu'
import MenuForm from './MenuForm.vue'
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
+import { CommonStatusEnum } from '@/utils/constants'
defineOptions({ name: 'SystemMenu' })
@@ -206,6 +218,21 @@ const handleDelete = async (id: number) => {
} catch {}
}
+/** 开启/关闭菜单的状态 */
+const menuStatusUpdating = ref({}) // 菜单状态更新中的 menu 映射。key:菜单编号,value:是否更新中
+const handleStatusChanged = async (menu: MenuVO, val: number) => {
+ // 1. 标记 menu.id 更新中
+ menuStatusUpdating.value[menu.id] = true
+ try {
+ // 2. 发起更新状态
+ menu.status = val
+ await MenuApi.updateMenu(menu)
+ } finally {
+ // 3. 标记 menu.id 更新完成
+ menuStatusUpdating.value[menu.id] = false
+ }
+}
+
/** 初始化 **/
onMounted(() => {
getList()
diff --git a/src/views/system/notify/message/index.vue b/src/views/system/notify/message/index.vue
index 5e520be8..94844118 100644
--- a/src/views/system/notify/message/index.vue
+++ b/src/views/system/notify/message/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/system/notify/my/index.vue b/src/views/system/notify/my/index.vue
index 14416358..ae4b9c52 100644
--- a/src/views/system/notify/my/index.vue
+++ b/src/views/system/notify/my/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/system/notify/template/NotifyTemplateForm.vue b/src/views/system/notify/template/NotifyTemplateForm.vue
index a734e2d6..beb28634 100644
--- a/src/views/system/notify/template/NotifyTemplateForm.vue
+++ b/src/views/system/notify/template/NotifyTemplateForm.vue
@@ -34,7 +34,7 @@
{{ dict.label }}
diff --git a/src/views/system/notify/template/NotifyTemplateSendForm.vue b/src/views/system/notify/template/NotifyTemplateSendForm.vue
index 126067c1..4c3e9c45 100644
--- a/src/views/system/notify/template/NotifyTemplateSendForm.vue
+++ b/src/views/system/notify/template/NotifyTemplateSendForm.vue
@@ -20,7 +20,7 @@
{{ dict.label }}
diff --git a/src/views/system/notify/template/index.vue b/src/views/system/notify/template/index.vue
index 9f8a3808..5aef80d2 100644
--- a/src/views/system/notify/template/index.vue
+++ b/src/views/system/notify/template/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/system/oauth2/client/ClientForm.vue b/src/views/system/oauth2/client/ClientForm.vue
index 5d13f71b..563682a0 100644
--- a/src/views/system/oauth2/client/ClientForm.vue
+++ b/src/views/system/oauth2/client/ClientForm.vue
@@ -27,7 +27,7 @@
{{ dict.label }}
diff --git a/src/views/system/oauth2/client/index.vue b/src/views/system/oauth2/client/index.vue
index 0824cdf9..fceee571 100644
--- a/src/views/system/oauth2/client/index.vue
+++ b/src/views/system/oauth2/client/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/system/oauth2/token/index.vue b/src/views/system/oauth2/token/index.vue
index 90a9d894..2a94f8e7 100644
--- a/src/views/system/oauth2/token/index.vue
+++ b/src/views/system/oauth2/token/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/system/operatelog/index.vue b/src/views/system/operatelog/index.vue
index 5b3892b0..3f221b7e 100644
--- a/src/views/system/operatelog/index.vue
+++ b/src/views/system/operatelog/index.vue
@@ -1,4 +1,5 @@
+
@@ -12,7 +13,8 @@
@@ -33,10 +35,10 @@
class="!w-240px"
/>
-
+
@@ -103,7 +105,7 @@
:formatter="dateFormatter"
/>
-
+
@@ -21,11 +22,12 @@
v-model="queryParams.code"
placeholder="请输入岗位编码"
clearable
+ class="!w-240px"
@keyup.enter="handleQuery"
/>
-
+
{{ formData.code }}
-
+
全选/全不选:
{
}
}
-
diff --git a/src/views/system/role/RoleDataPermissionForm.vue b/src/views/system/role/RoleDataPermissionForm.vue
index 476a623c..758d47ad 100644
--- a/src/views/system/role/RoleDataPermissionForm.vue
+++ b/src/views/system/role/RoleDataPermissionForm.vue
@@ -1,5 +1,5 @@
-
+
{{ formData.name }}
@@ -21,9 +21,9 @@
-
+
全选/全不选:
+
+
diff --git a/src/views/system/sms/channel/SmsChannelForm.vue b/src/views/system/sms/channel/SmsChannelForm.vue
index 049868a3..926c28f4 100644
--- a/src/views/system/sms/channel/SmsChannelForm.vue
+++ b/src/views/system/sms/channel/SmsChannelForm.vue
@@ -25,7 +25,7 @@
{{ dict.label }}
diff --git a/src/views/system/sms/channel/index.vue b/src/views/system/sms/channel/index.vue
index c39510cc..f681b409 100644
--- a/src/views/system/sms/channel/index.vue
+++ b/src/views/system/sms/channel/index.vue
@@ -1,4 +1,5 @@
+
-
+
diff --git a/src/views/system/sms/log/index.vue b/src/views/system/sms/log/index.vue
index 894e9279..e1a5a233 100644
--- a/src/views/system/sms/log/index.vue
+++ b/src/views/system/sms/log/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/system/sms/template/SmsTemplateForm.vue b/src/views/system/sms/template/SmsTemplateForm.vue
index 9750e8a7..f339136a 100644
--- a/src/views/system/sms/template/SmsTemplateForm.vue
+++ b/src/views/system/sms/template/SmsTemplateForm.vue
@@ -44,7 +44,7 @@
{{ dict.label }}
diff --git a/src/views/system/sms/template/index.vue b/src/views/system/sms/template/index.vue
index 5176de3e..a59c48dd 100644
--- a/src/views/system/sms/template/index.vue
+++ b/src/views/system/sms/template/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/system/social/client/SocialClientForm.vue b/src/views/system/social/client/SocialClientForm.vue
index e6f92bd6..cbfe195b 100644
--- a/src/views/system/social/client/SocialClientForm.vue
+++ b/src/views/system/social/client/SocialClientForm.vue
@@ -15,7 +15,7 @@
{{ dict.label }}
@@ -26,7 +26,7 @@
{{ dict.label }}
@@ -49,7 +49,7 @@
{{ dict.label }}
diff --git a/src/views/system/social/client/index.vue b/src/views/system/social/client/index.vue
index fc08ebd8..fa49018c 100644
--- a/src/views/system/social/client/index.vue
+++ b/src/views/system/social/client/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/system/social/user/index.vue b/src/views/system/social/user/index.vue
index 1c62d9eb..dda9eb82 100644
--- a/src/views/system/social/user/index.vue
+++ b/src/views/system/social/user/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/system/tenant/TenantForm.vue b/src/views/system/tenant/TenantForm.vue
index 4d5fde5a..205a2cf0 100644
--- a/src/views/system/tenant/TenantForm.vue
+++ b/src/views/system/tenant/TenantForm.vue
@@ -62,7 +62,7 @@
{{ dict.label }}
diff --git a/src/views/system/tenant/index.vue b/src/views/system/tenant/index.vue
index a2701634..ae9a2b79 100644
--- a/src/views/system/tenant/index.vue
+++ b/src/views/system/tenant/index.vue
@@ -1,5 +1,5 @@
-
+
diff --git a/src/views/system/tenantPackage/TenantPackageForm.vue b/src/views/system/tenantPackage/TenantPackageForm.vue
index 74928892..2003c9c5 100644
--- a/src/views/system/tenantPackage/TenantPackageForm.vue
+++ b/src/views/system/tenantPackage/TenantPackageForm.vue
@@ -11,7 +11,7 @@
-
+
全选/全不选:
{{ dict.label }}
@@ -185,10 +185,3 @@ const handleCheckedTreeExpand = () => {
}
}
-
diff --git a/src/views/system/tenantPackage/index.vue b/src/views/system/tenantPackage/index.vue
index cebd1a9b..7ee111cc 100644
--- a/src/views/system/tenantPackage/index.vue
+++ b/src/views/system/tenantPackage/index.vue
@@ -1,4 +1,5 @@
+
diff --git a/src/views/system/user/UserForm.vue b/src/views/system/user/UserForm.vue
index f359c0e9..630688a3 100644
--- a/src/views/system/user/UserForm.vue
+++ b/src/views/system/user/UserForm.vue
@@ -140,7 +140,6 @@ const formRules = reactive({
],
mobile: [
{
- required: true,
pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/,
message: '请输入正确的手机号码',
trigger: 'blur'
diff --git a/src/views/system/user/UserImportForm.vue b/src/views/system/user/UserImportForm.vue
index edff90e9..8447b286 100644
--- a/src/views/system/user/UserImportForm.vue
+++ b/src/views/system/user/UserImportForm.vue
@@ -76,7 +76,7 @@ const submitForm = async () => {
// 提交请求
uploadHeaders.value = {
Authorization: 'Bearer ' + getAccessToken(),
- 'tenantId': getTenantId()
+ 'tenant-id': getTenantId()
}
formLoading.value = true
uploadRef.value!.submit()
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index 3e1dd289..4f04dff5 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -1,5 +1,7 @@
-
+
+
+