|
|
@@ -0,0 +1,386 @@
|
|
|
+<template>
|
|
|
+ <a-card>
|
|
|
+ <a-form class="smart-query-form" ref="stepFormRef" labelWrap :label-col="labelCol" :model="formModel" :rules="formRules">
|
|
|
+ <div class="approval-steps">
|
|
|
+ <div>
|
|
|
+ <div class="basic-title">
|
|
|
+ <div class="basic-title-left">
|
|
|
+ <div class="basic-title-line"></div>
|
|
|
+ <span class="basic-title-text">基本信息</span>
|
|
|
+ </div>
|
|
|
+ <div class="basic-title-right">
|
|
|
+ <a-button type="primary" @click="reset">重置</a-button>
|
|
|
+ <a-button type="primary" @click="submit">提交</a-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="steps-content">
|
|
|
+ <a-row :gutter="16" class="smart-query-form-row">
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="操作人" name="customerName" class="smart-query-form-item">
|
|
|
+ <a-input v-model:value="formModel.customerName" placeholder="请输入操作人" disabled />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="操作部门" name="customerType" class="smart-query-form-item">
|
|
|
+ <a-input v-model:value="formModel.socialCode" placeholder="请输入操作部门" disabled />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="操作时间" name="customerType" class="smart-query-form-item">
|
|
|
+ <a-input v-model:value="formModel.socialCode" placeholder="请输入操作时间" disabled />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <div class="basic-title">
|
|
|
+ <div class="basic-title-left">
|
|
|
+ <div class="basic-title-line"></div>
|
|
|
+ <span class="basic-title-text">服务商信息</span>
|
|
|
+ </div>
|
|
|
+ <div class="basic-title-right">
|
|
|
+ <!-- <a-button type="primary">提交</a-button> -->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="steps-content">
|
|
|
+ <a-row :gutter="16" class="smart-query-form-row">
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="类型" name="socialCode" class="smart-query-form-item">
|
|
|
+ <DictSelect key-code="BLINK_CUSTOMER_TYPE" v-model:value="formModel.customerType" placeholder="请选择服务商类型" width="100%" />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ <a-row :gutter="16" class="smart-query-form-row">
|
|
|
+ <a-col :span="16">
|
|
|
+ <a-form-item label="服务商名称" name="invoiceTitle" class="smart-query-form-item">
|
|
|
+ <a-input v-model:value="formModel.invoiceTitle" placeholder="请输入服务商名称" />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="社会统一代码" name="invoiceCode" class="smart-query-form-item">
|
|
|
+ <a-input v-model:value="formModel.invoiceCode" placeholder="请输入社会统一代码" />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ <a-row :gutter="16" class="smart-query-form-row">
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="省市区" name="invoiceAddress" class="smart-query-form-item">
|
|
|
+ <AreaCascader
|
|
|
+ type="province_city_district"
|
|
|
+ style="width: 100%"
|
|
|
+ v-model:value="provinceCityDistrict"
|
|
|
+ placeholder="请选择省市区"
|
|
|
+ @change="changeArea"
|
|
|
+ />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="详细地址" name="invoiceMobile" class="smart-query-form-item">
|
|
|
+ <a-input v-model:value="formModel.invoiceMobile" placeholder="请输入详细地址" />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="对接人" name="invoiceBankName" class="smart-query-form-item">
|
|
|
+ <a-input v-model:value="formModel.invoiceBankName" placeholder="请选择对接人" />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ <a-row :gutter="16" class="smart-query-form-row">
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="注册时间" name="invoiceAddress" class="smart-query-form-item">
|
|
|
+ <a-input v-model:value="formModel.invoiceAddress" placeholder="请输入注册时间" />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="注册资本" name="invoiceMobile" class="smart-query-form-item">
|
|
|
+ <a-input v-model:value="formModel.invoiceMobile" placeholder="请输入注册资本" />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ <a-row :gutter="16" class="smart-query-form-row">
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="对接人电话" name="invoiceAddress" class="smart-query-form-item">
|
|
|
+ <a-input v-model:value="formModel.invoiceAddress" placeholder="请输入对接人电话" />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ <a-row :gutter="16" class="smart-query-form-row">
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="公司简介" name="invoiceAddress" class="smart-query-form-item">
|
|
|
+ <a-input v-model:value="formModel.invoiceAddress" placeholder="请输入公司简介" />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ <a-row :gutter="16" class="smart-query-form-row">
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="经营范围" name="invoiceAddress" class="smart-query-form-item">
|
|
|
+ <a-input v-model:value="formModel.invoiceAddress" placeholder="请输入经营范围" />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ <a-row :gutter="16" class="smart-query-form-row" style="display: flex; align-items: center">
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="营业执照" name="attachment" class="smart-query-form-item">
|
|
|
+ <Upload
|
|
|
+ :defaultFileList="defaultFileListYY"
|
|
|
+ :maxUploadSize="1"
|
|
|
+ buttonText="上传营业执照"
|
|
|
+ list-type="picture-card"
|
|
|
+ @change="changeAttachmentYY"
|
|
|
+ />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="身份证人像面" name="attachment" class="smart-query-form-item">
|
|
|
+ <Upload
|
|
|
+ :defaultFileList="defaultFileListFront"
|
|
|
+ :maxUploadSize="1"
|
|
|
+ buttonText="上传身份证人像面"
|
|
|
+ list-type="picture-card"
|
|
|
+ @change="changeAttachmentFront"
|
|
|
+ />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item label="身份证国徽面" name="attachment" class="smart-query-form-item">
|
|
|
+ <Upload
|
|
|
+ :defaultFileList="defaultFileListBack"
|
|
|
+ :maxUploadSize="1"
|
|
|
+ buttonText="上传身份证国徽面"
|
|
|
+ list-type="picture-card"
|
|
|
+ @change="changeAttachmentBack"
|
|
|
+ />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <div class="basic-title">
|
|
|
+ <div class="basic-title-left">
|
|
|
+ <div class="basic-title-line"></div>
|
|
|
+ <span class="basic-title-text">其他信息</span>
|
|
|
+ </div>
|
|
|
+ <div class="basic-title-right">
|
|
|
+ <!-- <a-button type="primary">提交</a-button> -->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="steps-content">
|
|
|
+ <a-row :gutter="16" class="smart-query-form-row">
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="附件" name="attachment" class="smart-query-form-item">
|
|
|
+ <Upload
|
|
|
+ :defaultFileList="defaultFileList"
|
|
|
+ :maxUploadSize="10"
|
|
|
+ :folder="FILE_FOLDER_TYPE_ENUM.COMMON.value"
|
|
|
+ buttonText="上传附件"
|
|
|
+ listType="text"
|
|
|
+ extraMsg="最多上传10个附件"
|
|
|
+ @change="changeAttachment"
|
|
|
+ />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </a-form>
|
|
|
+ </a-card>
|
|
|
+</template>
|
|
|
+<script setup>
|
|
|
+ import { onMounted, reactive, ref, useAttrs } from 'vue';
|
|
|
+ import { useRouter } from 'vue-router';
|
|
|
+ import { message, Modal } from 'ant-design-vue';
|
|
|
+ import _ from 'lodash';
|
|
|
+ import { clientManageApi } from '/@/api/market-manage/index.js';
|
|
|
+ import AreaCascader from '/@/components/framework/area-cascader/index.vue';
|
|
|
+ import DictSelect from '/@/components/support/dict-select/index.vue';
|
|
|
+ import Upload from '/@/components/support/file-upload/index.vue';
|
|
|
+ import { FILE_FOLDER_TYPE_ENUM } from '/@/constants/support/file-const';
|
|
|
+
|
|
|
+ const stepFormRef = ref(null);
|
|
|
+ const router = useRouter();
|
|
|
+
|
|
|
+ // --------------------- 数据 ---------------------
|
|
|
+ const formModel = reactive({
|
|
|
+ customerCode: undefined, //客户编码
|
|
|
+ customerName: undefined, //客户名称
|
|
|
+ socialCode: undefined, //社会统一信用代码
|
|
|
+ partnerLevel: undefined, //客户级别
|
|
|
+ customerStatus: undefined, //客户状态
|
|
|
+ province: undefined, //省份
|
|
|
+ provinceName: undefined,
|
|
|
+ city: undefined, //城市
|
|
|
+ cityName: undefined,
|
|
|
+ area: undefined, //区或县
|
|
|
+ areaName: undefined,
|
|
|
+ address: undefined, //详细地址
|
|
|
+ customerType: undefined, //客户类型
|
|
|
+ customerManager: undefined, //客户对接人
|
|
|
+ customerManagerMobile: undefined, //客户对接人电话
|
|
|
+ companyRegisterCapital: undefined, //注册资本
|
|
|
+ companyRegisterDate: undefined, //注册时间
|
|
|
+ customerDescription: undefined, //公司简介
|
|
|
+ customerNature: undefined, //经营范围
|
|
|
+ customerRemark: undefined, //备注
|
|
|
+ invoiceTitle: undefined, //发票抬头
|
|
|
+ invoiceCode: undefined, //开票税号
|
|
|
+ invoiceAddress: undefined, //开票地址
|
|
|
+ invoiceMobile: undefined, //开票电话
|
|
|
+ invoiceBankName: undefined, //开户银行
|
|
|
+ invoiceBankAccount: undefined, //银行账户
|
|
|
+ invoiceType: undefined, //开票类型
|
|
|
+ attachment: undefined, //附件集合
|
|
|
+ });
|
|
|
+
|
|
|
+ // --------------------- 校验规则 ---------------------
|
|
|
+ const formRules = {
|
|
|
+ // customerName: [{ required: true, message: '请输入客户名称', trigger: 'change' }],
|
|
|
+ };
|
|
|
+
|
|
|
+ const labelCol = { style: { width: '110px', height: '42px' } };
|
|
|
+
|
|
|
+ // ----------------------- 上传附件 ----------------------------
|
|
|
+ // 通用的文件列表更新函数
|
|
|
+ function updateFileList(fileList, defaultFileListRef, formKey) {
|
|
|
+ defaultFileListRef.value = fileList;
|
|
|
+ formModel[formKey] = _.isEmpty(fileList) ? [] : fileList;
|
|
|
+ }
|
|
|
+
|
|
|
+ const defaultFileList = ref([]);
|
|
|
+ const defaultFileListYY = ref([]);
|
|
|
+ const defaultFileListFront = ref([]);
|
|
|
+ const defaultFileListBack = ref([]);
|
|
|
+ function changeAttachmentYY(fileList) {
|
|
|
+ updateFileList(fileList, defaultFileListYY, 'photo1');
|
|
|
+ }
|
|
|
+ function changeAttachmentFront(fileList) {
|
|
|
+ updateFileList(fileList, defaultFileListFront, 'photo2');
|
|
|
+ }
|
|
|
+ function changeAttachmentBack(fileList) {
|
|
|
+ updateFileList(fileList, defaultFileListBack, 'photo3');
|
|
|
+ }
|
|
|
+ function changeAttachment(fileList) {
|
|
|
+ updateFileList(fileList, defaultFileListYY, 'attachment');
|
|
|
+ }
|
|
|
+
|
|
|
+ // ----------------------- 步骤相关 ---------------------------
|
|
|
+
|
|
|
+ const submit = () => {
|
|
|
+ console.log('formModel', formModel);
|
|
|
+ stepFormRef.value
|
|
|
+ .validateFields()
|
|
|
+ .then((values) => {
|
|
|
+ Modal.confirm({
|
|
|
+ title: '提示',
|
|
|
+ content: '确定要提交吗?',
|
|
|
+ okText: '确认',
|
|
|
+ onOk() {
|
|
|
+ postFormData();
|
|
|
+ },
|
|
|
+ cancelText: '取消',
|
|
|
+ onCancel() {},
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch((error) => {
|
|
|
+ console.log('step1_error', error);
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ const postFormData = () => {
|
|
|
+ clientManageApi.createServiceInfo(formModel).then((res) => {
|
|
|
+ message.success('提交成功');
|
|
|
+ router.push({ path: 'market-manage/internal-manage/serviceProvider-manage/service-list' });
|
|
|
+ });
|
|
|
+ };
|
|
|
+ //------------------------地区-------------------------------------
|
|
|
+
|
|
|
+ const provinceCityDistrict = ref([]);
|
|
|
+ function changeArea(value, selectedOptions) {
|
|
|
+ Object.assign(formModel, {
|
|
|
+ province: '',
|
|
|
+ provinceName: '',
|
|
|
+ city: '',
|
|
|
+ cityName: '',
|
|
|
+ area: '',
|
|
|
+ areaName: '',
|
|
|
+ });
|
|
|
+ if (!_.isEmpty(selectedOptions)) {
|
|
|
+ // 地区信息
|
|
|
+ formModel.province = provinceCityDistrict.value[0].value;
|
|
|
+ formModel.provinceName = provinceCityDistrict.value[0].label;
|
|
|
+
|
|
|
+ formModel.city = provinceCityDistrict.value[1].value;
|
|
|
+ formModel.cityName = provinceCityDistrict.value[1].label;
|
|
|
+ if (provinceCityDistrict.value[2]) {
|
|
|
+ formModel.area = provinceCityDistrict.value[2].value;
|
|
|
+ formModel.areaName = provinceCityDistrict.value[2].label;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ console.log('provinceCityDistrict', provinceCityDistrict.value);
|
|
|
+ }
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped lang="less">
|
|
|
+ ::v-deep .ant-row {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+ .approval-steps {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 20px;
|
|
|
+ // width: 1350px;
|
|
|
+ margin: 0 auto;
|
|
|
+
|
|
|
+ .basic-title {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ width: 100%;
|
|
|
+ height: 40px;
|
|
|
+ padding: 0 16px 4px 16px;
|
|
|
+ border-bottom: 2px solid #f6f6f6;
|
|
|
+ background: #ffffff;
|
|
|
+ border-top-left-radius: 8px;
|
|
|
+ border-top-right-radius: 8px;
|
|
|
+
|
|
|
+ .basic-title-left {
|
|
|
+ height: 100%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ .basic-title-line {
|
|
|
+ width: 4px;
|
|
|
+ height: 20px;
|
|
|
+ border-radius: 4px;
|
|
|
+ background: #267ef8;
|
|
|
+ margin-right: 5px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .basic-title-text {
|
|
|
+ font-size: 16px;
|
|
|
+ font-style: normal;
|
|
|
+ font-weight: 600;
|
|
|
+ line-height: 20px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .basic-title-right {
|
|
|
+ display: flex;
|
|
|
+ gap: 10px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .steps-content {
|
|
|
+ margin-top: 14px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .steps-action {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ margin-top: 18px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+</style>
|