Commit a07ded6e authored by 张子雨's avatar 张子雨

feat: 新增商家资料和合同

parent 978bf3d6
const isProduction = process.env.NODE_ENV === 'production'; const isProduction = process.env.NODE_ENV === 'production';
const isPre = process.env.PRE_ENV === 'pre'; const isPre = process.env.PRE_ENV === 'pre';
const environment = 'xyqb'; const environment = 'sc1';
const envAPi = { const envAPi = {
api: `https://security-${environment}.liangkebang.net`, //'https://security-xyqb.liangkebang.net', api: `https://security-${environment}.liangkebang.net`, //'https://security-xyqb.liangkebang.net',
kdspOpApi: `https://sc-merchant-api-${environment}.liangkebang.net`, kdspOpApi: `https://sc-merchant-api-${environment}.liangkebang.net`,
......
...@@ -2,13 +2,11 @@ import React from 'react'; ...@@ -2,13 +2,11 @@ import React from 'react';
import moment from 'moment'; import moment from 'moment';
import { PlusOutlined } from '@ant-design/icons'; import { PlusOutlined } from '@ant-design/icons';
import { notification, Tag, Tooltip, Input } from 'antd'; import { notification, Tag, Tooltip, Input } from 'antd';
// import { reject } from 'lodash-es';
import { import {
uploadFile, uploadFile,
apiCategoryList, apiCategoryList,
apiAddrArea, apiAddrArea,
apiServiceFacility, apiServiceFacility,
apiApplyDetail,
apiBusinessDetail, apiBusinessDetail,
apiBankList, apiBankList,
} from '../service'; } from '../service';
...@@ -42,24 +40,38 @@ export const businessModel = [ ...@@ -42,24 +40,38 @@ export const businessModel = [
]; ];
// 获取申请信息 // 获取申请信息
export async function getInfo(id, type) { export async function getInfo() {
let api = apiApplyDetail; const data = await apiBusinessDetail();
if (['info', 'edit', 'revision'].includes(type)) {
api = apiBusinessDetail;
}
const [res] = await api(id);
let settlementType = 1; let settlementType = 1;
const res = data.data;
if (res) { if (res) {
if (res.facilities) { if (res.facilities) {
res.customList = res.facilities.customList || []; res.customList = res.facilities.customList || [];
res.selfList = res.facilities.selfList || []; res.selfList = res.facilities.selfList || [];
} }
res.accountOpenPermitImage = [{ uid: 0, url: res.accountOpenPermitImage }]; res.accountOpenPermitImage = res.accountOpenPermitImage
res.businessLicenseImage = [{ uid: 0, url: res.businessLicenseImage }]; ? [{ uid: 0, url: res.accountOpenPermitImage }]
res.idCardEmblemImage = [{ uid: 0, url: res.idCardEmblemImage }]; : [];
res.idCardPortraitImage = [{ uid: 0, url: res.idCardPortraitImage }]; res.businessLicenseImage = res.businessLicenseImage
res.primaryImage = [{ uid: 0, url: res.primaryImage }]; ? [{ uid: 0, url: res.businessLicenseImage }]
res.sealImage = [{ uid: 0, url: res.sealImage }]; : [];
res.idCardEmblemImage = res.idCardEmblemImage ? [{ uid: 0, url: res.idCardEmblemImage }] : [];
res.idCardPortraitImage = res.idCardPortraitImage
? [{ uid: 0, url: res.idCardPortraitImage }]
: [];
res.primaryImage = res.primaryImage ? [{ uid: 0, url: res.primaryImage }] : [];
res.sealImage = res.sealImage ? [{ uid: 0, url: res.sealImage }] : [];
res.brandCertificate = res.brandCertificate ? [{ uid: 0, url: res.brandCertificate }] : [];
// 非同名结算授权文件
res.differentNameAuthorizationImage = res.differentNameAuthorizationImage
? [{ uid: 0, url: res.brandCertificate }]
: [];
// 户口本本人页
res.householdRegisterImage = res.householdRegisterImage
? [{ uid: 0, url: res.householdRegisterImage }]
: [];
// 工商局
res.icbProofImage = res.icbProofImage ? [{ uid: 0, url: res.icbProofImage }] : [];
if (res.categoryQualificateImage) { if (res.categoryQualificateImage) {
res.categoryQualificateImage = [{ uid: 0, url: res.categoryQualificateImage }]; res.categoryQualificateImage = [{ uid: 0, url: res.categoryQualificateImage }];
} }
...@@ -75,11 +87,18 @@ export async function getInfo(id, type) { ...@@ -75,11 +87,18 @@ export async function getInfo(id, type) {
} }
settlementType = +res.settlementType; settlementType = +res.settlementType;
} }
res.legalPersonPeriod = res.legalPersonPeriod.split('-').map(item => moment(item)); res.checked = res.legalPersonPeriod === '长期';
res.businessLicensePeriod = moment(res.businessLicensePeriod); res.legalPerson =
res.legalPersonPeriod &&
res.legalPersonPeriod !== '长期' &&
res.legalPersonPeriod.split('-').map(item => moment(item));
res.businessLicensePeriod = res.businessLicensePeriod && moment(res.businessLicensePeriod);
const companyNamedis = !!res.companyName;
this.setState({ this.setState({
settlementType, settlementType,
businessInfo: res, businessInfo: res,
checkboxDisabled: res.checked,
companyNamedis,
}); });
} }
...@@ -92,6 +111,7 @@ function delImg(keyName, e) { ...@@ -92,6 +111,7 @@ function delImg(keyName, e) {
}; };
}); });
} }
// 上传图片 // 上传图片
export function uploadPropsFn( export function uploadPropsFn(
{ keyName, limit = 1, maxSize = 1024 * 1024 * 5, maxSizeMsg = '文件大小不能超过5M!', type = 0 }, { keyName, limit = 1, maxSize = 1024 * 1024 * 5, maxSizeMsg = '文件大小不能超过5M!', type = 0 },
...@@ -247,16 +267,6 @@ export function renderServiceTags() { ...@@ -247,16 +267,6 @@ export function renderServiceTags() {
} }
/** **** 自定义服务设施 end ***************************** */ /** **** 自定义服务设施 end ***************************** */
// 获取主营类目
export async function getCategoryList() {
const [res] = await apiCategoryList();
if (res) {
this.setState({
categoryList: res,
});
}
}
// 获取服务设施 // 获取服务设施
export async function getServiceFacility() { export async function getServiceFacility() {
const res = await apiServiceFacility(); const res = await apiServiceFacility();
...@@ -288,6 +298,7 @@ export async function getAreaAddr() { ...@@ -288,6 +298,7 @@ export async function getAreaAddr() {
label: item.addrName, label: item.addrName,
value: item.addrId, value: item.addrId,
})); }));
console.log(this.state.businessInfo, '......');
// 编辑时 回显 市、区、街道 // 编辑时 回显 市、区、街道
if (this.state.businessInfo.provinceId) { if (this.state.businessInfo.provinceId) {
const pros = res.filter(item => +item.value === +this.state.businessInfo.provinceId); const pros = res.filter(item => +item.value === +this.state.businessInfo.provinceId);
......
This diff is collapsed.
...@@ -4,20 +4,20 @@ import config from '../../../config/env.config'; ...@@ -4,20 +4,20 @@ import config from '../../../config/env.config';
import qs from 'qs'; import qs from 'qs';
import { da } from 'date-fns/locale'; import { da } from 'date-fns/locale';
const { kdspApi } = config; const { kdspApi, goodsApi } = config;
// 获取地址 // 获取地址
export const apiAddrArea = params => export const apiAddrArea = params =>
request.post('/api/merchants/addresses/list', { request.get(`/api/merchants/addresses/list?${qs.stringify(params)}`, {
prefix: kdspApi, prefix: kdspApi,
data: params,
emulateJSON: true,
}); });
// 主营类目 // 主营类目
export const apiCategoryList = params => export async function apiCategoryList(param) {
request.post('/product/category/list', { prefix: kdspApi, params }); return request.post('/api/merchants/suppliers/main-category/list', {
data: param,
prefix: goodsApi,
});
}
// 服务设施 // 服务设施
export const apiServiceFacility = () => export const apiServiceFacility = () =>
request.get('/api/merchants/suppliers/facilities/list', { prefix: kdspApi }); request.get('/api/merchants/suppliers/facilities/list', { prefix: kdspApi });
...@@ -48,22 +48,14 @@ export async function uploadFile(files, imageType = 0) { ...@@ -48,22 +48,14 @@ export async function uploadFile(files, imageType = 0) {
return data; return data;
} }
// 新增商家端入驻申请
export const apiNewStoreInfo = params =>
request.post(`${kdspApi}/api/merchants/suppliers/register`, { prefix: kdspApi, data: params });
// 图片内容识别 // 图片内容识别
export const apiRecognize = params => export const apiRecognize = params =>
request.get(`/api/merchants/images/recognize?${qs.stringify(params)}`, { prefix: kdspApi }); request.get(`/api/merchants/images/recognize?${qs.stringify(params)}`, { prefix: kdspApi });
// 编辑商户信息 // 编辑商户信息
export const apiEditStoreInfo = params => export const apiEditStoreInfo = params =>
request.post(`${kdspApi}/api/merchants/suppliers/pops/edit`, { prefix: kdspApi, data: params }); request.post('/api/merchants/suppliers/edit', { prefix: kdspApi, data: params });
// 查询申请详情
export const apiApplyDetail = applyId =>
request.get(`${kdspApi}/api/merchants/suppliers/register/detail?applyId=${applyId}`);
// 查询商户详情 // 查询商户详情
export const apiBusinessDetail = businessId => export const apiBusinessDetail = businessId =>
request.get(`${kdspApi}/api/merchants/suppliers/pops/detail/${businessId}`); request.get('/api/merchants/suppliers/pops/detail', { prefix: kdspApi });
...@@ -4,7 +4,7 @@ import moment from 'moment'; ...@@ -4,7 +4,7 @@ import moment from 'moment';
import { PlusSquareFilled, MinusSquareFilled } from '@ant-design/icons'; import { PlusSquareFilled, MinusSquareFilled } from '@ant-design/icons';
import { Modal, Input, TimePicker, Checkbox, Cascader, Radio, notification } from 'antd'; import { Modal, Input, TimePicker, Checkbox, Cascader, Radio, notification } from 'antd';
import { apiAddrArea, apiCreatStore, apiEditStore } from '../services'; import { apiAddrArea, apiCreatStore, apiEditStore } from '../services';
import { weekOptions, weekDefault, layout } from '../data'; import { weekOptions, weekDefault, layout, businessModel } from '../data';
import MapModal from '@/components/GaoDeMap'; import MapModal from '@/components/GaoDeMap';
import style from './style.less'; import style from './style.less';
import { isCheckNumberLine } from '@/utils/validator'; import { isCheckNumberLine } from '@/utils/validator';
...@@ -19,6 +19,7 @@ const StoreModal = props => { ...@@ -19,6 +19,7 @@ const StoreModal = props => {
form: { getFieldDecorator, setFieldsValue, getFieldsValue, validateFields, resetFields }, form: { getFieldDecorator, setFieldsValue, getFieldsValue, validateFields, resetFields },
formInfo, formInfo,
status, status,
productBusiness,
} = props; } = props;
const [areaAddr, setAreaAddr] = useState([]); const [areaAddr, setAreaAddr] = useState([]);
const [visibleMap, setVisibleMap] = useState(false); const [visibleMap, setVisibleMap] = useState(false);
...@@ -29,12 +30,21 @@ const StoreModal = props => { ...@@ -29,12 +30,21 @@ const StoreModal = props => {
address: '', address: '',
}); });
const [disabled, setDisabled] = useState(false); const [disabled, setDisabled] = useState(false);
const [isDisabled, setIsDisabled] = useState(true);
const divDom = useRef(); const divDom = useRef();
useEffect(() => { useEffect(() => {
setDisabled(props.status); setDisabled(props.status);
}, [props.status]); }, [props.status]);
useEffect(() => {
if (props.productBusiness.length) {
const val = props.productBusiness.includes(2) || props.productBusiness.includes(3);
setIsDisabled(val);
}
}, [props.productBusiness]);
const handleCancel = isSuccess => { const handleCancel = isSuccess => {
resetFields(); resetFields();
onCancel(isSuccess); onCancel(isSuccess);
...@@ -49,6 +59,10 @@ const StoreModal = props => { ...@@ -49,6 +59,10 @@ const StoreModal = props => {
params[areaArr[i]] = item; params[areaArr[i]] = item;
}); });
} }
if (params.shopHeadImage.length) {
// eslint-disable-next-line prefer-destructuring
params.shopHeadImage = params.shopHeadImage[0];
}
if (params.lnglat) { if (params.lnglat) {
const arr = params.lnglat.split(','); const arr = params.lnglat.split(',');
if (arr.length === 2) { if (arr.length === 2) {
...@@ -223,9 +237,11 @@ const StoreModal = props => { ...@@ -223,9 +237,11 @@ const StoreModal = props => {
} }
info.lnglat = `${info.longitude},${info.latitude}`; info.lnglat = `${info.longitude},${info.latitude}`;
info.addr = [info.provinceId, info.cityId, info.countyId]; info.addr = [info.provinceId, info.cityId, info.countyId];
info.shopHeadImage = [info.shopHeadImage] || [];
if (info.townId) { if (info.townId) {
info.addr.push(info.townId); info.addr.push(info.townId);
} }
console.log(info);
setTimes(harr); setTimes(harr);
setFormData(info); setFormData(info);
getLazyAddr(info); getLazyAddr(info);
...@@ -242,21 +258,28 @@ const StoreModal = props => { ...@@ -242,21 +258,28 @@ const StoreModal = props => {
<Modal <Modal
title="门店信息" title="门店信息"
visible={visible} visible={visible}
width="800px" width="1000px"
destroyOnClose destroyOnClose
maskClosable={false} maskClosable={false}
onOk={() => onSubmit()} onOk={() => onSubmit()}
onCancel={() => handleCancel()} onCancel={() => handleCancel()}
> >
<Form {...layout} name="formData"> <Form {...layout} name="formData">
<FormItem label="门店头像"> <FormItem label="业务模式">
{getFieldDecorator('supplement', { {getFieldDecorator('productBusiness', {
rules: [{ required: true, message: '请上传门店头像' }], initialValue: productBusiness,
initialValue: formData.shopHeadImage || [], })(<Checkbox.Group disabled options={businessModel} />)}
valuePropName: 'fileList',
getValueFromEvent: normFile,
})(<Upload max={1} accept=".jpg,.png,.jpeg" disabled={disabled} />)}
</FormItem> </FormItem>
{isDisabled && (
<FormItem label="门店头像">
{getFieldDecorator('shopHeadImage', {
rules: [{ required: true, message: '请上传门店头像' }],
initialValue: formData.shopHeadImage || [],
valuePropName: 'fileList',
getValueFromEvent: normFile,
})(<Upload max={1} accept=".jpg,.png,.jpeg" disabled={disabled} />)}
</FormItem>
)}
<FormItem <FormItem
label="门店名称" label="门店名称"
name="name" name="name"
...@@ -366,11 +389,13 @@ const StoreModal = props => { ...@@ -366,11 +389,13 @@ const StoreModal = props => {
</Radio.Group>, </Radio.Group>,
)} )}
</FormItem> </FormItem>
<FormItem label="门店公告"> {isDisabled && (
{getFieldDecorator('publicNotice', { <FormItem label="门店公告">
initialValue: formData.publicNotice, {getFieldDecorator('publicNotice', {
})(<Input placeholder="请输入门店公告" maxLength={120} disabled={disabled} />)} initialValue: formData.publicNotice,
</FormItem> })(<Input placeholder="请输入门店公告" maxLength={120} disabled={disabled} />)}
</FormItem>
)}
</Form> </Form>
<MapModal <MapModal
visible={visibleMap} visible={visibleMap}
......
...@@ -17,3 +17,10 @@ export const layout = { ...@@ -17,3 +17,10 @@ export const layout = {
labelCol: { span: 6 }, labelCol: { span: 6 },
wrapperCol: { span: 16 }, wrapperCol: { span: 16 },
}; };
// 业务模式
export const businessModel = [
{ label: '到家外卖业务(外卖配送业务)', value: 1 },
{ label: '实物商品业务员', value: 2 },
{ label: '到店业务(服务类业务)', value: 3 },
];
...@@ -13,7 +13,7 @@ import { ...@@ -13,7 +13,7 @@ import {
} from 'antd'; } from 'antd';
import _ from 'lodash'; import _ from 'lodash';
import { el } from 'date-fns/locale'; import { el } from 'date-fns/locale';
import { searchList, apiEnableStore, apiAddrArea } from './services'; import { searchList, apiEnableStore, apiAddrArea, apiproductBusiness } from './services';
import { stateDesc, weeks, layout } from './data'; import { stateDesc, weeks, layout } from './data';
import StoreModal from './components/storeModal'; import StoreModal from './components/storeModal';
import style from './style.less'; import style from './style.less';
...@@ -28,18 +28,26 @@ export default () => { ...@@ -28,18 +28,26 @@ export default () => {
const [pageNo, setPageNo] = useState(1); const [pageNo, setPageNo] = useState(1);
const [totalNum, setTotalNum] = useState(0); const [totalNum, setTotalNum] = useState(0);
const [pageSize, setPageSize] = useState(20); const [pageSize, setPageSize] = useState(20);
const [productBusiness, setProductBusiness] = useState([]);
const refSearch = useRef(); const refSearch = useRef();
const divDom = useRef(); const divDom = useRef();
// 获取业务模式
const getBusiness = async () => {
const res = await apiproductBusiness();
setProductBusiness(res);
};
const onCreate = () => { const onCreate = () => {
setStoreInfo({}); setStoreInfo({});
setVisible(true); setVisible(true);
getBusiness();
}; };
const onShowInfo = (info, val) => { const onShowInfo = (info, val) => {
setStoreInfo(info); setStoreInfo(info);
const value = val !== 'edit'; const value = val !== 'edit';
console.log(value);
setStatus(value); setStatus(value);
setVisible(true); setVisible(true);
getBusiness();
}; };
// 获取市区街道 // 获取市区街道
...@@ -115,6 +123,7 @@ export default () => { ...@@ -115,6 +123,7 @@ export default () => {
if (isReload) { if (isReload) {
onSearch(refSearch.current?.getFieldValue?.() || {}); onSearch(refSearch.current?.getFieldValue?.() || {});
} }
setStatus(false);
setStoreInfo({}); setStoreInfo({});
setVisible(false); setVisible(false);
}; };
...@@ -336,7 +345,13 @@ export default () => { ...@@ -336,7 +345,13 @@ export default () => {
/> />
</div> </div>
) : null} ) : null}
<StoreModal visible={visible} onCancel={closeModal} formInfo={storeInfo} status={status} /> <StoreModal
visible={visible}
onCancel={closeModal}
formInfo={storeInfo}
status={status}
productBusiness={productBusiness}
/>
</div> </div>
); );
}; };
...@@ -65,3 +65,11 @@ export async function apiEditStore(params) { ...@@ -65,3 +65,11 @@ export async function apiEditStore(params) {
}); });
return data.businessCode; return data.businessCode;
} }
// 获取商户业务模式
export async function apiproductBusiness() {
const data = await request.get('/api/merchants/suppliers/product-business/list', {
prefix: kdspApi,
});
return data.data;
}
...@@ -29,13 +29,14 @@ class PicturesWall extends React.Component { ...@@ -29,13 +29,14 @@ class PicturesWall extends React.Component {
token = await qiniuToken(); token = await qiniuToken();
} }
componentWillReceiveProps(nextProps) { static getDerivedStateFromProps(nextProps) {
this.initFileList(nextProps.fileList || []); new PicturesWall(nextProps).initFileList();
return null;
} }
initFileList = fileList => { initFileList = fileList => {
const fileLists = const fileLists =
fileList.map((item, index) => ({ fileList?.map((item, index) => ({
url: item, url: item,
name: '', name: '',
uid: index, uid: index,
......
import React, { useState, useRef } from 'react'; import React, { useState, useRef } from 'react';
import ProTable from '@ant-design/pro-table'; import ProTable from '@ant-design/pro-table';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { notification, Button } from 'antd'; import { notification, Button, Modal, Image } from 'antd';
import { query } from './services'; import { query } from './services';
const ContractView = () => { const ContractView = () => {
const [visible, setVisible] = useState(false);
const url =
'https://contract-test.q-gp.com/621-621T18364B279E2null.pdf?Expires=1679994655&OSSAccessKeyId=LTAI5tGV1jdSEBjuKDUYZVHY&Signature=nVC2YgG8t5DWZl6sMyRmCzeRYLw%3D';
// 查看 // 查看
const onLook = ({ contractPdfUrl }) => { const onLook = ({ contractPdfUrl }) => {
console.log(contractPdfUrl); setVisible(true);
// window.open(url)
}; };
// 下载 // 下载
const ondown = ({ contractPdfUrl }) => { const ondown = ({ contractPdfUrl }) => {
console.log(contractPdfUrl); window.open(url);
}; };
const columns = [ const columns = [
{ {
...@@ -76,6 +80,9 @@ const ContractView = () => { ...@@ -76,6 +80,9 @@ const ContractView = () => {
toolBarRender={false} toolBarRender={false}
scroll={{ x: '100%', y: 400 }} scroll={{ x: '100%', y: 400 }}
/> />
<Modal visible={visible} width="1000px" onCancel={() => setVisible(false)}>
<iframe src={url} height="500" width="95%" title="合同"></iframe>
</Modal>
</PageHeaderWrapper> </PageHeaderWrapper>
); );
}; };
......
...@@ -8,20 +8,20 @@ const { goodsApi } = config; ...@@ -8,20 +8,20 @@ const { goodsApi } = config;
// 分页查询所有数据 // 分页查询所有数据
export async function query(params) { export async function query(params) {
const param = { const param = {
pageNo: params.current || 1, ...params,
pageIndex: params.current,
pageSize: params.pageSize || 20, pageSize: params.pageSize || 20,
}; };
const data = await request.post('/api/kdsp/template/page', { const data = await request.post('/api/merchants/suppliers/contract/list', {
prefix: goodsApi, prefix: goodsApi,
data: stringify(_.omitBy(param, v => !v)), data: param,
headers: { headers: {
'Content-Type': 'application/x-www-form-urlencoded', 'Content-Type': 'application/json;charset=UTF-8',
}, },
}); });
if (data.data) { if (data.data) {
return { return {
total: data.data.total, data: data.data,
data: data.data.forbiddenAreaTemplateList,
}; };
} }
return { return {
...@@ -29,41 +29,3 @@ export async function query(params) { ...@@ -29,41 +29,3 @@ export async function query(params) {
data: [], data: [],
}; };
} }
// 添加区域受限模板
export async function getAddTemplate(param) {
const data = await request.post('/api/kdsp/add/template', {
prefix: goodsApi,
data: param,
});
return data;
}
// 获取区域地址
export async function areaList(params) {
const { data } = await request.get('/api/merchants/addresses/list', {
prefix: goodsApi,
params,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
});
return data;
}
// 根据模板id查询受限区域
export async function forbiddenAddress(params) {
const data = await request.post('/api/kdsp/edit/template', {
prefix: goodsApi,
data: params,
});
return data;
}
// 根据模板id查询受限区域
export async function addressTree(params) {
const data = await request.post('/api/kdsp/forbidden/address', {
prefix: goodsApi,
params,
});
return data;
}
/* eslint-disable prefer-destructuring */
import { parse } from 'querystring'; import { parse } from 'querystring';
import pathRegexp from 'path-to-regexp'; import pathRegexp from 'path-to-regexp';
import moment from 'moment'; import moment from 'moment';
...@@ -131,6 +132,7 @@ export const getObjectType = v => Object.prototype.toString.call(v).replace(/\[o ...@@ -131,6 +132,7 @@ export const getObjectType = v => Object.prototype.toString.call(v).replace(/\[o
// 获取长表单错误提示 // 获取长表单错误提示
export const getErrorMessage = err => { export const getErrorMessage = err => {
const message = '请检查表单数据!'; const message = '请检查表单数据!';
// eslint-disable-next-line wrap-iife
// (function getMsg(v) { // (function getMsg(v) {
// if (Array.isArray(v)) { // if (Array.isArray(v)) {
// getMsg(v[0]); // getMsg(v[0]);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment