Jelajahi Sumber

Merge remote-tracking branch 'yudao/dev' into dev-crm

puhui999 1 tahun lalu
induk
melakukan
a31c995508
92 mengubah file dengan 228 tambahan dan 29 penghapusan
  1. TEMPAT SAMPAH
      .image/common/crm-feature.png
  2. 6 0
      README.md
  3. 12 22
      src/utils/formatTime.ts
  4. 2 0
      src/views/bpm/definition/index.vue
  5. 2 0
      src/views/bpm/form/index.vue
  6. 2 0
      src/views/bpm/group/index.vue
  7. 2 0
      src/views/bpm/model/index.vue
  8. 2 0
      src/views/bpm/oa/leave/index.vue
  9. 2 0
      src/views/bpm/processInstance/index.vue
  10. 2 0
      src/views/bpm/task/done/index.vue
  11. 3 1
      src/views/bpm/task/todo/index.vue
  12. 2 0
      src/views/crm/backlog/index.vue
  13. 3 0
      src/views/crm/business/index.vue
  14. 3 0
      src/views/crm/business/status/index.vue
  15. 3 0
      src/views/crm/clue/index.vue
  16. 3 0
      src/views/crm/contact/index.vue
  17. 3 0
      src/views/crm/contract/config/index.vue
  18. 3 0
      src/views/crm/contract/index.vue
  19. 3 0
      src/views/crm/customer/index.vue
  20. 3 0
      src/views/crm/customer/limitConfig/index.vue
  21. 3 0
      src/views/crm/customer/pool/index.vue
  22. 3 0
      src/views/crm/customer/poolConfig/index.vue
  23. 2 0
      src/views/crm/product/category/index.vue
  24. 2 0
      src/views/crm/product/index.vue
  25. 2 0
      src/views/crm/receivable/ReceivableForm.vue
  26. 3 0
      src/views/crm/receivable/index.vue
  27. 3 0
      src/views/crm/receivable/plan/index.vue
  28. 5 0
      src/views/erp/finance/account/index.vue
  29. 5 0
      src/views/erp/finance/payment/index.vue
  30. 5 0
      src/views/erp/finance/receipt/index.vue
  31. 2 0
      src/views/erp/home/index.vue
  32. 2 0
      src/views/erp/product/category/index.vue
  33. 2 0
      src/views/erp/product/product/index.vue
  34. 2 0
      src/views/erp/product/unit/index.vue
  35. 2 0
      src/views/erp/purchase/in/index.vue
  36. 2 0
      src/views/erp/purchase/order/index.vue
  37. 2 0
      src/views/erp/purchase/return/index.vue
  38. 2 0
      src/views/erp/purchase/supplier/index.vue
  39. 2 0
      src/views/erp/sale/customer/index.vue
  40. 2 0
      src/views/erp/sale/order/index.vue
  41. 2 0
      src/views/erp/sale/out/index.vue
  42. 2 0
      src/views/erp/sale/return/index.vue
  43. 5 0
      src/views/erp/stock/check/index.vue
  44. 2 0
      src/views/erp/stock/in/index.vue
  45. 5 0
      src/views/erp/stock/move/index.vue
  46. 2 0
      src/views/erp/stock/out/index.vue
  47. 2 0
      src/views/erp/stock/record/index.vue
  48. 2 0
      src/views/erp/stock/stock/index.vue
  49. 2 0
      src/views/erp/stock/warehouse/index.vue
  50. 2 0
      src/views/infra/webSocket/index.vue
  51. 2 0
      src/views/mall/home/index.vue
  52. 2 0
      src/views/mall/product/brand/index.vue
  53. 2 0
      src/views/mall/product/category/index.vue
  54. 2 0
      src/views/mall/product/comment/index.vue
  55. 2 0
      src/views/mall/product/property/index.vue
  56. 2 0
      src/views/mall/product/spu/index.vue
  57. 2 0
      src/views/mall/promotion/article/category/ArticleCategoryForm.vue
  58. 2 0
      src/views/mall/promotion/article/index.vue
  59. 2 0
      src/views/mall/promotion/banner/index.vue
  60. 2 0
      src/views/mall/promotion/bargain/activity/index.vue
  61. 2 0
      src/views/mall/promotion/bargain/record/index.vue
  62. 2 0
      src/views/mall/promotion/combination/activity/index.vue
  63. 2 0
      src/views/mall/promotion/combination/record/index.vue
  64. 1 1
      src/views/mall/promotion/coupon/index.vue
  65. 1 1
      src/views/mall/promotion/coupon/template/index.vue
  66. 2 0
      src/views/mall/promotion/discountActivity/index.vue
  67. 2 0
      src/views/mall/promotion/diy/page/index.vue
  68. 2 0
      src/views/mall/promotion/diy/template/index.vue
  69. 2 0
      src/views/mall/promotion/rewardActivity/index.vue
  70. 2 0
      src/views/mall/promotion/seckill/activity/index.vue
  71. 1 1
      src/views/mall/promotion/seckill/config/index.vue
  72. 5 2
      src/views/mall/statistics/member/index.vue
  73. 2 0
      src/views/mall/statistics/product/index.vue
  74. 2 0
      src/views/mall/statistics/trade/index.vue
  75. 2 0
      src/views/mall/trade/afterSale/index.vue
  76. 2 0
      src/views/mall/trade/brokerage/record/index.vue
  77. 2 0
      src/views/mall/trade/brokerage/user/index.vue
  78. 2 0
      src/views/mall/trade/brokerage/withdraw/index.vue
  79. 3 0
      src/views/mall/trade/config/index.vue
  80. 2 0
      src/views/mall/trade/delivery/express/index.vue
  81. 2 0
      src/views/mall/trade/delivery/expressTemplate/index.vue
  82. 3 0
      src/views/mall/trade/delivery/pickUpOrder/index.vue
  83. 2 0
      src/views/mall/trade/delivery/pickUpStore/index.vue
  84. 3 0
      src/views/mall/trade/order/index.vue
  85. 2 0
      src/views/member/config/index.vue
  86. 2 0
      src/views/member/group/index.vue
  87. 2 0
      src/views/member/level/index.vue
  88. 2 0
      src/views/member/point/record/index.vue
  89. 3 1
      src/views/member/signin/config/index.vue
  90. 2 0
      src/views/member/signin/record/index.vue
  91. 2 0
      src/views/member/tag/index.vue
  92. 2 0
      src/views/member/user/index.vue

TEMPAT SAMPAH
.image/common/crm-feature.png


+ 6 - 0
README.md

@@ -202,6 +202,12 @@ _前端基于 crmeb uniapp 经过授权重构,优化代码实现,接入芋
 
 演示地址:<https://doc.iocoder.cn/erp-preview/>
 
+### CRM 系统
+
+![功能图](/.image/common/crm-feature.png)
+
+演示地址:<https://doc.iocoder.cn/crm-preview/>
+
 ## 🐷 演示图
 
 ### 系统功能

+ 12 - 22
src/utils/formatTime.ts

@@ -1,4 +1,5 @@
 import dayjs from 'dayjs'
+import type { TableColumnCtx } from 'element-plus'
 
 /**
  * 日期快捷选项适用于 el-date-picker
@@ -68,10 +69,7 @@ export function formatDate(date: Date, format?: string): string {
     return ''
   }
   // 日期存在,则进行格式化
-  if (format === undefined) {
-    format = 'YYYY-MM-DD HH:mm:ss'
-  }
-  return dayjs(date).format(format)
+  return date ? dayjs(date).format(format ?? 'YYYY-MM-DD HH:mm:ss') : ''
 }
 
 /**
@@ -171,7 +169,7 @@ export function formatAxis(param: Date): string {
  * @param ms 毫秒
  * @returns {string} 字符串
  */
-export function formatPast2(ms) {
+export function formatPast2(ms: number): string {
   const day = Math.floor(ms / (24 * 60 * 60 * 1000))
   const hour = Math.floor(ms / (60 * 60 * 1000) - day * 24)
   const minute = Math.floor(ms / (60 * 1000) - day * 24 * 60 - hour * 60)
@@ -199,12 +197,8 @@ export function formatPast2(ms) {
  * @param column 字段
  * @param cellValue 字段值
  */
-// @ts-ignore
-export const dateFormatter = (row, column, cellValue): string => {
-  if (!cellValue) {
-    return ''
-  }
-  return formatDate(cellValue)
+export function dateFormatter(_row: any, _column: TableColumnCtx<any>, cellValue: any): string {
+  return cellValue ? formatDate(cellValue) : ''
 }
 
 /**
@@ -214,12 +208,8 @@ export const dateFormatter = (row, column, cellValue): string => {
  * @param column 字段
  * @param cellValue 字段值
  */
-// @ts-ignore
-export const dateFormatter2 = (row, column, cellValue) => {
-  if (!cellValue) {
-    return
-  }
-  return formatDate(cellValue, 'YYYY-MM-DD')
+export function dateFormatter2(_row: any, _column: TableColumnCtx<any>, cellValue: any): string {
+  return cellValue ? formatDate(cellValue, 'YYYY-MM-DD') : ''
 }
 
 /**
@@ -227,7 +217,7 @@ export const dateFormatter2 = (row, column, cellValue) => {
  * @param param 传入日期
  * @returns 带时间00:00:00的日期
  */
-export function beginOfDay(param: Date) {
+export function beginOfDay(param: Date): Date {
   return new Date(param.getFullYear(), param.getMonth(), param.getDate(), 0, 0, 0)
 }
 
@@ -236,7 +226,7 @@ export function beginOfDay(param: Date) {
  * @param param 传入日期
  * @returns 带时间23:59:59的日期
  */
-export function endOfDay(param: Date) {
+export function endOfDay(param: Date): Date {
   return new Date(param.getFullYear(), param.getMonth(), param.getDate(), 23, 59, 59)
 }
 
@@ -245,7 +235,7 @@ export function endOfDay(param: Date) {
  * @param param1 日期1
  * @param param2 日期2
  */
-export function betweenDay(param1: Date, param2: Date) {
+export function betweenDay(param1: Date, param2: Date): number {
   param1 = convertDate(param1)
   param2 = convertDate(param2)
   // 计算差值
@@ -257,7 +247,7 @@ export function betweenDay(param1: Date, param2: Date) {
  * @param param1 日期
  * @param param2 添加的时间
  */
-export function addTime(param1: Date, param2: number) {
+export function addTime(param1: Date, param2: number): Date {
   param1 = convertDate(param1)
   return new Date(param1.getTime() + param2)
 }
@@ -266,7 +256,7 @@ export function addTime(param1: Date, param2: number) {
  * 日期转换
  * @param param 日期
  */
-export function convertDate(param: Date | string) {
+export function convertDate(param: Date | string): Date {
   if (typeof param === 'string') {
     return new Date(param)
   }

+ 2 - 0
src/views/bpm/definition/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
+
   <ContentWrap>
     <el-table v-loading="loading" :data="list">
       <el-table-column label="定义编号" align="center" prop="id" width="400" />

+ 2 - 0
src/views/bpm/form/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/bpm/group/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/bpm/model/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/bpm/oa/leave/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/bpm/processInstance/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/bpm/task/done/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 3 - 1
src/views/bpm/task/todo/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form
@@ -75,7 +77,7 @@
       :total="total"
       @pagination="getList"
     />
-    <TaskCCDialogForm  ref="taskCCDialogForm"/>
+    <TaskCCDialogForm ref="taskCCDialogForm" />
   </ContentWrap>
 </template>
 

+ 2 - 0
src/views/crm/backlog/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【通用】跟进记录、待办事项" url="https://doc.iocoder.cn/crm/follow-up/" />
+
   <el-row :gutter="20">
     <el-col :span="4" class="min-w-[200px]">
       <div class="side-item-list">

+ 3 - 0
src/views/crm/business/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【商机】商机管理、商机状态" url="https://doc.iocoder.cn/crm/business/" />
+  <doc-alert title="【通用】数据权限" url="https://doc.iocoder.cn/crm/permission/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 3 - 0
src/views/crm/business/status/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【商机】商机管理、商机状态" url="https://doc.iocoder.cn/crm/business/" />
+  <doc-alert title="【通用】数据权限" url="https://doc.iocoder.cn/crm/permission/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 3 - 0
src/views/crm/clue/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【线索】线索管理" url="https://doc.iocoder.cn/crm/clue/" />
+  <doc-alert title="【通用】数据权限" url="https://doc.iocoder.cn/crm/permission/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 3 - 0
src/views/crm/contact/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【客户】客户管理、公海客户" url="https://doc.iocoder.cn/crm/customer/" />
+  <doc-alert title="【通用】数据权限" url="https://doc.iocoder.cn/crm/permission/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 3 - 0
src/views/crm/contract/config/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【合同】合同管理、合同提醒" url="https://doc.iocoder.cn/crm/contract/" />
+  <doc-alert title="【通用】数据权限" url="https://doc.iocoder.cn/crm/permission/" />
+
   <ContentWrap>
     <el-form
       ref="formRef"

+ 3 - 0
src/views/crm/contract/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【合同】合同管理、合同提醒" url="https://doc.iocoder.cn/crm/contract/" />
+  <doc-alert title="【通用】数据权限" url="https://doc.iocoder.cn/crm/permission/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 3 - 0
src/views/crm/customer/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【客户】客户管理、公海客户" url="https://doc.iocoder.cn/crm/customer/" />
+  <doc-alert title="【通用】数据权限" url="https://doc.iocoder.cn/crm/permission/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 3 - 0
src/views/crm/customer/limitConfig/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【客户】客户管理、公海客户" url="https://doc.iocoder.cn/crm/customer/" />
+  <doc-alert title="【通用】数据权限" url="https://doc.iocoder.cn/crm/permission/" />
+
   <!-- 列表 -->
   <ContentWrap>
     <el-tabs>

+ 3 - 0
src/views/crm/customer/pool/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【客户】客户管理、公海客户" url="https://doc.iocoder.cn/crm/customer/" />
+  <doc-alert title="【通用】数据权限" url="https://doc.iocoder.cn/crm/permission/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 3 - 0
src/views/crm/customer/poolConfig/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【客户】客户管理、公海客户" url="https://doc.iocoder.cn/crm/customer/" />
+  <doc-alert title="【通用】数据权限" url="https://doc.iocoder.cn/crm/permission/" />
+
   <ContentWrap>
     <el-form
       ref="formRef"

+ 2 - 0
src/views/crm/product/category/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【产品】产品管理、产品分类" url="https://doc.iocoder.cn/crm/product/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/crm/product/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【产品】产品管理、产品分类" url="https://doc.iocoder.cn/crm/product/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/crm/receivable/ReceivableForm.vue

@@ -186,6 +186,8 @@ const open = async (
     formLoading.value = true
     try {
       formData.value = await ReceivableApi.getReceivable(id)
+      await handleCustomerChange(formData.value.customerId)
+      formData.value.contractId = formData.value.contract.id
     } finally {
       formLoading.value = false
     }

+ 3 - 0
src/views/crm/receivable/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【回款】回款管理、回款计划" url="https://doc.iocoder.cn/crm/receivable/" />
+  <doc-alert title="【通用】数据权限" url="https://doc.iocoder.cn/crm/permission/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 3 - 0
src/views/crm/receivable/plan/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【回款】回款管理、回款计划" url="https://doc.iocoder.cn/crm/receivable/" />
+  <doc-alert title="【通用】数据权限" url="https://doc.iocoder.cn/crm/permission/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 5 - 0
src/views/erp/finance/account/index.vue

@@ -1,4 +1,9 @@
 <template>
+  <doc-alert
+    title="【财务】采购付款、销售收款"
+    url="https://doc.iocoder.cn/sale/finance-payment-receipt/"
+  />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 5 - 0
src/views/erp/finance/payment/index.vue

@@ -1,4 +1,9 @@
 <template>
+  <doc-alert
+    title="【财务】采购付款、销售收款"
+    url="https://doc.iocoder.cn/sale/finance-payment-receipt/"
+  />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 5 - 0
src/views/erp/finance/receipt/index.vue

@@ -1,4 +1,9 @@
 <template>
+  <doc-alert
+    title="【财务】采购付款、销售收款"
+    url="https://doc.iocoder.cn/sale/finance-payment-receipt/"
+  />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/home/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="ERP 手册(功能开启)" url="https://doc.iocoder.cn/erp/build/" />
+
   <div class="flex flex-col">
     <!-- 销售/采购的全局统计 -->
     <el-row :gutter="16" class="row">

+ 2 - 0
src/views/erp/product/category/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【产品】产品信息、分类、单位" url="https://doc.iocoder.cn/erp/product/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/product/product/index.vue

@@ -1,5 +1,7 @@
 <!-- ERP 产品列表 -->
 <template>
+  <doc-alert title="【产品】产品信息、分类、单位" url="https://doc.iocoder.cn/erp/product/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/product/unit/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【产品】产品信息、分类、单位" url="https://doc.iocoder.cn/erp/product/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/purchase/in/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【采购】采购订单、入库、退货" url="https://doc.iocoder.cn/erp/purchase/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/purchase/order/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【采购】采购订单、入库、退货" url="https://doc.iocoder.cn/erp/purchase/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/purchase/return/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【采购】采购订单、入库、退货" url="https://doc.iocoder.cn/erp/purchase/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/purchase/supplier/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【采购】采购订单、入库、退货" url="https://doc.iocoder.cn/erp/purchase/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/sale/customer/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【销售】销售订单、出库、退货" url="https://doc.iocoder.cn/erp/sale/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/sale/order/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【销售】销售订单、出库、退货" url="https://doc.iocoder.cn/erp/sale/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/sale/out/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【销售】销售订单、出库、退货" url="https://doc.iocoder.cn/erp/sale/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/sale/return/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【销售】销售订单、出库、退货" url="https://doc.iocoder.cn/erp/sale/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 5 - 0
src/views/erp/stock/check/index.vue

@@ -1,4 +1,9 @@
 <template>
+  <doc-alert
+    title="【库存】库存调拨、库存盘点"
+    url="https://doc.iocoder.cn/erp/stock-move-check/"
+  />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/stock/in/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【库存】其它入库、其它出库" url="https://doc.iocoder.cn/erp/stock-in-out/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 5 - 0
src/views/erp/stock/move/index.vue

@@ -1,4 +1,9 @@
 <template>
+  <doc-alert
+    title="【库存】库存调拨、库存盘点"
+    url="https://doc.iocoder.cn/erp/stock-move-check/"
+  />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/stock/out/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【库存】其它入库、其它出库" url="https://doc.iocoder.cn/erp/stock-in-out/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/stock/record/index.vue

@@ -1,5 +1,7 @@
 <!-- ERP 产品库存明细列表 -->
 <template>
+  <doc-alert title="【库存】产品库存、库存明细" url="https://doc.iocoder.cn/erp/stock/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/stock/stock/index.vue

@@ -1,5 +1,7 @@
 <!-- ERP 产品库存列表 -->
 <template>
+  <doc-alert title="【库存】产品库存、库存明细" url="https://doc.iocoder.cn/erp/stock/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/erp/stock/warehouse/index.vue

@@ -1,5 +1,7 @@
 <!-- ERP 仓库列表 -->
 <template>
+  <doc-alert title="【库存】产品库存、库存明细" url="https://doc.iocoder.cn/erp/stock/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/infra/webSocket/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="WebSocket 实时通信" url="https://doc.iocoder.cn/websocket/" />
+
   <div class="flex">
     <!-- 左侧:建立连接、发送消息 -->
     <el-card :gutter="12" class="w-1/2" shadow="always">

+ 2 - 0
src/views/mall/home/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="商城手册(功能开启)" url="https://doc.iocoder.cn/mall/build/" />
+
   <div class="flex flex-col">
     <!-- 数据对照 -->
     <el-row :gutter="16" class="row">

+ 2 - 0
src/views/mall/product/brand/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="商城手册(功能开启)" url="https://doc.iocoder.cn/mall/build/" />
+
   <!-- 搜索工作栏 -->
   <ContentWrap>
     <el-form

+ 2 - 0
src/views/mall/product/category/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【商品】商品分类" url="https://doc.iocoder.cn/mall/product-category/" />
+
   <!-- 搜索工作栏 -->
   <ContentWrap>
     <el-form

+ 2 - 0
src/views/mall/product/comment/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【商品】商品评价" url="https://doc.iocoder.cn/mall/product-comment/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/mall/product/property/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【商品】商品属性" url="https://doc.iocoder.cn/mall/product-property/" />
+
   <!-- 搜索工作栏 -->
   <ContentWrap>
     <el-form

+ 2 - 0
src/views/mall/product/spu/index.vue

@@ -1,5 +1,7 @@
 <!-- 商品中心 - 商品列表  -->
 <template>
+  <doc-alert title="【商品】商品 SPU 与 SKU" url="https://doc.iocoder.cn/mall/product-spu-sku/" />
+
   <!-- 搜索工作栏 -->
   <ContentWrap>
     <el-form

+ 2 - 0
src/views/mall/promotion/article/category/ArticleCategoryForm.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【营销】内容管理" url="https://doc.iocoder.cn/mall/promotion-content/" />
+
   <Dialog v-model="dialogVisible" :title="dialogTitle">
     <el-form
       ref="formRef"

+ 2 - 0
src/views/mall/promotion/article/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【营销】内容管理" url="https://doc.iocoder.cn/mall/promotion-content/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/mall/promotion/banner/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【营销】内容管理" url="https://doc.iocoder.cn/mall/promotion-content/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/mall/promotion/bargain/activity/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【营销】砍价活动" url="https://doc.iocoder.cn/mall/promotion-bargain/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/mall/promotion/bargain/record/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【营销】砍价活动" url="https://doc.iocoder.cn/mall/promotion-bargain/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/mall/promotion/combination/activity/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【营销】拼团活动" url="https://doc.iocoder.cn/mall/promotion-combination/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/mall/promotion/combination/record/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【营销】拼团活动" url="https://doc.iocoder.cn/mall/promotion-combination/" />
+
   <!-- 统计信息展示 -->
   <el-row :gutter="12">
     <el-col :span="6">

+ 1 - 1
src/views/mall/promotion/coupon/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <doc-alert title="功能开启" url="https://doc.iocoder.cn/mall/build/" />
+  <doc-alert title="【营销】优惠劵" url="https://doc.iocoder.cn/mall/promotion-coupon/" />
 
   <!-- 搜索工作栏 -->
   <ContentWrap>

+ 1 - 1
src/views/mall/promotion/coupon/template/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <doc-alert title="功能开启" url="https://doc.iocoder.cn/mall/build/" />
+  <doc-alert title="【营销】优惠劵" url="https://doc.iocoder.cn/mall/promotion-coupon/" />
 
   <!-- 搜索工作栏 -->
   <ContentWrap>

+ 2 - 0
src/views/mall/promotion/discountActivity/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【营销】限时折扣" url="https://doc.iocoder.cn/mall/promotion-discount/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/mall/promotion/diy/page/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【营销】商城装修" url="https://doc.iocoder.cn/mall/diy/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/mall/promotion/diy/template/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【营销】商城装修" url="https://doc.iocoder.cn/mall/diy/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/mall/promotion/rewardActivity/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【营销】满减送" url="https://doc.iocoder.cn/mall/promotion-record/" />
+
   <!-- 搜索工作栏 -->
   <ContentWrap>
     <el-form

+ 2 - 0
src/views/mall/promotion/seckill/activity/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【营销】秒杀活动" url="https://doc.iocoder.cn/mall/promotion-seckill/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 1 - 1
src/views/mall/promotion/seckill/config/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <doc-alert title="功能开启" url="https://doc.iocoder.cn/mall/build/" />
+  <doc-alert title="【营销】秒杀活动" url="https://doc.iocoder.cn/mall/promotion-seckill/" />
 
   <!-- 搜索工作栏 -->
   <ContentWrap>

+ 5 - 2
src/views/mall/statistics/member/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【统计】会员、商品、交易统计" url="https://doc.iocoder.cn/mall/statistics/" />
+
   <div class="flex flex-col">
     <el-row :gutter="16" class="summary">
       <el-col :sm="6" :xs="12" v-loading="loading">
@@ -269,8 +271,9 @@ const getMemberSexStatisticsList = async () => {
   const dictDataList = getIntDictOptions(DICT_TYPE.SYSTEM_USER_SEX)
   dictDataList.push({ label: '未知', value: null } as any)
   sexChartOptions.series![0].data = dictDataList.map((dictData: DictDataType) => {
-    const userCount = list.find((item: MemberSexStatisticsRespVO) => item.sex === dictData.value)
-      ?.userCount
+    const userCount = list.find(
+      (item: MemberSexStatisticsRespVO) => item.sex === dictData.value
+    )?.userCount
     return {
       name: dictData.label,
       value: userCount || 0

+ 2 - 0
src/views/mall/statistics/product/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【统计】会员、商品、交易统计" url="https://doc.iocoder.cn/mall/statistics/" />
+
   <!-- 商品概览 -->
   <ProductSummary />
   <!-- 商品排行 -->

+ 2 - 0
src/views/mall/statistics/trade/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【统计】会员、商品、交易统计" url="https://doc.iocoder.cn/mall/statistics/" />
+
   <div class="flex flex-col">
     <el-row :gutter="16" class="summary">
       <el-col :sm="6" :xs="12">

+ 2 - 0
src/views/mall/trade/afterSale/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【交易】售后退款" url="https://doc.iocoder.cn/mall/trade-aftersale/" />
+
   <!-- 搜索 -->
   <ContentWrap>
     <el-form ref="queryFormRef" :inline="true" :model="queryParams" label-width="68px">

+ 2 - 0
src/views/mall/trade/brokerage/record/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【交易】分销返佣" url="https://doc.iocoder.cn/mall/trade-brokerage/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/mall/trade/brokerage/user/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【交易】分销返佣" url="https://doc.iocoder.cn/mall/trade-brokerage/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/mall/trade/brokerage/withdraw/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【交易】分销返佣" url="https://doc.iocoder.cn/mall/trade-brokerage/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 3 - 0
src/views/mall/trade/config/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【交易】交易订单" url="https://doc.iocoder.cn/mall/trade-order/" />
+  <doc-alert title="【交易】购物车" url="https://doc.iocoder.cn/mall/trade-cart/" />
+
   <ContentWrap>
     <el-form
       ref="formRef"

+ 2 - 0
src/views/mall/trade/delivery/express/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【交易】快递发货" url="https://doc.iocoder.cn/mall/trade-delivery-express/" />
+
   <!-- 搜索工作栏 -->
   <ContentWrap>
     <el-form

+ 2 - 0
src/views/mall/trade/delivery/expressTemplate/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【交易】快递发货" url="https://doc.iocoder.cn/mall/trade-delivery-express/" />
+
   <!-- 搜索工作栏 -->
   <ContentWrap>
     <el-form

+ 3 - 0
src/views/mall/trade/delivery/pickUpOrder/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【交易】交易订单" url="https://doc.iocoder.cn/mall/trade-order/" />
+  <doc-alert title="【交易】购物车" url="https://doc.iocoder.cn/mall/trade-cart/" />
+
   <!-- 搜索 -->
   <ContentWrap>
     <el-form

+ 2 - 0
src/views/mall/trade/delivery/pickUpStore/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="【交易】快递发货" url="https://doc.iocoder.cn/mall/trade-delivery-express/" />
+
   <!-- 搜索工作栏 -->
   <ContentWrap>
     <el-form ref="queryFormRef" :inline="true" :model="queryParams" class="-mb-15px">

+ 3 - 0
src/views/mall/trade/order/index.vue

@@ -1,4 +1,7 @@
 <template>
+  <doc-alert title="【交易】交易订单" url="https://doc.iocoder.cn/mall/trade-order/" />
+  <doc-alert title="【交易】购物车" url="https://doc.iocoder.cn/mall/trade-cart/" />
+
   <!-- 搜索 -->
   <ContentWrap>
     <el-form

+ 2 - 0
src/views/member/config/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="会员手册(功能开启)" url="https://doc.iocoder.cn/member/build/" />
+
   <ContentWrap>
     <el-form
       ref="formRef"

+ 2 - 0
src/views/member/group/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="会员用户、标签、分组" url="https://doc.iocoder.cn/member/user/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/member/level/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="会员等级、积分、签到" url="https://doc.iocoder.cn/member/level/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/member/point/record/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="会员等级、积分、签到" url="https://doc.iocoder.cn/member/level/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 3 - 1
src/views/member/signin/config/index.vue

@@ -1,6 +1,8 @@
 <template>
+  <doc-alert title="会员等级、积分、签到" url="https://doc.iocoder.cn/member/level/" />
+
+  <!-- 搜索工作栏 -->
   <ContentWrap>
-    <!-- 搜索工作栏 -->
     <el-button
       type="primary"
       plain

+ 2 - 0
src/views/member/signin/record/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="会员等级、积分、签到" url="https://doc.iocoder.cn/member/level/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/member/tag/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="会员用户、标签、分组" url="https://doc.iocoder.cn/member/user/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form

+ 2 - 0
src/views/member/user/index.vue

@@ -1,4 +1,6 @@
 <template>
+  <doc-alert title="会员用户、标签、分组" url="https://doc.iocoder.cn/member/user/" />
+
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form