Selaa lähdekoodia

!297 feat: 调整 crm 客户表的字段
Merge pull request !297 from wanwan/master

芋道源码 1 vuosi sitten
vanhempi
commit
5d760d5450

+ 7 - 2
src/api/crm/customer/index.ts

@@ -3,19 +3,24 @@ import request from '@/config/axios'
 export interface CustomerVO {
   id: number
   name: string
+  industryId: number
+  level: number
+  source: number
   followUpStatus: boolean
   lockStatus: boolean
   mobile: string
   telephone: string
   website: string
+  qq: string
+  wechat: string
+  email: string
+  description: string
   remark: string
   ownerUserId: number
   roUserIds: string
   rwUserIds: string
   areaId: number
   detailAddress: string
-  longitude: string
-  latitude: string
   contactLastTime: Date
   contactNextTime: Date
 }

+ 4 - 1
src/utils/dict.ts

@@ -188,5 +188,8 @@ export enum DICT_TYPE {
 
   // ========== CRM - 客户管理模块 ==========
   CRM_RECEIVABLE_CHECK_STATUS = 'crm_receivable_check_status',
-  CRM_RETURN_TYPE = 'crm_return_type'
+  CRM_RETURN_TYPE = 'crm_return_type',
+  CRM_CUSTOMER_INDUSTRY = 'crm_customer_industry',
+  CRM_CUSTOMER_LEVEL = 'crm_customer_level',
+  CRM_CUSTOMER_SOURCE = 'crm_customer_source'
 }

+ 98 - 90
src/views/crm/customer/CustomerForm.vue

@@ -7,80 +7,92 @@
       label-width="100px"
       v-loading="formLoading"
     >
-      <el-form-item label="客户名称" prop="name">
-        <el-input v-model="formData.name" placeholder="请输入客户名称" />
-      </el-form-item>
-      <el-form-item label="跟进状态" prop="followUpStatus">
-        <el-radio-group v-model="formData.followUpStatus">
-          <el-radio
-            v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-            :key="dict.value"
-            :label="dict.value"
-          >
-            {{ dict.label }}
-          </el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="锁定状态" prop="lockStatus">
-        <el-radio-group v-model="formData.lockStatus">
-          <el-radio
-            v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-            :key="dict.value"
-            :label="dict.value"
-          >
-            {{ dict.label }}
-          </el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="手机" prop="mobile">
-        <el-input v-model="formData.mobile" placeholder="请输入手机" />
-      </el-form-item>
-      <el-form-item label="电话" prop="telephone">
-        <el-input v-model="formData.telephone" placeholder="请输入电话" />
-      </el-form-item>
-      <el-form-item label="网址" prop="website">
-        <el-input v-model="formData.website" placeholder="请输入网址" />
+      <el-row>
+        <el-form-item label="客户名称" prop="name">
+          <el-input v-model="formData.name" placeholder="请输入客户名称" />
+        </el-form-item>
+        <el-form-item label="所属行业" prop="industryId">
+          <el-select v-model="formData.industryId" placeholder="请选择所属行业">
+            <el-option
+              v-for="dict in getStrDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY)"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item label="客户来源" prop="source">
+          <el-select v-model="formData.source" placeholder="请选择客户来源">
+            <el-option
+              v-for="dict in getStrDictOptions(DICT_TYPE.CRM_CUSTOMER_SOURCE)"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="客户等级" prop="level">
+          <el-select v-model="formData.level" placeholder="请选择客户等级">
+            <el-option
+              v-for="dict in getStrDictOptions(DICT_TYPE.CRM_CUSTOMER_LEVEL)"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item label="手机" prop="mobile">
+          <el-input v-model="formData.mobile" placeholder="请输入手机" />
+        </el-form-item>
+        <el-form-item label="电话" prop="telephone">
+          <el-input v-model="formData.telephone" placeholder="请输入电话" />
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item label="邮箱" prop="email">
+          <el-input v-model="formData.email" placeholder="请输入邮箱" />
+        </el-form-item>
+        <el-form-item label="QQ" prop="qq">
+          <el-input v-model="formData.qq" placeholder="请输入QQ" />
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item label="微信" prop="wechat">
+          <el-input v-model="formData.wechat" placeholder="请输入微信" />
+        </el-form-item>
+        <el-form-item label="网址" prop="website">
+          <el-input v-model="formData.website" placeholder="请输入网址" />
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item label="地区编号" prop="areaId">
+          <el-input v-model="formData.areaId" placeholder="请输入地区编号" />
+        </el-form-item>
+        <el-form-item label="详细地址" prop="detailAddress">
+          <el-input v-model="formData.detailAddress" placeholder="请输入详细地址" />
+        </el-form-item>
+      </el-row>
+      <!-- TODO @Wanwan 少一个负责人字段,默认先选中自己 -->
+      <el-row>
+        <el-form-item label="下次联系时间" prop="contactNextTime">
+          <el-date-picker
+            v-model="formData.contactNextTime"
+            type="date"
+            value-format="x"
+            placeholder="选择下次联系时间"
+          />
+        </el-form-item>
+      </el-row>
+      <el-form-item label="客户描述" prop="description">
+        <el-input v-model="formData.description" placeholder="请输入客户描述" />
       </el-form-item>
       <el-form-item label="备注" prop="remark">
         <el-input v-model="formData.remark" placeholder="请输入备注" />
       </el-form-item>
-      <el-form-item label="负责人的用户编号" prop="ownerUserId">
-        <el-input v-model="formData.ownerUserId" placeholder="请输入负责人的用户编号" />
-      </el-form-item>
-      <el-form-item label="只读权限的用户编号数组" prop="roUserIds">
-        <el-input v-model="formData.roUserIds" placeholder="请输入只读权限的用户编号数组" />
-      </el-form-item>
-      <el-form-item label="读写权限的用户编号数组" prop="rwUserIds">
-        <el-input v-model="formData.rwUserIds" placeholder="请输入读写权限的用户编号数组" />
-      </el-form-item>
-      <el-form-item label="地区编号" prop="areaId">
-        <el-input v-model="formData.areaId" placeholder="请输入地区编号" />
-      </el-form-item>
-      <el-form-item label="详细地址" prop="detailAddress">
-        <el-input v-model="formData.detailAddress" placeholder="请输入详细地址" />
-      </el-form-item>
-      <el-form-item label="地理位置经度" prop="longitude">
-        <el-input v-model="formData.longitude" placeholder="请输入地理位置经度" />
-      </el-form-item>
-      <el-form-item label="地理位置维度" prop="latitude">
-        <el-input v-model="formData.latitude" placeholder="请输入地理位置维度" />
-      </el-form-item>
-      <el-form-item label="最后跟进时间" prop="contactLastTime">
-        <el-date-picker
-          v-model="formData.contactLastTime"
-          type="date"
-          value-format="x"
-          placeholder="选择最后跟进时间"
-        />
-      </el-form-item>
-      <el-form-item label="下次联系时间" prop="contactNextTime">
-        <el-date-picker
-          v-model="formData.contactNextTime"
-          type="date"
-          value-format="x"
-          placeholder="选择下次联系时间"
-        />
-      </el-form-item>
     </el-form>
     <template #footer>
       <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
@@ -89,7 +101,7 @@
   </Dialog>
 </template>
 <script setup lang="ts">
-import { DICT_TYPE, getBoolDictOptions } from '@/utils/dict'
+import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
 import * as CustomerApi from '@/api/crm/customer'
 
 const { t } = useI18n() // 国际化
@@ -102,26 +114,23 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改
 const formData = ref({
   id: undefined,
   name: undefined,
-  followUpStatus: undefined,
-  lockStatus: undefined,
   mobile: undefined,
+  industryId: undefined,
+  level: undefined,
+  source: undefined,
   telephone: undefined,
   website: undefined,
+  qq: undefined,
+  wechat: undefined,
+  email: undefined,
+  description: undefined,
   remark: undefined,
-  ownerUserId: undefined,
-  roUserIds: undefined,
-  rwUserIds: undefined,
   areaId: undefined,
   detailAddress: undefined,
-  longitude: undefined,
-  latitude: undefined,
-  contactLastTime: undefined,
   contactNextTime: undefined
 })
 const formRules = reactive({
-  name: [{ require: true, message: '跟进状态不能为空', trigger: 'blur' }],
-  followUpStatus: [{ required: true, message: '跟进状态不能为空', trigger: 'blur' }],
-  lockStatus: [{ required: true, message: '锁定状态不能为空', trigger: 'blur' }]
+  name: [{ require: true, message: '客户名称不能为空', trigger: 'blur' }]
 })
 const formRef = ref() // 表单 Ref
 
@@ -174,20 +183,19 @@ const resetForm = () => {
   formData.value = {
     id: undefined,
     name: undefined,
-    followUpStatus: undefined,
-    lockStatus: undefined,
     mobile: undefined,
+    industryId: undefined,
+    level: undefined,
+    source: undefined,
     telephone: undefined,
     website: undefined,
+    qq: undefined,
+    wechat: undefined,
+    email: undefined,
+    description: undefined,
     remark: undefined,
-    ownerUserId: undefined,
-    roUserIds: undefined,
-    rwUserIds: undefined,
     areaId: undefined,
     detailAddress: undefined,
-    longitude: undefined,
-    latitude: undefined,
-    contactLastTime: undefined,
     contactNextTime: undefined
   }
   formRef.value?.resetFields()

+ 28 - 42
src/views/crm/customer/index.vue

@@ -26,24 +26,6 @@
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="电话" prop="telephone">
-        <el-input
-          v-model="queryParams.telephone"
-          placeholder="请输入电话"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="网址" prop="website">
-        <el-input
-          v-model="queryParams.website"
-          placeholder="请输入网址"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
       <el-form-item>
         <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
         <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
@@ -67,38 +49,38 @@
   <ContentWrap>
     <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
       <el-table-column label="编号" align="center" prop="id" />
-      <el-table-column label="客户名称" align="center" prop="name" />
-      <el-table-column label="跟进状态" align="center" prop="followUpStatus">
+      <el-table-column label="客户名称" align="center" prop="name" width="160" />
+      <el-table-column label="所属行业" align="center" prop="industryId" width="120">
         <template #default="scope">
-          <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.followUpStatus" />
+          <dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="scope.row.industryId" />
         </template>
       </el-table-column>
-      <el-table-column label="锁定状态" align="center" prop="lockStatus">
+      <el-table-column label="客户来源" align="center" prop="source" width="100">
         <template #default="scope">
-          <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.lockStatus" />
+          <dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="scope.row.source" />
         </template>
       </el-table-column>
-      <el-table-column label="成交状态" align="center" prop="dealStatus">
+      <el-table-column label="客户等级" align="center" prop="level" width="120">
         <template #default="scope">
-          <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.dealStatus" />
+          <dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="scope.row.level" />
         </template>
       </el-table-column>
-      <el-table-column label="手机" align="center" prop="mobile" />
-      <el-table-column label="电话" align="center" prop="telephone" />
-      <el-table-column label="网址" align="center" prop="website" />
-      <el-table-column label="备注" align="center" prop="remark" />
-      <el-table-column label="负责人的用户编号" align="center" prop="ownerUserId" />
-      <el-table-column label="地区编号" align="center" prop="areaId" />
-      <el-table-column label="详细地址" align="center" prop="detailAddress" />
-      <el-table-column label="地理位置经度" align="center" prop="longitude" />
-      <el-table-column label="地理位置维度" align="center" prop="latitude" />
+      <el-table-column label="手机" align="center" prop="mobile" width="120" />
+      <el-table-column label="详细地址" align="center" prop="detailAddress" width="200" />
+      <!--  TODO @Wanwan 负责人回显,所属部门,创建人    -->
+      <el-table-column label="负责人" align="center" prop="ownerUserId" />
       <el-table-column
-        label="最后跟进时间"
+        label="创建时间"
         align="center"
-        prop="contactLastTime"
+        prop="createTime"
         :formatter="dateFormatter"
         width="180px"
       />
+      <el-table-column label="成交状态" align="center" prop="dealStatus">
+        <template #default="scope">
+          <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.dealStatus" />
+        </template>
+      </el-table-column>
       <el-table-column
         label="下次联系时间"
         align="center"
@@ -107,13 +89,19 @@
         width="180px"
       />
       <el-table-column
-        label="创建时间"
+        label="最后跟进时间"
         align="center"
-        prop="createTime"
+        prop="contactLastTime"
         :formatter="dateFormatter"
         width="180px"
       />
-      <el-table-column label="操作" align="center">
+      <el-table-column label="锁定状态" align="center" prop="lockStatus">
+        <template #default="scope">
+          <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.lockStatus" />
+        </template>
+      </el-table-column>
+      <!--  TODO @Wanwan 距进入公海天数    -->
+      <el-table-column label="操作" align="center" width="160">
         <template #default="scope">
           <el-button
             link
@@ -166,9 +154,7 @@ const queryParams = reactive({
   pageNo: 1,
   pageSize: 10,
   name: null,
-  mobile: null,
-  telephone: null,
-  website: null
+  mobile: null
 })
 const queryFormRef = ref() // 搜索的表单
 const exportLoading = ref(false) // 导出的加载中