Browse Source

商家管理 接口

cxmo 1 year ago
parent
commit
86d58e38e8

+ 108 - 0
src/api/modules/businessCustom.js

@@ -0,0 +1,108 @@
+/**
+ * 商家管理api
+ */
+import http from "@/api/http.js"
+
+export const businessCustomInterence = {
+    /**
+     * 获取商家列表
+     * @param Keyword 关键字
+     * @param SellerIds 销售ID(多选),英文逗号拼接
+     * @param SigningStatus 签约状态: 1-首次签约; 2-续约中; 3-已终止
+     * @param Province 省份(多选),英文逗号拼接
+     * @param City 城市(多选),英文逗号拼接
+     * @param SortParam 排序字段: 1-签约时间; 2-到期时间; 3-创建时间; 4-用户上限
+     * @param SortType 排序类型: 1-正序; 2-倒序
+     * @param PageSize 每页数据量
+     * @param CurrentIndex 页码
+     * @returns 
+     */
+    getBusinessList:(params)=>{
+        return http.get('/eta_business/page_list',params)
+    },
+    /**
+     * 获取商家签约列表
+     * @param EtaBusinessId 商家ID
+     */
+    getContractList:(params)=>{
+        return http.get('/eta_business/contract_list',params)
+    },
+    /**
+     * 获取操作日志列表
+     * @param EtaBusinessId 商家ID
+     */
+    getTimeLineList:(params)=>{
+        return http.get('/eta_business/operate_record_list',params)
+    },
+    /**
+     * 获取商家详情
+     * @param EtaBusinessId 商家ID
+     */
+    getBusinessDetail:(params)=>{
+        return http.get('/eta_business/detail',params)
+    },
+    /**
+     * 添加续约
+     * @param EtaBusinessId 商家ID
+     * @param SigningTime 签约时间
+     * @param ExpiredTime 到期时间
+     * @returns 
+     */
+    addNewContract:(params)=>{
+        return http.post('/eta_business/signing',params)
+    },
+    /**
+     * 修改销售
+     * @param EtaBusinessId 商家ID
+     * @param SellerId 销售ID
+     * @param SellerName 销售名称
+     */
+    changeBusinessSeller:(params)=>{
+        return http.post('/eta_business/move_seller',params)
+    },
+    /**
+     * 启用禁用商家
+     * @param EtaBusinessId Integer 商家ID
+     */
+    changeBusinessStatus:(params)=>{
+        return http.post('/eta_business/enable',params)
+    },
+    /**
+     * 编辑商家
+     * @param EtaBusinessId Integer 商家ID
+     * @param Province String 省份
+     * @param City String 城市
+     * @param Leader String 决策人姓名
+     * @param IndustryId Integer 行业ID
+     * @param IndustryName String 行业名称
+     * @param CapitalScale String 资金规模
+     * @param ResearchTeamSize String 研究团队规模
+     * @param UserMax Integer 用户上限
+     */
+    editBusiness:(params)=>{
+        return http.post('/eta_business/edit',params)
+    },
+    /**
+     * 添加商家
+     * @param BusinessName String 商家名称
+     * @param CreditCode String 社会信用码
+     * @param RegionType String 所属区域:国内;海外
+     * @param Province String 省份
+     * @param City String 城市
+     * @param SellerId Integer 销售ID
+     * @param SellerName String 销售姓名
+     * @param Leader String 决策人姓名
+     * @param IndustryId Integer 行业ID
+     * @param IndustryName String 行业名称
+     * @param CapitalScale String 资金规模
+     * @param ResearchTeamSize String 研究团队规模
+     * @param UserMax Integer 用户上限
+     * @param SigningTime String 签约时间(IsCheck为false时必填)
+     * @param ExpiredTime String 到期时间(IsCheck为false时必填)
+     * @param IsCheck Boolean 是否仅校验,为true时校验参数但不实际新增
+     * @returns 
+     */
+    addBusiness:(params)=>{
+        return http.post('/eta_business/add',params)
+    }
+}

+ 1 - 1
src/routes/modules/customRoutes.js

@@ -389,7 +389,7 @@ export default [
       {
         path:'editETABusiness',
         name:"编辑商家",
-        component: () => import('@/views/business_ETA_manage/businessEdit.vue'),
+        component: () => import('@/views/business_ETA_manage/businessDetail.vue'),
 				hidden: false,
         meta:{
           pathFrom: "businessETAList",

+ 381 - 4
src/views/business_ETA_manage/businessDetail.vue

@@ -1,15 +1,392 @@
 <template>
-    <div>
-        business-detail
+    <div class="business-detail-wrap">
+        <div class="business-detail">
+            <Steps 
+                :activeStep="step"
+                :stepsArr="stepsArr"
+                @changeActiveStep="changeActiveStep"
+            />
+            <div class="first-step-form-wrap" v-show="step===1">
+                <el-form 
+                    :model="firstFormData" 
+                    ref="firstFormEl" 
+                    label-width="120px"
+                    inline
+                    :rules="rules"
+                    :disabled="!isEditModel"
+                    class="first-step-form"
+                >
+                    <div class="form-line">
+                        <el-form-item label="商家名称" prop="name">
+                            <el-input disabled placeholder="请输入商家名称" v-model="firstFormData.name"/>
+                        </el-form-item>
+                        <el-form-item label="商家ID" prop="id">
+                            <el-input disabled placeholder="请输入商家ID" v-model="firstFormData.id"/>
+                        </el-form-item>
+                    </div>
+                    <div class="form-line">
+                        <el-form-item label="所属区域" prop="areaType">
+                            <el-radio-group v-model="firstFormData.areaType" disabled>
+                                <el-radio :label="1" border>国内</el-radio>
+                                <el-radio :label="2" border>海外</el-radio>
+                            </el-radio-group>
+                        </el-form-item>
+                        <el-form-item label="商家地址" prop="city">
+                            <el-cascader 
+                                v-model="firstFormData.address"
+                                :props="locationProps"
+                                clearable 
+                                :options="locationOptions"  
+                                @change="handleChangeLocation" 
+                                placeholder="请选择客户地址" 
+                            />
+                        </el-form-item>
+                    </div>
+                    <div class="form-line">
+                        <el-form-item label="社会信用码" prop="creditCode">
+                            <el-input disabled placeholder="请输入社会信用码" v-model="firstFormData.creditCode"/>
+                        </el-form-item>
+                        <el-form-item label="研究团队规模" prop="teamSize">
+                            <el-select 
+                                v-model="firstFormData.teamSize" 
+                                placeholder="请选择研究团队规模"
+                                clearable
+                            >
+                                <el-option
+                                    v-for="item in teamSizeOpts"
+                                    :key="item.val"
+                                    :label="item.label"
+                                    :value="item.val">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                    </div>
+                    <div class="form-line">
+                        <el-form-item label="决策人" prop="decisionMaker">
+                            <el-input placeholder="请输入决策人" v-model="firstFormData.decisionMaker"/>
+                        </el-form-item>
+                        <el-form-item label="所属行业" prop="industry">
+                            <el-select 
+                                v-model="firstFormData.industry" 
+                                placeholder="请选择行业" 
+                                clearable
+                            >
+                                <el-option
+                                    v-for="item in tradeArr"
+                                    :key="item.IndustryId"
+                                    :label="item.IndustryName"
+                                    :value="item.IndustryId">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                    </div>
+                    <div class="form-line">
+                        <el-form-item label="资金规模" prop="fundsize">
+                            <el-input placeholder="请输入资金规模" v-model="firstFormData.fundsize"/>
+                        </el-form-item>
+                        <el-form-item label="用户上限" prop="userMax">
+                            <el-input type="number" placeholder="请输入用户上限" v-model="firstFormData.userMax"/>
+                        </el-form-item>
+                    </div>
+                    <div class="form-line">
+                        <el-form-item label="所属销售" prop="saller">
+                            <el-select 
+                                v-model="firstFormData.saller" 
+                                placeholder="请选择销售" 
+                                filterable
+                            >
+                                <el-option
+                                    v-for="item in salesArr"
+                                    :key="item.AdminId"
+                                    :label="item.RealName"
+                                    :value="item.AdminId"
+                                />
+                            </el-select>
+                        </el-form-item>
+                    </div>
+                    
+                </el-form>
+            </div>
+            <div class="second-step-form-wrap" v-show="step===2">
+                <el-table :data="recordData" border>
+                    <el-table-column
+                        v-for="item in tableColOpts"
+                        :key="item.key"
+                        :prop="item.key"
+                        :label="item.label"
+                        align="center"
+                    >
+                    </el-table-column>
+                </el-table>
+                <el-button v-if="isEditModel" type="text">添加续约</el-button>
+            </div>
+        </div>
+        <div class="business-other">
+            <div class="btn-wrap"></div>
+            <div class="time-line-wrap">
+                <el-timeline>
+                    <el-timeline-item
+                        v-for="(activity, index) in activities"
+                        :key="index"
+                        :timestamp="activity.CreateTime">
+                        {{activity.OperationRemark}}
+                    </el-timeline-item>
+                </el-timeline>
+            </div>
+        </div>
+        
     </div>
 </template>
 
 <script>
+import { customInterence } from '@/api/api.js'
+import autocomplete from "@/components/autocomplete.vue";
+import Steps from "./components/Steps.vue";
+import {locationOptions} from "@/views/custom_manage/customList/location"
 export default {
+    components: {autocomplete,Steps},
+    data() {
+        return {
+            stepsArr:[{
+                finished:false,
+                text:'基础信息'
+            },{
+                finished:false,
+                text:'签约信息'
+            }],
+            locationOptions,
+            locationProps:{
+                value:'name',
+                children:'city',
+                label:'name'
+            },
 
+            isCheckCompanyInfo:false, //
+			checkCompanyfocusIs:false, //
+			inquireSuccess:false,
+            nameRepeat:false,
+			codeRepeat:false,
+            isCheck:false,//检查客户弹窗
+			repeatId:'',//重复公司id
+			repeatName:'',//重复公司类型
+
+            salesArr:[],
+
+            step:1,//第几步
+            teamSizeOpts:[
+                {
+                    val:'50人及以下',
+                    label:'50人及以下'
+                },
+                {
+                    val:'200人及以下',
+                    label:'200人及以下'
+                },
+                {
+                    val:'超过200人',
+                    label:'超过200人'
+                }
+            ],
+            tradeArr:[],
+            firstFormData:{
+                areaType:1,//1国内 2国外
+                name:'',
+                creditCode:'',
+                address:'',
+                decisionMaker:'',
+                teamSize:'',
+                fundsize:'',
+                industry:'',
+                userMax:'',
+                saller:''
+            },
+            rules:{
+                address:[{ required: true, message: '请选择商家地址', trigger: 'change' },],
+                decisionMaker:[{required: true, message: '请输入决策人', trigger: 'blur' },],
+                teamSize:[{required: true, message: '请选择研究团队规模', trigger: 'change' },],
+                industry:[{required: true, message: '请选择所属行业', trigger: 'change' },],
+                userMax:[{required: true, message: '请输入用户上限', trigger: 'blur' },],
+                saller:[{required: true, message: '请选择所属销售', trigger: 'change' },],
+            },
+            recordData:[],
+            tableColOpts:[
+                {
+                    label:'签约时间',
+                    key:'SigningTime'
+                },{
+                    label:'到期时间',
+                    key:'ExpiredTime'
+                },{
+                    label:'到期天数',
+                    key:'ExpireDay'
+                }
+            ],
+            activities:[],
+            isEditModel:false,
+
+        }
+    },
+    created() {
+        this.getIndustry()
+        this.getSale()
+        this.getBusinessDetail()
+    },
+    methods: {
+        async callbackHandle(data,cb) {
+            if (data) {
+                this.isCheckCompanyInfo =true
+                cb([]);
+                let res = await customInterence.companyQccSearch({ KeyWord: data});
+                if (res.Ret === 200) {
+                    this.isCheckCompanyInfo =false;
+                    if (res.Data && res.Data.length > 0) {
+                        let arr = res.Data.map((item) => {
+                            return { value:item.Name, ...item };
+                        });
+                        cb(arr);
+                    }else{
+                        cb([{}]);
+                        // this.checkCompany()
+                    }	
+                }	
+            }
+		},
+
+        checkCompanyfocus(){
+			this.checkCompanyfocusIs =true;
+			setTimeout(() => {
+			    this.checkCompanyfocusIs =false;
+			},500)
+		},
+
+        //选中后增加社会信用码
+		customNameSelect(value) {
+			this.firstFormData.creditCode = value.CreditCode
+			this.inquireSuccess = true;
+			setTimeout(async()=>{
+				this.checkCompany()
+			},10)
+		},
+
+        /* 客户名称/信用码失焦时校验客户名称是否存在 存在就提示 */
+		checkCompany() {	
+			setTimeout(()=>{
+                if(this.checkCompanyfocusIs) return
+                if((!this.firstFormData.name && !this.firstFormData.creditCode) || (this.isCheckCompanyInfo && this.firstFormData.name)) return
+                    customInterence.checkCompanyInfo({
+                        CompanyName:this.firstFormData.name,
+                        CreditCode:this.firstFormData.creditCode
+                    }).then(res =>{
+                        if(res.Ret === 200){
+                            if(res.Data.RepeatStatus > 0) {
+                                this.repeatId = res.Data.CompanyId;
+                                this.repeatName = res.Data.ProductName;
+                                this.nameRepeat = res.Data.RepeatStatus
+                                this.codeRepeat = res.Data.Status
+                                this.isCheck = true;
+                            }else {
+                                this.nameRepeat = 0
+                                this.isCheck = false;
+                            }
+                        }
+                    })
+			},500)
+		},
+
+        selectRegion(e){
+            this.firstFormData.province=e.province.value
+            this.firstFormData.city=e.city.value =='市'?'':e.city.value;
+        },
+        /* 根据类型获取行业 */
+		getIndustry() {
+			customInterence.getindustry({
+				Classify:'ficc'
+			}).then(res => {
+				if(res.Ret === 200) {
+					this.tradeArr = res.Data.List || [];
+				}
+			})
+		},
+        /* 获取销售 */
+		getSale() {
+			customInterence.saleslist().then(res => {
+				if(res.Ret === 200) {
+					this.salesArr = res.Data.List;
+				}
+			})
+		},
+        changeActiveStep(index){
+            this.step = index + 1
+        },
+        //获取商家详情
+        getBusinessDetail(){
+            if(this.$route.path==='/editETABusiness'){
+                this.isEditModel = true
+            }
+            //query id
+            this.firstFormData={
+                id:'11111',
+                areaType:1,
+                name:'我是商家我是商家',
+                creditCode:'123456',
+                address:['浙江省','杭州市'],
+                decisionMaker:'aaa',
+                teamSize:'200人及以下',
+                fundsize:'100w',
+                industry:1,
+                userMax:100,
+                saller:578
+            }
+            //获取签约详情
+            this.getTableData()
+            //获取操作日志列表
+            this.getTimeLineData()
+        },
+        getTableData(){
+            this.recordData = [
+                {
+                    SigningTime:'2023/7/26',
+                    ExpiredTime:'2023/7/26',
+                    ExpireDay:20
+                }
+            ]
+        },
+        getTimeLineData(){}
+    },
 }
 </script>
 
-<style>
-
+<style lang="scss" scoped>
+.business-detail{
+    padding:30px;
+    box-sizing: border-box;
+    background-color: #fff;
+    min-width: 1100px;
+    height: calc(100vh - 120px);
+    .first-step-form-wrap,.second-step-form-wrap{
+        margin-top:60px;
+        border-top: 1px solid #DCDCDC;
+        width:70%;
+    }
+    .el-form{
+        .form-line{
+            margin:30px 0;
+            border-bottom: 1px solid #DCDCDC;
+            .el-input,.el-select,.el-cascader,.el-radio-group{
+                width:360px;
+            }
+            .el-radio-group{
+                display: flex;
+                justify-content: space-between;
+                .el-radio{
+                    width: 165px;
+                    text-align: center;
+                }
+            }
+        }
+    }
+    .el-table{
+        margin-top: 30px;
+    }
+}
 </style>

+ 4 - 0
src/views/business_ETA_manage/businessList.vue

@@ -204,6 +204,10 @@ export default {
                     label:'客户名称',
                     key:'CompanyName'
                 },
+                {
+                    label:'商家ID',
+                    key:'CompanyId'
+                },
                 {
                     label:'商家地址',
                     key:''

+ 1 - 1
src/views/business_ETA_manage/components/Steps.vue

@@ -4,7 +4,7 @@
             v-for="(step,index) in stepsArr" :key="index"
             @click="changeActiveStep(index)">
             <div class="step-line"></div>
-            <div class="step-icon" v-if="activeStep<=index+1">{{index+1}}</div>
+            <div class="step-icon" v-if="(activeStep<=index+1)||allowStepClick">{{index+1}}</div>
             <div class="step-icon finished" v-else><i class="el-icon-check"></i></div>
             <div class="step-text">{{step.text}}</div>
         </div>