diff --git a/config/routers/pms.ts b/config/routers/pms.ts
index 30672fe..b5eabf2 100644
--- a/config/routers/pms.ts
+++ b/config/routers/pms.ts
@@ -163,4 +163,8 @@ export default [
path: '/pms/transfer/storageOverStock', // 可调出配件
component: './pms/transfer/StorageOverStock'
},
+ {
+ path: '/pms/transfer/huolalaSetting', // 货拉拉账户配置
+ component: './pms/transfer/HuolalaSetting'
+ },
];
diff --git a/src/pages/pms/partPlan/PlanManage/api.ts b/src/pages/pms/partPlan/PlanManage/api.ts
index 3fb2499..9c15c09 100644
--- a/src/pages/pms/partPlan/PlanManage/api.ts
+++ b/src/pages/pms/partPlan/PlanManage/api.ts
@@ -26,7 +26,7 @@ export interface ListVO {
planDate?: string; // 计划日期
approvalOrderNo?: string; // 审核单号
userName?: string; // 计划人员
- status?: string; // 计划状态 1:待审核2:已通过9:已拒绝
+ status?: number; // 计划状态 1:待审核2:已通过9:已拒绝
settleShopId?: string; // 结算门店门店id
settleShopName?: string; // 结算门店名称
prepayToken?: string; // 预付token
diff --git a/src/pages/pms/partPlan/PlanManage/index.tsx b/src/pages/pms/partPlan/PlanManage/index.tsx
index 8c662ee..0c48c61 100644
--- a/src/pages/pms/partPlan/PlanManage/index.tsx
+++ b/src/pages/pms/partPlan/PlanManage/index.tsx
@@ -13,6 +13,7 @@ import DetailModal from "@/pages/pms/partPlan/PlanManage/components/DetailModal"
// 计划状态 1:待审核2:已通过3待付款4已付款9:已拒绝
const statusName: {[key: number]: string} = {
+ 0: '草稿',
1: '待审核',
2: '已通过',
3: '待付款',
@@ -69,6 +70,7 @@ export default function Index() {
onChange={v => setParams({status: v }, true)}
optionFilterProp="children"
>
+ 草稿
待审核
已通过
已拒绝
@@ -95,9 +97,16 @@ export default function Index() {
fixed="right"
render={(text, _item: ListVO) => (
<>
- history.push(`/pms/partPlan/planManage/detail/${_item.planId}`)}>
- 查看
-
+ {[0, 9].includes(_item.status || 0) ? (
+ history.push(`/pms/partPlan/planManage/apply?planId=${_item.planId}`)}>
+ 编辑
+
+ )
+ : (
+ history.push(`/pms/partPlan/planManage/detail/${_item.planId}`)}>
+ 查看
+
+ )}
{
setItem(_item);
diff --git a/src/pages/pms/partPlan/PlanManage/subpages/Apply/api.ts b/src/pages/pms/partPlan/PlanManage/subpages/Apply/api.ts
index 4ec92c3..1c57e01 100644
--- a/src/pages/pms/partPlan/PlanManage/subpages/Apply/api.ts
+++ b/src/pages/pms/partPlan/PlanManage/subpages/Apply/api.ts
@@ -16,3 +16,9 @@ export interface SaveParams {
export function saveApi(params?: SaveParams): http.PromiseResp {
return request.post(`${PMS_HOST}/erp/plan/pool/save/plan`, params);
}
+/**
+ * 草稿
+ */
+export function draftApi(params?: SaveParams): http.PromiseResp {
+ return request.post(`${PMS_HOST}/erp/plan/pool/save/draft`, params);
+}
diff --git a/src/pages/pms/partPlan/PlanManage/subpages/Apply/components/DealerModal.tsx b/src/pages/pms/partPlan/PlanManage/subpages/Apply/components/DealerModal.tsx
index a160efe..ffd7427 100644
--- a/src/pages/pms/partPlan/PlanManage/subpages/Apply/components/DealerModal.tsx
+++ b/src/pages/pms/partPlan/PlanManage/subpages/Apply/components/DealerModal.tsx
@@ -11,9 +11,9 @@ interface Props {
}
const {Option} = Select;
export default function Index({ onCancel, visible, onOk, dealerList = [] }: Props) {
- const [dealer, setDealer] = useState({dealerId: null, dealerName: null});
+ const [dealer, setDealer] = useState({ settleDealerId: null, settleDealerName: null});
const { data: dealers } = useInitail(getDealerApi, [], {});
- const suIds = dealerList.map(it => it.dealerId);
+ const suIds = dealerList.map(it => it.settleDealerId);
useEffect(() => {
if (!visible) {
@@ -22,7 +22,7 @@ export default function Index({ onCancel, visible, onOk, dealerList = [] }: Prop
}, [visible]);
const handSave = () => {
- if (!dealer.dealerId) {
+ if (!dealer.settleDealerId) {
message.error('请选择采购商家');
return;
}
@@ -40,7 +40,7 @@ export default function Index({ onCancel, visible, onOk, dealerList = [] }: Prop
,
{dealerList.map((dealer: any = {}) => (
-
+
-
{`商家: ${dealer.dealerName || ''}`}
+
{`商家: ${dealer.settleDealerName || ''}`}
{ setVisibleSupplier(true); setDealer(dealer); }}>
添加指定供应商
setDealerList(dealerList.filter(it => it.dealerId!=dealer.dealerId))}
+ onConfirm={() => setDealerList(dealerList.filter(it => it.settleDealerId!=dealer.settleDealerId))}
okText="确定"
cancelText="取消"
style={{marginLeft: 20}}
@@ -224,8 +250,6 @@ export default function Index() {
{(dealer.suppliers || []).map((supplier: any = {}) => {
const paList: any[] = flattenDeep((supplier.storages || []).map((st: any) => (st.parts || [])));
- // const paList: any[] = pas.length > 0 ? pas[0] : [];
- console.log('pas', paList);
return (
@@ -247,7 +271,7 @@ export default function Index() {
- {`总金额: ${sum(paList.map((it: any) => (it.price || 0) * (it.count || 0))).toFixed(2)}元`}
+ {`总金额: ${sum(paList.map((it: any) => (it.price || 0) * (it.count || it.partCnt || 0))).toFixed(2)}元`}
{`品种数: ${[...new Set((paList || []).map((i: PartDetail) => i.partCode))].length}种`}
@@ -255,7 +279,7 @@ export default function Index() {
-
+
+
+
+
+
+
diff --git a/src/pages/pms/partPlan/PlanManage/subpages/Detail/api.ts b/src/pages/pms/partPlan/PlanManage/subpages/Detail/api.ts
index 6e780c0..9326739 100644
--- a/src/pages/pms/partPlan/PlanManage/subpages/Detail/api.ts
+++ b/src/pages/pms/partPlan/PlanManage/subpages/Detail/api.ts
@@ -7,6 +7,7 @@ import { PMS_HOST } from '@/utils/host';
*/
export interface DetailVO {
brandName?: string; // 品牌名称
+ brandId?: number; // 品牌ID
settleDealerName?: string; // 结算商家
settleShopName?: string; // 结算门店
suppliers?: SupplierVO[]; // 配件集合
diff --git a/src/pages/pms/partPlan/PlanPool/api.ts b/src/pages/pms/partPlan/PlanPool/api.ts
index 3f67dfe..a5ad5a8 100644
--- a/src/pages/pms/partPlan/PlanPool/api.ts
+++ b/src/pages/pms/partPlan/PlanPool/api.ts
@@ -1,6 +1,7 @@
import { http } from '@/typing/http';
import request from '@/utils/request';
import { PMS_HOST } from '@/utils/host';
+import { PartVO } from '@/pages/pms/partPlan/CustBuyPlan/api';
export interface Params {
brandId?: number, // 品牌ID
@@ -18,6 +19,7 @@ export interface Params {
export interface ListVO {
poolId: number; // 计划池id
+ poolIds?: string,
id?: number;
name?: string; // 名称
code?: string; // 编码
@@ -61,7 +63,60 @@ export interface ListVO {
unit?: string; // 采购规格(配件展示)
splitUnit?: string; // 拆分件规格(配件展示)
splitCnt?: number; // 拆分件数量(配件展示)
- partType?:number
+ partType?:number,
+ planWaitListIds?:string
+}
+
+export interface OutItem{
+ /**
+ * 配件ID
+ */
+partId?:number;
+/**
+ * 配件编码
+ */
+partCode?:string;
+/**
+ * 配件名称
+ */
+partName?:string;
+/**
+ * 出库数量
+ */
+partCnt?:number;
+/**
+ * 成本价
+ */
+costPrice?:number;
+/**
+ * 出库类型1工单2装潢
+ */
+type?:number;
+/**
+ * 出库类型ID
+ */
+typeId?:string;
+/**
+ * 服务站id
+ */
+shopId?:number;
+/**
+ * 服务站名称
+ */
+shopName?:string;
+/**
+ * 集团ID
+ */
+groupId?:number;
+/**
+ * 出库时间
+ */
+outTime?:string;
+
+/**
+ * 类型名称
+ */
+typeName?:string;
}
/**
@@ -74,6 +129,15 @@ export function getList(params: Params): http.PromiseResp
{
export function deleteApi(params: {poolId: number}) {
return request.post(`${PMS_HOST}/erp/plan/pool/delete/plan`, {...params});
}
+
export function editApi(params: { poolId?: number, partCnt?: number}) {
return request.post(`${PMS_HOST}/erp/plan/pool/update/plan`, {...params});
}
+
+export function outFlowApi(params: { poolIds?: any, planId?: number, current?: number, pageSize?:number}):http.PromisePageResp {
+ return request.get(`${PMS_HOST}/erp/storage/out/list`, {params});
+}
+
+export function custBuyApi(params: { planWaitListIds?: any}):http.PromiseResp {
+ return request.get(`${PMS_HOST}/erp/cus/buy/part/get/buy/part/list`, {params});
+}
diff --git a/src/pages/pms/partPlan/PlanPool/components/AreaTable.tsx b/src/pages/pms/partPlan/PlanPool/components/AreaTable.tsx
index 222f332..b209a83 100644
--- a/src/pages/pms/partPlan/PlanPool/components/AreaTable.tsx
+++ b/src/pages/pms/partPlan/PlanPool/components/AreaTable.tsx
@@ -14,7 +14,7 @@ interface Props {
id?: number, // 上一个列表ID
}
export default function Index(props: Props = {}) {
- const { dfParams, key } = useStore();
+ const { dfParams, key, setItem, setOutVisible, setCustVisible } = useStore();
const {showAnalyse=true} = props;
const { data: parts, setParams, loading } = useInitial(getList, [], {...dfParams, ...props});
const [visible, setVisible] = useState(false);
@@ -23,7 +23,6 @@ export default function Index(props: Props = {}) {
const [id, setId] = useState();
useEffect(() => {
- console.log('dfParams11', dfParams, key, props);
if (key == props.type) {
setParams(dfParams, true);
}
@@ -37,13 +36,13 @@ export default function Index(props: Props = {}) {
(t || 0).toFixed(2)} />
(t || 0).toFixed(2)} />
-
+ (r.buyCnt ? { setCustVisible(true); setItem(r); }}>{r.buyCnt} : r.buyCnt)} />
-
+ (r.outStockCnt ? { setOutVisible(true); setItem(r); }}>{r.outStockCnt} : r.outStockCnt)} />
{showAnalyse && (
<>
{
+ if (custVisible && item?.planWaitListIds) {
+ setParams({ planWaitListIds: item.planWaitListIds }, true);
+ setDelay(false);
+ }
+ }, [custVisible]);
+
+ return (
+ setCustVisible(false)}
+ footer={[
+
+ ]}
+ >
+ `${v.waitListIds}`}
+ dataSource={data}
+ pagination={false}
+ loading={loading}
+ scroll={{x: 1400, y: 500}}
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/pages/pms/partPlan/PlanPool/components/OutFlowModal.tsx b/src/pages/pms/partPlan/PlanPool/components/OutFlowModal.tsx
new file mode 100644
index 0000000..649cd21
--- /dev/null
+++ b/src/pages/pms/partPlan/PlanPool/components/OutFlowModal.tsx
@@ -0,0 +1,47 @@
+import React, { useEffect, useState } from 'react';
+import {Button, Modal, Table} from 'antd';
+import {useStore} from '../index';
+import { outFlowApi, OutItem } from '../api';
+import usePagination from '@/hooks/usePagination';
+
+const {Column} = Table;
+
+export default function Index() {
+ const {outVisible, setOutVisible, item} = useStore();
+ const [delay, setDelay]= useState(true);
+ const { list, setParams, loading, paginationConfig } = usePagination(outFlowApi, [], {delay});
+
+ useEffect(() => {
+ if (outVisible && item?.poolIds) {
+ setParams({poolIds: item.poolIds}, true);
+ setDelay(false);
+ }
+ }, [outVisible]);
+
+ return (
+ setOutVisible(false)}
+ footer={[
+
+ ]}
+ >
+ `${v.partId}`}
+ >
+
+
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/pages/pms/partPlan/PlanPool/components/PartTable.tsx b/src/pages/pms/partPlan/PlanPool/components/PartTable.tsx
index 2df6c66..45e1f58 100644
--- a/src/pages/pms/partPlan/PlanPool/components/PartTable.tsx
+++ b/src/pages/pms/partPlan/PlanPool/components/PartTable.tsx
@@ -16,7 +16,7 @@ interface Props {
id?: number, // 上一个列表ID
}
export default function Index(props: Props = {}) {
- const { dfParams, key } = useStore();
+ const { dfParams, key, setItem, setOutVisible, setCustVisible } = useStore();
const {showAnalyse=true} = props;
const { data: parts, setParams, loading } = useInitial(getList, [], {...dfParams, ...props});
const [visible, setVisible] = useState(false);
@@ -43,13 +43,13 @@ export default function Index(props: Props = {}) {
(t || 0).toFixed(2)} />
-
+ (r.buyCnt ? { setCustVisible(true); setItem(r); }}>{r.buyCnt} : r.buyCnt)} />
-
+ (r.outStockCnt ? { setOutVisible(true); setItem(r); }}>{r.outStockCnt} : r.outStockCnt)} />
{showAnalyse && (
<>
(t || 0).toFixed(2)} />
-
+ (r.buyCnt ? { setCustVisible(true); setItem(r); }}>{r.buyCnt} : r.buyCnt)} />
-
+ (r.outStockCnt ? { setOutVisible(true); setItem(r); }}>{r.outStockCnt} : r.outStockCnt)} />
{showAnalyse && (
<>
();
+ const [itemPrice, setItemPrice] = useState();
useEffect(() => {
if (key == props.type) {
@@ -25,8 +25,8 @@ export default function Index(props: Props = {}) {
}, [dfParams, key]);
useEffect(() => {
- if (visible && item?.poolId) {
- form.setFieldsValue({cnt: item.cnt});
+ if (visible && itemPrice?.poolId) {
+ form.setFieldsValue({ cnt: itemPrice.cnt});
} else {
form.resetFields;
}
@@ -43,7 +43,7 @@ export default function Index(props: Props = {}) {
fixed="left"
render={r => (
<>
- { setVisible(true); setItem(r); }}>编辑
+ { setVisible(true); setItemPrice(r); }}>编辑
(t || 0).toFixed(2)} />
-
+ (r.buyCnt ? { setCustVisible(true); setItem(r); }}>{r.buyCnt} : r.buyCnt)} />
-
+ (r.outStockCnt ? { setOutVisible(true); setItem(r); }}>{r.outStockCnt} : r.outStockCnt)} />
{
form.validateFields().then(fields => {
- editApi({poolId: item?.poolId, partCnt: fields.cnt}).then(res => {
+ editApi({ poolId: itemPrice?.poolId, partCnt: fields.cnt}).then(res => {
setVisible(false);
message.success("操作成功");
setParams({}, true);
diff --git a/src/pages/pms/partPlan/PlanPool/components/StorageTable.tsx b/src/pages/pms/partPlan/PlanPool/components/StorageTable.tsx
index 57acfba..ca060aa 100644
--- a/src/pages/pms/partPlan/PlanPool/components/StorageTable.tsx
+++ b/src/pages/pms/partPlan/PlanPool/components/StorageTable.tsx
@@ -14,7 +14,7 @@ interface Props {
id?: number, // 上一个列表ID
}
export default function Index(props: Props = {}) {
- const { dfParams, key } = useStore();
+ const { dfParams, key, setItem, setOutVisible, setCustVisible } = useStore();
const {showAnalyse=true} = props;
const { data: parts, setParams, loading } = useInitial(getList, [], {...dfParams, ...props});
const [visible, setVisible] = useState(false);
@@ -37,12 +37,12 @@ export default function Index(props: Props = {}) {
(t || 0).toFixed(2)} />
-
+ (r.buyCnt ? { setCustVisible(true); setItem(r); }}>{r.buyCnt} : r.buyCnt)} />
-
+ (r.outStockCnt ? { setOutVisible(true); setItem(r); }}>{r.outStockCnt} : r.outStockCnt)} />
{showAnalyse && (
<>
+
+
diff --git a/src/pages/pms/partPlan/PlanPool/useStore.ts b/src/pages/pms/partPlan/PlanPool/useStore.ts
index cdce14f..3acfe99 100644
--- a/src/pages/pms/partPlan/PlanPool/useStore.ts
+++ b/src/pages/pms/partPlan/PlanPool/useStore.ts
@@ -1,17 +1,27 @@
import { useState } from 'react';
import useInitail from "@/hooks/useInitail";
import { getPartTypeApi } from '@/pages/pms/part/Repertory/api';
+import {ListVO} from './api';
export default function useStore() {
const [dfParams, setDfParams] = useState({});
const [key, setKey] = useState('1');
const { data: partTypeData } = useInitail(getPartTypeApi, [], {});
+ const [outVisible, setOutVisible] = useState(false);
+ const [custVisible, setCustVisible] = useState(false);
+ const [item, setItem] = useState();
return {
dfParams,
setDfParams,
key,
setKey,
- partTypeData
+ partTypeData,
+ outVisible,
+ setOutVisible,
+ item,
+ setItem,
+ custVisible,
+ setCustVisible,
};
}
diff --git a/src/pages/pms/storage/partShop/api.ts b/src/pages/pms/storage/partShop/api.ts
index 39d666a..215ca83 100644
--- a/src/pages/pms/storage/partShop/api.ts
+++ b/src/pages/pms/storage/partShop/api.ts
@@ -42,6 +42,12 @@ export function getLockDetail(params?: PmsStoragePartShop.LockParams): http.Prom
export function getFlowDetail(params?: PmsStoragePartShop.FlowParams): http.PromisePageResp {
return request.get(`${PMS_HOST}/erp/part/shop/get/record`, { params });
}
+/**
+ * 查询门店备件锁库流水明细列表
+ */
+export function getLockFlowDetail(params?: PmsStoragePartShop.FlowParams): http.PromisePageResp {
+ return request.get(`${PMS_HOST}/erp/part/shop/get/lock/record`, { params });
+}
// 释放库存
export function unLock(params: PmsStoragePartShop.unLock): http.PromiseResp {
return request.post(`${PMS_HOST}/erp/part/shop/cancel/lock`, { ...params }, { contentType: "form-urlencoded" });
diff --git a/src/pages/pms/storage/partShop/components/Filter.tsx b/src/pages/pms/storage/partShop/components/Filter.tsx
index 4fc9f5c..8894dd1 100644
--- a/src/pages/pms/storage/partShop/components/Filter.tsx
+++ b/src/pages/pms/storage/partShop/components/Filter.tsx
@@ -32,14 +32,14 @@ export default function Filter() {
return (
handleChangeKeywords(v)}
/>
{
@@ -52,7 +52,7 @@ export default function Filter() {
.map((item: PmsStoragePartShop.Option) => ({value: item.id, label: item.name}))}
/>
{
@@ -66,7 +66,7 @@ export default function Filter() {
/>
{
setParams({ ...innerParams, current: 1, type }, true);
}}
@@ -77,7 +77,7 @@ export default function Filter() {
allowClear
placeholder="有无库存筛选"
onChange={v => isStock(v)}
- style={{ width: 150, marginRight: 10 }}
+ style={{ width: 180, marginRight: 10, marginBottom: 10 }}
options={[
{value: 1, label: "有库存"},
{value: 0, label: "无库存"},
@@ -87,7 +87,7 @@ export default function Filter() {
placeholder="排序方式"
defaultValue={18}
onChange={v => isSorter(v)}
- style={{ width: 150 }}
+ style={{ width: 180 }}
options={[
{value: 18, label: "总库存降序"},
{value: 21, label: "锁定库存降序"},
diff --git a/src/pages/pms/storage/partShop/components/List.tsx b/src/pages/pms/storage/partShop/components/List.tsx
index e05f2f1..bdbb818 100644
--- a/src/pages/pms/storage/partShop/components/List.tsx
+++ b/src/pages/pms/storage/partShop/components/List.tsx
@@ -4,6 +4,7 @@ import { useStore } from '../index';
import LockDetailModal from './LockDetailModal';
import FlowDetailModal from './FlowDetailModal';
import PartShopModal from './PartShopModal';
+import LockFlowModal from './LockFlowModal';
const { Column } = Table;
@@ -11,6 +12,7 @@ export default function Filter() {
const { setParams, loading, paginationConfig, list, setVisible, setItem, item, fw, setIsprice} = useStore();
const [visibleLockDetail, setVisibleLockDetail] = useState(false);
const [visibleFlowDetail, setVisibleFlowDetail] = useState(false);
+ const [visibleLockFlow, setVisibleLockFlow] = useState(false);
return (
);
diff --git a/src/pages/pms/storage/partShop/components/LockFlowModal.tsx b/src/pages/pms/storage/partShop/components/LockFlowModal.tsx
new file mode 100644
index 0000000..75ba50a
--- /dev/null
+++ b/src/pages/pms/storage/partShop/components/LockFlowModal.tsx
@@ -0,0 +1,71 @@
+import React, {useEffect, useState} from 'react';
+import {Modal, Table, Button} from 'antd';
+import { getLockFlowDetail } from '@/pages/pms/storage/partShop/api';
+import usePagination from '@/hooks/usePagination';
+
+interface Props {
+ item?: any
+ visible: boolean
+ onCancel: () => any
+}
+const {Column} = Table;
+export default function Index(props: Props) {
+ const {item, visible, onCancel} = props;
+ const [delay, setDelay] = useState(true);
+ const { list, loading, setParams, paginationConfig, setList } = usePagination(getLockFlowDetail, {}, { delay });
+
+ useEffect(() => {
+ if (item.shopId && item.partId && visible) {
+ setParams({ partId: item.partId, shopId: item.shopId, isLock: item.isLock }, true);
+ setDelay(false);
+ } else {
+ setList([]);
+ }
+ }, [visible, item.partId]);
+
+ return (
+ 取消,
+ ]}
+ >
+ `${v.type}_${v.typeId}`}
+ pagination={paginationConfig}
+ >
+
+ t || "--"} />
+ {
+ const obj = JSON.parse(t || '{}');
+ return (
+
+ {!!obj.type &&
{`类型: ${obj.type}`}
}
+ {!!obj.serviceCatName &&
{`进站类型: ${obj.serviceCatName}`}
}
+ {!!obj.exclusiveAdviser &&
{`专属顾问: ${obj.exclusiveAdviser}`}
}
+ {!!obj.shopLinkmanName &&
{`服务顾问: ${obj.shopLinkmanName}`}
}
+ {!!obj.receiverName &&
{`服务顾问: ${obj.receiverName}`}
}
+ {!!obj.plateNo &&
{`车牌号: ${obj.plateNo}`}
}
+ {!!obj.ownerName &&
{`车主: ${obj.ownerName}`}
}
+ {!!obj.vin &&
{`VIN: ${obj.vin}`}
}
+ {!!obj.userName &&
{`操作账号: ${obj.userName}`}
}
+ {!!obj.fixRemark &&
{`备注: ${obj.fixRemark}`}
}
+
+ );
+ }}
+ />
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/pages/pms/storage/partShop/index.tsx b/src/pages/pms/storage/partShop/index.tsx
index 58b61ab..0627080 100644
--- a/src/pages/pms/storage/partShop/index.tsx
+++ b/src/pages/pms/storage/partShop/index.tsx
@@ -1,5 +1,5 @@
import React, {useState} from 'react';
-import { PlusOutlined, VerticalAlignBottomOutlined } from '@ant-design/icons';
+import { PlusOutlined, DownloadOutlined, UploadOutlined } from '@ant-design/icons';
import { Card, Button } from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import Filter from './components/Filter';
@@ -20,53 +20,51 @@ function PartShop() {
return (
-
+
-
+
+ }
+ onClick={() => { setVisible(true); setIsadd(true); }}
+ >
+ 新增
+
{fw && (
- <>
- )}
- type="primary"
- onClick={() => setImportVisible(true)}
- >
- 导入
-
- )}
- type="primary"
- onClick={() => { setImportVisible(true); setStock(true); }}
- style={{marginLeft: 10}}
- >
- 调运库存导入
-
- >
- )}
- {/* {!fw && ( */}
}
type="primary"
- icon={}
- onClick={() => { setMore(true); setIslock(true); }}
+ onClick={() => setImportVisible(true)}
+ style={{ marginLeft: 10 }}
+ >
+ 导入
+
+ )}
+ {fw && (
+ }
+ type="primary"
+ onClick={() => { setImportVisible(true); setStock(true); }}
style={{marginLeft: 10}}
>
- 锁件批量导出
+ 调运库存导入
- {/* )} */}
+ )}
}
- onClick={() => setMore(true)}
+ icon={}
+ onClick={() => { setMore(true); setIslock(true); }}
style={{marginLeft: 10}}
>
- 库存批量导出
+ 锁件批量导出
}
- onClick={() => { setVisible(true); setIsadd(true); }}
- style={{ marginLeft: 10}}
+ icon={}
+ onClick={() => setMore(true)}
+ style={{marginLeft: 10}}
>
- 新增
+ 库存批量导出
diff --git a/src/pages/pms/storage/partShop/interface.d.ts b/src/pages/pms/storage/partShop/interface.d.ts
index 7df1697..c1aaa14 100644
--- a/src/pages/pms/storage/partShop/interface.d.ts
+++ b/src/pages/pms/storage/partShop/interface.d.ts
@@ -21,7 +21,8 @@ declare namespace PmsStoragePartShop {
actualStock?: number,
shopId?: number, // 服务站ID
shopName?: string // 服务站名称
- isOut?: boolean
+ isOut?: boolean,
+ isLock?:boolean
}
interface Params {
@@ -77,6 +78,7 @@ declare namespace PmsStoragePartShop {
isOut?: boolean, // 出入库
current?: number
pageSize?:number
+ isLock?:boolean // 锁库 ?释放
}
/**
diff --git a/src/pages/pms/transfer/HuolalaSetting/api.ts b/src/pages/pms/transfer/HuolalaSetting/api.ts
new file mode 100644
index 0000000..65fd54a
--- /dev/null
+++ b/src/pages/pms/transfer/HuolalaSetting/api.ts
@@ -0,0 +1,116 @@
+import { http } from '@/typing/http';
+import request from '@/utils/request';
+import { PMS_HOST, HOST } from '@/utils/host';
+
+export interface ListVO{
+ /**
+ * 财务账户信息id
+ */
+ id?:number
+ /**
+ * 往来单位id
+ */
+ supplierId?:number
+ /**
+ * 往来单位名称
+ */
+ supplierName?:string
+ /**
+ * 签约门店id
+ */
+ shopId?:number
+ /**
+ * 签约门店名称
+ */
+ shopName?:string;
+ /**
+ * 当前余额
+ */
+ amount?:number;
+ /**
+ * 待到账金额
+ */
+ awaitAmount?:number;
+ /**
+ * 低余额推待办
+ */
+ minAmount?:number;
+ /**
+ * 推待办角色编码
+ */
+ roleCode?:string;
+ /**
+ * 推待办角色名称
+ */
+ roleName?:string;
+ /**
+ * 发单账号
+ */
+ account?:string;
+ /**
+ * 集团id
+ */
+ groupId?:number;
+ /**
+ * 创建时间
+ */
+ time?:string;
+}
+interface Params{
+ current?:number,
+ pageSize?:number
+}
+export interface saveParams{
+ //财务账户信息id
+ id?:number;
+ /**
+ * 往来单位id
+ */
+ supplierId?:number;
+ /**
+ * 往来单位名称
+ */
+ supplierName?:string;
+ /**
+ * 签约门店id
+ */
+ shopId?:number;
+ /**
+ * 低余额推待办
+ */
+ minAmount?:number;
+ /**
+ * 推待办角色编码
+ */
+ roleCode?:string;
+ /**
+ * 推待办角色名称
+ */
+ roleName?:string;
+ /**
+ * 发单账号
+ */
+ // @NotBlank(message = "发单账号不能为空")
+ account?:string;
+}
+interface queryList {
+ current?:number
+ pageSize?:number
+ sysId?:number
+}
+// 查询财务账户信息列表
+export function getList(params: Params):http.PromisePageResp
{
+ return request.get(`${PMS_HOST}/erp/finance/account/get/page`, {params});
+}
+// 新增/编辑API
+export function saveApi(params: saveParams) {
+ return request.post(`${PMS_HOST}/erp/finance/account/exit`, {...params});
+}
+// 推待办角色列表
+export function roleListApi(params: queryList): http.PromisePageResp {
+ return request.get(`${HOST}/role/list`, { params });
+}
+// 删除API
+export function deleteApi(params: {id: number}) {
+ return request.post(`${PMS_HOST}/erp/finance/account/delete`, {...params});
+}
\ No newline at end of file
diff --git a/src/pages/pms/transfer/HuolalaSetting/components/AddModal.tsx b/src/pages/pms/transfer/HuolalaSetting/components/AddModal.tsx
new file mode 100644
index 0000000..af43eb3
--- /dev/null
+++ b/src/pages/pms/transfer/HuolalaSetting/components/AddModal.tsx
@@ -0,0 +1,110 @@
+import React, { useEffect, useState } from 'react';
+import {Form, Button, InputNumber, Modal, message, Input } from 'antd';
+import PmsSelect from '@/pages/pms/comonents/PmsSelect';
+import { ListVO, saveApi, roleListApi } from '../api';
+import { getPageListApi, Item as item } from "@/pages/pms/partPlan/PlanSupplier/api";
+import {getShopApi} from '@/pages/pms/storage/partShop/api';
+import usePagination from '@/hooks/usePagination';
+import useInitail from '@/hooks/useInitail';
+
+const Item = Form.Item;
+
+interface Props{
+ visible?:boolean,
+ onCancel: Function,
+ item?:ListVO
+}
+
+export default function Index(props:Props) {
+ const { list: suppliers } = usePagination- (getPageListApi, { supplierType: 40, pageSize: 500 });
+ const { data: shops } = useInitail(getShopApi, [], {});
+ const { list } = usePagination(roleListApi, { pageSize: 500, sysId: 229 });
+ const [loading, setLoading] = useState(false);
+ const { visible, onCancel, item } = props;
+ const [form] = Form.useForm();
+
+ useEffect(() => {
+ if (visible && item?.id) {
+ form.setFieldsValue({
+ supplierId: item.supplierId,
+ shopId: item.shopId,
+ minAmount: item.minAmount,
+ roleCode: item.roleCode,
+ account: item.account
+ });
+ }
+ if (!visible) {
+ form.resetFields();
+ }
+ }, [visible]);
+
+ const onSave = () => {
+ form.validateFields().then(files => {
+ const params = {
+ id: item?.id,
+ supplierId: files.supplierId,
+ supplierName: suppliers.find(i => i.supplierId == files.supplierId)?.supplierName,
+ shopId: files.shopId,
+ minAmount: files.minAmount,
+ roleCode: files.roleCode,
+ roleName: list.find(i => i.roleCode == files.roleCode)?.roleName,
+ account: files.account
+ };
+ setLoading(true);
+ saveApi(params).then(res => {
+ message.success("保存成功");
+ setLoading(false);
+ onCancel();
+ }).catch(e => {
+ message.error(e.message);
+ setLoading(false);
+ });
+ });
+ };
+
+ return (
+ onCancel()}
+ footer={[
+ ,
+
+ ]}
+ >
+
+
+ );
+}
diff --git a/src/pages/pms/transfer/HuolalaSetting/components/ChargeModal.tsx b/src/pages/pms/transfer/HuolalaSetting/components/ChargeModal.tsx
new file mode 100644
index 0000000..29c965a
--- /dev/null
+++ b/src/pages/pms/transfer/HuolalaSetting/components/ChargeModal.tsx
@@ -0,0 +1,67 @@
+import React from 'react';
+import { Form, Button, InputNumber, Modal } from 'antd';
+import PmsSelect from '@/pages/pms/comonents/PmsSelect';
+
+const Item = Form.Item;
+
+interface Props {
+ visible?: boolean,
+ onCancel: Function,
+ item?: any
+}
+export default function Index(props: Props) {
+ const { visible, onCancel, item } = props;
+ const [form] = Form.useForm();
+
+ const onSave = () => {
+ const params = {id: item.id};
+ console.log(params);
+ };
+
+ return (
+ onCancel()}
+ footer={[
+ ,
+
+ ]}
+ >
+
+
+ );
+}
diff --git a/src/pages/pms/transfer/HuolalaSetting/index.tsx b/src/pages/pms/transfer/HuolalaSetting/index.tsx
new file mode 100644
index 0000000..f69ab9b
--- /dev/null
+++ b/src/pages/pms/transfer/HuolalaSetting/index.tsx
@@ -0,0 +1,55 @@
+import React, { useState } from 'react';
+import { Card, Button, Table, Divider, Popconfirm, message } from 'antd';
+import { PageHeaderWrapper } from '@ant-design/pro-layout';
+import AddModal from './components/AddModal';
+import ChargeModal from './components/ChargeModal';
+import {getList, ListVO, deleteApi} from './api';
+import usePagination from '@/hooks/usePagination';
+
+const Column = Table.Column;
+export default function Index() {
+ const {list, loading, paginationConfig, setParams} = usePagination(getList, [], {});
+ const [current, setCurrent] = useState<{ visible: boolean, item: ListVO }>({visible: false, item: {}});
+ const [chargeInfo, setChargeInfo] = useState<{ visible: boolean, item: ListVO }>({visible: false, item: {}});
+ const data = [{id: 1, supplierName: "货拉拉", shopName: "不过承诺书可能单纯迪士尼才", amount: 3000, minAmount: 1500, roleName: "计划制定员", account: "15725173,16638183"}];
+ return (
+
+ setCurrent({visible: true, item: {}})}>新增}
+ >
+
+
+
+
+
+
+
+ (
+
+ )}
+ />
+
+ setCurrent({ visible: false, item: {} })} />
+ setChargeInfo({ visible: false, item: {} })} />
+
+
+ );
+}
diff --git a/src/pages/pms/transfer/transferPool/comonents/Filiter.tsx b/src/pages/pms/transfer/transferPool/comonents/Filiter.tsx
index 28a6125..451f1bf 100644
--- a/src/pages/pms/transfer/transferPool/comonents/Filiter.tsx
+++ b/src/pages/pms/transfer/transferPool/comonents/Filiter.tsx
@@ -26,9 +26,9 @@ export default function Index() {
setParams({keywords: value}, true)}
- style={{ width: 220, marginRight: 10 }}
+ style={{ width: 200, marginRight: 10, marginBottom: 10 }}
/>