diff --git a/config/routers/crm_new.ts b/config/routers/crm_new.ts
index f0af286..bf6d361 100644
--- a/config/routers/crm_new.ts
+++ b/config/routers/crm_new.ts
@@ -77,4 +77,8 @@ export default [
path: '/crm/threePartyPlatformClue', // 三方平台线索配置
component: './crm_new/ThreePartyPlatformClue',
},
+ {
+ path: '/crm/closeClue', // 暂停区域线索站岗分配
+ component: './crm_new/Settings/subpages/CloseClue',
+ },
];
\ No newline at end of file
diff --git a/config/routers/finance.ts b/config/routers/finance.ts
index 271844c..b582672 100644
--- a/config/routers/finance.ts
+++ b/config/routers/finance.ts
@@ -24,6 +24,10 @@ export default [
component: "finance/CompanyRelationAuth",
},
{
+ path: "/finance2/companyRelationAuth/create", //往来单位关系设置==》新增
+ component: "finance/CompanyRelationCreate",
+ },
+ {
path: "/finance2/specialAccountSetting/deductAccount", //划扣专用账户
component: "./finance/SpecialAccount/DeductAccount",
},
diff --git a/src/pages/admin/Role/components/RoleFilter.tsx b/src/pages/admin/Role/components/RoleFilter.tsx
index 68f821f..518e33c 100644
--- a/src/pages/admin/Role/components/RoleFilter.tsx
+++ b/src/pages/admin/Role/components/RoleFilter.tsx
@@ -24,7 +24,14 @@ export default function RoleFilter() {
禁用
{/* 已删除 */}
-
+
+
+
row.id as number),
+ onSelect: (row: any, _selected: boolean) => {
+ const index = selectData.findIndex((_row) => _row.id == row.id);
+ if (_selected) {
+ selectData.unshift(row);
+ } else if (index > -1) {
+ selectData.splice(index, 1);
+ }
+ setSelectData([...selectData]);
+ },
+ onSelectAll: (selected, selectedRows, changeRows) => {
+ const changedKeys = changeRows.map((row) => row.id);
+ let newData = [];
+ // 全选
+ if (selected) {
+ // 过滤掉已选的
+ newData = selectData.concat(changeRows.filter((row) => !selectData.some((item) => item == row.id)));
+ } else {
+ // 全不选 - 去掉已选的
+ newData = selectData.filter((row) => !changedKeys.find((y) => y === row.id));
+ }
+ setSelectData(newData);
+ },
+ }}
+ >
+
+
+
+
+
+
history.back()}>
+ 返回列表
+
+
+ {!!selectData.length && (
+ <>
+
+
{
+ onNext && onNext();
+ }}
+ >
+ 下一步
+
+ >
+ )}
+
+ >
);
}
diff --git a/src/pages/finance/CompanyRelationCreate/entity.ts b/src/pages/finance/CompanyRelationCreate/entity.ts
new file mode 100644
index 0000000..57843df
--- /dev/null
+++ b/src/pages/finance/CompanyRelationCreate/entity.ts
@@ -0,0 +1,29 @@
+// 发票要求 1:支付前 2:支付后
+export const invoiceRequirements = [
+ {
+ label: "支付前",
+ value: 1,
+ },
+ {
+ label: "支付后",
+ value: 2,
+ },
+];
+
+export enum RequirementsTypeEnum {
+ "支付前" = 1,
+ "支付后",
+}
+
+// 往来单位支付方式
+export const payWay = [
+ { label: "即时支付", value: 1 },
+ { label: "周期支付", value: 2 },
+ { label: "员工垫付", value: 3 },
+];
+
+ export enum PayWayEnum {
+ "即时支付" = 1,
+ "周期支付",
+ "员工垫付",
+ }
diff --git a/src/pages/finance/CompanyRelationCreate/index.tsx b/src/pages/finance/CompanyRelationCreate/index.tsx
new file mode 100644
index 0000000..1bd8581
--- /dev/null
+++ b/src/pages/finance/CompanyRelationCreate/index.tsx
@@ -0,0 +1,73 @@
+import React, { useEffect, useState } from "react";
+import { Card, Steps, Table, Tabs } from "antd";
+import { PageHeaderWrapper } from "@ant-design/pro-layout";
+import { createStore } from "@/hooks/moz";
+import store from "./useStore";
+import SelectCorrespondenceUnits from "./components/SelectCorrespondenceUnits";
+import RelationshipSettings from "./components/RelationshipSettings";
+import { CompanyRelationListVO } from "@/pages/finance/CompanyRelationAuth/api";
+
+const { Column } = Table;
+const { TabPane } = Tabs;
+
+export const { Provider, useStore } = createStore(store);
+
+function CompanyRelationCreate(props) {
+ const pathParams = props.location.state || {};
+ const { Step } = Steps;
+ const [current, setCurrent] = useState(0);
+ const {
+ selected,
+ // loading,
+ selectedRelation,
+ setSelectedRelation,
+ submitLoading,
+ setSubmitLoading,
+ // setLoading,
+ companyParams,
+ setCompanyParams,
+ } = useStore();
+
+ useEffect(() => {
+ setCompanyParams({ ...pathParams });
+ }, []);
+
+ const rowSelection = {
+ onChange: (selectedRowKeys: React.Key[], selectedRows: CompanyRelationListVO[]) => {
+ setSelectedRelation([...selectedRows]);
+ },
+ getCheckboxProps: (record: CompanyRelationListVO) => ({
+ name: String(record.compId),
+ }),
+ };
+
+ return (
+
+
+
+
+
+
+ }
+ >
+
+ setCurrent(current + 1)} />
+
+
+ setCurrent(0)} />
+
+
+
+
+ );
+}
+
+export default (props) => (
+
+
+
+);
diff --git a/src/pages/finance/CompanyRelationCreate/useStore.ts b/src/pages/finance/CompanyRelationCreate/useStore.ts
new file mode 100644
index 0000000..43f154a
--- /dev/null
+++ b/src/pages/finance/CompanyRelationCreate/useStore.ts
@@ -0,0 +1,40 @@
+import { useState} from "react";
+import useInitial from "@/hooks/useInitail";
+import { CompanyRelationListVO } from "./api";
+import { getCompanyBusinessTypesApi } from "@/pages/finance/TradeCompany/api";
+
+export default function useStore() {
+ const [disabled, setDisabled] = useState(true);
+ const [visible, setVisible] = useState(false);
+ const [submitLoading, setSubmitLoading] = useState(false);
+ const [selectData, setSelectData] = useState([]);
+ // 存储已选关系,用于批量删除
+ const [selectedRelation, setSelectedRelation] = useState([]);
+ // 存储新增时选择条件
+ const [companyParams, setCompanyParams] = useState({ dealerId: -1 });
+
+ // 往来单位业务类型列表
+ const { data: comBussinessList, loading: comBussinessLoading } = useInitial(getCompanyBusinessTypesApi, [], null);
+
+ const [selected, setSelected] = useState([]);
+
+ return {
+ selectData,
+ setSelectData,
+ visible,
+ setVisible,
+
+ disabled,
+ setDisabled,
+ selected,
+ setSelected,
+ submitLoading,
+ setSubmitLoading,
+ comBussinessList,
+ comBussinessLoading,
+ selectedRelation,
+ setSelectedRelation,
+ companyParams,
+ setCompanyParams,
+ };
+}
diff --git a/src/pages/finance/SpecialAccount/FinancingCompany/components/CreateModal.tsx b/src/pages/finance/SpecialAccount/FinancingCompany/components/CreateModal.tsx
index 94528ac..e7d11f4 100644
--- a/src/pages/finance/SpecialAccount/FinancingCompany/components/CreateModal.tsx
+++ b/src/pages/finance/SpecialAccount/FinancingCompany/components/CreateModal.tsx
@@ -14,7 +14,6 @@ export default function CreateModal() {
const [form] = Form.useForm();
const [saveLoading, setSaveLoading] = useState(false);
- console.log("current", current);
useEffect(() => {
if (visible) {
form.setFieldsValue({
@@ -77,8 +76,6 @@ export default function CreateModal() {
}
function submit(fieldValue: any) {
- // console.log("表单参数:", fieldValue);
- // return;
const param = {
dealerId,
...fieldValue,
@@ -100,13 +97,11 @@ export default function CreateModal() {
loan: !!fieldValue.loan,
};
setSaveLoading(true);
-
savePlatformMobile(param)
.then((res) => {
message.success("保存成功");
setVisible(false);
setLoading(true);
- // setSaveLoading(false);
})
.catch((err) => {
message.error(err.message);
@@ -199,7 +194,6 @@ export default function CreateModal() {
))}
-
{accountList.map((item) => (
@@ -275,6 +269,18 @@ export default function CreateModal() {
formatter={(value) => `${value} %`}
/>
+ {/* 清票划扣账户类型:1 一般户;2 保证金户;3 一般户,保证金户(See: 清票划扣账户类型) */}
+
+
+ 一般户
+ 保证金户
+ 一般户,保证金户
+
+
`${value} 个月`} />
@@ -285,14 +291,12 @@ export default function CreateModal() {
>
`${value} 天`} />
-
是
否
-
prevValues.toLoan != currentValues.toLoan}>
{({ getFieldValue }): any => {
const category = getFieldValue("toLoan");
@@ -353,7 +357,6 @@ export default function CreateModal() {
) : null;
}}
-
是
diff --git a/src/pages/finance/TradeCompany/components/AdressSelect.tsx b/src/pages/finance/TradeCompany/components/AdressSelect.tsx
new file mode 100644
index 0000000..bdfac6f
--- /dev/null
+++ b/src/pages/finance/TradeCompany/components/AdressSelect.tsx
@@ -0,0 +1,74 @@
+import React, { useEffect, useState } from "react";
+import { Modal, Form, Select, Input, Radio } from "antd";
+import PositionSelector from "@/components/PositionSelector";
+import ShopSelect from "@/components/ShopSelect";
+import * as API from "@/common/api";
+import useInitial from "@/hooks/useInitail";
+import { FormInstance } from "antd/es/form/Form";
+
+const FormItem = Form.Item;
+
+interface Props {
+
+ form: FormInstance;
+}
+
+function AdressSelect(props: Props) {
+ const {form } = props;
+ const [hiddern, setHidden] = useState(true); //控制地图选择
+ const [own, setOwn] = useState(1); //配置控制
+
+ const _onChange = (e: any) => {
+ form.setFieldsValue({
+ addrslng: undefined,
+ addrslat: undefined,
+ });
+ if (e.target.value === 1) {
+ setHidden(true);
+ setOwn(e.target.value);
+ } else {
+ setHidden(false);
+ setOwn(e.target.value);
+ }
+ };
+
+ const onAd = (e: any) => {
+ form.setFieldsValue({
+ addrslng: e.point.lng,
+ addrslat: e.point.lat,
+ });
+ };
+
+ return (
+ <>
+
+ _onChange(e)} value={own}>
+ 地图配置
+ 自定义配置
+
+
+ {hiddern && (
+
+ onAd(e)} />
+
+ )}
+
+
+
+
+
+
+
+
+ >
+ );
+}
+
+export default AdressSelect;
diff --git a/src/pages/finance/TradeCompany/components/CreateModal.tsx b/src/pages/finance/TradeCompany/components/CreateModal.tsx
index 2421112..834614a 100644
--- a/src/pages/finance/TradeCompany/components/CreateModal.tsx
+++ b/src/pages/finance/TradeCompany/components/CreateModal.tsx
@@ -6,6 +6,7 @@ import PositionSelector from "@/components/PositionSelector";
import Contact from "./ContactsInput";
import Account from "./AccountsInput";
import { createCompanyApi, updateCompanyApi, getDetailComAccountApi } from "../api";
+import AdressSelect from "@/pages/finance/TradeCompany/components/AdressSelect";
const FormItem = Form.Item;
const { Option } = Select;
@@ -31,6 +32,7 @@ export default function CreateModal() {
item = data;
}
form.setFieldsValue({
+ ...item,
compName: item.compName,
compShortName: item.compShortName,
subjectType: item.subjectType,
@@ -41,7 +43,9 @@ export default function CreateModal() {
brandId: item.brandId,
location: item.compAddress
? {
- address: "",
+ // address: "",
+ //@ts-ignored;
+ address: item.lonLatAddress||"",
point: {
lng: item.longitude,
lat: item.latitude,
@@ -61,8 +65,9 @@ export default function CreateModal() {
const param = {
id: current.id,
...item,
- longitude: (item.location?.point || {}).lng,
- latitude: (item.location?.point || {}).lat,
+ longitude: Number(item.longitude),
+ latitude: Number(item.latitude),
+ lonLatAddress: item.location? item.location.address : "",
};
setSavelLoading(true);
const saveApi = current.id ? updateCompanyApi : createCompanyApi;
@@ -104,7 +109,7 @@ export default function CreateModal() {
}}
width="60%"
>
-
-
-
-
+ {/* */}
+ {/* */}
+
+ {/* */}
-
+
diff --git a/src/pages/notice/PublicRelease/store.ts b/src/pages/notice/PublicRelease/store.ts
index 7d1a6e2..f78b754 100644
--- a/src/pages/notice/PublicRelease/store.ts
+++ b/src/pages/notice/PublicRelease/store.ts
@@ -1,7 +1,7 @@
/*
* @Date: 2021-08-10 10:05:18
* @LastEditors: wangqiang@feewee.cn
- * @LastEditTime: 2022-11-02 16:18:14
+ * @LastEditTime: 2022-12-09 14:21:58
*/
import useInitial from "@/hooks/useInitail";
@@ -9,40 +9,6 @@ import usePagination from "@/hooks/usePagination";
import { useMemo, useState } from "react";
import * as api from "./api";
-export default function useStore() {
- const [listType, setListType] = useState<"列表" | "草稿">("列表");
- const listPagination = usePagination(api.getPublicListApi);
- const draftPagination = usePagination(api.getDraftListApi);
- const { data: TypeList } = useInitial(api.getFileTypeListApi, [], null);
- const { data: Way } = useInitial(api.getPublicWayListApi, [], null);
- const [visible, setVisible] = useState(false);
- const [current, setCurrent] = useState();
- const [isView, setIsView] = useState(false); // 是否查看
- const [isChangeDetail, setIsChangeDetial] = useState(false); // 是否查看变更记录
- const [fileChangeId, setFileChangeId] = useState(); // 变更记录ID,用于查询变更记录详情使用
- const [rangeDetailVisible, setRangeDetailVisible] = useState(false); // 是否打开执行范围详情
- const [isChange, setIsChange] = useState(false); // 是否变更执行文件
- const [approvalProgressModalInfo, setApprovalProgressModalInfo] =
- useState({ visible: false });
- const [fidModal, setFidModal] = useState<{
- visible: boolean;
- title?: string;
- fidList?: string[];
- }>({ visible: false });
-
- const [fileProgressModal, setFileProgressModal] = useState<{
- visible: boolean;
- id?: number; // 执行文件ID
- title?: string; // 执行文件名
- loading?: boolean;
- data?: CommonProgress.Item[];
- }>({ visible: false });
-
- const pagination = useMemo(
- () => (listType === "列表" ? listPagination : draftPagination),
- [listType, listPagination, draftPagination]
- );
-
enum RangeType {
"全集团" = 1,
"部分人员",
@@ -114,6 +80,40 @@ export default function useStore() {
"#F4333C",
}
+export default function useStore() {
+ const [listType, setListType] = useState<"列表" | "草稿">("列表");
+ const listPagination = usePagination(api.getPublicListApi, { fileStatus: FileStatus.执行中 });
+ const draftPagination = usePagination(api.getDraftListApi);
+ const { data: TypeList } = useInitial(api.getFileTypeListApi, [], null);
+ const { data: Way } = useInitial(api.getPublicWayListApi, [], null);
+ const [visible, setVisible] = useState(false);
+ const [current, setCurrent] = useState();
+ const [isView, setIsView] = useState(false); // 是否查看
+ const [isChangeDetail, setIsChangeDetial] = useState(false); // 是否查看变更记录
+ const [fileChangeId, setFileChangeId] = useState(); // 变更记录ID,用于查询变更记录详情使用
+ const [rangeDetailVisible, setRangeDetailVisible] = useState(false); // 是否打开执行范围详情
+ const [isChange, setIsChange] = useState(false); // 是否变更执行文件
+ const [approvalProgressModalInfo, setApprovalProgressModalInfo] =
+ useState({ visible: false });
+ const [fidModal, setFidModal] = useState<{
+ visible: boolean;
+ title?: string;
+ fidList?: string[];
+ }>({ visible: false });
+
+ const [fileProgressModal, setFileProgressModal] = useState<{
+ visible: boolean;
+ id?: number; // 执行文件ID
+ title?: string; // 执行文件名
+ loading?: boolean;
+ data?: CommonProgress.Item[];
+ }>({ visible: false });
+
+ const pagination = useMemo(
+ () => (listType === "列表" ? listPagination : draftPagination),
+ [listType, listPagination, draftPagination]
+ );
+
const gotoDraftList = (item: PublicNotice.ListVO) => {
draftPagination.setParams({ fileId: item.id, fileName: item.title });
setTimeout(() => {
diff --git a/src/pages/pms/partPlan/MinRatioPlan/components/StepBnt.tsx b/src/pages/pms/partPlan/MinRatioPlan/components/StepBnt.tsx
index 0824753..696f8ca 100644
--- a/src/pages/pms/partPlan/MinRatioPlan/components/StepBnt.tsx
+++ b/src/pages/pms/partPlan/MinRatioPlan/components/StepBnt.tsx
@@ -8,7 +8,7 @@ interface Props {
}
export default function Index({length}: Props) {
const { bntLoading, getStep2, current, setCurrent, getSummary, submit, summarySupplier, brandId, parts } = useStore();
- const flag = _.flattenDeep(summarySupplier.map(it => it.parts || [])).length == parts.length;
+ // const flag = _.flattenDeep(summarySupplier.map(it => it.parts || [])).length == parts.length;
const next = _.throttle(() => {
if (current == 1) {
getStep2();
@@ -40,7 +40,7 @@ export default function Index({length}: Props) {
{current == length && (
diff --git a/src/pages/pms/storage/partShop/components/UploadExcel.tsx b/src/pages/pms/storage/partShop/components/UploadExcel.tsx
index 27bfbf0..7e674d0 100644
--- a/src/pages/pms/storage/partShop/components/UploadExcel.tsx
+++ b/src/pages/pms/storage/partShop/components/UploadExcel.tsx
@@ -2,18 +2,27 @@ import React, { useState } from 'react';
import { InboxOutlined } from '@ant-design/icons';
import { Button, Modal, Upload, message, Switch } from 'antd';
import { useStore } from "@/pages/pms/storage/partShop";
+import {importStockFix, shopImport} from './api';
+import _ from 'lodash';
+import type { UploadFile, UploadProps } from 'antd/es/upload/interface';
interface Props{
stock?:boolean
}
+const apiObj: {[key: number]: any} = {
+ 1: importStockFix,
+ 2: shopImport
+};
const Dragger = Upload.Dragger;
export default function UploadExcel(props: Props) {
const { importVisible, setImportVisible, override, setOverride } = useStore();
- const [fileList, setFileList] = useState([]);
+ const [fileList, setFileList] = useState([]);
const [uploadResult, setUploadResult] = useState();
+ const [confirmLoading, setConfirmLoading] = useState(false);
const {stock} = props;
function beforeUpload(file: any) {
+ setFileList([...fileList, file]);
if (override == null) {
message.error('请选择是否覆盖数据');
return false;
@@ -23,37 +32,36 @@ export default function UploadExcel(props: Props) {
message.error('文件不能超过20MB!');
return false;
}
- return isLt2M;
+ return false;
}
- function handleChange(info: any) {
- const { file: { status, response }, fileList } = info;
- if (status !== 'uploading' && response) {
- const { success, result, data } = response;
- if (status === 'done' && success) {
- message.success(`${info.file.name} 上传成功`);
- // 调用上传接口
- setUploadResult(data);
- } else if (response && !success) {
- message.error(`${info.file.name} 上传失败: ${result}`);
- }
- }
- setFileList(fileList.splice(-1));
- }
- function handleChangeStock(info: any) {
- const { file: { status, response }, fileList } = info;
- if (status !== 'uploading' && response) {
- const { success, result, data } = response;
- if (status === 'done' && success) {
- message.success(`${info.file.name} 上传成功`);
- // 调用上传接口
- setUploadResult(data);
- } else if (response && !success) {
- message.error(`${info.file.name} 上传失败: ${result}`);
- }
+ function submit() {
+ if (override == null) {
+ message.error('请选择是否覆盖数据');
+ return;
}
- setFileList(fileList.splice(-1));
+ setConfirmLoading(true);
+ const type = stock ? 1 : 2;
+ apiObj[type]({file: fileList[0], override}).then((res) => {
+ setConfirmLoading(false);
+ setUploadResult(res.data)
+ message.success('导入成功');
+ }).catch((e: any) => {
+ setConfirmLoading(false);
+ message.error(e.message);
+ });
}
+ const uploadProps: UploadProps = {
+ onRemove: (file) => {
+ const index = fileList.indexOf(file);
+ const newFileList = fileList.slice();
+ newFileList.splice(index, 1);
+ setFileList(newFileList);
+ },
+ beforeUpload,
+ fileList,
+ };
+
return (
{ setImportVisible(false); setUploadResult(null); }}
footer={
- {
- setImportVisible(false);
- setUploadResult(null);
- }}
+ {
+ setImportVisible(false);
+ setUploadResult(null);
+ }}
>
取消
+ 确定
}
>
@@ -79,36 +90,14 @@ export default function UploadExcel(props: Props) {
setOverride(checked)} />
{stock ? (
-
+
将文件拖到此处上传
) : (
-
+
diff --git a/src/pages/pms/storage/partShop/components/api.tsx b/src/pages/pms/storage/partShop/components/api.tsx
index 9783f65..780c0a7 100644
--- a/src/pages/pms/storage/partShop/components/api.tsx
+++ b/src/pages/pms/storage/partShop/components/api.tsx
@@ -1,6 +1,17 @@
import request from '@/utils/request';
import { PMS_HOST } from '@/utils/host';
+import {http} from "@/typing/http";
export function getList(params?: number) {
return request.get(`${PMS_HOST}/erp/part/shop/get/stock/cnt`, {params: {storageId: params}});
}
+
+// 导入
+export function importStockFix(params: {override: boolean, file: any}): http.PromiseResp {
+ return request.post(`${PMS_HOST}/erp/part/shop/import/stock/fix`, params, { contentType: "form-data" });
+}
+
+// 导入
+export function shopImport(params: {override: boolean, file: any}): http.PromiseResp {
+ return request.post(`${PMS_HOST}/erp/part/shop/import`, params, { contentType: "form-data" });
+}
diff --git a/src/pages/stock/AllowanceConfirm/EditComfirm/Manufacturer/index.tsx b/src/pages/stock/AllowanceConfirm/EditComfirm/Manufacturer/index.tsx
index e32fe82..4f5f73b 100644
--- a/src/pages/stock/AllowanceConfirm/EditComfirm/Manufacturer/index.tsx
+++ b/src/pages/stock/AllowanceConfirm/EditComfirm/Manufacturer/index.tsx
@@ -277,6 +277,7 @@ export default function CreateModal(props: Props) {
rebateId: Number(rebateId),
orderIds,
subsidyType: currentItem.subsidyType,
+ promotionId: currentItem.promotionId
});
message.success(result || "操作成功");
} catch (error: any) {