6 changed files with 450 additions and 1 deletions
			
			
		@ -0,0 +1,23 @@ | 
				
			|||
.add-c-box{ | 
				
			|||
    width: 600px; | 
				
			|||
    height: 500px; | 
				
			|||
    margin: 0 auto; | 
				
			|||
    border: 1px dashed grey; | 
				
			|||
    position: relative; | 
				
			|||
    padding: 20px 100px; | 
				
			|||
    .el-input{ | 
				
			|||
        width: 300px; | 
				
			|||
        & input{ | 
				
			|||
            width: 100%; | 
				
			|||
        } | 
				
			|||
    }; | 
				
			|||
    .el-button{ | 
				
			|||
        position: absolute; | 
				
			|||
        right: 10px; | 
				
			|||
        bottom: 10px; | 
				
			|||
        width: 200px; | 
				
			|||
    }; | 
				
			|||
    h2{ | 
				
			|||
        text-align: center; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,78 @@ | 
				
			|||
<template> | 
				
			|||
  <div> | 
				
			|||
    <el-button @click="backStep" type="primary" icon="el-icon-back">返回</el-button> | 
				
			|||
    <el-card shadow="never" class="aui-card--fill"> | 
				
			|||
        <el-row> | 
				
			|||
            <h2>客户信息</h2> | 
				
			|||
            <el-row v-for="(val, key) in data.customerInfoDTO" :key="key" style="background-color:rgb(23,179,163);margin:10px;color:white;font-size:16px;height:30px;line-height:30px;" :gutter="20"> | 
				
			|||
                <el-col :span="10">{{key|infoName}}</el-col> | 
				
			|||
                <el-col :span="14">{{val}}</el-col> | 
				
			|||
            </el-row> | 
				
			|||
        </el-row> | 
				
			|||
        <el-row> | 
				
			|||
            <h2>根级组织信息</h2> | 
				
			|||
            <el-row v-for="(val, key) in data.rootAgencyDTO" :key="key" style="background-color:rgb(23,179,163);margin:10px;color:white;font-size:16px;height:30px;line-height:30px;" :gutter="20"> | 
				
			|||
                <el-col :span="10">{{key|infoName}}</el-col> | 
				
			|||
                <el-col :span="14">{{val}}</el-col> | 
				
			|||
            </el-row> | 
				
			|||
        </el-row> | 
				
			|||
        <el-row> | 
				
			|||
            <h2>管理员信息</h2> | 
				
			|||
            <el-row v-for="(val, index) in data.managers" :key="index" style="background-color:rgb(23,179,163);margin:10px;color:white;font-size:16px;height:30px;line-height:30px;" :gutter="20"> | 
				
			|||
              <el-col :span="6">{{val.realName}}</el-col> | 
				
			|||
              <el-col :span="4">{{val.gender|genderName}}</el-col> | 
				
			|||
              <el-col :span="14">{{val.mobile}}</el-col> | 
				
			|||
            </el-row> | 
				
			|||
        </el-row> | 
				
			|||
    </el-card> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
<script> | 
				
			|||
export default { | 
				
			|||
  props: { | 
				
			|||
    dataList: [ Object, Array ] | 
				
			|||
  }, | 
				
			|||
  data () { | 
				
			|||
    return { | 
				
			|||
      data: this.dataList | 
				
			|||
    } | 
				
			|||
  }, | 
				
			|||
  methods: { | 
				
			|||
    backStep () { | 
				
			|||
      this.$emit('backto') | 
				
			|||
    } | 
				
			|||
  }, | 
				
			|||
  beforeDestroy () { | 
				
			|||
    this.data = {} | 
				
			|||
  }, | 
				
			|||
  filters: { | 
				
			|||
    infoName (key) { | 
				
			|||
      return { | 
				
			|||
        'customerName': '客户名称', | 
				
			|||
        'organizationLevel': '组织级别', | 
				
			|||
        'agencyName': '组织名称', | 
				
			|||
        'level': '组织级别', | 
				
			|||
        'areaCode': '地区编码', | 
				
			|||
        'province': '省份', | 
				
			|||
        'city': '城市', | 
				
			|||
        'district': '区县', | 
				
			|||
        'realName': '姓名', | 
				
			|||
        'gender': '性别', | 
				
			|||
        'mobile': '手机号' | 
				
			|||
      }[key] | 
				
			|||
    }, | 
				
			|||
    genderName (key) { | 
				
			|||
      return [ | 
				
			|||
        '未知', | 
				
			|||
        '男', | 
				
			|||
        '女' | 
				
			|||
      ][key] | 
				
			|||
    } | 
				
			|||
  }, | 
				
			|||
  watch: { | 
				
			|||
    dataList (nVal) { | 
				
			|||
      this.data = nVal | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
@ -0,0 +1,338 @@ | 
				
			|||
<template> | 
				
			|||
  <div> | 
				
			|||
    <div v-if="step==0"> | 
				
			|||
      <componentInfo :dataList="details" @backto="toStep(1)"></componentInfo> | 
				
			|||
    </div> | 
				
			|||
    <el-button v-show="step==1" type="primary" plain icon="el-icon-circle-plus-outline" style="margin-bottom:10px;" @click="toStep(2)">新增</el-button> | 
				
			|||
    <el-card v-show="step==1" shadow="never" class="aui-card--fill"> | 
				
			|||
      <el-table | 
				
			|||
        v-loading="dataListLoading" | 
				
			|||
        :data="dataList" | 
				
			|||
        border | 
				
			|||
        style="width: 100%;"> | 
				
			|||
        <el-table-column prop="customerName" label="客户名称" header-align="left" align="left" width="300"></el-table-column> | 
				
			|||
        <el-table-column label="操作" fixed="right" header-align="center" align="center"> | 
				
			|||
          <template slot-scope="scope"> | 
				
			|||
            <el-button size="small" v-if="!scope.row.hasRootAgency" @click="toSetUpStep(scope.row.customerId, 3)">根级组织设置</el-button> | 
				
			|||
            <el-button size="small" v-if="!scope.row.hasManager" @click="toSetUpStep(scope.row.customerId, 4)">管理员设置</el-button> | 
				
			|||
            <el-button size="small" @click="onOpenDetails(scope.row.customerId)">详情</el-button> | 
				
			|||
          </template> | 
				
			|||
        </el-table-column> | 
				
			|||
      </el-table> | 
				
			|||
    </el-card> | 
				
			|||
    <div class="add-c-box" v-if="step==2"> | 
				
			|||
      <h2>客户信息</h2> | 
				
			|||
      <el-form label-position="left" label-width="80px" :model="dataForm2" :rules="dataRule" ref="dataForm" @keyup.enter.native="submitStepHandle()" status-icon> | 
				
			|||
        <el-form-item prop="customerName" label="客户名称"> | 
				
			|||
            <el-input v-model="dataForm2.customerName" key="customerName"> | 
				
			|||
            <span slot="prefix" class="el-input__icon"> | 
				
			|||
                <svg class="icon-svg" aria-hidden="true"><use xlink:href="#icon-user"></use></svg> | 
				
			|||
            </span> | 
				
			|||
            </el-input> | 
				
			|||
        </el-form-item> | 
				
			|||
        <el-form-item prop="organizationLevel" label="组织级别"> | 
				
			|||
          <el-select v-model="dataForm2.organizationLevel" key="organizationLevel"> | 
				
			|||
              <el-option v-for="(val, key) in organizationLevels" :key="key" :label="val" :value="val"></el-option> | 
				
			|||
          </el-select> | 
				
			|||
        </el-form-item> | 
				
			|||
        <el-button type="primary" @click="submitStepHandle">下一步</el-button> | 
				
			|||
      </el-form> | 
				
			|||
    </div> | 
				
			|||
    <div class="add-c-box" v-else-if="step==3"> | 
				
			|||
      <h2>根级组织信息</h2> | 
				
			|||
      <el-form label-position="left" label-width="80px" :model="dataForm3" :rules="dataRule" ref="dataForm" @keyup.enter.native="submitStepHandle()" status-icon> | 
				
			|||
        <el-form-item prop="agencyName" label="组织名称" > | 
				
			|||
            <el-input v-model="dataForm3.agencyName" key="agencyName"> | 
				
			|||
              <span slot="prefix" class="el-input__icon"> | 
				
			|||
                  <svg class="icon-svg" aria-hidden="true"><use xlink:href="#icon-user"></use></svg> | 
				
			|||
              </span> | 
				
			|||
            </el-input> | 
				
			|||
        </el-form-item> | 
				
			|||
        <el-form-item prop="level" label="组织级别"> | 
				
			|||
            <el-select v-model="dataForm3.level" key="level"> | 
				
			|||
                <el-option v-for="(val, key) in organizationLevels" :key="key" :label="val" :value="val"></el-option> | 
				
			|||
            </el-select> | 
				
			|||
        </el-form-item> | 
				
			|||
        <el-form-item prop="district" label="选择地区"> | 
				
			|||
          <v-distpicker @province="onChangeProvince" @city="onChangeCity" @area="onChangeArea"></v-distpicker> | 
				
			|||
        </el-form-item> | 
				
			|||
        <el-form-item prop="areaCode" label="地区编码"> | 
				
			|||
            <el-input v-model="dataForm3.areaCode" key="areaCode"></el-input> | 
				
			|||
        </el-form-item> | 
				
			|||
        <el-button type="primary" @click="submitStepHandle">下一步</el-button> | 
				
			|||
      </el-form> | 
				
			|||
    </div> | 
				
			|||
    <div class="add-c-box" v-else-if="step==4"> | 
				
			|||
      <h2>管理员信息</h2> | 
				
			|||
      <el-form label-position="left" label-width="80px" :model="dataForm4" :rules="dataRule" ref="dataForm" @keyup.enter.native="submitStepHandle()" status-icon> | 
				
			|||
        <el-form-item prop="realName" label="姓名"> | 
				
			|||
            <el-input v-model="dataForm4.realName" key="realName"> | 
				
			|||
            <span slot="prefix" class="el-input__icon"> | 
				
			|||
                <svg class="icon-svg" aria-hidden="true"><use xlink:href="#icon-user"></use></svg> | 
				
			|||
            </span> | 
				
			|||
            </el-input> | 
				
			|||
        </el-form-item> | 
				
			|||
        <el-form-item prop="gender" label="性别"> | 
				
			|||
            <el-select v-model="dataForm4.gender" key="gender"> | 
				
			|||
                <el-option v-for="(val, key) in genders" :key="key" :label="val" :value="key"></el-option> | 
				
			|||
            </el-select> | 
				
			|||
        </el-form-item> | 
				
			|||
        <el-form-item prop="mobile" label="手机号"> | 
				
			|||
            <el-input v-model.number="dataForm4.mobile" key="mobile"> | 
				
			|||
            <span slot="prefix" class="el-input__icon"> | 
				
			|||
                <svg class="icon-svg" aria-hidden="true"><use xlink:href="#icon-user"></use></svg> | 
				
			|||
            </span> | 
				
			|||
            </el-input> | 
				
			|||
        </el-form-item> | 
				
			|||
        <el-button type="primary" @click="submitStepHandle">完成</el-button> | 
				
			|||
      </el-form> | 
				
			|||
    </div> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<style lang="scss" src="@/assets/scss/modules/c-manage/customer-manage.scss"></style> | 
				
			|||
 | 
				
			|||
<script> | 
				
			|||
import mixinViewModule from '@/mixins/view-module' | 
				
			|||
import VDistpicker from 'v-distpicker' | 
				
			|||
import { Loading } from 'element-ui' | 
				
			|||
import componentInfo from '@/components/customer-manage/customer-info' | 
				
			|||
// import cloneDeep from 'lodash/cloneDeep' | 
				
			|||
 | 
				
			|||
export default { | 
				
			|||
  mixins: [mixinViewModule], | 
				
			|||
  data () { | 
				
			|||
    return { | 
				
			|||
      mixinViewModuleOptions: { | 
				
			|||
        getDataListURL: '/oper/crm/customer/getvalidcustomerlist', | 
				
			|||
        getDataListIsPage: false | 
				
			|||
      }, | 
				
			|||
      organizationLevels: ['社区级', '乡(镇、街道)级', '区县级', '市级', '省级'], | 
				
			|||
      genders: ['未知', '男', '女'], | 
				
			|||
      step: 1, | 
				
			|||
      details: [], | 
				
			|||
      customerId: '', | 
				
			|||
      agencyId: '', | 
				
			|||
      dataForm2: { | 
				
			|||
        customerName: '', | 
				
			|||
        organizationLevel: '' | 
				
			|||
      }, | 
				
			|||
      dataForm3: { | 
				
			|||
        customerId: '', | 
				
			|||
        agencyName: '', | 
				
			|||
        level: '', | 
				
			|||
        areaCode: '', | 
				
			|||
        province: '', | 
				
			|||
        city: '', | 
				
			|||
        district: '' | 
				
			|||
      }, | 
				
			|||
      dataForm4: { | 
				
			|||
        customerId: '', | 
				
			|||
        realName: '', | 
				
			|||
        gender: '', | 
				
			|||
        mobile: '', | 
				
			|||
        agencyId: '' | 
				
			|||
      }, | 
				
			|||
      checkMobile: (rule, value, callback) => { | 
				
			|||
        if (!Number.isInteger(value)) { | 
				
			|||
          return callback(new Error('手机号格式不正确')) | 
				
			|||
        } | 
				
			|||
        if (value.toString().length !== 11) { | 
				
			|||
          return callback(new Error('请输入11位长度的手机号')) | 
				
			|||
        } | 
				
			|||
        callback() | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  }, | 
				
			|||
  components: { | 
				
			|||
    VDistpicker, componentInfo | 
				
			|||
  }, | 
				
			|||
  computed: { | 
				
			|||
    dataRule () { | 
				
			|||
      return { | 
				
			|||
        customerName: [ | 
				
			|||
          { required: true, message: '请输入客户名称' } | 
				
			|||
        ], | 
				
			|||
        organizationLevel: [ | 
				
			|||
          { required: true, message: '请选择组织级别' } | 
				
			|||
        ], | 
				
			|||
        agencyName: [ | 
				
			|||
          { required: true, message: '请输入组织名称' } | 
				
			|||
        ], | 
				
			|||
        level: [ | 
				
			|||
          { required: true, message: '请选择组织级别' } | 
				
			|||
        ], | 
				
			|||
        areaCode: [ | 
				
			|||
          { required: true, message: '请输入地区编码' } | 
				
			|||
        ], | 
				
			|||
        province: [ | 
				
			|||
          { required: true, message: '请选择省份' } | 
				
			|||
        ], | 
				
			|||
        city: [ | 
				
			|||
          { required: true, message: '请选择城市' } | 
				
			|||
        ], | 
				
			|||
        district: [ | 
				
			|||
          { required: true, message: '请选择区县', trigger: 'blur' } | 
				
			|||
        ], | 
				
			|||
        realName: [ | 
				
			|||
          { required: true, message: '请输入姓名' } | 
				
			|||
        ], | 
				
			|||
        gender: [ | 
				
			|||
          { required: true, message: '请输入性别' } | 
				
			|||
        ], | 
				
			|||
        mobile: [ | 
				
			|||
          { required: true, message: '请输入手机号' }, | 
				
			|||
          { validator: this.checkMobile } | 
				
			|||
        ] | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  }, | 
				
			|||
  methods: { | 
				
			|||
    toStep (s) { | 
				
			|||
      this.step = s | 
				
			|||
    }, | 
				
			|||
    toSetUpStep (customerId, step) { | 
				
			|||
      this.customerId = customerId | 
				
			|||
      this.toStep(step) | 
				
			|||
    }, | 
				
			|||
    getCustomerDetail (id) { | 
				
			|||
      const url = '/oper/crm/customer/detail' | 
				
			|||
      this.$http.post( | 
				
			|||
        url, | 
				
			|||
        { customerId: id } | 
				
			|||
      ).then(({ data: res }) => { | 
				
			|||
        if (res.code !== 0) { | 
				
			|||
          return this.$message.error(res.msg) | 
				
			|||
        } else { | 
				
			|||
          console.log('获取详情成功') | 
				
			|||
          this.details = res.data | 
				
			|||
          console.log(res.data) | 
				
			|||
        } | 
				
			|||
      }).catch(() => { | 
				
			|||
        return this.$message.error('网络错误') | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    async onOpenDetails (customerId) { | 
				
			|||
      let loadingInstance = Loading.service() | 
				
			|||
      await this.getCustomerDetail(customerId) | 
				
			|||
      this.toStep(0) | 
				
			|||
      loadingInstance.close() | 
				
			|||
    }, | 
				
			|||
    submitDataForm2 () { | 
				
			|||
      console.log(this.dataForm2) | 
				
			|||
      const url = '/oper/crm/customer/add' | 
				
			|||
      const dataForm = this.dataForm2 | 
				
			|||
      return this.$http.post( | 
				
			|||
        url, | 
				
			|||
        dataForm | 
				
			|||
      ).then(({ data: res }) => { | 
				
			|||
        if (res.code !== 0) { | 
				
			|||
          return this.$message.error(res.msg) | 
				
			|||
        } else { | 
				
			|||
          this.customerId = res.data.customerId | 
				
			|||
          console.log('提交信息成功' + this.step) | 
				
			|||
        } | 
				
			|||
      }).catch(() => { | 
				
			|||
        return this.$message.error('网络错误') | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    submitDataForm3 () { | 
				
			|||
      this.dataForm3.customerId = this.customerId | 
				
			|||
      console.log(this.dataForm3) | 
				
			|||
      const url = '/oper/crm/customer/addrootagency' | 
				
			|||
      const dataForm = this.dataForm3 | 
				
			|||
      return this.$http.post( | 
				
			|||
        url, | 
				
			|||
        dataForm | 
				
			|||
      ).then(({ data: res }) => { | 
				
			|||
        if (res.code !== 0) { | 
				
			|||
          return this.$message.error(res.msg) | 
				
			|||
        } else { | 
				
			|||
          this.agencyId = res.data.agencyId | 
				
			|||
          console.log('提交信息成功' + this.step) | 
				
			|||
        } | 
				
			|||
      }).catch(() => { | 
				
			|||
        return this.$message.error('网络错误') | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    submitDataForm4 () { | 
				
			|||
      this.dataForm4.customerId = this.customerId | 
				
			|||
      this.dataForm4.agencyId = this.agencyId | 
				
			|||
      this.dataForm4.mobile = this.dataForm4.mobile.toString() | 
				
			|||
      console.log(this.dataForm4) | 
				
			|||
      const url = '/oper/crm/customer/addmanager' | 
				
			|||
      const dataForm = this.dataForm4 | 
				
			|||
      return this.$http.post( | 
				
			|||
        url, | 
				
			|||
        dataForm | 
				
			|||
      ).then(({ data: res }) => { | 
				
			|||
        if (res.code !== 0) { | 
				
			|||
          return this.$message.error(res.msg) | 
				
			|||
        } else { | 
				
			|||
          console.log('提交信息成功' + this.step) | 
				
			|||
        } | 
				
			|||
      }).catch(() => { | 
				
			|||
        return this.$message.error('网络错误') | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    async toNextStep () { | 
				
			|||
      let loadingInstance = Loading.service() | 
				
			|||
      if (this.step === 2) { | 
				
			|||
        await this.submitDataForm2() | 
				
			|||
        this.toStep(3) | 
				
			|||
      } else if (this.step === 3) { | 
				
			|||
        await this.submitDataForm3() | 
				
			|||
        this.toStep(4) | 
				
			|||
      } else if (this.step === 4) { | 
				
			|||
        await this.submitDataForm4() | 
				
			|||
        this.toStep(1) | 
				
			|||
      } | 
				
			|||
      loadingInstance.close() | 
				
			|||
    }, | 
				
			|||
    submitStepHandle () { | 
				
			|||
      this.$refs['dataForm'].validate((valid) => { | 
				
			|||
        if (!valid) { | 
				
			|||
          return false | 
				
			|||
        } | 
				
			|||
        this.toNextStep() | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    onChangeProvince (e) { | 
				
			|||
      this.dataForm3.areaCode = e.code | 
				
			|||
      this.dataForm3.province = e.value | 
				
			|||
    }, | 
				
			|||
    onChangeCity (e) { | 
				
			|||
      this.dataForm3.areaCode = e.code | 
				
			|||
      this.dataForm3.city = e.value | 
				
			|||
    }, | 
				
			|||
    onChangeArea (e) { | 
				
			|||
      this.dataForm3.areaCode = e.code | 
				
			|||
      this.dataForm3.district = e.value | 
				
			|||
    } | 
				
			|||
  }, | 
				
			|||
  watch: { | 
				
			|||
    step (nVal) { | 
				
			|||
      if (nVal === 1) { | 
				
			|||
        this.dataForm2 = { | 
				
			|||
          customerName: '', | 
				
			|||
          organizationLevel: '' | 
				
			|||
        } | 
				
			|||
        this.dataForm3 = { | 
				
			|||
          agencyName: '', | 
				
			|||
          level: '', | 
				
			|||
          areaCode: '', | 
				
			|||
          province: '', | 
				
			|||
          city: '', | 
				
			|||
          district: '' | 
				
			|||
        } | 
				
			|||
        this.dataForm4 = { | 
				
			|||
          realName: '', | 
				
			|||
          gender: '', | 
				
			|||
          mobile: '' | 
				
			|||
        } | 
				
			|||
        this.query() | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
					Loading…
					
					
				
		Reference in new issue