Quellcode durchsuchen

CRM:合同的 code review

YunaiV vor 1 Jahr
Ursprung
Commit
956f19d9d0

+ 2 - 0
src/api/bpm/model/index.ts

@@ -32,9 +32,11 @@ export const getModelPage = async (params) => {
 export const getModel = async (id: number) => {
   return await request.get({ url: '/bpm/model/get?id=' + id })
 }
+
 export const getModelByKey = async (key: string) => {
   return await request.get({ url: '/bpm/model/get-by-key?key=' + key })
 }
+
 export const updateModel = async (data: ModelVO) => {
   return await request.put({ url: '/bpm/model/update', data: data })
 }

+ 2 - 0
src/api/crm/bi/ranking.ts

@@ -5,11 +5,13 @@ export interface BiContractRanKingRespVO {
   nickname: string
   deptName: string
 }
+
 export interface BiReceivablesRanKingRespVO {
   price: number
   nickname: string
   deptName: string
 }
+
 export interface BiRankReqVO {
   deptId: number
   type: string

+ 1 - 0
src/api/crm/business/index.ts

@@ -73,6 +73,7 @@ export const getBusinessListByIds = async (val: number[]) => {
 }
 
 // 商机转移
+// TODO @puhui999:transferBusiness
 export const transfer = async (data: TransferReqVO) => {
   return await request.put({ url: '/crm/business/transfer', data })
 }

+ 1 - 0
src/api/crm/contract/index.ts

@@ -71,6 +71,7 @@ export const handleApprove = async (id: number) => {
 }
 
 // 合同转移
+// TODO @puhui999:transfer 相关方法,这块要补充下;
 export const transfer = async (data: TransferReqVO) => {
   return await request.put({ url: '/crm/contract/transfer', data })
 }

+ 1 - 0
src/components/Table/src/TableSelectForm.vue

@@ -1,3 +1,4 @@
+<!-- TODO @puhui999:这个最好加个注释哈 -->
 <template>
   <Dialog v-model="dialogVisible" :appendToBody="true" :scroll="true" :title="title" width="60%">
     <el-table

+ 1 - 1
src/views/crm/backlog/index.vue

@@ -96,8 +96,8 @@ const leftSides = ref([
 const sideClick = (item) => {
   leftType.value = item.infoType
 }
+// TODO @dhb52: 侧边栏样式,在黑暗模式下,颜色会不对。是不是可以读取主题色哈;
 </script>
-
 <style lang="scss" scoped>
 .side-item-list {
   top: 0;

+ 3 - 2
src/views/crm/bi/ranking/index.vue

@@ -36,12 +36,12 @@
   </ContentWrap>
   <el-col>
     <el-tabs v-model="activeTab">
+      <!-- 合同金额排行 -->
       <el-tab-pane label="合同金额排行" name="contractAmountRanking">
-        <!-- 合同金额排行 -->
         <RankingContractStatistics :queryParams="queryParams" ref="rankingContractStatisticsRef" />
       </el-tab-pane>
+      <!-- 回款金额排行 -->
       <el-tab-pane label="回款金额排行" name="receivablesRanKing" lazy>
-        <!-- 回款金额排行 -->
         <RankingReceivablesStatistics
           :queryParams="queryParams"
           ref="rankingReceivablesStatisticsRef"
@@ -83,6 +83,7 @@ const resetQuery = () => {
   queryFormRef.value.resetFields()
   handleQuery()
 }
+
 // 加载部门树
 onMounted(async () => {
   deptList.value = handleTree(await DeptApi.getSimpleDeptList())

+ 7 - 5
src/views/crm/contact/detail/index.vue

@@ -57,6 +57,7 @@ const message = useMessage()
 const id = Number(route.params.id) // 联系人编号
 const loading = ref(true) // 加载中
 const contact = ref<ContactApi.ContactVO>({} as ContactApi.ContactVO) // 联系人详情
+const permissionListRef = ref<InstanceType<typeof PermissionList>>() // 团队成员列表 Ref
 
 /** 获取详情 */
 const getContactData = async (id: number) => {
@@ -68,22 +69,20 @@ const getContactData = async (id: number) => {
     loading.value = false
   }
 }
+
 /** 编辑 */
 const formRef = ref()
 const openForm = (type: string, id?: number) => {
   formRef.value.open(type, id)
 }
+
 /** 联系人转移 */
 const crmTransferFormRef = ref<InstanceType<typeof CrmTransferForm>>() // 联系人转移表单 ref
 const transfer = () => {
   crmTransferFormRef.value?.open('联系人转移', contact.value.id, ContactApi.transfer)
 }
 
-const permissionListRef = ref<InstanceType<typeof PermissionList>>() // 团队成员列表 Ref
-
-/**
- * 获取操作日志
- */
+/** 获取操作日志 */
 const logList = ref<OperateLogV2VO[]>([]) // 操作日志列表
 const getOperateLog = async (contactId: number) => {
   if (!contactId) {
@@ -95,9 +94,12 @@ const getOperateLog = async (contactId: number) => {
   })
   logList.value = data.list
 }
+
+/** 关闭窗口 */
 const close = () => {
   delView(unref(currentRoute))
 }
+
 /** 初始化 */
 const { delView } = useTagsViewStore() // 视图操作
 const { currentRoute } = useRouter() // 路由

+ 27 - 15
src/views/crm/contract/ContractForm.vue

@@ -144,6 +144,7 @@
         <el-col :span="24">
           <CardTitle class="mb-10px" title="审批信息" />
         </el-col>
+        <!-- TODO 芋艿:需要后面在 review 下,目前看不到信息 -->
         <el-col :span="12">
           <el-button
             class="m-20px"
@@ -188,7 +189,9 @@ const formRules = reactive({
   no: [{ required: true, message: '合同编号不能为空', trigger: 'blur' }]
 })
 const formRef = ref() // 表单 Ref
-const BPMLModelRef = ref<InstanceType<typeof BPMLModel>>()
+const BPMLModelRef = ref<InstanceType<typeof BPMLModel>>() // TODO @puhui999:这个变量不太对;另外,可以不做 bpm model 窗口,而是可以点击跳转到工作流详情里;
+
+// TODO @puhui999:加个注释哈
 watch(
   () => formData.value.productItems,
   (val) => {
@@ -196,7 +199,7 @@ watch(
       formData.value.productPrice = 0
       return
     }
-    // 使用reduce函数进行累加
+    // 使用 reduce 函数进行累加
     formData.value.productPrice = val.reduce(
       (accumulator, currentValue) =>
         isNaN(accumulator + currentValue.totalPrice) ? 0 : accumulator + currentValue.totalPrice,
@@ -205,13 +208,13 @@ watch(
   },
   { deep: true }
 )
+
 /** 打开弹窗 */
 const open = async (type: string, id?: number) => {
   dialogVisible.value = true
   dialogTitle.value = t('action.' + type)
   formType.value = type
   resetForm()
-  await getAllApi()
   // 修改时,设置数据
   if (id) {
     formLoading.value = true
@@ -221,10 +224,9 @@ const open = async (type: string, id?: number) => {
       formLoading.value = false
     }
   }
+  await getAllApi()
 }
-const getAllApi = async () => {
-  await Promise.all([getCustomerList(), getUserList(), getContactListList(), getBusinessList()])
-}
+
 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
 
 /** 提交表单 */
@@ -252,32 +254,42 @@ const submitForm = async () => {
     formLoading.value = false
   }
 }
-const customerList = ref<CustomerApi.CustomerVO[]>([])
+
+/** 重置表单 */
+const resetForm = () => {
+  formData.value = {} as ContractApi.ContractVO
+  formRef.value?.resetFields()
+}
+
+/** 获取其它相关数据 */
+const getAllApi = async () => {
+  await Promise.all([getCustomerList(), getUserList(), getContactListList(), getBusinessList()])
+}
+
 /** 获取客户 */
+const customerList = ref<CustomerApi.CustomerVO[]>([])
 const getCustomerList = async () => {
   customerList.value = await CustomerApi.getSimpleCustomerList()
 }
-const contactList = ref<ContactApi.ContactVO[]>([])
+
 /** 动态获取客户联系人 */
+const contactList = ref<ContactApi.ContactVO[]>([])
 const getContactOptions = computed(() =>
   contactList.value.filter((item) => item.customerId === formData.value.customerId)
 )
 const getContactListList = async () => {
   contactList.value = await ContactApi.getSimpleContactList()
 }
-const userList = ref<UserApi.UserVO[]>([])
+
 /** 获取用户列表 */
+const userList = ref<UserApi.UserVO[]>([])
 const getUserList = async () => {
   userList.value = await UserApi.getSimpleUserList()
 }
-const businessList = ref<BusinessApi.BusinessVO[]>([])
+
 /** 获取商机 */
+const businessList = ref<BusinessApi.BusinessVO[]>([])
 const getBusinessList = async () => {
   businessList.value = await BusinessApi.getSimpleBusinessList()
 }
-/** 重置表单 */
-const resetForm = () => {
-  formData.value = {} as ContractApi.ContractVO
-  formRef.value?.resetFields()
-}
 </script>

+ 14 - 2
src/views/crm/contract/components/ProductList.vue

@@ -1,3 +1,4 @@
+<!-- 合同 Form 表单下的 Product 列表 -->
 <template>
   <el-row justify="end">
     <el-button plain type="primary" @click="openForm">添加产品</el-button>
@@ -71,23 +72,32 @@ withDefaults(defineProps<{ modelValue: any[] }>(), { modelValue: () => [] })
 const emits = defineEmits<{
   (e: 'update:modelValue', v: any[]): void
 }>()
-const list = ref<ProductApi.ProductExpandVO[]>([])
+
+const list = ref<ProductApi.ProductExpandVO[]>([]) //  TODO @puhui999
+const multipleSelection = ref<ProductApi.ProductExpandVO[]>([]) // 多选
+
+/** 处理删除 */
 const handleDelete = (id: number) => {
   const index = list.value.findIndex((item) => item.id === id)
   if (index !== -1) {
     list.value.splice(index, 1)
   }
 }
+
+/** 打开 Product 弹窗  */
 const tableSelectFormRef = ref<InstanceType<typeof TableSelectForm>>()
-const multipleSelection = ref<ProductApi.ProductExpandVO[]>([])
 const openForm = () => {
   tableSelectFormRef.value?.open(ProductApi.getProductPage)
 }
+
+/** 计算 totalPrice */
 const getTotalPrice = computed(() => (row: ProductApi.ProductExpandVO) => {
   const totalPrice = (row.price * row.count * row.discountPercent) / 100
   row.totalPrice = isNaN(totalPrice) ? 0 : totalPrice
   return isNaN(totalPrice) ? 0 : totalPrice
 })
+
+// TODO @puhui999:注释下
 watch(
   list,
   (val) => {
@@ -98,6 +108,8 @@ watch(
   },
   { deep: true }
 )
+
+// TODO @puhui999:注释下
 watch(
   multipleSelection,
   (val) => {

+ 1 - 0
src/views/crm/contract/detail/ContractDetailsHeader.vue

@@ -1,3 +1,4 @@
+<!-- TODO @puhui999:这个组件的注释加下,方便大家打开就知道哈 -->
 <template>
   <div>
     <div class="flex items-start justify-between">

+ 1 - 0
src/views/crm/contract/detail/ContractDetailsInfo.vue

@@ -1,3 +1,4 @@
+<!-- TODO @puhui999:这个组件的注释加下,方便大家打开就知道哈 -->
 <template>
   <ContentWrap>
     <el-collapse v-model="activeNames">

+ 9 - 2
src/views/crm/contract/detail/index.vue

@@ -1,3 +1,4 @@
+<!-- TODO @puhui999:这个组件的注释加下,方便大家打开就知道哈 -->
 <template>
   <ContractDetailsHeader v-loading="loading" :contract="contract">
     <el-button v-if="permissionListRef?.validateWrite" @click="openForm('update', contract.id)">
@@ -57,11 +58,14 @@ const message = useMessage()
 const contractId = ref(0) // 编号
 const loading = ref(true) // 加载中
 const contract = ref<ContractApi.ContractVO>({} as ContractApi.ContractVO) // 详情
+const permissionListRef = ref<InstanceType<typeof PermissionList>>() // 团队成员列表 Ref
+
 /** 编辑 */
 const formRef = ref()
 const openForm = (type: string, id?: number) => {
   formRef.value.open(type, id)
 }
+
 /** 获取详情 */
 const getContractData = async () => {
   loading.value = true
@@ -86,18 +90,21 @@ const getOperateLog = async (contractId: number) => {
   logList.value = data.list
 }
 
+/** 转移 */
+// TODO @puhui999:transferFormRef 简洁一点哈
 const crmTransferFormRef = ref<InstanceType<typeof CrmTransferForm>>() // 合同转移表单 ref
 const transfer = () => {
   crmTransferFormRef.value?.open('合同转移', contract.value.id, ContractApi.transfer)
 }
 
-const permissionListRef = ref<InstanceType<typeof PermissionList>>() // 团队成员列表 Ref
-/** 初始化 */
+/** 关闭 */
 const { delView } = useTagsViewStore() // 视图操作
 const { currentRoute } = useRouter() // 路由
 const close = () => {
   delView(unref(currentRoute))
 }
+
+/** 初始化 */
 onMounted(async () => {
   const id = route.params.id
   if (!id) {

+ 1 - 0
src/views/crm/contract/oa/ContractDetail/index.vue

@@ -1,3 +1,4 @@
+<!-- TODO @puhui999:这个好像和 detail 重复了??? -->
 <template>
   <el-form ref="formRef" v-loading="formLoading" :model="formData" label-width="110px">
     <el-row>

+ 2 - 1
src/views/crm/customer/CustomerImportForm.vue

@@ -1,3 +1,4 @@
+<!-- 客户导入窗口 -->
 <template>
   <Dialog v-model="dialogVisible" title="客户导入" width="400">
     <el-upload
@@ -20,7 +21,7 @@
         <div class="el-upload__tip text-center">
           <div class="el-upload__tip">
             <el-checkbox v-model="updateSupport" />
-            是否更新已经存在的客户数据
+            是否更新已经存在的客户数据(“客户名称”重复)
           </div>
           <span>仅允许导入 xls、xlsx 格式文件。</span>
           <el-link

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

@@ -339,10 +339,14 @@ const handleDelete = async (id: number) => {
     await getList()
   } catch {}
 }
+
+/** 导入按钮操作 */
+// TODO @puhui999:importFormRef 简化下
 const customerImportFormRef = ref<InstanceType<typeof CustomerImportForm>>()
 const handleImport = () => {
   customerImportFormRef.value?.open()
 }
+
 /** 导出按钮操作 */
 const handleExport = async () => {
   try {