Просмотр исходного кода

feat(客户管理): 客户管理页面优化

qihao 2 лет назад
Родитель
Сommit
6c055a28fe

+ 11 - 0
src/api/saleManage/contact.js

@@ -66,3 +66,14 @@ export async function contactTypeTree(data) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+/**
+ * 更新用户状态
+ */
+export async function updateStatus(id, status) {
+  const res = await request.get(`/eom/contact/updateStatus?id=` + id + '&status=' + status);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 1 - 2
src/api/system/file/index.js

@@ -1,5 +1,5 @@
 import request from '@/utils/request';
-import { download } from '@/utils/file';
+import {download } from '@/utils/file';
 
 /**
  * 上传文件
@@ -59,7 +59,6 @@ export async function getFile (params, fileName) {
   // }
   // return Promise.reject();
 }
-
 /**
  * 删除文件
  */

+ 6 - 1
src/components/Dict/DictSelection.vue

@@ -4,6 +4,7 @@
     style="width: 100%"
     v-bind="$attrs"
     v-on="$listeners"
+    :disabled="disabled"
   >
     <el-option
       v-for="item in dictList"
@@ -39,7 +40,11 @@
         type: String,
         default: 'dictCode'
       },
-      listFormatte: Function
+      listFormatte: Function,
+      disabled: {
+        type: Boolean,
+        default: false
+      }
     },
     data() {
       return {};

+ 3 - 2
src/utils/file.js

@@ -2,7 +2,7 @@ import { getToken } from './token-util';
 import { TOKEN_HEADER_NAME } from '@/config/setting';
 
 // 获取图片反显url
-export function getImageUrl (path) {
+export function getImageUrl(path) {
   return `${sessionStorage.filePath}${path}`;
   // if (process.env.NODE_ENV === 'development') {
   //   return `http://192.168.3.51:18086/main/file/getFile?${TOKEN_HEADER_NAME}=${getToken()}&objectName=${path}`;
@@ -13,7 +13,7 @@ export function getImageUrl (path) {
   // }
 }
 // 从反显url上获取接口需要path
-export function getImagePath (url) {
+export function getImagePath(url) {
   if (!url) {
     return '';
   }
@@ -24,6 +24,7 @@ export function getImagePath (url) {
 }
 
 // 下载方法
+
 export function download (data, name) {
   const a = document.createElement('a');
   const url = window.URL.createObjectURL(data);

+ 3 - 0
src/utils/request.js

@@ -13,6 +13,9 @@ const service = axios.create({
   baseURL: API_BASE_URL,
   transformResponse: [
     function (data) {
+      if (data instanceof Blob) {
+        return data;
+      }
       const json = JSONBIG({
         storeAsString: true
       });

+ 15 - 2
src/utils/util.js

@@ -1,5 +1,3 @@
-import { getAction } from '@/api/flowable/manage';
-
 import store from '@/store';
 
 export function formatDictText(dicts, values) {
@@ -33,3 +31,18 @@ export function randomString(len) {
   }
   return pwd;
 }
+
+// 深度拷贝
+export function copyObj(obj) {
+  //变量先置空
+  let newobj = null;
+
+  //判断是否需要继续进行递归
+  if (typeof obj == 'object' && obj !== null) {
+    newobj = obj instanceof Array ? [] : {}; //进行下一层递归克隆
+    for (const i in obj) {
+      newobj[i] = copyObj(obj[i]);
+    } //如果不是对象直接赋值
+  } else newobj = obj;
+  return newobj;
+}

+ 36 - 25
src/views/saleManage/contact/components/addContactDialog.vue

@@ -404,11 +404,12 @@ import {contactDetail, contactSave, contactUpdate} from '@/api/saleManage/contac
 import {categoryData} from 'element-china-category-data';
 import fileUpload from '@/components/upload/fileUpload';
 import {cityData} from 'ele-admin/packages/utils/regions';
-import {removeFile, uploadFile} from '@/api/system/file/index.js';
 import dictMixins from '@/mixins/dictMixins';
 import deptSelect from '@/components/CommomSelect/dept-select.vue';
 import personSelect from '@/components/CommomSelect/person-select.vue';
 import {listOrganizations} from '@/api/system/organization';
+import {copyObj} from '@/utils/util';
+
 
 export default {
     props: {
@@ -421,12 +422,7 @@ export default {
       personSelect
     },
     data() {
-      return {
-        visible: false,
-        title: '',
-        row: {},
-        activeName: 'base',
-        form: {
+      let formDef = {
           address: '',
           addressId: 0,
           addressName: '',
@@ -451,21 +447,30 @@ export default {
           simpleName: '',
           type: 1,
           unifiedSocialCreditCode: ''
-        },
-        otherForm: {
-          settlementMode: '',
-          settlementModeName: '',
-          taxRate: 0,
-          address: '',
-          addressId: '',
-          deptId: '',
-          deptName: '',
-          discount: 0,
-          salesmanId: '',
-          salesmanName: '',
-          sender: '',
-          senderPhone: ''
-        },
+        };
+      let otherFormDef = {
+        settlementMode: '',
+        settlementModeName: '',
+        taxRate: 0,
+        address: '',
+        addressId: '',
+        deptId: '',
+        deptName: '',
+        discount: 0,
+        salesmanId: '',
+        salesmanName: '',
+        sender: '',
+        senderPhone: ''
+      };
+      return {
+        visible: false,
+        title: '',
+        row: {},
+        activeName: 'base',
+        formDef,
+        otherFormDef,
+        form: copyObj(formDef),
+        otherForm: copyObj(otherFormDef),
         // removeBankList: [],
         // removeLinkList: [],
         tableBankData: [],
@@ -623,6 +628,7 @@ export default {
         this.row = row;
         this.visible = true;
         if (type == '新建客户') {
+          this.isUpdate = false;
           // 默认带出列表页面选中的分类
           this.form.categoryId = contactCategoryId;
         } else {
@@ -800,10 +806,13 @@ export default {
       },
       cancel() {
         this.$nextTick(() => {
-          this.tableBankData = []
-          this.tableLinkData = []
+          // 关闭后,销毁所有的表单数据
           this.$refs['otherForm'] &&  this.$refs['otherForm'].resetFields();
           this.$refs['formRef'] &&  this.$refs['formRef'].resetFields();
+          this.form = copyObj(this.formDef),
+          this.otherForm = copyObj(this.otherFormDef),
+          this.tableBankData = []
+          this.tableLinkData = []
           this.visible = false;
         })
       },
@@ -813,7 +822,9 @@ export default {
         this.otherForm = data.other;
         this.tableBankData = data.bankList;
         this.tableLinkData = data.linkList;
-        this.$set(this.form,'businessLicenseFiles',[data.base.businessLicenseFile])
+        if(data.base.businessLicenseFile && data.base.businessLicenseFile !== ""){
+          this.$set(this.form,'businessLicenseFiles',[data.base.businessLicenseFile])
+        }
 
         if(this.tableLinkData && this.tableLinkData.length > 0){
           this.tableLinkData.forEach(e => e.status = e.status+"");

+ 482 - 0
src/views/saleManage/contact/components/contactDetailDialog.vue

@@ -0,0 +1,482 @@
+<template>
+  <ele-modal
+    custom-class="ele-dialog-form"
+    v-if="visible"
+    :visible.sync="visible"
+    :title="title"
+    :close-on-click-modal="false"
+    width="80%"
+    @close="cancel"
+  >
+
+    <el-tabs v-model="activeName" type="card">
+      <el-tab-pane label="基本信息" name="base">
+        <el-form
+          label-width="160px"
+          ref="formRef"
+          :model="form"
+          style="margin-top: 30px"
+        >
+          <el-row>
+            <el-col :span="8">
+              <el-form-item
+                label="客户分类:"
+                prop="categoryId"
+              >
+                {{form.categoryId}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="客户名称:" prop="name">
+                {{form.name}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="客户代码:" prop="serialNo">
+                {{form.serialNo}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="客户简称:" prop="simpleName">
+                {{form.simpleName}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="授信额度:" prop="authorizationLimit">
+                {{form.authorizationLimit}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="单位电话:" prop="phone">
+                {{form.phone}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="地址:" prop="addressId">
+                {{form.addressName}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="详细地址:" prop="address">
+                {{form.address}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item
+                label="统一社会信用代码:"
+                prop="unifiedSocialCreditCode"
+              >
+                {{form.unifiedSocialCreditCode}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="所属行业:" prop="industry">
+                {{form.industryFullName}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="企业类型:" prop="companyCategoryId">
+                {{form.companyCategoryName}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="登记日期:" prop="registerDate">
+                {{form.registerDate}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="经营范围:" prop="businessScope">
+                {{form.businessScope}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="主营产品:" prop="mainProduct">
+                {{form.mainProduct}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item
+                label="是否存在上级集团公司:"
+                prop="hasParentGroup"
+                label-width="170px"
+              >
+                {{ form.hasParentGroup === 1 ? "是" : "否"}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item prop="businessLicenseFile" label="营业执照附件:">
+                <el-link v-if="form.businessLicenseFile && form.businessLicenseFile !== ''"
+                         type="primary" :underline="false"
+                         @click="downloadFile(form.businessLicenseFile)"> {{ form.businessLicenseFile.name }}</el-link>
+              </el-form-item>
+            </el-col>
+            <el-col :span="16">
+              <el-form-item label="备注:" prop="remark">
+                {{form.remark}}
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </el-tab-pane>
+      <el-tab-pane label="银行信息" name="bank">
+        <ele-pro-table
+          ref="table"
+          :columns="bankColumns"
+          :datasource="tableBankData"
+          height="350px"
+          :toolkit="[]"
+          :need-page="false"
+        >
+          <template v-slot:accountNameHeader="{ column }">
+            <span>{{ column.label }}</span><span style="color:red">*</span>
+          </template>
+
+          <template v-slot:accountName="{ row }">
+            {{row.accountName}}
+          </template>
+          <template v-slot:accountNo="{ row }">
+            {{row.accountNo}}
+          </template>
+          <template v-slot:bankName="{ row }">
+            {{row.bankName}}
+          </template>
+          <template v-slot:interbankNo="{ row }">
+            {{row.interbankNo}}
+          </template>
+        </ele-pro-table>
+      </el-tab-pane>
+      <el-tab-pane label="联系人信息" name="link">
+        <ele-pro-table
+          ref="linkTable"
+          :columns="linkColumns"
+          :datasource="tableLinkData"
+          :toolkit="[]"
+          height="350px"
+          :need-page="false"
+        >
+          <template v-slot:linkNameHeader="{ column }">
+            <span>{{ column.label }}</span><span style="color:red">*</span>
+          </template>
+          <template v-slot:mobilePhoneHeader="{ column }">
+            <span>{{ column.label }}</span><span style="color:red">*</span>
+          </template>
+          <template v-slot:statusHeader="{ column }">
+            <span>{{ column.label }}</span><span style="color:red">*</span>
+          </template>
+
+          <template v-slot:linkName="{ row }">
+            {{row.linkName}}
+          </template>
+          <template v-slot:mobilePhone="{ row }">
+            {{row.mobilePhone}}
+          </template>
+          <template v-slot:phone="{ row }">
+            {{row.phone}}
+          </template>
+          <template v-slot:email="{ row }">
+            {{row.email}}
+          </template>
+          <template v-slot:post="{ row }">
+            {{row.post}}
+          </template>
+          <template v-slot:ifChief="{ row, $index }">
+            <el-select v-model="row.ifChief" class="w100" disabled>
+              <el-option
+                v-for="item in ifChiefList"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              ></el-option>
+            </el-select>
+          </template>
+          <template v-slot:status="{ row }">
+            <DictSelection
+              dictName="客户联系人状态"
+              v-model="row.status"
+              :disabled="true"
+            ></DictSelection>
+          </template>
+          <template v-slot:remark="{ row }">
+            {{row.remark}}
+          </template>
+        </ele-pro-table>
+      </el-tab-pane>
+      <el-tab-pane label="其他信息" name="other">
+        <el-form
+          label-width="160px"
+          ref="otherForm"
+          :model="otherForm"
+          style="margin-top: 30px"
+        >
+          <el-row>
+            <el-col :span="8">
+              <el-form-item label="结算方式:" prop="settlementMode">
+                {{otherForm.settlementModeName}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="税率:" prop="taxRate">
+                {{otherForm.taxRate}} %
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="折扣率:" prop="discount">
+                {{otherForm.discount}} %
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item
+                label="分管部门:"
+                prop="deptId"
+                style="margin-bottom: 22px"
+              >
+                {{otherForm.deptName}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="业务员:" prop="salesmanId">
+                {{otherForm.salesmanName}}
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="8">
+              <el-form-item label="寄件人:" prop="sender">
+                {{otherForm.sender}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="寄件人电话:" prop="senderPhone">
+                {{otherForm.senderPhone}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="寄件人地址:" prop="addressId">
+                {{otherForm.addressName}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="寄件人详细地址:" prop="address" >
+                {{otherForm.address}}
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </el-tab-pane>
+    </el-tabs>
+
+    <div slot="footer" class="footer">
+      <el-button @click="cancel">返回</el-button>
+    </div>
+  </ele-modal>
+</template>
+
+<script>
+import {contactDetail} from '@/api/saleManage/contact';
+import {getFile} from '@/api/system/file';
+import fileUpload from '@/components/upload/fileUpload';
+import dictMixins from '@/mixins/dictMixins';
+import deptSelect from '@/components/CommomSelect/dept-select.vue';
+import personSelect from '@/components/CommomSelect/person-select.vue';
+import {copyObj} from '@/utils/util';
+
+
+export default {
+    props: {
+      categoryTreeList: Array
+    },
+    mixins: [dictMixins],
+    components: {
+      fileUpload,
+      deptSelect,
+      personSelect
+    },
+    data() {
+      let formDef = {
+          address: '',
+          addressId: 0,
+          addressName: '',
+          authorizationLimit: 0,
+          businessLicenseFile: {},
+          businessScope: '',
+          categoryId: '',
+          companyCategoryId: '',
+          companyCategoryName: '',
+          hasParentGroup: 0,
+          industry: '',
+          industryCode: '',
+          industryFullName: '',
+          mainProduct: '',
+          name: '',
+          officialIndustry: '',
+          phone: '',
+          registerDate: '',
+          remark: '',
+          serialNo: '',
+          simpleName: '',
+          type: 1,
+          unifiedSocialCreditCode: ''
+        };
+      let otherFormDef = {
+        settlementMode: '',
+        settlementModeName: '',
+        taxRate: 0,
+        address: '',
+        addressId: '',
+        deptId: '',
+        deptName: '',
+        discount: 0,
+        salesmanId: '',
+        salesmanName: '',
+        sender: '',
+        senderPhone: ''
+      };
+      return {
+        visible: false,
+        title: '客户详情',
+        row: {},
+        activeName: 'base',
+        formDef,
+        otherFormDef,
+        form: copyObj(formDef),
+        otherForm: copyObj(otherFormDef),
+        tableBankData: [],
+        tableLinkData: [],
+        ifChiefList: [
+          {
+            value: 0,
+            label: '否'
+          },
+          {
+            value: 1,
+            label: '是'
+          }
+        ],
+        bankColumns: [
+          {
+            type: 'index',
+            width: 55,
+            align: 'center'
+          },
+          {
+            label: '单位名称',
+            prop: 'accountName',
+            slot: 'accountName',
+            action: 'accountName',
+            headerSlot: 'accountNameHeader'
+          },
+          {
+            label: '银行账号',
+            prop: 'accountNo',
+            slot: 'accountNo',
+            action: 'accountNo'
+          },
+          {
+            label: '开户行',
+            prop: 'bankName',
+            slot: 'bankName',
+            action: 'bankName'
+          },
+          {
+            label: '银行银联号',
+            prop: 'interbankNo',
+            slot: 'interbankNo',
+            action: 'interbankNo'
+          },
+        ],
+        linkColumns: [
+          {
+            type: 'index',
+            width: 55,
+            align: 'center'
+          },
+          {
+            label: '联系人名称',
+            prop: 'linkName',
+            slot: 'linkName',
+            action: 'linkName',
+            headerSlot: 'linkNameHeader'
+          },
+          {
+            label: '手机',
+            prop: 'mobilePhone',
+            slot: 'mobilePhone',
+            action: 'mobilePhone',
+            headerSlot: 'mobilePhoneHeader'
+          },
+          {
+            label: '电话',
+            prop: 'phone',
+            slot: 'phone',
+            action: 'phone'
+          },
+          {
+            label: '邮箱',
+            prop: 'email',
+            slot: 'email',
+            action: 'email'
+          },
+          {
+            label: '职务',
+            prop: 'post',
+            slot: 'post',
+            action: 'post'
+          },
+          {
+            label: '状态',
+            prop: 'status',
+            slot: 'status',
+            action: 'status',
+            headerSlot: 'statusHeader'
+          },
+          {
+            label: '是否首要',
+            prop: 'ifChief',
+            slot: 'ifChief',
+            action: 'ifChief'
+          },
+          {
+            label: '备注',
+            prop: 'remark',
+            slot: 'remark',
+            action: 'remark'
+          },
+        ],
+      };
+    },
+    methods: {
+      async open(row) {
+        this.row = row;
+        this.visible = true;
+        await this._getById(row.id);
+      },
+
+      cancel() {
+        this.$nextTick(() => {
+          // 关闭后,销毁所有的表单数据
+          this.form = copyObj(this.formDef),
+          this.otherForm = copyObj(this.otherFormDef),
+          this.tableBankData = []
+          this.tableLinkData = []
+          this.visible = false;
+        })
+      },
+
+      async _getById(id) {
+        const data = await contactDetail(id);
+        this.form = data.base;
+        this.otherForm = data.other;
+        this.tableBankData = data.bankList;
+        this.tableLinkData = data.linkList;
+
+        if(this.tableLinkData && this.tableLinkData.length > 0){
+          this.tableLinkData.forEach(e => e.status = e.status+"");
+        }
+      },
+
+      downloadFile(file){
+        getFile({ objectName: file.storePath }, file.name);
+      },
+
+    }
+  };
+</script>

+ 30 - 9
src/views/saleManage/contact/components/contactSearch.vue

@@ -8,23 +8,36 @@
   >
     <el-row :gutter="15">
       <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="客户名称:" prop="name">
+        <el-form-item label="编号/代码:" prop="codeOrSerialNo">
           <el-input
             clearable
+            v-model="params.codeOrSerialNo"
             placeholder="请输入"
-            v-model.trim="params.name"
+            maxlength="50"
           ></el-input>
         </el-form-item>
       </el-col>
-      <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="编号/代码:" prop="codeOrSerialNo">
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="客户名称:" prop="name">
           <el-input
             clearable
-            v-model="params.codeOrSerialNo"
             placeholder="请输入"
+            v-model.trim="params.name"
           ></el-input>
         </el-form-item>
-      </el-col> -->
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="是否启用:" prop="codeOrSerialNo">
+          <el-select v-model="params.status" placeholder="请选择" class="w100" clearable>
+            <el-option
+              v-for="item in statusList"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </el-col>
       <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
         <div class="ele-form-actions">
           <el-button
@@ -46,12 +59,20 @@
     data () {
       // 默认表单数据
       const defaultParams = {
-        informationName: '',
-        informationCode: ''
+        type: 1,
+        name: '',
+        codeOrSerialNo: '',
+        status: ''
       };
       return {
+        defaultParams,
         // 表单数据
-        params: { ...defaultParams }
+        params: { ...defaultParams },
+        // 状态数据源
+        statusList: [
+          {value: 1, label: "启用"},
+          {value: 2, label: "禁用"}
+        ],
       };
     },
     computed: {

+ 42 - 18
src/views/saleManage/contact/index.vue

@@ -43,13 +43,7 @@
                 </el-button>
               </template>
               <template v-slot:code="{ row }">
-                <el-link
-                  type="primary"
-                  :underline="false"
-                  @click="goDetail(row)"
-                >
-                  {{ row.code }}
-                </el-link>
+                <el-link type="primary" :underline="false" @click="openDetail(row)"> {{ row.code }}</el-link>
               </template>
               <!-- 操作列 -->
               <template v-slot:action="{ row }">
@@ -62,11 +56,11 @@
                   修改
                 </el-link>
                 <el-link
-                  v-if="row.status===0"
+                  v-if="row.status===2"
                   type="primary"
                   :underline="false"
                   icon="el-icon-check"
-                  @click="openEdit('编辑客户',row)"
+                  @click="enableOption(row)"
                 >
                   启用
                 </el-link>
@@ -75,7 +69,7 @@
                   type="primary"
                   :underline="false"
                   icon="el-icon-close"
-                  @click="openEdit('编辑客户',row)"
+                  @click="disableOption(row)"
                 >
                   禁用
                 </el-link>
@@ -104,6 +98,7 @@
 
 
     <AddContactDialog ref="addContactDialogRef" :categoryTreeList="treeList" @done="reload"></AddContactDialog>
+    <ContactDetailDialog ref="contactDetailDialogRef"></ContactDetailDialog>
 
   </div>
 </template>
@@ -111,16 +106,18 @@
 <script>
 import ContactSearch from './components/contactSearch.vue';
 import AddContactDialog from './components/addContactDialog.vue';
+import ContactDetailDialog from './components/contactDetailDialog.vue';
 import AssetTree from '@/components/AssetTree';
-import {contactDelete, contactPage, contactTypeTree} from '@/api/saleManage/contact';
+import {contactDelete, contactPage, contactTypeTree, updateStatus} from '@/api/saleManage/contact';
 import dictMixins from '@/mixins/dictMixins';
 
 export default {
     mixins: [dictMixins],
     components: {
+      AssetTree,
       ContactSearch,
       AddContactDialog,
-      AssetTree
+      ContactDetailDialog,
     },
     data() {
       return {
@@ -140,6 +137,7 @@ export default {
             prop: 'code',
             label: '客户编码',
             align: 'center',
+            slot: 'code',
             showOverflowTooltip: true,
             minWidth: 140
           },
@@ -197,7 +195,7 @@ export default {
             showOverflowTooltip: true,
             minWidth: 100,
             formatter: (_row, _column, cellValue) => {
-              return _row.status === 1 ? '正常' : '停用';
+              return _row.status === 1 ? '启用' : '禁用';
             }
           },
           {
@@ -238,7 +236,7 @@ export default {
           children: 'children',
           label: 'name'
         },
-        showEdit: true
+        showEdit: true,
       };
     },
     computed: {},
@@ -262,9 +260,6 @@ export default {
           this.treeLoading = false;
           if (res?.code === '0') {
             this.treeList = res.data;
-            // if(this.treeList && this.treeList[0]) {
-            //   this.curNode = this.treeList[0]
-            // }
             this.$nextTick(() => {
               // 默认高亮第一级树节点
               // if (this.treeList[0]) {
@@ -297,12 +292,41 @@ export default {
           this.$message.success('删除成功!');
           this.reload();
         });
-      }
+      },
+      /** 启用客户 */
+      enableOption(row) {
+        updateStatus(row.id, 1)
+          .then((msg) => {
+            this.$message.success("客户启用成功");
+            this.reload();
+          })
+          .catch((e) => {
+            this.$message.error(e.message);
+          });
+      },
+      /** 禁用客户 */
+      disableOption(row) {
+        updateStatus(row.id, 2)
+          .then((msg) => {
+            this.$message.success("客户禁用成功");
+            this.reload();
+          })
+          .catch((e) => {
+            this.$message.error(e.message);
+          });
+      },
+      openDetail(row){
+        this.$refs.contactDetailDialogRef.open(row);
+      },
     }
   };
 </script>
 
 <style lang="scss" scoped>
+:deep(.el-link--inner){
+  margin-left: 0px !important;
+}
+
 .sys-organization-list {
   height: calc(100vh - 264px);
   box-sizing: border-box;