jiangping
2024-01-26 a76c5c86ac9af71da45bf78c825a2c7aa843b4c8
platform/src/components/business/OperaCompanyWindow.vue
@@ -1,335 +1,150 @@
<template>
    <GlobalWindow
        :title="title"
        width="50%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <el-form :model="form" ref="form" :rules="rules" style="width: 50%;">
            <el-form-item label="公司名称" prop="name">
                <el-input v-model="form.name" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="统一信用代码" prop="code">
                <el-input v-model="form.code" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="法人姓名" prop="legalName" v-if="form.type !== 1">
                <el-input v-model="form.legalName" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="绑定手机号" prop="phone" v-if="form.type !== 1">
                <div style="width: 100%; display: flex; align-items: center;">
                    <el-input v-model="form.phone" maxlength="11" type="number" style="flex: 1;" placeholder="请输入" v-trim/>
                    <el-button type="primary" style="flex-shrink: 0; margin-left: 15px;" @click="send" v-if="num === 0">发送验证码</el-button>
                    <el-button type="primary" style="flex-shrink: 0; margin-left: 15px;" v-else>{{num}}s</el-button>
                </div>
            </el-form-item>
            <el-form-item label="验证码" prop="captche" v-if="form.type !== 1">
                <el-input v-model="form.captche" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="公司账号" prop="username" v-if="form.type !== 1">
                <el-input v-model="form.username" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="认证邮箱" prop="email" v-if="form.type !== 1">
                <el-input v-model="form.email" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="纳税人识别号" prop="taxCode">
                <el-input v-model="form.taxCode" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="银行账号" prop="taxAccount">
                <el-input v-model="form.taxAccount" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="开户行" prop="taxBank">
                <el-input v-model="form.taxBank" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="地址、电话" prop="taxAddr">
                <el-input v-model="form.taxAddr" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="电子发票接收地址" prop="invoiceEmail">
                <el-input v-model="form.invoiceEmail" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="纸质发票接收地址" prop="invoiceAddr">
                <el-input v-model="form.invoiceAddr" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="营业执照" prop="businessImg">
                <UploadAvatarImage :uploadData="{ folder: 'company' }" :file="form.file" @uploadSuccess="result" />
            </el-form-item>
            <el-form-item label="法人身份证" prop="idcardImgList">
                <div style="width: 100%; display: flex; align-items: center;">
                    <UploadAvatarImage :uploadData="{ folder: 'company' }" :file="form.file1" @uploadSuccess="result1" />
                    <div style="width: 15px;height: 100%;"></div>
                    <UploadAvatarImage :uploadData="{ folder: 'company' }" :file="form.file2" @uploadSuccess="result2" />
                </div>
            </el-form-item>
            <el-form-item label="电子签章" prop="signImg">
                <UploadAvatarImage :uploadData="{ folder: 'company' }" :file="form.file3" @uploadSuccess="result3" />
            </el-form-item>
        </el-form>
        <el-button type="primary" style="margin-bottom: 15px;" @click="add" v-if="form.type !== 1">添加</el-button>
        <el-table
            v-if="form.type !== 1"
            :data="form.solutionList"
            border
            style="width: 100%">
            <el-table-column
                label="序号"
                align="center"
                width="80">
                <template slot-scope="scope">
                    <span>{{scope.$index + 1}}</span>
                </template>
            </el-table-column>
            <el-table-column
                align="center"
                label="保险方案">
                <template slot-scope="{row}">
                    <el-select v-model="row.solutionBaseId" placeholder="请选择">
                        <el-option
                            v-for="item in programme"
                            :key="item.id"
                            :label="item.name"
                            :value="item.id">
                        </el-option>
                    </el-select>
                </template>
            </el-table-column>
            <el-table-column
                align="center"
                label="加减保功能">
                <template slot-scope="{row}">
                    <el-checkbox :true-label="1" :false-label="0" v-model="row.canAdd">加保</el-checkbox>
                    <el-checkbox :true-label="1" :false-label="0" v-model="row.canReduce">减保</el-checkbox>
                </template>
            </el-table-column>
            <el-table-column
                label="操作"
                align="center"
                width="100">
                <template slot-scope="scope">
                    <el-button type="text" size="small" style="color: red;" @click="dele(scope.$index)">删除</el-button>
                </template>
            </el-table-column>
        </el-table>
    </GlobalWindow>
  <GlobalAlertWindow
    :title="title"
    :visible.sync="visible"
    :confirm-working="isWorking"
    width="750px"
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" label-width="125px" :rules="rules">
      <el-form-item label="企业全称" prop="name">
        <el-input v-model="form.name" placeholder="请输入客户企业全称,不超过30字" v-trim/>
        企业名称需与工商部门登记信息一致
      </el-form-item>
      <el-form-item label="客户简称" prop="shortName">
        <el-input v-model="form.shortName" placeholder="请输入客户简称" v-trim/>
      </el-form-item>
      <el-form-item label="统一信用代码" prop="creditCode">
        <el-input v-model="form.creditCode" placeholder="请输入统一信用代码" v-trim/>
        统一信用代码需与工商部门登记信息一致
      </el-form-item>
      <el-form-item label="登录账号" prop="managerUserName">
        <el-input v-model="form.managerUserName" :disabled="!!this.form.id" placeholder="请输入登录账号" v-trim/>
      </el-form-item>
      <el-form-item label="系统使用有效期" prop="oepnValidDate">
        <el-date-picker v-model="form.oepnValidDate" value-format="yyyy-MM-dd" :disabled="!!this.form.id" placeholder="请输入系统使用有效期"></el-date-picker>
      </el-form-item>
      <el-form-item label="主播数量限制" prop="userNum">
        <el-input v-model="form.userNum" :disabled="!!this.form.id" placeholder="请输入主播数量限制" v-trim/>
        输入0表示不限制
      </el-form-item>
      <el-form-item label="销售人员" prop="salesmanId">
        <!-- <el-input v-model="form.salesmanId" placeholder="请输入销售人员编码" v-trim/> -->
        <el-select v-model="form.salesmanId" clearable placeholder="请选择" filterable >
          <el-option v-for="item in sales" :label="item.realname" :key="item.id" :value="item.id"></el-option>
        </el-select>
      </el-form-item>
      <div class="more">
        <div class="more-title">更多设置</div>
        <el-form-item label="联系人" prop="linkname">
          <el-input v-model="form.linkname" placeholder="请输入联系人" v-trim/>
        </el-form-item>
        <el-form-item label="联系人电话" prop="linkephone">
          <el-input v-model="form.linkephone" placeholder="请输入联系人电话" v-trim/>
        </el-form-item>
      </div>
    </el-form>
  </GlobalAlertWindow>
</template>
<script>
    import BaseOpera from '@/components/base/BaseOpera'
    import GlobalWindow from '@/components/common/GlobalWindow'
    import UploadAvatarImage from '@/components/common/UploadAvatarImage'
    import { all } from '@/api/business/solutions'
    import { sendSms } from '@/api/business/smsEmail'
    export default {
        name: 'OperaCompanyWindow',
        extends: BaseOpera,
        components: { GlobalWindow, UploadAvatarImage },
        data () {
            return {
                // 表单数据
                form: {
                    id: null,
                    name: '',
                    code: '',
                    legalName: '',
                    taxCode: '',
                    taxAccount: '',
                    username: '',
                    taxBank: '',
                    taxAddr: '',
                    invoiceEmail: '',
                    invoiceAddr: '',
                    phone: '',
                    email: '',
                    captche: '',
                    businessImg: {
                        fileurl: '',
                        name: ''
                    },
                    idcardImgList: [],
                    signImg: {
                        fileurl: '',
                        name: ''
                    },
                    solutionList: [
                        {
                            solutionBaseId: '',
                            canAdd: 0,
                            canReduce: 0
                        }
                    ],
                    type: '',
                    file: {
                        imgurl: '',
                        imgurlfull: ''
                    },
                    file1: {
                        imgurl: '',
                        imgurlfull: ''
                    },
                    file2: {
                        imgurl: '',
                        imgurlfull: ''
                    },
                    file3: {
                        imgurl: '',
                        imgurlfull: ''
                    },
                },
                timer: null,
                num: 0,
                // 验证规则
                rules: {
                    name: [
                        { required: true, message: '请输入公司名称' }
                    ],
                    code: [
                        { required: true, message: '请输入统一信用代码' }
                    ],
                    captche: [
                        { required: true, message: '请输入验证码' }
                    ],
                    legalName: [
                        { required: true, message: '请输入法人姓名' }
                    ],
                    phone: [
                        { required: true, message: '请输入手机号' }
                    ],
                    taxAccount: [
                        { required: true, message: '请输入手机号' }
                    ],
                    email: [
                        { required: true, message: '请输入认证邮箱' }
                    ],
                    businessImg: [
                        { required: true, message: '请上传营业执照' }
                    ],
                    idcardImgList: [
                        { required: true, message: '请上传法人身份证' }
                    ],
                    signImg: [
                        { required: true, message: '请上传电子签章' }
                    ],
                    username: [
                        { required: true, message: '请输入公司账号' }
                    ]
                },
                programme: []
            }
        },
        created () {
            this.config({
                api: '/business/company',
                'field.id': 'id'
            })
        },
        watch: {
            visible: {
                handler(news) {
                    if (news) {
                        clearInterval(this.timer)
                        this.num = 0
                    }
                }
            }
        },
        methods: {
            send() {
                if (!this.form.phone) {
                    this.$message.warning('请输入手机号')
                    return
                }
                sendSms({ phone: this.form.phone })
                    .then(res => {
                        this.num = 60
                        this.setTime()
                    })
            },
            setTime() {
                this.timer = setInterval(() => {
                    this.num -= 1
                    if (this.num === 0) {
                        clearInterval(this.timer)
                        this.num = 0
                    }
                }, 1000)
            },
            open (title, target) {
                this.title = title
                this.visible = true
                this.getAll()
                // 新建
                if (target == null) {
                    this.$nextTick(() => {
                        this.$refs.form.resetFields()
                        this.form[this.configData['field.id']] = null
                    })
                    return
                }
                // 编辑
                this.$nextTick(() => {
                    for (const key in this.form) {
                        this.form[key] = target[key]
                    }
                })
            },
            // 获取全部方案
            getAll() {
                all({})
                    .then(res => {
                        this.programme = res
                    })
            },
            dele(index) {
                if (this.form.solutionList.length === 1) {
                    this.$message.warning('至少保留一项')
                    return
                }
                this.form.solutionList.splice(index, 1)
            },
            add() {
                this.form.solutionList.push({
                    solutionName: '',
                    canAdd: '',
                    canReduce: ''
                })
            },
            handleRemove(file, fileList) {
                console.log(file, fileList);
            },
            // 接收营业执照数据
            result(data) {
                this.form.businessImg = {
                    fileurl: '',
                    name: ''
                }
                this.form.businessImg.fileurl = data.imgurl
                this.form.businessImg.name = data.name
            },
            // 身份证照片1
            result1(data) {
                this.form.idcardImgList[0] = {
                    fileurl: '',
                    name: ''
                }
                this.form.idcardImgList[0] = { fileurl: data.imgurl, name: data.name }
            },
            // 身份证照片2
            result2(data) {
                this.form.idcardImgList[1] = {
                    fileurl: '',
                    name: ''
                }
                this.form.idcardImgList[1] = { fileurl: data.imgurl, name: data.name }
            },
            // 电子签章
            result3(data) {
                this.form.signImg = {
                    fileurl: '',
                    name: ''
                }
                this.form.signImg.fileurl = data.imgurl
                this.form.signImg.name = data.name
            }
        }
import BaseOpera from '@/components/base/BaseOpera'
import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
import { findAllList } from '@/api/system/user'
import { loginNameRule, creditCode } from '@/utils/form'
export default {
  name: 'OperaCompanyWindow',
  extends: BaseOpera,
  components: { GlobalAlertWindow },
  data () {
    return {
      // 表单数据
      form: {
        id: null,
        managerUserName: '',
        name: '',
        shortName: '',
        remark: '',
        managerId: '',
        linkname: '',
        linkephone: '',
        creditCode: '',
        userNum: '5',
        oepnValidDate: '',
        salesmanId: ''
      },
      sales: [],
      // 验证规则
      rules: {
        name: [
          { required: true, message: '请输入客户企业全称', tigger: 'blur'}
        ],
        managerUserName: [
          { required: true, validator: loginNameRule, message: '请输入登录账号', tigger: 'blur'}
        ],
        creditCode: [
          { validator: creditCode, trigger: 'blur' }
        ],
        openUserNum: [
          { pattern: /^[0-9]+$/, message: '只可以输入数字', trigger: 'change' }
        ]
      }
    }
  },
  created () {
    this.config({
      api: '/business/company',
      'field.id': 'id'
    })
    findAllList({ type: 0 })
      .then(res => {
        this.sales = res
      })
  },
  methods: {
    open(title, target) {
      this.title = title
      this.visible = true
      // 新建
      if (target == null) {
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          let data = new Date(new Date().getTime() + 31536000000)
          this.form.oepnValidDate = `${data.getFullYear()}-${data.getMonth() +1}-${data.getDate()}`
          this.form[this.configData['field.id']] = null
        })
        return
      }
      // 编辑
      this.$nextTick(() => {
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        this.form.multifileList.forEach(item => {
          item.url = item.filefullurl
        })
      })
    },
  },
}
</script>
<style lang="scss" scoped>
.more {
  margin-top: 40px;
  .more-title {
    font-weight: 600;
    font-size: 18px;
    margin-bottom: 10px;
  }
}
::v-deep .el-input {
  width: 300px;
  margin-right: 10px;
}
</style>