Commit 795fbf6da1f56cb8701620022d0502be74a7420a

Authored by 曾国涛
2 parents 4a8e9287 7899437a

Merge branch 'master' into invoice

# Conflicts:
#	src/pages/Order/constant.ts
#	src/services/definition.ts
#	src/services/request.ts
Showing 41 changed files with 8157 additions and 2340 deletions
.umirc.ts
... ... @@ -66,6 +66,20 @@ export default defineConfig({
66 66 access: 'canReadAdminAndFinanceAndSales',
67 67 },
68 68 {
  69 + name: '课题组管理',
  70 + path: '/researchGroup',
  71 + component: './ResearchGroup',
  72 + icon: 'AccountBookOutlined',
  73 + access: 'canReadAdminAndSales',
  74 + },
  75 + {
  76 + name: '分期账单',
  77 + path: '/instalment',
  78 + component: './Instalment',
  79 + icon: 'BookOutlined',
  80 + access: 'canReadLinda',
  81 + },
  82 + {
69 83 name: '打印',
70 84 path: '/print',
71 85 component: './OrderPrint',
... ...
src/access.ts
1 1 export default (initialState: API.UserInfo) => {
2 2 // 在这里按照初始化数据定义项目中的权限,统一管理
3 3 // 参考文档 https://umijs.org/docs/max/access
4   - const { roleSmallVO } = initialState;
  4 + const { roleSmallVO, username } = initialState;
5 5 const canReadAdmin = roleSmallVO?.code === 'admin';
6 6 const canReadProcure = roleSmallVO?.code === 'procure';
7 7 const canReadFinance = roleSmallVO?.code === 'finance';
... ... @@ -11,9 +11,11 @@ export default (initialState: API.UserInfo) => {
11 11 return {
12 12 canReadAdmin: canReadAdmin,
13 13 canReadProcure: canReadProcure,
  14 + canReadLinda: username === 'Linda' || username === '吴量',
14 15 canReadAdminAndFinance: canReadFinance || canReadAdmin,
15 16 canReadSales: canReadSales,
16 17 canReadAdminAndFinanceAndSales:
17 18 canReadFinance || canReadAdmin || canReadSales,
  19 + canReadAdminAndSales: canReadAdmin || canReadSales,
18 20 };
19 21 };
... ...
src/pages/Instalment/components/comfire/comfire.tsx 0 → 100644
  1 +import { ModalForm } from '@ant-design/pro-components';
  2 +import { Form, message } from 'antd';
  3 +import { useState } from 'react';
  4 +
  5 +const waitTime = (time: number = 100) => {
  6 + return new Promise((resolve) => {
  7 + setTimeout(() => {
  8 + resolve(true);
  9 + }, time);
  10 + });
  11 +};
  12 +
  13 +export default ({ currtDid, sureDelete }) => {
  14 + const [form] = Form.useForm<{ name: string; company: string }>();
  15 + const [ids, setIds] = useState([]);
  16 +
  17 + function getIds() {
  18 + setIds([]);
  19 + setIds(currtDid);
  20 + }
  21 + return (
  22 + <ModalForm<{
  23 + name: string;
  24 + company: string;
  25 + }>
  26 + trigger={
  27 + <a
  28 + onClick={() => {
  29 + getIds();
  30 + }}
  31 + >
  32 + 删除
  33 + </a>
  34 + }
  35 + form={form}
  36 + autoFocusFirstInput
  37 + width={190}
  38 + modalProps={{
  39 + destroyOnClose: true,
  40 + }}
  41 + onFinish={async () => {
  42 + await waitTime(100);
  43 + sureDelete([ids]);
  44 + message.success('提交成功');
  45 + return true;
  46 + }}
  47 + >
  48 + <br />
  49 + <h2>确定删除吗</h2>
  50 + </ModalForm>
  51 + );
  52 +};
... ...
src/pages/Instalment/components/detail/detail.tsx 0 → 100644
  1 +import {
  2 + postOrderErpOrderStagesAdd,
  3 + postOrderErpOrderStagesPayWaySaveOrUpdate,
  4 + postOrderErpOrderStagesSearch,
  5 + postOrderErpOrderStagesUpload,
  6 +} from '@/services';
  7 +import { PlusOutlined } from '@ant-design/icons';
  8 +import {
  9 + ModalForm,
  10 + ProCard,
  11 + ProForm,
  12 + ProFormDatePicker,
  13 + ProFormText,
  14 + ProFormTextArea,
  15 + ProFormUploadButton,
  16 +} from '@ant-design/pro-components';
  17 +import { Button, Form, message } from 'antd';
  18 +import { RcFile } from 'antd/es/upload';
  19 +import { useEffect, useState } from 'react';
  20 +import PayWayDetail from '../payWayDetail/payWayDetail';
  21 +import ProductDetail from '../productDetail/productDetail';
  22 +
  23 +const waitTime = (time: number = 100) => {
  24 + return new Promise((resolve) => {
  25 + setTimeout(() => {
  26 + resolve(true);
  27 + }, time);
  28 + });
  29 +};
  30 +
  31 +export default ({ toReload }) => {
  32 + const [form] = Form.useForm<{ name: string; company: string }>();
  33 + const [contextBody, setContextBody] = useState<OrderStagesWithListItem>({
  34 + id: undefined,
  35 + contract: undefined,
  36 + dateRange: undefined,
  37 + terminal: undefined,
  38 + orderStagesDeviceVoList: [],
  39 + totalPrice: undefined,
  40 + payWay: '30/30/30/10',
  41 + annex: undefined,
  42 + remark: undefined,
  43 + });
  44 + const [editProductBody, setEditProductBody] = useState([]);
  45 + const [total, setTotal] = useState(0);
  46 + const [payWayBody, setPayWayBody] = useState([]);
  47 + const [otherBody, setOtherBody] = useState([]);
  48 + const [isDis] = useState(true);
  49 +
  50 + type OrderStagesWithListItem = {
  51 + //文件编号
  52 + id?: number;
  53 + //合同编号
  54 + contract?: string;
  55 + //供应商名称
  56 + vendor?: string;
  57 + //签合同日期
  58 + dateRange?: Date;
  59 + //终端名称
  60 + terminal?: string;
  61 + orderStagesDeviceVoList: orderStagesDevice[];
  62 + //合同总金额
  63 + totalPrice?: number;
  64 + //付款方式
  65 + payWay?: string;
  66 + //附件
  67 + annex?: string;
  68 + //备注
  69 + remark?: string;
  70 + };
  71 +
  72 + type orderStagesDevice = {
  73 + //设备id
  74 + dId: number;
  75 + //设备名称
  76 + deviceName: string;
  77 + //设备型号
  78 + deviceModel: string;
  79 + //数量
  80 + count: number;
  81 + //单价
  82 + unitPrice: number;
  83 + //总价
  84 + price: number;
  85 + };
  86 +
  87 + function setSave(value) {
  88 + setOtherBody(value);
  89 + }
  90 +
  91 + useEffect(() => {
  92 + setContextBody({ ...contextBody, totalPrice: total });
  93 + form.setFieldValue('totalPrice', total);
  94 + }, [total]);
  95 +
  96 + const handleInputChange = (value: string, no: number, priceNow?: number) => {
  97 + if (value === '') {
  98 + message.info('请输入比例!');
  99 + } else {
  100 + let totalPay = 0;
  101 + const payValue: string[] = value.split('/');
  102 + let body:
  103 + | ((prevState: never[]) => never[])
  104 + | { proportion: string; payPrice: number }[] = [];
  105 + if (no === 1) {
  106 + if (payValue.length !== 4) {
  107 + message.warning('比例个数总和不为4个!');
  108 + } else {
  109 + payValue.forEach((item) => {
  110 + totalPay += Number(item);
  111 + });
  112 + }
  113 + if (totalPay !== 100) {
  114 + message.warning('比例总和不为100!');
  115 + } else {
  116 + message.success('输入有效!');
  117 + payValue.forEach((item) => {
  118 + body.push({
  119 + proportion: item + '%',
  120 + payPrice: (Number(item) * total) / 100,
  121 + });
  122 + });
  123 + setPayWayBody(body);
  124 + }
  125 + } else {
  126 + payValue.forEach((item) => {
  127 + totalPay += Number(item);
  128 + });
  129 + payValue.forEach((item) => {
  130 + body.push({
  131 + proportion: item + '%',
  132 + payPrice: (Number(item) * priceNow) / 100,
  133 + });
  134 + });
  135 + setPayWayBody(body);
  136 + }
  137 + }
  138 + };
  139 +
  140 + function getEditProductBody(value) {
  141 + setEditProductBody(value);
  142 + let price = 0;
  143 + value.map((obj) => (price += obj.count * obj.unitPrice));
  144 + setTotal(price);
  145 + setContextBody({ ...contextBody, orderStagesDeviceVoList: value });
  146 + if (contextBody.payWay === '') {
  147 + handleInputChange('30/30/30/10', 0, price);
  148 + } else {
  149 + handleInputChange(contextBody.payWay, 0, price);
  150 + }
  151 + }
  152 +
  153 + function refresh() {
  154 + setEditProductBody([]);
  155 + setContextBody({
  156 + id: undefined,
  157 + contract: undefined,
  158 + dateRange: undefined,
  159 + terminal: undefined,
  160 + orderStagesDeviceVoList: [],
  161 + totalPrice: undefined,
  162 + payWay: '30/30/30/10',
  163 + annex: undefined,
  164 + remark: undefined,
  165 + });
  166 + handleInputChange('30/30/30/10', 0, 0);
  167 + }
  168 +
  169 + return (
  170 + <ModalForm<OrderStagesWithListItem>
  171 + title="新建"
  172 + trigger={
  173 + <Button
  174 + key="button"
  175 + icon={<PlusOutlined />}
  176 + type="primary"
  177 + onClick={() => refresh()}
  178 + >
  179 + 新增
  180 + </Button>
  181 + }
  182 + form={form}
  183 + autoFocusFirstInput
  184 + modalProps={{
  185 + destroyOnClose: true,
  186 + }}
  187 + submitTimeout={2000}
  188 + onFinish={async (values) => {
  189 + console.log(values);
  190 + if (editProductBody.length === 0) {
  191 + message.error('请填写产品数据');
  192 + return false;
  193 + }
  194 + let remakeValue = [];
  195 +
  196 + const formData = new FormData();
  197 + let toSendEdit = {
  198 + id: values.id || contextBody.id,
  199 + contract: values.contract || contextBody.contract,
  200 + vendor: values.vendor || contextBody.vendor,
  201 + dateRange: values.dateRange || contextBody.dateRange,
  202 + terminal: values.terminal || contextBody.terminal,
  203 + orderStagesDeviceDoList:
  204 + values.orderStagesDeviceVoList ||
  205 + contextBody.orderStagesDeviceVoList,
  206 + totalPrice: values.totalPrice || contextBody.totalPrice,
  207 + payWay: values.payWay || contextBody.payWay,
  208 + annex: contextBody.annex,
  209 + remark: values.remark || contextBody.remark,
  210 + };
  211 + if (values.annex) {
  212 + formData.append('file', values.annex[0].originFileObj as RcFile);
  213 + const res = await postOrderErpOrderStagesUpload({
  214 + data: formData,
  215 + headers: {
  216 + 'Content-Type':
  217 + 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
  218 + },
  219 + });
  220 + if (res.data) {
  221 + toSendEdit.annex = res.data;
  222 + }
  223 + }
  224 + const isSaveOrUpdate = await postOrderErpOrderStagesAdd({
  225 + data: { ...toSendEdit },
  226 + });
  227 +
  228 + if (isSaveOrUpdate) {
  229 + const promises = [];
  230 +
  231 + otherBody.forEach((item) => {
  232 + let remakeItem = {
  233 + ossId: item.ossId,
  234 + number: item.id,
  235 + dateRange: item.payDate,
  236 + fileName: item.fileName,
  237 + };
  238 + if (
  239 + typeof item.fileUrl === 'object' &&
  240 + item.fileUrl instanceof File
  241 + ) {
  242 + const formData = new FormData();
  243 + formData.append('file', item.fileUrl as RcFile);
  244 + const uploadPromise = async () => {
  245 + const res = await postOrderErpOrderStagesUpload({
  246 + data: formData,
  247 + headers: {
  248 + 'Content-Type':
  249 + 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
  250 + },
  251 + });
  252 + if (res.data) {
  253 + remakeItem.fileUrl = res.data;
  254 + }
  255 + };
  256 + promises.push(uploadPromise());
  257 + }
  258 + remakeValue.push(remakeItem);
  259 + });
  260 +
  261 + let makeEnd = [];
  262 + const getRetrunIDPromise = async () => {
  263 + let returnOssID = await postOrderErpOrderStagesSearch({
  264 + data: { contract: values.contract || contextBody.contract },
  265 + });
  266 + console.log(returnOssID.data);
  267 +
  268 + if (returnOssID) {
  269 + makeEnd = remakeValue.map((item) => {
  270 + return { ...item, ossId: returnOssID.data[0].id };
  271 + });
  272 + }
  273 + };
  274 +
  275 + promises.push(getRetrunIDPromise());
  276 + Promise.all(promises).then(async () => {
  277 + await postOrderErpOrderStagesPayWaySaveOrUpdate({
  278 + data: makeEnd,
  279 + });
  280 + });
  281 + toReload();
  282 + }
  283 + await waitTime(2000);
  284 + message.success('提交成功');
  285 + return true;
  286 + }}
  287 + >
  288 + <ProCard title="基本信息" headerBordered bordered>
  289 + <ProForm.Group>
  290 + <ProFormText
  291 + width="md"
  292 + name="vendor"
  293 + rules={[{ required: true, message: '此项为必填项' }]}
  294 + label="供应商名称"
  295 + placeholder="请输入"
  296 + initialValue={contextBody.vendor}
  297 + />
  298 +
  299 + <ProFormText
  300 + width="md"
  301 + name="terminal"
  302 + rules={[{ required: true, message: '此项为必填项' }]}
  303 + label="终端名称"
  304 + placeholder="请输入"
  305 + initialValue={contextBody.terminal}
  306 + />
  307 +
  308 + <ProFormDatePicker
  309 + name="dateRange"
  310 + width="md"
  311 + label="签合同日期"
  312 + placeholder="请选择日期"
  313 + fieldProps={{
  314 + format: (value) => value.format('YYYY-MM-DD'),
  315 + }}
  316 + initialValue={contextBody.dateRange}
  317 + />
  318 +
  319 + <ProFormText
  320 + width="md"
  321 + name="payWay"
  322 + rules={[{ required: true, message: '此项为必填项' }]}
  323 + label="付款比例"
  324 + placeholder="请输入"
  325 + initialValue={contextBody.payWay}
  326 + disabled={!isDis}
  327 + onBlur={(e) => {
  328 + setContextBody({ ...contextBody, payWay: e.target.value });
  329 + handleInputChange(e.target.value, 1);
  330 + }}
  331 + />
  332 +
  333 + <ProFormText
  334 + width="md"
  335 + name="contract"
  336 + rules={[{ required: true, message: '此项为必填项' }]}
  337 + label="合同编号"
  338 + placeholder="请输入"
  339 + initialValue={contextBody.contract}
  340 + />
  341 +
  342 + <ProFormUploadButton
  343 + width="md"
  344 + name="annex"
  345 + max={1}
  346 + label="合同附件"
  347 + />
  348 +
  349 + <ProFormText
  350 + width="md"
  351 + name="totalPrice"
  352 + label="合同金额"
  353 + placeholder="请输入"
  354 + disabled={isDis}
  355 + initialValue={'0'}
  356 + />
  357 + </ProForm.Group>
  358 + </ProCard>
  359 + <ProCard
  360 + title={
  361 + <>
  362 + <span style={{ color: 'red' }}>*</span>产品明细
  363 + </>
  364 + }
  365 + style={{ marginTop: 10 }}
  366 + headerBordered
  367 + bordered
  368 + >
  369 + <ProductDetail
  370 + productBody={[]}
  371 + EditProductBody={getEditProductBody}
  372 + ></ProductDetail>
  373 + </ProCard>
  374 +
  375 + <ProCard
  376 + title="付款信息"
  377 + style={{ marginTop: 10 }}
  378 + headerBordered
  379 + bordered
  380 + >
  381 + <PayWayDetail
  382 + payBody={payWayBody}
  383 + thisId={null}
  384 + currtSave={setSave}
  385 + ></PayWayDetail>
  386 + </ProCard>
  387 +
  388 + <ProCard style={{ marginTop: 10 }} headerBordered bordered>
  389 + <ProFormTextArea
  390 + label="备注"
  391 + name="remark"
  392 + initialValue={contextBody.remark}
  393 + />
  394 + </ProCard>
  395 + </ModalForm>
  396 + );
  397 +};
... ...
src/pages/Instalment/components/edit/edit.tsx 0 → 100644
  1 +import {
  2 + postOrderErpOrderStagesPayWaySaveOrUpdate,
  3 + postOrderErpOrderStagesSaveOrUpdate,
  4 + postOrderErpOrderStagesSearch,
  5 + postOrderErpOrderStagesUpload,
  6 +} from '@/services';
  7 +import {
  8 + ModalForm,
  9 + ProCard,
  10 + ProForm,
  11 + ProFormDatePicker,
  12 + ProFormText,
  13 + ProFormTextArea,
  14 + ProFormUploadButton,
  15 +} from '@ant-design/pro-components';
  16 +import { Form, message } from 'antd';
  17 +import { RcFile } from 'antd/es/upload';
  18 +import { useEffect, useState } from 'react';
  19 +import PayWayDetail from '../payWayDetail/payWayDetail';
  20 +import ProductDetail from '../productDetail/productDetail';
  21 +
  22 +const waitTime = (time: number = 100) => {
  23 + return new Promise((resolve) => {
  24 + setTimeout(() => {
  25 + resolve(true);
  26 + }, time);
  27 + });
  28 +};
  29 +
  30 +export default ({ currentContract, toReload }) => {
  31 + const [form] = Form.useForm<{ name: string; company: string }>();
  32 + const [contextBody, setContextBody] = useState({});
  33 + const [total, setTotal] = useState(0);
  34 + const [payWayBody, setPayWayBody] = useState([]);
  35 + const [otherBody, setOtherBody] = useState([]);
  36 +
  37 + type OrderStagesWithListItem = {
  38 + //文件编号
  39 + id: number;
  40 + //合同编号
  41 + contract: string;
  42 + //供应商名称
  43 + vendor: string;
  44 + //签合同日期
  45 + dateRange: Date;
  46 + //终端名称
  47 + terminal: string;
  48 + orderStagesDeviceVoList: orderStagesDevice[];
  49 + //合同总金额
  50 + totalPrice: number;
  51 + //付款方式
  52 + payWay: string;
  53 + //附件
  54 + annex: string;
  55 + //备注
  56 + remark: string;
  57 + };
  58 +
  59 + type orderStagesDevice = {
  60 + //设备id
  61 + dId: number;
  62 + //设备名称
  63 + deviceName: string;
  64 + //设备型号
  65 + deviceModel: string;
  66 + //数量
  67 + count: number;
  68 + //单价
  69 + unitPrice: number;
  70 + //总价
  71 + price: number;
  72 + };
  73 +
  74 + async function refresh() {
  75 + const res = await postOrderErpOrderStagesSearch({
  76 + data: { contract: currentContract },
  77 + });
  78 + const context = res.data[0];
  79 +
  80 + if (context.contract !== null) {
  81 + setContextBody(context);
  82 + setTotal(context.totalPrice);
  83 + form.setFieldValue('totalPrice', context.totalPrice);
  84 + }
  85 + }
  86 +
  87 + function setSave(value) {
  88 + setOtherBody(value);
  89 + }
  90 +
  91 + useEffect(() => {
  92 + setContextBody({ ...contextBody, totalPrice: total });
  93 + form.setFieldValue('totalPrice', total);
  94 + }, [total]);
  95 +
  96 + const handleInputChange = (value: string, no: number, priceNow?: number) => {
  97 + let totalPay = 0;
  98 + const payValue: string[] = value.split('/');
  99 + let body:
  100 + | ((prevState: never[]) => never[])
  101 + | { proportion: string; payPrice: number }[] = [];
  102 + if (no === 1) {
  103 + if (payValue.length !== 4) {
  104 + message.warning('比例个数总和不为4个!');
  105 + } else {
  106 + payValue.forEach((item) => {
  107 + totalPay += Number(item);
  108 + });
  109 + }
  110 + if (totalPay !== 100) {
  111 + message.warning('比例总和不为100!');
  112 + } else {
  113 + message.success('输入有效!');
  114 + const price = total;
  115 + payValue.forEach((item) => {
  116 + body.push({
  117 + proportion: item + '%',
  118 + payPrice: (Number(item) * price) / 100,
  119 + });
  120 + });
  121 + setPayWayBody(body);
  122 + }
  123 + } else {
  124 + payValue.forEach((item) => {
  125 + totalPay += Number(item);
  126 + });
  127 + payValue.forEach((item) => {
  128 + body.push({
  129 + proportion: item + '%',
  130 + payPrice: (Number(item) * priceNow) / 100,
  131 + });
  132 + });
  133 + setPayWayBody(body);
  134 + }
  135 + };
  136 +
  137 + async function getBody() {
  138 + const res = await postOrderErpOrderStagesSearch({
  139 + data: { contract: currentContract },
  140 + });
  141 + const context = res.data[0];
  142 +
  143 + if (context.contract !== null) {
  144 + setContextBody(context);
  145 + setTotal(context.totalPrice);
  146 + form.setFieldValue('totalPrice', context.totalPrice);
  147 + }
  148 + handleInputChange(context.payWay, 0, context.totalPrice);
  149 + }
  150 +
  151 + function getEditProductBody(value) {
  152 + let price = 0;
  153 + value.map((obj) => (price += obj.count * obj.unitPrice));
  154 + setTotal(price);
  155 + setContextBody({ ...contextBody, orderStagesDeviceVoList: value });
  156 + handleInputChange(contextBody.payWay, 0, price);
  157 + }
  158 +
  159 + useEffect(() => {
  160 + getBody();
  161 + }, []);
  162 +
  163 + return (
  164 + <ModalForm<OrderStagesWithListItem>
  165 + title="新建"
  166 + trigger={<a onClick={refresh}>编辑</a>}
  167 + form={form}
  168 + autoFocusFirstInput
  169 + modalProps={{
  170 + destroyOnClose: true,
  171 + }}
  172 + submitTimeout={2000}
  173 + onFinish={async (values) => {
  174 + if (contextBody.orderStagesDeviceVoList.length === 0) {
  175 + message.error('请填写产品数据');
  176 + return false;
  177 + }
  178 + let remakeValue = [];
  179 + const promises = [];
  180 +
  181 + otherBody.forEach((item) => {
  182 + let remakeItem = {
  183 + ossId: contextBody.id,
  184 + number: item.id,
  185 + dateRange: item.payDate,
  186 + fileName: item.fileName,
  187 + };
  188 + if (
  189 + typeof item.fileUrl === 'object' &&
  190 + item.fileUrl instanceof File
  191 + ) {
  192 + const formData = new FormData();
  193 + formData.append('file', item.fileUrl as RcFile);
  194 + const uploadPromise = async () => {
  195 + const res = await postOrderErpOrderStagesUpload({
  196 + data: formData,
  197 + headers: {
  198 + 'Content-Type':
  199 + 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
  200 + },
  201 + });
  202 + if (res.data) {
  203 + remakeItem.fileUrl = res.data;
  204 + }
  205 + };
  206 + promises.push(uploadPromise());
  207 + }
  208 + remakeValue.push(remakeItem);
  209 + });
  210 + Promise.all(promises).then(async () => {
  211 + await postOrderErpOrderStagesPayWaySaveOrUpdate({
  212 + data: remakeValue,
  213 + });
  214 + });
  215 + const formData = new FormData();
  216 + let toSendEdit = {
  217 + id: values.id || contextBody.id,
  218 + contract: values.contract || contextBody.contract,
  219 + vendor: values.vendor || contextBody.vendor,
  220 + dateRange: values.dateRange || contextBody.dateRange,
  221 + terminal: values.terminal || contextBody.terminal,
  222 + orderStagesDeviceDoList:
  223 + values.orderStagesDeviceVoList ||
  224 + contextBody.orderStagesDeviceVoList,
  225 + totalPrice: values.totalPrice || contextBody.totalPrice,
  226 + payWay: values.payWay || contextBody.payWay,
  227 + annex: contextBody.annex,
  228 + remark: values.remark || contextBody.remark,
  229 + };
  230 + if (values.annex) {
  231 + formData.append('file', values.annex[0].originFileObj as RcFile);
  232 + const res = await postOrderErpOrderStagesUpload({
  233 + data: formData,
  234 + headers: {
  235 + 'Content-Type':
  236 + 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
  237 + },
  238 + });
  239 + if (res.data) {
  240 + toSendEdit.annex = res.data;
  241 + }
  242 + }
  243 + const isSaveOrUpdate = await postOrderErpOrderStagesSaveOrUpdate({
  244 + data: { ...toSendEdit },
  245 + });
  246 + if (isSaveOrUpdate) {
  247 + getBody();
  248 + toReload();
  249 + }
  250 + await waitTime(2000);
  251 + message.success('提交成功');
  252 + return true;
  253 + }}
  254 + >
  255 + <ProCard title="基本信息" headerBordered bordered>
  256 + <ProForm.Group>
  257 + <ProFormText
  258 + width="md"
  259 + name="vendor"
  260 + rules={[{ required: true, message: '此项为必填项' }]}
  261 + label="供应商名称"
  262 + placeholder="请输入"
  263 + initialValue={contextBody.vendor}
  264 + />
  265 +
  266 + <ProFormText
  267 + width="md"
  268 + name="terminal"
  269 + rules={[{ required: true, message: '此项为必填项' }]}
  270 + label="终端名称"
  271 + placeholder="请输入"
  272 + initialValue={contextBody.terminal}
  273 + />
  274 +
  275 + <ProFormDatePicker
  276 + name="dateRange"
  277 + width="md"
  278 + label="签合同日期"
  279 + placeholder="请选择日期"
  280 + fieldProps={{
  281 + format: (value) => value.format('YYYY-MM-DD'),
  282 + }}
  283 + initialValue={contextBody.dateRange}
  284 + />
  285 +
  286 + <ProFormText
  287 + width="md"
  288 + name="payWay"
  289 + rules={[{ required: true, message: '此项为必填项' }]}
  290 + label="付款比例"
  291 + placeholder="请输入"
  292 + initialValue={contextBody.payWay}
  293 + onBlur={(e) => {
  294 + handleInputChange(e.target.value, 1);
  295 + }}
  296 + />
  297 +
  298 + <ProFormText
  299 + width="md"
  300 + name="contract"
  301 + rules={[{ required: true, message: '此项为必填项' }]}
  302 + label="合同编号"
  303 + placeholder="请输入"
  304 + initialValue={contextBody.contract}
  305 + />
  306 +
  307 + <ProFormUploadButton
  308 + width="md"
  309 + name="annex"
  310 + max={1}
  311 + label="合同附件"
  312 + />
  313 +
  314 + <ProFormText
  315 + width="md"
  316 + name="totalPrice"
  317 + label="合同金额"
  318 + placeholder="请输入"
  319 + disabled
  320 + initialValue={contextBody.totalPrice}
  321 + />
  322 + </ProForm.Group>
  323 + </ProCard>
  324 +
  325 + <ProCard
  326 + title={
  327 + <>
  328 + <span style={{ color: 'red' }}>*</span>产品明细
  329 + </>
  330 + }
  331 + style={{ marginTop: 10 }}
  332 + headerBordered
  333 + bordered
  334 + >
  335 + <ProductDetail
  336 + productBody={contextBody.orderStagesDeviceVoList}
  337 + EditProductBody={getEditProductBody}
  338 + ></ProductDetail>
  339 + </ProCard>
  340 +
  341 + <ProCard
  342 + title="付款信息"
  343 + style={{ marginTop: 10 }}
  344 + headerBordered
  345 + bordered
  346 + >
  347 + <PayWayDetail
  348 + payBody={payWayBody}
  349 + thisId={contextBody.id}
  350 + currtSave={setSave}
  351 + ></PayWayDetail>
  352 + </ProCard>
  353 +
  354 + <ProCard style={{ marginTop: 10 }} headerBordered bordered>
  355 + <ProFormTextArea
  356 + label="备注"
  357 + name="remark"
  358 + initialValue={contextBody.remark}
  359 + />
  360 + </ProCard>
  361 + </ModalForm>
  362 + );
  363 +};
... ...
src/pages/Instalment/components/payWayDetail/payWayDetail.css 0 → 100644
  1 +.payway-detail-index td {
  2 + font-family: 'San Francisco', 'Helvetica Neue', Helvetica, Arial,
  3 + 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC',
  4 + 'WenQuanYi Micro Hei', sans-serif;
  5 + font-size: 14px;
  6 + margin: 0;
  7 +}
  8 +
  9 +.payway-detail-index td .css-dev-only-do-not-override-nllxry {
  10 + margin-bottom: 0 !important;
  11 +}
  12 +
  13 +.dataChoose {
  14 + margin: 0;
  15 +}
... ...
src/pages/Instalment/components/payWayDetail/payWayDetail.less 0 → 100644
  1 +.payway-detail-index td {
  2 + font-family: 'San Francisco', 'Helvetica Neue', Helvetica, Arial,
  3 + 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC',
  4 + 'WenQuanYi Micro Hei', sans-serif;
  5 + font-size: 14px;
  6 + margin: 0;
  7 +
  8 + .css-dev-only-do-not-override-nllxry {
  9 + margin-bottom: 0 !important;
  10 + }
  11 +}
  12 +
  13 +.dataChoose {
  14 + margin: 0;
  15 +}
  16 +
  17 +// .pay-way-detail-index td .css-dev-only-do-not-override-nllxry{
  18 +// margin-bottom: 0px !important;
  19 +// }
... ...
src/pages/Instalment/components/payWayDetail/payWayDetail.tsx 0 → 100644
  1 +import { postOrderErpOrderStagesPayWaySelect } from '@/services';
  2 +import type { ProColumns } from '@ant-design/pro-components';
  3 +import {
  4 + EditableProTable,
  5 + ProFormDatePicker,
  6 + ProFormRadio,
  7 + ProFormUploadButton,
  8 +} from '@ant-design/pro-components';
  9 +import { message } from 'antd';
  10 +import React, { useEffect, useState } from 'react';
  11 +import './payWayDetail.less';
  12 +
  13 +const waitTime = (time: number = 100) => {
  14 + return new Promise((resolve) => {
  15 + setTimeout(() => {
  16 + resolve(true);
  17 + }, time);
  18 + });
  19 +};
  20 +
  21 +type DataSourceType = {
  22 + id: number;
  23 + payStep?: string;
  24 + proportion?: string;
  25 + ossId?: number;
  26 + payPrice?: number;
  27 + payDate?: Date;
  28 + fileName?: string;
  29 + fileUrl?: string;
  30 +};
  31 +
  32 +export default ({ payBody, thisId, currtSave }) => {
  33 + const defaultData: DataSourceType[] = [
  34 + {
  35 + id: 1,
  36 + payStep: '预付款',
  37 + proportion: undefined,
  38 + payPrice: undefined,
  39 + ossId: undefined,
  40 + payDate: undefined,
  41 + fileName: undefined,
  42 + fileUrl: undefined,
  43 + },
  44 + {
  45 + id: 2,
  46 + payStep: '发贷款',
  47 + proportion: undefined,
  48 + payPrice: undefined,
  49 + ossId: undefined,
  50 + payDate: undefined,
  51 + fileName: undefined,
  52 + fileUrl: undefined,
  53 + },
  54 + {
  55 + id: 3,
  56 + payStep: '验收款',
  57 + proportion: undefined,
  58 + payPrice: undefined,
  59 + ossId: undefined,
  60 + payDate: undefined,
  61 + fileName: undefined,
  62 + fileUrl: undefined,
  63 + },
  64 + {
  65 + id: 4,
  66 + payStep: '质保金',
  67 + proportion: undefined,
  68 + payPrice: undefined,
  69 + ossId: undefined,
  70 + payDate: undefined,
  71 + fileName: undefined,
  72 + fileUrl: undefined,
  73 + },
  74 + ];
  75 +
  76 + const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]);
  77 + const [position, setPosition] = useState<'top' | 'bottom' | 'hidden'>(
  78 + 'hidden',
  79 + );
  80 + const [payWayDetailBody, setPayWayDetailBody] = useState<
  81 + readonly DataSourceType[]
  82 + >([...defaultData]);
  83 + // const [body, setBody] = useState([])
  84 + const [isAccept, setIsAccept] = useState(null);
  85 + // const [isCurrtSave, setIsCurrtSave] = useState(false);
  86 +
  87 + async function getOther(value, arr) {
  88 + const res = await postOrderErpOrderStagesPayWaySelect({
  89 + data: { ossId: value },
  90 + });
  91 + if (res.data) {
  92 + const context = res.data;
  93 + const remake = arr.map((obj) => {
  94 + let currt = obj;
  95 + context.forEach((object) => {
  96 + if (object.number === obj.id) {
  97 + currt = {
  98 + ...obj,
  99 + ossId: value,
  100 + payDate: object.dateRange,
  101 + fileName: object.fileName,
  102 + fileUrl: object.fileUrl,
  103 + };
  104 + return currt;
  105 + }
  106 + });
  107 + return currt;
  108 + });
  109 + setPayWayDetailBody(remake);
  110 + }
  111 + }
  112 +
  113 + function setPayWay(value) {
  114 + const remakeData = payWayDetailBody.map((obj) => {
  115 + return {
  116 + ...obj,
  117 + proportion: value[obj.id - 1]?.proportion,
  118 + payPrice: value[obj.id - 1]?.payPrice,
  119 + };
  120 + });
  121 + // console.log(remakeData);
  122 +
  123 + setPayWayDetailBody(remakeData);
  124 + // console.log(thisId);
  125 +
  126 + if (thisId !== null) {
  127 + getOther(thisId, remakeData);
  128 + }
  129 + }
  130 + // useEffect(() => {
  131 + // getOther(thisId)
  132 + // }, [thisId])
  133 +
  134 + useEffect(() => {
  135 + setPayWay(payBody);
  136 + }, [payBody]);
  137 +
  138 + // function setCurrtSave(value) {
  139 + // // console.log(value);
  140 + // setIsCurrtSave(payWayDetailBody)
  141 + // }
  142 +
  143 + const columns: ProColumns<DataSourceType>[] = [
  144 + {
  145 + title: '编号',
  146 + dataIndex: 'id',
  147 + hideInTable: true,
  148 + editable: false,
  149 + },
  150 + {
  151 + title: '付款信息',
  152 + dataIndex: 'payStep',
  153 + editable: false,
  154 + },
  155 + {
  156 + title: '付款比例',
  157 + dataIndex: 'proportion',
  158 + editable: false,
  159 + },
  160 + {
  161 + title: '付款金额',
  162 + dataIndex: 'payPrice',
  163 + editable: false,
  164 + },
  165 + {
  166 + title: '对应的订单',
  167 + dataIndex: 'ossId',
  168 + editable: false,
  169 + hideInTable: true,
  170 + },
  171 + {
  172 + title: '付款时间',
  173 + dataIndex: 'payDate',
  174 + editable: false,
  175 + render: (text, record) => {
  176 + const handleChange = (value) => {
  177 + const updatedDataSource = payWayDetailBody.map((item) => {
  178 + if (item.id === record.id) {
  179 + return {
  180 + ...item,
  181 + payDate: value,
  182 + };
  183 + }
  184 + return item;
  185 + });
  186 + // console.log(updatedDataSource);
  187 +
  188 + setPayWayDetailBody(updatedDataSource);
  189 + currtSave(updatedDataSource);
  190 + };
  191 +
  192 + return (
  193 + <ProFormDatePicker
  194 + className="dataChoose"
  195 + initialValue={record.payDate}
  196 + value={record.payDate}
  197 + placeholder={'请填写时间'}
  198 + fieldProps={{
  199 + format: (value) => value.format('YYYY-MM-DD'),
  200 + onChange: handleChange,
  201 + }}
  202 + />
  203 + );
  204 + },
  205 + },
  206 + {
  207 + title: '付款单回执',
  208 + dataIndex: 'fileName',
  209 + render: (text, record) => {
  210 + if (isAccept !== record.id) {
  211 + if (
  212 + typeof record.fileUrl === 'object' &&
  213 + record.fileUrl instanceof File
  214 + ) {
  215 + return (
  216 + <a onClick={() => message.error('请先保存')}>{record.fileName}</a>
  217 + );
  218 + } else {
  219 + return <a href={record.fileUrl}>{record.fileName}</a>;
  220 + }
  221 + } else {
  222 + return (
  223 + <ProFormUploadButton
  224 + name={record.id}
  225 + onChange={(value) => {
  226 + // console.log(value);
  227 + // console.log(payWayDetailBody);
  228 + let remakeBody = [];
  229 + let remakeBodyItem = {};
  230 + payWayDetailBody.forEach((item) => {
  231 + if (item.id === record.id) {
  232 + remakeBodyItem = {
  233 + ...item,
  234 + fileUrl: value.file.originFileObj,
  235 + fileName: value.file.name,
  236 + };
  237 + } else {
  238 + remakeBodyItem = { ...item };
  239 + }
  240 + // if (value.fileList.length == 0) {
  241 + // remakeBodyItem = { ...item, fileUrl: undefined, fileName: undefined }
  242 + // }
  243 + remakeBody.push(remakeBodyItem);
  244 + });
  245 + setPayWayDetailBody(remakeBody);
  246 + currtSave(remakeBody);
  247 + }}
  248 + width="md"
  249 + max={1}
  250 + />
  251 + );
  252 + }
  253 + },
  254 + },
  255 + {
  256 + title: '操作',
  257 + valueType: 'option',
  258 + width: 200,
  259 + render: (text, record) => [
  260 + <a
  261 + key="editable"
  262 + onClick={() => {
  263 + if (isAccept !== record.id) {
  264 + setIsAccept(record.id);
  265 + } else {
  266 + setIsAccept(null);
  267 + }
  268 + }}
  269 + >
  270 + {record.fileName !== undefined &&
  271 + record.fileName !== '' &&
  272 + record.fileName !== null
  273 + ? '重新上传'
  274 + : '上传回执'}
  275 + </a>,
  276 + ],
  277 + },
  278 + ];
  279 +
  280 + return (
  281 + <>
  282 + <EditableProTable<DataSourceType>
  283 + rowKey="id"
  284 + className="payway-detail-index"
  285 + toolbar={{ style: { display: 'none' } }}
  286 + ghost={true}
  287 + scroll={{
  288 + x: 960,
  289 + }}
  290 + recordCreatorProps={
  291 + position !== 'hidden'
  292 + ? {
  293 + position: position as 'top',
  294 + record: () => ({ id: (Math.random() * 1000000).toFixed(0) }),
  295 + }
  296 + : false
  297 + }
  298 + loading={false}
  299 + toolBarRender={() => [
  300 + <ProFormRadio.Group
  301 + key="render"
  302 + fieldProps={{
  303 + value: position,
  304 + onChange: (e) => setPosition(e.target.value),
  305 + }}
  306 + />,
  307 + ]}
  308 + columns={columns}
  309 + request={payWayDetailBody}
  310 + value={payWayDetailBody}
  311 + onChange={(value) => {
  312 + setPayWayDetailBody(value);
  313 + // setCurrtSave(payWayDetailBody)
  314 + }}
  315 + editable={{
  316 + type: 'multiple',
  317 + editableKeys,
  318 + onSave: async () => {
  319 + // console.log(rowKey, data, row);
  320 + await waitTime(2000);
  321 + },
  322 + onChange: setEditableRowKeys,
  323 + }}
  324 + />
  325 + </>
  326 + );
  327 +};
... ...
src/pages/Instalment/components/productDetail/productDetail.css 0 → 100644
  1 +.product-detail-index td {
  2 + font-family: 'San Francisco', 'Helvetica Neue', Helvetica, Arial,
  3 + 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC',
  4 + 'WenQuanYi Micro Hei', sans-serif;
  5 + font-size: 14px;
  6 +}
... ...
src/pages/Instalment/components/productDetail/productDetail.less 0 → 100644
  1 +.product-detail-index td {
  2 + font-family: 'San Francisco', 'Helvetica Neue', Helvetica, Arial,
  3 + 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC',
  4 + 'WenQuanYi Micro Hei', sans-serif;
  5 + font-size: 14px;
  6 +}
... ...
src/pages/Instalment/components/productDetail/productDetail.tsx 0 → 100644
  1 +import type { ProColumns } from '@ant-design/pro-components';
  2 +import { EditableProTable, ProFormRadio } from '@ant-design/pro-components';
  3 +import React, { useEffect, useState } from 'react';
  4 +import './productDetail.less';
  5 +
  6 +const waitTime = (time: number = 100) => {
  7 + return new Promise((resolve) => {
  8 + setTimeout(() => {
  9 + resolve(true);
  10 + }, time);
  11 + });
  12 +};
  13 +
  14 +// type DataSourceType = {
  15 +// count?: number;
  16 +// id: React.Key;
  17 +// deviceModel?: string;
  18 +// deviceName?: string;
  19 +// price?: number;
  20 +// unitPrice?: number;
  21 +// };
  22 +
  23 +export default ({ productBody, EditProductBody }) => {
  24 + const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]);
  25 + const [dataSource, setDataSource] = useState<readonly DataSourceType[]>([]);
  26 + // const [form] = Form.useForm<{ name: string; company: string }>();
  27 + const [position, setPosition] = useState<'top' | 'bottom' | 'hidden'>(
  28 + 'bottom',
  29 + );
  30 + function getDataSourece() {
  31 + if (productBody.length !== 0) {
  32 + setDataSource(productBody);
  33 + }
  34 + }
  35 + function setEditProductBody(value) {
  36 + // console.log(value);
  37 + // console.log(dataSource);
  38 +
  39 + const modifiedArray = value.map((obj) => {
  40 + if (obj.dId && Number(obj.dId) <= 1000) {
  41 + return {
  42 + ...obj,
  43 + count: obj.count,
  44 + dId: null,
  45 + deviceModel: obj.deviceModel,
  46 + deviceName: obj.deviceName,
  47 + price: Number(obj.unitPrice) * Number(obj.count),
  48 + unitPrice: obj.unitPrice,
  49 + };
  50 + } else {
  51 + return { ...obj, price: Number(obj.unitPrice) * Number(obj.count) };
  52 + }
  53 + });
  54 + // console.log(modifiedArray);
  55 +
  56 + EditProductBody(modifiedArray);
  57 + setDataSource(value);
  58 + }
  59 +
  60 + useEffect(() => {
  61 + getDataSourece();
  62 + }, [productBody]);
  63 +
  64 + type DataSourceType = {
  65 + id: React.Key;
  66 + count: number;
  67 + dId?: number;
  68 + deviceModel: string;
  69 + deviceName: string;
  70 + price: number;
  71 + unitPrice: number;
  72 + };
  73 +
  74 + const columns: ProColumns<DataSourceType>[] = [
  75 + {
  76 + title: '设备编号',
  77 + dataIndex: 'dId',
  78 + hideInTable: true,
  79 + },
  80 + {
  81 + title: '设备名称',
  82 + dataIndex: 'deviceName',
  83 + formItemProps: () => {
  84 + return {
  85 + rules: [{ required: true, message: '此项为必填项' }],
  86 + };
  87 + },
  88 + },
  89 + {
  90 + title: '设备型号',
  91 + dataIndex: 'deviceModel',
  92 + width: '15%',
  93 + formItemProps: () => {
  94 + return {
  95 + rules: [{ required: true, message: '此项为必填项' }],
  96 + };
  97 + },
  98 + },
  99 + {
  100 + title: '数量',
  101 + dataIndex: 'count',
  102 + formItemProps: () => {
  103 + return {
  104 + rules: [{ required: true, message: '此项为必填项' }],
  105 + };
  106 + },
  107 + },
  108 + {
  109 + title: '单价',
  110 + dataIndex: 'unitPrice',
  111 + formItemProps: () => {
  112 + return {
  113 + rules: [{ required: true, message: '此项为必填项' }],
  114 + };
  115 + },
  116 + },
  117 + {
  118 + title: '总价',
  119 + dataIndex: 'price',
  120 + hideInSetting: true,
  121 + disable: true,
  122 + editable: false,
  123 + render: (_text, record) => [
  124 + <span key={record.dId}>{record.count * record.unitPrice}</span>,
  125 + ],
  126 + },
  127 + {
  128 + title: '操作',
  129 + valueType: 'option',
  130 + width: 200,
  131 + render: (_text, record, _, action) => [
  132 + <a
  133 + key="editable"
  134 + onClick={() => {
  135 + if (record.dId) {
  136 + action?.startEditable?.(record.dId);
  137 + }
  138 + }}
  139 + >
  140 + 编辑
  141 + </a>,
  142 + <a
  143 + key="delete"
  144 + onClick={() => {
  145 + EditProductBody(
  146 + dataSource.filter((item) => item.dId !== record.dId),
  147 + );
  148 + setDataSource(dataSource.filter((item) => item.dId !== record.dId));
  149 + }}
  150 + >
  151 + 删除
  152 + </a>,
  153 + ],
  154 + },
  155 + ];
  156 +
  157 + return (
  158 + <>
  159 + <EditableProTable<DataSourceType>
  160 + className="product-detail-index"
  161 + rowKey="dId"
  162 + toolbar={{ style: { display: 'none' } }}
  163 + ghost={true}
  164 + scroll={{
  165 + x: 960,
  166 + }}
  167 + recordCreatorProps={
  168 + position !== 'hidden'
  169 + ? {
  170 + position: position as 'top',
  171 + record: () => ({ dId: (Math.random() * 1000).toFixed(0) }),
  172 + }
  173 + : false
  174 + }
  175 + loading={false}
  176 + toolBarRender={() => [
  177 + <ProFormRadio.Group
  178 + key="render"
  179 + fieldProps={{
  180 + value: position,
  181 + onChange: (e) => setPosition(e.target.value),
  182 + }}
  183 + />,
  184 + ]}
  185 + columns={columns}
  186 + request={dataSource}
  187 + value={dataSource}
  188 + onChange={setEditProductBody}
  189 + editable={{
  190 + type: 'multiple',
  191 + editableKeys,
  192 + onSave: async () => {
  193 + await waitTime(500);
  194 + },
  195 + onChange: setEditableRowKeys,
  196 + }}
  197 + />
  198 + </>
  199 + );
  200 +};
... ...
src/pages/Instalment/components/read/read.tsx 0 → 100644
  1 +import {
  2 + postOrderErpOrderStagesPayWaySaveOrUpdate,
  3 + postOrderErpOrderStagesSaveOrUpdate,
  4 + postOrderErpOrderStagesSearch,
  5 + postOrderErpOrderStagesUpload,
  6 +} from '@/services';
  7 +import {
  8 + ModalForm,
  9 + ProCard,
  10 + ProForm,
  11 + ProFormDatePicker,
  12 + ProFormText,
  13 + ProFormTextArea,
  14 +} from '@ant-design/pro-components';
  15 +import { Form, message } from 'antd';
  16 +import { RcFile } from 'antd/es/upload';
  17 +import { useEffect, useState } from 'react';
  18 +import PayWayDetail from './readPayWay';
  19 +import ProductDetail from './readProduct';
  20 +
  21 +const waitTime = (time: number = 100) => {
  22 + return new Promise((resolve) => {
  23 + setTimeout(() => {
  24 + resolve(true);
  25 + }, time);
  26 + });
  27 +};
  28 +
  29 +export default ({ currentContract }) => {
  30 + const [form] = Form.useForm<{ name: string; company: string }>();
  31 + const [contextBody, setContextBody] = useState({});
  32 + const [, setEditProductBody] = useState([]);
  33 + const [total, setTotal] = useState(0);
  34 + const [payWayBody, setPayWayBody] = useState([]);
  35 + const [otherBody, setOtherBody] = useState([]);
  36 +
  37 + type OrderStagesWithListItem = {
  38 + //文件编号
  39 + id: number;
  40 + //合同编号
  41 + contract: string;
  42 + //供应商名称
  43 + vendor: string;
  44 + //签合同日期
  45 + dateRange: Date;
  46 + //终端名称
  47 + terminal: string;
  48 + orderStagesDeviceVoList: orderStagesDevice[];
  49 + //合同总金额
  50 + totalPrice: number;
  51 + //付款方式
  52 + payWay: string;
  53 + //附件
  54 + annex: string;
  55 + //备注
  56 + remark: string;
  57 + };
  58 +
  59 + type orderStagesDevice = {
  60 + //设备id
  61 + dId: number;
  62 + //设备名称
  63 + deviceName: string;
  64 + //设备型号
  65 + deviceModel: string;
  66 + //数量
  67 + count: number;
  68 + //单价
  69 + unitPrice: number;
  70 + //总价
  71 + price: number;
  72 + };
  73 +
  74 + async function refresh() {
  75 + const res = await postOrderErpOrderStagesSearch({
  76 + data: { contract: currentContract },
  77 + });
  78 + const context = res.data[0];
  79 + // console.log(context);
  80 +
  81 + if (context.contract !== null) {
  82 + setContextBody(context);
  83 + setTotal(context.totalPrice);
  84 + form.setFieldValue('totalPrice', context.totalPrice);
  85 + }
  86 + }
  87 +
  88 + function setSave(value) {
  89 + // console.log(value);
  90 + setOtherBody(value);
  91 + }
  92 +
  93 + useEffect(() => {
  94 + setContextBody({ ...contextBody, totalPrice: total });
  95 + form.setFieldValue('totalPrice', total);
  96 + }, [total]);
  97 +
  98 + const handleInputChange = (value: string, no: number, priceNow?: number) => {
  99 + let totalPay = 0;
  100 + const payValue: string[] = value.split('/');
  101 + let body:
  102 + | ((prevState: never[]) => never[])
  103 + | { proportion: string; payPrice: number }[] = [];
  104 + if (no === 1) {
  105 + if (payValue.length !== 4) {
  106 + message.warning('比例个数总和不为4个!');
  107 + } else {
  108 + payValue.forEach((item) => {
  109 + totalPay += Number(item);
  110 + });
  111 + }
  112 + if (totalPay !== 100) {
  113 + message.warning('比例总和不为100!');
  114 + } else {
  115 + message.success('输入有效!');
  116 + const price = total;
  117 + payValue.forEach((item) => {
  118 + body.push({
  119 + proportion: item + '%',
  120 + payPrice: (Number(item) * price) / 100,
  121 + });
  122 + });
  123 + setPayWayBody(body);
  124 + }
  125 + } else {
  126 + payValue.forEach((item) => {
  127 + totalPay += Number(item);
  128 + });
  129 + payValue.forEach((item) => {
  130 + body.push({
  131 + proportion: item + '%',
  132 + payPrice: (Number(item) * priceNow) / 100,
  133 + });
  134 + });
  135 + setPayWayBody(body);
  136 + }
  137 + };
  138 +
  139 + async function getBody() {
  140 + const res = await postOrderErpOrderStagesSearch({
  141 + data: { contract: currentContract },
  142 + });
  143 + const context = res.data[0];
  144 + // console.log(context);
  145 +
  146 + if (context.contract !== null) {
  147 + setContextBody(context);
  148 + setTotal(context.totalPrice);
  149 + form.setFieldValue('totalPrice', context.totalPrice);
  150 + }
  151 + handleInputChange(context.payWay, 0, context.totalPrice);
  152 + }
  153 +
  154 + useEffect(() => {
  155 + getBody();
  156 + }, []);
  157 +
  158 + function getEditProductBody(value) {
  159 + // console.log(value);
  160 +
  161 + setEditProductBody(value);
  162 + let price = 0;
  163 + value.map((obj) => (price += obj.count * obj.unitPrice));
  164 + setTotal(price);
  165 + setContextBody({ ...contextBody, orderStagesDeviceVoList: value });
  166 + handleInputChange(contextBody.payWay, 0, price);
  167 + }
  168 +
  169 + return (
  170 + <ModalForm<OrderStagesWithListItem>
  171 + title="新建"
  172 + trigger={<a onClick={refresh}>查看</a>}
  173 + form={form}
  174 + autoFocusFirstInput
  175 + modalProps={{
  176 + destroyOnClose: true,
  177 + // onCancel: () => console.log('run'),
  178 + }}
  179 + submitTimeout={2000}
  180 + onFinish={async (values) => {
  181 + // console.log(values);
  182 + // console.log(otherBody);
  183 + let remakeValue = [];
  184 + // 创建一个用于存储所有异步操作的Promise数组
  185 + const promises = [];
  186 +
  187 + otherBody.forEach((item) => {
  188 + let remakeItem = {
  189 + ossId: item.ossId,
  190 + number: item.id,
  191 + dataRange: item.payDate,
  192 + fileName: item.fileName,
  193 + };
  194 + if (
  195 + typeof item.fileUrl === 'object' &&
  196 + item.fileUrl instanceof File
  197 + ) {
  198 + const formData = new FormData();
  199 + formData.append('file', item.fileUrl as RcFile);
  200 + const uploadPromise = async () => {
  201 + const res = await postOrderErpOrderStagesUpload({
  202 + data: formData,
  203 + headers: {
  204 + 'Content-Type':
  205 + 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
  206 + },
  207 + });
  208 + if (res.data) {
  209 + remakeItem.fileUrl = res.data;
  210 + }
  211 + };
  212 + promises.push(uploadPromise());
  213 + }
  214 + remakeValue.push(remakeItem);
  215 + });
  216 +
  217 + // 使用Promise.all等待所有异步操作完成后再执行保存操作
  218 + Promise.all(promises).then(async () => {
  219 + await postOrderErpOrderStagesPayWaySaveOrUpdate({
  220 + data: remakeValue,
  221 + });
  222 + });
  223 + const formData = new FormData();
  224 + // let toSendEdit={...values,orderStagesDeviceVoList:contextBody.orderStagesDeviceVoList};
  225 + let toSendEdit = {
  226 + id: values.id || contextBody.id,
  227 + contract: values.contract || contextBody.contract,
  228 + vendor: values.vendor || contextBody.vendor,
  229 + dateRange: values.dateRange || contextBody.dateRange,
  230 + terminal: values.terminal || contextBody.terminal,
  231 + orderStagesDeviceDoList:
  232 + values.orderStagesDeviceVoList ||
  233 + contextBody.orderStagesDeviceVoList,
  234 + totalPrice: values.totalPrice || contextBody.totalPrice,
  235 + payWay: values.payWay || contextBody.payWay,
  236 + annex: contextBody.annex,
  237 + remark: values.remark || contextBody.remark,
  238 + };
  239 + if (values.annex) {
  240 + formData.append('file', values.annex[0].originFileObj as RcFile);
  241 + const res = await postOrderErpOrderStagesUpload({
  242 + data: formData,
  243 + headers: {
  244 + 'Content-Type':
  245 + 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
  246 + },
  247 + });
  248 + if (res.data) {
  249 + // console.log(values)
  250 + // console.log(contextBody);
  251 + toSendEdit.annex = res.data;
  252 + }
  253 + }
  254 + const isSaveOrUpdate = await postOrderErpOrderStagesSaveOrUpdate({
  255 + data: { ...toSendEdit },
  256 + });
  257 + if (isSaveOrUpdate) {
  258 + // console.log(isSaveOrUpdate);
  259 + getBody();
  260 + }
  261 + await waitTime(2000);
  262 + message.success('提交成功');
  263 + return true;
  264 + }}
  265 + >
  266 + <ProCard title="基本信息" headerBordered bordered>
  267 + <ProForm.Group>
  268 + <ProFormText
  269 + width="md"
  270 + name="vendor"
  271 + label="供应商名称"
  272 + placeholder="请输入"
  273 + initialValue={contextBody.vendor}
  274 + readonly
  275 + />
  276 +
  277 + <ProFormText
  278 + width="md"
  279 + name="terminal"
  280 + label="终端名称"
  281 + placeholder="请输入"
  282 + initialValue={contextBody.terminal}
  283 + readonly
  284 + />
  285 +
  286 + <ProFormDatePicker
  287 + name="dateRange"
  288 + width="md"
  289 + label="签合同日期"
  290 + placeholder="请选择日期"
  291 + fieldProps={{
  292 + format: (value) => value.format('YYYY-MM-DD'),
  293 + }}
  294 + initialValue={contextBody.dateRange}
  295 + readonly
  296 + />
  297 +
  298 + <ProFormText
  299 + width="md"
  300 + name="payWay"
  301 + label="付款比例"
  302 + placeholder="请输入"
  303 + initialValue={contextBody.payWay}
  304 + readonly
  305 + onBlur={(e) => {
  306 + handleInputChange(e.target.value, 1);
  307 + }}
  308 + />
  309 +
  310 + <ProFormText
  311 + width="md"
  312 + name="contract"
  313 + label="合同编号"
  314 + placeholder="请输入"
  315 + initialValue={contextBody.contract}
  316 + readonly
  317 + />
  318 +
  319 + {/* <ProFormText
  320 + width="md"
  321 + name="annex"
  322 + label="合同附件"
  323 + placeholder="请输入"
  324 + initialValue={contextBody.fileUrl}
  325 + readonly
  326 + /> */}
  327 +
  328 + <ProFormText
  329 + width="md"
  330 + name="totalPrice"
  331 + label="合同金额"
  332 + placeholder="请输入"
  333 + disabled
  334 + readonly
  335 + // rules={[{ required: true, message: '此项为必填项' }]}
  336 + // value={contextBody.totalPrice}
  337 + initialValue={contextBody.totalPrice}
  338 + />
  339 + </ProForm.Group>
  340 + </ProCard>
  341 + <ProCard
  342 + title="产品明细"
  343 + style={{ marginTop: 10 }}
  344 + headerBordered
  345 + bordered
  346 + >
  347 + <ProductDetail
  348 + productBody={contextBody.orderStagesDeviceVoList}
  349 + EditProductBody={getEditProductBody}
  350 + ></ProductDetail>
  351 + </ProCard>
  352 +
  353 + <ProCard
  354 + title="付款信息"
  355 + style={{ marginTop: 10 }}
  356 + headerBordered
  357 + bordered
  358 + >
  359 + <PayWayDetail
  360 + payBody={payWayBody}
  361 + thisId={contextBody.id}
  362 + currtSave={setSave}
  363 + ></PayWayDetail>
  364 + </ProCard>
  365 +
  366 + <ProCard style={{ marginTop: 10 }} headerBordered bordered>
  367 + <ProFormTextArea
  368 + label="备注"
  369 + name="remark"
  370 + initialValue={contextBody.remark}
  371 + readonly
  372 + />
  373 + </ProCard>
  374 + </ModalForm>
  375 + );
  376 +};
... ...
src/pages/Instalment/components/read/readPayWay.tsx 0 → 100644
  1 +import { postOrderErpOrderStagesPayWaySelect } from '@/services';
  2 +import type { ProColumns } from '@ant-design/pro-components';
  3 +import {
  4 + EditableProTable,
  5 + ProFormRadio,
  6 + ProFormUploadButton,
  7 +} from '@ant-design/pro-components';
  8 +import { message } from 'antd';
  9 +import React, { useEffect, useState } from 'react';
  10 +
  11 +const waitTime = (time: number = 100) => {
  12 + return new Promise((resolve) => {
  13 + setTimeout(() => {
  14 + resolve(true);
  15 + }, time);
  16 + });
  17 +};
  18 +
  19 +type DataSourceType = {
  20 + id: number;
  21 + payStep?: string;
  22 + proportion?: string;
  23 + ossId?: number;
  24 + payPrice?: number;
  25 + payDate?: Date;
  26 + fileName?: string;
  27 + fileUrl?: string;
  28 +};
  29 +
  30 +export default ({ payBody, thisId, currtSave }) => {
  31 + const defaultData: DataSourceType[] = [
  32 + {
  33 + id: 1,
  34 + payStep: '预付款',
  35 + proportion: undefined,
  36 + payPrice: undefined,
  37 + ossId: undefined,
  38 + payDate: undefined,
  39 + fileName: undefined,
  40 + fileUrl: undefined,
  41 + },
  42 + {
  43 + id: 2,
  44 + payStep: '发贷款',
  45 + proportion: undefined,
  46 + payPrice: undefined,
  47 + ossId: undefined,
  48 + payDate: undefined,
  49 + fileName: undefined,
  50 + fileUrl: undefined,
  51 + },
  52 + {
  53 + id: 3,
  54 + payStep: '验收款',
  55 + proportion: undefined,
  56 + payPrice: undefined,
  57 + ossId: undefined,
  58 + payDate: undefined,
  59 + fileName: undefined,
  60 + fileUrl: undefined,
  61 + },
  62 + {
  63 + id: 4,
  64 + payStep: '质保金',
  65 + proportion: undefined,
  66 + payPrice: undefined,
  67 + ossId: undefined,
  68 + payDate: undefined,
  69 + fileName: undefined,
  70 + fileUrl: undefined,
  71 + },
  72 + ];
  73 +
  74 + const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]);
  75 + const [position, setPosition] = useState<'top' | 'bottom' | 'hidden'>(
  76 + 'hidden',
  77 + );
  78 + const [payWayDetailBody, setPayWayDetailBody] = useState<
  79 + readonly DataSourceType[]
  80 + >([...defaultData]);
  81 + const [isAccept] = useState(null);
  82 + // const [isCurrtSave, setIsCurrtSave] = useState(false);
  83 +
  84 + async function getOther(value, arr) {
  85 + const res = await postOrderErpOrderStagesPayWaySelect({
  86 + data: { ossId: value },
  87 + });
  88 + if (res.data) {
  89 + const context = res.data;
  90 + const remake = arr.map((obj) => {
  91 + let currt = obj;
  92 + context.forEach((object) => {
  93 + if (object.number === obj.id) {
  94 + currt = {
  95 + ...obj,
  96 + ossId: value,
  97 + payDate: object.dateRange,
  98 + fileName: object.fileName,
  99 + fileUrl: object.fileUrl,
  100 + };
  101 + return currt;
  102 + }
  103 + });
  104 + return currt;
  105 + });
  106 + setPayWayDetailBody(remake);
  107 + }
  108 + }
  109 +
  110 + function setPayWay(value) {
  111 + const remakeData = payWayDetailBody.map((obj) => {
  112 + return {
  113 + ...obj,
  114 + proportion: value[obj.id - 1]?.proportion,
  115 + payPrice: value[obj.id - 1]?.payPrice,
  116 + };
  117 + });
  118 +
  119 + setPayWayDetailBody(remakeData);
  120 +
  121 + if (thisId !== null) {
  122 + getOther(thisId, remakeData);
  123 + }
  124 + }
  125 + // useEffect(() => {
  126 + // getOther(thisId)
  127 + // }, [thisId])
  128 +
  129 + useEffect(() => {
  130 + setPayWay(payBody);
  131 + }, [payBody]);
  132 +
  133 + // function setCurrtSave(_value) {
  134 + // setIsCurrtSave(payWayDetailBody)
  135 + // }
  136 +
  137 + const columns: ProColumns<DataSourceType>[] = [
  138 + {
  139 + title: '编号',
  140 + dataIndex: 'id',
  141 + hideInTable: true,
  142 + editable: false,
  143 + },
  144 + {
  145 + title: '付款信息',
  146 + dataIndex: 'payStep',
  147 + editable: false,
  148 + },
  149 + {
  150 + title: '付款比例',
  151 + dataIndex: 'proportion',
  152 + editable: false,
  153 + },
  154 + {
  155 + title: '付款金额',
  156 + dataIndex: 'payPrice',
  157 + editable: false,
  158 + },
  159 + {
  160 + title: '对应的订单',
  161 + dataIndex: 'ossId',
  162 + editable: false,
  163 + hideInTable: true,
  164 + },
  165 + {
  166 + title: '付款时间',
  167 + dataIndex: 'payDate',
  168 + editable: false,
  169 + render: (_text, record) => {
  170 + return (
  171 + <span>
  172 + {new Intl.DateTimeFormat('zh-CN', {
  173 + year: 'numeric',
  174 + month: 'long',
  175 + day: 'numeric',
  176 + }).format(record.payDate)}
  177 + </span>
  178 + // <ProFormDatePicker
  179 + // className='dataChoose'
  180 + // initialValue={record.payDate}
  181 + // value={record.payDate}
  182 + // placeholder={"请填写时间"}
  183 + // fieldProps={{
  184 + // format: (value) => value.format('YYYY-MM-DD'),
  185 + // onChange: handleChange,
  186 + // }}
  187 + // />
  188 + );
  189 + },
  190 + },
  191 + {
  192 + title: '付款单回执',
  193 + dataIndex: 'fileName',
  194 + render: (_text, record) => {
  195 + if (isAccept !== record.id) {
  196 + if (
  197 + typeof record.fileUrl === 'object' &&
  198 + record.fileUrl instanceof File
  199 + ) {
  200 + return (
  201 + <a onClick={() => message.error('请先保存')}>{record.fileName}</a>
  202 + );
  203 + } else {
  204 + return <a href={record.fileUrl}>{record.fileName}</a>;
  205 + }
  206 + } else {
  207 + return (
  208 + <ProFormUploadButton
  209 + name={record.id}
  210 + onChange={(value) => {
  211 + let remakeBody = [];
  212 + let remakeBodyItem = {};
  213 + payWayDetailBody.forEach((item) => {
  214 + if (item.id === record.id) {
  215 + remakeBodyItem = {
  216 + ...item,
  217 + fileUrl: value.file.originFileObj,
  218 + fileName: value.file.name,
  219 + };
  220 + } else {
  221 + remakeBodyItem = { ...item };
  222 + }
  223 + if (value.fileList.length === 0) {
  224 + remakeBodyItem = {
  225 + ...item,
  226 + fileUrl: undefined,
  227 + fileName: undefined,
  228 + };
  229 + }
  230 + remakeBody.push(remakeBodyItem);
  231 + });
  232 + setPayWayDetailBody(remakeBody);
  233 + currtSave(remakeBody);
  234 + }}
  235 + width="md"
  236 + max={1}
  237 + />
  238 + );
  239 + }
  240 + },
  241 + },
  242 + ];
  243 +
  244 + return (
  245 + <>
  246 + <EditableProTable<DataSourceType>
  247 + rowKey="id"
  248 + className="payway-detail-index"
  249 + toolbar={{ style: { display: 'none' } }}
  250 + ghost={true}
  251 + scroll={{
  252 + x: 960,
  253 + }}
  254 + recordCreatorProps={
  255 + position !== 'hidden'
  256 + ? {
  257 + position: position as 'top',
  258 + record: () => ({ id: (Math.random() * 1000000).toFixed(0) }),
  259 + }
  260 + : false
  261 + }
  262 + loading={false}
  263 + toolBarRender={() => [
  264 + <ProFormRadio.Group
  265 + key="render"
  266 + fieldProps={{
  267 + value: position,
  268 + onChange: (e) => setPosition(e.target.value),
  269 + }}
  270 + />,
  271 + ]}
  272 + columns={columns}
  273 + request={payWayDetailBody}
  274 + value={payWayDetailBody}
  275 + onChange={(value) => {
  276 + setPayWayDetailBody(value);
  277 + // setCurrtSave(payWayDetailBody)
  278 + }}
  279 + editable={{
  280 + type: 'multiple',
  281 + editableKeys,
  282 + onSave: async () => {
  283 + await waitTime(2000);
  284 + },
  285 + onChange: setEditableRowKeys,
  286 + }}
  287 + />
  288 + </>
  289 + );
  290 +};
... ...
src/pages/Instalment/components/read/readProduct.tsx 0 → 100644
  1 +import type { ProColumns } from '@ant-design/pro-components';
  2 +import { EditableProTable, ProFormRadio } from '@ant-design/pro-components';
  3 +import { Form } from 'antd';
  4 +import React, { useEffect, useState } from 'react';
  5 +
  6 +const waitTime = (time: number = 100) => {
  7 + return new Promise((resolve) => {
  8 + setTimeout(() => {
  9 + resolve(true);
  10 + }, time);
  11 + });
  12 +};
  13 +
  14 +// type DataSourceType = {
  15 +// count?: number;
  16 +// id: React.Key;
  17 +// deviceModel?: string;
  18 +// deviceName?: string;
  19 +// price?: number;
  20 +// unitPrice?: number;
  21 +// };
  22 +
  23 +export default ({ productBody, EditProductBody }) => {
  24 + const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]);
  25 + const [dataSource, setDataSource] = useState<readonly DataSourceType[]>([]);
  26 + const [form] = Form.useForm<{ name: string; company: string }>();
  27 + const [position, setPosition] = useState<'top' | 'bottom' | 'hidden'>(
  28 + 'hidden',
  29 + );
  30 + function getDataSourece() {
  31 + if (productBody.length !== 0) {
  32 + setDataSource(productBody);
  33 + }
  34 + }
  35 + function setEditProductBody(value) {
  36 + const modifiedArray = value.map((obj) => {
  37 + if (obj.dId && Number(obj.dId) <= 1000) {
  38 + return {
  39 + ...obj,
  40 + count: obj.count,
  41 + dId: null,
  42 + deviceModel: obj.deviceModel,
  43 + deviceName: obj.deviceName,
  44 + price: obj.price,
  45 + unitPrice: obj.unitPrice,
  46 + };
  47 + } else {
  48 + return obj;
  49 + }
  50 + });
  51 +
  52 + EditProductBody(modifiedArray);
  53 + setDataSource(value);
  54 + }
  55 +
  56 + useEffect(() => {
  57 + getDataSourece();
  58 + }, [productBody]);
  59 +
  60 + type DataSourceType = {
  61 + id: React.Key;
  62 + count: number;
  63 + dId?: number;
  64 + deviceModel: string;
  65 + deviceName: string;
  66 + price: number;
  67 + unitPrice: number;
  68 + };
  69 +
  70 + const columns: ProColumns<DataSourceType>[] = [
  71 + {
  72 + title: '设备编号',
  73 + dataIndex: 'dId',
  74 + hideInTable: true,
  75 + },
  76 + {
  77 + title: '设备名称',
  78 + dataIndex: 'deviceName',
  79 + formItemProps: () => {
  80 + return {
  81 + rules: [{ required: true, message: '此项为必填项' }],
  82 + };
  83 + },
  84 + },
  85 + {
  86 + title: '设备型号',
  87 + dataIndex: 'deviceModel',
  88 + width: '15%',
  89 + formItemProps: () => {
  90 + return {
  91 + rules: [{ required: true, message: '此项为必填项' }],
  92 + };
  93 + },
  94 + },
  95 + {
  96 + title: '数量',
  97 + dataIndex: 'count',
  98 + onChange: (e) => {
  99 + const unitPrice = form.getFieldValue(`data[${rowIndex}].unitPrice`);
  100 + form.setFieldsValue({
  101 + [`data[${rowIndex}].price`]: e * unitPrice,
  102 + });
  103 + },
  104 + formItemProps: () => {
  105 + return {
  106 + rules: [{ required: true, message: '此项为必填项' }],
  107 + };
  108 + },
  109 + },
  110 + {
  111 + title: '单价',
  112 + dataIndex: 'unitPrice',
  113 + formItemProps: () => {
  114 + return {
  115 + rules: [{ required: true, message: '此项为必填项' }],
  116 + };
  117 + },
  118 + },
  119 + {
  120 + title: '总价',
  121 + dataIndex: 'price',
  122 + formItemProps: () => {
  123 + return {
  124 + rules: [{ required: true, message: '此项为必填项' }],
  125 + };
  126 + },
  127 + },
  128 + ];
  129 +
  130 + return (
  131 + <>
  132 + <EditableProTable<DataSourceType>
  133 + className="product-detail-index"
  134 + rowKey="dId"
  135 + toolbar={{ style: { display: 'none' } }}
  136 + ghost={true}
  137 + scroll={{
  138 + x: 960,
  139 + }}
  140 + recordCreatorProps={
  141 + position !== 'hidden'
  142 + ? {
  143 + position: position as 'top',
  144 + record: () => ({ dId: (Math.random() * 1000).toFixed(0) }),
  145 + }
  146 + : false
  147 + }
  148 + loading={false}
  149 + toolBarRender={() => [
  150 + <ProFormRadio.Group
  151 + key="render"
  152 + fieldProps={{
  153 + value: position,
  154 + onChange: (e) => setPosition(e.target.value),
  155 + }}
  156 + />,
  157 + ]}
  158 + columns={columns}
  159 + request={dataSource}
  160 + value={dataSource}
  161 + onChange={setEditProductBody}
  162 + editable={{
  163 + type: 'multiple',
  164 + editableKeys,
  165 + onSave: async () => {
  166 + await waitTime(500);
  167 + },
  168 + onChange: setEditableRowKeys,
  169 + }}
  170 + />
  171 + </>
  172 + );
  173 +};
... ...
src/pages/Instalment/components/title/title.less 0 → 100644
  1 +.item {
  2 + background: '#0092ff';
  3 + padding: '8px 0';
  4 + display: flex;
  5 + flex-flow: row nowrap;
  6 + // flex-direction: row;
  7 + // flex-wrap: nowrap;
  8 + align-content: normal;
  9 + align-items: center;
  10 + padding-bottom: 20px;
  11 +}
  12 +
  13 +// .titleSpan{
  14 +// font-weight: bold;
  15 +// width: 100px;
  16 +// }
  17 +
  18 +// .Btn{
  19 +// background: '#0092ff';
  20 +// padding: '8px 0';
  21 +// display: flex;
  22 +// flex-flow: row nowrap;
  23 +// // flex-direction: row;
  24 +// // flex-wrap: nowrap;
  25 +// align-content: normal;
  26 +// align-items: center;
  27 +// padding-bottom: 20px;
  28 +// justify-content: space-between;
  29 +// width: 160px;
  30 +// }
  31 +
  32 +.title-index td {
  33 + font-family: 'San Francisco', 'Helvetica Neue', Helvetica, Arial,
  34 + 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC',
  35 + 'WenQuanYi Micro Hei', sans-serif;
  36 + font-size: 14px;
  37 +}
... ...
src/pages/Instalment/components/title/title.tsx 0 → 100644
  1 +import {
  2 + deleteOrderErpOrderStagesDelect,
  3 + getOrderErpOrderStagesListAll,
  4 + postOrderErpOrderStagesSearch,
  5 +} from '@/services';
  6 +import { orderExport } from '@/services/order';
  7 +import { VerticalAlignTopOutlined } from '@ant-design/icons';
  8 +import type { ProColumns } from '@ant-design/pro-components';
  9 +import { ProTable } from '@ant-design/pro-components';
  10 +import { Button, message } from 'antd';
  11 +import { useRef } from 'react';
  12 +import Comfire from '../comfire/comfire';
  13 +import AddModel from '../detail/detail';
  14 +import EditorModel from '../edit/edit';
  15 +import ReadModel from '../read/read';
  16 +import UploadModel from '../upload/uploadModel';
  17 +import './title.less';
  18 +export const waitTimePromise = async (time: number = 100) => {
  19 + return new Promise((resolve) => {
  20 + setTimeout(() => {
  21 + resolve(true);
  22 + }, time);
  23 + });
  24 +};
  25 +
  26 +export const waitTime = async (time: number = 100) => {
  27 + await waitTimePromise(time);
  28 +};
  29 +
  30 +type OrderStagesItem = {
  31 + //文件编号
  32 + id?: number;
  33 + //合同编号
  34 + contract?: string;
  35 + //供应商名称
  36 + vendor?: string;
  37 + //签合同日期
  38 + dateRange?: Date;
  39 + //终端名称
  40 + terminal?: string;
  41 + //设备编号
  42 + dId?: number;
  43 + //设备名称
  44 + deviceName?: string;
  45 + //设备型号
  46 + deviceModel?: string;
  47 + //数量
  48 + count?: number;
  49 + //单价
  50 + unitPrice?: number;
  51 + //总价
  52 + price?: number;
  53 + //合同总金额
  54 + totalPrice?: number;
  55 + //付款方式
  56 + payWay?: string;
  57 + //附件
  58 + annex?: string;
  59 + //备注
  60 + remark?: string;
  61 +};
  62 +
  63 +type OrderStagesWithListItem = {
  64 + //文件编号
  65 + id: number;
  66 + //合同编号
  67 + contract: string;
  68 + //供应商名称
  69 + vendor: string;
  70 + //签合同日期
  71 + dateRange: Date;
  72 + //终端名称
  73 + terminal: string;
  74 + orderStagesDeviceVoList: orderStagesDevice[];
  75 + //合同总金额
  76 + totalPrice: number;
  77 + //付款方式
  78 + payWay: string;
  79 + //附件
  80 + annex: string;
  81 + //备注
  82 + remark: string;
  83 +};
  84 +
  85 +type orderStagesDevice = {
  86 + //设备id
  87 + dId: number;
  88 + //设备名称
  89 + deviceName: string;
  90 + //设备型号
  91 + deviceModel: string;
  92 + //数量
  93 + count: number;
  94 + //单价
  95 + unitPrice: number;
  96 + //总价
  97 + price: number;
  98 +};
  99 +
  100 +export default () => {
  101 + // const actionRef = useRef<ActionType>();
  102 + // const [TableItem, setTableItem] = useState([]);
  103 +
  104 + interface ActionType {
  105 + reload: (resetPageIndex?: boolean) => void;
  106 + reloadAndRest: () => void;
  107 + reset: () => void;
  108 + clearSelected?: () => void;
  109 + startEditable: (rowKey: Key) => boolean;
  110 + cancelEditable: (rowKey: Key) => boolean;
  111 + }
  112 +
  113 + const ref = useRef<ActionType>({
  114 + reload: () => {
  115 + // implementation for reload
  116 + },
  117 + reloadAndRest: () => {
  118 + // implementation for reloadAndRest
  119 + },
  120 + reset: () => {
  121 + // implementation for reset
  122 + },
  123 + startEditable: () => {
  124 + // implementation for startEditable
  125 + },
  126 + cancelEditable: () => {
  127 + // implementation for cancelEditable
  128 + },
  129 + });
  130 +
  131 + function reload() {
  132 + ref.current.reload();
  133 + }
  134 +
  135 + async function toDelete(value) {
  136 + const res = await deleteOrderErpOrderStagesDelect({
  137 + data: {
  138 + ids: null,
  139 + deviceIds: value,
  140 + },
  141 + });
  142 + if (res) {
  143 + message.success('删除成功');
  144 + ref.current.reload();
  145 + } else {
  146 + message.error('删除失败');
  147 + }
  148 + }
  149 +
  150 + const exportLoadingDestory = () => {
  151 + message.success('导出成功');
  152 + };
  153 +
  154 + async function toExport() {
  155 + // await getOrderErpOrderStagesExport()
  156 + orderExport(
  157 + '/api/order/erp/orderStages/export',
  158 + '分期订单.xlsx',
  159 + 'get',
  160 + {},
  161 + exportLoadingDestory,
  162 + );
  163 + }
  164 +
  165 + const columns: ProColumns<OrderStagesItem>[] = [
  166 + {
  167 + title: '文件编号',
  168 + dataIndex: 'id',
  169 + width: '7%',
  170 + render: (_, record) => {
  171 + if (record.id) {
  172 + const text = record.id.toString();
  173 + const paddedText = '0'.repeat(4 - text.length) + text;
  174 + return paddedText;
  175 + }
  176 + },
  177 + },
  178 + {
  179 + title: '签合同日期',
  180 + dataIndex: 'dateRange',
  181 + valueType: 'date',
  182 + filters: true,
  183 + onFilter: true,
  184 + ellipsis: true,
  185 + width: '8%',
  186 + },
  187 + {
  188 + disable: true,
  189 + title: '合同编号',
  190 + dataIndex: 'contract',
  191 + filters: true,
  192 + onFilter: true,
  193 + ellipsis: true,
  194 + width: '9%',
  195 + },
  196 + {
  197 + disable: true,
  198 + title: '供应商名称',
  199 + dataIndex: 'vendor',
  200 + filters: true,
  201 + onFilter: true,
  202 + ellipsis: true,
  203 + },
  204 + {
  205 + disable: true,
  206 + title: '终端名称',
  207 + dataIndex: 'terminal',
  208 + filters: true,
  209 + onFilter: true,
  210 + ellipsis: true,
  211 + width: '6%',
  212 + },
  213 + {
  214 + disable: true,
  215 + title: '设备名称',
  216 + dataIndex: 'deviceName',
  217 + filters: true,
  218 + onFilter: true,
  219 + ellipsis: true,
  220 + },
  221 + {
  222 + disable: true,
  223 + title: '设备型号',
  224 + dataIndex: 'deviceModel',
  225 + filters: true,
  226 + hideInSearch: true,
  227 + onFilter: false,
  228 + ellipsis: true,
  229 + width: '10%',
  230 + },
  231 + {
  232 + disable: true,
  233 + title: '数量',
  234 + dataIndex: 'count',
  235 + filters: true,
  236 + hideInSearch: true,
  237 + onFilter: false,
  238 + ellipsis: true,
  239 + width: '4%',
  240 + },
  241 + {
  242 + disable: true,
  243 + title: '单价',
  244 + dataIndex: 'unitPrice',
  245 + filters: true,
  246 + hideInSearch: true,
  247 + onFilter: false,
  248 + ellipsis: true,
  249 + width: '5%',
  250 + },
  251 + {
  252 + disable: true,
  253 + title: '总价',
  254 + dataIndex: 'price',
  255 + filters: true,
  256 + hideInSearch: true,
  257 + onFilter: false,
  258 + ellipsis: true,
  259 + width: '5%',
  260 + },
  261 + {
  262 + disable: true,
  263 + title: '合同总金额',
  264 + dataIndex: 'totalPrice',
  265 + filters: true,
  266 + hideInSearch: true,
  267 + onFilter: false,
  268 + ellipsis: true,
  269 + width: '6%',
  270 + },
  271 + {
  272 + disable: true,
  273 + title: '付款方式',
  274 + dataIndex: 'payWay',
  275 + filters: true,
  276 + hideInSearch: true,
  277 + onFilter: false,
  278 + ellipsis: true,
  279 + },
  280 + {
  281 + disable: true,
  282 + title: '附件',
  283 + dataIndex: 'annex',
  284 + filters: true,
  285 + hideInSearch: true,
  286 + onFilter: false,
  287 + ellipsis: true,
  288 + width: '5%',
  289 + render: (_, record) => {
  290 + if (record.id) {
  291 + return <a href={record.annex}>{record.annex}</a>;
  292 + }
  293 + },
  294 + },
  295 + {
  296 + disable: true,
  297 + title: '备注',
  298 + dataIndex: 'remark',
  299 + filters: true,
  300 + hideInSearch: true,
  301 + onFilter: false,
  302 + ellipsis: true,
  303 + width: '5%',
  304 + },
  305 + {
  306 + title: '操作',
  307 + valueType: 'option',
  308 + key: 'option',
  309 + width: '10%',
  310 + render: (_text, record) => {
  311 + if (record?.id) {
  312 + return (
  313 + <>
  314 + <ReadModel currentContract={record.contract}></ReadModel>
  315 + &nbsp;
  316 + <EditorModel
  317 + currentContract={record.contract}
  318 + toReload={reload}
  319 + ></EditorModel>
  320 + &nbsp;
  321 + {/* <a key="delect" target="_blank" rel="noopener noreferrer" onClick={() => { toDelete([record.dId]) }}>
  322 + 删除
  323 + </a> */}
  324 + <Comfire currtDid={record.dId} sureDelete={toDelete}></Comfire>
  325 + </>
  326 + );
  327 + }
  328 + return null;
  329 + },
  330 + },
  331 + ];
  332 +
  333 + return (
  334 + <ProTable<OrderStagesItem>
  335 + className="title-index"
  336 + columnEmptyText=""
  337 + columns={columns}
  338 + actionRef={ref}
  339 + cardBordered
  340 + request={async (params) => {
  341 + // console.log(params);
  342 + if (
  343 + params.id !== null ||
  344 + params.contract !== null ||
  345 + params.vendor !== null ||
  346 + params.terminal !== null ||
  347 + params.deviceName !== null ||
  348 + params.dateRange !== null
  349 + ) {
  350 + // console.log(params.id);
  351 + // console.log(params.contract);
  352 + // console.log(params.vendor);
  353 + let PostOrderErpOrderStagesSearchOption = {
  354 + id: params.id,
  355 + contract: params.contract,
  356 + vendor: params.vendor,
  357 + terminal: params.terminal,
  358 + deviceName: params.deviceName,
  359 + dateRange: params.dateRange,
  360 + };
  361 + let res = await postOrderErpOrderStagesSearch({
  362 + data: { ...PostOrderErpOrderStagesSearchOption },
  363 + });
  364 + await waitTime(2000);
  365 + if (res) {
  366 + // setTableItem(res.data)
  367 + const orderStagesWithList: OrderStagesWithListItem[] = res?.data;
  368 + let orderStagesList: OrderStagesItem[] = [];
  369 + for (let ind = 0; ind < orderStagesWithList.length; ind++) {
  370 + for (
  371 + let index = 0;
  372 + index < orderStagesWithList[ind].orderStagesDeviceVoList.length;
  373 + index++
  374 + ) {
  375 + let item: OrderStagesItem = {
  376 + id: undefined,
  377 + contract: undefined,
  378 + vendor: undefined,
  379 + dateRange: undefined,
  380 + terminal: undefined,
  381 + dId: undefined,
  382 + deviceName: undefined,
  383 + deviceModel: undefined,
  384 + count: undefined,
  385 + unitPrice: undefined,
  386 + price: undefined,
  387 + totalPrice: undefined,
  388 + payWay: undefined,
  389 + annex: undefined,
  390 + remark: undefined,
  391 + };
  392 + if (index === 0) {
  393 + item.id = orderStagesWithList[ind].id;
  394 + item.contract = orderStagesWithList[ind].contract;
  395 + item.vendor = orderStagesWithList[ind].vendor;
  396 + item.dateRange = orderStagesWithList[ind].dateRange;
  397 + item.terminal = orderStagesWithList[ind].terminal;
  398 + item.dId =
  399 + orderStagesWithList[ind].orderStagesDeviceVoList[index].dId;
  400 + item.deviceName =
  401 + orderStagesWithList[ind].orderStagesDeviceVoList[
  402 + index
  403 + ].deviceName;
  404 + item.deviceModel =
  405 + orderStagesWithList[ind].orderStagesDeviceVoList[
  406 + index
  407 + ].deviceModel;
  408 + item.count =
  409 + orderStagesWithList[ind].orderStagesDeviceVoList[
  410 + index
  411 + ].count;
  412 + item.unitPrice =
  413 + orderStagesWithList[ind].orderStagesDeviceVoList[
  414 + index
  415 + ].unitPrice;
  416 + item.price =
  417 + orderStagesWithList[ind].orderStagesDeviceVoList[
  418 + index
  419 + ].price;
  420 + item.totalPrice = orderStagesWithList[ind].totalPrice;
  421 + item.payWay = orderStagesWithList[ind].payWay;
  422 + item.annex = orderStagesWithList[ind].annex;
  423 + item.remark = orderStagesWithList[ind].remark;
  424 + orderStagesList.push(item);
  425 + } else {
  426 + item.id = orderStagesWithList[ind].id;
  427 + item.contract = orderStagesWithList[ind].contract;
  428 + item.vendor = orderStagesWithList[ind].vendor;
  429 + item.dateRange = orderStagesWithList[ind].dateRange;
  430 + item.terminal = orderStagesWithList[ind].terminal;
  431 + item.dId =
  432 + orderStagesWithList[ind].orderStagesDeviceVoList[index].dId;
  433 + item.deviceName =
  434 + orderStagesWithList[ind].orderStagesDeviceVoList[
  435 + index
  436 + ].deviceName;
  437 + item.deviceModel =
  438 + orderStagesWithList[ind].orderStagesDeviceVoList[
  439 + index
  440 + ].deviceModel;
  441 + item.count =
  442 + orderStagesWithList[ind].orderStagesDeviceVoList[
  443 + index
  444 + ].count;
  445 + item.unitPrice =
  446 + orderStagesWithList[ind].orderStagesDeviceVoList[
  447 + index
  448 + ].unitPrice;
  449 + item.price =
  450 + orderStagesWithList[ind].orderStagesDeviceVoList[
  451 + index
  452 + ].price;
  453 + item.totalPrice = orderStagesWithList[ind].totalPrice;
  454 + item.payWay = orderStagesWithList[ind].payWay;
  455 + item.annex = orderStagesWithList[ind].annex;
  456 + item.remark = orderStagesWithList[ind].remark;
  457 + orderStagesList.push(item);
  458 + }
  459 + }
  460 + }
  461 + return {
  462 + data: orderStagesList || [],
  463 + };
  464 + }
  465 + } else {
  466 + let res = await getOrderErpOrderStagesListAll();
  467 + await waitTime(2000);
  468 + if (res) {
  469 + // setTableItem(res.data)
  470 + const orderStagesWithList: OrderStagesWithListItem[] = res?.data;
  471 + let orderStagesList: OrderStagesItem[] = [];
  472 + for (let ind = 0; ind < orderStagesWithList.length; ind++) {
  473 + for (
  474 + let index = 0;
  475 + index < orderStagesWithList[ind].orderStagesDeviceVoList.length;
  476 + index++
  477 + ) {
  478 + let item: OrderStagesItem = {
  479 + id: undefined,
  480 + contract: undefined,
  481 + vendor: undefined,
  482 + dateRange: undefined,
  483 + terminal: undefined,
  484 + dId: undefined,
  485 + deviceName: undefined,
  486 + deviceModel: undefined,
  487 + count: undefined,
  488 + unitPrice: undefined,
  489 + price: undefined,
  490 + totalPrice: undefined,
  491 + payWay: undefined,
  492 + annex: undefined,
  493 + remark: undefined,
  494 + };
  495 + if (index === 0) {
  496 + item.id = orderStagesWithList[ind].id;
  497 + item.contract = orderStagesWithList[ind].contract;
  498 + item.vendor = orderStagesWithList[ind].vendor;
  499 + item.dateRange = orderStagesWithList[ind].dateRange;
  500 + item.terminal = orderStagesWithList[ind].terminal;
  501 + item.dId =
  502 + orderStagesWithList[ind].orderStagesDeviceVoList[index].dId;
  503 + item.deviceName =
  504 + orderStagesWithList[ind].orderStagesDeviceVoList[
  505 + index
  506 + ].deviceName;
  507 + item.deviceModel =
  508 + orderStagesWithList[ind].orderStagesDeviceVoList[
  509 + index
  510 + ].deviceModel;
  511 + item.count =
  512 + orderStagesWithList[ind].orderStagesDeviceVoList[
  513 + index
  514 + ].count;
  515 + item.unitPrice =
  516 + orderStagesWithList[ind].orderStagesDeviceVoList[
  517 + index
  518 + ].unitPrice;
  519 + item.price =
  520 + orderStagesWithList[ind].orderStagesDeviceVoList[
  521 + index
  522 + ].price;
  523 + item.totalPrice = orderStagesWithList[ind].totalPrice;
  524 + item.payWay = orderStagesWithList[ind].payWay;
  525 + item.annex = orderStagesWithList[ind].annex;
  526 + item.remark = orderStagesWithList[ind].remark;
  527 + orderStagesList.push(item);
  528 + } else {
  529 + item.id = orderStagesWithList[ind].id;
  530 + item.contract = orderStagesWithList[ind].contract;
  531 + item.vendor = orderStagesWithList[ind].vendor;
  532 + item.dateRange = orderStagesWithList[ind].dateRange;
  533 + item.terminal = orderStagesWithList[ind].terminal;
  534 + item.dId =
  535 + orderStagesWithList[ind].orderStagesDeviceVoList[index].dId;
  536 + item.deviceName =
  537 + orderStagesWithList[ind].orderStagesDeviceVoList[
  538 + index
  539 + ].deviceName;
  540 + item.deviceModel =
  541 + orderStagesWithList[ind].orderStagesDeviceVoList[
  542 + index
  543 + ].deviceModel;
  544 + item.count =
  545 + orderStagesWithList[ind].orderStagesDeviceVoList[
  546 + index
  547 + ].count;
  548 + item.unitPrice =
  549 + orderStagesWithList[ind].orderStagesDeviceVoList[
  550 + index
  551 + ].unitPrice;
  552 + item.price =
  553 + orderStagesWithList[ind].orderStagesDeviceVoList[
  554 + index
  555 + ].price;
  556 + item.totalPrice = orderStagesWithList[ind].totalPrice;
  557 + item.payWay = orderStagesWithList[ind].payWay;
  558 + item.annex = orderStagesWithList[ind].annex;
  559 + item.remark = orderStagesWithList[ind].remark;
  560 + orderStagesList.push(item);
  561 + }
  562 + }
  563 + }
  564 + return {
  565 + data: orderStagesList || [],
  566 + };
  567 + }
  568 + }
  569 + }}
  570 + editable={{
  571 + type: 'multiple',
  572 + }}
  573 + columnsState={{
  574 + persistenceKey: 'pro-table-singe-demos',
  575 + persistenceType: 'localStorage',
  576 + defaultValue: {
  577 + option: { fixed: 'right', disable: true },
  578 + },
  579 + // onChange(value) {
  580 + // console.log('value: ', value);
  581 + // },
  582 + }}
  583 + rowKey="dId"
  584 + search={{
  585 + labelWidth: 'auto',
  586 + }}
  587 + options={{
  588 + setting: {
  589 + listsHeight: 800,
  590 + },
  591 + }}
  592 + form={{
  593 + syncToUrl: (values, type) => {
  594 + if (type === 'get') {
  595 + return {
  596 + ...values,
  597 + created_at: [values.startTime, values.endTime],
  598 + };
  599 + }
  600 + return values;
  601 + },
  602 + }}
  603 + pagination={{
  604 + pageSize: 10,
  605 + // onChange: (page) => console.log(page),
  606 + }}
  607 + dateFormatter="string"
  608 + headerTitle={[]}
  609 + toolBarRender={() => [
  610 + <>
  611 + <AddModel toReload={reload}></AddModel>
  612 + <UploadModel toReload={reload}></UploadModel>
  613 + <Button
  614 + type="primary"
  615 + onClick={() => {
  616 + toExport();
  617 + }}
  618 + >
  619 + <VerticalAlignTopOutlined />
  620 + 导出
  621 + </Button>
  622 + </>,
  623 + ]}
  624 + />
  625 + );
  626 +};
... ...
src/pages/Instalment/components/upload/uploadApp.tsx 0 → 100644
  1 +import { InboxOutlined } from '@ant-design/icons';
  2 +import { Upload } from 'antd';
  3 +import React from 'react';
  4 +
  5 +const App: React.FC = ({ uploadFile }) => {
  6 + const { Dragger } = Upload;
  7 +
  8 + const props = {
  9 + name: 'file',
  10 + multiple: true,
  11 + maxCount: 1,
  12 + onChange: (info) => {
  13 + uploadFile(info.file.originFileObj);
  14 + },
  15 + };
  16 +
  17 + return (
  18 + <Dragger {...props}>
  19 + <p className="ant-upload-drag-icon">
  20 + <InboxOutlined />
  21 + </p>
  22 + <p className="ant-upload-text">
  23 + Click or drag file to this area to upload
  24 + </p>
  25 + <p className="ant-upload-hint">
  26 + Support for a single or bulk upload. Strictly prohibited from uploading
  27 + company data or other banned files.
  28 + </p>
  29 + </Dragger>
  30 + );
  31 +};
  32 +
  33 +export default App;
... ...
src/pages/Instalment/components/upload/uploadModel.tsx 0 → 100644
  1 +import { postOrderErpOrderStagesImport } from '@/services/request';
  2 +import { VerticalAlignBottomOutlined } from '@ant-design/icons';
  3 +import { ModalForm } from '@ant-design/pro-components';
  4 +import { Button, Form, message } from 'antd';
  5 +import { RcFile } from 'antd/es/upload';
  6 +import { useState } from 'react';
  7 +import App from './uploadApp';
  8 +
  9 +// const waitTime = (time: number = 100) => {
  10 +// return new Promise((resolve) => {
  11 +// setTimeout(() => {
  12 +// resolve(true);
  13 +// }, time);
  14 +// });
  15 +// };
  16 +
  17 +export default ({ toReload }) => {
  18 + const [form] = Form.useForm<{ name: string; company: string }>();
  19 + const [uploadFile, setUploadFile] = useState({});
  20 + // function setUploadFileWay(value) {
  21 + // setUploadFile(value)
  22 + // }
  23 + return (
  24 + <ModalForm<{
  25 + name: string;
  26 + company: string;
  27 + }>
  28 + title="新建表单"
  29 + trigger={
  30 + <Button type="primary">
  31 + <VerticalAlignBottomOutlined />
  32 + 导入
  33 + </Button>
  34 + }
  35 + form={form}
  36 + autoFocusFirstInput
  37 + modalProps={{
  38 + destroyOnClose: true,
  39 + }}
  40 + submitTimeout={2000}
  41 + onFinish={async () => {
  42 + const formData = new FormData();
  43 + formData.append('file', uploadFile as RcFile);
  44 + const res = await postOrderErpOrderStagesImport({
  45 + data: formData,
  46 + headers: {
  47 + 'Content-Type':
  48 + 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
  49 + },
  50 + });
  51 + if (res) {
  52 + message.success('提交成功');
  53 + toReload();
  54 + return true;
  55 + }
  56 + }}
  57 + >
  58 + <App uploadFile={setUploadFile}></App>
  59 + </ModalForm>
  60 + );
  61 +};
... ...
src/pages/Instalment/index.tsx 0 → 100644
  1 +import Title from './components/title/title';
  2 +
  3 +const instalment_contect: React.FC = () => (
  4 + <>
  5 + <Title />
  6 + </>
  7 +);
  8 +
  9 +export default instalment_contect;
... ...
src/pages/Order/components/CheckModal.tsx
... ... @@ -401,6 +401,9 @@ export default ({
401 401 if (checkType(CHECK_TYPE.CONFIRM_REISSUE)) {
402 402 type = 'confirm_reissue';
403 403 }
  404 + if (checkType(CHECK_TYPE.CREDIT_AUDIT)) {
  405 + type = 'credit_audit';
  406 + }
404 407 return type;
405 408 }
406 409  
... ... @@ -648,11 +651,15 @@ export default ({
648 651 ) : (
649 652 <div>请特别注意订单总金额与订单金额。</div>
650 653 )}
651   - <ProFormTextArea
652   - width="lg"
653   - name="name"
654   - placeholder="若驳回,请填写驳回理由"
655   - />
  654 + {!checkType(CHECK_TYPE.CONFIRM_DELIVER) ? (
  655 + <ProFormTextArea
  656 + width="lg"
  657 + name="name"
  658 + placeholder="若驳回,请填写驳回理由"
  659 + />
  660 + ) : (
  661 + <></>
  662 + )}
656 663 {checkType(CHECK_TYPE.FINALCIAL) ? (
657 664 <>
658 665 <div className="pb-4 text-xs decoration-gray-50">
... ...
src/pages/Order/components/ImportExpressBillModal.tsx 0 → 100644
  1 +import { RESPONSE_CODE } from '@/constants/enum';
  2 +import { postOrderImportImportWeightAndVolume } from '@/services';
  3 +import { ModalForm, ProFormUploadDragger } from '@ant-design/pro-components';
  4 +import { Button, Form, message } from 'antd';
  5 +
  6 +export default () => {
  7 + const [form] = Form.useForm();
  8 + const [messageApi, contextHolder] = message.useMessage();
  9 + return (
  10 + <>
  11 + <ModalForm
  12 + title="导入重量、体积"
  13 + trigger={<Button type="primary">导入重量、体积</Button>}
  14 + form={form}
  15 + autoFocusFirstInput
  16 + modalProps={{
  17 + destroyOnClose: true,
  18 + }}
  19 + submitTimeout={2000}
  20 + onFinish={async (values) => {
  21 + console.log(values);
  22 + const formData = new FormData();
  23 + formData.append('file', values.express[0].originFileObj);
  24 + messageApi.open({
  25 + type: 'loading',
  26 + content: '正在导入...',
  27 + duration: 0,
  28 + });
  29 + const res = await postOrderImportImportWeightAndVolume({
  30 + data: formData,
  31 + headers: {
  32 + 'Content-Type':
  33 + 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
  34 + },
  35 + });
  36 + if (res.result === RESPONSE_CODE.SUCCESS) {
  37 + return true;
  38 + } else {
  39 + message.error('导入失败');
  40 + }
  41 + messageApi.destroy();
  42 + }}
  43 + >
  44 + <ProFormUploadDragger max={1} label="上传快递单" name="express" />
  45 + </ModalForm>
  46 + {contextHolder}
  47 + </>
  48 + );
  49 +};
... ...
src/pages/Order/components/ImportModal.tsx
... ... @@ -26,7 +26,13 @@ export default ({ onClose }) =&gt; {
26 26 };
27 27 const downloadTemplate = async () => {
28 28 exportLoading('正在下载模板...');
29   - orderExport('/api/service/order/exportTemplate', {}, exportLoadingDestory);
  29 + orderExport(
  30 + '/api/service/order/exportTemplate',
  31 + '订单.xlsx',
  32 + 'post',
  33 + {},
  34 + exportLoadingDestory,
  35 + );
30 36 };
31 37  
32 38 const handleUpload = async () => {
... ... @@ -59,6 +65,8 @@ export default ({ onClose }) =&gt; {
59 65 exportLoading('正在下载错误信息...');
60 66 orderExport(
61 67 '/api/service/order/errorExcelInformation',
  68 + '订单.xlsx',
  69 + 'post',
62 70 formData,
63 71 exportLoadingDestory,
64 72 );
... ...
src/pages/Order/components/ModifiedDiffModal.tsx
1 1 import { postServiceOrderModifiedDiff } from '@/services';
2   -import {
3   - enumValueToLabel,
4   - getAliYunOSSFileNameFromUrl,
5   - getUserInfo,
6   -} from '@/utils';
  2 +import { enumValueToLabel, getAliYunOSSFileNameFromUrl } from '@/utils';
7 3 import { getReceivingCompanyOptions, isSupplier } from '@/utils/order';
8 4 import { Button, Divider, Modal, Space, Table, TableProps } from 'antd';
9   -import Base64 from 'base-64';
10 5 import { useEffect, useState } from 'react';
11 6 import {
12 7 PAYEE_OPTIONS,
  8 + PAYMENT_CHANNEL_OPTIONS,
  9 + PAYMENT_METHOD_OPTIONS,
13 10 PRODUCT_BELONG_DEPARTMENT_OPTIONS,
14 11 SHIPPING_WAREHOUSE_OPTIONS,
15 12 } from '../constant';
16 13 import '../table.less';
17 14  
18 15 export default ({ setVisible, subOrders, mainOrder, onClose }) => {
19   - const userInfo = getUserInfo();
20 16 let subIds = subOrders?.map((item: any) => {
21 17 return item.id;
22 18 });
... ... @@ -77,6 +73,12 @@ export default ({ setVisible, subOrders, mainOrder, onClose }) =&gt; {
77 73 if (key === '发货仓库') {
78 74 newText = enumValueToLabel(text, SHIPPING_WAREHOUSE_OPTIONS);
79 75 }
  76 + if (key === '支付渠道') {
  77 + newText = enumValueToLabel(text, PAYMENT_CHANNEL_OPTIONS);
  78 + }
  79 + if (key === '支付方式') {
  80 + newText = enumValueToLabel(text, PAYMENT_METHOD_OPTIONS);
  81 + }
80 82 if (key === '单价' || key === '合计') {
81 83 newText = '¥' + newText;
82 84 }
... ... @@ -186,6 +188,8 @@ export default ({ setVisible, subOrders, mainOrder, onClose }) =&gt; {
186 188 ['productBelongBusiness', '所属事业部'],
187 189 ['shippingWarehouse', '发货仓库'],
188 190 ['notes', '备注'],
  191 + ['paymentChannel', '支付渠道'],
  192 + ['paymentMethod', '支付方式'],
189 193 ['listAnnex', '附件'],
190 194 ];
191 195 for (let field of visibleFields) {
... ... @@ -234,7 +238,6 @@ export default ({ setVisible, subOrders, mainOrder, onClose }) =&gt; {
234 238 ['institutionContactName', '单位联系人'],
235 239 ['institution', '单位'],
236 240 ['totalPayment', '支付总金额'],
237   - ['paymentChannel', '支付渠道'],
238 241 ['notes', '备注'],
239 242 ['bank', '开户银行'],
240 243 ['bankAccountNumber', '银行账号'],
... ...
src/pages/Order/components/OrderDrawer.tsx
1 1 import { RESPONSE_CODE } from '@/constants/enum';
2 2 import {
3 3 postCanrdApiUserAddressList,
4   - postCanrdApiUserList,
  4 + postCanrdApiUserDetail,
  5 + postCanrdApiUserNowMoneyCheck,
5 6 postKingdeeRepCustomerDetail,
6 7 postKingdeeRepMaterial,
7 8 postKingdeeRepMaterialUnit,
8 9 postKingdeeRepMeasureUnit,
  10 + postPrepaidPhoneAvailableList,
9 11 postServiceOrderAddOrder,
10 12 postServiceOrderAfterSalesQuerySnapshotOrder,
11 13 postServiceOrderApplyAfterSales,
12 14 postServiceOrderApplyModify,
13   - postServiceOrderQuerySalesCode,
14 15 postServiceOrderUpdateOrder,
15 16 } from '@/services';
16 17 import {
... ... @@ -22,6 +23,7 @@ import {
22 23 } from '@/utils';
23 24 import { getDefaultString } from '@/utils/StringUtil';
24 25 import { getTeacherCustomFieldNumber } from '@/utils/kingdee';
  26 +import { getSalesCodeOptions } from '@/utils/order';
25 27 import {
26 28 DrawerForm,
27 29 FormListActionType,
... ... @@ -106,6 +108,7 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
106 108 },
107 109 ];
108 110 }>();
  111 + const [accountOptions, setAccountOptions] = useState<any>([]);
109 112  
110 113 let copyData = cloneDeep(data);
111 114  
... ... @@ -122,15 +125,8 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
122 125 /**
123 126 * 获取销售代码枚举,在复制和编辑的时候判断是否为旧的代码
124 127 */
125   - const getSalesCodeOptions = async () => {
126   - const res = await postServiceOrderQuerySalesCode();
127   - let options = res.data?.map((item) => {
128   - return {
129   - label: item.userName,
130   - value: item.userName,
131   - number: item.number,
132   - };
133   - });
  128 + const loadSalesCodeOptions = async () => {
  129 + let options = await getSalesCodeOptions();
134 130 setSalesCodeOptions(options);
135 131  
136 132 if (optType('copy') || optType('edit')) {
... ... @@ -236,6 +232,38 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
236 232 // }
237 233  
238 234 /**
  235 + * 加载预存账号的options
  236 + */
  237 + async function loadAccountOptions(phone: any) {
  238 + let newAccountOptions = [];
  239 + //预存账号id
  240 + let uid = copyData.prepaidUid;
  241 + let res = await postCanrdApiUserDetail({ data: { uid: uid } });
  242 + if (res && res.result === RESPONSE_CODE.SUCCESS && res.data !== null) {
  243 + let uidDetail = res.data;
  244 + uidDetail.value = uid;
  245 + uidDetail.label = uidDetail.realName;
  246 + newAccountOptions.push(uidDetail);
  247 + }
  248 +
  249 + //查询当前手机号允许使用的预存账号
  250 + if (phone) {
  251 + let res = await postPrepaidPhoneAvailableList({ data: { phone: phone } });
  252 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  253 + let uidDetails = res.data;
  254 + for (let detail of uidDetails) {
  255 + detail.value = detail.uid;
  256 + detail.label = detail.realName;
  257 + newAccountOptions.push(detail);
  258 + }
  259 + }
  260 + }
  261 +
  262 + console.log(newAccountOptions);
  263 + setAccountOptions(newAccountOptions);
  264 + }
  265 +
  266 + /**
239 267 * 构建回显数据
240 268 */
241 269 function buildOrderData() {
... ... @@ -303,6 +331,8 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
303 331 if (!optType('after-sales-check')) {
304 332 // showKindeeInfo();
305 333 }
  334 +
  335 + loadAccountOptions(form.getFieldValue('customerContactNumber'));
306 336 }
307 337 }
308 338  
... ... @@ -524,6 +554,8 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
524 554 getDefaultString(option.detail),
525 555 );
526 556 form.setFieldValue('customerNameString', option.realName);
  557 +
  558 + loadAccountOptions(option.phone);
527 559 }
528 560  
529 561 //erp收货地址:需要与客户联系人中的地址一样:姓名,手机号,地址
... ... @@ -586,6 +618,56 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
586 618 }
587 619  
588 620 /**
  621 + * 检查用户额度
  622 + * @param option
  623 + */
  624 + const checkAccountMoney = async (uid: any, subPrice: any) => {
  625 + let res = await postCanrdApiUserNowMoneyCheck({
  626 + data: { uid: uid, subPrice: subPrice },
  627 + });
  628 + if (res && res.result === RESPONSE_CODE.SUCCESS && res.data) {
  629 + let data = res.data;
  630 + let isCredit = data.isCredit;
  631 + if (isCredit) {
  632 + return true;
  633 + }
  634 +
  635 + message.error(
  636 + '用户余额不足,当前预减的金额为:' +
  637 + data.subPrice +
  638 + ',当前账号余额为:' +
  639 + data.nowMoney +
  640 + ',当前账号可赊账额度为:' +
  641 + data.creditLimit,
  642 + );
  643 + return false;
  644 + }
  645 +
  646 + return false;
  647 + };
  648 +
  649 + /**
  650 + * 总金额改变触发事件
  651 + * 如果是预存单,需要检查余额
  652 + * @param value
  653 + */
  654 + const totalPaymentChange = (value: any) => {
  655 + let paymentMethod = form.getFieldValue('paymentMethod');
  656 + let prepaidUid = form.getFieldValue('prepaidUid');
  657 + if (
  658 + value &&
  659 + paymentMethod &&
  660 + paymentMethod === 'WITHHOLDING_ADVANCE_DEPOSIT' &&
  661 + prepaidUid
  662 + ) {
  663 + let valid = checkAccountMoney(prepaidUid, value);
  664 + if (!valid) {
  665 + form.setFieldValue('prepaidUid', undefined);
  666 + }
  667 + }
  668 + };
  669 +
  670 + /**
589 671 * 检查客户是否可以编辑
590 672 * @returns
591 673 */
... ... @@ -658,6 +740,18 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
658 740 }
659 741 }
660 742  
  743 + const validateContactNumber = (_: any, value: any) => {
  744 + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  745 + const phoneRegex = /^\d{1,11}(-\d{1,11})?$/;
  746 +
  747 + if (emailRegex.test(value) || phoneRegex.test(value)) {
  748 + return Promise.resolve();
  749 + }
  750 + return Promise.reject(
  751 + new Error('联系方式必须是邮箱或手机号格式(不能包含空格等特殊符号)'),
  752 + );
  753 + };
  754 +
661 755 /**
662 756 * 刪除草稿数据
663 757 */
... ... @@ -667,7 +761,7 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
667 761  
668 762 useEffect(() => {
669 763 checkHasLocalData();
670   - getSalesCodeOptions();
  764 + loadSalesCodeOptions();
671 765 if (optType('after-sales-check')) {
672 766 getOldOrderData(data.id);
673 767 } else {
... ... @@ -949,7 +1043,6 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
949 1043 }
950 1044  
951 1045 let title = '';
952   - let spanText = '';
953 1046 let realName = item.realName;
954 1047 let phone = item.phone;
955 1048 let province = item.province;
... ... @@ -959,31 +1052,41 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
959 1052 let institution = item.institution;
960 1053 let institutionContactName = item.institutionContactName;
961 1054  
962   - title =
963   - getDefaultString(realName) +
964   - '|' +
965   - getDefaultString(phone) +
966   - '|' +
967   - getDefaultString(institution) +
968   - '|' +
969   - getDefaultString(institutionContactName) +
970   - '|' +
  1055 + let address =
971 1056 getDefaultString(province) +
972 1057 getDefaultString(city) +
973 1058 getDefaultString(district) +
974 1059 getDefaultString(detail);
975 1060  
976   - spanText =
  1061 + title =
977 1062 getDefaultString(realName) +
978 1063 '|' +
979 1064 getDefaultString(phone) +
980 1065 '|' +
981 1066 getDefaultString(institution) +
982 1067 '|' +
983   - getDefaultString(institutionContactName);
  1068 + getDefaultString(institutionContactName) +
  1069 + '|' +
  1070 + address;
  1071 +
984 1072 return (
985   - <div title={title}>
986   - <span style={{ color: '#333333' }}>{spanText}</span>
  1073 + <div title={title} className="whitespace-normal">
  1074 + <span style={{ color: '#333333' }}>
  1075 + {getDefaultString(realName)}
  1076 + </span>
  1077 + |
  1078 + <span className="text-sky-600">
  1079 + {getDefaultString(phone)}
  1080 + </span>
  1081 + |
  1082 + <span style={{ color: '#333333' }}>
  1083 + {getDefaultString(institution)}
  1084 + </span>
  1085 + |
  1086 + <span style={{ color: '#333333' }}>
  1087 + {getDefaultString(institutionContactName)}
  1088 + </span>
  1089 + |<span className="text-orange-400">{address}</span>
987 1090 </div>
988 1091 );
989 1092 },
... ... @@ -991,6 +1094,9 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
991 1094 debounceTime={1000}
992 1095 request={async (value, {}) => {
993 1096 const keywords = value.keyWords;
  1097 + if (keywords === '') {
  1098 + return [];
  1099 + }
994 1100 const res = await postCanrdApiUserAddressList({
995 1101 data: { keywords: keywords },
996 1102 });
... ... @@ -1044,7 +1150,15 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1044 1150 name="customerContactNumber"
1045 1151 label="联系方式"
1046 1152 placeholder="请输入联系方式"
1047   - rules={[{ required: true, message: '联系方式必填' }]}
  1153 + fieldProps={{
  1154 + onBlur: (v) => {
  1155 + loadAccountOptions(v.target.value);
  1156 + },
  1157 + }}
  1158 + rules={[
  1159 + { required: true, message: '联系方式必填' },
  1160 + { validator: validateContactNumber },
  1161 + ]}
1048 1162 />
1049 1163 <ProFormText
1050 1164 width="lg"
... ... @@ -1080,7 +1194,12 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1080 1194 { required: true, message: '支付总额必填' },
1081 1195 {
1082 1196 validator: (_, value) => {
1083   - if (value <= 0) {
  1197 + let paymentMethod = form.getFieldValue('paymentMethod');
  1198 + if (
  1199 + value <= 0 &&
  1200 + paymentMethod &&
  1201 + paymentMethod === 'WITHHOLDING_ADVANCE_DEPOSIT'
  1202 + ) {
1084 1203 return Promise.reject(
1085 1204 new Error(
1086 1205 '支付总额必须大于0 (扣预存的订单现在也必须填写实际金额)',
... ... @@ -1103,6 +1222,9 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1103 1222 计算
1104 1223 </Button>
1105 1224 ),
  1225 + onChange: (value: any) => {
  1226 + totalPaymentChange(value);
  1227 + },
1106 1228 }}
1107 1229 disabled={optType('after-sales-check')}
1108 1230 />
... ... @@ -1138,8 +1260,15 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1138 1260 hidden={paymentMethod !== 'WITHHOLDING_ADVANCE_DEPOSIT'}
1139 1261 showSearch
1140 1262 label="预存账号"
1141   - onChange={(option: any) => {
1142   - form.setFieldValue('prepaidAmount', option.nowMoney);
  1263 + onChange={(value: any) => {
  1264 + //检查用户额度
  1265 + let valid = checkAccountMoney(
  1266 + value,
  1267 + form.getFieldValue('totalPayment'),
  1268 + );
  1269 + if (!valid) {
  1270 + form.setFieldValue('prepaidUid', undefined);
  1271 + }
1143 1272 }}
1144 1273 placeholder="请选择预存账号"
1145 1274 rules={[
... ... @@ -1170,21 +1299,22 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1170 1299 },
1171 1300 }}
1172 1301 debounceTime={1000}
1173   - request={async (value, {}) => {
1174   - const keywords = value.keyWords;
1175   - const res = await postCanrdApiUserList({
1176   - data: { keywords: keywords, pageSize: 1000000 },
1177   - });
1178   - let options = res?.data?.data?.map((c: any) => {
1179   - return {
1180   - ...c,
1181   - label: c.realName,
1182   - value: c.uid,
1183   - key: c.uid,
1184   - };
1185   - });
1186   - return options;
1187   - }}
  1302 + // request={async (value, {}) => {
  1303 + // const keywords = value.keyWords;
  1304 + // const res = await postCanrdApiUserList({
  1305 + // data: { keywords: keywords, pageSize: 50 },
  1306 + // });
  1307 + // let options = res?.data?.data?.map((c: any) => {
  1308 + // return {
  1309 + // ...c,
  1310 + // label: c.realName,
  1311 + // value: c.uid,
  1312 + // key: c.uid,
  1313 + // };
  1314 + // });
  1315 + // return options;
  1316 + // }}
  1317 + options={accountOptions}
1188 1318 />
1189 1319 <ProFormSelect
1190 1320 placeholder="选择是否需要开票"
... ... @@ -1305,8 +1435,6 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1305 1435 (sum, item) => FloatAdd(sum, item.subOrderPayment),
1306 1436 0,
1307 1437 );
1308   - console.log(reduce);
1309   - console.log(totalPayment);
1310 1438 if (reduce === totalPayment || value) {
1311 1439 return Promise.resolve();
1312 1440 }
... ... @@ -1516,8 +1644,20 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1516 1644 label="商品数量"
1517 1645 fieldProps={{
1518 1646 onChange: (value) => {
1519   - listMeta.record.quantity = value;
1520   - computeSubOrderPayment(listMeta);
  1647 + // 确保变更后的值为整数
  1648 + const intValue = parseInt(value, 10);
  1649 + if (!isNaN(intValue)) {
  1650 + listMeta.record.quantity = intValue;
  1651 + computeSubOrderPayment(listMeta);
  1652 + }
  1653 + },
  1654 + parser: (value) => {
  1655 + // 将输入的值转换为整数,如果不是合法数字则返回空字符串触发校验错误
  1656 + return value ? parseInt(value, 10) : '';
  1657 + },
  1658 + formatter: (value) => {
  1659 + // 在显示时始终将其格式化为不带小数部分的整数字符串
  1660 + return value ? value.toString() : '';
1521 1661 },
1522 1662 }}
1523 1663 placeholder="请输入商品数量"
... ...
src/pages/Order/constant.ts
1 1 import { postServiceOrderQueryCustomerInformation } from '@/services';
2 2 import { enumToProTableEnumValue } from '@/utils';
3 3 import { getReceivingCompanyOptions, isSupplier } from '@/utils/order';
4   -
5 4 export const COMFIR_RECEIPT_IMAGES_NUMBER = 3;
6 5  
7 6 export const PAYMENT_CHANNEL_OPTIONS = {
... ... @@ -29,6 +28,7 @@ export const PAYMENT_METHOD_OPTIONS = {
29 28 CASH_ON_DELIVERY: '货到付款',
30 29 HIRE_PURCHASE: '分期付款',
31 30 PAYMENT_RECEIPT: '已回款',
  31 + PREPAID_NO_NEED_SEND: '预存款无需发货',
32 32 };
33 33  
34 34 export const PRODUCT_BELONG_DEPARTMENT_OPTIONS = {
... ... @@ -108,6 +108,7 @@ export const CHECK_TYPE = {
108 108 PAYMENT_RECEIPTS_AUDIT: 'PAYMENT_RECEIPTS_AUDIT',
109 109 CONFIRM_REISSUE: 'CONFIRM_REISSUE',
110 110 PREPAID_AUDIT: 'PREPAID_AUDIT',
  111 + CREDIT_AUDIT: 'CREDIT_AUDIT',
111 112 };
112 113  
113 114 /**
... ... @@ -170,6 +171,7 @@ export const PAYMENT_RECEIPTS_STATUS_OPTIONS = {
170 171  
171 172 export const ORDER_STATUS_OPTIONS = {
172 173 WAIT_CONFIRM_DELIVER_AFTER_INVOICE: '待开票后确认发货',
  174 + SALES_CONFIRM: '销售待确认',
173 175 UNAUDITED: '未审核',
174 176 LEADER_PROCESS: '领导待审核',
175 177 MODIFY_APPLY_WAIT_FOR_AUDIT: '修改待审核',
... ... @@ -190,6 +192,7 @@ export const ORDER_STATUS_OPTIONS = {
190 192 AFTER_SALES_FAILURE: '售后失败',
191 193 NO_NEED_SEND: '无需发货',
192 194 PROCURE_CONVERT_WAREHOUSE_KEEPER: '采购转仓库',
  195 + CREDIT_CONFIRM: '赊账待审核',
193 196 };
194 197  
195 198 export const MODIFIED_AUDIT_STATUS_OPTIONS = {
... ... @@ -221,17 +224,11 @@ export const FINANCIAL_STATUS_OPTIONS = {
221 224 UN_INVOICING: '取消开票',
222 225 };
223 226  
224   -/*export const getAfterInvoicingStatus = async () => {
225   - let res = await postServiceConstAfterInvoicingStatus();
226   - if (res.result === RESPONSE_CODE.SUCCESS) {
227   - return res.data;
228   - }
229   - return {};
230   -};*/
231   -export let AFTER_INVOICING_STATUS = {
  227 +export const AFTER_INVOICING_STATUS = {
232 228 NOT_YET_INVOICED: '尚未开票',
233 229 APPLY_FOR_INVOICING: '申请开票',
234 230 URGENT_INVOICE_AUDITING: '加急待审核',
  231 + URGENT_INVOICE_AUDIT_NOTPASS: '加急审核失败',
235 232 PARTIAL_INVOICING: '部分开票',
236 233 COMPLETE_INVOICING: '完全开票',
237 234 INVOICING: '开票中',
... ... @@ -281,6 +278,10 @@ export const TAGS_COLOR = new Map&lt;string, string&gt;([
281 278 ['AUDIT_NOTPASS', 'error'],
282 279 ['WAIT_CONFIRM_DELIVER_AFTER_INVOICE', 'processing'],
283 280 ['INVOICING', 'processing'],
  281 + ['SALES_CONFIRM', 'warning'],
  282 + ['URGENT_INVOICE_AUDIT_NOTPASS', 'red'],
  283 + ['REISSUE', 'processing'],
  284 + ['CREDIT_CONFIRM', 'warning'],
284 285 ]);
285 286 export const SALES_CODE_OPTIONS = [
286 287 { label: 'D-Linda', value: 'D-Linda' },
... ... @@ -408,6 +409,8 @@ export const HISTORY_OPT_TYPE = new Map&lt;string, string&gt;([
408 409 ['applyModify', '申请修改订单信息'],
409 410 ['OUTSIDE_SYSTEM_PUSH', '外部系统推送了本订单'],
410 411 ['cancelSendOrder', '取消发货'],
  412 + ['salesConfirm', '商城订单销售确认'],
  413 + ['credit_audit', '赊账审核'],
411 414 ]);
412 415  
413 416 export const MAIN_ORDER_COLUMNS = [
... ... @@ -621,10 +624,6 @@ export const MAIN_ORDER_COLUMNS = [
621 624 dataIndex: 'afterInvoicingStatus',
622 625 valueType: 'select',
623 626 hideInTable: true,
624   - /*request: async () => {
625   - let status = await getAfterInvoicingStatus();
626   - return enumToSelect(status);
627   - },*/
628 627 valueEnum: enumToProTableEnumValue(AFTER_INVOICING_STATUS),
629 628 },
630 629 {
... ...
src/pages/Order/index.tsx
1 1 import ButtonConfirm from '@/components/ButtomConfirm';
2 2 import { RESPONSE_CODE } from '@/constants/enum';
  3 +import ImportExpressBillModal from '@/pages/Order/components/ImportExpressBillModal';
3 4 import InvoicingDrawerForm from '@/pages/Order/components/InvoicingDrawerForm';
4 5 import ReissueModal from '@/pages/Order/components/ReissueModal';
5 6 import {
... ... @@ -15,6 +16,7 @@ import {
15 16 postServiceOrderProvideProcurementRoles,
16 17 postServiceOrderQueryServiceOrder,
17 18 postServiceOrderSaleCancelInvoicing,
  19 + postServiceOrderSalesConfirm,
18 20 } from '@/services';
19 21 import { orderExport } from '@/services/order';
20 22 import {
... ... @@ -798,7 +800,7 @@ const OrderPage = () =&gt; {
798 800 key={index}
799 801 onConfirm={() => {
800 802 window.open(
801   - '/previewApi/onlinePreview?url=' +
  803 + '/onlinePreview?url=' +
802 804 encodeURIComponent(Base64.encode(item.url)),
803 805 );
804 806 }}
... ... @@ -1261,6 +1263,25 @@ const OrderPage = () =&gt; {
1261 1263 </div>
1262 1264 </Flex>
1263 1265 <Flex className="w-[18%]" wrap="wrap" gap="small">
  1266 + {optRecord.subPath?.includes('salesConfirm') && (
  1267 + <ButtonConfirm
  1268 + className="p-0"
  1269 + title="是否确认此商城订单信息无误?确认无误之后订单将进入审核流程。"
  1270 + text="订单确认"
  1271 + onConfirm={async () => {
  1272 + let res = await postServiceOrderSalesConfirm({
  1273 + data: {
  1274 + subOrderIds: [optRecord.id],
  1275 + },
  1276 + });
  1277 +
  1278 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  1279 + message.success(res.message);
  1280 + refreshTable();
  1281 + }
  1282 + }}
  1283 + />
  1284 + )}
1264 1285 {optRecord.subPath?.includes('uploadPaymentReceiptBill') ? (
1265 1286 <Button
1266 1287 className="p-0"
... ... @@ -1327,6 +1348,23 @@ const OrderPage = () =&gt; {
1327 1348 ''
1328 1349 )}
1329 1350  
  1351 + {optRecord.subPath?.includes('creditAudit') ? (
  1352 + <Button
  1353 + className="p-0"
  1354 + type="link"
  1355 + onClick={() => {
  1356 + setCurrentMainId(record.id);
  1357 + setCurretnOptSubId(optRecord.id);
  1358 + setCheckVisible(true);
  1359 + setOrderCheckType(CHECK_TYPE.CREDIT_AUDIT);
  1360 + }}
  1361 + >
  1362 + 赊账审核
  1363 + </Button>
  1364 + ) : (
  1365 + ''
  1366 + )}
  1367 +
1330 1368 {optRecord.subPath?.includes('auditPaymentReceipt') ? (
1331 1369 <Button
1332 1370 className="p-0"
... ... @@ -1975,7 +2013,7 @@ const OrderPage = () =&gt; {
1975 2013  
1976 2014 <Flex title={optRecord.notes}>
1977 2015 <div
1978   - className="overflow-hidden whitespace-normal overflow-ellipsis hover:cursor-pointer"
  2016 + className="max-w-[1100px] overflow-hidden whitespace-normal overflow-ellipsis hover:cursor-pointer"
1979 2017 onClick={() => {
1980 2018 copyToClipboard(optRecord.notes);
1981 2019 message.info('备注复制成功:' + optRecord.notes);
... ... @@ -2427,7 +2465,7 @@ const OrderPage = () =&gt; {
2427 2465 )}
2428 2466 className="whitespace-no-wrap overflow-hidden overflow-ellipsis max-w-[400px]"
2429 2467 >
2430   - <span className="text-[#8C8C8C]">开票款单位:</span>
  2468 + <span className="text-[#8C8C8C]">开票款单位:</span>
2431 2469 <span className="text-slate-700">
2432 2470 {record.receivingCompany !== null
2433 2471 ? enumValueToLabel(
... ... @@ -2571,6 +2609,37 @@ const OrderPage = () =&gt; {
2571 2609 <Flex justify="flex-end">
2572 2610 <Space.Compact direction="vertical" align="end">
2573 2611 <Space wrap>
  2612 + {record.mainPath?.includes('salesConfirm') && (
  2613 + <ButtonConfirm
  2614 + className="p-0"
  2615 + title="是否确认此商城订单信息无误?确认无误之后订单将进入审核流程。"
  2616 + text="订单确认"
  2617 + onConfirm={async () => {
  2618 + let subIds = subOrderSelectedMap
  2619 + .get(record.id)
  2620 + ?.map((item) => {
  2621 + return item.id;
  2622 + });
  2623 + if (subIds === null || subIds === undefined) {
  2624 + subIds = record.subOrderInformationLists.map(
  2625 + (item) => {
  2626 + return item.id;
  2627 + },
  2628 + );
  2629 + }
  2630 + let res = await postServiceOrderSalesConfirm({
  2631 + data: {
  2632 + subOrderIds: subIds,
  2633 + },
  2634 + });
  2635 +
  2636 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  2637 + message.success(res.message);
  2638 + refreshTable();
  2639 + }
  2640 + }}
  2641 + />
  2642 + )}
2574 2643 {record.mainPath?.includes('uploadPaymentReceiptBill') ? (
2575 2644 <Button
2576 2645 className="p-0"
... ... @@ -2862,6 +2931,38 @@ const OrderPage = () =&gt; {
2862 2931 ''
2863 2932 )}
2864 2933  
  2934 + {record.mainPath?.includes('creditAudit') ? (
  2935 + <Button
  2936 + className="p-0"
  2937 + type="link"
  2938 + onClick={() => {
  2939 + let selectedSubOrders = subOrderSelectedMap.get(
  2940 + record.id,
  2941 + );
  2942 + setSelectedRows(selectedSubOrders);
  2943 + if (selectedSubOrders === undefined) {
  2944 + selectedSubOrders = record.subOrderInformationLists;
  2945 + }
  2946 + for (let i = 0; i < selectedSubOrders.length; i++) {
  2947 + if (
  2948 + selectedSubOrders[i].orderStatus !==
  2949 + 'CREDIT_CONFIRM'
  2950 + ) {
  2951 + message.error('请选择[赊账待审核]的子订单进行审核');
  2952 + return;
  2953 + }
  2954 + }
  2955 + createOptObject(null, record.id);
  2956 + setCheckVisible(true);
  2957 + setOrderCheckType(CHECK_TYPE.CREDIT_AUDIT);
  2958 + }}
  2959 + >
  2960 + 赊账审核
  2961 + </Button>
  2962 + ) : (
  2963 + ''
  2964 + )}
  2965 +
2865 2966 {record.mainPath?.includes('editProductionTime') ? (
2866 2967 <Button
2867 2968 className="p-0"
... ... @@ -3203,10 +3304,11 @@ const OrderPage = () =&gt; {
3203 3304 if (
3204 3305 orderStatus !== 'UNAUDITED' &&
3205 3306 orderStatus !== 'AUDIT_FAILED' &&
3206   - orderStatus !== 'LEADER_PROCESS'
  3307 + orderStatus !== 'LEADER_PROCESS' &&
  3308 + orderStatus !== 'SALES_CONFIRM'
3207 3309 ) {
3208 3310 message.error(
3209   - '请选择未审核或者审核失败的订单进行编辑',
  3311 + '请选择【未审核、审核失败、销售待确认】的订单进行编辑',
3210 3312 );
3211 3313 return;
3212 3314 }
... ... @@ -3712,6 +3814,7 @@ const OrderPage = () =&gt; {
3712 3814 'subNotes',
3713 3815 'orderStatus',
3714 3816 'createTime',
  3817 + 'modifiedAuditStatus',
3715 3818 ];
3716 3819 if (isSupplier() && !canSearchIndex.includes(item.dataIndex)) {
3717 3820 item.search = false;
... ... @@ -3893,6 +3996,8 @@ const OrderPage = () =&gt; {
3893 3996  
3894 3997 toolBtns.push(radioGroup);
3895 3998  
  3999 + toolBtns.push(<ImportExpressBillModal></ImportExpressBillModal>);
  4000 +
3896 4001 //导出按钮配置
3897 4002 const exportItems: MenuProps['items'] = [
3898 4003 {
... ... @@ -3901,20 +4006,32 @@ const OrderPage = () =&gt; {
3901 4006 onClick: async () => {
3902 4007 let body = { flag: 50, ...searchParams };
3903 4008 exportLoading();
3904   - orderExport('/api/service/order/export', body, exportLoadingDestory);
  4009 + orderExport(
  4010 + '/api/service/order/export',
  4011 + '订单导出结果.xls',
  4012 + 'POST',
  4013 + body,
  4014 + exportLoadingDestory,
  4015 + );
3905 4016 },
3906 4017 },
3907 4018 {
3908 4019 label: '导出已选中订单',
3909 4020 key: '1',
3910 4021 onClick: async () => {
3911   - if (selectedMainOrderKeys.length === 0) {
  4022 + if (mainOrderSelectedMap.size === 0) {
3912 4023 message.error('请选择订单');
3913 4024 return;
3914 4025 }
3915   - let body = { flag: 30, id: selectedMainOrderKeys };
  4026 + let body = { flag: 30, id: Array.from(mainOrderSelectedMap.keys()) };
3916 4027 exportLoading();
3917   - orderExport('/api/service/order/export', body, exportLoadingDestory);
  4028 + orderExport(
  4029 + '/api/service/order/export',
  4030 + '订单导出结果.xls',
  4031 + 'POST',
  4032 + body,
  4033 + exportLoadingDestory,
  4034 + );
3918 4035 },
3919 4036 },
3920 4037 {
... ... @@ -3923,7 +4040,13 @@ const OrderPage = () =&gt; {
3923 4040 onClick: async () => {
3924 4041 let body = { flag: 40, ids: [] };
3925 4042 exportLoading();
3926   - orderExport('/api/service/order/export', body, exportLoadingDestory);
  4043 + orderExport(
  4044 + '/api/service/order/export',
  4045 + '订单导出结果.xls',
  4046 + 'POST',
  4047 + body,
  4048 + exportLoadingDestory,
  4049 + );
3927 4050 },
3928 4051 },
3929 4052 {
... ... @@ -3932,7 +4055,13 @@ const OrderPage = () =&gt; {
3932 4055 onClick: async () => {
3933 4056 let body = { flag: 10, ids: [] };
3934 4057 exportLoading();
3935   - orderExport('/api/service/order/export', body, exportLoadingDestory);
  4058 + orderExport(
  4059 + '/api/service/order/export',
  4060 + '订单导出结果.xls',
  4061 + 'POST',
  4062 + body,
  4063 + exportLoadingDestory,
  4064 + );
3936 4065 },
3937 4066 },
3938 4067 ];
... ...
src/pages/OrderPrint/index.css 0 → 100644
  1 +.font0 {
  2 + color: windowtext;
  3 + font-size: 12pt;
  4 + font-weight: 400;
  5 + font-style: normal;
  6 + text-decoration: none;
  7 + font-family: '宋体';
  8 +}
  9 +
  10 +.font1 {
  11 + color: windowtext;
  12 + font-size: 16pt;
  13 + font-weight: 400;
  14 + font-style: normal;
  15 + text-decoration: none;
  16 + font-family: '宋体';
  17 +}
  18 +
  19 +.font2 {
  20 + color: windowtext;
  21 + font-size: 10pt;
  22 + font-weight: 400;
  23 + font-style: normal;
  24 + text-decoration: none;
  25 + font-family: '宋体';
  26 +}
  27 +
  28 +.font3 {
  29 + color: windowtext;
  30 + font-size: 14pt;
  31 + font-weight: 400;
  32 + font-style: normal;
  33 + text-decoration: none;
  34 + font-family: '宋体';
  35 +}
  36 +
  37 +.font4 {
  38 + color: windowtext;
  39 + font-size: 8pt;
  40 + font-weight: 400;
  41 + font-style: normal;
  42 + text-decoration: none;
  43 + font-family: '宋体';
  44 +}
  45 +
  46 +.font5 {
  47 + color: #00f;
  48 + font-size: 11pt;
  49 + font-weight: 400;
  50 + font-style: normal;
  51 + text-decoration: underline;
  52 + font-family: '宋体';
  53 +}
  54 +
  55 +.font6 {
  56 + color: #800080;
  57 + font-size: 11pt;
  58 + font-weight: 400;
  59 + font-style: normal;
  60 + text-decoration: underline;
  61 + font-family: '宋体';
  62 +}
  63 +
  64 +.font7 {
  65 + color: #000;
  66 + font-size: 11pt;
  67 + font-weight: 400;
  68 + font-style: normal;
  69 + text-decoration: none;
  70 + font-family: '宋体';
  71 +}
  72 +
  73 +.font8 {
  74 + color: #f00;
  75 + font-size: 11pt;
  76 + font-weight: 400;
  77 + font-style: normal;
  78 + text-decoration: none;
  79 + font-family: '宋体';
  80 +}
  81 +
  82 +.font9 {
  83 + color: #44546a;
  84 + font-size: 18pt;
  85 + font-weight: 700;
  86 + font-style: normal;
  87 + text-decoration: none;
  88 + font-family: '宋体';
  89 +}
  90 +
  91 +.font10 {
  92 + color: #7f7f7f;
  93 + font-size: 11pt;
  94 + font-weight: 400;
  95 + font-style: italic;
  96 + text-decoration: none;
  97 + font-family: '宋体';
  98 +}
  99 +
  100 +.font11 {
  101 + color: #44546a;
  102 + font-size: 15pt;
  103 + font-weight: 700;
  104 + font-style: normal;
  105 + text-decoration: none;
  106 + font-family: '宋体';
  107 +}
  108 +
  109 +.font12 {
  110 + color: #44546a;
  111 + font-size: 13pt;
  112 + font-weight: 700;
  113 + font-style: normal;
  114 + text-decoration: none;
  115 + font-family: '宋体';
  116 +}
  117 +
  118 +.font13 {
  119 + color: #44546a;
  120 + font-size: 11pt;
  121 + font-weight: 700;
  122 + font-style: normal;
  123 + text-decoration: none;
  124 + font-family: '宋体';
  125 +}
  126 +
  127 +.font14 {
  128 + color: #3f3f76;
  129 + font-size: 11pt;
  130 + font-weight: 400;
  131 + font-style: normal;
  132 + text-decoration: none;
  133 + font-family: '宋体';
  134 +}
  135 +
  136 +.font15 {
  137 + color: #3f3f3f;
  138 + font-size: 11pt;
  139 + font-weight: 700;
  140 + font-style: normal;
  141 + text-decoration: none;
  142 + font-family: '宋体';
  143 +}
  144 +
  145 +.font16 {
  146 + color: #fa7d00;
  147 + font-size: 11pt;
  148 + font-weight: 700;
  149 + font-style: normal;
  150 + text-decoration: none;
  151 + font-family: '宋体';
  152 +}
  153 +
  154 +.font17 {
  155 + color: #fff;
  156 + font-size: 11pt;
  157 + font-weight: 700;
  158 + font-style: normal;
  159 + text-decoration: none;
  160 + font-family: '宋体';
  161 +}
  162 +
  163 +.font18 {
  164 + color: #fa7d00;
  165 + font-size: 11pt;
  166 + font-weight: 400;
  167 + font-style: normal;
  168 + text-decoration: none;
  169 + font-family: '宋体';
  170 +}
  171 +
  172 +.font19 {
  173 + color: #000;
  174 + font-size: 11pt;
  175 + font-weight: 700;
  176 + font-style: normal;
  177 + text-decoration: none;
  178 + font-family: '宋体';
  179 +}
  180 +
  181 +.font20 {
  182 + color: #006100;
  183 + font-size: 11pt;
  184 + font-weight: 400;
  185 + font-style: normal;
  186 + text-decoration: none;
  187 + font-family: '宋体';
  188 +}
  189 +
  190 +.font21 {
  191 + color: #9c0006;
  192 + font-size: 11pt;
  193 + font-weight: 400;
  194 + font-style: normal;
  195 + text-decoration: none;
  196 + font-family: '宋体';
  197 +}
  198 +
  199 +.font22 {
  200 + color: #9c6500;
  201 + font-size: 11pt;
  202 + font-weight: 400;
  203 + font-style: normal;
  204 + text-decoration: none;
  205 + font-family: '宋体';
  206 +}
  207 +
  208 +.font23 {
  209 + color: #fff;
  210 + font-size: 11pt;
  211 + font-weight: 400;
  212 + font-style: normal;
  213 + text-decoration: none;
  214 + font-family: '宋体';
  215 +}
  216 +
  217 +.font24 {
  218 + color: #000;
  219 + font-size: 11pt;
  220 + font-weight: 400;
  221 + font-style: normal;
  222 + text-decoration: none;
  223 + font-family: '宋体';
  224 +}
  225 +
  226 +.style0 {
  227 + text-align: general;
  228 + vertical-align: middle;
  229 + white-space: nowrap;
  230 + color: windowtext;
  231 + font-size: 12pt;
  232 + font-weight: 400;
  233 + font-style: normal;
  234 + text-decoration: none;
  235 + font-family: '宋体';
  236 + border: none;
  237 +}
  238 +
  239 +.style21 {
  240 + color: #00f;
  241 + font-size: 11pt;
  242 + font-weight: 400;
  243 + font-style: normal;
  244 + text-decoration: underline;
  245 + font-family: '宋体';
  246 +}
  247 +
  248 +.style22 {
  249 + color: #800080;
  250 + font-size: 11pt;
  251 + font-weight: 400;
  252 + font-style: normal;
  253 + text-decoration: underline;
  254 + font-family: '宋体';
  255 +}
  256 +
  257 +.style23 {
  258 + background: #ffc;
  259 + border: 0.5pt solid #b2b2b2;
  260 +}
  261 +
  262 +.style24 {
  263 + color: #f00;
  264 + font-size: 11pt;
  265 + font-weight: 400;
  266 + font-style: normal;
  267 + text-decoration: none;
  268 + font-family: '宋体';
  269 +}
  270 +
  271 +.style25 {
  272 + color: #44546a;
  273 + font-size: 18pt;
  274 + font-weight: 700;
  275 + font-style: normal;
  276 + text-decoration: none;
  277 + font-family: '宋体';
  278 +}
  279 +
  280 +.style26 {
  281 + color: #7f7f7f;
  282 + font-size: 11pt;
  283 + font-weight: 400;
  284 + font-style: italic;
  285 + text-decoration: none;
  286 + font-family: '宋体';
  287 +}
  288 +
  289 +.style27 {
  290 + color: #44546a;
  291 + font-size: 15pt;
  292 + font-weight: 700;
  293 + font-style: normal;
  294 + text-decoration: none;
  295 + font-family: '宋体';
  296 + border-bottom: 1pt solid #5b9bd5;
  297 +}
  298 +
  299 +.style28 {
  300 + color: #44546a;
  301 + font-size: 13pt;
  302 + font-weight: 700;
  303 + font-style: normal;
  304 + text-decoration: none;
  305 + font-family: '宋体';
  306 + border-bottom: 1pt solid #5b9bd5;
  307 +}
  308 +
  309 +.style29 {
  310 + color: #44546a;
  311 + font-size: 11pt;
  312 + font-weight: 700;
  313 + font-style: normal;
  314 + text-decoration: none;
  315 + font-family: '宋体';
  316 + border-bottom: 1pt solid #acccea;
  317 +}
  318 +
  319 +.style30 {
  320 + color: #44546a;
  321 + font-size: 11pt;
  322 + font-weight: 700;
  323 + font-style: normal;
  324 + text-decoration: none;
  325 + font-family: '宋体';
  326 +}
  327 +
  328 +.style31 {
  329 + background: #fc9;
  330 + color: #3f3f76;
  331 + font-size: 11pt;
  332 + font-weight: 400;
  333 + font-style: normal;
  334 + text-decoration: none;
  335 + font-family: '宋体';
  336 + border: 0.5pt solid #7f7f7f;
  337 +}
  338 +
  339 +.style32 {
  340 + background: #f2f2f2;
  341 + color: #3f3f3f;
  342 + font-size: 11pt;
  343 + font-weight: 700;
  344 + font-style: normal;
  345 + text-decoration: none;
  346 + font-family: '宋体';
  347 + border: 0.5pt solid #3f3f3f;
  348 +}
  349 +
  350 +.style33 {
  351 + background: #f2f2f2;
  352 + color: #fa7d00;
  353 + font-size: 11pt;
  354 + font-weight: 700;
  355 + font-style: normal;
  356 + text-decoration: none;
  357 + font-family: '宋体';
  358 + border: 0.5pt solid #7f7f7f;
  359 +}
  360 +
  361 +.style34 {
  362 + background: #a5a5a5;
  363 + color: #fff;
  364 + font-size: 11pt;
  365 + font-weight: 700;
  366 + font-style: normal;
  367 + text-decoration: none;
  368 + font-family: '宋体';
  369 + border: 2pt double #3f3f3f;
  370 +}
  371 +
  372 +.style35 {
  373 + color: #fa7d00;
  374 + font-size: 11pt;
  375 + font-weight: 400;
  376 + font-style: normal;
  377 + text-decoration: none;
  378 + font-family: '宋体';
  379 + border-bottom: 2pt double #ff8001;
  380 +}
  381 +
  382 +.style36 {
  383 + color: #000;
  384 + font-size: 11pt;
  385 + font-weight: 700;
  386 + font-style: normal;
  387 + text-decoration: none;
  388 + font-family: '宋体';
  389 + border-top: 0.5pt solid #5b9bd5;
  390 + border-bottom: 2pt double #5b9bd5;
  391 +}
  392 +
  393 +.style37 {
  394 + background: #c6efce;
  395 + color: #006100;
  396 + font-size: 11pt;
  397 + font-weight: 400;
  398 + font-style: normal;
  399 + text-decoration: none;
  400 + font-family: '宋体';
  401 +}
  402 +
  403 +.style38 {
  404 + background: #ffc7ce;
  405 + color: #9c0006;
  406 + font-size: 11pt;
  407 + font-weight: 400;
  408 + font-style: normal;
  409 + text-decoration: none;
  410 + font-family: '宋体';
  411 +}
  412 +
  413 +.style39 {
  414 + background: #ffeb9c;
  415 + color: #9c6500;
  416 + font-size: 11pt;
  417 + font-weight: 400;
  418 + font-style: normal;
  419 + text-decoration: none;
  420 + font-family: '宋体';
  421 +}
  422 +
  423 +.style40 {
  424 + background: #5b9bd5;
  425 + color: #fff;
  426 + font-size: 11pt;
  427 + font-weight: 400;
  428 + font-style: normal;
  429 + text-decoration: none;
  430 + font-family: '宋体';
  431 +}
  432 +
  433 +.style41 {
  434 + background: #ddebf7;
  435 + color: #000;
  436 + font-size: 11pt;
  437 + font-weight: 400;
  438 + font-style: normal;
  439 + text-decoration: none;
  440 + font-family: '宋体';
  441 +}
  442 +
  443 +.style42 {
  444 + background: #bdd7ee;
  445 + color: #000;
  446 + font-size: 11pt;
  447 + font-weight: 400;
  448 + font-style: normal;
  449 + text-decoration: none;
  450 + font-family: '宋体';
  451 +}
  452 +
  453 +.style43 {
  454 + background: #9bc2e6;
  455 + color: #fff;
  456 + font-size: 11pt;
  457 + font-weight: 400;
  458 + font-style: normal;
  459 + text-decoration: none;
  460 + font-family: '宋体';
  461 +}
  462 +
  463 +.style44 {
  464 + background: #ed7d31;
  465 + color: #fff;
  466 + font-size: 11pt;
  467 + font-weight: 400;
  468 + font-style: normal;
  469 + text-decoration: none;
  470 + font-family: '宋体';
  471 +}
  472 +
  473 +.style45 {
  474 + background: #fce4d6;
  475 + color: #000;
  476 + font-size: 11pt;
  477 + font-weight: 400;
  478 + font-style: normal;
  479 + text-decoration: none;
  480 + font-family: '宋体';
  481 +}
  482 +
  483 +.style46 {
  484 + background: #f8cbad;
  485 + color: #000;
  486 + font-size: 11pt;
  487 + font-weight: 400;
  488 + font-style: normal;
  489 + text-decoration: none;
  490 + font-family: '宋体';
  491 +}
  492 +
  493 +.style47 {
  494 + background: #f4b084;
  495 + color: #fff;
  496 + font-size: 11pt;
  497 + font-weight: 400;
  498 + font-style: normal;
  499 + text-decoration: none;
  500 + font-family: '宋体';
  501 +}
  502 +
  503 +.style48 {
  504 + background: #a5a5a5;
  505 + color: #fff;
  506 + font-size: 11pt;
  507 + font-weight: 400;
  508 + font-style: normal;
  509 + text-decoration: none;
  510 + font-family: '宋体';
  511 +}
  512 +
  513 +.style49 {
  514 + background: #ededed;
  515 + color: #000;
  516 + font-size: 11pt;
  517 + font-weight: 400;
  518 + font-style: normal;
  519 + text-decoration: none;
  520 + font-family: '宋体';
  521 +}
  522 +
  523 +.style50 {
  524 + background: #dbdbdb;
  525 + color: #000;
  526 + font-size: 11pt;
  527 + font-weight: 400;
  528 + font-style: normal;
  529 + text-decoration: none;
  530 + font-family: '宋体';
  531 +}
  532 +
  533 +.style51 {
  534 + background: #c9c9c9;
  535 + color: #fff;
  536 + font-size: 11pt;
  537 + font-weight: 400;
  538 + font-style: normal;
  539 + text-decoration: none;
  540 + font-family: '宋体';
  541 +}
  542 +
  543 +.style52 {
  544 + background: #ffc000;
  545 + color: #fff;
  546 + font-size: 11pt;
  547 + font-weight: 400;
  548 + font-style: normal;
  549 + text-decoration: none;
  550 + font-family: '宋体';
  551 +}
  552 +
  553 +.style53 {
  554 + background: #fff2cc;
  555 + color: #000;
  556 + font-size: 11pt;
  557 + font-weight: 400;
  558 + font-style: normal;
  559 + text-decoration: none;
  560 + font-family: '宋体';
  561 +}
  562 +
  563 +.style54 {
  564 + background: #ffe699;
  565 + color: #000;
  566 + font-size: 11pt;
  567 + font-weight: 400;
  568 + font-style: normal;
  569 + text-decoration: none;
  570 + font-family: '宋体';
  571 +}
  572 +
  573 +.style55 {
  574 + background: #ffd966;
  575 + color: #fff;
  576 + font-size: 11pt;
  577 + font-weight: 400;
  578 + font-style: normal;
  579 + text-decoration: none;
  580 + font-family: '宋体';
  581 +}
  582 +
  583 +.style56 {
  584 + background: #4472c4;
  585 + color: #fff;
  586 + font-size: 11pt;
  587 + font-weight: 400;
  588 + font-style: normal;
  589 + text-decoration: none;
  590 + font-family: '宋体';
  591 +}
  592 +
  593 +.style57 {
  594 + background: #d9e1f2;
  595 + color: #000;
  596 + font-size: 11pt;
  597 + font-weight: 400;
  598 + font-style: normal;
  599 + text-decoration: none;
  600 + font-family: '宋体';
  601 +}
  602 +
  603 +.style58 {
  604 + background: #b4c6e7;
  605 + color: #000;
  606 + font-size: 11pt;
  607 + font-weight: 400;
  608 + font-style: normal;
  609 + text-decoration: none;
  610 + font-family: '宋体';
  611 +}
  612 +
  613 +.style59 {
  614 + background: #8ea9db;
  615 + color: #fff;
  616 + font-size: 11pt;
  617 + font-weight: 400;
  618 + font-style: normal;
  619 + text-decoration: none;
  620 + font-family: '宋体';
  621 +}
  622 +
  623 +.style60 {
  624 + background: #70ad47;
  625 + color: #fff;
  626 + font-size: 11pt;
  627 + font-weight: 400;
  628 + font-style: normal;
  629 + text-decoration: none;
  630 + font-family: '宋体';
  631 +}
  632 +
  633 +.style61 {
  634 + background: #e2efda;
  635 + color: #000;
  636 + font-size: 11pt;
  637 + font-weight: 400;
  638 + font-style: normal;
  639 + text-decoration: none;
  640 + font-family: '宋体';
  641 +}
  642 +
  643 +.style62 {
  644 + background: #c6e0b4;
  645 + color: #000;
  646 + font-size: 11pt;
  647 + font-weight: 400;
  648 + font-style: normal;
  649 + text-decoration: none;
  650 + font-family: '宋体';
  651 +}
  652 +
  653 +.style63 {
  654 + background: #a9d08e;
  655 + color: #fff;
  656 + font-size: 11pt;
  657 + font-weight: 400;
  658 + font-style: normal;
  659 + text-decoration: none;
  660 + font-family: '宋体';
  661 +}
  662 +
  663 +td {
  664 + padding-top: 1px;
  665 + padding-right: 1px;
  666 + padding-left: 1px;
  667 + text-align: general;
  668 + vertical-align: middle;
  669 + white-space: nowrap;
  670 + color: windowtext;
  671 + font-size: 12pt;
  672 + font-weight: 400;
  673 + font-style: normal;
  674 + text-decoration: none;
  675 + font-family: '宋体';
  676 + border: none;
  677 +}
  678 +
  679 +.xl65 {
  680 + text-align: center;
  681 + font-size: 16pt;
  682 +}
  683 +
  684 +.xl66 {
  685 + text-align: center;
  686 + font-size: 10pt;
  687 +}
  688 +
  689 +.xl67 {
  690 + text-align: center;
  691 + font-size: 14pt;
  692 +}
  693 +
  694 +.xl68 {
  695 + text-align: center;
  696 + font-size: 14pt;
  697 +}
  698 +
  699 +.xl69 {
  700 + text-align: left;
  701 + font-size: 8pt;
  702 +}
  703 +
  704 +.xl70 {
  705 + text-align: left;
  706 + font-size: 8pt;
  707 +}
  708 +
  709 +.xl71 {
  710 + text-align: center;
  711 + font-size: 8pt;
  712 + border: 0.5pt solid windowtext;
  713 +}
  714 +
  715 +.xl72 {
  716 + text-align: center;
  717 + font-size: 8pt;
  718 + border: 0.5pt solid windowtext;
  719 + white-space: normal;
  720 +}
  721 +
  722 +.xl73 {
  723 + white-space: normal;
  724 + font-size: 8pt;
  725 + border: 0.5pt solid windowtext;
  726 +}
  727 +
  728 +.xl74 {
  729 + text-align: center;
  730 + white-space: normal;
  731 + font-size: 8pt;
  732 + border: 0.5pt solid windowtext;
  733 +}
  734 +
  735 +.xl75 {
  736 + text-align: center;
  737 + white-space: normal;
  738 + font-size: 8pt;
  739 + border: 0.5pt solid windowtext;
  740 +}
  741 +
  742 +.xl76 {
  743 + font-size: 8pt;
  744 +}
  745 +
  746 +.xl77 {
  747 + font-size: 8pt;
  748 +}
  749 +
  750 +.xl78 {
  751 + text-align: center;
  752 + font-size: 8pt;
  753 +}
... ...
src/pages/Prepaid/constant.tsx
... ... @@ -226,6 +226,13 @@ export const BALANCE_CHANGE_COLUMNS = [
226 226 width: 140,
227 227 },
228 228 {
  229 + title: '变动人',
  230 + dataIndex: 'updateBy',
  231 + key: 'updateBy',
  232 + dataType: 'text',
  233 + width: 200,
  234 + },
  235 + {
229 236 title: '类型',
230 237 dataIndex: 'title',
231 238 key: 'title',
... ...
src/pages/ResearchGroup/components/AuditModal.tsx 0 → 100644
  1 +import { RESPONSE_CODE } from '@/constants/enum';
  2 +import { postCommonAudit } from '@/services';
  3 +import { ModalForm, ProFormTextArea } from '@ant-design/pro-components';
  4 +import { Button, Form, message } from 'antd';
  5 +import { cloneDeep } from 'lodash';
  6 +
  7 +// import { cloneDeep } from 'lodash';
  8 +export default ({ setVisible, ids, onClose }) => {
  9 + const [form] = Form.useForm();
  10 + let auditIds = cloneDeep(ids);
  11 +
  12 + const parseValues = (values: any) => {
  13 + values.ids = auditIds;
  14 + values.notes = form.getFieldValue('auditNotes');
  15 + };
  16 +
  17 + const doAudit = async (values: any) => {
  18 + values.type = 'research_group_member_request_audit';
  19 + let res = await postCommonAudit({ data: values });
  20 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  21 + message.success(res.message);
  22 + onClose();
  23 + }
  24 + };
  25 +
  26 + const loadbtns = (props: any, defaultDoms: any) => {
  27 + let btns = [];
  28 + //取消
  29 + btns.push(defaultDoms[0]);
  30 +
  31 + //驳回
  32 + btns.push(
  33 + <Button
  34 + type="primary"
  35 + onClick={() => {
  36 + let values = form.getFieldsValue();
  37 + values.pass = false;
  38 + parseValues(values);
  39 + doAudit(values);
  40 + }}
  41 + >
  42 + 驳回
  43 + </Button>,
  44 + );
  45 +
  46 + //确认
  47 + btns.push(defaultDoms[1]);
  48 +
  49 + return btns;
  50 + };
  51 +
  52 + return (
  53 + <>
  54 + <ModalForm
  55 + width={500}
  56 + open
  57 + title="审核"
  58 + form={form}
  59 + autoFocusFirstInput
  60 + modalProps={{
  61 + okText: '通过',
  62 + cancelText: '取消',
  63 + destroyOnClose: true,
  64 + onCancel: () => {
  65 + setVisible(false);
  66 + },
  67 + }}
  68 + onFinish={async (values) => {
  69 + values.pass = true;
  70 + parseValues(values);
  71 + doAudit(values);
  72 + onClose();
  73 + }}
  74 + onOpenChange={setVisible}
  75 + submitter={{
  76 + render: (props, defaultDoms) => {
  77 + return loadbtns(props, defaultDoms);
  78 + },
  79 + }}
  80 + >
  81 + <ProFormTextArea
  82 + name="auditNotes"
  83 + key="auditNotes"
  84 + placeholder="备注"
  85 + label="若驳回,请填写备注"
  86 + />
  87 + </ModalForm>
  88 + </>
  89 + );
  90 +};
... ...
src/pages/ResearchGroup/components/ImportModal.tsx 0 → 100644
  1 +import { RESPONSE_CODE } from '@/constants/enum';
  2 +import { postResearchGroupsImport } from '@/services';
  3 +import { orderExport } from '@/services/order';
  4 +import { UploadOutlined } from '@ant-design/icons';
  5 +import { Button, Modal, Upload, message } from 'antd';
  6 +import { RcFile, UploadFile, UploadProps } from 'antd/es/upload';
  7 +import { useState } from 'react';
  8 +export default ({ onClose }) => {
  9 + // const [form] = Form.useForm<{ name: string; company: string }>();
  10 + const [messageApi, contextHolder] = message.useMessage();
  11 + const [fileList, setFileList] = useState<UploadFile[]>([]);
  12 + const [uploading, setUploading] = useState(false);
  13 + const handleChange: UploadProps['onChange'] = ({ fileList: newFileList }) =>
  14 + setFileList(newFileList);
  15 +
  16 + const exportLoading = (content: string) => {
  17 + messageApi.open({
  18 + type: 'loading',
  19 + content: content,
  20 + duration: 0,
  21 + });
  22 + };
  23 +
  24 + const exportLoadingDestory = () => {
  25 + messageApi.destroy();
  26 + };
  27 + const downloadTemplate = async () => {
  28 + exportLoading('正在下载模板...');
  29 + orderExport(
  30 + '/api/research/groups/download/importTemplate',
  31 + '导入模板.xls',
  32 + 'POST',
  33 + {},
  34 + exportLoadingDestory,
  35 + );
  36 + };
  37 +
  38 + const handleUpload = async () => {
  39 + const formData = new FormData();
  40 + fileList.forEach((file) => {
  41 + //originFileObj二进制文件
  42 + formData.append('file', file.originFileObj as RcFile);
  43 + });
  44 + // console.log(fileList[0] as RcFile)
  45 + // formData.append('file', fileList[0] as RcFile);
  46 + setUploading(true);
  47 + // You can use any AJAX library you like
  48 + const res = await postResearchGroupsImport({
  49 + data: formData,
  50 + headers: {
  51 + 'Content-Type':
  52 + 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
  53 + },
  54 + });
  55 +
  56 + if (res.result === RESPONSE_CODE.SUCCESS) {
  57 + message.success(res.message);
  58 + onClose();
  59 + }
  60 +
  61 + setUploading(false);
  62 + };
  63 +
  64 + const props: UploadProps = {
  65 + onRemove: (file) => {
  66 + const index = fileList.indexOf(file);
  67 + const newFileList = fileList.slice();
  68 + newFileList.splice(index, 1);
  69 + setFileList(newFileList);
  70 + },
  71 + beforeUpload: (file) => {
  72 + setFileList([...fileList, file]);
  73 +
  74 + return false;
  75 + },
  76 + fileList,
  77 + onChange: handleChange,
  78 + accept: '.xlsx',
  79 + };
  80 +
  81 + return (
  82 + <>
  83 + <Modal
  84 + width={500}
  85 + open
  86 + title="课题组信息导入"
  87 + footer={[
  88 + <Button key="cancel" onClick={onClose}>
  89 + 取消
  90 + </Button>,
  91 + <Button
  92 + type="primary"
  93 + key="ok"
  94 + onClick={handleUpload}
  95 + disabled={fileList.length === 0}
  96 + loading={uploading}
  97 + >
  98 + {uploading ? '上传中' : '提交'}
  99 + </Button>,
  100 + ]}
  101 + onCancel={async () => {
  102 + onClose();
  103 + }}
  104 + >
  105 + <div className="py-4 font-semibold">
  106 + 导入课题组信息
  107 + <Button type="link" onClick={downloadTemplate}>
  108 + 下载模板
  109 + </Button>
  110 + </div>
  111 + <Upload {...props}>
  112 + <Button icon={<UploadOutlined />} disabled={fileList.length > 0}>
  113 + 点击选择文件
  114 + </Button>
  115 + </Upload>
  116 + </Modal>
  117 + {contextHolder}
  118 + </>
  119 + );
  120 +};
... ...
src/pages/ResearchGroup/components/ResearchGroupAddModal.tsx 0 → 100644
  1 +import { RESPONSE_CODE } from '@/constants/enum';
  2 +import {
  3 + postCanrdApiUserAddressList,
  4 + postCanrdApiUserList,
  5 + postResearchGroupsAdd,
  6 + postResearchGroupsDetail,
  7 + postResearchGroupsEdit,
  8 +} from '@/services';
  9 +import { getDefaultString, isEmpty } from '@/utils/StringUtil';
  10 +import { getRandomNumber } from '@/utils/numberUtil';
  11 +import { getSalesCodeOptions } from '@/utils/order';
  12 +import { validatePhoneNumberBool } from '@/utils/validators';
  13 +import {
  14 + ModalForm,
  15 + ProCard,
  16 + ProForm,
  17 + ProFormSelect,
  18 + ProFormText,
  19 +} from '@ant-design/pro-components';
  20 +import { Button, Form, Spin, message } from 'antd';
  21 +import { cloneDeep } from 'lodash';
  22 +import { useEffect, useState } from 'react';
  23 +import '../index.less';
  24 +
  25 +// import { cloneDeep } from 'lodash';
  26 +export default ({ setVisible, researchGroupId, onClose }) => {
  27 + const [form] = Form.useForm();
  28 + const [salesCodeOptions, setSalesCodeOptions] = useState([]);
  29 + const [memberOptions, setMemberOptions] = useState<any[]>([]);
  30 + const [accountOptions, setAccountOptions] = useState<any[]>([]);
  31 + const [researchGroupInfo, setResearchGroupInfo] = useState<any>(null);
  32 + const [modalLoading, setModalLoading] = useState(false);
  33 + const groupId = cloneDeep(researchGroupId);
  34 + const [requestCount, setRequestCount] = useState(1);
  35 +
  36 + /**
  37 + * 获取课题组信息
  38 + * @returns
  39 + */
  40 + const loadResearchGroupInfo = async () => {
  41 + if (groupId === null) {
  42 + return;
  43 + }
  44 + setModalLoading(true);
  45 + let res = await postResearchGroupsDetail({ data: { id: groupId } });
  46 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  47 + setResearchGroupInfo(res.data);
  48 + }
  49 + setModalLoading(false);
  50 + };
  51 +
  52 + /**
  53 + * 获取销售代码枚举,在复制和编辑的时候判断是否为旧的代码
  54 + */
  55 + const loadSalesCodeOptions = async () => {
  56 + let options = await getSalesCodeOptions();
  57 + setSalesCodeOptions(options);
  58 + };
  59 +
  60 + /**
  61 + * 对options去重
  62 + * @param options
  63 + * @returns
  64 + */
  65 + function deduplicateOptions(options: any) {
  66 + const seen = new Set();
  67 + const result: any[] = [];
  68 + options.forEach((option: any) => {
  69 + const uniqueKey = `${option.realName}-${option.phone}`;
  70 + if (!seen.has(uniqueKey)) {
  71 + seen.add(uniqueKey);
  72 + result.push(option);
  73 + }
  74 + });
  75 + return result;
  76 + }
  77 +
  78 + /**
  79 + * 自动填充客户信息
  80 + * @param option
  81 + */
  82 + function autoFillCustomerInfo(option: any) {
  83 + if (!option) {
  84 + return;
  85 + }
  86 + let realName = option.realName;
  87 + let id = option.value;
  88 + if (id === 3.1415926) {
  89 + message.warning(
  90 + '请填写下方的【客户名称】和【手机号】,填写完成确保信息无误后点击添加按钮。',
  91 + );
  92 + form.setFieldValue('realName', option.name);
  93 + return;
  94 + }
  95 + //判断当前客户信息是否已添加过:id匹配或者option的phone匹配说明添加过了
  96 + let memberIds = form.getFieldValue('members');
  97 + if (!memberIds) {
  98 + //表单项没值的时候默认是undefined。初始化为数组
  99 + memberIds = [];
  100 + }
  101 + if (memberIds.includes(id)) {
  102 + message.info(`${realName} 重复添加`);
  103 + return;
  104 + }
  105 + //表单项的value添加当前option的value
  106 + memberIds.push(id);
  107 + form.setFieldValue('members', memberIds);
  108 + message.success(`${realName} 添加成功`);
  109 + //判断options中是否已经有这个option
  110 + for (let memberOption of memberOptions) {
  111 + if (
  112 + memberIds.includes(memberOption.value) &&
  113 + memberOption.phone === option.phone
  114 + ) {
  115 + return;
  116 + }
  117 + }
  118 + //option添加到memberOptions中
  119 + let newMemberOptions = [...memberOptions];
  120 + newMemberOptions.push(option);
  121 + setMemberOptions(newMemberOptions);
  122 +
  123 + //清空信息
  124 + form.setFieldValue('realName', undefined);
  125 + form.setFieldValue('phone', undefined);
  126 + form.setFieldValue('customerName', null);
  127 + }
  128 +
  129 + /**
  130 + * 保存account的options
  131 + * @param option
  132 + * @returns
  133 + */
  134 + function autoAccountSelectOptions(option: any) {
  135 + if (!option) {
  136 + return;
  137 + }
  138 + let id = option.value;
  139 + //判断当前客户信息是否已添加过:id匹配或者option的phone匹配说明添加过了
  140 + let accountIds = form.getFieldValue('accounts');
  141 + if (!accountIds) {
  142 + //表单项没值的时候默认是undefined。初始化为数组
  143 + accountIds = [];
  144 + }
  145 + if (accountIds.includes(id)) {
  146 + return;
  147 + }
  148 + //option添加到accountOptions中
  149 + setAccountOptions(option);
  150 + }
  151 +
  152 + /**
  153 + * 添加自定义成员
  154 + */
  155 + function addCustomMember() {
  156 + let realName = form.getFieldValue('realName');
  157 + let phone = form.getFieldValue('phone');
  158 + if (isEmpty(realName)) {
  159 + message.error('请填写客户名称');
  160 + }
  161 + if (isEmpty(phone)) {
  162 + message.error('请填写手机号');
  163 + }
  164 + if (!validatePhoneNumberBool(phone)) {
  165 + message.error('请填写正确格式的手机号');
  166 + return;
  167 + }
  168 + let customOption = {
  169 + value: getRandomNumber(10),
  170 + realName: realName,
  171 + phone: phone,
  172 + };
  173 + autoFillCustomerInfo(customOption);
  174 + }
  175 +
  176 + function parseFormValues(values: any) {
  177 + if (!values) {
  178 + return {};
  179 + }
  180 +
  181 + let memberIds = values.members;
  182 + let accountIds = values.accounts;
  183 + values.id = groupId;
  184 +
  185 + //成员对象封装
  186 + if (memberIds) {
  187 + let memberObjs: any[] = [];
  188 + for (let memberOption of memberOptions) {
  189 + if (memberIds.includes(memberOption.value)) {
  190 + memberObjs.push({
  191 + memberName: memberOption.realName,
  192 + memberPhone: memberOption.phone,
  193 + id: memberOption.id,
  194 + groupId: memberOption.groupId,
  195 + });
  196 + }
  197 + }
  198 + values.members = memberObjs;
  199 + }
  200 +
  201 + //预存账号对象封装
  202 + if (accountIds) {
  203 + let accountObjs: any[] = [];
  204 + for (let accountOption of accountOptions) {
  205 + if (accountIds.includes(accountOption.uid)) {
  206 + accountObjs.push({
  207 + accountPhone: accountOption.phone,
  208 + accountId: accountOption.uid,
  209 + accountName: accountOption.realName,
  210 + id: accountOption.id,
  211 + groupId: accountOption.groupId,
  212 + });
  213 + }
  214 + }
  215 + values.accounts = accountObjs;
  216 + }
  217 +
  218 + return values;
  219 + }
  220 +
  221 + /**
  222 + * 设置表单默认信息
  223 + * @returns
  224 + */
  225 + const loadFormDefaultValue = async () => {
  226 + if (!researchGroupInfo) {
  227 + return;
  228 + }
  229 +
  230 + let members = researchGroupInfo.members;
  231 + if (members !== null) {
  232 + let newMemberOptions = [];
  233 + for (let member of members) {
  234 + let name = member.memberName;
  235 + let phone = member.memberPhone;
  236 + let id = member.id;
  237 + newMemberOptions.push({
  238 + ...member,
  239 + realName: name,
  240 + phone: phone,
  241 + value: id,
  242 + });
  243 + }
  244 + setMemberOptions(newMemberOptions);
  245 + form.setFieldValue(
  246 + 'members',
  247 + members?.map((item: any) => {
  248 + return item.id;
  249 + }),
  250 + );
  251 + }
  252 +
  253 + let accounts = researchGroupInfo.accounts;
  254 + if (accounts !== null) {
  255 + let phones: any[] = [];
  256 + let accountIds = accounts
  257 + .filter((account: any) => {
  258 + //id为空的按照手机号查询
  259 + if (account.accountId === null) {
  260 + phones.push(account.accountPhone);
  261 + return false;
  262 + }
  263 + return true;
  264 + })
  265 + .map((item: any) => item.accountId);
  266 +
  267 + let uidIdMap = new Map(
  268 + accounts.map((item: any) => [item.accountId, item.id]),
  269 + );
  270 + let res = await postCanrdApiUserList({
  271 + data: { uids: accountIds, phones: phones },
  272 + });
  273 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  274 + let accountList = res?.data?.data;
  275 + console.log(accountList);
  276 + let newAccountOptions = accountList?.map((item) => {
  277 + item.value = uidIdMap.get(item.uid);
  278 + return item;
  279 + });
  280 +
  281 + console.log(newAccountOptions);
  282 + setAccountOptions(newAccountOptions);
  283 + }
  284 +
  285 + form.setFieldValue('accounts', accountIds);
  286 + }
  287 +
  288 + form.setFieldValue('group', researchGroupInfo.groupName);
  289 + form.setFieldValue('leader', researchGroupInfo.leaderName);
  290 + };
  291 +
  292 + useEffect(() => {
  293 + loadSalesCodeOptions();
  294 + loadResearchGroupInfo();
  295 + }, []);
  296 +
  297 + useEffect(() => {
  298 + loadFormDefaultValue();
  299 + }, [researchGroupInfo]);
  300 +
  301 + return (
  302 + <div className="research-group-index">
  303 + <ModalForm
  304 + width={800}
  305 + open
  306 + title="新增/编辑课题组"
  307 + form={form}
  308 + autoFocusFirstInput
  309 + submitter={{}}
  310 + modalProps={{
  311 + okText: '提交',
  312 + cancelText: '关闭',
  313 + destroyOnClose: true,
  314 + onCancel: () => {
  315 + setVisible(false);
  316 + },
  317 + }}
  318 + onFinish={async (values) => {
  319 + let newValues = parseFormValues(values);
  320 + let res;
  321 + if (researchGroupInfo === null) {
  322 + res = await postResearchGroupsAdd({
  323 + data: newValues,
  324 + });
  325 + } else {
  326 + res = await postResearchGroupsEdit({
  327 + data: newValues,
  328 + });
  329 + }
  330 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  331 + message.success(res.message);
  332 + onClose();
  333 + }
  334 + }}
  335 + onOpenChange={setVisible}
  336 + >
  337 + <Spin spinning={modalLoading} tip="加载中...">
  338 + <ProForm.Group>
  339 + <ProFormText
  340 + name="group"
  341 + label="课题组名称"
  342 + placeholder="请输入课题组名称"
  343 + rules={[{ required: true, message: '请输入课题组名称' }]}
  344 + />
  345 + <ProFormSelect
  346 + name="leader"
  347 + key="leader"
  348 + width="lg"
  349 + showSearch
  350 + label="负责人"
  351 + placeholder="请输入课题组负责人"
  352 + rules={[{ required: true, message: '请输入课题组负责人' }]}
  353 + options={salesCodeOptions}
  354 + />
  355 + </ProForm.Group>
  356 +
  357 + <ProFormSelect
  358 + name="accounts"
  359 + key="accounts"
  360 + width="lg"
  361 + showSearch
  362 + label="绑定预存账号(可多选)"
  363 + placeholder="请选择预存账号"
  364 + onChange={(_, option) => {
  365 + autoAccountSelectOptions(option);
  366 + }}
  367 + rules={[{ required: true, message: '请至少选择绑定一个预存账号' }]}
  368 + fieldProps={{
  369 + mode: 'multiple',
  370 + filterOption() {
  371 + return true;
  372 + },
  373 + optionItemRender(item: any) {
  374 + let name =
  375 + item.label +
  376 + ' | ' +
  377 + item.institution +
  378 + ' | ' +
  379 + item.nowMoney +
  380 + '¥' +
  381 + ' | ' +
  382 + item.phone;
  383 + return (
  384 + <div title={name}>
  385 + <span style={{ color: '#333333' }}>{name}</span>
  386 + </div>
  387 + );
  388 + },
  389 + }}
  390 + debounceTime={1000}
  391 + request={async (value, {}) => {
  392 + const keywords = value.keyWords;
  393 + let body = {
  394 + keywords: keywords,
  395 + pageSize: 20,
  396 + researchGroupId: undefined,
  397 + };
  398 +
  399 + if (requestCount === 1) {
  400 + body.researchGroupId = groupId;
  401 + }
  402 +
  403 + const res = await postCanrdApiUserList({
  404 + data: body,
  405 + });
  406 + let options = res?.data?.data?.map((c: any) => {
  407 + return {
  408 + ...c,
  409 + label: c.realName,
  410 + value: c.uid,
  411 + key: c.uid,
  412 + };
  413 + });
  414 +
  415 + setRequestCount(requestCount + 1);
  416 + return options;
  417 + }}
  418 + />
  419 +
  420 + <ProFormSelect
  421 + name="members"
  422 + key="members"
  423 + width="lg"
  424 + showSearch
  425 + label="课题组成员"
  426 + placeholder="请添加课题组成员"
  427 + fieldProps={{
  428 + mode: 'multiple',
  429 + filterOption() {
  430 + return true;
  431 + },
  432 + optionItemRender(item: any) {
  433 + let name = item.realName + ' | ' + item.phone;
  434 + return (
  435 + <div title={name}>
  436 + <span style={{ color: '#333333' }}>{name}</span>
  437 + </div>
  438 + );
  439 + },
  440 + }}
  441 + options={memberOptions}
  442 + />
  443 +
  444 + <ProCard
  445 + title="选择或自定义课题组成员信息"
  446 + bordered
  447 + tooltip="从【客户信息】选择框中可以直接搜索客户,选中后自动添加到【课题组成员】中。也可以自定义输入【客户名称】和【手机号】,点击添加按钮手动添加到【课题组成员】中。"
  448 + >
  449 + <ProForm.Group>
  450 + <ProFormSelect
  451 + key="customerName"
  452 + label="客户信息(选择)"
  453 + width="lg"
  454 + showSearch
  455 + name="customerName"
  456 + placeholder="请选择客户信息"
  457 + onChange={(_, option) => {
  458 + autoFillCustomerInfo(option);
  459 + }}
  460 + fieldProps={{
  461 + filterOption() {
  462 + return true;
  463 + },
  464 + optionItemRender(item: any) {
  465 + if (item.type === 'add') {
  466 + return (
  467 + <div title={item.name + '(新增客户)'}>
  468 + <span style={{ color: '#333333' }}>{item.name}</span>
  469 + {' | '}
  470 + <span style={{ color: 'orange' }}>自定义</span>
  471 + </div>
  472 + );
  473 + }
  474 +
  475 + let title = '';
  476 + let spanText = '';
  477 + let realName = item.realName;
  478 + let phone = item.phone;
  479 +
  480 + title =
  481 + getDefaultString(realName) +
  482 + '|' +
  483 + getDefaultString(phone);
  484 +
  485 + spanText =
  486 + getDefaultString(realName) +
  487 + '|' +
  488 + getDefaultString(phone);
  489 + return (
  490 + <div title={title}>
  491 + <span style={{ color: '#333333' }}>{spanText}</span>
  492 + </div>
  493 + );
  494 + },
  495 + }}
  496 + debounceTime={1000}
  497 + request={async (value, {}) => {
  498 + const keywords = value.keyWords;
  499 + if (keywords === '') {
  500 + return [];
  501 + }
  502 + const res = await postCanrdApiUserAddressList({
  503 + data: { keywords: keywords },
  504 + });
  505 + let options = res?.data?.map((c: any) => {
  506 + return {
  507 + ...c,
  508 + label: c.name,
  509 + value: c.id,
  510 + key: c.id,
  511 + };
  512 + });
  513 +
  514 + //对options去重,realName和phone唯一
  515 + options = deduplicateOptions(options);
  516 +
  517 + //第一个商品默认为要新增客户
  518 + if (keywords.trim() !== '') {
  519 + options.unshift({
  520 + name: keywords,
  521 + type: 'add',
  522 + label: keywords,
  523 + value: 3.1415926,
  524 + key: keywords,
  525 + });
  526 + }
  527 +
  528 + return options;
  529 + }}
  530 + />
  531 + </ProForm.Group>
  532 +
  533 + <ProForm.Group>
  534 + <ProFormText
  535 + name="realName"
  536 + label="客户名称(自定义)"
  537 + placeholder="请输入客户名称"
  538 + rules={[{ required: false, message: '请输入客户名称' }]}
  539 + />
  540 + <ProFormText
  541 + name="phone"
  542 + label="手机号(自定义)"
  543 + width="md"
  544 + placeholder="请输入手机号"
  545 + rules={[{ required: false, message: '请输入手机号' }]}
  546 + />
  547 + </ProForm.Group>
  548 + <Button
  549 + type="primary"
  550 + onClick={() => {
  551 + addCustomMember();
  552 + }}
  553 + >
  554 + 添加
  555 + </Button>
  556 + </ProCard>
  557 + </Spin>
  558 + </ModalForm>
  559 + </div>
  560 + );
  561 +};
... ...
src/pages/ResearchGroup/components/ResearchGroupMemberRequestAddModal.tsx 0 → 100644
  1 +import { RESPONSE_CODE } from '@/constants/enum';
  2 +import {
  3 + postCanrdApiUserAddressList,
  4 + postResearchGroupMemberRequestsAdd,
  5 + postResearchGroupMemberRequestsDetail,
  6 + postResearchGroupMemberRequestsEdit,
  7 + postResearchGroupsDetail,
  8 + postResearchGroupsList,
  9 +} from '@/services';
  10 +import { getDefaultString, isEmpty } from '@/utils/StringUtil';
  11 +import { getRandomNumber } from '@/utils/numberUtil';
  12 +
  13 +import { validatePhoneNumberBool } from '@/utils/validators';
  14 +import {
  15 + ModalForm,
  16 + ProCard,
  17 + ProForm,
  18 + ProFormSelect,
  19 + ProFormText,
  20 + ProFormTextArea,
  21 +} from '@ant-design/pro-components';
  22 +import { Button, Form, Spin, message } from 'antd';
  23 +import { cloneDeep } from 'lodash';
  24 +import { useEffect, useState } from 'react';
  25 +import '../index.less';
  26 +
  27 +// import { cloneDeep } from 'lodash';
  28 +export default ({ setVisible, requestId, onClose }) => {
  29 + const [form] = Form.useForm();
  30 + const [memberOptions, setMemberOptions] = useState<any[]>([]);
  31 + const [requestInfo, setRequestInfo] = useState<any>(null);
  32 + const [modalLoading, setModalLoading] = useState(false);
  33 + const [groupOption, setGroupOption] = useState<any>(null);
  34 + const copyRequestId = cloneDeep(requestId);
  35 +
  36 + /**
  37 + * 获取课题组信息
  38 + * @returns
  39 + */
  40 + const loadRequestInfo = async () => {
  41 + if (copyRequestId === null) {
  42 + return;
  43 + }
  44 + setModalLoading(true);
  45 + let res = await postResearchGroupMemberRequestsDetail({
  46 + data: { id: copyRequestId },
  47 + });
  48 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  49 + setRequestInfo(res.data);
  50 + }
  51 + setModalLoading(false);
  52 + };
  53 +
  54 + /**
  55 + * 对options去重
  56 + * @param options
  57 + * @returns
  58 + */
  59 + function deduplicateOptions(options: any) {
  60 + const seen = new Set();
  61 + const result: any[] = [];
  62 + options.forEach((option: any) => {
  63 + const uniqueKey = `${option.realName}-${option.phone}`;
  64 + if (!seen.has(uniqueKey)) {
  65 + seen.add(uniqueKey);
  66 + result.push(option);
  67 + }
  68 + });
  69 + return result;
  70 + }
  71 +
  72 + /**
  73 + * 自动填充客户信息
  74 + * @param option
  75 + */
  76 + function autoFillCustomerInfo(option: any) {
  77 + if (!option) {
  78 + return;
  79 + }
  80 + let realName = option.realName;
  81 + let id = option.value;
  82 + if (id === 3.1415926) {
  83 + message.warning(
  84 + '请填写下方的【客户名称】和【手机号】,填写完成确保信息无误后点击添加按钮。',
  85 + );
  86 + form.setFieldValue('realName', option.name);
  87 + return;
  88 + }
  89 + //判断当前客户信息是否已添加过:id匹配或者option的phone匹配说明添加过了
  90 + let memberIds = form.getFieldValue('members');
  91 + if (!memberIds) {
  92 + //表单项没值的时候默认是undefined。初始化为数组
  93 + memberIds = [];
  94 + }
  95 + if (memberIds.includes(id)) {
  96 + message.info(`${realName} 重复添加`);
  97 + return;
  98 + }
  99 + //表单项的value添加当前option的value
  100 + memberIds.push(id);
  101 +
  102 + //如果是编辑,每次只保存一个
  103 + if (requestInfo !== null) {
  104 + form.setFieldValue('members', [id]);
  105 + } else {
  106 + form.setFieldValue('members', memberIds);
  107 + }
  108 +
  109 + message.success(`${realName} 添加成功`);
  110 + //判断options中是否已经有这个option
  111 + for (let memberOption of memberOptions) {
  112 + if (
  113 + memberIds.includes(memberOption.value) &&
  114 + memberOption.phone === option.phone
  115 + ) {
  116 + return;
  117 + }
  118 + }
  119 + //option添加到memberOptions中
  120 + let newMemberOptions = [...memberOptions];
  121 + newMemberOptions.push(option);
  122 + setMemberOptions(newMemberOptions);
  123 +
  124 + //清空信息
  125 + form.setFieldValue('realName', undefined);
  126 + form.setFieldValue('phone', undefined);
  127 + form.setFieldValue('customerName', null);
  128 + }
  129 +
  130 + /**
  131 + * 添加自定义成员
  132 + */
  133 + function addCustomMember() {
  134 + let realName = form.getFieldValue('realName');
  135 + let phone = form.getFieldValue('phone');
  136 + if (isEmpty(realName)) {
  137 + message.error('请填写客户名称');
  138 + }
  139 + if (isEmpty(phone)) {
  140 + message.error('请填写手机号');
  141 + }
  142 + if (!validatePhoneNumberBool(phone)) {
  143 + message.error('请填写正确格式的手机号');
  144 + return;
  145 + }
  146 + let customOption = {
  147 + value: getRandomNumber(10),
  148 + realName: realName,
  149 + phone: phone,
  150 + };
  151 + autoFillCustomerInfo(customOption);
  152 + }
  153 +
  154 + function parseFormValues(values: any) {
  155 + if (!values) {
  156 + return {};
  157 + }
  158 +
  159 + let memberIds = values.members;
  160 + values.id = copyRequestId;
  161 +
  162 + //成员对象封装
  163 + if (memberIds) {
  164 + let memberObjs: any[] = [];
  165 + for (let memberOption of memberOptions) {
  166 + if (memberIds.includes(memberOption.value)) {
  167 + memberObjs.push({
  168 + memberName: memberOption.realName,
  169 + memberPhone: memberOption.phone,
  170 + id: memberOption.id,
  171 + groupId: memberOption.groupId,
  172 + });
  173 +
  174 + values.memberName = memberOption.realName;
  175 + values.memberPhone = memberOption.phone;
  176 + }
  177 + }
  178 + values.members = memberObjs;
  179 + }
  180 +
  181 + //课题组信息封装
  182 + if (groupOption) {
  183 + values.groupName = groupOption.groupName;
  184 + }
  185 +
  186 + return values;
  187 + }
  188 +
  189 + /**
  190 + * 设置表单默认信息
  191 + * @returns
  192 + */
  193 + const loadFormDefaultValue = async () => {
  194 + if (!requestInfo) {
  195 + return;
  196 + }
  197 +
  198 + let groupId = requestInfo.groupId;
  199 + if (groupId !== null) {
  200 + let res = await postResearchGroupsDetail({ data: { id: groupId } });
  201 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  202 + setGroupOption(res.data);
  203 + }
  204 +
  205 + form.setFieldValue('groupId', groupId);
  206 + }
  207 +
  208 + form.setFieldValue('requestNotes', requestInfo.requestNotes);
  209 +
  210 + let memberName = requestInfo.memberName;
  211 + let memberPhone = requestInfo.memberPhone;
  212 +
  213 + let uid = getRandomNumber(10);
  214 + let newMemberOption = [
  215 + { realName: memberName, phone: memberPhone, uid: uid, value: uid },
  216 + ];
  217 + setMemberOptions(newMemberOption);
  218 + //编辑只能选一个member
  219 + form.setFieldValue('members', [uid]);
  220 + };
  221 +
  222 + useEffect(() => {
  223 + loadRequestInfo();
  224 + }, []);
  225 +
  226 + useEffect(() => {
  227 + loadFormDefaultValue();
  228 + }, [requestInfo]);
  229 +
  230 + return (
  231 + <div className="research-group-index">
  232 + <ModalForm
  233 + width={800}
  234 + open
  235 + title={requestInfo !== null ? '编辑申请信息' : '新增申请'}
  236 + form={form}
  237 + autoFocusFirstInput
  238 + submitter={{}}
  239 + modalProps={{
  240 + okText: '提交',
  241 + cancelText: '关闭',
  242 + destroyOnClose: true,
  243 + onCancel: () => {
  244 + setVisible(false);
  245 + },
  246 + }}
  247 + onFinish={async (values) => {
  248 + let newValues = parseFormValues(values);
  249 + let res;
  250 + if (requestInfo === null) {
  251 + res = await postResearchGroupMemberRequestsAdd({
  252 + data: newValues,
  253 + });
  254 + } else {
  255 + res = await postResearchGroupMemberRequestsEdit({
  256 + data: newValues,
  257 + });
  258 + }
  259 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  260 + message.success(res.message);
  261 + onClose();
  262 + }
  263 + }}
  264 + onOpenChange={setVisible}
  265 + >
  266 + <Spin spinning={modalLoading} tip="加载中...">
  267 + <ProForm.Group>
  268 + <ProFormSelect
  269 + name="groupId"
  270 + key="groupId"
  271 + width="lg"
  272 + showSearch
  273 + label="课题组"
  274 + placeholder="请选择课题组"
  275 + rules={[{ required: true, message: '请选择课题组' }]}
  276 + onChange={(_, option) => {
  277 + setGroupOption(option);
  278 + }}
  279 + fieldProps={{
  280 + filterOption() {
  281 + return true;
  282 + },
  283 + optionItemRender(item: any) {
  284 + let name = item.groupName + ' | ' + item.leaderName;
  285 + return (
  286 + <div title={name}>
  287 + <span style={{ color: '#333333' }}>{name}</span>
  288 + </div>
  289 + );
  290 + },
  291 + }}
  292 + debounceTime={1000}
  293 + request={async (value, {}) => {
  294 + const groupName = value.keyWords;
  295 + let body = { groupName: groupName, pageSize: 20 };
  296 +
  297 + const res = await postResearchGroupsList({
  298 + data: body,
  299 + });
  300 + let options = res?.data?.data?.map((c: any) => {
  301 + return {
  302 + ...c,
  303 + label: c.groupName,
  304 + value: c.id,
  305 + key: c.id,
  306 + };
  307 + });
  308 + return options;
  309 + }}
  310 + />
  311 + </ProForm.Group>
  312 +
  313 + <ProFormSelect
  314 + name="members"
  315 + key="members"
  316 + width="lg"
  317 + showSearch
  318 + label="课题组成员"
  319 + placeholder="请添加课题组成员"
  320 + rules={[{ required: true, message: '请至少添加一个成员' }]}
  321 + fieldProps={{
  322 + mode: 'multiple',
  323 + filterOption() {
  324 + return true;
  325 + },
  326 + optionItemRender(item: any) {
  327 + let name = item.realName + ' | ' + item.phone;
  328 + return (
  329 + <div title={name}>
  330 + <span style={{ color: '#333333' }}>{name}</span>
  331 + </div>
  332 + );
  333 + },
  334 + }}
  335 + options={memberOptions}
  336 + />
  337 +
  338 + <ProCard
  339 + title="选择或自定义课题组成员信息"
  340 + bordered
  341 + tooltip="从【客户信息】选择框中可以直接搜索客户,选中后自动添加到【课题组成员】中。也可以自定义输入【客户名称】和【手机号】,点击添加按钮手动添加到【课题组成员】中。"
  342 + >
  343 + <ProForm.Group>
  344 + <ProFormSelect
  345 + key="customerName"
  346 + label="客户信息(选择)"
  347 + width="lg"
  348 + showSearch
  349 + name="customerName"
  350 + placeholder="请选择客户信息"
  351 + onChange={(_, option) => {
  352 + autoFillCustomerInfo(option);
  353 + }}
  354 + fieldProps={{
  355 + filterOption() {
  356 + return true;
  357 + },
  358 + optionItemRender(item: any) {
  359 + if (item.type === 'add') {
  360 + return (
  361 + <div title={item.name + '(新增客户)'}>
  362 + <span style={{ color: '#333333' }}>{item.name}</span>
  363 + {' | '}
  364 + <span style={{ color: 'orange' }}>自定义</span>
  365 + </div>
  366 + );
  367 + }
  368 +
  369 + let title = '';
  370 + let spanText = '';
  371 + let realName = item.realName;
  372 + let phone = item.phone;
  373 +
  374 + title =
  375 + getDefaultString(realName) +
  376 + '|' +
  377 + getDefaultString(phone);
  378 +
  379 + spanText =
  380 + getDefaultString(realName) +
  381 + '|' +
  382 + getDefaultString(phone);
  383 + return (
  384 + <div title={title}>
  385 + <span style={{ color: '#333333' }}>{spanText}</span>
  386 + </div>
  387 + );
  388 + },
  389 + }}
  390 + debounceTime={1000}
  391 + request={async (value, {}) => {
  392 + const keywords = value.keyWords;
  393 + if (keywords === '') {
  394 + return [];
  395 + }
  396 + const res = await postCanrdApiUserAddressList({
  397 + data: { keywords: keywords },
  398 + });
  399 + let options = res?.data?.map((c: any) => {
  400 + return {
  401 + ...c,
  402 + label: c.name,
  403 + value: c.id,
  404 + key: c.id,
  405 + };
  406 + });
  407 +
  408 + //对options去重,realName和phone唯一
  409 + options = deduplicateOptions(options);
  410 +
  411 + //第一个商品默认为要新增客户
  412 + if (keywords.trim() !== '') {
  413 + options.unshift({
  414 + name: keywords,
  415 + type: 'add',
  416 + label: keywords,
  417 + value: 3.1415926,
  418 + key: keywords,
  419 + });
  420 + }
  421 +
  422 + return options;
  423 + }}
  424 + />
  425 + </ProForm.Group>
  426 +
  427 + <ProForm.Group>
  428 + <ProFormText
  429 + name="realName"
  430 + label="客户名称(自定义)"
  431 + placeholder="请输入客户名称"
  432 + rules={[{ required: false, message: '请输入客户名称' }]}
  433 + />
  434 + <ProFormText
  435 + name="phone"
  436 + label="手机号(自定义)"
  437 + width="md"
  438 + placeholder="请输入手机号"
  439 + rules={[{ required: false, message: '请输入手机号' }]}
  440 + />
  441 + </ProForm.Group>
  442 + <Button
  443 + type="primary"
  444 + onClick={() => {
  445 + addCustomMember();
  446 + }}
  447 + >
  448 + 添加
  449 + </Button>
  450 + </ProCard>
  451 +
  452 + <ProFormTextArea
  453 + name="requestNotes"
  454 + key="requestNotes"
  455 + label="申请备注"
  456 + />
  457 + </Spin>
  458 + </ModalForm>
  459 + </div>
  460 + );
  461 +};
... ...
src/pages/ResearchGroup/constant.tsx 0 → 100644
  1 +import { enumToProTableEnumValue } from '@/utils';
  2 +export const AUDIT_STATUS_OPTIONS = {
  3 + CREATED: '未审核',
  4 + AUDIT_PASS: '审核通过',
  5 + AUDIT_FAIL: '审核失败',
  6 +};
  7 +export const RESEARCH_GROUP_COLUMNS = [
  8 + {
  9 + title: '序号',
  10 + dataIndex: 'index',
  11 + valueType: 'index',
  12 + width: 70,
  13 + },
  14 + {
  15 + title: 'ID',
  16 + dataIndex: 'id',
  17 + key: 'id',
  18 + valueType: 'index',
  19 + hideInSearch: true,
  20 + hideInTable: true,
  21 + },
  22 + {
  23 + title: '课题组名称',
  24 + dataIndex: 'groupName',
  25 + key: 'groupName',
  26 + fieldProps: {
  27 + placeholder: '请输入课题组名称',
  28 + },
  29 + },
  30 + {
  31 + title: '预存账号',
  32 + dataIndex: 'accounts',
  33 + key: 'accounts',
  34 + hideInSearch: true,
  35 + },
  36 + {
  37 + title: '预存手机号',
  38 + dataIndex: 'accountPhone',
  39 + key: 'accountPhone',
  40 + hideInTable: true,
  41 + },
  42 + {
  43 + title: '成员名称',
  44 + dataIndex: 'memberName',
  45 + key: 'memberName',
  46 + hideInTable: true,
  47 + },
  48 + {
  49 + title: '成员手机号',
  50 + dataIndex: 'memberPhone',
  51 + key: 'memberPhone',
  52 + hideInTable: true,
  53 + },
  54 + {
  55 + title: '课题组成员',
  56 + dataIndex: 'members',
  57 + key: 'members',
  58 + hideInSearch: true,
  59 + },
  60 + {
  61 + title: '负责人',
  62 + dataIndex: 'leaderName',
  63 + key: 'leaderName',
  64 + fieldProps: {
  65 + placeholder: '请输入负责人姓名',
  66 + },
  67 + },
  68 + {
  69 + title: '创建时间',
  70 + dataIndex: 'createTime',
  71 + key: 'createTime',
  72 + valueType: 'dateTime',
  73 + fieldProps: {
  74 + placeholder: '请选择创建时间',
  75 + },
  76 + hideInSearch: true,
  77 + },
  78 +
  79 + {
  80 + title: '创建人',
  81 + dataIndex: 'createByName',
  82 + key: 'createByName',
  83 + fieldProps: {
  84 + placeholder: '请输入选择创建人',
  85 + },
  86 + hideInSearch: true,
  87 + },
  88 +];
  89 +
  90 +export const RESEARCH_GROUP_MEMBER_REQUEST_COLUMNS = [
  91 + {
  92 + title: '序号',
  93 + dataIndex: 'index',
  94 + valueType: 'index',
  95 + width: 70,
  96 + },
  97 + {
  98 + title: '主键ID',
  99 + dataIndex: 'id',
  100 + key: 'id',
  101 + valueType: 'index',
  102 + hideInSearch: true,
  103 + hideInTable: true,
  104 + },
  105 + {
  106 + title: '课题组名称',
  107 + dataIndex: 'groupName',
  108 + key: 'groupName',
  109 + fieldProps: {
  110 + placeholder: '请输入课题组名称',
  111 + },
  112 + },
  113 + {
  114 + title: '课题组ID',
  115 + dataIndex: 'groupId',
  116 + key: 'groupId',
  117 + hideInSearch: true,
  118 + },
  119 + {
  120 + title: '成员名称',
  121 + dataIndex: 'memberName',
  122 + key: 'memberName',
  123 + },
  124 + {
  125 + title: '成员手机号',
  126 + dataIndex: 'memberPhone',
  127 + key: 'memberPhone',
  128 + },
  129 + {
  130 + title: '申请类型',
  131 + dataIndex: 'requestType',
  132 + key: 'requestType',
  133 + fieldProps: {
  134 + placeholder: '请输入申请类型:APPEND-新增 REMOVE-删除 MODIFY-修改',
  135 + },
  136 + hideInTable: true,
  137 + hideInSearch: true,
  138 + },
  139 + {
  140 + title: '审核状态',
  141 + dataIndex: 'auditStatusText',
  142 + key: 'auditStatusText',
  143 + valueType: 'select',
  144 + hideInSearch: true,
  145 + },
  146 + {
  147 + title: '审核状态',
  148 + dataIndex: 'auditStatus',
  149 + key: 'auditStatus',
  150 + valueType: 'select',
  151 + valueEnum: enumToProTableEnumValue(AUDIT_STATUS_OPTIONS),
  152 + hideInTable: true,
  153 + },
  154 + {
  155 + title: '申请备注',
  156 + dataIndex: 'requestNotes',
  157 + key: 'requestNotes',
  158 + },
  159 + {
  160 + title: '审核备注',
  161 + dataIndex: 'auditNotes',
  162 + key: 'auditNotes',
  163 + },
  164 + {
  165 + title: '创建时间',
  166 + dataIndex: 'createTime',
  167 + key: 'createTime',
  168 + valueType: 'dateTime',
  169 + fieldProps: {
  170 + placeholder: '请选择创建时间',
  171 + },
  172 + hideInSearch: true,
  173 + },
  174 + {
  175 + title: '创建人',
  176 + dataIndex: 'createByName',
  177 + key: 'createByName',
  178 + fieldProps: {
  179 + placeholder: '请输入创建人',
  180 + },
  181 + hideInSearch: true,
  182 + },
  183 +];
... ...
src/pages/ResearchGroup/index.less 0 → 100644
  1 +.research-group-index td {
  2 + font-family: 'San Francisco', 'Helvetica Neue', Helvetica, Arial,
  3 + 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC',
  4 + 'WenQuanYi Micro Hei', sans-serif;
  5 + font-size: 13px;
  6 +}
... ...
src/pages/ResearchGroup/index.tsx 0 → 100644
  1 +import ButtonConfirm from '@/components/ButtomConfirm';
  2 +import EllipsisDiv from '@/components/Div/EllipsisDiv';
  3 +import { RESPONSE_CODE } from '@/constants/enum';
  4 +import {} from '@/pages/Invoice/constant';
  5 +import {
  6 + postCanrdApiUserDetail,
  7 + postResearchGroupMemberRequestsDelete,
  8 + postResearchGroupMemberRequestsList,
  9 + postResearchGroupsDelete,
  10 + postResearchGroupsList,
  11 +} from '@/services';
  12 +import { formatDateTime } from '@/utils';
  13 +import { PlusOutlined } from '@ant-design/icons';
  14 +import { ActionType, ProTable } from '@ant-design/pro-components';
  15 +import {
  16 + Button,
  17 + Col,
  18 + Divider,
  19 + Image,
  20 + Popconfirm,
  21 + Row,
  22 + Space,
  23 + Spin,
  24 + Table,
  25 + Tabs,
  26 + Tag,
  27 + message,
  28 +} from 'antd';
  29 +import React, { useRef, useState } from 'react';
  30 +import AuditModal from './components/AuditModal';
  31 +import ImportModal from './components/ImportModal';
  32 +import ResearchGroupAddModal from './components/ResearchGroupAddModal';
  33 +import ResearchGroupMemberRequestAddModal from './components/ResearchGroupMemberRequestAddModal';
  34 +import {
  35 + RESEARCH_GROUP_COLUMNS,
  36 + RESEARCH_GROUP_MEMBER_REQUEST_COLUMNS,
  37 +} from './constant';
  38 +import './index.less';
  39 +const PrepaidPage = () => {
  40 + const researchGroupActionRef = useRef<ActionType>();
  41 + const memberApplyActionRef = useRef<ActionType>();
  42 + const [researchGroupAddModalVisible, setResearchGroupAddModalVisible] =
  43 + useState(false);
  44 + const [importModalVisible, setImportModalVisible] = useState(false);
  45 + const [auditIds, setAuditIds] = useState<any[]>([]);
  46 + const [auditModalVisible, setAuditModalVisible] = useState(false);
  47 + const [
  48 + researchGroupMemberRequestAddModalVisible,
  49 + setResearchGroupMemberRequestAddModalVisible,
  50 + ] = useState(false);
  51 + // const [checkVisible, setCheckVisible] = useState(false);
  52 + const [accountInfo, setAccountInfo] = useState({
  53 + realName: '',
  54 + phone: '',
  55 + nowMoney: '',
  56 + uid: '',
  57 + });
  58 + const [accountInfoLoading, setAccountInfoLoading] = useState(false);
  59 + const [perms, setPerms] = useState<string[]>([]);
  60 + const [optRecordId, setOptRecordId] = useState<any>(null);
  61 +
  62 + const reloadResearchGroupTable = () => {
  63 + researchGroupActionRef.current?.reload();
  64 + };
  65 +
  66 + const reloadMemberApplyTable = () => {
  67 + memberApplyActionRef.current?.reload();
  68 + };
  69 +
  70 + // const getTableCellText = (target: any) => {
  71 + // if (!target) {
  72 + // return '';
  73 + // }
  74 +
  75 + // if (target.props) {
  76 + // return target.props.text;
  77 + // }
  78 +
  79 + // return target;
  80 + // };
  81 +
  82 + const renderMembersCell = (value: any) => {
  83 + if (!value) {
  84 + return <span></span>;
  85 + }
  86 + let tags = value.map((item: any) => {
  87 + let memberName = item.memberName;
  88 + let memberPhone = item.memberPhone;
  89 + return (
  90 + <Tag
  91 + className="mt-1 mb-0"
  92 + key={item.id}
  93 + color="cyan"
  94 + title={memberName + ' | ' + memberPhone}
  95 + >
  96 + {memberName}
  97 + </Tag>
  98 + );
  99 + });
  100 + return <div className="whitespace-normal">{tags}</div>;
  101 + };
  102 +
  103 + /**
  104 + * 获取预存账号信息
  105 + * @param accountId
  106 + */
  107 + const loadAccountInfo = async (accountId: any, phone: any) => {
  108 + setAccountInfoLoading(true);
  109 + let res = await postCanrdApiUserDetail({
  110 + data: { uid: accountId, phone: phone },
  111 + });
  112 + if (res && res.result === RESPONSE_CODE.SUCCESS && res.data !== null) {
  113 + setAccountInfo(res.data);
  114 + } else {
  115 + setAccountInfo({
  116 + realName: '加载失败',
  117 + phone: '加载失败',
  118 + nowMoney: '加载失败',
  119 + uid: '加载失败',
  120 + });
  121 + }
  122 + setAccountInfoLoading(false);
  123 + };
  124 +
  125 + const renderAccountsCell = (value: any) => {
  126 + if (!value) {
  127 + return <span></span>;
  128 + }
  129 +
  130 + return (
  131 + <div className="whitespace-normal">
  132 + {value.map((item: any) => {
  133 + let accountPhone = item.accountPhone;
  134 + let accountName = item.accountName;
  135 + let accountId = item.accountId;
  136 + return (
  137 + <Popconfirm
  138 + key={item.id}
  139 + title="账号详情"
  140 + description={
  141 + <div className="w-[170px]">
  142 + {accountInfoLoading ? (
  143 + <div>
  144 + <Spin />
  145 + </div>
  146 + ) : (
  147 + <div>
  148 + <Row gutter={4}>
  149 + <Col span={10}>
  150 + <div>编号:</div>
  151 + </Col>
  152 + <Col span={14}>
  153 + <div>{accountInfo.uid}</div>
  154 + </Col>
  155 + </Row>
  156 + <Row gutter={4}>
  157 + <Col span={10}>
  158 + <div>名称:</div>
  159 + </Col>
  160 + <Col span={14}>
  161 + <div>{accountInfo.realName}</div>
  162 + </Col>
  163 + </Row>
  164 + <Row gutter={4}>
  165 + <Col span={10}>
  166 + <div>手机号:</div>
  167 + </Col>
  168 + <Col span={14}>
  169 + <EllipsisDiv text={accountInfo.phone} />
  170 + </Col>
  171 + </Row>
  172 + <Row gutter={4}>
  173 + <Col span={10}>
  174 + <div>余额:</div>
  175 + </Col>
  176 + <Col span={14}>
  177 + <div>{accountInfo.nowMoney}</div>
  178 + </Col>
  179 + </Row>
  180 + </div>
  181 + )}
  182 + </div>
  183 + }
  184 + cancelButtonProps={{
  185 + hidden: true,
  186 + }}
  187 + okButtonProps={{
  188 + hidden: true,
  189 + }}
  190 + >
  191 + <Tag
  192 + className="mt-1 mb-0 hover:cursor-pointer"
  193 + color="geekblue"
  194 + title={accountName + ' | ' + accountPhone}
  195 + onClick={() => {
  196 + loadAccountInfo(accountId, accountPhone);
  197 + }}
  198 + >
  199 + {accountName}
  200 + </Tag>
  201 + </Popconfirm>
  202 + );
  203 + })}
  204 + </div>
  205 + );
  206 + };
  207 +
  208 + /**
  209 + * 删除课题组信息
  210 + * @param ids
  211 + */
  212 + const doDeleteResearchGroup = async (ids: any[]) => {
  213 + let res = await postResearchGroupsDelete({
  214 + data: { ids: ids },
  215 + });
  216 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  217 + message.success(res.message);
  218 + reloadResearchGroupTable();
  219 + }
  220 + };
  221 +
  222 + /**
  223 + * 删除课题组信息
  224 + * @param ids
  225 + */
  226 + const doDeleteRequest = async (ids: any[]) => {
  227 + let res = await postResearchGroupMemberRequestsDelete({
  228 + data: { ids: ids },
  229 + });
  230 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  231 + message.success(res.message);
  232 + reloadMemberApplyTable();
  233 + }
  234 + };
  235 +
  236 + /**
  237 + * 加载课题组列表表格的各个列格式
  238 + */
  239 + const researchGroupColumnsInit = () => {
  240 + let columns = RESEARCH_GROUP_COLUMNS.map((item) => {
  241 + let newItem = { ...item };
  242 + let dataIndex = item.dataIndex;
  243 +
  244 + newItem.render = (text, record, index) => {
  245 + let textValue = record[dataIndex];
  246 +
  247 + if (dataIndex.endsWith('Time')) {
  248 + textValue = formatDateTime(textValue);
  249 + }
  250 +
  251 + if (dataIndex === 'members') {
  252 + return renderMembersCell(textValue);
  253 + }
  254 +
  255 + if (dataIndex === 'accounts') {
  256 + return renderAccountsCell(textValue);
  257 + }
  258 +
  259 + if (dataIndex === 'index') {
  260 + textValue = index + 1;
  261 + }
  262 +
  263 + if (
  264 + dataIndex === 'proofImages' &&
  265 + textValue !== null &&
  266 + textValue !== undefined
  267 + ) {
  268 + return (
  269 + <Image.PreviewGroup
  270 + className="mr-10"
  271 + preview={{
  272 + onChange: (current, prev) =>
  273 + console.log(`current index: ${current}, prev index: ${prev}`),
  274 + }}
  275 + >
  276 + {textValue.map((item, index) => (
  277 + <React.Fragment key={index}>
  278 + {index > 0 ? <Divider type="vertical" /> : ''}
  279 + <Image
  280 + className="max-h-[35px] max-w-[45px]"
  281 + src={item}
  282 + title={item}
  283 + />{' '}
  284 + </React.Fragment>
  285 + ))}
  286 + </Image.PreviewGroup>
  287 + );
  288 + }
  289 +
  290 + return <EllipsisDiv text={textValue} />;
  291 + };
  292 +
  293 + return newItem;
  294 + });
  295 +
  296 + columns.push({
  297 + title: '操作',
  298 + valueType: 'option',
  299 + key: 'option',
  300 + fixed: 'right',
  301 + width: 120,
  302 + render: (text, record) => {
  303 + let btns = [];
  304 + if (perms?.includes('modify')) {
  305 + btns.push(
  306 + <Button
  307 + className="p-0"
  308 + key="modify"
  309 + type="link"
  310 + onClick={() => {
  311 + setResearchGroupAddModalVisible(true);
  312 + setOptRecordId(record?.id);
  313 + }}
  314 + >
  315 + 编辑
  316 + </Button>,
  317 + );
  318 + }
  319 +
  320 + if (perms?.includes('delete')) {
  321 + btns.push(
  322 + <ButtonConfirm
  323 + key="delete"
  324 + className="p-0"
  325 + title={'确认删除这个课题组吗?'}
  326 + text="删除"
  327 + onConfirm={async () => {
  328 + doDeleteResearchGroup([record.id]);
  329 + }}
  330 + />,
  331 + );
  332 + }
  333 + return btns;
  334 + },
  335 + });
  336 +
  337 + return columns;
  338 + };
  339 +
  340 + /**
  341 + * 加载申请列表表格的各个列格式
  342 + */
  343 + const memberApplyColumnsInit = () => {
  344 + let columns = RESEARCH_GROUP_MEMBER_REQUEST_COLUMNS.map((item) => {
  345 + let newItem = { ...item };
  346 + let dataIndex = item.dataIndex;
  347 +
  348 + newItem.render = (text, record, index) => {
  349 + let textValue = record[dataIndex];
  350 +
  351 + if (dataIndex.endsWith('Time')) {
  352 + textValue = formatDateTime(textValue);
  353 + }
  354 +
  355 + if (dataIndex === 'members') {
  356 + return renderMembersCell(textValue);
  357 + }
  358 +
  359 + if (dataIndex === 'accounts') {
  360 + return renderAccountsCell(textValue);
  361 + }
  362 +
  363 + if (dataIndex === 'index') {
  364 + textValue = index + 1;
  365 + }
  366 +
  367 + if (
  368 + dataIndex === 'proofImages' &&
  369 + textValue !== null &&
  370 + textValue !== undefined
  371 + ) {
  372 + return (
  373 + <Image.PreviewGroup
  374 + className="mr-10"
  375 + preview={{
  376 + onChange: (current, prev) =>
  377 + console.log(`current index: ${current}, prev index: ${prev}`),
  378 + }}
  379 + >
  380 + {textValue.map((item, index) => (
  381 + <React.Fragment key={index}>
  382 + {index > 0 ? <Divider type="vertical" /> : ''}
  383 + <Image
  384 + className="max-h-[35px] max-w-[45px]"
  385 + src={item}
  386 + title={item}
  387 + />{' '}
  388 + </React.Fragment>
  389 + ))}
  390 + </Image.PreviewGroup>
  391 + );
  392 + }
  393 +
  394 + return <EllipsisDiv text={textValue} />;
  395 + };
  396 +
  397 + return newItem;
  398 + });
  399 +
  400 + columns.push({
  401 + title: '操作',
  402 + valueType: 'option',
  403 + key: 'option',
  404 + fixed: 'right',
  405 + width: 120,
  406 + render: (text, record) => {
  407 + let btns = [];
  408 + if (record.permissions?.includes('modify')) {
  409 + btns.push(
  410 + <Button
  411 + className="p-0"
  412 + key="modify"
  413 + type="link"
  414 + onClick={() => {
  415 + setResearchGroupMemberRequestAddModalVisible(true);
  416 + setOptRecordId(record?.id);
  417 + }}
  418 + >
  419 + 编辑
  420 + </Button>,
  421 + );
  422 + }
  423 +
  424 + if (record.permissions?.includes('delete')) {
  425 + btns.push(
  426 + <ButtonConfirm
  427 + key="delete"
  428 + className="p-0"
  429 + title={'确认删除这个申请吗?'}
  430 + text="删除"
  431 + onConfirm={async () => {
  432 + doDeleteRequest([record.id]);
  433 + }}
  434 + />,
  435 + );
  436 + }
  437 +
  438 + if (record.permissions?.includes('audit')) {
  439 + btns.push(
  440 + <Button
  441 + key="delete"
  442 + className="p-0"
  443 + type="link"
  444 + onClick={async () => {
  445 + setAuditIds([record.id]);
  446 + setAuditModalVisible(true);
  447 + }}
  448 + >
  449 + 审核
  450 + </Button>,
  451 + );
  452 + }
  453 + return btns;
  454 + },
  455 + });
  456 +
  457 + return columns;
  458 + };
  459 +
  460 + const tabsItems = [
  461 + {
  462 + key: 1,
  463 + label: '课题组列表',
  464 + children: (
  465 + <ProTable
  466 + columns={researchGroupColumnsInit()}
  467 + actionRef={researchGroupActionRef}
  468 + cardBordered
  469 + pagination={{
  470 + pageSize: 10,
  471 + }}
  472 + request={async (params) => {
  473 + const res = await postResearchGroupsList({
  474 + data: { ...params },
  475 + });
  476 + setPerms(res.data.specialPath);
  477 + return {
  478 + data: res?.data?.data || [],
  479 + total: res?.data?.total || 0,
  480 + };
  481 + }}
  482 + columnsState={{
  483 + persistenceKey: 'pro-table-singe-research-group',
  484 + persistenceType: 'localStorage',
  485 + defaultValue: {
  486 + option: { fixed: 'right', disable: true },
  487 + },
  488 + onChange(value) {
  489 + console.log('value: ', value);
  490 + },
  491 + }}
  492 + rowKey="id"
  493 + search={{
  494 + labelWidth: 'auto',
  495 + }}
  496 + options={{
  497 + setting: {
  498 + listsHeight: 400,
  499 + },
  500 + }}
  501 + form={{}}
  502 + dateFormatter="string"
  503 + headerTitle="课题组列表"
  504 + scroll={{ x: 1400 }}
  505 + toolBarRender={() => {
  506 + let btns = [];
  507 + if (perms?.includes('add')) {
  508 + btns.push(
  509 + <Button
  510 + key="button"
  511 + icon={<PlusOutlined />}
  512 + onClick={() => {
  513 + setResearchGroupAddModalVisible(true);
  514 + }}
  515 + type="primary"
  516 + >
  517 + 新建
  518 + </Button>,
  519 + );
  520 + }
  521 +
  522 + if (perms?.includes('import')) {
  523 + btns.push(
  524 + <Button
  525 + key="button"
  526 + icon={<PlusOutlined />}
  527 + onClick={() => {
  528 + setImportModalVisible(true);
  529 + }}
  530 + type="primary"
  531 + >
  532 + 批量导入
  533 + </Button>,
  534 + );
  535 + }
  536 +
  537 + return btns;
  538 + }}
  539 + rowSelection={{
  540 + // 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom
  541 + // 注释该行则默认不显示下拉选项
  542 + selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT],
  543 + defaultSelectedRowKeys: [],
  544 + }}
  545 + tableAlertOptionRender={({ selectedRows, onCleanSelected }) => {
  546 + let ids = selectedRows.map((item: any) => {
  547 + return item.id;
  548 + });
  549 + return (
  550 + <Space size={16}>
  551 + <ButtonConfirm
  552 + title="确认删除所选中的课题组信息吗?"
  553 + text="批量删除"
  554 + onConfirm={() => {
  555 + doDeleteResearchGroup(ids);
  556 + onCleanSelected();
  557 + }}
  558 + />
  559 +
  560 + <Button type="link" onClick={onCleanSelected}>
  561 + 取消选中
  562 + </Button>
  563 + </Space>
  564 + );
  565 + }}
  566 + />
  567 + ),
  568 + },
  569 + {
  570 + key: 2,
  571 + label: '申请列表',
  572 + children: (
  573 + <ProTable
  574 + columns={memberApplyColumnsInit()}
  575 + actionRef={memberApplyActionRef}
  576 + cardBordered
  577 + pagination={{
  578 + pageSize: 10,
  579 + }}
  580 + request={async (params) => {
  581 + const res = await postResearchGroupMemberRequestsList({
  582 + data: { ...params },
  583 + });
  584 + setPerms(res.data.specialPath);
  585 + return {
  586 + data: res?.data?.data || [],
  587 + total: res?.data?.total || 0,
  588 + };
  589 + }}
  590 + columnsState={{
  591 + persistenceKey: 'pro-table-singe-research-group',
  592 + persistenceType: 'localStorage',
  593 + defaultValue: {
  594 + option: { fixed: 'right', disable: true },
  595 + },
  596 + onChange(value) {
  597 + console.log('value: ', value);
  598 + },
  599 + }}
  600 + rowKey="id"
  601 + search={{
  602 + labelWidth: 'auto',
  603 + }}
  604 + options={{
  605 + setting: {
  606 + listsHeight: 400,
  607 + },
  608 + }}
  609 + form={{}}
  610 + dateFormatter="string"
  611 + headerTitle="申请列表"
  612 + scroll={{ x: 1400 }}
  613 + toolBarRender={() => {
  614 + let btns = [];
  615 + btns.push(
  616 + <Button
  617 + key="button"
  618 + icon={<PlusOutlined />}
  619 + onClick={() => {
  620 + setResearchGroupMemberRequestAddModalVisible(true);
  621 + }}
  622 + type="primary"
  623 + >
  624 + 新建
  625 + </Button>,
  626 + );
  627 + return btns;
  628 + }}
  629 + rowSelection={{
  630 + // 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom
  631 + // 注释该行则默认不显示下拉选项
  632 + selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT],
  633 + defaultSelectedRowKeys: [],
  634 + }}
  635 + tableAlertOptionRender={({ selectedRows, onCleanSelected }) => {
  636 + let ids = selectedRows.map((item: any) => {
  637 + return item.id;
  638 + });
  639 + return (
  640 + <Space size={16}>
  641 + <ButtonConfirm
  642 + title="确认删除所选中的课题组信息吗?"
  643 + text="批量删除"
  644 + onConfirm={() => {
  645 + doDeleteRequest(ids);
  646 + onCleanSelected();
  647 + }}
  648 + />
  649 + <Button
  650 + key="delete"
  651 + className="p-0"
  652 + type="link"
  653 + onClick={async () => {
  654 + setAuditIds(ids);
  655 + setAuditModalVisible(true);
  656 + }}
  657 + >
  658 + 批量审核
  659 + </Button>
  660 + <Button type="link" onClick={onCleanSelected}>
  661 + 取消选中
  662 + </Button>
  663 + </Space>
  664 + );
  665 + }}
  666 + />
  667 + ),
  668 + },
  669 + ];
  670 + return (
  671 + <div className="research-group-index">
  672 + <Tabs
  673 + defaultActiveKey="1"
  674 + items={tabsItems}
  675 + onChange={(value) => {
  676 + if (value === 1) {
  677 + reloadResearchGroupTable();
  678 + } else {
  679 + reloadMemberApplyTable();
  680 + }
  681 + }}
  682 + />
  683 +
  684 + {researchGroupAddModalVisible && (
  685 + <ResearchGroupAddModal
  686 + setVisible={(val: boolean) => {
  687 + setResearchGroupAddModalVisible(val);
  688 + if (!val) {
  689 + setOptRecordId(null);
  690 + }
  691 + }}
  692 + researchGroupId={optRecordId}
  693 + onClose={() => {
  694 + setResearchGroupAddModalVisible(false);
  695 + setOptRecordId(null);
  696 + reloadResearchGroupTable();
  697 + }}
  698 + />
  699 + )}
  700 +
  701 + {researchGroupMemberRequestAddModalVisible && (
  702 + <ResearchGroupMemberRequestAddModal
  703 + setVisible={(val: boolean) => {
  704 + setResearchGroupMemberRequestAddModalVisible(val);
  705 + if (!val) {
  706 + setOptRecordId(null);
  707 + }
  708 + }}
  709 + requestId={optRecordId}
  710 + onClose={() => {
  711 + setResearchGroupMemberRequestAddModalVisible(false);
  712 + setOptRecordId(null);
  713 + reloadMemberApplyTable();
  714 + }}
  715 + />
  716 + )}
  717 +
  718 + {auditModalVisible && (
  719 + <AuditModal
  720 + setVisible={(val: boolean) => {
  721 + setAuditModalVisible(val);
  722 + if (!val) {
  723 + setOptRecordId(null);
  724 + }
  725 + }}
  726 + ids={auditIds}
  727 + onClose={() => {
  728 + setAuditModalVisible(false);
  729 + setAuditIds([]);
  730 + reloadMemberApplyTable();
  731 + }}
  732 + />
  733 + )}
  734 +
  735 + {importModalVisible && (
  736 + <ImportModal
  737 + onClose={() => {
  738 + setImportModalVisible(false);
  739 + reloadMemberApplyTable();
  740 + }}
  741 + />
  742 + )}
  743 + </div>
  744 + );
  745 +};
  746 +
  747 +export default PrepaidPage;
... ...
src/services/definition.ts
... ... @@ -86,6 +86,8 @@ export interface AdminAuthUserVO {
86 86 export interface AdminDeptQueryVO {
87 87 /** @format int32 */
88 88 current?: number;
  89 + /** @format int32 */
  90 + end?: number;
89 91 /** @format int64 */
90 92 id?: number;
91 93 ids?: Array<number>;
... ... @@ -95,6 +97,8 @@ export interface AdminDeptQueryVO {
95 97 /** @format int64 */
96 98 pid?: number;
97 99 /** @format int32 */
  100 + start?: number;
  101 + /** @format int32 */
98 102 total?: number;
99 103 }
100 104  
... ... @@ -109,6 +113,8 @@ export interface AdminDeptVO {
109 113 export interface AdminJobQueryVO {
110 114 /** @format int32 */
111 115 current?: number;
  116 + /** @format int32 */
  117 + end?: number;
112 118 /** @format int64 */
113 119 id?: number;
114 120 ids?: Array<number>;
... ... @@ -118,6 +124,8 @@ export interface AdminJobQueryVO {
118 124 /** @format int32 */
119 125 sort?: number;
120 126 /** @format int32 */
  127 + start?: number;
  128 + /** @format int32 */
121 129 total?: number;
122 130 }
123 131  
... ... @@ -136,6 +144,8 @@ export interface AdminMenuQueryVO {
136 144 /** @format int32 */
137 145 current?: number;
138 146 /** @format int32 */
  147 + end?: number;
  148 + /** @format int32 */
139 149 hidden?: number;
140 150 icon?: string;
141 151 /** @format int64 */
... ... @@ -151,6 +161,8 @@ export interface AdminMenuQueryVO {
151 161 /** @format int64 */
152 162 pid?: number;
153 163 /** @format int32 */
  164 + start?: number;
  165 + /** @format int32 */
154 166 total?: number;
155 167 /** @format int32 */
156 168 type?: number;
... ... @@ -181,6 +193,8 @@ export interface AdminRoleQueryVO {
181 193 /** @format int32 */
182 194 current?: number;
183 195 dataScope?: string;
  196 + /** @format int32 */
  197 + end?: number;
184 198 /** @format int64 */
185 199 id?: number;
186 200 ids?: Array<number>;
... ... @@ -192,6 +206,8 @@ export interface AdminRoleQueryVO {
192 206 permission?: string;
193 207 remark?: string;
194 208 /** @format int32 */
  209 + start?: number;
  210 + /** @format int32 */
195 211 total?: number;
196 212 }
197 213  
... ... @@ -209,22 +225,30 @@ export interface AdminUserLoginByPhoneVO {
209 225 /** @format int32 */
210 226 current?: number;
211 227 /** @format int32 */
  228 + end?: number;
  229 + /** @format int32 */
212 230 pageSize?: number;
213 231 phone?: string;
214 232 smsCaptchaCode?: string;
215 233 /** @format int32 */
  234 + start?: number;
  235 + /** @format int32 */
216 236 total?: number;
217 237 }
218 238  
219 239 export interface AdminUserLoginByPwdVO {
220 240 /** @format int32 */
221 241 current?: number;
  242 + /** @format int32 */
  243 + end?: number;
222 244 imgCaptchaCode?: string;
223 245 imgCaptchaUuid?: string;
224 246 /** @format int32 */
225 247 pageSize?: number;
226 248 password?: string;
227 249 /** @format int32 */
  250 + start?: number;
  251 + /** @format int32 */
228 252 total?: number;
229 253 userName?: string;
230 254 }
... ... @@ -234,11 +258,15 @@ export interface AdminUserModifyPwdVO {
234 258 /** @format int32 */
235 259 current?: number;
236 260 /** @format int32 */
  261 + end?: number;
  262 + /** @format int32 */
237 263 pageSize?: number;
238 264 password?: string;
239 265 phone?: string;
240 266 smsCaptchaCode?: string;
241 267 /** @format int32 */
  268 + start?: number;
  269 + /** @format int32 */
242 270 total?: number;
243 271 }
244 272  
... ... @@ -246,8 +274,12 @@ export interface AdminUserPasswordRecoverEmailVO {
246 274 /** @format int32 */
247 275 current?: number;
248 276 /** @format int32 */
  277 + end?: number;
  278 + /** @format int32 */
249 279 pageSize?: number;
250 280 /** @format int32 */
  281 + start?: number;
  282 + /** @format int32 */
251 283 total?: number;
252 284 userName?: string;
253 285 }
... ... @@ -256,6 +288,8 @@ export interface AdminUserQueryVO {
256 288 /** @format int32 */
257 289 current?: number;
258 290 email?: string;
  291 + /** @format int32 */
  292 + end?: number;
259 293 /** @format int64 */
260 294 id?: number;
261 295 ids?: Array<number>;
... ... @@ -266,6 +300,8 @@ export interface AdminUserQueryVO {
266 300 phone?: string;
267 301 sex?: string;
268 302 /** @format int32 */
  303 + start?: number;
  304 + /** @format int32 */
269 305 total?: number;
270 306 userName?: string;
271 307 workerType?: string;
... ... @@ -276,6 +312,8 @@ export interface AdminUserRegisterVO {
276 312 /** @format int32 */
277 313 current?: number;
278 314 email?: string;
  315 + /** @format int32 */
  316 + end?: number;
279 317 isAgreeAgreement?: boolean;
280 318 /** @format int32 */
281 319 pageSize?: number;
... ... @@ -285,6 +323,8 @@ export interface AdminUserRegisterVO {
285 323 safeQuestion?: string;
286 324 smsCaptchaCode?: string;
287 325 /** @format int32 */
  326 + start?: number;
  327 + /** @format int32 */
288 328 total?: number;
289 329 userName?: string;
290 330 }
... ... @@ -480,8 +520,12 @@ export interface ApiOrderCustomersRequest {
480 520 /** @format int32 */
481 521 current?: number;
482 522 /** @format int32 */
  523 + end?: number;
  524 + /** @format int32 */
483 525 pageSize?: number;
484 526 /** @format int32 */
  527 + start?: number;
  528 + /** @format int32 */
485 529 total?: number;
486 530 }
487 531  
... ... @@ -528,220 +572,6 @@ export interface ApiQueryOrderStatusCountsRequest {
528 572 uid?: number;
529 573 }
530 574  
531   -export interface ApplyInvoiceDto {
532   - /**
533   - * @description
534   - * 备注
535   - */
536   - applyInvoicingNotes?: string;
537   - /**
538   - * @description
539   - * 开票备注
540   - */
541   - comment?: string;
542   - /**
543   - * @description
544   - * 联系人
545   - */
546   - contacts?: string;
547   - /**
548   - * @description
549   - * 开票内容
550   - */
551   - content?: string;
552   - createByName?: string;
553   - /** @format date-time */
554   - createTime?: string;
555   - /**
556   - * @description
557   - * id
558   - * @format int64
559   - */
560   - id?: number;
561   - /**
562   - * @description
563   - * 发票地址
564   - */
565   - invoiceAddress?: string;
566   - /**
567   - * @description
568   - * 发票明细
569   - */
570   - invoiceDetails?: Array<InvoiceDetail>;
571   - /**
572   - * @description
573   - * 关联发票id
574   - */
575   - invoiceId?: string;
576   - /**
577   - * @description
578   - * 发票号码
579   - */
580   - invoiceNumber?: string;
581   - /**
582   - * @description
583   - * 开票人
584   - */
585   - invoicingPerson?: string;
586   - /**
587   - * @description
588   - * 开票时间
589   - * @format date-time
590   - */
591   - invoicingTime?: string;
592   - /**
593   - * @description
594   - * 开具类型
595   - */
596   - invoicingType?: string;
597   - /**
598   - * @description
599   - * 开具类型
600   - */
601   - invoicingTypeText?: string;
602   - /** @format date */
603   - invoicingdate?: string;
604   - /**
605   - * @description
606   - * 是否加急
607   - */
608   - isUrgent?: boolean;
609   - /**
610   - * @description
611   - * 是否加急文本
612   - */
613   - isUrgentText?: string;
614   - logicDelete?: boolean;
615   - /**
616   - * @description
617   - * 买方注册地址
618   - */
619   - partyAAddress?: string;
620   - /**
621   - * @description
622   - * 买方开户行账号
623   - */
624   - partyABankAccount?: string;
625   - /**
626   - * @description
627   - * 买方名称
628   - */
629   - partyAName?: string;
630   - /**
631   - * @description
632   - * 买方开户行
633   - */
634   - partyAOpenBank?: string;
635   - /**
636   - * @description
637   - * 买方电话号码
638   - */
639   - partyAPhoneNumber?: string;
640   - /**
641   - * @description
642   - * 买方税号
643   - */
644   - partyATaxid?: string;
645   - /**
646   - * @description
647   - * 抬头类型
648   - */
649   - partyAType?: string;
650   - partyB?: string;
651   - /**
652   - * @description
653   - * 卖方注册地址
654   - */
655   - partyBAddress?: string;
656   - /**
657   - * @description
658   - * 卖方开户行账号
659   - */
660   - partyBBankAccount?: string;
661   - /**
662   - * @description
663   - * 卖方名称
664   - */
665   - partyBName?: string;
666   - /**
667   - * @description
668   - * 卖方开户行
669   - */
670   - partyBOpenBank?: string;
671   - /**
672   - * @description
673   - * 卖方电话号码
674   - */
675   - partyBPhoneNumber?: string;
676   - /**
677   - * @description
678   - * 卖方税号
679   - */
680   - partyBTaxid?: string;
681   - /**
682   - * @description
683   - * 发票金额
684   - * @format double
685   - */
686   - price?: number;
687   - /**
688   - * @description
689   - * 接收邮箱地址
690   - */
691   - receiveEmail?: string;
692   - /**
693   - * @description
694   - * 订单来源
695   - */
696   - salesCodes?: Array<string>;
697   - /**
698   - * @description
699   - * 订单来源
700   - */
701   - salesCodesText?: string;
702   - /**
703   - * @description
704   - * 开票状态
705   - */
706   - status?: string;
707   - /**
708   - * @description
709   - * 开票状态
710   - */
711   - statusText?: string;
712   - /**
713   - * @description
714   - * 子订单id
715   - */
716   - subOrderIds?: Array<number>;
717   - /**
718   - * @description
719   - * 关联订单
720   - */
721   - subOrders?: Array<SubOrder>;
722   - /** @format double */
723   - totalPrice?: number;
724   - totalPriceText?: string;
725   - /**
726   - * @description
727   - * 开票类型
728   - */
729   - type?: string;
730   - /**
731   - * @description
732   - * 开票类型文本
733   - */
734   - typeText?: string;
735   - /**
736   - * @description
737   - * 用户id
738   - */
739   - uid?: string;
740   - updateByName?: string;
741   - /** @format date-time */
742   - updateTime?: string;
743   -}
744   -
745 575 export interface AuditDto {
746 576 /**
747 577 * @description
... ... @@ -766,11 +596,15 @@ export interface AuditDto {
766 596 export interface AuditVO {
767 597 /** @format int32 */
768 598 current?: number;
  599 + /** @format int32 */
  600 + end?: number;
769 601 /** @format int64 */
770 602 id?: number;
771 603 /** @format int32 */
772 604 pageSize?: number;
773 605 /** @format int32 */
  606 + start?: number;
  607 + /** @format int32 */
774 608 status?: number;
775 609 /** @format int32 */
776 610 total?: number;
... ... @@ -840,16 +674,32 @@ export interface CancelSendOrderDto {
840 674 export interface CaptchaMessageVO {
841 675 /** @format int32 */
842 676 current?: number;
  677 + /** @format int32 */
  678 + end?: number;
843 679 imgCaptchaCode?: string;
844 680 imgCaptchaUuid?: string;
845 681 /** @format int32 */
846 682 pageSize?: number;
847 683 phone?: string;
848 684 /** @format int32 */
  685 + start?: number;
  686 + /** @format int32 */
849 687 total?: number;
850 688 type?: string;
851 689 }
852 690  
  691 +export interface CommonAuditRequest {
  692 + extend?: any;
  693 + /**
  694 + * @description
  695 + * id集合
  696 + */
  697 + ids?: Array<string>;
  698 + notes?: string;
  699 + pass?: boolean;
  700 + type?: string;
  701 +}
  702 +
853 703 export interface Contactperson {
854 704 birthday?: string;
855 705 contactAddress?: string;
... ... @@ -1037,6 +887,8 @@ export interface DictionaryQueryVO {
1037 887 dictCode?: string;
1038 888 dictName?: string;
1039 889 dictValue?: string;
  890 + /** @format int32 */
  891 + end?: number;
1040 892 /** @format int64 */
1041 893 id?: number;
1042 894 ids?: Array<number>;
... ... @@ -1046,6 +898,8 @@ export interface DictionaryQueryVO {
1046 898 /** @format int32 */
1047 899 sort?: number;
1048 900 /** @format int32 */
  901 + start?: number;
  902 + /** @format int32 */
1049 903 total?: number;
1050 904 }
1051 905  
... ... @@ -1096,6 +950,8 @@ export interface FilePathDto {
1096 950 url?: string;
1097 951 }
1098 952  
  953 +export type InputStream = any;
  954 +
1099 955 export interface InventoryMaterialStockReq {
1100 956 auxPropId?: string;
1101 957 isShowStockPosition?: boolean;
... ... @@ -1174,254 +1030,45 @@ export interface InvoiceDto {
1174 1030 status?: string;
1175 1031 }
1176 1032  
1177   -export interface InvoiceRecordDto {
1178   - /**
1179   - * @description
1180   - * 开票备注
1181   - */
1182   - comment?: string;
  1033 +export interface InvoiceRecordQueryRequest {
  1034 + /** @format date */
  1035 + createTimeGe?: string;
  1036 + /** @format date */
  1037 + createTimeLe?: string;
  1038 + /** @format int32 */
  1039 + pageNumber?: number;
  1040 + /** @format int32 */
  1041 + pageSize?: number;
1183 1042 /**
1184 1043 * @description
1185   - * 联系人
  1044 + * 用户id
1186 1045 */
1187   - contacts?: string;
  1046 + uid?: string;
  1047 +}
  1048 +
  1049 +export interface Item {
  1050 + billDate?: string;
  1051 + billNo?: string;
  1052 + entryList?: Array<Entry>;
  1053 + id?: string;
  1054 + remark?: string;
  1055 +}
  1056 +
  1057 +export interface ItemSaItem {
  1058 + itemId?: string;
  1059 + itemValue?: string;
  1060 +}
  1061 +
  1062 +export interface MainOrderqueryRequest {
  1063 + afterInvoicingStatusIsNull?: boolean;
  1064 + orderStatusNotIn?: Array<string>;
  1065 + /** @format int32 */
  1066 + pageNumber?: number;
  1067 + /** @format int32 */
  1068 + pageSize?: number;
1188 1069 /**
1189 1070 * @description
1190   - * 开票内容
1191   - */
1192   - content?: string;
1193   - createByName?: string;
1194   - /** @format date-time */
1195   - createTime?: string;
1196   - /**
1197   - * @description
1198   - * id
1199   - * @format int64
1200   - */
1201   - id?: number;
1202   - /**
1203   - * @description
1204   - * 发票地址
1205   - */
1206   - invoiceAddress?: string;
1207   - /**
1208   - * @description
1209   - * 发票明细
1210   - */
1211   - invoiceDetails?: Array<InvoiceDetail>;
1212   - /**
1213   - * @description
1214   - * 关联发票id
1215   - */
1216   - invoiceId?: string;
1217   - /**
1218   - * @description
1219   - * 发票号码
1220   - */
1221   - invoiceNumber?: string;
1222   - /**
1223   - * @description
1224   - * 开票人
1225   - */
1226   - invoicingPerson?: string;
1227   - /**
1228   - * @description
1229   - * 开票时间
1230   - * @format date-time
1231   - */
1232   - invoicingTime?: string;
1233   - /**
1234   - * @description
1235   - * 开具类型
1236   - */
1237   - invoicingType?: string;
1238   - /**
1239   - * @description
1240   - * 开具类型
1241   - */
1242   - invoicingTypeText?: string;
1243   - /** @format date */
1244   - invoicingdate?: string;
1245   - /**
1246   - * @description
1247   - * 是否加急
1248   - */
1249   - isUrgent?: boolean;
1250   - /**
1251   - * @description
1252   - * 是否加急文本
1253   - */
1254   - isUrgentText?: string;
1255   - logicDelete?: boolean;
1256   - /**
1257   - * @description
1258   - * 买方注册地址
1259   - */
1260   - partyAAddress?: string;
1261   - /**
1262   - * @description
1263   - * 买方开户行账号
1264   - */
1265   - partyABankAccount?: string;
1266   - /**
1267   - * @description
1268   - * 买方名称
1269   - */
1270   - partyAName?: string;
1271   - /**
1272   - * @description
1273   - * 买方开户行
1274   - */
1275   - partyAOpenBank?: string;
1276   - /**
1277   - * @description
1278   - * 买方电话号码
1279   - */
1280   - partyAPhoneNumber?: string;
1281   - /**
1282   - * @description
1283   - * 买方税号
1284   - */
1285   - partyATaxid?: string;
1286   - /**
1287   - * @description
1288   - * 抬头类型
1289   - */
1290   - partyAType?: string;
1291   - partyB?: string;
1292   - /**
1293   - * @description
1294   - * 卖方注册地址
1295   - */
1296   - partyBAddress?: string;
1297   - /**
1298   - * @description
1299   - * 卖方开户行账号
1300   - */
1301   - partyBBankAccount?: string;
1302   - /**
1303   - * @description
1304   - * 卖方名称
1305   - */
1306   - partyBName?: string;
1307   - /**
1308   - * @description
1309   - * 卖方开户行
1310   - */
1311   - partyBOpenBank?: string;
1312   - /**
1313   - * @description
1314   - * 卖方电话号码
1315   - */
1316   - partyBPhoneNumber?: string;
1317   - /**
1318   - * @description
1319   - * 卖方税号
1320   - */
1321   - partyBTaxid?: string;
1322   - /**
1323   - * @description
1324   - * 发票金额
1325   - * @format double
1326   - */
1327   - price?: number;
1328   - /**
1329   - * @description
1330   - * 接收邮箱地址
1331   - */
1332   - receiveEmail?: string;
1333   - /**
1334   - * @description
1335   - * 订单来源
1336   - */
1337   - salesCodes?: Array<string>;
1338   - /**
1339   - * @description
1340   - * 订单来源
1341   - */
1342   - salesCodesText?: string;
1343   - /**
1344   - * @description
1345   - * 开票状态
1346   - */
1347   - status?: string;
1348   - /**
1349   - * @description
1350   - * 开票状态
1351   - */
1352   - statusText?: string;
1353   - /**
1354   - * @description
1355   - * 子订单id
1356   - */
1357   - subOrderIds?: Array<number>;
1358   - /**
1359   - * @description
1360   - * 关联订单
1361   - */
1362   - subOrders?: Array<SubOrder>;
1363   - /** @format double */
1364   - totalPrice?: number;
1365   - totalPriceText?: string;
1366   - /**
1367   - * @description
1368   - * 开票类型
1369   - */
1370   - type?: string;
1371   - /**
1372   - * @description
1373   - * 开票类型文本
1374   - */
1375   - typeText?: string;
1376   - /**
1377   - * @description
1378   - * 用户id
1379   - */
1380   - uid?: string;
1381   - updateByName?: string;
1382   - /** @format date-time */
1383   - updateTime?: string;
1384   -}
1385   -
1386   -export interface InvoiceRecordQueryRequest {
1387   - /** @format date */
1388   - createTimeGe?: string;
1389   - /** @format date */
1390   - createTimeLe?: string;
1391   - /** @format int32 */
1392   - pageNumber?: number;
1393   - /** @format int32 */
1394   - pageSize?: number;
1395   - /**
1396   - * @description
1397   - * 用户id
1398   - */
1399   - uid?: string;
1400   -}
1401   -
1402   -export interface Item {
1403   - billDate?: string;
1404   - billNo?: string;
1405   - entryList?: Array<Entry>;
1406   - id?: string;
1407   - remark?: string;
1408   -}
1409   -
1410   -export interface ItemSaItem {
1411   - itemId?: string;
1412   - itemValue?: string;
1413   -}
1414   -
1415   -export interface MainOrderqueryRequest {
1416   - afterInvoicingStatusIsNull?: boolean;
1417   - orderStatusNotIn?: Array<string>;
1418   - /** @format int32 */
1419   - pageNumber?: number;
1420   - /** @format int32 */
1421   - pageSize?: number;
1422   - /**
1423   - * @description
1424   - * 用户id
  1071 + * 用户id
1425 1072 */
1426 1073 uid?: string;
1427 1074 }
... ... @@ -1555,10 +1202,14 @@ export interface MeasureUnitListResRow {
1555 1202 export interface MessageQueryDTO {
1556 1203 /** @format int32 */
1557 1204 current?: number;
  1205 + /** @format int32 */
  1206 + end?: number;
1558 1207 isReaded?: string;
1559 1208 /** @format int32 */
1560 1209 pageSize?: number;
1561 1210 /** @format int32 */
  1211 + start?: number;
  1212 + /** @format int32 */
1562 1213 total?: number;
1563 1214 username?: string;
1564 1215 }
... ... @@ -1594,6 +1245,8 @@ export interface OrderAuditLogQueryVO {
1594 1245 applyId?: number;
1595 1246 /** @format int32 */
1596 1247 current?: number;
  1248 + /** @format int32 */
  1249 + end?: number;
1597 1250 /** @format int64 */
1598 1251 id?: number;
1599 1252 ids?: Array<number>;
... ... @@ -1603,6 +1256,8 @@ export interface OrderAuditLogQueryVO {
1603 1256 /** @format int32 */
1604 1257 pageSize?: number;
1605 1258 /** @format int32 */
  1259 + start?: number;
  1260 + /** @format int32 */
1606 1261 total?: number;
1607 1262 }
1608 1263  
... ... @@ -1637,6 +1292,8 @@ export interface OrderBaseInfoQueryVO {
1637 1292 customerCode?: string;
1638 1293 customerPo?: string;
1639 1294 customerStyle?: string;
  1295 + /** @format int32 */
  1296 + end?: number;
1640 1297 /** @format int64 */
1641 1298 id?: number;
1642 1299 ids?: Array<number>;
... ... @@ -1658,6 +1315,8 @@ export interface OrderBaseInfoQueryVO {
1658 1315 productionDepartmentConsignTime?: string;
1659 1316 projectNo?: string;
1660 1317 /** @format int32 */
  1318 + start?: number;
  1319 + /** @format int32 */
1661 1320 total?: number;
1662 1321 }
1663 1322  
... ... @@ -1718,6 +1377,8 @@ export interface OrderFieldLockApplyQueryVO {
1718 1377 auditUserId?: number;
1719 1378 /** @format int32 */
1720 1379 current?: number;
  1380 + /** @format int32 */
  1381 + end?: number;
1721 1382 fields?: string;
1722 1383 /** @format int64 */
1723 1384 id?: number;
... ... @@ -1727,6 +1388,8 @@ export interface OrderFieldLockApplyQueryVO {
1727 1388 /** @format int32 */
1728 1389 pageSize?: number;
1729 1390 /** @format int32 */
  1391 + start?: number;
  1392 + /** @format int32 */
1730 1393 status?: number;
1731 1394 statusList?: Array<number>;
1732 1395 /** @format int32 */
... ... @@ -1775,6 +1438,8 @@ export interface OrderInspectionStageVO {
1775 1438 export interface OrderOptLogQueryVO {
1776 1439 /** @format int32 */
1777 1440 current?: number;
  1441 + /** @format int32 */
  1442 + end?: number;
1778 1443 /** @format int64 */
1779 1444 id?: number;
1780 1445 ids?: Array<number>;
... ... @@ -1783,6 +1448,8 @@ export interface OrderOptLogQueryVO {
1783 1448 /** @format int32 */
1784 1449 pageSize?: number;
1785 1450 /** @format int32 */
  1451 + start?: number;
  1452 + /** @format int32 */
1786 1453 total?: number;
1787 1454 }
1788 1455  
... ... @@ -1832,6 +1499,93 @@ export interface OrderProfitAnalysisVo {
1832 1499 orderIds?: Array<number>;
1833 1500 }
1834 1501  
  1502 +export interface OrderStageFileDo {
  1503 + file?: File;
  1504 +}
  1505 +
  1506 +export interface OrderStagesDelDo {
  1507 + deviceIds?: Array<number>;
  1508 + ids?: Array<number>;
  1509 +}
  1510 +
  1511 +export interface OrderStagesDeviceDo {
  1512 + /** @format int32 */
  1513 + count?: number;
  1514 + createByName?: string;
  1515 + /** @format date-time */
  1516 + createTime?: string;
  1517 + deviceModel?: string;
  1518 + deviceName?: string;
  1519 + /** @format int32 */
  1520 + did?: number;
  1521 + logicDelete?: boolean;
  1522 + /** @format double */
  1523 + price?: number;
  1524 + /** @format double */
  1525 + unitPrice?: number;
  1526 + updateByName?: string;
  1527 + /** @format date-time */
  1528 + updateTime?: string;
  1529 +}
  1530 +
  1531 +export interface OrderStagesFromDo {
  1532 + annex?: string;
  1533 + contract?: string;
  1534 + createByName?: string;
  1535 + /** @format date-time */
  1536 + createTime?: string;
  1537 + /** @format date-time */
  1538 + dateRange?: string;
  1539 + /** @format int32 */
  1540 + id?: number;
  1541 + logicDelete?: boolean;
  1542 + orderStagesDeviceDoList?: Array<OrderStagesDeviceDo>;
  1543 + payWay?: string;
  1544 + remark?: string;
  1545 + terminal?: string;
  1546 + /** @format double */
  1547 + totalPrice?: number;
  1548 + updateByName?: string;
  1549 + /** @format date-time */
  1550 + updateTime?: string;
  1551 + vendor?: string;
  1552 + /** @format int32 */
  1553 + version?: number;
  1554 +}
  1555 +
  1556 +export interface OrderStagesPayWay {
  1557 + /** @format date-time */
  1558 + dateRange?: string;
  1559 + fileName?: string;
  1560 + fileUrl?: string;
  1561 + /** @format int32 */
  1562 + id?: number;
  1563 + /** @format int32 */
  1564 + number?: number;
  1565 + /** @format int32 */
  1566 + ossId?: number;
  1567 +}
  1568 +
  1569 +export interface OrderStagesPayWayDo {
  1570 + /** @format int32 */
  1571 + ossId?: number;
  1572 +}
  1573 +
  1574 +export interface OrderStagesPayWayFileDo {
  1575 + fileList?: Array<OrderStageFileDo>;
  1576 +}
  1577 +
  1578 +export interface OrderStagesSelDo {
  1579 + contract?: string;
  1580 + /** @format date-time */
  1581 + dateRange?: string;
  1582 + deviceName?: string;
  1583 + /** @format int64 */
  1584 + id?: number;
  1585 + terminal?: string;
  1586 + vendor?: string;
  1587 +}
  1588 +
1835 1589 export interface OrderTrackStageFieldVO {
1836 1590 aitexTestFinishResult?: string;
1837 1591 aitexTestSendTime?: string;
... ... @@ -1981,6 +1735,8 @@ export interface QueryBankStatementDto {
1981 1735 collectionDatetimeEnd?: string;
1982 1736 /** @format int32 */
1983 1737 current?: number;
  1738 + /** @format int32 */
  1739 + end?: number;
1984 1740 /** @format int64 */
1985 1741 id?: number;
1986 1742 /** @format int32 */
... ... @@ -2002,6 +1758,8 @@ export interface QueryBankStatementDto {
2002 1758 remark?: string;
2003 1759 remarkNote?: string;
2004 1760 serialNumber?: string;
  1761 + /** @format int32 */
  1762 + start?: number;
2005 1763 status?: string;
2006 1764 /** @format int32 */
2007 1765 total?: number;
... ... @@ -2028,202 +1786,23 @@ export interface QueryCustomerInformationDto {
2028 1786 export interface QueryHistoryRecordDto {
2029 1787 /**
2030 1788 * @description
2031   - * 子订单id集合
2032   - */
2033   - ids?: Array<number>;
2034   - /**
2035   - * @description
2036   - * 查看已经删除的订单,false表示查看未删除的订单,true表示查看删除的订单
2037   - */
2038   - isDeleteQueryOrder?: boolean;
2039   -}
2040   -
2041   -export interface QueryInvoiceDetailDto {
2042   - /**
2043   - * @description
2044   - * 发票id
2045   - * @format int64
2046   - */
2047   - invoiceId?: number;
2048   -}
2049   -
2050   -export interface QueryInvoiceProjectDto {
2051   - /** @format int32 */
2052   - current?: number;
2053   - nameLike?: string;
2054   - /** @format int32 */
2055   - pageSize?: number;
2056   - /** @format int32 */
2057   - total?: number;
2058   -}
2059   -
2060   -export interface QueryInvoiceRecordDto {
2061   - /**
2062   - * @description
2063   - * 联系人
2064   - */
2065   - contactsLike?: string;
2066   - /** @format date-time */
2067   - createTimeGe?: string;
2068   - /** @format date-time */
2069   - createTimeLe?: string;
2070   - /** @format int32 */
2071   - current?: number;
2072   - /**
2073   - * @description
2074   - * id
2075   - * @format int64
2076   - */
2077   - id?: number;
2078   - /**
2079   - * @description
2080   - * IdIn
2081   - */
2082   - idIn?: Array<number>;
2083   - /**
2084   - * @description
2085   - * 关联发票id
2086   - */
2087   - invoiceId?: string;
2088   - /**
2089   - * @description
2090   - * 发票号码
2091   - */
2092   - invoiceNumber?: string;
2093   - /**
2094   - * @description
2095   - * 发票号码
2096   - */
2097   - invoiceNumberLike?: string;
2098   - /**
2099   - * @description
2100   - * 开票时间
2101   - * @format date-time
2102   - */
2103   - invoicingTimeGe?: string;
2104   - /**
2105   - * @description
2106   - * 开票时间
2107   - * @format date-time
2108   - */
2109   - invoicingTimeLe?: string;
2110   - /**
2111   - * @description
2112   - * 开票类型
2113   - */
2114   - invoicingType?: string;
2115   - /**
2116   - * @description
2117   - * 是否加急
2118   - */
2119   - isUrgent?: boolean;
2120   - /**
2121   - * @description
2122   - * 订单号
2123   - * @format int64
2124   - */
2125   - mainOrderId?: number;
2126   - /**
2127   - * @description
2128   - * 主订单idIn
2129   - */
2130   - mainOrderIdIn?: Array<number>;
2131   - /**
2132   - * @description
2133   - * 订单号
2134   - */
2135   - mainOrderIdLike?: string;
2136   - /**
2137   - * @description
2138   - * 是否需要构建发票明细
2139   - */
2140   - needBuildDetails?: boolean;
2141   - /** @format int32 */
2142   - pageSize?: number;
2143   - /**
2144   - * @description
2145   - * 买方名称
2146   - */
2147   - partyANameLike?: string;
2148   - /**
2149   - * @description
2150   - * 买方电话号码
2151   - */
2152   - partyAPhoneNumberLike?: string;
2153   - /**
2154   - * @description
2155   - * 买方税号
2156   - */
2157   - partyATaxid?: string;
2158   - /**
2159   - * @description
2160   - * 买方税号
2161   - */
2162   - partyATaxidLike?: string;
2163   - partyB?: string;
2164   - /**
2165   - * @description
2166   - * 卖方名称
2167   - */
2168   - partyBName?: string;
2169   - /**
2170   - * @description
2171   - * 销售代表
2172   - */
2173   - salesCode?: string;
2174   - /**
2175   - * @description
2176   - * 销售代表
2177   - */
2178   - salesCodeLike?: string;
2179   - /**
2180   - * @description
2181   - * 发票状态
2182   - */
2183   - status?: string;
2184   - /**
2185   - * @description
2186   - * 状态非空
2187   - */
2188   - statusIn?: Array<string>;
2189   - /**
2190   - * @description
2191   - * 状态非空
2192   - */
2193   - statusIsNotNull?: boolean;
2194   - /**
2195   - * @description
2196   - * 状态为空
2197   - */
2198   - statusIsNull?: boolean;
2199   - /**
2200   - * @description
2201   - * 子订单
2202   - * @format int64
2203   - */
2204   - subOrderId?: number;
2205   - /**
2206   - * @description
2207   - * 子订单idIn
2208   - */
2209   - subOrderIdIn?: Array<number>;
2210   - /**
2211   - * @description
2212   - * 子订单
  1789 + * 子订单id集合
2213 1790 */
2214   - subOrderIdLike?: string;
2215   - /** @format int32 */
2216   - total?: number;
  1791 + ids?: Array<number>;
2217 1792 /**
2218 1793 * @description
2219   - * 开票类型
  1794 + * 查看已经删除的订单,false表示查看未删除的订单,true表示查看删除的订单
2220 1795 */
2221   - type?: string;
  1796 + isDeleteQueryOrder?: boolean;
  1797 +}
  1798 +
  1799 +export interface QueryInvoiceDetailDto {
2222 1800 /**
2223 1801 * @description
2224   - * 用户id
  1802 + * 发票id
  1803 + * @format int64
2225 1804 */
2226   - uid?: string;
  1805 + invoiceId?: number;
2227 1806 }
2228 1807  
2229 1808 export interface QueryMainOrderDto {
... ... @@ -2395,16 +1974,18 @@ export interface ResearchGroupListRequest {
2395 1974 accountPhone?: string;
2396 1975 /** @format int32 */
2397 1976 current?: number;
  1977 + /** @format int32 */
  1978 + end?: number;
2398 1979 /**
2399 1980 * @description
2400 1981 * 课题组名称
2401 1982 */
2402   - group?: string;
  1983 + groupName?: string;
2403 1984 /**
2404 1985 * @description
2405 1986 * 课题组负责人
2406 1987 */
2407   - leader?: string;
  1988 + leaderName?: string;
2408 1989 /**
2409 1990 * @description
2410 1991 * 课题组成员名称
... ... @@ -2418,6 +1999,8 @@ export interface ResearchGroupListRequest {
2418 1999 /** @format int32 */
2419 2000 pageSize?: number;
2420 2001 /** @format int32 */
  2002 + start?: number;
  2003 + /** @format int32 */
2421 2004 total?: number;
2422 2005 }
2423 2006  
... ... @@ -2465,11 +2048,142 @@ export interface ResearchGroupMemberEditRequest {
2465 2048 memberPhone?: string;
2466 2049 }
2467 2050  
  2051 +export interface ResearchGroupMemberRequestAddRequest {
  2052 + /**
  2053 + * @description
  2054 + * 课题组ID
  2055 + * @format int64
  2056 + */
  2057 + groupId?: number;
  2058 + /**
  2059 + * @description
  2060 + * 课题组名称
  2061 + */
  2062 + groupName?: string;
  2063 + members?: Array<ResearchGroupMemberAddRequest>;
  2064 + /**
  2065 + * @description
  2066 + * 申请备注
  2067 + */
  2068 + requestNotes?: string;
  2069 +}
  2070 +
  2071 +export interface ResearchGroupMemberRequestDeleteRequest {
  2072 + /**
  2073 + * @description
  2074 + * 主键id
  2075 + */
  2076 + ids?: Array<number>;
  2077 +}
  2078 +
  2079 +export interface ResearchGroupMemberRequestDetailRequest {
  2080 + /**
  2081 + * @description
  2082 + * 主键id
  2083 + * @format int64
  2084 + */
  2085 + id?: number;
  2086 +}
  2087 +
  2088 +export interface ResearchGroupMemberRequestEditRequest {
  2089 + /**
  2090 + * @description
  2091 + * 课题组ID
  2092 + * @format int64
  2093 + */
  2094 + groupId?: number;
  2095 + /**
  2096 + * @description
  2097 + * 课题组名称
  2098 + */
  2099 + groupName?: string;
  2100 + /**
  2101 + * @description
  2102 + * 主键id
  2103 + * @format int64
  2104 + */
  2105 + id?: number;
  2106 + /**
  2107 + * @description
  2108 + * 成员名称
  2109 + */
  2110 + memberName?: string;
  2111 + /**
  2112 + * @description
  2113 + * 成员手机号
  2114 + */
  2115 + memberPhone?: string;
  2116 + /**
  2117 + * @description
  2118 + * 申请备注
  2119 + */
  2120 + requestNotes?: string;
  2121 +}
  2122 +
  2123 +export interface ResearchGroupMemberRequestsRequest {
  2124 + /**
  2125 + * @description
  2126 + * 审核备注
  2127 + */
  2128 + auditNotes?: string;
  2129 + /**
  2130 + * @description
  2131 + * 审核状态
  2132 + */
  2133 + auditStatus?: string;
  2134 + /**
  2135 + * @description
  2136 + * 创建人
  2137 + */
  2138 + createByName?: string;
  2139 + /** @format int32 */
  2140 + current?: number;
  2141 + /** @format int32 */
  2142 + end?: number;
  2143 + /**
  2144 + * @description
  2145 + * 课题组名称
  2146 + */
  2147 + groupName?: string;
  2148 + /**
  2149 + * @description
  2150 + * 成员名称
  2151 + */
  2152 + memberName?: string;
  2153 + /**
  2154 + * @description
  2155 + * 成员手机号
  2156 + */
  2157 + memberPhone?: string;
  2158 + /** @format int32 */
  2159 + pageSize?: number;
  2160 + /**
  2161 + * @description
  2162 + * 申请备注
  2163 + */
  2164 + requestNotes?: string;
  2165 + /** @format int32 */
  2166 + start?: number;
  2167 + /** @format int32 */
  2168 + total?: number;
  2169 +}
  2170 +
2468 2171 export interface ResetPwdVO {
2469 2172 /** @format int64 */
2470 2173 userId?: number;
2471 2174 }
2472 2175  
  2176 +export interface Resource {
  2177 + description?: string;
  2178 + file?: TsgFile;
  2179 + filename?: string;
  2180 + inputStream?: InputStream;
  2181 + open?: boolean;
  2182 + readable?: boolean;
  2183 + uri?: URI;
  2184 + url?: TsgURL;
  2185 +}
  2186 +
2473 2187 export interface SalOrderSaveDto {
2474 2188 id?: string;
2475 2189 }
... ... @@ -2493,134 +2207,14 @@ export interface ShippingWarehouseChangeDto {
2493 2207 shippingWarehouse?: string;
2494 2208 }
2495 2209  
2496   -export interface SubOrder {
2497   - afterInvoicingStatus?: string;
2498   - /** @format date-time */
2499   - afterInvoicingStatusUpdateTime?: string;
2500   - afterSalesAnnex?: string;
2501   - afterSalesNotes?: string;
2502   - afterSalesPlan?: string;
2503   - annex?: string;
2504   - applyInvoicingAnnex?: string;
2505   - applyInvoicingNotes?: string;
2506   - /** @format date-time */
2507   - applyTime?: string;
2508   - /** @format int32 */
2509   - attrId?: number;
2510   - checkNotes?: string;
2511   - /** @format date-time */
2512   - collectMoneyTime?: string;
2513   - confirmDeliverNotes?: string;
2514   - confirmReissueNotes?: string;
2515   - createByName?: string;
2516   - /** @format date-time */
2517   - createTime?: string;
2518   - /** @format date-time */
2519   - deadline?: string;
2520   - ext?: string;
2521   - extendField?: string;
2522   - /** @format date-time */
2523   - financialReceiptIssuanceTime?: string;
2524   - fullPaymentStatus?: string;
2525   - /** @format double */
2526   - goodsVolume?: number;
2527   - /** @format double */
2528   - goodsWeight?: number;
2529   - /** @format int64 */
2530   - id?: number;
2531   - image?: string;
2532   - invoiceApplyUsername?: string;
2533   - invoiceInformation?: string;
2534   - /** @format int64 */
2535   - invoiceRecordId?: number;
2536   - invoicingCheckAnnex?: string;
2537   - invoicingNotes?: string;
2538   - invoicingStatus?: string;
2539   - /** @format date-time */
2540   - invoicingTime?: string;
2541   - invoicingUrgentCause?: string;
2542   - isUrgent?: boolean;
2543   - kingdeeErrorMessage?: string;
2544   - logicDelete?: boolean;
2545   - logisticsMethod?: string;
2546   - logisticsNotes?: string;
2547   - /** @format int64 */
2548   - mainOrderAmountProportion?: number;
2549   - /** @format int64 */
2550   - mainOrderId?: number;
2551   - materialId?: string;
2552   - modified?: boolean;
2553   - modifiedAuditNotes?: string;
2554   - modifiedAuditStatus?: string;
2555   - modifiedOptFlag?: string;
2556   - nextOrderStatus?: string;
2557   - notes?: string;
2558   - orderStatus?: string;
2559   - orderStatusBeforeModify?: string;
2560   - /** @format date-time */
2561   - orderStatusUpdateTime?: string;
2562   - /** @format int32 */
2563   - packageNumber?: number;
2564   - parameters?: string;
2565   - paymentChannel?: string;
2566   - paymentMethod?: string;
2567   - paymentReceiptAnnex?: string;
2568   - paymentReceiptNotes?: string;
2569   - paymentReceiptStatus?: string;
2570   - paymentStatus?: string;
2571   - paymentTransactionId?: string;
2572   - postAuditNotes?: string;
2573   - postAuditStatus?: string;
2574   - /** @format date-time */
2575   - postAuditStatusUpdateTime?: string;
2576   - preAfterInvoicingStatus?: string;
2577   - procureConvertNotes?: string;
2578   - procureNotes?: string;
2579   - /** @format date-time */
2580   - procureOrderDatetime?: string;
2581   - procureOrderStatus?: string;
2582   - productBelongBusiness?: string;
2583   - productCode?: string;
2584   - /** @format int32 */
2585   - productId?: number;
2586   - productName?: string;
2587   - /** @format int64 */
2588   - productPrice?: number;
2589   - /** @format date-time */
2590   - productionEndTime?: string;
2591   - /** @format date-time */
2592   - productionStartTime?: string;
2593   - productionTimePushStatus?: string;
2594   - /** @format int32 */
2595   - quantity?: number;
2596   - receivingCompany?: string;
2597   - reissueNotes?: string;
2598   - serialNumber?: string;
2599   - shippingWarehouse?: string;
2600   - /** @format int64 */
2601   - subOrderPayment?: number;
2602   - supplierName?: string;
2603   - supplierNotes?: string;
2604   - /** @format int64 */
2605   - totalPayment?: number;
2606   - /** @format int32 */
2607   - uid?: number;
2608   - unit?: string;
2609   - unitId?: string;
2610   - updateByName?: string;
2611   - /** @format date-time */
2612   - updateTime?: string;
2613   - urgentInvoiceAuditNotes?: string;
2614   - /** @format int32 */
2615   - version?: number;
2616   -}
2617   -
2618 2210 export interface SysLogQueryVO {
2619 2211 address?: string;
2620 2212 browser?: string;
2621 2213 /** @format int32 */
2622 2214 current?: number;
2623 2215 description?: string;
  2216 + /** @format int32 */
  2217 + end?: number;
2624 2218 exceptionDetail?: string;
2625 2219 /** @format int64 */
2626 2220 id?: number;
... ... @@ -2631,6 +2225,8 @@ export interface SysLogQueryVO {
2631 2225 pageSize?: number;
2632 2226 params?: string;
2633 2227 requestIp?: string;
  2228 + /** @format int32 */
  2229 + start?: number;
2634 2230 /** @format int64 */
2635 2231 time?: number;
2636 2232 /** @format int32 */
... ... @@ -2653,6 +2249,29 @@ export interface TokenApiDto {
2653 2249 username?: string;
2654 2250 }
2655 2251  
  2252 +export interface URI {
  2253 + absolute?: boolean;
  2254 + authority?: string;
  2255 + fragment?: string;
  2256 + host?: string;
  2257 + opaque?: boolean;
  2258 + path?: string;
  2259 + /** @format int32 */
  2260 + port?: number;
  2261 + query?: string;
  2262 + rawAuthority?: string;
  2263 + rawFragment?: string;
  2264 + rawPath?: string;
  2265 + rawQuery?: string;
  2266 + rawSchemeSpecificPart?: string;
  2267 + rawUserInfo?: string;
  2268 + scheme?: string;
  2269 + schemeSpecificPart?: string;
  2270 + userInfo?: string;
  2271 +}
  2272 +
  2273 +export type URLStreamHandler = any;
  2274 +
2656 2275 export interface Unit {
2657 2276 /** @format float */
2658 2277 coefficient?: number;
... ... @@ -2771,8 +2390,12 @@ export interface UserCenterInfoRequest {
2771 2390 /** @format int32 */
2772 2391 current?: number;
2773 2392 /** @format int32 */
  2393 + end?: number;
  2394 + /** @format int32 */
2774 2395 pageSize?: number;
2775 2396 /** @format int32 */
  2397 + start?: number;
  2398 + /** @format int32 */
2776 2399 total?: number;
2777 2400 /**
2778 2401 * @description
... ... @@ -2792,6 +2415,8 @@ export interface UserDetailRequest {
2792 2415 /** @format int32 */
2793 2416 current?: number;
2794 2417 /** @format int32 */
  2418 + end?: number;
  2419 + /** @format int32 */
2795 2420 pageSize?: number;
2796 2421 /**
2797 2422 * @description
... ... @@ -2799,6 +2424,8 @@ export interface UserDetailRequest {
2799 2424 */
2800 2425 phone?: string;
2801 2426 /** @format int32 */
  2427 + start?: number;
  2428 + /** @format int32 */
2802 2429 total?: number;
2803 2430 /**
2804 2431 * @description
... ... @@ -2815,6 +2442,8 @@ export interface UserListRequest {
2815 2442 * 创建日期开始时间
2816 2443 */
2817 2444 dateLimit?: string;
  2445 + /** @format int32 */
  2446 + end?: number;
2818 2447 /**
2819 2448 * @description
2820 2449 * 单位
... ... @@ -2839,10 +2468,23 @@ export interface UserListRequest {
2839 2468 phone?: string;
2840 2469 /**
2841 2470 * @description
  2471 + * phones
  2472 + */
  2473 + phones?: Array<string>;
  2474 + /**
  2475 + * @description
  2476 + * 内部订单系统课题组id
  2477 + * @format int64
  2478 + */
  2479 + researchGroupId?: number;
  2480 + /**
  2481 + * @description
2842 2482 * salesCode
2843 2483 */
2844 2484 salesCode?: string;
2845 2485 /** @format int32 */
  2486 + start?: number;
  2487 + /** @format int32 */
2846 2488 total?: number;
2847 2489 /**
2848 2490 * @description
... ... @@ -2862,6 +2504,13 @@ export interface UserListRequest {
2862 2504 username?: string;
2863 2505 }
2864 2506  
  2507 +export interface UserNowMoneyCheckRequest {
  2508 + phone?: string;
  2509 + subPrice?: number;
  2510 + /** @format int64 */
  2511 + uid?: number;
  2512 +}
  2513 +
2865 2514 export interface View {
2866 2515 contentType?: string;
2867 2516 }
... ... @@ -2884,42 +2533,30 @@ export interface ApiOrderConfirmReceiveRequest {
2884 2533 subOrderIds?: Array<number>;
2885 2534 }
2886 2535  
2887   -export interface InvoiceDetail {
  2536 +export interface TsgFile {
  2537 + absolute?: boolean;
  2538 + absoluteFile?: TsgFile;
  2539 + absolutePath?: string;
  2540 + canonicalFile?: TsgFile;
  2541 + canonicalPath?: string;
  2542 + directory?: boolean;
  2543 + executable?: boolean;
  2544 + file?: boolean;
2888 2545 /** @format int64 */
2889   - id?: number;
2890   - /**
2891   - * @description
2892   - * 发票id
2893   - * @format int64
2894   - */
2895   - invoiceRecordId?: number;
2896   - /**
2897   - * @description
2898   - * 单价
2899   - * @format double
2900   - */
2901   - price?: number;
2902   - projectName?: string;
2903   - /** @format double */
2904   - quantity?: number;
2905   - /**
2906   - * @description
2907   - * 型号
2908   - */
2909   - specification?: string;
  2546 + freeSpace?: number;
  2547 + hidden?: boolean;
2910 2548 /** @format int64 */
2911   - subOrderId?: number;
2912   - /** @format double */
2913   - taxPrice?: number;
2914   - /** @format double */
2915   - taxRate?: number;
2916   - /**
2917   - * @description
2918   - * 总价
2919   - * @format double
2920   - */
2921   - totalPrice?: number;
2922   - unit?: string;
  2549 + lastModified?: number;
  2550 + name?: string;
  2551 + parent?: string;
  2552 + parentFile?: TsgFile;
  2553 + path?: string;
  2554 + readable?: boolean;
  2555 + /** @format int64 */
  2556 + totalSpace?: number;
  2557 + /** @format int64 */
  2558 + usableSpace?: number;
  2559 + writable?: boolean;
2923 2560 }
2924 2561  
2925 2562 export interface SalesRechargePrepaymentAuditRequest {
... ... @@ -2938,6 +2575,11 @@ export interface SalesRechargePrepaymentAuditRequest {
2938 2575 * 是否通过
2939 2576 */
2940 2577 pass?: boolean;
  2578 + /**
  2579 + * @description
  2580 + * 手机号
  2581 + */
  2582 + phone?: string;
2941 2583 }
2942 2584  
2943 2585 export interface SalesRechargePrepaymentCreateRequest {
... ... @@ -3043,6 +2685,8 @@ export interface SalesRechargePrepaymentRequest {
3043 2685 * @format int32
3044 2686 */
3045 2687 enableFlag?: number;
  2688 + /** @format int32 */
  2689 + end?: number;
3046 2690 /**
3047 2691 * @description
3048 2692 * id
... ... @@ -3087,6 +2731,8 @@ export interface SalesRechargePrepaymentRequest {
3087 2731 * 销售代表
3088 2732 */
3089 2733 salesCode?: string;
  2734 + /** @format int32 */
  2735 + start?: number;
3090 2736 /**
3091 2737 * @description
3092 2738 * 状态
... ... @@ -3246,6 +2892,25 @@ export interface StoreOrderInvoiceRequest {
3246 2892 updateTime?: string;
3247 2893 }
3248 2894  
  2895 +export interface TsgURL {
  2896 + authority?: string;
  2897 + content?: any;
  2898 + /** @format int32 */
  2899 + defaultPort?: number;
  2900 + deserializedFields?: URLStreamHandler;
  2901 + file?: string;
  2902 + host?: string;
  2903 + path?: string;
  2904 + /** @format int32 */
  2905 + port?: number;
  2906 + protocol?: string;
  2907 + query?: string;
  2908 + ref?: string;
  2909 + /** @format int32 */
  2910 + serializedHashCode?: number;
  2911 + userInfo?: string;
  2912 +}
  2913 +
3249 2914 /**
3250 2915 * @description
3251 2916 * 保存用户地址请求对象
... ...
src/services/order.ts
... ... @@ -2,12 +2,14 @@ import axios from &#39;axios&#39;;
2 2  
3 3 export const orderExport = async (
4 4 url: any = '',
  5 + fileName: any = '',
  6 + method: any = '',
5 7 data: any = {},
6 8 exportLoadingDestory: any,
7 9 ) => {
8 10 axios({
9 11 url: url,
10   - method: 'post',
  12 + method: method,
11 13 responseType: 'blob',
12 14 headers: { Authorization: localStorage.getItem('token') },
13 15 data,
... ... @@ -18,7 +20,7 @@ export const orderExport = async (
18 20 const downloadUrl = window.URL.createObjectURL(blob);
19 21 const a = document.createElement('a');
20 22 a.href = downloadUrl;
21   - a.download = '订单.xlsx'; // 你可以为文件命名
  23 + a.download = fileName; // 你可以为文件命名
22 24 document.body.appendChild(a);
23 25 a.click(); // 模拟点击操作来下载文件
24 26 URL.revokeObjectURL(downloadUrl); // 释放掉 blob 对象所占用的内存
... ...
src/services/request.ts
... ... @@ -29,12 +29,12 @@ import type {
29 29 ApiOrderEvaluatedRequest,
30 30 ApiQueryOrderDetailRequest,
31 31 ApiQueryOrderStatusCountsRequest,
32   - ApplyInvoiceDto,
33 32 AuditDto,
34 33 AuditVO,
35 34 CancelInvoiceAndBankStatementDto,
36 35 CancelSendOrderDto,
37 36 CaptchaMessageVO,
  37 + CommonAuditRequest,
38 38 CustomFieldRes,
39 39 CustomerCustomerListReq,
40 40 CustomerDetailDto,
... ... @@ -46,7 +46,6 @@ import type {
46 46 Dto,
47 47 InventoryMaterialStockReq,
48 48 InvoiceDto,
49   - InvoiceRecordDto,
50 49 InvoiceRecordQueryRequest,
51 50 MainOrderqueryRequest,
52 51 MaterialListReply,
... ... @@ -55,13 +54,18 @@ import type {
55 54 MaterialUnitListRes,
56 55 MeasureUnitListRes,
57 56 MessageQueryDTO,
58   - ModelAndView,
59 57 OrderAddVO,
60 58 OrderAuditLogQueryVO,
61 59 OrderBaseInfoQueryVO,
62 60 OrderFieldLockApplyQueryVO,
63 61 OrderOptLogQueryVO,
64 62 OrderProfitAnalysisVo,
  63 + OrderStagesDelDo,
  64 + OrderStagesFromDo,
  65 + OrderStagesPayWay,
  66 + OrderStagesPayWayDo,
  67 + OrderStagesPayWayFileDo,
  68 + OrderStagesSelDo,
65 69 OrderUnlockFieldApplyVO,
66 70 OrderUpdateVO,
67 71 ProcureConvertProcureDto,
... ... @@ -74,8 +78,6 @@ import type {
74 78 QueryCustomerInformationDto,
75 79 QueryHistoryRecordDto,
76 80 QueryInvoiceDetailDto,
77   - QueryInvoiceProjectDto,
78   - QueryInvoiceRecordDto,
79 81 QueryMainOrderDto,
80 82 QueryReportFormsDto,
81 83 ReissueInvoiceDto,
... ... @@ -84,6 +86,11 @@ import type {
84 86 ResearchGroupDetailRequest,
85 87 ResearchGroupEditRequest,
86 88 ResearchGroupListRequest,
  89 + ResearchGroupMemberRequestAddRequest,
  90 + ResearchGroupMemberRequestDeleteRequest,
  91 + ResearchGroupMemberRequestDetailRequest,
  92 + ResearchGroupMemberRequestEditRequest,
  93 + ResearchGroupMemberRequestsRequest,
87 94 ResetPwdVO,
88 95 SalOrderSaveDto,
89 96 SalesRechargePrepaymentAuditRequest,
... ... @@ -109,6 +116,7 @@ import type {
109 116 UserCenterInfoRequest,
110 117 UserDetailRequest,
111 118 UserListRequest,
  119 + UserNowMoneyCheckRequest,
112 120 } from './definition';
113 121  
114 122 /** @description request parameter type for postApiLocalStorageUpload */
... ... @@ -1614,13 +1622,156 @@ export const postCanrdApiUserList = /* #__PURE__ */ (() =&gt; {
1614 1622 return request;
1615 1623 })();
1616 1624  
  1625 +/** @description request parameter type for postCanrdApiUserNowMoneyCheck */
  1626 +export interface PostCanrdApiUserNowMoneyCheckOption {
  1627 + /**
  1628 + * @description
  1629 + * request
  1630 + */
  1631 + body: {
  1632 + /**
  1633 + @description
  1634 + request */
  1635 + request: UserNowMoneyCheckRequest;
  1636 + };
  1637 +}
  1638 +
  1639 +/** @description response type for postCanrdApiUserNowMoneyCheck */
  1640 +export interface PostCanrdApiUserNowMoneyCheckResponse {
  1641 + /**
  1642 + * @description
  1643 + * OK
  1644 + */
  1645 + 200: ServerResult;
  1646 + /**
  1647 + * @description
  1648 + * Created
  1649 + */
  1650 + 201: any;
  1651 + /**
  1652 + * @description
  1653 + * Unauthorized
  1654 + */
  1655 + 401: any;
  1656 + /**
  1657 + * @description
  1658 + * Forbidden
  1659 + */
  1660 + 403: any;
  1661 + /**
  1662 + * @description
  1663 + * Not Found
  1664 + */
  1665 + 404: any;
  1666 +}
  1667 +
  1668 +export type PostCanrdApiUserNowMoneyCheckResponseSuccess =
  1669 + PostCanrdApiUserNowMoneyCheckResponse[200];
  1670 +/**
  1671 + * @description
  1672 + * 检查用户额度
  1673 + * @tags canrd-mobile-api-controller
  1674 + * @produces *
  1675 + * @consumes application/json
  1676 + */
  1677 +export const postCanrdApiUserNowMoneyCheck = /* #__PURE__ */ (() => {
  1678 + const method = 'post';
  1679 + const url = '/canrd/api/user/nowMoney/check';
  1680 + function request(
  1681 + option: PostCanrdApiUserNowMoneyCheckOption,
  1682 + ): Promise<PostCanrdApiUserNowMoneyCheckResponseSuccess> {
  1683 + return requester(request.url, {
  1684 + method: request.method,
  1685 + ...option,
  1686 + }) as unknown as Promise<PostCanrdApiUserNowMoneyCheckResponseSuccess>;
  1687 + }
  1688 +
  1689 + /** http method */
  1690 + request.method = method;
  1691 + /** request url */
  1692 + request.url = url;
  1693 + return request;
  1694 +})();
  1695 +
  1696 +/** @description request parameter type for postCommonAudit */
  1697 +export interface PostCommonAuditOption {
  1698 + /**
  1699 + * @description
  1700 + * request
  1701 + */
  1702 + body: {
  1703 + /**
  1704 + @description
  1705 + request */
  1706 + request: CommonAuditRequest;
  1707 + };
  1708 +}
  1709 +
  1710 +/** @description response type for postCommonAudit */
  1711 +export interface PostCommonAuditResponse {
  1712 + /**
  1713 + * @description
  1714 + * OK
  1715 + */
  1716 + 200: ServerResult;
  1717 + /**
  1718 + * @description
  1719 + * Created
  1720 + */
  1721 + 201: any;
  1722 + /**
  1723 + * @description
  1724 + * Unauthorized
  1725 + */
  1726 + 401: any;
  1727 + /**
  1728 + * @description
  1729 + * Forbidden
  1730 + */
  1731 + 403: any;
  1732 + /**
  1733 + * @description
  1734 + * Not Found
  1735 + */
  1736 + 404: any;
  1737 +}
  1738 +
  1739 +export type PostCommonAuditResponseSuccess = PostCommonAuditResponse[200];
  1740 +/**
  1741 + * @description
  1742 + * audit
  1743 + * @tags common-controller
  1744 + * @produces *
  1745 + * @consumes application/json
  1746 + */
  1747 +export const postCommonAudit = /* #__PURE__ */ (() => {
  1748 + const method = 'post';
  1749 + const url = '/common/audit';
  1750 + function request(
  1751 + option: PostCommonAuditOption,
  1752 + ): Promise<PostCommonAuditResponseSuccess> {
  1753 + return requester(request.url, {
  1754 + method: request.method,
  1755 + ...option,
  1756 + }) as unknown as Promise<PostCommonAuditResponseSuccess>;
  1757 + }
  1758 +
  1759 + /** http method */
  1760 + request.method = method;
  1761 + /** request url */
  1762 + request.url = url;
  1763 + return request;
  1764 +})();
  1765 +
1617 1766 /** @description response type for getError */
1618 1767 export interface GetErrorResponse {
1619 1768 /**
1620 1769 * @description
1621 1770 * OK
1622 1771 */
1623   - 200: ModelAndView;
  1772 + 200: {
  1773 + [propertyName: string]: any;
  1774 + };
1624 1775 /**
1625 1776 * @description
1626 1777 * Unauthorized
... ... @@ -1641,9 +1792,9 @@ export interface GetErrorResponse {
1641 1792 export type GetErrorResponseSuccess = GetErrorResponse[200];
1642 1793 /**
1643 1794 * @description
1644   - * errorHtml
  1795 + * error
1645 1796 * @tags basic-error-controller
1646   - * @produces text/html
  1797 + * @produces *
1647 1798 */
1648 1799 export const getError = /* #__PURE__ */ (() => {
1649 1800 const method = 'get';
... ... @@ -1667,7 +1818,9 @@ export interface PutErrorResponse {
1667 1818 * @description
1668 1819 * OK
1669 1820 */
1670   - 200: ModelAndView;
  1821 + 200: {
  1822 + [propertyName: string]: any;
  1823 + };
1671 1824 /**
1672 1825 * @description
1673 1826 * Created
... ... @@ -1693,9 +1846,9 @@ export interface PutErrorResponse {
1693 1846 export type PutErrorResponseSuccess = PutErrorResponse[200];
1694 1847 /**
1695 1848 * @description
1696   - * errorHtml
  1849 + * error
1697 1850 * @tags basic-error-controller
1698   - * @produces text/html
  1851 + * @produces *
1699 1852 * @consumes application/json
1700 1853 */
1701 1854 export const putError = /* #__PURE__ */ (() => {
... ... @@ -1720,7 +1873,9 @@ export interface PostErrorResponse {
1720 1873 * @description
1721 1874 * OK
1722 1875 */
1723   - 200: ModelAndView;
  1876 + 200: {
  1877 + [propertyName: string]: any;
  1878 + };
1724 1879 /**
1725 1880 * @description
1726 1881 * Created
... ... @@ -1746,9 +1901,9 @@ export interface PostErrorResponse {
1746 1901 export type PostErrorResponseSuccess = PostErrorResponse[200];
1747 1902 /**
1748 1903 * @description
1749   - * errorHtml
  1904 + * error
1750 1905 * @tags basic-error-controller
1751   - * @produces text/html
  1906 + * @produces *
1752 1907 * @consumes application/json
1753 1908 */
1754 1909 export const postError = /* #__PURE__ */ (() => {
... ... @@ -1773,7 +1928,9 @@ export interface DeleteErrorResponse {
1773 1928 * @description
1774 1929 * OK
1775 1930 */
1776   - 200: ModelAndView;
  1931 + 200: {
  1932 + [propertyName: string]: any;
  1933 + };
1777 1934 /**
1778 1935 * @description
1779 1936 * No Content
... ... @@ -1794,9 +1951,9 @@ export interface DeleteErrorResponse {
1794 1951 export type DeleteErrorResponseSuccess = DeleteErrorResponse[200];
1795 1952 /**
1796 1953 * @description
1797   - * errorHtml
  1954 + * error
1798 1955 * @tags basic-error-controller
1799   - * @produces text/html
  1956 + * @produces *
1800 1957 */
1801 1958 export const deleteError = /* #__PURE__ */ (() => {
1802 1959 const method = 'delete';
... ... @@ -1820,7 +1977,9 @@ export interface OptionsErrorResponse {
1820 1977 * @description
1821 1978 * OK
1822 1979 */
1823   - 200: ModelAndView;
  1980 + 200: {
  1981 + [propertyName: string]: any;
  1982 + };
1824 1983 /**
1825 1984 * @description
1826 1985 * No Content
... ... @@ -1841,9 +2000,9 @@ export interface OptionsErrorResponse {
1841 2000 export type OptionsErrorResponseSuccess = OptionsErrorResponse[200];
1842 2001 /**
1843 2002 * @description
1844   - * errorHtml
  2003 + * error
1845 2004 * @tags basic-error-controller
1846   - * @produces text/html
  2005 + * @produces *
1847 2006 * @consumes application/json
1848 2007 */
1849 2008 export const optionsError = /* #__PURE__ */ (() => {
... ... @@ -1868,7 +2027,9 @@ export interface HeadErrorResponse {
1868 2027 * @description
1869 2028 * OK
1870 2029 */
1871   - 200: ModelAndView;
  2030 + 200: {
  2031 + [propertyName: string]: any;
  2032 + };
1872 2033 /**
1873 2034 * @description
1874 2035 * No Content
... ... @@ -1889,9 +2050,9 @@ export interface HeadErrorResponse {
1889 2050 export type HeadErrorResponseSuccess = HeadErrorResponse[200];
1890 2051 /**
1891 2052 * @description
1892   - * errorHtml
  2053 + * error
1893 2054 * @tags basic-error-controller
1894   - * @produces text/html
  2055 + * @produces *
1895 2056 * @consumes application/json
1896 2057 */
1897 2058 export const headError = /* #__PURE__ */ (() => {
... ... @@ -1916,7 +2077,9 @@ export interface PatchErrorResponse {
1916 2077 * @description
1917 2078 * OK
1918 2079 */
1919   - 200: ModelAndView;
  2080 + 200: {
  2081 + [propertyName: string]: any;
  2082 + };
1920 2083 /**
1921 2084 * @description
1922 2085 * No Content
... ... @@ -1937,9 +2100,9 @@ export interface PatchErrorResponse {
1937 2100 export type PatchErrorResponseSuccess = PatchErrorResponse[200];
1938 2101 /**
1939 2102 * @description
1940   - * errorHtml
  2103 + * error
1941 2104 * @tags basic-error-controller
1942   - * @produces text/html
  2105 + * @produces *
1943 2106 * @consumes application/json
1944 2107 */
1945 2108 export const patchError = /* #__PURE__ */ (() => {
... ... @@ -6134,22 +6297,22 @@ export const postOrderErpOrderQueryById = /* #__PURE__ */ (() =&gt; {
6134 6297 return request;
6135 6298 })();
6136 6299  
6137   -/** @description request parameter type for postOrderErpProfitAnalysis */
6138   -export interface PostOrderErpProfitAnalysisOption {
  6300 +/** @description request parameter type for postOrderErpOrderStagesAdd */
  6301 +export interface PostOrderErpOrderStagesAddOption {
6139 6302 /**
6140 6303 * @description
6141   - * orderProfitAnalysisVo
  6304 + * orderStagesFromDo
6142 6305 */
6143 6306 body: {
6144 6307 /**
6145 6308 @description
6146   - orderProfitAnalysisVo */
6147   - orderProfitAnalysisVo: OrderProfitAnalysisVo;
  6309 + orderStagesFromDo */
  6310 + orderStagesFromDo: OrderStagesFromDo;
6148 6311 };
6149 6312 }
6150 6313  
6151   -/** @description response type for postOrderErpProfitAnalysis */
6152   -export interface PostOrderErpProfitAnalysisResponse {
  6314 +/** @description response type for postOrderErpOrderStagesAdd */
  6315 +export interface PostOrderErpOrderStagesAddResponse {
6153 6316 /**
6154 6317 * @description
6155 6318 * OK
... ... @@ -6177,25 +6340,25 @@ export interface PostOrderErpProfitAnalysisResponse {
6177 6340 404: any;
6178 6341 }
6179 6342  
6180   -export type PostOrderErpProfitAnalysisResponseSuccess =
6181   - PostOrderErpProfitAnalysisResponse[200];
  6343 +export type PostOrderErpOrderStagesAddResponseSuccess =
  6344 + PostOrderErpOrderStagesAddResponse[200];
6182 6345 /**
6183 6346 * @description
6184   - * analysis
6185   - * @tags order-profit-controller
  6347 + * 添加或者修改分期账单
  6348 + * @tags order-stages-controller
6186 6349 * @produces *
6187 6350 * @consumes application/json
6188 6351 */
6189   -export const postOrderErpProfitAnalysis = /* #__PURE__ */ (() => {
  6352 +export const postOrderErpOrderStagesAdd = /* #__PURE__ */ (() => {
6190 6353 const method = 'post';
6191   - const url = '/order/erp/profit/analysis';
  6354 + const url = '/order/erp/orderStages/add';
6192 6355 function request(
6193   - option: PostOrderErpProfitAnalysisOption,
6194   - ): Promise<PostOrderErpProfitAnalysisResponseSuccess> {
  6356 + option: PostOrderErpOrderStagesAddOption,
  6357 + ): Promise<PostOrderErpOrderStagesAddResponseSuccess> {
6195 6358 return requester(request.url, {
6196 6359 method: request.method,
6197 6360 ...option,
6198   - }) as unknown as Promise<PostOrderErpProfitAnalysisResponseSuccess>;
  6361 + }) as unknown as Promise<PostOrderErpOrderStagesAddResponseSuccess>;
6199 6362 }
6200 6363  
6201 6364 /** http method */
... ... @@ -6205,22 +6368,22 @@ export const postOrderErpProfitAnalysis = /* #__PURE__ */ (() =&gt; {
6205 6368 return request;
6206 6369 })();
6207 6370  
6208   -/** @description request parameter type for postOrderErpRolesAdd */
6209   -export interface PostOrderErpRolesAddOption {
  6371 +/** @description request parameter type for deleteOrderErpOrderStagesDelect */
  6372 +export interface DeleteOrderErpOrderStagesDelectOption {
6210 6373 /**
6211 6374 * @description
6212   - * roleVO
  6375 + * orderStagesDelDo
6213 6376 */
6214 6377 body: {
6215 6378 /**
6216 6379 @description
6217   - roleVO */
6218   - roleVO: AdminRoleVO;
  6380 + orderStagesDelDo */
  6381 + orderStagesDelDo: OrderStagesDelDo;
6219 6382 };
6220 6383 }
6221 6384  
6222   -/** @description response type for postOrderErpRolesAdd */
6223   -export interface PostOrderErpRolesAddResponse {
  6385 +/** @description response type for deleteOrderErpOrderStagesDelect */
  6386 +export interface DeleteOrderErpOrderStagesDelectResponse {
6224 6387 /**
6225 6388 * @description
6226 6389 * OK
... ... @@ -6228,9 +6391,9 @@ export interface PostOrderErpRolesAddResponse {
6228 6391 200: ServerResult;
6229 6392 /**
6230 6393 * @description
6231   - * Created
  6394 + * No Content
6232 6395 */
6233   - 201: any;
  6396 + 204: any;
6234 6397 /**
6235 6398 * @description
6236 6399 * Unauthorized
... ... @@ -6241,32 +6404,26 @@ export interface PostOrderErpRolesAddResponse {
6241 6404 * Forbidden
6242 6405 */
6243 6406 403: any;
6244   - /**
6245   - * @description
6246   - * Not Found
6247   - */
6248   - 404: any;
6249 6407 }
6250 6408  
6251   -export type PostOrderErpRolesAddResponseSuccess =
6252   - PostOrderErpRolesAddResponse[200];
  6409 +export type DeleteOrderErpOrderStagesDelectResponseSuccess =
  6410 + DeleteOrderErpOrderStagesDelectResponse[200];
6253 6411 /**
6254 6412 * @description
6255   - * 新增角色
6256   - * @tags 系统:角色管理
  6413 + * 删除分期账单
  6414 + * @tags order-stages-controller
6257 6415 * @produces *
6258   - * @consumes application/json
6259 6416 */
6260   -export const postOrderErpRolesAdd = /* #__PURE__ */ (() => {
6261   - const method = 'post';
6262   - const url = '/order/erp/roles/add';
  6417 +export const deleteOrderErpOrderStagesDelect = /* #__PURE__ */ (() => {
  6418 + const method = 'delete';
  6419 + const url = '/order/erp/orderStages/delect';
6263 6420 function request(
6264   - option: PostOrderErpRolesAddOption,
6265   - ): Promise<PostOrderErpRolesAddResponseSuccess> {
  6421 + option: DeleteOrderErpOrderStagesDelectOption,
  6422 + ): Promise<DeleteOrderErpOrderStagesDelectResponseSuccess> {
6266 6423 return requester(request.url, {
6267 6424 method: request.method,
6268 6425 ...option,
6269   - }) as unknown as Promise<PostOrderErpRolesAddResponseSuccess>;
  6426 + }) as unknown as Promise<DeleteOrderErpOrderStagesDelectResponseSuccess>;
6270 6427 }
6271 6428  
6272 6429 /** http method */
... ... @@ -6276,32 +6433,13 @@ export const postOrderErpRolesAdd = /* #__PURE__ */ (() =&gt; {
6276 6433 return request;
6277 6434 })();
6278 6435  
6279   -/** @description request parameter type for postOrderErpRolesAll */
6280   -export interface PostOrderErpRolesAllOption {
6281   - /**
6282   - * @description
6283   - * queryVO
6284   - */
6285   - body: {
6286   - /**
6287   - @description
6288   - queryVO */
6289   - queryVO: AdminRoleQueryVO;
6290   - };
6291   -}
6292   -
6293   -/** @description response type for postOrderErpRolesAll */
6294   -export interface PostOrderErpRolesAllResponse {
  6436 +/** @description response type for getOrderErpOrderStagesExport */
  6437 +export interface GetOrderErpOrderStagesExportResponse {
6295 6438 /**
6296 6439 * @description
6297 6440 * OK
6298 6441 */
6299   - 200: ServerResult;
6300   - /**
6301   - * @description
6302   - * Created
6303   - */
6304   - 201: any;
  6442 + 200: any;
6305 6443 /**
6306 6444 * @description
6307 6445 * Unauthorized
... ... @@ -6319,25 +6457,21 @@ export interface PostOrderErpRolesAllResponse {
6319 6457 404: any;
6320 6458 }
6321 6459  
6322   -export type PostOrderErpRolesAllResponseSuccess =
6323   - PostOrderErpRolesAllResponse[200];
  6460 +export type GetOrderErpOrderStagesExportResponseSuccess =
  6461 + GetOrderErpOrderStagesExportResponse[200];
6324 6462 /**
6325 6463 * @description
6326   - * 返回全部的角色
6327   - * @tags 系统:角色管理
  6464 + * 导出分期账单
  6465 + * @tags order-stages-controller
6328 6466 * @produces *
6329   - * @consumes application/json
6330 6467 */
6331   -export const postOrderErpRolesAll = /* #__PURE__ */ (() => {
6332   - const method = 'post';
6333   - const url = '/order/erp/roles/all';
6334   - function request(
6335   - option: PostOrderErpRolesAllOption,
6336   - ): Promise<PostOrderErpRolesAllResponseSuccess> {
  6468 +export const getOrderErpOrderStagesExport = /* #__PURE__ */ (() => {
  6469 + const method = 'get';
  6470 + const url = '/order/erp/orderStages/export';
  6471 + function request(): Promise<GetOrderErpOrderStagesExportResponseSuccess> {
6337 6472 return requester(request.url, {
6338 6473 method: request.method,
6339   - ...option,
6340   - }) as unknown as Promise<PostOrderErpRolesAllResponseSuccess>;
  6474 + }) as unknown as Promise<GetOrderErpOrderStagesExportResponseSuccess>;
6341 6475 }
6342 6476  
6343 6477 /** http method */
... ... @@ -6347,22 +6481,22 @@ export const postOrderErpRolesAll = /* #__PURE__ */ (() =&gt; {
6347 6481 return request;
6348 6482 })();
6349 6483  
6350   -/** @description request parameter type for postOrderErpRolesAuthMenu */
6351   -export interface PostOrderErpRolesAuthMenuOption {
  6484 +/** @description request parameter type for postOrderErpOrderStagesImport */
  6485 +export interface PostOrderErpOrderStagesImportOption {
6352 6486 /**
6353 6487 * @description
6354   - * roleVO
  6488 + * file
6355 6489 */
6356   - body: {
  6490 + formData: {
6357 6491 /**
6358 6492 @description
6359   - roleVO */
6360   - roleVO: AdminAuthRoleVO;
  6493 + file */
  6494 + file: File;
6361 6495 };
6362 6496 }
6363 6497  
6364   -/** @description response type for postOrderErpRolesAuthMenu */
6365   -export interface PostOrderErpRolesAuthMenuResponse {
  6498 +/** @description response type for postOrderErpOrderStagesImport */
  6499 +export interface PostOrderErpOrderStagesImportResponse {
6366 6500 /**
6367 6501 * @description
6368 6502 * OK
... ... @@ -6390,25 +6524,25 @@ export interface PostOrderErpRolesAuthMenuResponse {
6390 6524 404: any;
6391 6525 }
6392 6526  
6393   -export type PostOrderErpRolesAuthMenuResponseSuccess =
6394   - PostOrderErpRolesAuthMenuResponse[200];
  6527 +export type PostOrderErpOrderStagesImportResponseSuccess =
  6528 + PostOrderErpOrderStagesImportResponse[200];
6395 6529 /**
6396 6530 * @description
6397   - * 授权角色菜单
6398   - * @tags 系统:角色管理
  6531 + * 导入分期账单
  6532 + * @tags order-stages-controller
6399 6533 * @produces *
6400   - * @consumes application/json
  6534 + * @consumes multipart/form-data
6401 6535 */
6402   -export const postOrderErpRolesAuthMenu = /* #__PURE__ */ (() => {
  6536 +export const postOrderErpOrderStagesImport = /* #__PURE__ */ (() => {
6403 6537 const method = 'post';
6404   - const url = '/order/erp/roles/auth_menu';
  6538 + const url = '/order/erp/orderStages/import';
6405 6539 function request(
6406   - option: PostOrderErpRolesAuthMenuOption,
6407   - ): Promise<PostOrderErpRolesAuthMenuResponseSuccess> {
  6540 + option: PostOrderErpOrderStagesImportOption,
  6541 + ): Promise<PostOrderErpOrderStagesImportResponseSuccess> {
6408 6542 return requester(request.url, {
6409 6543 method: request.method,
6410 6544 ...option,
6411   - }) as unknown as Promise<PostOrderErpRolesAuthMenuResponseSuccess>;
  6545 + }) as unknown as Promise<PostOrderErpOrderStagesImportResponseSuccess>;
6412 6546 }
6413 6547  
6414 6548 /** http method */
... ... @@ -6418,22 +6552,8 @@ export const postOrderErpRolesAuthMenu = /* #__PURE__ */ (() =&gt; {
6418 6552 return request;
6419 6553 })();
6420 6554  
6421   -/** @description request parameter type for postOrderErpRolesDelete */
6422   -export interface PostOrderErpRolesDeleteOption {
6423   - /**
6424   - * @description
6425   - * queryVO
6426   - */
6427   - body: {
6428   - /**
6429   - @description
6430   - queryVO */
6431   - queryVO: AdminRoleQueryVO;
6432   - };
6433   -}
6434   -
6435   -/** @description response type for postOrderErpRolesDelete */
6436   -export interface PostOrderErpRolesDeleteResponse {
  6555 +/** @description response type for getOrderErpOrderStagesListAll */
  6556 +export interface GetOrderErpOrderStagesListAllResponse {
6437 6557 /**
6438 6558 * @description
6439 6559 * OK
... ... @@ -6441,11 +6561,6 @@ export interface PostOrderErpRolesDeleteResponse {
6441 6561 200: ServerResult;
6442 6562 /**
6443 6563 * @description
6444   - * Created
6445   - */
6446   - 201: any;
6447   - /**
6448   - * @description
6449 6564 * Unauthorized
6450 6565 */
6451 6566 401: any;
... ... @@ -6461,25 +6576,21 @@ export interface PostOrderErpRolesDeleteResponse {
6461 6576 404: any;
6462 6577 }
6463 6578  
6464   -export type PostOrderErpRolesDeleteResponseSuccess =
6465   - PostOrderErpRolesDeleteResponse[200];
  6579 +export type GetOrderErpOrderStagesListAllResponseSuccess =
  6580 + GetOrderErpOrderStagesListAllResponse[200];
6466 6581 /**
6467 6582 * @description
6468   - * 删除角色
6469   - * @tags 系统:角色管理
  6583 + * 查询所有分期账单
  6584 + * @tags order-stages-controller
6470 6585 * @produces *
6471   - * @consumes application/json
6472 6586 */
6473   -export const postOrderErpRolesDelete = /* #__PURE__ */ (() => {
6474   - const method = 'post';
6475   - const url = '/order/erp/roles/delete';
6476   - function request(
6477   - option: PostOrderErpRolesDeleteOption,
6478   - ): Promise<PostOrderErpRolesDeleteResponseSuccess> {
  6587 +export const getOrderErpOrderStagesListAll = /* #__PURE__ */ (() => {
  6588 + const method = 'get';
  6589 + const url = '/order/erp/orderStages/listAll';
  6590 + function request(): Promise<GetOrderErpOrderStagesListAllResponseSuccess> {
6479 6591 return requester(request.url, {
6480 6592 method: request.method,
6481   - ...option,
6482   - }) as unknown as Promise<PostOrderErpRolesDeleteResponseSuccess>;
  6593 + }) as unknown as Promise<GetOrderErpOrderStagesListAllResponseSuccess>;
6483 6594 }
6484 6595  
6485 6596 /** http method */
... ... @@ -6489,22 +6600,22 @@ export const postOrderErpRolesDelete = /* #__PURE__ */ (() =&gt; {
6489 6600 return request;
6490 6601 })();
6491 6602  
6492   -/** @description request parameter type for postOrderErpRolesDetail */
6493   -export interface PostOrderErpRolesDetailOption {
  6603 +/** @description request parameter type for postOrderErpOrderStagesSaveOrUpdate */
  6604 +export interface PostOrderErpOrderStagesSaveOrUpdateOption {
6494 6605 /**
6495 6606 * @description
6496   - * queryVO
  6607 + * orderStagesFromDo
6497 6608 */
6498 6609 body: {
6499 6610 /**
6500 6611 @description
6501   - queryVO */
6502   - queryVO: AdminRoleQueryVO;
  6612 + orderStagesFromDo */
  6613 + orderStagesFromDo: OrderStagesFromDo;
6503 6614 };
6504 6615 }
6505 6616  
6506   -/** @description response type for postOrderErpRolesDetail */
6507   -export interface PostOrderErpRolesDetailResponse {
  6617 +/** @description response type for postOrderErpOrderStagesSaveOrUpdate */
  6618 +export interface PostOrderErpOrderStagesSaveOrUpdateResponse {
6508 6619 /**
6509 6620 * @description
6510 6621 * OK
... ... @@ -6532,25 +6643,25 @@ export interface PostOrderErpRolesDetailResponse {
6532 6643 404: any;
6533 6644 }
6534 6645  
6535   -export type PostOrderErpRolesDetailResponseSuccess =
6536   - PostOrderErpRolesDetailResponse[200];
  6646 +export type PostOrderErpOrderStagesSaveOrUpdateResponseSuccess =
  6647 + PostOrderErpOrderStagesSaveOrUpdateResponse[200];
6537 6648 /**
6538 6649 * @description
6539   - * 获取单个role
6540   - * @tags 系统:角色管理
  6650 + * 添加或者修改分期账单
  6651 + * @tags order-stages-controller
6541 6652 * @produces *
6542 6653 * @consumes application/json
6543 6654 */
6544   -export const postOrderErpRolesDetail = /* #__PURE__ */ (() => {
  6655 +export const postOrderErpOrderStagesSaveOrUpdate = /* #__PURE__ */ (() => {
6545 6656 const method = 'post';
6546   - const url = '/order/erp/roles/detail';
  6657 + const url = '/order/erp/orderStages/saveOrUpdate';
6547 6658 function request(
6548   - option: PostOrderErpRolesDetailOption,
6549   - ): Promise<PostOrderErpRolesDetailResponseSuccess> {
  6659 + option: PostOrderErpOrderStagesSaveOrUpdateOption,
  6660 + ): Promise<PostOrderErpOrderStagesSaveOrUpdateResponseSuccess> {
6550 6661 return requester(request.url, {
6551 6662 method: request.method,
6552 6663 ...option,
6553   - }) as unknown as Promise<PostOrderErpRolesDetailResponseSuccess>;
  6664 + }) as unknown as Promise<PostOrderErpOrderStagesSaveOrUpdateResponseSuccess>;
6554 6665 }
6555 6666  
6556 6667 /** http method */
... ... @@ -6560,22 +6671,22 @@ export const postOrderErpRolesDetail = /* #__PURE__ */ (() =&gt; {
6560 6671 return request;
6561 6672 })();
6562 6673  
6563   -/** @description request parameter type for postOrderErpRolesEdit */
6564   -export interface PostOrderErpRolesEditOption {
  6674 +/** @description request parameter type for postOrderErpOrderStagesSearch */
  6675 +export interface PostOrderErpOrderStagesSearchOption {
6565 6676 /**
6566 6677 * @description
6567   - * roleVO
  6678 + * orderStagesSelDo
6568 6679 */
6569 6680 body: {
6570 6681 /**
6571 6682 @description
6572   - roleVO */
6573   - roleVO: AdminRoleVO;
  6683 + orderStagesSelDo */
  6684 + orderStagesSelDo: OrderStagesSelDo;
6574 6685 };
6575 6686 }
6576 6687  
6577   -/** @description response type for postOrderErpRolesEdit */
6578   -export interface PostOrderErpRolesEditResponse {
  6688 +/** @description response type for postOrderErpOrderStagesSearch */
  6689 +export interface PostOrderErpOrderStagesSearchResponse {
6579 6690 /**
6580 6691 * @description
6581 6692 * OK
... ... @@ -6603,25 +6714,25 @@ export interface PostOrderErpRolesEditResponse {
6603 6714 404: any;
6604 6715 }
6605 6716  
6606   -export type PostOrderErpRolesEditResponseSuccess =
6607   - PostOrderErpRolesEditResponse[200];
  6717 +export type PostOrderErpOrderStagesSearchResponseSuccess =
  6718 + PostOrderErpOrderStagesSearchResponse[200];
6608 6719 /**
6609 6720 * @description
6610   - * 修改角色
6611   - * @tags 系统:角色管理
  6721 + * 条件搜索分期账单
  6722 + * @tags order-stages-controller
6612 6723 * @produces *
6613 6724 * @consumes application/json
6614 6725 */
6615   -export const postOrderErpRolesEdit = /* #__PURE__ */ (() => {
  6726 +export const postOrderErpOrderStagesSearch = /* #__PURE__ */ (() => {
6616 6727 const method = 'post';
6617   - const url = '/order/erp/roles/edit';
  6728 + const url = '/order/erp/orderStages/search';
6618 6729 function request(
6619   - option: PostOrderErpRolesEditOption,
6620   - ): Promise<PostOrderErpRolesEditResponseSuccess> {
  6730 + option: PostOrderErpOrderStagesSearchOption,
  6731 + ): Promise<PostOrderErpOrderStagesSearchResponseSuccess> {
6621 6732 return requester(request.url, {
6622 6733 method: request.method,
6623 6734 ...option,
6624   - }) as unknown as Promise<PostOrderErpRolesEditResponseSuccess>;
  6735 + }) as unknown as Promise<PostOrderErpOrderStagesSearchResponseSuccess>;
6625 6736 }
6626 6737  
6627 6738 /** http method */
... ... @@ -6631,22 +6742,22 @@ export const postOrderErpRolesEdit = /* #__PURE__ */ (() =&gt; {
6631 6742 return request;
6632 6743 })();
6633 6744  
6634   -/** @description request parameter type for postOrderErpRolesListByPage */
6635   -export interface PostOrderErpRolesListByPageOption {
  6745 +/** @description request parameter type for postOrderErpOrderStagesUpload */
  6746 +export interface PostOrderErpOrderStagesUploadOption {
6636 6747 /**
6637 6748 * @description
6638   - * queryVO
  6749 + * file
6639 6750 */
6640   - body: {
  6751 + formData: {
6641 6752 /**
6642 6753 @description
6643   - queryVO */
6644   - queryVO: AdminRoleQueryVO;
  6754 + file */
  6755 + file: File;
6645 6756 };
6646 6757 }
6647 6758  
6648   -/** @description response type for postOrderErpRolesListByPage */
6649   -export interface PostOrderErpRolesListByPageResponse {
  6759 +/** @description response type for postOrderErpOrderStagesUpload */
  6760 +export interface PostOrderErpOrderStagesUploadResponse {
6650 6761 /**
6651 6762 * @description
6652 6763 * OK
... ... @@ -6674,25 +6785,25 @@ export interface PostOrderErpRolesListByPageResponse {
6674 6785 404: any;
6675 6786 }
6676 6787  
6677   -export type PostOrderErpRolesListByPageResponseSuccess =
6678   - PostOrderErpRolesListByPageResponse[200];
  6788 +export type PostOrderErpOrderStagesUploadResponseSuccess =
  6789 + PostOrderErpOrderStagesUploadResponse[200];
6679 6790 /**
6680 6791 * @description
6681   - * 查询角色
6682   - * @tags 系统:角色管理
  6792 + * 合同文件上传
  6793 + * @tags order-stages-controller
6683 6794 * @produces *
6684   - * @consumes application/json
  6795 + * @consumes multipart/form-data
6685 6796 */
6686   -export const postOrderErpRolesListByPage = /* #__PURE__ */ (() => {
  6797 +export const postOrderErpOrderStagesUpload = /* #__PURE__ */ (() => {
6687 6798 const method = 'post';
6688   - const url = '/order/erp/roles/list_by_page';
  6799 + const url = '/order/erp/orderStages/upload';
6689 6800 function request(
6690   - option: PostOrderErpRolesListByPageOption,
6691   - ): Promise<PostOrderErpRolesListByPageResponseSuccess> {
  6801 + option: PostOrderErpOrderStagesUploadOption,
  6802 + ): Promise<PostOrderErpOrderStagesUploadResponseSuccess> {
6692 6803 return requester(request.url, {
6693 6804 method: request.method,
6694 6805 ...option,
6695   - }) as unknown as Promise<PostOrderErpRolesListByPageResponseSuccess>;
  6806 + }) as unknown as Promise<PostOrderErpOrderStagesUploadResponseSuccess>;
6696 6807 }
6697 6808  
6698 6809 /** http method */
... ... @@ -6702,22 +6813,22 @@ export const postOrderErpRolesListByPage = /* #__PURE__ */ (() =&gt; {
6702 6813 return request;
6703 6814 })();
6704 6815  
6705   -/** @description request parameter type for postOrderErpUsersAdd */
6706   -export interface PostOrderErpUsersAddOption {
  6816 +/** @description request parameter type for postOrderErpOrderStagesPayWaySaveOrUpdate */
  6817 +export interface PostOrderErpOrderStagesPayWaySaveOrUpdateOption {
6707 6818 /**
6708 6819 * @description
6709   - * userVO
  6820 + * orderStagesPayWayList
6710 6821 */
6711 6822 body: {
6712 6823 /**
6713 6824 @description
6714   - userVO */
6715   - userVO: AdminUserVO;
  6825 + orderStagesPayWayList */
  6826 + orderStagesPayWayList: Array<OrderStagesPayWay>;
6716 6827 };
6717 6828 }
6718 6829  
6719   -/** @description response type for postOrderErpUsersAdd */
6720   -export interface PostOrderErpUsersAddResponse {
  6830 +/** @description response type for postOrderErpOrderStagesPayWaySaveOrUpdate */
  6831 +export interface PostOrderErpOrderStagesPayWaySaveOrUpdateResponse {
6721 6832 /**
6722 6833 * @description
6723 6834 * OK
... ... @@ -6745,50 +6856,51 @@ export interface PostOrderErpUsersAddResponse {
6745 6856 404: any;
6746 6857 }
6747 6858  
6748   -export type PostOrderErpUsersAddResponseSuccess =
6749   - PostOrderErpUsersAddResponse[200];
  6859 +export type PostOrderErpOrderStagesPayWaySaveOrUpdateResponseSuccess =
  6860 + PostOrderErpOrderStagesPayWaySaveOrUpdateResponse[200];
6750 6861 /**
6751 6862 * @description
6752   - * 新增用户
6753   - * @tags 系统:用户管理
  6863 + * 修改或者保存
  6864 + * @tags order-stages-pay-way-controller
6754 6865 * @produces *
6755 6866 * @consumes application/json
6756 6867 */
6757   -export const postOrderErpUsersAdd = /* #__PURE__ */ (() => {
6758   - const method = 'post';
6759   - const url = '/order/erp/users/add';
6760   - function request(
6761   - option: PostOrderErpUsersAddOption,
6762   - ): Promise<PostOrderErpUsersAddResponseSuccess> {
6763   - return requester(request.url, {
6764   - method: request.method,
6765   - ...option,
6766   - }) as unknown as Promise<PostOrderErpUsersAddResponseSuccess>;
6767   - }
  6868 +export const postOrderErpOrderStagesPayWaySaveOrUpdate =
  6869 + /* #__PURE__ */ (() => {
  6870 + const method = 'post';
  6871 + const url = '/order/erp/orderStagesPayWay/saveOrUpdate';
  6872 + function request(
  6873 + option: PostOrderErpOrderStagesPayWaySaveOrUpdateOption,
  6874 + ): Promise<PostOrderErpOrderStagesPayWaySaveOrUpdateResponseSuccess> {
  6875 + return requester(request.url, {
  6876 + method: request.method,
  6877 + ...option,
  6878 + }) as unknown as Promise<PostOrderErpOrderStagesPayWaySaveOrUpdateResponseSuccess>;
  6879 + }
6768 6880  
6769   - /** http method */
6770   - request.method = method;
6771   - /** request url */
6772   - request.url = url;
6773   - return request;
6774   -})();
  6881 + /** http method */
  6882 + request.method = method;
  6883 + /** request url */
  6884 + request.url = url;
  6885 + return request;
  6886 + })();
6775 6887  
6776   -/** @description request parameter type for postOrderErpUsersAuthRole */
6777   -export interface PostOrderErpUsersAuthRoleOption {
  6888 +/** @description request parameter type for postOrderErpOrderStagesPayWaySelect */
  6889 +export interface PostOrderErpOrderStagesPayWaySelectOption {
6778 6890 /**
6779 6891 * @description
6780   - * userVO
  6892 + * orderStagesPayWayDo
6781 6893 */
6782 6894 body: {
6783 6895 /**
6784 6896 @description
6785   - userVO */
6786   - userVO: AdminAuthUserVO;
  6897 + orderStagesPayWayDo */
  6898 + orderStagesPayWayDo: OrderStagesPayWayDo;
6787 6899 };
6788 6900 }
6789 6901  
6790   -/** @description response type for postOrderErpUsersAuthRole */
6791   -export interface PostOrderErpUsersAuthRoleResponse {
  6902 +/** @description response type for postOrderErpOrderStagesPayWaySelect */
  6903 +export interface PostOrderErpOrderStagesPayWaySelectResponse {
6792 6904 /**
6793 6905 * @description
6794 6906 * OK
... ... @@ -6816,25 +6928,25 @@ export interface PostOrderErpUsersAuthRoleResponse {
6816 6928 404: any;
6817 6929 }
6818 6930  
6819   -export type PostOrderErpUsersAuthRoleResponseSuccess =
6820   - PostOrderErpUsersAuthRoleResponse[200];
  6931 +export type PostOrderErpOrderStagesPayWaySelectResponseSuccess =
  6932 + PostOrderErpOrderStagesPayWaySelectResponse[200];
6821 6933 /**
6822 6934 * @description
6823   - * 授权角色
6824   - * @tags 系统:用户管理
  6935 + * 查询该的分期比例
  6936 + * @tags order-stages-pay-way-controller
6825 6937 * @produces *
6826 6938 * @consumes application/json
6827 6939 */
6828   -export const postOrderErpUsersAuthRole = /* #__PURE__ */ (() => {
  6940 +export const postOrderErpOrderStagesPayWaySelect = /* #__PURE__ */ (() => {
6829 6941 const method = 'post';
6830   - const url = '/order/erp/users/auth_role';
  6942 + const url = '/order/erp/orderStagesPayWay/select';
6831 6943 function request(
6832   - option: PostOrderErpUsersAuthRoleOption,
6833   - ): Promise<PostOrderErpUsersAuthRoleResponseSuccess> {
  6944 + option: PostOrderErpOrderStagesPayWaySelectOption,
  6945 + ): Promise<PostOrderErpOrderStagesPayWaySelectResponseSuccess> {
6834 6946 return requester(request.url, {
6835 6947 method: request.method,
6836 6948 ...option,
6837   - }) as unknown as Promise<PostOrderErpUsersAuthRoleResponseSuccess>;
  6949 + }) as unknown as Promise<PostOrderErpOrderStagesPayWaySelectResponseSuccess>;
6838 6950 }
6839 6951  
6840 6952 /** http method */
... ... @@ -6844,22 +6956,22 @@ export const postOrderErpUsersAuthRole = /* #__PURE__ */ (() =&gt; {
6844 6956 return request;
6845 6957 })();
6846 6958  
6847   -/** @description request parameter type for postOrderErpUsersDelete */
6848   -export interface PostOrderErpUsersDeleteOption {
  6959 +/** @description request parameter type for postOrderErpOrderStagesPayWayUploadForPayWay */
  6960 +export interface PostOrderErpOrderStagesPayWayUploadForPayWayOption {
6849 6961 /**
6850 6962 * @description
6851   - * queryVO
  6963 + * orderStagesPayWayFileDo
6852 6964 */
6853 6965 body: {
6854 6966 /**
6855 6967 @description
6856   - queryVO */
6857   - queryVO: AdminUserQueryVO;
  6968 + orderStagesPayWayFileDo */
  6969 + orderStagesPayWayFileDo: OrderStagesPayWayFileDo;
6858 6970 };
6859 6971 }
6860 6972  
6861   -/** @description response type for postOrderErpUsersDelete */
6862   -export interface PostOrderErpUsersDeleteResponse {
  6973 +/** @description response type for postOrderErpOrderStagesPayWayUploadForPayWay */
  6974 +export interface PostOrderErpOrderStagesPayWayUploadForPayWayResponse {
6863 6975 /**
6864 6976 * @description
6865 6977 * OK
... ... @@ -6887,50 +6999,51 @@ export interface PostOrderErpUsersDeleteResponse {
6887 6999 404: any;
6888 7000 }
6889 7001  
6890   -export type PostOrderErpUsersDeleteResponseSuccess =
6891   - PostOrderErpUsersDeleteResponse[200];
  7002 +export type PostOrderErpOrderStagesPayWayUploadForPayWayResponseSuccess =
  7003 + PostOrderErpOrderStagesPayWayUploadForPayWayResponse[200];
6892 7004 /**
6893 7005 * @description
6894   - * 删除用户
6895   - * @tags 系统:用户管理
  7006 + * 付款合同文件上传
  7007 + * @tags order-stages-pay-way-controller
6896 7008 * @produces *
6897 7009 * @consumes application/json
6898 7010 */
6899   -export const postOrderErpUsersDelete = /* #__PURE__ */ (() => {
6900   - const method = 'post';
6901   - const url = '/order/erp/users/delete';
6902   - function request(
6903   - option: PostOrderErpUsersDeleteOption,
6904   - ): Promise<PostOrderErpUsersDeleteResponseSuccess> {
6905   - return requester(request.url, {
6906   - method: request.method,
6907   - ...option,
6908   - }) as unknown as Promise<PostOrderErpUsersDeleteResponseSuccess>;
6909   - }
  7011 +export const postOrderErpOrderStagesPayWayUploadForPayWay =
  7012 + /* #__PURE__ */ (() => {
  7013 + const method = 'post';
  7014 + const url = '/order/erp/orderStagesPayWay/uploadForPayWay';
  7015 + function request(
  7016 + option: PostOrderErpOrderStagesPayWayUploadForPayWayOption,
  7017 + ): Promise<PostOrderErpOrderStagesPayWayUploadForPayWayResponseSuccess> {
  7018 + return requester(request.url, {
  7019 + method: request.method,
  7020 + ...option,
  7021 + }) as unknown as Promise<PostOrderErpOrderStagesPayWayUploadForPayWayResponseSuccess>;
  7022 + }
6910 7023  
6911   - /** http method */
6912   - request.method = method;
6913   - /** request url */
6914   - request.url = url;
6915   - return request;
6916   -})();
  7024 + /** http method */
  7025 + request.method = method;
  7026 + /** request url */
  7027 + request.url = url;
  7028 + return request;
  7029 + })();
6917 7030  
6918   -/** @description request parameter type for postOrderErpUsersEdit */
6919   -export interface PostOrderErpUsersEditOption {
  7031 +/** @description request parameter type for postOrderErpProfitAnalysis */
  7032 +export interface PostOrderErpProfitAnalysisOption {
6920 7033 /**
6921 7034 * @description
6922   - * userVO
  7035 + * orderProfitAnalysisVo
6923 7036 */
6924 7037 body: {
6925 7038 /**
6926 7039 @description
6927   - userVO */
6928   - userVO: AdminUserVO;
  7040 + orderProfitAnalysisVo */
  7041 + orderProfitAnalysisVo: OrderProfitAnalysisVo;
6929 7042 };
6930 7043 }
6931 7044  
6932   -/** @description response type for postOrderErpUsersEdit */
6933   -export interface PostOrderErpUsersEditResponse {
  7045 +/** @description response type for postOrderErpProfitAnalysis */
  7046 +export interface PostOrderErpProfitAnalysisResponse {
6934 7047 /**
6935 7048 * @description
6936 7049 * OK
... ... @@ -6958,25 +7071,25 @@ export interface PostOrderErpUsersEditResponse {
6958 7071 404: any;
6959 7072 }
6960 7073  
6961   -export type PostOrderErpUsersEditResponseSuccess =
6962   - PostOrderErpUsersEditResponse[200];
  7074 +export type PostOrderErpProfitAnalysisResponseSuccess =
  7075 + PostOrderErpProfitAnalysisResponse[200];
6963 7076 /**
6964 7077 * @description
6965   - * 修改用户
6966   - * @tags 系统:用户管理
  7078 + * analysis
  7079 + * @tags order-profit-controller
6967 7080 * @produces *
6968 7081 * @consumes application/json
6969 7082 */
6970   -export const postOrderErpUsersEdit = /* #__PURE__ */ (() => {
  7083 +export const postOrderErpProfitAnalysis = /* #__PURE__ */ (() => {
6971 7084 const method = 'post';
6972   - const url = '/order/erp/users/edit';
  7085 + const url = '/order/erp/profit/analysis';
6973 7086 function request(
6974   - option: PostOrderErpUsersEditOption,
6975   - ): Promise<PostOrderErpUsersEditResponseSuccess> {
  7087 + option: PostOrderErpProfitAnalysisOption,
  7088 + ): Promise<PostOrderErpProfitAnalysisResponseSuccess> {
6976 7089 return requester(request.url, {
6977 7090 method: request.method,
6978 7091 ...option,
6979   - }) as unknown as Promise<PostOrderErpUsersEditResponseSuccess>;
  7092 + }) as unknown as Promise<PostOrderErpProfitAnalysisResponseSuccess>;
6980 7093 }
6981 7094  
6982 7095 /** http method */
... ... @@ -6986,22 +7099,22 @@ export const postOrderErpUsersEdit = /* #__PURE__ */ (() =&gt; {
6986 7099 return request;
6987 7100 })();
6988 7101  
6989   -/** @description request parameter type for postOrderErpUsersListByPage */
6990   -export interface PostOrderErpUsersListByPageOption {
  7102 +/** @description request parameter type for postOrderErpRolesAdd */
  7103 +export interface PostOrderErpRolesAddOption {
6991 7104 /**
6992 7105 * @description
6993   - * queryVO
  7106 + * roleVO
6994 7107 */
6995 7108 body: {
6996 7109 /**
6997 7110 @description
6998   - queryVO */
6999   - queryVO: AdminUserQueryVO;
  7111 + roleVO */
  7112 + roleVO: AdminRoleVO;
7000 7113 };
7001 7114 }
7002 7115  
7003   -/** @description response type for postOrderErpUsersListByPage */
7004   -export interface PostOrderErpUsersListByPageResponse {
  7116 +/** @description response type for postOrderErpRolesAdd */
  7117 +export interface PostOrderErpRolesAddResponse {
7005 7118 /**
7006 7119 * @description
7007 7120 * OK
... ... @@ -7029,25 +7142,25 @@ export interface PostOrderErpUsersListByPageResponse {
7029 7142 404: any;
7030 7143 }
7031 7144  
7032   -export type PostOrderErpUsersListByPageResponseSuccess =
7033   - PostOrderErpUsersListByPageResponse[200];
  7145 +export type PostOrderErpRolesAddResponseSuccess =
  7146 + PostOrderErpRolesAddResponse[200];
7034 7147 /**
7035 7148 * @description
7036   - * 查询用户
7037   - * @tags 系统:用户管理
  7149 + * 新增角色
  7150 + * @tags 系统:角色管理
7038 7151 * @produces *
7039 7152 * @consumes application/json
7040 7153 */
7041   -export const postOrderErpUsersListByPage = /* #__PURE__ */ (() => {
  7154 +export const postOrderErpRolesAdd = /* #__PURE__ */ (() => {
7042 7155 const method = 'post';
7043   - const url = '/order/erp/users/list_by_page';
  7156 + const url = '/order/erp/roles/add';
7044 7157 function request(
7045   - option: PostOrderErpUsersListByPageOption,
7046   - ): Promise<PostOrderErpUsersListByPageResponseSuccess> {
  7158 + option: PostOrderErpRolesAddOption,
  7159 + ): Promise<PostOrderErpRolesAddResponseSuccess> {
7047 7160 return requester(request.url, {
7048 7161 method: request.method,
7049 7162 ...option,
7050   - }) as unknown as Promise<PostOrderErpUsersListByPageResponseSuccess>;
  7163 + }) as unknown as Promise<PostOrderErpRolesAddResponseSuccess>;
7051 7164 }
7052 7165  
7053 7166 /** http method */
... ... @@ -7057,22 +7170,22 @@ export const postOrderErpUsersListByPage = /* #__PURE__ */ (() =&gt; {
7057 7170 return request;
7058 7171 })();
7059 7172  
7060   -/** @description request parameter type for postOrderErpUsersReset */
7061   -export interface PostOrderErpUsersResetOption {
  7173 +/** @description request parameter type for postOrderErpRolesAll */
  7174 +export interface PostOrderErpRolesAllOption {
7062 7175 /**
7063 7176 * @description
7064   - * resetPwdVO
  7177 + * queryVO
7065 7178 */
7066 7179 body: {
7067 7180 /**
7068 7181 @description
7069   - resetPwdVO */
7070   - resetPwdVO: ResetPwdVO;
  7182 + queryVO */
  7183 + queryVO: AdminRoleQueryVO;
7071 7184 };
7072 7185 }
7073 7186  
7074   -/** @description response type for postOrderErpUsersReset */
7075   -export interface PostOrderErpUsersResetResponse {
  7187 +/** @description response type for postOrderErpRolesAll */
  7188 +export interface PostOrderErpRolesAllResponse {
7076 7189 /**
7077 7190 * @description
7078 7191 * OK
... ... @@ -7100,25 +7213,25 @@ export interface PostOrderErpUsersResetResponse {
7100 7213 404: any;
7101 7214 }
7102 7215  
7103   -export type PostOrderErpUsersResetResponseSuccess =
7104   - PostOrderErpUsersResetResponse[200];
  7216 +export type PostOrderErpRolesAllResponseSuccess =
  7217 + PostOrderErpRolesAllResponse[200];
7105 7218 /**
7106 7219 * @description
7107   - * 重置密码
7108   - * @tags 系统:用户管理
  7220 + * 返回全部的角色
  7221 + * @tags 系统:角色管理
7109 7222 * @produces *
7110 7223 * @consumes application/json
7111 7224 */
7112   -export const postOrderErpUsersReset = /* #__PURE__ */ (() => {
  7225 +export const postOrderErpRolesAll = /* #__PURE__ */ (() => {
7113 7226 const method = 'post';
7114   - const url = '/order/erp/users/reset';
  7227 + const url = '/order/erp/roles/all';
7115 7228 function request(
7116   - option: PostOrderErpUsersResetOption,
7117   - ): Promise<PostOrderErpUsersResetResponseSuccess> {
  7229 + option: PostOrderErpRolesAllOption,
  7230 + ): Promise<PostOrderErpRolesAllResponseSuccess> {
7118 7231 return requester(request.url, {
7119 7232 method: request.method,
7120 7233 ...option,
7121   - }) as unknown as Promise<PostOrderErpUsersResetResponseSuccess>;
  7234 + }) as unknown as Promise<PostOrderErpRolesAllResponseSuccess>;
7122 7235 }
7123 7236  
7124 7237 /** http method */
... ... @@ -7128,22 +7241,22 @@ export const postOrderErpUsersReset = /* #__PURE__ */ (() =&gt; {
7128 7241 return request;
7129 7242 })();
7130 7243  
7131   -/** @description request parameter type for postOrderErpUsersUpdatePass */
7132   -export interface PostOrderErpUsersUpdatePassOption {
  7244 +/** @description request parameter type for postOrderErpRolesAuthMenu */
  7245 +export interface PostOrderErpRolesAuthMenuOption {
7133 7246 /**
7134 7247 * @description
7135   - * pwdVO
  7248 + * roleVO
7136 7249 */
7137 7250 body: {
7138 7251 /**
7139 7252 @description
7140   - pwdVO */
7141   - pwdVO: UpdatePwdVO;
  7253 + roleVO */
  7254 + roleVO: AdminAuthRoleVO;
7142 7255 };
7143 7256 }
7144 7257  
7145   -/** @description response type for postOrderErpUsersUpdatePass */
7146   -export interface PostOrderErpUsersUpdatePassResponse {
  7258 +/** @description response type for postOrderErpRolesAuthMenu */
  7259 +export interface PostOrderErpRolesAuthMenuResponse {
7147 7260 /**
7148 7261 * @description
7149 7262 * OK
... ... @@ -7171,25 +7284,25 @@ export interface PostOrderErpUsersUpdatePassResponse {
7171 7284 404: any;
7172 7285 }
7173 7286  
7174   -export type PostOrderErpUsersUpdatePassResponseSuccess =
7175   - PostOrderErpUsersUpdatePassResponse[200];
  7287 +export type PostOrderErpRolesAuthMenuResponseSuccess =
  7288 + PostOrderErpRolesAuthMenuResponse[200];
7176 7289 /**
7177 7290 * @description
7178   - * 修改密码
7179   - * @tags 系统:用户管理
  7291 + * 授权角色菜单
  7292 + * @tags 系统:角色管理
7180 7293 * @produces *
7181 7294 * @consumes application/json
7182 7295 */
7183   -export const postOrderErpUsersUpdatePass = /* #__PURE__ */ (() => {
  7296 +export const postOrderErpRolesAuthMenu = /* #__PURE__ */ (() => {
7184 7297 const method = 'post';
7185   - const url = '/order/erp/users/update_pass';
  7298 + const url = '/order/erp/roles/auth_menu';
7186 7299 function request(
7187   - option: PostOrderErpUsersUpdatePassOption,
7188   - ): Promise<PostOrderErpUsersUpdatePassResponseSuccess> {
  7300 + option: PostOrderErpRolesAuthMenuOption,
  7301 + ): Promise<PostOrderErpRolesAuthMenuResponseSuccess> {
7189 7302 return requester(request.url, {
7190 7303 method: request.method,
7191 7304 ...option,
7192   - }) as unknown as Promise<PostOrderErpUsersUpdatePassResponseSuccess>;
  7305 + }) as unknown as Promise<PostOrderErpRolesAuthMenuResponseSuccess>;
7193 7306 }
7194 7307  
7195 7308 /** http method */
... ... @@ -7199,22 +7312,22 @@ export const postOrderErpUsersUpdatePass = /* #__PURE__ */ (() =&gt; {
7199 7312 return request;
7200 7313 })();
7201 7314  
7202   -/** @description request parameter type for postOrderImportImportInvoiceProject */
7203   -export interface PostOrderImportImportInvoiceProjectOption {
  7315 +/** @description request parameter type for postOrderErpRolesDelete */
  7316 +export interface PostOrderErpRolesDeleteOption {
7204 7317 /**
7205 7318 * @description
7206   - * file
  7319 + * queryVO
7207 7320 */
7208   - formData: {
  7321 + body: {
7209 7322 /**
7210 7323 @description
7211   - file */
7212   - file: File;
  7324 + queryVO */
  7325 + queryVO: AdminRoleQueryVO;
7213 7326 };
7214 7327 }
7215 7328  
7216   -/** @description response type for postOrderImportImportInvoiceProject */
7217   -export interface PostOrderImportImportInvoiceProjectResponse {
  7329 +/** @description response type for postOrderErpRolesDelete */
  7330 +export interface PostOrderErpRolesDeleteResponse {
7218 7331 /**
7219 7332 * @description
7220 7333 * OK
... ... @@ -7242,25 +7355,25 @@ export interface PostOrderImportImportInvoiceProjectResponse {
7242 7355 404: any;
7243 7356 }
7244 7357  
7245   -export type PostOrderImportImportInvoiceProjectResponseSuccess =
7246   - PostOrderImportImportInvoiceProjectResponse[200];
  7358 +export type PostOrderErpRolesDeleteResponseSuccess =
  7359 + PostOrderErpRolesDeleteResponse[200];
7247 7360 /**
7248 7361 * @description
7249   - * 导入发票项目
7250   - * @tags 导入
  7362 + * 删除角色
  7363 + * @tags 系统:角色管理
7251 7364 * @produces *
7252   - * @consumes multipart/form-data
  7365 + * @consumes application/json
7253 7366 */
7254   -export const postOrderImportImportInvoiceProject = /* #__PURE__ */ (() => {
  7367 +export const postOrderErpRolesDelete = /* #__PURE__ */ (() => {
7255 7368 const method = 'post';
7256   - const url = '/order/import/importInvoiceProject';
  7369 + const url = '/order/erp/roles/delete';
7257 7370 function request(
7258   - option: PostOrderImportImportInvoiceProjectOption,
7259   - ): Promise<PostOrderImportImportInvoiceProjectResponseSuccess> {
  7371 + option: PostOrderErpRolesDeleteOption,
  7372 + ): Promise<PostOrderErpRolesDeleteResponseSuccess> {
7260 7373 return requester(request.url, {
7261 7374 method: request.method,
7262 7375 ...option,
7263   - }) as unknown as Promise<PostOrderImportImportInvoiceProjectResponseSuccess>;
  7376 + }) as unknown as Promise<PostOrderErpRolesDeleteResponseSuccess>;
7264 7377 }
7265 7378  
7266 7379 /** http method */
... ... @@ -7270,22 +7383,22 @@ export const postOrderImportImportInvoiceProject = /* #__PURE__ */ (() =&gt; {
7270 7383 return request;
7271 7384 })();
7272 7385  
7273   -/** @description request parameter type for postOrderImportImportWeightAndVolume */
7274   -export interface PostOrderImportImportWeightAndVolumeOption {
  7386 +/** @description request parameter type for postOrderErpRolesDetail */
  7387 +export interface PostOrderErpRolesDetailOption {
7275 7388 /**
7276 7389 * @description
7277   - * file
  7390 + * queryVO
7278 7391 */
7279   - formData: {
  7392 + body: {
7280 7393 /**
7281 7394 @description
7282   - file */
7283   - file: File;
  7395 + queryVO */
  7396 + queryVO: AdminRoleQueryVO;
7284 7397 };
7285 7398 }
7286 7399  
7287   -/** @description response type for postOrderImportImportWeightAndVolume */
7288   -export interface PostOrderImportImportWeightAndVolumeResponse {
  7400 +/** @description response type for postOrderErpRolesDetail */
  7401 +export interface PostOrderErpRolesDetailResponse {
7289 7402 /**
7290 7403 * @description
7291 7404 * OK
... ... @@ -7313,25 +7426,25 @@ export interface PostOrderImportImportWeightAndVolumeResponse {
7313 7426 404: any;
7314 7427 }
7315 7428  
7316   -export type PostOrderImportImportWeightAndVolumeResponseSuccess =
7317   - PostOrderImportImportWeightAndVolumeResponse[200];
  7429 +export type PostOrderErpRolesDetailResponseSuccess =
  7430 + PostOrderErpRolesDetailResponse[200];
7318 7431 /**
7319 7432 * @description
7320   - * 导入重量和体积
7321   - * @tags 导入
  7433 + * 获取单个role
  7434 + * @tags 系统:角色管理
7322 7435 * @produces *
7323   - * @consumes multipart/form-data
  7436 + * @consumes application/json
7324 7437 */
7325   -export const postOrderImportImportWeightAndVolume = /* #__PURE__ */ (() => {
  7438 +export const postOrderErpRolesDetail = /* #__PURE__ */ (() => {
7326 7439 const method = 'post';
7327   - const url = '/order/import/importWeightAndVolume';
  7440 + const url = '/order/erp/roles/detail';
7328 7441 function request(
7329   - option: PostOrderImportImportWeightAndVolumeOption,
7330   - ): Promise<PostOrderImportImportWeightAndVolumeResponseSuccess> {
  7442 + option: PostOrderErpRolesDetailOption,
  7443 + ): Promise<PostOrderErpRolesDetailResponseSuccess> {
7331 7444 return requester(request.url, {
7332 7445 method: request.method,
7333 7446 ...option,
7334   - }) as unknown as Promise<PostOrderImportImportWeightAndVolumeResponseSuccess>;
  7447 + }) as unknown as Promise<PostOrderErpRolesDetailResponseSuccess>;
7335 7448 }
7336 7449  
7337 7450 /** http method */
... ... @@ -7341,22 +7454,22 @@ export const postOrderImportImportWeightAndVolume = /* #__PURE__ */ (() =&gt; {
7341 7454 return request;
7342 7455 })();
7343 7456  
7344   -/** @description request parameter type for postPrepaidAudit */
7345   -export interface PostPrepaidAuditOption {
  7457 +/** @description request parameter type for postOrderErpRolesEdit */
  7458 +export interface PostOrderErpRolesEditOption {
7346 7459 /**
7347 7460 * @description
7348   - * request
  7461 + * roleVO
7349 7462 */
7350 7463 body: {
7351 7464 /**
7352 7465 @description
7353   - request */
7354   - request: SalesRechargePrepaymentAuditRequest;
  7466 + roleVO */
  7467 + roleVO: AdminRoleVO;
7355 7468 };
7356 7469 }
7357 7470  
7358   -/** @description response type for postPrepaidAudit */
7359   -export interface PostPrepaidAuditResponse {
  7471 +/** @description response type for postOrderErpRolesEdit */
  7472 +export interface PostOrderErpRolesEditResponse {
7360 7473 /**
7361 7474 * @description
7362 7475 * OK
... ... @@ -7384,24 +7497,25 @@ export interface PostPrepaidAuditResponse {
7384 7497 404: any;
7385 7498 }
7386 7499  
7387   -export type PostPrepaidAuditResponseSuccess = PostPrepaidAuditResponse[200];
  7500 +export type PostOrderErpRolesEditResponseSuccess =
  7501 + PostOrderErpRolesEditResponse[200];
7388 7502 /**
7389 7503 * @description
7390   - * 财务审核
7391   - * @tags prepaid-controller
  7504 + * 修改角色
  7505 + * @tags 系统:角色管理
7392 7506 * @produces *
7393 7507 * @consumes application/json
7394 7508 */
7395   -export const postPrepaidAudit = /* #__PURE__ */ (() => {
  7509 +export const postOrderErpRolesEdit = /* #__PURE__ */ (() => {
7396 7510 const method = 'post';
7397   - const url = '/prepaid/audit';
  7511 + const url = '/order/erp/roles/edit';
7398 7512 function request(
7399   - option: PostPrepaidAuditOption,
7400   - ): Promise<PostPrepaidAuditResponseSuccess> {
  7513 + option: PostOrderErpRolesEditOption,
  7514 + ): Promise<PostOrderErpRolesEditResponseSuccess> {
7401 7515 return requester(request.url, {
7402 7516 method: request.method,
7403 7517 ...option,
7404   - }) as unknown as Promise<PostPrepaidAuditResponseSuccess>;
  7518 + }) as unknown as Promise<PostOrderErpRolesEditResponseSuccess>;
7405 7519 }
7406 7520  
7407 7521 /** http method */
... ... @@ -7411,22 +7525,22 @@ export const postPrepaidAudit = /* #__PURE__ */ (() =&gt; {
7411 7525 return request;
7412 7526 })();
7413 7527  
7414   -/** @description request parameter type for postPrepaidCreate */
7415   -export interface PostPrepaidCreateOption {
  7528 +/** @description request parameter type for postOrderErpRolesListByPage */
  7529 +export interface PostOrderErpRolesListByPageOption {
7416 7530 /**
7417 7531 * @description
7418   - * request
  7532 + * queryVO
7419 7533 */
7420 7534 body: {
7421 7535 /**
7422 7536 @description
7423   - request */
7424   - request: SalesRechargePrepaymentCreateRequest;
  7537 + queryVO */
  7538 + queryVO: AdminRoleQueryVO;
7425 7539 };
7426 7540 }
7427 7541  
7428   -/** @description response type for postPrepaidCreate */
7429   -export interface PostPrepaidCreateResponse {
  7542 +/** @description response type for postOrderErpRolesListByPage */
  7543 +export interface PostOrderErpRolesListByPageResponse {
7430 7544 /**
7431 7545 * @description
7432 7546 * OK
... ... @@ -7454,24 +7568,25 @@ export interface PostPrepaidCreateResponse {
7454 7568 404: any;
7455 7569 }
7456 7570  
7457   -export type PostPrepaidCreateResponseSuccess = PostPrepaidCreateResponse[200];
  7571 +export type PostOrderErpRolesListByPageResponseSuccess =
  7572 + PostOrderErpRolesListByPageResponse[200];
7458 7573 /**
7459 7574 * @description
7460   - * 新增预存
7461   - * @tags prepaid-controller
  7575 + * 查询角色
  7576 + * @tags 系统:角色管理
7462 7577 * @produces *
7463 7578 * @consumes application/json
7464 7579 */
7465   -export const postPrepaidCreate = /* #__PURE__ */ (() => {
  7580 +export const postOrderErpRolesListByPage = /* #__PURE__ */ (() => {
7466 7581 const method = 'post';
7467   - const url = '/prepaid/create';
  7582 + const url = '/order/erp/roles/list_by_page';
7468 7583 function request(
7469   - option: PostPrepaidCreateOption,
7470   - ): Promise<PostPrepaidCreateResponseSuccess> {
  7584 + option: PostOrderErpRolesListByPageOption,
  7585 + ): Promise<PostOrderErpRolesListByPageResponseSuccess> {
7471 7586 return requester(request.url, {
7472 7587 method: request.method,
7473 7588 ...option,
7474   - }) as unknown as Promise<PostPrepaidCreateResponseSuccess>;
  7589 + }) as unknown as Promise<PostOrderErpRolesListByPageResponseSuccess>;
7475 7590 }
7476 7591  
7477 7592 /** http method */
... ... @@ -7481,22 +7596,22 @@ export const postPrepaidCreate = /* #__PURE__ */ (() =&gt; {
7481 7596 return request;
7482 7597 })();
7483 7598  
7484   -/** @description request parameter type for postPrepaidDelete */
7485   -export interface PostPrepaidDeleteOption {
  7599 +/** @description request parameter type for postOrderErpUsersAdd */
  7600 +export interface PostOrderErpUsersAddOption {
7486 7601 /**
7487 7602 * @description
7488   - * request
  7603 + * userVO
7489 7604 */
7490 7605 body: {
7491 7606 /**
7492 7607 @description
7493   - request */
7494   - request: SalesRechargePrepaymentDeleteRequest;
  7608 + userVO */
  7609 + userVO: AdminUserVO;
7495 7610 };
7496 7611 }
7497 7612  
7498   -/** @description response type for postPrepaidDelete */
7499   -export interface PostPrepaidDeleteResponse {
  7613 +/** @description response type for postOrderErpUsersAdd */
  7614 +export interface PostOrderErpUsersAddResponse {
7500 7615 /**
7501 7616 * @description
7502 7617 * OK
... ... @@ -7524,24 +7639,25 @@ export interface PostPrepaidDeleteResponse {
7524 7639 404: any;
7525 7640 }
7526 7641  
7527   -export type PostPrepaidDeleteResponseSuccess = PostPrepaidDeleteResponse[200];
  7642 +export type PostOrderErpUsersAddResponseSuccess =
  7643 + PostOrderErpUsersAddResponse[200];
7528 7644 /**
7529 7645 * @description
7530   - * 删除预存
7531   - * @tags prepaid-controller
  7646 + * 新增用户
  7647 + * @tags 系统:用户管理
7532 7648 * @produces *
7533 7649 * @consumes application/json
7534 7650 */
7535   -export const postPrepaidDelete = /* #__PURE__ */ (() => {
  7651 +export const postOrderErpUsersAdd = /* #__PURE__ */ (() => {
7536 7652 const method = 'post';
7537   - const url = '/prepaid/delete';
  7653 + const url = '/order/erp/users/add';
7538 7654 function request(
7539   - option: PostPrepaidDeleteOption,
7540   - ): Promise<PostPrepaidDeleteResponseSuccess> {
  7655 + option: PostOrderErpUsersAddOption,
  7656 + ): Promise<PostOrderErpUsersAddResponseSuccess> {
7541 7657 return requester(request.url, {
7542 7658 method: request.method,
7543 7659 ...option,
7544   - }) as unknown as Promise<PostPrepaidDeleteResponseSuccess>;
  7660 + }) as unknown as Promise<PostOrderErpUsersAddResponseSuccess>;
7545 7661 }
7546 7662  
7547 7663 /** http method */
... ... @@ -7551,22 +7667,22 @@ export const postPrepaidDelete = /* #__PURE__ */ (() =&gt; {
7551 7667 return request;
7552 7668 })();
7553 7669  
7554   -/** @description request parameter type for postPrepaidList */
7555   -export interface PostPrepaidListOption {
  7670 +/** @description request parameter type for postOrderErpUsersAuthRole */
  7671 +export interface PostOrderErpUsersAuthRoleOption {
7556 7672 /**
7557 7673 * @description
7558   - * request
  7674 + * userVO
7559 7675 */
7560 7676 body: {
7561 7677 /**
7562 7678 @description
7563   - request */
7564   - request: SalesRechargePrepaymentRequest;
  7679 + userVO */
  7680 + userVO: AdminAuthUserVO;
7565 7681 };
7566 7682 }
7567 7683  
7568   -/** @description response type for postPrepaidList */
7569   -export interface PostPrepaidListResponse {
  7684 +/** @description response type for postOrderErpUsersAuthRole */
  7685 +export interface PostOrderErpUsersAuthRoleResponse {
7570 7686 /**
7571 7687 * @description
7572 7688 * OK
... ... @@ -7594,24 +7710,25 @@ export interface PostPrepaidListResponse {
7594 7710 404: any;
7595 7711 }
7596 7712  
7597   -export type PostPrepaidListResponseSuccess = PostPrepaidListResponse[200];
  7713 +export type PostOrderErpUsersAuthRoleResponseSuccess =
  7714 + PostOrderErpUsersAuthRoleResponse[200];
7598 7715 /**
7599 7716 * @description
7600   - * 查询列表
7601   - * @tags prepaid-controller
  7717 + * 授权角色
  7718 + * @tags 系统:用户管理
7602 7719 * @produces *
7603 7720 * @consumes application/json
7604 7721 */
7605   -export const postPrepaidList = /* #__PURE__ */ (() => {
  7722 +export const postOrderErpUsersAuthRole = /* #__PURE__ */ (() => {
7606 7723 const method = 'post';
7607   - const url = '/prepaid/list';
  7724 + const url = '/order/erp/users/auth_role';
7608 7725 function request(
7609   - option: PostPrepaidListOption,
7610   - ): Promise<PostPrepaidListResponseSuccess> {
  7726 + option: PostOrderErpUsersAuthRoleOption,
  7727 + ): Promise<PostOrderErpUsersAuthRoleResponseSuccess> {
7611 7728 return requester(request.url, {
7612 7729 method: request.method,
7613 7730 ...option,
7614   - }) as unknown as Promise<PostPrepaidListResponseSuccess>;
  7731 + }) as unknown as Promise<PostOrderErpUsersAuthRoleResponseSuccess>;
7615 7732 }
7616 7733  
7617 7734 /** http method */
... ... @@ -7621,22 +7738,22 @@ export const postPrepaidList = /* #__PURE__ */ (() =&gt; {
7621 7738 return request;
7622 7739 })();
7623 7740  
7624   -/** @description request parameter type for postPrepaidUpdate */
7625   -export interface PostPrepaidUpdateOption {
  7741 +/** @description request parameter type for postOrderErpUsersDelete */
  7742 +export interface PostOrderErpUsersDeleteOption {
7626 7743 /**
7627 7744 * @description
7628   - * request
  7745 + * queryVO
7629 7746 */
7630 7747 body: {
7631 7748 /**
7632 7749 @description
7633   - request */
7634   - request: SalesRechargePrepaymentUpdateRequest;
  7750 + queryVO */
  7751 + queryVO: AdminUserQueryVO;
7635 7752 };
7636 7753 }
7637 7754  
7638   -/** @description response type for postPrepaidUpdate */
7639   -export interface PostPrepaidUpdateResponse {
  7755 +/** @description response type for postOrderErpUsersDelete */
  7756 +export interface PostOrderErpUsersDeleteResponse {
7640 7757 /**
7641 7758 * @description
7642 7759 * OK
... ... @@ -7664,24 +7781,25 @@ export interface PostPrepaidUpdateResponse {
7664 7781 404: any;
7665 7782 }
7666 7783  
7667   -export type PostPrepaidUpdateResponseSuccess = PostPrepaidUpdateResponse[200];
  7784 +export type PostOrderErpUsersDeleteResponseSuccess =
  7785 + PostOrderErpUsersDeleteResponse[200];
7668 7786 /**
7669 7787 * @description
7670   - * 修改预存
7671   - * @tags prepaid-controller
  7788 + * 删除用户
  7789 + * @tags 系统:用户管理
7672 7790 * @produces *
7673 7791 * @consumes application/json
7674 7792 */
7675   -export const postPrepaidUpdate = /* #__PURE__ */ (() => {
  7793 +export const postOrderErpUsersDelete = /* #__PURE__ */ (() => {
7676 7794 const method = 'post';
7677   - const url = '/prepaid/update';
  7795 + const url = '/order/erp/users/delete';
7678 7796 function request(
7679   - option: PostPrepaidUpdateOption,
7680   - ): Promise<PostPrepaidUpdateResponseSuccess> {
  7797 + option: PostOrderErpUsersDeleteOption,
  7798 + ): Promise<PostOrderErpUsersDeleteResponseSuccess> {
7681 7799 return requester(request.url, {
7682 7800 method: request.method,
7683 7801 ...option,
7684   - }) as unknown as Promise<PostPrepaidUpdateResponseSuccess>;
  7802 + }) as unknown as Promise<PostOrderErpUsersDeleteResponseSuccess>;
7685 7803 }
7686 7804  
7687 7805 /** http method */
... ... @@ -7691,22 +7809,22 @@ export const postPrepaidUpdate = /* #__PURE__ */ (() =&gt; {
7691 7809 return request;
7692 7810 })();
7693 7811  
7694   -/** @description request parameter type for postResearchGroupsAdd */
7695   -export interface PostResearchGroupsAddOption {
  7812 +/** @description request parameter type for postOrderErpUsersEdit */
  7813 +export interface PostOrderErpUsersEditOption {
7696 7814 /**
7697 7815 * @description
7698   - * request
  7816 + * userVO
7699 7817 */
7700 7818 body: {
7701 7819 /**
7702 7820 @description
7703   - request */
7704   - request: ResearchGroupAddRequest;
  7821 + userVO */
  7822 + userVO: AdminUserVO;
7705 7823 };
7706 7824 }
7707 7825  
7708   -/** @description response type for postResearchGroupsAdd */
7709   -export interface PostResearchGroupsAddResponse {
  7826 +/** @description response type for postOrderErpUsersEdit */
  7827 +export interface PostOrderErpUsersEditResponse {
7710 7828 /**
7711 7829 * @description
7712 7830 * OK
... ... @@ -7734,25 +7852,25 @@ export interface PostResearchGroupsAddResponse {
7734 7852 404: any;
7735 7853 }
7736 7854  
7737   -export type PostResearchGroupsAddResponseSuccess =
7738   - PostResearchGroupsAddResponse[200];
  7855 +export type PostOrderErpUsersEditResponseSuccess =
  7856 + PostOrderErpUsersEditResponse[200];
7739 7857 /**
7740 7858 * @description
7741   - * 新增课题组信息
7742   - * @tags research-groups-controller
  7859 + * 修改用户
  7860 + * @tags 系统:用户管理
7743 7861 * @produces *
7744 7862 * @consumes application/json
7745 7863 */
7746   -export const postResearchGroupsAdd = /* #__PURE__ */ (() => {
  7864 +export const postOrderErpUsersEdit = /* #__PURE__ */ (() => {
7747 7865 const method = 'post';
7748   - const url = '/research/groups/add';
  7866 + const url = '/order/erp/users/edit';
7749 7867 function request(
7750   - option: PostResearchGroupsAddOption,
7751   - ): Promise<PostResearchGroupsAddResponseSuccess> {
  7868 + option: PostOrderErpUsersEditOption,
  7869 + ): Promise<PostOrderErpUsersEditResponseSuccess> {
7752 7870 return requester(request.url, {
7753 7871 method: request.method,
7754 7872 ...option,
7755   - }) as unknown as Promise<PostResearchGroupsAddResponseSuccess>;
  7873 + }) as unknown as Promise<PostOrderErpUsersEditResponseSuccess>;
7756 7874 }
7757 7875  
7758 7876 /** http method */
... ... @@ -7762,22 +7880,22 @@ export const postResearchGroupsAdd = /* #__PURE__ */ (() =&gt; {
7762 7880 return request;
7763 7881 })();
7764 7882  
7765   -/** @description request parameter type for postResearchGroupsDelete */
7766   -export interface PostResearchGroupsDeleteOption {
  7883 +/** @description request parameter type for postOrderErpUsersListByPage */
  7884 +export interface PostOrderErpUsersListByPageOption {
7767 7885 /**
7768 7886 * @description
7769   - * request
  7887 + * queryVO
7770 7888 */
7771 7889 body: {
7772 7890 /**
7773 7891 @description
7774   - request */
7775   - request: ResearchGroupDeleteRequest;
  7892 + queryVO */
  7893 + queryVO: AdminUserQueryVO;
7776 7894 };
7777 7895 }
7778 7896  
7779   -/** @description response type for postResearchGroupsDelete */
7780   -export interface PostResearchGroupsDeleteResponse {
  7897 +/** @description response type for postOrderErpUsersListByPage */
  7898 +export interface PostOrderErpUsersListByPageResponse {
7781 7899 /**
7782 7900 * @description
7783 7901 * OK
... ... @@ -7805,25 +7923,25 @@ export interface PostResearchGroupsDeleteResponse {
7805 7923 404: any;
7806 7924 }
7807 7925  
7808   -export type PostResearchGroupsDeleteResponseSuccess =
7809   - PostResearchGroupsDeleteResponse[200];
  7926 +export type PostOrderErpUsersListByPageResponseSuccess =
  7927 + PostOrderErpUsersListByPageResponse[200];
7810 7928 /**
7811 7929 * @description
7812   - * 删除课题组信息
7813   - * @tags research-groups-controller
  7930 + * 查询用户
  7931 + * @tags 系统:用户管理
7814 7932 * @produces *
7815 7933 * @consumes application/json
7816 7934 */
7817   -export const postResearchGroupsDelete = /* #__PURE__ */ (() => {
  7935 +export const postOrderErpUsersListByPage = /* #__PURE__ */ (() => {
7818 7936 const method = 'post';
7819   - const url = '/research/groups/delete';
  7937 + const url = '/order/erp/users/list_by_page';
7820 7938 function request(
7821   - option: PostResearchGroupsDeleteOption,
7822   - ): Promise<PostResearchGroupsDeleteResponseSuccess> {
  7939 + option: PostOrderErpUsersListByPageOption,
  7940 + ): Promise<PostOrderErpUsersListByPageResponseSuccess> {
7823 7941 return requester(request.url, {
7824 7942 method: request.method,
7825 7943 ...option,
7826   - }) as unknown as Promise<PostResearchGroupsDeleteResponseSuccess>;
  7944 + }) as unknown as Promise<PostOrderErpUsersListByPageResponseSuccess>;
7827 7945 }
7828 7946  
7829 7947 /** http method */
... ... @@ -7833,22 +7951,22 @@ export const postResearchGroupsDelete = /* #__PURE__ */ (() =&gt; {
7833 7951 return request;
7834 7952 })();
7835 7953  
7836   -/** @description request parameter type for postResearchGroupsDetail */
7837   -export interface PostResearchGroupsDetailOption {
  7954 +/** @description request parameter type for postOrderErpUsersReset */
  7955 +export interface PostOrderErpUsersResetOption {
7838 7956 /**
7839 7957 * @description
7840   - * request
  7958 + * resetPwdVO
7841 7959 */
7842 7960 body: {
7843 7961 /**
7844 7962 @description
7845   - request */
7846   - request: ResearchGroupDetailRequest;
  7963 + resetPwdVO */
  7964 + resetPwdVO: ResetPwdVO;
7847 7965 };
7848 7966 }
7849 7967  
7850   -/** @description response type for postResearchGroupsDetail */
7851   -export interface PostResearchGroupsDetailResponse {
  7968 +/** @description response type for postOrderErpUsersReset */
  7969 +export interface PostOrderErpUsersResetResponse {
7852 7970 /**
7853 7971 * @description
7854 7972 * OK
... ... @@ -7876,25 +7994,25 @@ export interface PostResearchGroupsDetailResponse {
7876 7994 404: any;
7877 7995 }
7878 7996  
7879   -export type PostResearchGroupsDetailResponseSuccess =
7880   - PostResearchGroupsDetailResponse[200];
  7997 +export type PostOrderErpUsersResetResponseSuccess =
  7998 + PostOrderErpUsersResetResponse[200];
7881 7999 /**
7882 8000 * @description
7883   - * 查询课题组信息
7884   - * @tags research-groups-controller
  8001 + * 重置密码
  8002 + * @tags 系统:用户管理
7885 8003 * @produces *
7886 8004 * @consumes application/json
7887 8005 */
7888   -export const postResearchGroupsDetail = /* #__PURE__ */ (() => {
  8006 +export const postOrderErpUsersReset = /* #__PURE__ */ (() => {
7889 8007 const method = 'post';
7890   - const url = '/research/groups/detail';
  8008 + const url = '/order/erp/users/reset';
7891 8009 function request(
7892   - option: PostResearchGroupsDetailOption,
7893   - ): Promise<PostResearchGroupsDetailResponseSuccess> {
  8010 + option: PostOrderErpUsersResetOption,
  8011 + ): Promise<PostOrderErpUsersResetResponseSuccess> {
7894 8012 return requester(request.url, {
7895 8013 method: request.method,
7896 8014 ...option,
7897   - }) as unknown as Promise<PostResearchGroupsDetailResponseSuccess>;
  8015 + }) as unknown as Promise<PostOrderErpUsersResetResponseSuccess>;
7898 8016 }
7899 8017  
7900 8018 /** http method */
... ... @@ -7904,22 +8022,22 @@ export const postResearchGroupsDetail = /* #__PURE__ */ (() =&gt; {
7904 8022 return request;
7905 8023 })();
7906 8024  
7907   -/** @description request parameter type for postResearchGroupsEdit */
7908   -export interface PostResearchGroupsEditOption {
  8025 +/** @description request parameter type for postOrderErpUsersUpdatePass */
  8026 +export interface PostOrderErpUsersUpdatePassOption {
7909 8027 /**
7910 8028 * @description
7911   - * request
  8029 + * pwdVO
7912 8030 */
7913 8031 body: {
7914 8032 /**
7915 8033 @description
7916   - request */
7917   - request: ResearchGroupEditRequest;
  8034 + pwdVO */
  8035 + pwdVO: UpdatePwdVO;
7918 8036 };
7919 8037 }
7920 8038  
7921   -/** @description response type for postResearchGroupsEdit */
7922   -export interface PostResearchGroupsEditResponse {
  8039 +/** @description response type for postOrderErpUsersUpdatePass */
  8040 +export interface PostOrderErpUsersUpdatePassResponse {
7923 8041 /**
7924 8042 * @description
7925 8043 * OK
... ... @@ -7947,25 +8065,25 @@ export interface PostResearchGroupsEditResponse {
7947 8065 404: any;
7948 8066 }
7949 8067  
7950   -export type PostResearchGroupsEditResponseSuccess =
7951   - PostResearchGroupsEditResponse[200];
  8068 +export type PostOrderErpUsersUpdatePassResponseSuccess =
  8069 + PostOrderErpUsersUpdatePassResponse[200];
7952 8070 /**
7953 8071 * @description
7954   - * 编辑课题组信息
7955   - * @tags research-groups-controller
  8072 + * 修改密码
  8073 + * @tags 系统:用户管理
7956 8074 * @produces *
7957 8075 * @consumes application/json
7958 8076 */
7959   -export const postResearchGroupsEdit = /* #__PURE__ */ (() => {
  8077 +export const postOrderErpUsersUpdatePass = /* #__PURE__ */ (() => {
7960 8078 const method = 'post';
7961   - const url = '/research/groups/edit';
  8079 + const url = '/order/erp/users/update_pass';
7962 8080 function request(
7963   - option: PostResearchGroupsEditOption,
7964   - ): Promise<PostResearchGroupsEditResponseSuccess> {
  8081 + option: PostOrderErpUsersUpdatePassOption,
  8082 + ): Promise<PostOrderErpUsersUpdatePassResponseSuccess> {
7965 8083 return requester(request.url, {
7966 8084 method: request.method,
7967 8085 ...option,
7968   - }) as unknown as Promise<PostResearchGroupsEditResponseSuccess>;
  8086 + }) as unknown as Promise<PostOrderErpUsersUpdatePassResponseSuccess>;
7969 8087 }
7970 8088  
7971 8089 /** http method */
... ... @@ -7975,22 +8093,22 @@ export const postResearchGroupsEdit = /* #__PURE__ */ (() =&gt; {
7975 8093 return request;
7976 8094 })();
7977 8095  
7978   -/** @description request parameter type for postResearchGroupsList */
7979   -export interface PostResearchGroupsListOption {
  8096 +/** @description request parameter type for postOrderImportImportWeightAndVolume */
  8097 +export interface PostOrderImportImportWeightAndVolumeOption {
7980 8098 /**
7981 8099 * @description
7982   - * request
  8100 + * file
7983 8101 */
7984   - body: {
  8102 + formData: {
7985 8103 /**
7986 8104 @description
7987   - request */
7988   - request: ResearchGroupListRequest;
  8105 + file */
  8106 + file: File;
7989 8107 };
7990 8108 }
7991 8109  
7992   -/** @description response type for postResearchGroupsList */
7993   -export interface PostResearchGroupsListResponse {
  8110 +/** @description response type for postOrderImportImportWeightAndVolume */
  8111 +export interface PostOrderImportImportWeightAndVolumeResponse {
7994 8112 /**
7995 8113 * @description
7996 8114 * OK
... ... @@ -8018,25 +8136,25 @@ export interface PostResearchGroupsListResponse {
8018 8136 404: any;
8019 8137 }
8020 8138  
8021   -export type PostResearchGroupsListResponseSuccess =
8022   - PostResearchGroupsListResponse[200];
  8139 +export type PostOrderImportImportWeightAndVolumeResponseSuccess =
  8140 + PostOrderImportImportWeightAndVolumeResponse[200];
8023 8141 /**
8024 8142 * @description
8025   - * 课题组列表
8026   - * @tags research-groups-controller
  8143 + * 导入重量和体积
  8144 + * @tags 导入
8027 8145 * @produces *
8028   - * @consumes application/json
  8146 + * @consumes multipart/form-data
8029 8147 */
8030   -export const postResearchGroupsList = /* #__PURE__ */ (() => {
  8148 +export const postOrderImportImportWeightAndVolume = /* #__PURE__ */ (() => {
8031 8149 const method = 'post';
8032   - const url = '/research/groups/list';
  8150 + const url = '/order/import/importWeightAndVolume';
8033 8151 function request(
8034   - option: PostResearchGroupsListOption,
8035   - ): Promise<PostResearchGroupsListResponseSuccess> {
  8152 + option: PostOrderImportImportWeightAndVolumeOption,
  8153 + ): Promise<PostOrderImportImportWeightAndVolumeResponseSuccess> {
8036 8154 return requester(request.url, {
8037 8155 method: request.method,
8038 8156 ...option,
8039   - }) as unknown as Promise<PostResearchGroupsListResponseSuccess>;
  8157 + }) as unknown as Promise<PostOrderImportImportWeightAndVolumeResponseSuccess>;
8040 8158 }
8041 8159  
8042 8160 /** http method */
... ... @@ -8046,22 +8164,22 @@ export const postResearchGroupsList = /* #__PURE__ */ (() =&gt; {
8046 8164 return request;
8047 8165 })();
8048 8166  
8049   -/** @description request parameter type for postServiceBankStatementDeleteBankStatement */
8050   -export interface PostServiceBankStatementDeleteBankStatementOption {
  8167 +/** @description request parameter type for postPrepaidAudit */
  8168 +export interface PostPrepaidAuditOption {
8051 8169 /**
8052 8170 * @description
8053   - * dto
  8171 + * request
8054 8172 */
8055 8173 body: {
8056 8174 /**
8057 8175 @description
8058   - dto */
8059   - dto: Dto;
  8176 + request */
  8177 + request: SalesRechargePrepaymentAuditRequest;
8060 8178 };
8061 8179 }
8062 8180  
8063   -/** @description response type for postServiceBankStatementDeleteBankStatement */
8064   -export interface PostServiceBankStatementDeleteBankStatementResponse {
  8181 +/** @description response type for postPrepaidAudit */
  8182 +export interface PostPrepaidAuditResponse {
8065 8183 /**
8066 8184 * @description
8067 8185 * OK
... ... @@ -8089,51 +8207,49 @@ export interface PostServiceBankStatementDeleteBankStatementResponse {
8089 8207 404: any;
8090 8208 }
8091 8209  
8092   -export type PostServiceBankStatementDeleteBankStatementResponseSuccess =
8093   - PostServiceBankStatementDeleteBankStatementResponse[200];
  8210 +export type PostPrepaidAuditResponseSuccess = PostPrepaidAuditResponse[200];
8094 8211 /**
8095 8212 * @description
8096   - * 删除银行流水
8097   - * @tags 银行流水
  8213 + * 财务审核
  8214 + * @tags prepaid-controller
8098 8215 * @produces *
8099 8216 * @consumes application/json
8100 8217 */
8101   -export const postServiceBankStatementDeleteBankStatement =
8102   - /* #__PURE__ */ (() => {
8103   - const method = 'post';
8104   - const url = '/service/bankStatement/deleteBankStatement';
8105   - function request(
8106   - option: PostServiceBankStatementDeleteBankStatementOption,
8107   - ): Promise<PostServiceBankStatementDeleteBankStatementResponseSuccess> {
8108   - return requester(request.url, {
8109   - method: request.method,
8110   - ...option,
8111   - }) as unknown as Promise<PostServiceBankStatementDeleteBankStatementResponseSuccess>;
8112   - }
  8218 +export const postPrepaidAudit = /* #__PURE__ */ (() => {
  8219 + const method = 'post';
  8220 + const url = '/prepaid/audit';
  8221 + function request(
  8222 + option: PostPrepaidAuditOption,
  8223 + ): Promise<PostPrepaidAuditResponseSuccess> {
  8224 + return requester(request.url, {
  8225 + method: request.method,
  8226 + ...option,
  8227 + }) as unknown as Promise<PostPrepaidAuditResponseSuccess>;
  8228 + }
8113 8229  
8114   - /** http method */
8115   - request.method = method;
8116   - /** request url */
8117   - request.url = url;
8118   - return request;
8119   - })();
  8230 + /** http method */
  8231 + request.method = method;
  8232 + /** request url */
  8233 + request.url = url;
  8234 + return request;
  8235 +})();
8120 8236  
8121   -/** @description request parameter type for postServiceBankStatementEditBankStatement */
8122   -export interface PostServiceBankStatementEditBankStatementOption {
  8237 +/** @description request parameter type for postPrepaidCreate */
  8238 +export interface PostPrepaidCreateOption {
8123 8239 /**
8124 8240 * @description
8125   - * dto
  8241 + * request
8126 8242 */
8127 8243 body: {
8128 8244 /**
8129 8245 @description
8130   - dto */
8131   - dto: Dto;
  8246 + request */
  8247 + request: SalesRechargePrepaymentCreateRequest;
8132 8248 };
8133 8249 }
8134 8250  
8135   -/** @description response type for postServiceBankStatementEditBankStatement */
8136   -export interface PostServiceBankStatementEditBankStatementResponse {
  8251 +/** @description response type for postPrepaidCreate */
  8252 +export interface PostPrepaidCreateResponse {
8137 8253 /**
8138 8254 * @description
8139 8255 * OK
... ... @@ -8161,80 +8277,24 @@ export interface PostServiceBankStatementEditBankStatementResponse {
8161 8277 404: any;
8162 8278 }
8163 8279  
8164   -export type PostServiceBankStatementEditBankStatementResponseSuccess =
8165   - PostServiceBankStatementEditBankStatementResponse[200];
  8280 +export type PostPrepaidCreateResponseSuccess = PostPrepaidCreateResponse[200];
8166 8281 /**
8167 8282 * @description
8168   - * 编辑银行流水
8169   - * @tags 银行流水
  8283 + * 新增预存
  8284 + * @tags prepaid-controller
8170 8285 * @produces *
8171 8286 * @consumes application/json
8172 8287 */
8173   -export const postServiceBankStatementEditBankStatement =
8174   - /* #__PURE__ */ (() => {
8175   - const method = 'post';
8176   - const url = '/service/bankStatement/editBankStatement';
8177   - function request(
8178   - option: PostServiceBankStatementEditBankStatementOption,
8179   - ): Promise<PostServiceBankStatementEditBankStatementResponseSuccess> {
8180   - return requester(request.url, {
8181   - method: request.method,
8182   - ...option,
8183   - }) as unknown as Promise<PostServiceBankStatementEditBankStatementResponseSuccess>;
8184   - }
8185   -
8186   - /** http method */
8187   - request.method = method;
8188   - /** request url */
8189   - request.url = url;
8190   - return request;
8191   - })();
8192   -
8193   -/** @description response type for postServiceBankStatementExportTemplate */
8194   -export interface PostServiceBankStatementExportTemplateResponse {
8195   - /**
8196   - * @description
8197   - * OK
8198   - */
8199   - 200: any;
8200   - /**
8201   - * @description
8202   - * Created
8203   - */
8204   - 201: any;
8205   - /**
8206   - * @description
8207   - * Unauthorized
8208   - */
8209   - 401: any;
8210   - /**
8211   - * @description
8212   - * Forbidden
8213   - */
8214   - 403: any;
8215   - /**
8216   - * @description
8217   - * Not Found
8218   - */
8219   - 404: any;
8220   -}
8221   -
8222   -export type PostServiceBankStatementExportTemplateResponseSuccess =
8223   - PostServiceBankStatementExportTemplateResponse[200];
8224   -/**
8225   - * @description
8226   - * 下载银行流水模板
8227   - * @tags 银行流水
8228   - * @produces *
8229   - * @consumes application/json
8230   - */
8231   -export const postServiceBankStatementExportTemplate = /* #__PURE__ */ (() => {
  8288 +export const postPrepaidCreate = /* #__PURE__ */ (() => {
8232 8289 const method = 'post';
8233   - const url = '/service/bankStatement/exportTemplate';
8234   - function request(): Promise<PostServiceBankStatementExportTemplateResponseSuccess> {
  8290 + const url = '/prepaid/create';
  8291 + function request(
  8292 + option: PostPrepaidCreateOption,
  8293 + ): Promise<PostPrepaidCreateResponseSuccess> {
8235 8294 return requester(request.url, {
8236 8295 method: request.method,
8237   - }) as unknown as Promise<PostServiceBankStatementExportTemplateResponseSuccess>;
  8296 + ...option,
  8297 + }) as unknown as Promise<PostPrepaidCreateResponseSuccess>;
8238 8298 }
8239 8299  
8240 8300 /** http method */
... ... @@ -8244,22 +8304,22 @@ export const postServiceBankStatementExportTemplate = /* #__PURE__ */ (() =&gt; {
8244 8304 return request;
8245 8305 })();
8246 8306  
8247   -/** @description request parameter type for postServiceBankStatementImportBankStatementForm */
8248   -export interface PostServiceBankStatementImportBankStatementFormOption {
  8307 +/** @description request parameter type for postPrepaidDelete */
  8308 +export interface PostPrepaidDeleteOption {
8249 8309 /**
8250 8310 * @description
8251   - * file
  8311 + * request
8252 8312 */
8253   - formData: {
  8313 + body: {
8254 8314 /**
8255 8315 @description
8256   - file */
8257   - file: File;
  8316 + request */
  8317 + request: SalesRechargePrepaymentDeleteRequest;
8258 8318 };
8259 8319 }
8260 8320  
8261   -/** @description response type for postServiceBankStatementImportBankStatementForm */
8262   -export interface PostServiceBankStatementImportBankStatementFormResponse {
  8321 +/** @description response type for postPrepaidDelete */
  8322 +export interface PostPrepaidDeleteResponse {
8263 8323 /**
8264 8324 * @description
8265 8325 * OK
... ... @@ -8287,164 +8347,49 @@ export interface PostServiceBankStatementImportBankStatementFormResponse {
8287 8347 404: any;
8288 8348 }
8289 8349  
8290   -export type PostServiceBankStatementImportBankStatementFormResponseSuccess =
8291   - PostServiceBankStatementImportBankStatementFormResponse[200];
  8350 +export type PostPrepaidDeleteResponseSuccess = PostPrepaidDeleteResponse[200];
8292 8351 /**
8293 8352 * @description
8294   - * 导入银行流水表格
8295   - * @tags 银行流水
  8353 + * 删除预存
  8354 + * @tags prepaid-controller
8296 8355 * @produces *
8297   - * @consumes multipart/form-data
  8356 + * @consumes application/json
8298 8357 */
8299   -export const postServiceBankStatementImportBankStatementForm =
8300   - /* #__PURE__ */ (() => {
8301   - const method = 'post';
8302   - const url = '/service/bankStatement/importBankStatementForm';
8303   - function request(
8304   - option: PostServiceBankStatementImportBankStatementFormOption,
8305   - ): Promise<PostServiceBankStatementImportBankStatementFormResponseSuccess> {
8306   - return requester(request.url, {
8307   - method: request.method,
8308   - ...option,
8309   - }) as unknown as Promise<PostServiceBankStatementImportBankStatementFormResponseSuccess>;
8310   - }
  8358 +export const postPrepaidDelete = /* #__PURE__ */ (() => {
  8359 + const method = 'post';
  8360 + const url = '/prepaid/delete';
  8361 + function request(
  8362 + option: PostPrepaidDeleteOption,
  8363 + ): Promise<PostPrepaidDeleteResponseSuccess> {
  8364 + return requester(request.url, {
  8365 + method: request.method,
  8366 + ...option,
  8367 + }) as unknown as Promise<PostPrepaidDeleteResponseSuccess>;
  8368 + }
8311 8369  
8312   - /** http method */
8313   - request.method = method;
8314   - /** request url */
8315   - request.url = url;
8316   - return request;
8317   - })();
  8370 + /** http method */
  8371 + request.method = method;
  8372 + /** request url */
  8373 + request.url = url;
  8374 + return request;
  8375 +})();
8318 8376  
8319   -/** @description request parameter type for postServiceBankStatementQueryBankStatement */
8320   -export interface PostServiceBankStatementQueryBankStatementOption {
  8377 +/** @description request parameter type for postPrepaidList */
  8378 +export interface PostPrepaidListOption {
8321 8379 /**
8322 8380 * @description
8323   - * dto
  8381 + * request
8324 8382 */
8325 8383 body: {
8326 8384 /**
8327 8385 @description
8328   - dto */
8329   - dto: QueryBankStatementDto;
  8386 + request */
  8387 + request: SalesRechargePrepaymentRequest;
8330 8388 };
8331 8389 }
8332 8390  
8333   -/** @description response type for postServiceBankStatementQueryBankStatement */
8334   -export interface PostServiceBankStatementQueryBankStatementResponse {
8335   - /**
8336   - * @description
8337   - * OK
8338   - */
8339   - 200: ServerResult;
8340   - /**
8341   - * @description
8342   - * Created
8343   - */
8344   - 201: any;
8345   - /**
8346   - * @description
8347   - * Unauthorized
8348   - */
8349   - 401: any;
8350   - /**
8351   - * @description
8352   - * Forbidden
8353   - */
8354   - 403: any;
8355   - /**
8356   - * @description
8357   - * Not Found
8358   - */
8359   - 404: any;
8360   -}
8361   -
8362   -export type PostServiceBankStatementQueryBankStatementResponseSuccess =
8363   - PostServiceBankStatementQueryBankStatementResponse[200];
8364   -/**
8365   - * @description
8366   - * 查询银行流水
8367   - * @tags 银行流水
8368   - * @produces *
8369   - * @consumes application/json
8370   - */
8371   -export const postServiceBankStatementQueryBankStatement =
8372   - /* #__PURE__ */ (() => {
8373   - const method = 'post';
8374   - const url = '/service/bankStatement/queryBankStatement';
8375   - function request(
8376   - option: PostServiceBankStatementQueryBankStatementOption,
8377   - ): Promise<PostServiceBankStatementQueryBankStatementResponseSuccess> {
8378   - return requester(request.url, {
8379   - method: request.method,
8380   - ...option,
8381   - }) as unknown as Promise<PostServiceBankStatementQueryBankStatementResponseSuccess>;
8382   - }
8383   -
8384   - /** http method */
8385   - request.method = method;
8386   - /** request url */
8387   - request.url = url;
8388   - return request;
8389   - })();
8390   -
8391   -/** @description response type for postServiceConstAfterInvoicingInvoiceRecordStatus */
8392   -export interface PostServiceConstAfterInvoicingInvoiceRecordStatusResponse {
8393   - /**
8394   - * @description
8395   - * OK
8396   - */
8397   - 200: ServerResult;
8398   - /**
8399   - * @description
8400   - * Created
8401   - */
8402   - 201: any;
8403   - /**
8404   - * @description
8405   - * Unauthorized
8406   - */
8407   - 401: any;
8408   - /**
8409   - * @description
8410   - * Forbidden
8411   - */
8412   - 403: any;
8413   - /**
8414   - * @description
8415   - * Not Found
8416   - */
8417   - 404: any;
8418   -}
8419   -
8420   -export type PostServiceConstAfterInvoicingInvoiceRecordStatusResponseSuccess =
8421   - PostServiceConstAfterInvoicingInvoiceRecordStatusResponse[200];
8422   -/**
8423   - * @description
8424   - * 开票后的开票记录状态
8425   - * @tags front-const-controller
8426   - * @produces *
8427   - * @consumes application/json
8428   - */
8429   -export const postServiceConstAfterInvoicingInvoiceRecordStatus =
8430   - /* #__PURE__ */ (() => {
8431   - const method = 'post';
8432   - const url = '/service/const/afterInvoicingInvoiceRecordStatus';
8433   - function request(): Promise<PostServiceConstAfterInvoicingInvoiceRecordStatusResponseSuccess> {
8434   - return requester(request.url, {
8435   - method: request.method,
8436   - }) as unknown as Promise<PostServiceConstAfterInvoicingInvoiceRecordStatusResponseSuccess>;
8437   - }
8438   -
8439   - /** http method */
8440   - request.method = method;
8441   - /** request url */
8442   - request.url = url;
8443   - return request;
8444   - })();
8445   -
8446   -/** @description response type for postServiceConstAfterInvoicingStatus */
8447   -export interface PostServiceConstAfterInvoicingStatusResponse {
  8391 +/** @description response type for postPrepaidList */
  8392 +export interface PostPrepaidListResponse {
8448 8393 /**
8449 8394 * @description
8450 8395 * OK
... ... @@ -8472,22 +8417,24 @@ export interface PostServiceConstAfterInvoicingStatusResponse {
8472 8417 404: any;
8473 8418 }
8474 8419  
8475   -export type PostServiceConstAfterInvoicingStatusResponseSuccess =
8476   - PostServiceConstAfterInvoicingStatusResponse[200];
  8420 +export type PostPrepaidListResponseSuccess = PostPrepaidListResponse[200];
8477 8421 /**
8478 8422 * @description
8479   - * 申请开票后状态
8480   - * @tags front-const-controller
  8423 + * 查询列表
  8424 + * @tags prepaid-controller
8481 8425 * @produces *
8482 8426 * @consumes application/json
8483 8427 */
8484   -export const postServiceConstAfterInvoicingStatus = /* #__PURE__ */ (() => {
  8428 +export const postPrepaidList = /* #__PURE__ */ (() => {
8485 8429 const method = 'post';
8486   - const url = '/service/const/afterInvoicingStatus';
8487   - function request(): Promise<PostServiceConstAfterInvoicingStatusResponseSuccess> {
  8430 + const url = '/prepaid/list';
  8431 + function request(
  8432 + option: PostPrepaidListOption,
  8433 + ): Promise<PostPrepaidListResponseSuccess> {
8488 8434 return requester(request.url, {
8489 8435 method: request.method,
8490   - }) as unknown as Promise<PostServiceConstAfterInvoicingStatusResponseSuccess>;
  8436 + ...option,
  8437 + }) as unknown as Promise<PostPrepaidListResponseSuccess>;
8491 8438 }
8492 8439  
8493 8440 /** http method */
... ... @@ -8497,118 +8444,22 @@ export const postServiceConstAfterInvoicingStatus = /* #__PURE__ */ (() =&gt; {
8497 8444 return request;
8498 8445 })();
8499 8446  
8500   -/** @description response type for postServiceConstBeforeInvoicingInvoiceRecordStatus */
8501   -export interface PostServiceConstBeforeInvoicingInvoiceRecordStatusResponse {
8502   - /**
8503   - * @description
8504   - * OK
8505   - */
8506   - 200: ServerResult;
8507   - /**
8508   - * @description
8509   - * Created
8510   - */
8511   - 201: any;
8512   - /**
8513   - * @description
8514   - * Unauthorized
8515   - */
8516   - 401: any;
8517   - /**
8518   - * @description
8519   - * Forbidden
8520   - */
8521   - 403: any;
  8447 +/** @description request parameter type for postPrepaidPhoneAvailableList */
  8448 +export interface PostPrepaidPhoneAvailableListOption {
8522 8449 /**
8523 8450 * @description
8524   - * Not Found
8525   - */
8526   - 404: any;
8527   -}
8528   -
8529   -export type PostServiceConstBeforeInvoicingInvoiceRecordStatusResponseSuccess =
8530   - PostServiceConstBeforeInvoicingInvoiceRecordStatusResponse[200];
8531   -/**
8532   - * @description
8533   - * 开票前的开票记录状态
8534   - * @tags front-const-controller
8535   - * @produces *
8536   - * @consumes application/json
8537   - */
8538   -export const postServiceConstBeforeInvoicingInvoiceRecordStatus =
8539   - /* #__PURE__ */ (() => {
8540   - const method = 'post';
8541   - const url = '/service/const/beforeInvoicingInvoiceRecordStatus';
8542   - function request(): Promise<PostServiceConstBeforeInvoicingInvoiceRecordStatusResponseSuccess> {
8543   - return requester(request.url, {
8544   - method: request.method,
8545   - }) as unknown as Promise<PostServiceConstBeforeInvoicingInvoiceRecordStatusResponseSuccess>;
8546   - }
8547   -
8548   - /** http method */
8549   - request.method = method;
8550   - /** request url */
8551   - request.url = url;
8552   - return request;
8553   - })();
8554   -
8555   -/** @description response type for postServiceConstCanApplyAfterInvoicingStatus */
8556   -export interface PostServiceConstCanApplyAfterInvoicingStatusResponse {
8557   - /**
8558   - * @description
8559   - * OK
8560   - */
8561   - 200: ServerResult;
8562   - /**
8563   - * @description
8564   - * Created
8565   - */
8566   - 201: any;
8567   - /**
8568   - * @description
8569   - * Unauthorized
8570   - */
8571   - 401: any;
8572   - /**
8573   - * @description
8574   - * Forbidden
8575   - */
8576   - 403: any;
8577   - /**
8578   - * @description
8579   - * Not Found
  8451 + * request
8580 8452 */
8581   - 404: any;
  8453 + body: {
  8454 + /**
  8455 + @description
  8456 + request */
  8457 + request: SalesRechargePrepaymentAuditRequest;
  8458 + };
8582 8459 }
8583 8460  
8584   -export type PostServiceConstCanApplyAfterInvoicingStatusResponseSuccess =
8585   - PostServiceConstCanApplyAfterInvoicingStatusResponse[200];
8586   -/**
8587   - * @description
8588   - * 开具类型
8589   - * @tags front-const-controller
8590   - * @produces *
8591   - * @consumes application/json
8592   - */
8593   -export const postServiceConstCanApplyAfterInvoicingStatus =
8594   - /* #__PURE__ */ (() => {
8595   - const method = 'post';
8596   - const url = '/service/const/canApplyAfterInvoicingStatus';
8597   - function request(): Promise<PostServiceConstCanApplyAfterInvoicingStatusResponseSuccess> {
8598   - return requester(request.url, {
8599   - method: request.method,
8600   - }) as unknown as Promise<PostServiceConstCanApplyAfterInvoicingStatusResponseSuccess>;
8601   - }
8602   -
8603   - /** http method */
8604   - request.method = method;
8605   - /** request url */
8606   - request.url = url;
8607   - return request;
8608   - })();
8609   -
8610   -/** @description response type for postServiceConstGetPayeeEnum */
8611   -export interface PostServiceConstGetPayeeEnumResponse {
  8461 +/** @description response type for postPrepaidPhoneAvailableList */
  8462 +export interface PostPrepaidPhoneAvailableListResponse {
8612 8463 /**
8613 8464 * @description
8614 8465 * OK
... ... @@ -8636,22 +8487,25 @@ export interface PostServiceConstGetPayeeEnumResponse {
8636 8487 404: any;
8637 8488 }
8638 8489  
8639   -export type PostServiceConstGetPayeeEnumResponseSuccess =
8640   - PostServiceConstGetPayeeEnumResponse[200];
  8490 +export type PostPrepaidPhoneAvailableListResponseSuccess =
  8491 + PostPrepaidPhoneAvailableListResponse[200];
8641 8492 /**
8642 8493 * @description
8643   - * 获取收款方
8644   - * @tags front-const-controller
  8494 + * 财务审核
  8495 + * @tags prepaid-controller
8645 8496 * @produces *
8646 8497 * @consumes application/json
8647 8498 */
8648   -export const postServiceConstGetPayeeEnum = /* #__PURE__ */ (() => {
  8499 +export const postPrepaidPhoneAvailableList = /* #__PURE__ */ (() => {
8649 8500 const method = 'post';
8650   - const url = '/service/const/getPayeeEnum';
8651   - function request(): Promise<PostServiceConstGetPayeeEnumResponseSuccess> {
  8501 + const url = '/prepaid/phone/available/list';
  8502 + function request(
  8503 + option: PostPrepaidPhoneAvailableListOption,
  8504 + ): Promise<PostPrepaidPhoneAvailableListResponseSuccess> {
8652 8505 return requester(request.url, {
8653 8506 method: request.method,
8654   - }) as unknown as Promise<PostServiceConstGetPayeeEnumResponseSuccess>;
  8507 + ...option,
  8508 + }) as unknown as Promise<PostPrepaidPhoneAvailableListResponseSuccess>;
8655 8509 }
8656 8510  
8657 8511 /** http method */
... ... @@ -8661,8 +8515,22 @@ export const postServiceConstGetPayeeEnum = /* #__PURE__ */ (() =&gt; {
8661 8515 return request;
8662 8516 })();
8663 8517  
8664   -/** @description response type for postServiceConstInvoiceType */
8665   -export interface PostServiceConstInvoiceTypeResponse {
  8518 +/** @description request parameter type for postPrepaidUpdate */
  8519 +export interface PostPrepaidUpdateOption {
  8520 + /**
  8521 + * @description
  8522 + * request
  8523 + */
  8524 + body: {
  8525 + /**
  8526 + @description
  8527 + request */
  8528 + request: SalesRechargePrepaymentUpdateRequest;
  8529 + };
  8530 +}
  8531 +
  8532 +/** @description response type for postPrepaidUpdate */
  8533 +export interface PostPrepaidUpdateResponse {
8666 8534 /**
8667 8535 * @description
8668 8536 * OK
... ... @@ -8690,22 +8558,24 @@ export interface PostServiceConstInvoiceTypeResponse {
8690 8558 404: any;
8691 8559 }
8692 8560  
8693   -export type PostServiceConstInvoiceTypeResponseSuccess =
8694   - PostServiceConstInvoiceTypeResponse[200];
  8561 +export type PostPrepaidUpdateResponseSuccess = PostPrepaidUpdateResponse[200];
8695 8562 /**
8696 8563 * @description
8697   - * 发票类型
8698   - * @tags front-const-controller
  8564 + * 修改预存
  8565 + * @tags prepaid-controller
8699 8566 * @produces *
8700 8567 * @consumes application/json
8701 8568 */
8702   -export const postServiceConstInvoiceType = /* #__PURE__ */ (() => {
  8569 +export const postPrepaidUpdate = /* #__PURE__ */ (() => {
8703 8570 const method = 'post';
8704   - const url = '/service/const/invoiceType';
8705   - function request(): Promise<PostServiceConstInvoiceTypeResponseSuccess> {
  8571 + const url = '/prepaid/update';
  8572 + function request(
  8573 + option: PostPrepaidUpdateOption,
  8574 + ): Promise<PostPrepaidUpdateResponseSuccess> {
8706 8575 return requester(request.url, {
8707 8576 method: request.method,
8708   - }) as unknown as Promise<PostServiceConstInvoiceTypeResponseSuccess>;
  8577 + ...option,
  8578 + }) as unknown as Promise<PostPrepaidUpdateResponseSuccess>;
8709 8579 }
8710 8580  
8711 8581 /** http method */
... ... @@ -8715,8 +8585,22 @@ export const postServiceConstInvoiceType = /* #__PURE__ */ (() =&gt; {
8715 8585 return request;
8716 8586 })();
8717 8587  
8718   -/** @description response type for postServiceConstInvoicingType */
8719   -export interface PostServiceConstInvoicingTypeResponse {
  8588 +/** @description request parameter type for postResearchGroupMemberRequestsAdd */
  8589 +export interface PostResearchGroupMemberRequestsAddOption {
  8590 + /**
  8591 + * @description
  8592 + * request
  8593 + */
  8594 + body: {
  8595 + /**
  8596 + @description
  8597 + request */
  8598 + request: ResearchGroupMemberRequestAddRequest;
  8599 + };
  8600 +}
  8601 +
  8602 +/** @description response type for postResearchGroupMemberRequestsAdd */
  8603 +export interface PostResearchGroupMemberRequestsAddResponse {
8720 8604 /**
8721 8605 * @description
8722 8606 * OK
... ... @@ -8744,22 +8628,25 @@ export interface PostServiceConstInvoicingTypeResponse {
8744 8628 404: any;
8745 8629 }
8746 8630  
8747   -export type PostServiceConstInvoicingTypeResponseSuccess =
8748   - PostServiceConstInvoicingTypeResponse[200];
  8631 +export type PostResearchGroupMemberRequestsAddResponseSuccess =
  8632 + PostResearchGroupMemberRequestsAddResponse[200];
8749 8633 /**
8750 8634 * @description
8751   - * 开具类型
8752   - * @tags front-const-controller
  8635 + * 新增申请信息
  8636 + * @tags research-group-member-requests-controller
8753 8637 * @produces *
8754 8638 * @consumes application/json
8755 8639 */
8756   -export const postServiceConstInvoicingType = /* #__PURE__ */ (() => {
  8640 +export const postResearchGroupMemberRequestsAdd = /* #__PURE__ */ (() => {
8757 8641 const method = 'post';
8758   - const url = '/service/const/invoicingType';
8759   - function request(): Promise<PostServiceConstInvoicingTypeResponseSuccess> {
  8642 + const url = '/research/group/member/requests/add';
  8643 + function request(
  8644 + option: PostResearchGroupMemberRequestsAddOption,
  8645 + ): Promise<PostResearchGroupMemberRequestsAddResponseSuccess> {
8760 8646 return requester(request.url, {
8761 8647 method: request.method,
8762   - }) as unknown as Promise<PostServiceConstInvoicingTypeResponseSuccess>;
  8648 + ...option,
  8649 + }) as unknown as Promise<PostResearchGroupMemberRequestsAddResponseSuccess>;
8763 8650 }
8764 8651  
8765 8652 /** http method */
... ... @@ -8769,22 +8656,22 @@ export const postServiceConstInvoicingType = /* #__PURE__ */ (() =&gt; {
8769 8656 return request;
8770 8657 })();
8771 8658  
8772   -/** @description request parameter type for postServiceConstListInvoiceDetailNames */
8773   -export interface PostServiceConstListInvoiceDetailNamesOption {
  8659 +/** @description request parameter type for postResearchGroupMemberRequestsDelete */
  8660 +export interface PostResearchGroupMemberRequestsDeleteOption {
8774 8661 /**
8775 8662 * @description
8776   - * queryInvoiceProjectDto
  8663 + * request
8777 8664 */
8778 8665 body: {
8779 8666 /**
8780 8667 @description
8781   - queryInvoiceProjectDto */
8782   - queryInvoiceProjectDto: QueryInvoiceProjectDto;
  8668 + request */
  8669 + request: ResearchGroupMemberRequestDeleteRequest;
8783 8670 };
8784 8671 }
8785 8672  
8786   -/** @description response type for postServiceConstListInvoiceDetailNames */
8787   -export interface PostServiceConstListInvoiceDetailNamesResponse {
  8673 +/** @description response type for postResearchGroupMemberRequestsDelete */
  8674 +export interface PostResearchGroupMemberRequestsDeleteResponse {
8788 8675 /**
8789 8676 * @description
8790 8677 * OK
... ... @@ -8812,25 +8699,25 @@ export interface PostServiceConstListInvoiceDetailNamesResponse {
8812 8699 404: any;
8813 8700 }
8814 8701  
8815   -export type PostServiceConstListInvoiceDetailNamesResponseSuccess =
8816   - PostServiceConstListInvoiceDetailNamesResponse[200];
  8702 +export type PostResearchGroupMemberRequestsDeleteResponseSuccess =
  8703 + PostResearchGroupMemberRequestsDeleteResponse[200];
8817 8704 /**
8818 8705 * @description
8819   - * 根据公司名获取收款方
8820   - * @tags front-const-controller
  8706 + * 删除申请信息
  8707 + * @tags research-group-member-requests-controller
8821 8708 * @produces *
8822 8709 * @consumes application/json
8823 8710 */
8824   -export const postServiceConstListInvoiceDetailNames = /* #__PURE__ */ (() => {
  8711 +export const postResearchGroupMemberRequestsDelete = /* #__PURE__ */ (() => {
8825 8712 const method = 'post';
8826   - const url = '/service/const/listInvoiceDetailNames';
  8713 + const url = '/research/group/member/requests/delete';
8827 8714 function request(
8828   - option: PostServiceConstListInvoiceDetailNamesOption,
8829   - ): Promise<PostServiceConstListInvoiceDetailNamesResponseSuccess> {
  8715 + option: PostResearchGroupMemberRequestsDeleteOption,
  8716 + ): Promise<PostResearchGroupMemberRequestsDeleteResponseSuccess> {
8830 8717 return requester(request.url, {
8831 8718 method: request.method,
8832 8719 ...option,
8833   - }) as unknown as Promise<PostServiceConstListInvoiceDetailNamesResponseSuccess>;
  8720 + }) as unknown as Promise<PostResearchGroupMemberRequestsDeleteResponseSuccess>;
8834 8721 }
8835 8722  
8836 8723 /** http method */
... ... @@ -8840,8 +8727,22 @@ export const postServiceConstListInvoiceDetailNames = /* #__PURE__ */ (() =&gt; {
8840 8727 return request;
8841 8728 })();
8842 8729  
8843   -/** @description response type for postServiceConstNotCanModifyInvoiceRecordStatus */
8844   -export interface PostServiceConstNotCanModifyInvoiceRecordStatusResponse {
  8730 +/** @description request parameter type for postResearchGroupMemberRequestsDetail */
  8731 +export interface PostResearchGroupMemberRequestsDetailOption {
  8732 + /**
  8733 + * @description
  8734 + * request
  8735 + */
  8736 + body: {
  8737 + /**
  8738 + @description
  8739 + request */
  8740 + request: ResearchGroupMemberRequestDetailRequest;
  8741 + };
  8742 +}
  8743 +
  8744 +/** @description response type for postResearchGroupMemberRequestsDetail */
  8745 +export interface PostResearchGroupMemberRequestsDetailResponse {
8845 8746 /**
8846 8747 * @description
8847 8748 * OK
... ... @@ -8869,56 +8770,60 @@ export interface PostServiceConstNotCanModifyInvoiceRecordStatusResponse {
8869 8770 404: any;
8870 8771 }
8871 8772  
8872   -export type PostServiceConstNotCanModifyInvoiceRecordStatusResponseSuccess =
8873   - PostServiceConstNotCanModifyInvoiceRecordStatusResponse[200];
  8773 +export type PostResearchGroupMemberRequestsDetailResponseSuccess =
  8774 + PostResearchGroupMemberRequestsDetailResponse[200];
8874 8775 /**
8875 8776 * @description
8876   - * 不能修改的开票记录状态
8877   - * @tags front-const-controller
  8777 + * 查询申请信息
  8778 + * @tags research-group-member-requests-controller
8878 8779 * @produces *
8879 8780 * @consumes application/json
8880 8781 */
8881   -export const postServiceConstNotCanModifyInvoiceRecordStatus =
8882   - /* #__PURE__ */ (() => {
8883   - const method = 'post';
8884   - const url = '/service/const/notCanModifyInvoiceRecordStatus';
8885   - function request(): Promise<PostServiceConstNotCanModifyInvoiceRecordStatusResponseSuccess> {
8886   - return requester(request.url, {
8887   - method: request.method,
8888   - }) as unknown as Promise<PostServiceConstNotCanModifyInvoiceRecordStatusResponseSuccess>;
8889   - }
  8782 +export const postResearchGroupMemberRequestsDetail = /* #__PURE__ */ (() => {
  8783 + const method = 'post';
  8784 + const url = '/research/group/member/requests/detail';
  8785 + function request(
  8786 + option: PostResearchGroupMemberRequestsDetailOption,
  8787 + ): Promise<PostResearchGroupMemberRequestsDetailResponseSuccess> {
  8788 + return requester(request.url, {
  8789 + method: request.method,
  8790 + ...option,
  8791 + }) as unknown as Promise<PostResearchGroupMemberRequestsDetailResponseSuccess>;
  8792 + }
8890 8793  
8891   - /** http method */
8892   - request.method = method;
8893   - /** request url */
8894   - request.url = url;
8895   - return request;
8896   - })();
  8794 + /** http method */
  8795 + request.method = method;
  8796 + /** request url */
  8797 + request.url = url;
  8798 + return request;
  8799 +})();
8897 8800  
8898   -/** @description request parameter type for getServiceInvoiceListInvoiceProject */
8899   -export interface GetServiceInvoiceListInvoiceProjectOption {
8900   - /** @format int32 */
8901   - query?: {
8902   - /**
8903   - @format int32 */
8904   - current?: number;
8905   - nameLike?: string;
8906   - /**
8907   - @format int32 */
8908   - pageSize?: number;
  8801 +/** @description request parameter type for postResearchGroupMemberRequestsEdit */
  8802 +export interface PostResearchGroupMemberRequestsEditOption {
  8803 + /**
  8804 + * @description
  8805 + * request
  8806 + */
  8807 + body: {
8909 8808 /**
8910   - @format int32 */
8911   - total?: number;
  8809 + @description
  8810 + request */
  8811 + request: ResearchGroupMemberRequestEditRequest;
8912 8812 };
8913 8813 }
8914 8814  
8915   -/** @description response type for getServiceInvoiceListInvoiceProject */
8916   -export interface GetServiceInvoiceListInvoiceProjectResponse {
  8815 +/** @description response type for postResearchGroupMemberRequestsEdit */
  8816 +export interface PostResearchGroupMemberRequestsEditResponse {
8917 8817 /**
8918 8818 * @description
8919 8819 * OK
8920 8820 */
8921   - 200: any;
  8821 + 200: ServerResult;
  8822 + /**
  8823 + * @description
  8824 + * Created
  8825 + */
  8826 + 201: any;
8922 8827 /**
8923 8828 * @description
8924 8829 * Unauthorized
... ... @@ -8936,24 +8841,25 @@ export interface GetServiceInvoiceListInvoiceProjectResponse {
8936 8841 404: any;
8937 8842 }
8938 8843  
8939   -export type GetServiceInvoiceListInvoiceProjectResponseSuccess =
8940   - GetServiceInvoiceListInvoiceProjectResponse[200];
  8844 +export type PostResearchGroupMemberRequestsEditResponseSuccess =
  8845 + PostResearchGroupMemberRequestsEditResponse[200];
8941 8846 /**
8942 8847 * @description
8943   - * invoiceProjectList
8944   - * @tags 发票
  8848 + * 编辑申请信息
  8849 + * @tags research-group-member-requests-controller
8945 8850 * @produces *
  8851 + * @consumes application/json
8946 8852 */
8947   -export const getServiceInvoiceListInvoiceProject = /* #__PURE__ */ (() => {
8948   - const method = 'get';
8949   - const url = '/service/invoice/ListInvoiceProject';
  8853 +export const postResearchGroupMemberRequestsEdit = /* #__PURE__ */ (() => {
  8854 + const method = 'post';
  8855 + const url = '/research/group/member/requests/edit';
8950 8856 function request(
8951   - option?: GetServiceInvoiceListInvoiceProjectOption,
8952   - ): Promise<GetServiceInvoiceListInvoiceProjectResponseSuccess> {
  8857 + option: PostResearchGroupMemberRequestsEditOption,
  8858 + ): Promise<PostResearchGroupMemberRequestsEditResponseSuccess> {
8953 8859 return requester(request.url, {
8954 8860 method: request.method,
8955 8861 ...option,
8956   - }) as unknown as Promise<GetServiceInvoiceListInvoiceProjectResponseSuccess>;
  8862 + }) as unknown as Promise<PostResearchGroupMemberRequestsEditResponseSuccess>;
8957 8863 }
8958 8864  
8959 8865 /** http method */
... ... @@ -8963,22 +8869,22 @@ export const getServiceInvoiceListInvoiceProject = /* #__PURE__ */ (() =&gt; {
8963 8869 return request;
8964 8870 })();
8965 8871  
8966   -/** @description request parameter type for postServiceInvoiceAddInvoice */
8967   -export interface PostServiceInvoiceAddInvoiceOption {
  8872 +/** @description request parameter type for postResearchGroupMemberRequestsList */
  8873 +export interface PostResearchGroupMemberRequestsListOption {
8968 8874 /**
8969 8875 * @description
8970   - * dto
  8876 + * request
8971 8877 */
8972 8878 body: {
8973 8879 /**
8974 8880 @description
8975   - dto */
8976   - dto: InvoiceDto;
  8881 + request */
  8882 + request: ResearchGroupMemberRequestsRequest;
8977 8883 };
8978 8884 }
8979 8885  
8980   -/** @description response type for postServiceInvoiceAddInvoice */
8981   -export interface PostServiceInvoiceAddInvoiceResponse {
  8886 +/** @description response type for postResearchGroupMemberRequestsList */
  8887 +export interface PostResearchGroupMemberRequestsListResponse {
8982 8888 /**
8983 8889 * @description
8984 8890 * OK
... ... @@ -9006,25 +8912,25 @@ export interface PostServiceInvoiceAddInvoiceResponse {
9006 8912 404: any;
9007 8913 }
9008 8914  
9009   -export type PostServiceInvoiceAddInvoiceResponseSuccess =
9010   - PostServiceInvoiceAddInvoiceResponse[200];
  8915 +export type PostResearchGroupMemberRequestsListResponseSuccess =
  8916 + PostResearchGroupMemberRequestsListResponse[200];
9011 8917 /**
9012 8918 * @description
9013   - * 添加发票
9014   - * @tags 发票
  8919 + * 申请列表
  8920 + * @tags research-group-member-requests-controller
9015 8921 * @produces *
9016 8922 * @consumes application/json
9017 8923 */
9018   -export const postServiceInvoiceAddInvoice = /* #__PURE__ */ (() => {
  8924 +export const postResearchGroupMemberRequestsList = /* #__PURE__ */ (() => {
9019 8925 const method = 'post';
9020   - const url = '/service/invoice/addInvoice';
  8926 + const url = '/research/group/member/requests/list';
9021 8927 function request(
9022   - option: PostServiceInvoiceAddInvoiceOption,
9023   - ): Promise<PostServiceInvoiceAddInvoiceResponseSuccess> {
  8928 + option: PostResearchGroupMemberRequestsListOption,
  8929 + ): Promise<PostResearchGroupMemberRequestsListResponseSuccess> {
9024 8930 return requester(request.url, {
9025 8931 method: request.method,
9026 8932 ...option,
9027   - }) as unknown as Promise<PostServiceInvoiceAddInvoiceResponseSuccess>;
  8933 + }) as unknown as Promise<PostResearchGroupMemberRequestsListResponseSuccess>;
9028 8934 }
9029 8935  
9030 8936 /** http method */
... ... @@ -9034,22 +8940,22 @@ export const postServiceInvoiceAddInvoice = /* #__PURE__ */ (() =&gt; {
9034 8940 return request;
9035 8941 })();
9036 8942  
9037   -/** @description request parameter type for postServiceInvoiceApplyInvoice */
9038   -export interface PostServiceInvoiceApplyInvoiceOption {
  8943 +/** @description request parameter type for postResearchGroupsAdd */
  8944 +export interface PostResearchGroupsAddOption {
9039 8945 /**
9040 8946 * @description
9041   - * dto
  8947 + * request
9042 8948 */
9043 8949 body: {
9044 8950 /**
9045 8951 @description
9046   - dto */
9047   - dto: ApplyInvoiceDto;
  8952 + request */
  8953 + request: ResearchGroupAddRequest;
9048 8954 };
9049 8955 }
9050 8956  
9051   -/** @description response type for postServiceInvoiceApplyInvoice */
9052   -export interface PostServiceInvoiceApplyInvoiceResponse {
  8957 +/** @description response type for postResearchGroupsAdd */
  8958 +export interface PostResearchGroupsAddResponse {
9053 8959 /**
9054 8960 * @description
9055 8961 * OK
... ... @@ -9077,25 +8983,25 @@ export interface PostServiceInvoiceApplyInvoiceResponse {
9077 8983 404: any;
9078 8984 }
9079 8985  
9080   -export type PostServiceInvoiceApplyInvoiceResponseSuccess =
9081   - PostServiceInvoiceApplyInvoiceResponse[200];
  8986 +export type PostResearchGroupsAddResponseSuccess =
  8987 + PostResearchGroupsAddResponse[200];
9082 8988 /**
9083 8989 * @description
9084   - * 申请开票
9085   - * @tags 发票
  8990 + * 新增课题组信息
  8991 + * @tags research-groups-controller
9086 8992 * @produces *
9087 8993 * @consumes application/json
9088 8994 */
9089   -export const postServiceInvoiceApplyInvoice = /* #__PURE__ */ (() => {
  8995 +export const postResearchGroupsAdd = /* #__PURE__ */ (() => {
9090 8996 const method = 'post';
9091   - const url = '/service/invoice/applyInvoice';
  8997 + const url = '/research/groups/add';
9092 8998 function request(
9093   - option: PostServiceInvoiceApplyInvoiceOption,
9094   - ): Promise<PostServiceInvoiceApplyInvoiceResponseSuccess> {
  8999 + option: PostResearchGroupsAddOption,
  9000 + ): Promise<PostResearchGroupsAddResponseSuccess> {
9095 9001 return requester(request.url, {
9096 9002 method: request.method,
9097 9003 ...option,
9098   - }) as unknown as Promise<PostServiceInvoiceApplyInvoiceResponseSuccess>;
  9004 + }) as unknown as Promise<PostResearchGroupsAddResponseSuccess>;
9099 9005 }
9100 9006  
9101 9007 /** http method */
... ... @@ -9105,22 +9011,22 @@ export const postServiceInvoiceApplyInvoice = /* #__PURE__ */ (() =&gt; {
9105 9011 return request;
9106 9012 })();
9107 9013  
9108   -/** @description request parameter type for postServiceInvoiceCancelApply */
9109   -export interface PostServiceInvoiceCancelApplyOption {
  9014 +/** @description request parameter type for postResearchGroupsDelete */
  9015 +export interface PostResearchGroupsDeleteOption {
9110 9016 /**
9111 9017 * @description
9112   - * dto
  9018 + * request
9113 9019 */
9114 9020 body: {
9115 9021 /**
9116 9022 @description
9117   - dto */
9118   - dto: Dto;
  9023 + request */
  9024 + request: ResearchGroupDeleteRequest;
9119 9025 };
9120 9026 }
9121 9027  
9122   -/** @description response type for postServiceInvoiceCancelApply */
9123   -export interface PostServiceInvoiceCancelApplyResponse {
  9028 +/** @description response type for postResearchGroupsDelete */
  9029 +export interface PostResearchGroupsDeleteResponse {
9124 9030 /**
9125 9031 * @description
9126 9032 * OK
... ... @@ -9148,25 +9054,25 @@ export interface PostServiceInvoiceCancelApplyResponse {
9148 9054 404: any;
9149 9055 }
9150 9056  
9151   -export type PostServiceInvoiceCancelApplyResponseSuccess =
9152   - PostServiceInvoiceCancelApplyResponse[200];
  9057 +export type PostResearchGroupsDeleteResponseSuccess =
  9058 + PostResearchGroupsDeleteResponse[200];
9153 9059 /**
9154 9060 * @description
9155   - * 取消申请
9156   - * @tags 发票
  9061 + * 删除课题组信息
  9062 + * @tags research-groups-controller
9157 9063 * @produces *
9158 9064 * @consumes application/json
9159 9065 */
9160   -export const postServiceInvoiceCancelApply = /* #__PURE__ */ (() => {
  9066 +export const postResearchGroupsDelete = /* #__PURE__ */ (() => {
9161 9067 const method = 'post';
9162   - const url = '/service/invoice/cancelApply';
  9068 + const url = '/research/groups/delete';
9163 9069 function request(
9164   - option: PostServiceInvoiceCancelApplyOption,
9165   - ): Promise<PostServiceInvoiceCancelApplyResponseSuccess> {
  9070 + option: PostResearchGroupsDeleteOption,
  9071 + ): Promise<PostResearchGroupsDeleteResponseSuccess> {
9166 9072 return requester(request.url, {
9167 9073 method: request.method,
9168 9074 ...option,
9169   - }) as unknown as Promise<PostServiceInvoiceCancelApplyResponseSuccess>;
  9075 + }) as unknown as Promise<PostResearchGroupsDeleteResponseSuccess>;
9170 9076 }
9171 9077  
9172 9078 /** http method */
... ... @@ -9176,22 +9082,22 @@ export const postServiceInvoiceCancelApply = /* #__PURE__ */ (() =&gt; {
9176 9082 return request;
9177 9083 })();
9178 9084  
9179   -/** @description request parameter type for postServiceInvoiceCancelInvoiceAndBankStatement */
9180   -export interface PostServiceInvoiceCancelInvoiceAndBankStatementOption {
  9085 +/** @description request parameter type for postResearchGroupsDetail */
  9086 +export interface PostResearchGroupsDetailOption {
9181 9087 /**
9182 9088 * @description
9183   - * dto
  9089 + * request
9184 9090 */
9185 9091 body: {
9186 9092 /**
9187 9093 @description
9188   - dto */
9189   - dto: CancelInvoiceAndBankStatementDto;
  9094 + request */
  9095 + request: ResearchGroupDetailRequest;
9190 9096 };
9191 9097 }
9192 9098  
9193   -/** @description response type for postServiceInvoiceCancelInvoiceAndBankStatement */
9194   -export interface PostServiceInvoiceCancelInvoiceAndBankStatementResponse {
  9099 +/** @description response type for postResearchGroupsDetail */
  9100 +export interface PostResearchGroupsDetailResponse {
9195 9101 /**
9196 9102 * @description
9197 9103 * OK
... ... @@ -9219,56 +9125,41 @@ export interface PostServiceInvoiceCancelInvoiceAndBankStatementResponse {
9219 9125 404: any;
9220 9126 }
9221 9127  
9222   -export type PostServiceInvoiceCancelInvoiceAndBankStatementResponseSuccess =
9223   - PostServiceInvoiceCancelInvoiceAndBankStatementResponse[200];
  9128 +export type PostResearchGroupsDetailResponseSuccess =
  9129 + PostResearchGroupsDetailResponse[200];
9224 9130 /**
9225 9131 * @description
9226   - * 取消发票与银行流水的关联
9227   - * @tags 发票
  9132 + * 查询课题组信息
  9133 + * @tags research-groups-controller
9228 9134 * @produces *
9229 9135 * @consumes application/json
9230 9136 */
9231   -export const postServiceInvoiceCancelInvoiceAndBankStatement =
9232   - /* #__PURE__ */ (() => {
9233   - const method = 'post';
9234   - const url = '/service/invoice/cancelInvoiceAndBankStatement';
9235   - function request(
9236   - option: PostServiceInvoiceCancelInvoiceAndBankStatementOption,
9237   - ): Promise<PostServiceInvoiceCancelInvoiceAndBankStatementResponseSuccess> {
9238   - return requester(request.url, {
9239   - method: request.method,
9240   - ...option,
9241   - }) as unknown as Promise<PostServiceInvoiceCancelInvoiceAndBankStatementResponseSuccess>;
9242   - }
9243   -
9244   - /** http method */
9245   - request.method = method;
9246   - /** request url */
9247   - request.url = url;
9248   - return request;
9249   - })();
  9137 +export const postResearchGroupsDetail = /* #__PURE__ */ (() => {
  9138 + const method = 'post';
  9139 + const url = '/research/groups/detail';
  9140 + function request(
  9141 + option: PostResearchGroupsDetailOption,
  9142 + ): Promise<PostResearchGroupsDetailResponseSuccess> {
  9143 + return requester(request.url, {
  9144 + method: request.method,
  9145 + ...option,
  9146 + }) as unknown as Promise<PostResearchGroupsDetailResponseSuccess>;
  9147 + }
9250 9148  
9251   -/** @description request parameter type for postServiceInvoiceDealInvoicingResult */
9252   -export interface PostServiceInvoiceDealInvoicingResultOption {
9253   - /**
9254   - * @description
9255   - * dto
9256   - */
9257   - body: {
9258   - /**
9259   - @description
9260   - dto */
9261   - dto: Dto;
9262   - };
9263   -}
  9149 + /** http method */
  9150 + request.method = method;
  9151 + /** request url */
  9152 + request.url = url;
  9153 + return request;
  9154 +})();
9264 9155  
9265   -/** @description response type for postServiceInvoiceDealInvoicingResult */
9266   -export interface PostServiceInvoiceDealInvoicingResultResponse {
  9156 +/** @description response type for postResearchGroupsDownloadImportTemplate */
  9157 +export interface PostResearchGroupsDownloadImportTemplateResponse {
9267 9158 /**
9268 9159 * @description
9269 9160 * OK
9270 9161 */
9271   - 200: ServerResult;
  9162 + 200: any;
9272 9163 /**
9273 9164 * @description
9274 9165 * Created
... ... @@ -9291,25 +9182,22 @@ export interface PostServiceInvoiceDealInvoicingResultResponse {
9291 9182 404: any;
9292 9183 }
9293 9184  
9294   -export type PostServiceInvoiceDealInvoicingResultResponseSuccess =
9295   - PostServiceInvoiceDealInvoicingResultResponse[200];
  9185 +export type PostResearchGroupsDownloadImportTemplateResponseSuccess =
  9186 + PostResearchGroupsDownloadImportTemplateResponse[200];
9296 9187 /**
9297 9188 * @description
9298   - * 拉取开票结果
9299   - * @tags 发票
  9189 + * 课题组导入模板下载
  9190 + * @tags research-groups-controller
9300 9191 * @produces *
9301 9192 * @consumes application/json
9302 9193 */
9303   -export const postServiceInvoiceDealInvoicingResult = /* #__PURE__ */ (() => {
  9194 +export const postResearchGroupsDownloadImportTemplate = /* #__PURE__ */ (() => {
9304 9195 const method = 'post';
9305   - const url = '/service/invoice/dealInvoicingResult';
9306   - function request(
9307   - option: PostServiceInvoiceDealInvoicingResultOption,
9308   - ): Promise<PostServiceInvoiceDealInvoicingResultResponseSuccess> {
  9196 + const url = '/research/groups/download/importTemplate';
  9197 + function request(): Promise<PostResearchGroupsDownloadImportTemplateResponseSuccess> {
9309 9198 return requester(request.url, {
9310 9199 method: request.method,
9311   - ...option,
9312   - }) as unknown as Promise<PostServiceInvoiceDealInvoicingResultResponseSuccess>;
  9200 + }) as unknown as Promise<PostResearchGroupsDownloadImportTemplateResponseSuccess>;
9313 9201 }
9314 9202  
9315 9203 /** http method */
... ... @@ -9319,22 +9207,22 @@ export const postServiceInvoiceDealInvoicingResult = /* #__PURE__ */ (() =&gt; {
9319 9207 return request;
9320 9208 })();
9321 9209  
9322   -/** @description request parameter type for postServiceInvoiceDeleteInvoice */
9323   -export interface PostServiceInvoiceDeleteInvoiceOption {
  9210 +/** @description request parameter type for postResearchGroupsEdit */
  9211 +export interface PostResearchGroupsEditOption {
9324 9212 /**
9325 9213 * @description
9326   - * dto
  9214 + * request
9327 9215 */
9328 9216 body: {
9329 9217 /**
9330 9218 @description
9331   - dto */
9332   - dto: Dto;
  9219 + request */
  9220 + request: ResearchGroupEditRequest;
9333 9221 };
9334 9222 }
9335 9223  
9336   -/** @description response type for postServiceInvoiceDeleteInvoice */
9337   -export interface PostServiceInvoiceDeleteInvoiceResponse {
  9224 +/** @description response type for postResearchGroupsEdit */
  9225 +export interface PostResearchGroupsEditResponse {
9338 9226 /**
9339 9227 * @description
9340 9228 * OK
... ... @@ -9362,25 +9250,25 @@ export interface PostServiceInvoiceDeleteInvoiceResponse {
9362 9250 404: any;
9363 9251 }
9364 9252  
9365   -export type PostServiceInvoiceDeleteInvoiceResponseSuccess =
9366   - PostServiceInvoiceDeleteInvoiceResponse[200];
  9253 +export type PostResearchGroupsEditResponseSuccess =
  9254 + PostResearchGroupsEditResponse[200];
9367 9255 /**
9368 9256 * @description
9369   - * 删除发票
9370   - * @tags 发票
  9257 + * 编辑课题组信息
  9258 + * @tags research-groups-controller
9371 9259 * @produces *
9372 9260 * @consumes application/json
9373 9261 */
9374   -export const postServiceInvoiceDeleteInvoice = /* #__PURE__ */ (() => {
  9262 +export const postResearchGroupsEdit = /* #__PURE__ */ (() => {
9375 9263 const method = 'post';
9376   - const url = '/service/invoice/deleteInvoice';
  9264 + const url = '/research/groups/edit';
9377 9265 function request(
9378   - option: PostServiceInvoiceDeleteInvoiceOption,
9379   - ): Promise<PostServiceInvoiceDeleteInvoiceResponseSuccess> {
  9266 + option: PostResearchGroupsEditOption,
  9267 + ): Promise<PostResearchGroupsEditResponseSuccess> {
9380 9268 return requester(request.url, {
9381 9269 method: request.method,
9382 9270 ...option,
9383   - }) as unknown as Promise<PostServiceInvoiceDeleteInvoiceResponseSuccess>;
  9271 + }) as unknown as Promise<PostResearchGroupsEditResponseSuccess>;
9384 9272 }
9385 9273  
9386 9274 /** http method */
... ... @@ -9390,24 +9278,22 @@ export const postServiceInvoiceDeleteInvoice = /* #__PURE__ */ (() =&gt; {
9390 9278 return request;
9391 9279 })();
9392 9280  
9393   -/** @description request parameter type for postServiceInvoiceDownloadInvoice */
9394   -export interface PostServiceInvoiceDownloadInvoiceOption {
  9281 +/** @description request parameter type for postResearchGroupsImport */
  9282 +export interface PostResearchGroupsImportOption {
9395 9283 /**
9396 9284 * @description
9397   - * recodId
9398   - * @format int64
  9285 + * file
9399 9286 */
9400   - query?: {
  9287 + formData: {
9401 9288 /**
9402 9289 @description
9403   - recodId
9404   - @format int64 */
9405   - recodId?: number;
  9290 + file */
  9291 + file: File;
9406 9292 };
9407 9293 }
9408 9294  
9409   -/** @description response type for postServiceInvoiceDownloadInvoice */
9410   -export interface PostServiceInvoiceDownloadInvoiceResponse {
  9295 +/** @description response type for postResearchGroupsImport */
  9296 +export interface PostResearchGroupsImportResponse {
9411 9297 /**
9412 9298 * @description
9413 9299 * OK
... ... @@ -9435,25 +9321,25 @@ export interface PostServiceInvoiceDownloadInvoiceResponse {
9435 9321 404: any;
9436 9322 }
9437 9323  
9438   -export type PostServiceInvoiceDownloadInvoiceResponseSuccess =
9439   - PostServiceInvoiceDownloadInvoiceResponse[200];
  9324 +export type PostResearchGroupsImportResponseSuccess =
  9325 + PostResearchGroupsImportResponse[200];
9440 9326 /**
9441 9327 * @description
9442   - * 下载开票
9443   - * @tags 发票
  9328 + * 课题组信息导入
  9329 + * @tags research-groups-controller
9444 9330 * @produces *
9445   - * @consumes application/json
  9331 + * @consumes multipart/form-data
9446 9332 */
9447   -export const postServiceInvoiceDownloadInvoice = /* #__PURE__ */ (() => {
  9333 +export const postResearchGroupsImport = /* #__PURE__ */ (() => {
9448 9334 const method = 'post';
9449   - const url = '/service/invoice/downloadInvoice';
  9335 + const url = '/research/groups/import';
9450 9336 function request(
9451   - option?: PostServiceInvoiceDownloadInvoiceOption,
9452   - ): Promise<PostServiceInvoiceDownloadInvoiceResponseSuccess> {
  9337 + option: PostResearchGroupsImportOption,
  9338 + ): Promise<PostResearchGroupsImportResponseSuccess> {
9453 9339 return requester(request.url, {
9454 9340 method: request.method,
9455 9341 ...option,
9456   - }) as unknown as Promise<PostServiceInvoiceDownloadInvoiceResponseSuccess>;
  9342 + }) as unknown as Promise<PostResearchGroupsImportResponseSuccess>;
9457 9343 }
9458 9344  
9459 9345 /** http method */
... ... @@ -9463,13 +9349,32 @@ export const postServiceInvoiceDownloadInvoice = /* #__PURE__ */ (() =&gt; {
9463 9349 return request;
9464 9350 })();
9465 9351  
9466   -/** @description response type for getServiceInvoiceExport */
9467   -export interface GetServiceInvoiceExportResponse {
  9352 +/** @description request parameter type for postResearchGroupsList */
  9353 +export interface PostResearchGroupsListOption {
  9354 + /**
  9355 + * @description
  9356 + * request
  9357 + */
  9358 + body: {
  9359 + /**
  9360 + @description
  9361 + request */
  9362 + request: ResearchGroupListRequest;
  9363 + };
  9364 +}
  9365 +
  9366 +/** @description response type for postResearchGroupsList */
  9367 +export interface PostResearchGroupsListResponse {
9468 9368 /**
9469 9369 * @description
9470 9370 * OK
9471 9371 */
9472   - 200: any;
  9372 + 200: ServerResult;
  9373 + /**
  9374 + * @description
  9375 + * Created
  9376 + */
  9377 + 201: any;
9473 9378 /**
9474 9379 * @description
9475 9380 * Unauthorized
... ... @@ -9487,21 +9392,25 @@ export interface GetServiceInvoiceExportResponse {
9487 9392 404: any;
9488 9393 }
9489 9394  
9490   -export type GetServiceInvoiceExportResponseSuccess =
9491   - GetServiceInvoiceExportResponse[200];
  9395 +export type PostResearchGroupsListResponseSuccess =
  9396 + PostResearchGroupsListResponse[200];
9492 9397 /**
9493 9398 * @description
9494   - * download
9495   - * @tags 发票
  9399 + * 课题组列表
  9400 + * @tags research-groups-controller
9496 9401 * @produces *
  9402 + * @consumes application/json
9497 9403 */
9498   -export const getServiceInvoiceExport = /* #__PURE__ */ (() => {
9499   - const method = 'get';
9500   - const url = '/service/invoice/export';
9501   - function request(): Promise<GetServiceInvoiceExportResponseSuccess> {
  9404 +export const postResearchGroupsList = /* #__PURE__ */ (() => {
  9405 + const method = 'post';
  9406 + const url = '/research/groups/list';
  9407 + function request(
  9408 + option: PostResearchGroupsListOption,
  9409 + ): Promise<PostResearchGroupsListResponseSuccess> {
9502 9410 return requester(request.url, {
9503 9411 method: request.method,
9504   - }) as unknown as Promise<GetServiceInvoiceExportResponseSuccess>;
  9412 + ...option,
  9413 + }) as unknown as Promise<PostResearchGroupsListResponseSuccess>;
9505 9414 }
9506 9415  
9507 9416 /** http method */
... ... @@ -9511,13 +9420,32 @@ export const getServiceInvoiceExport = /* #__PURE__ */ (() =&gt; {
9511 9420 return request;
9512 9421 })();
9513 9422  
9514   -/** @description response type for getServiceInvoiceExportInvoiceDetailsTemplate */
9515   -export interface GetServiceInvoiceExportInvoiceDetailsTemplateResponse {
  9423 +/** @description request parameter type for postServiceBankStatementDeleteBankStatement */
  9424 +export interface PostServiceBankStatementDeleteBankStatementOption {
  9425 + /**
  9426 + * @description
  9427 + * dto
  9428 + */
  9429 + body: {
  9430 + /**
  9431 + @description
  9432 + dto */
  9433 + dto: Dto;
  9434 + };
  9435 +}
  9436 +
  9437 +/** @description response type for postServiceBankStatementDeleteBankStatement */
  9438 +export interface PostServiceBankStatementDeleteBankStatementResponse {
9516 9439 /**
9517 9440 * @description
9518 9441 * OK
9519 9442 */
9520   - 200: any;
  9443 + 200: ServerResult;
  9444 + /**
  9445 + * @description
  9446 + * Created
  9447 + */
  9448 + 201: any;
9521 9449 /**
9522 9450 * @description
9523 9451 * Unauthorized
... ... @@ -9535,22 +9463,26 @@ export interface GetServiceInvoiceExportInvoiceDetailsTemplateResponse {
9535 9463 404: any;
9536 9464 }
9537 9465  
9538   -export type GetServiceInvoiceExportInvoiceDetailsTemplateResponseSuccess =
9539   - GetServiceInvoiceExportInvoiceDetailsTemplateResponse[200];
  9466 +export type PostServiceBankStatementDeleteBankStatementResponseSuccess =
  9467 + PostServiceBankStatementDeleteBankStatementResponse[200];
9540 9468 /**
9541 9469 * @description
9542   - * 导出发票明细模板
9543   - * @tags 发票
  9470 + * 删除银行流水
  9471 + * @tags 银行流水
9544 9472 * @produces *
  9473 + * @consumes application/json
9545 9474 */
9546   -export const getServiceInvoiceExportInvoiceDetailsTemplate =
  9475 +export const postServiceBankStatementDeleteBankStatement =
9547 9476 /* #__PURE__ */ (() => {
9548   - const method = 'get';
9549   - const url = '/service/invoice/exportInvoiceDetailsTemplate';
9550   - function request(): Promise<GetServiceInvoiceExportInvoiceDetailsTemplateResponseSuccess> {
  9477 + const method = 'post';
  9478 + const url = '/service/bankStatement/deleteBankStatement';
  9479 + function request(
  9480 + option: PostServiceBankStatementDeleteBankStatementOption,
  9481 + ): Promise<PostServiceBankStatementDeleteBankStatementResponseSuccess> {
9551 9482 return requester(request.url, {
9552 9483 method: request.method,
9553   - }) as unknown as Promise<GetServiceInvoiceExportInvoiceDetailsTemplateResponseSuccess>;
  9484 + ...option,
  9485 + }) as unknown as Promise<PostServiceBankStatementDeleteBankStatementResponseSuccess>;
9554 9486 }
9555 9487  
9556 9488 /** http method */
... ... @@ -9560,8 +9492,8 @@ export const getServiceInvoiceExportInvoiceDetailsTemplate =
9560 9492 return request;
9561 9493 })();
9562 9494  
9563   -/** @description request parameter type for postServiceInvoiceFindInvoice */
9564   -export interface PostServiceInvoiceFindInvoiceOption {
  9495 +/** @description request parameter type for postServiceBankStatementEditBankStatement */
  9496 +export interface PostServiceBankStatementEditBankStatementOption {
9565 9497 /**
9566 9498 * @description
9567 9499 * dto
... ... @@ -9574,8 +9506,8 @@ export interface PostServiceInvoiceFindInvoiceOption {
9574 9506 };
9575 9507 }
9576 9508  
9577   -/** @description response type for postServiceInvoiceFindInvoice */
9578   -export interface PostServiceInvoiceFindInvoiceResponse {
  9509 +/** @description response type for postServiceBankStatementEditBankStatement */
  9510 +export interface PostServiceBankStatementEditBankStatementResponse {
9579 9511 /**
9580 9512 * @description
9581 9513 * OK
... ... @@ -9603,57 +9535,42 @@ export interface PostServiceInvoiceFindInvoiceResponse {
9603 9535 404: any;
9604 9536 }
9605 9537  
9606   -export type PostServiceInvoiceFindInvoiceResponseSuccess =
9607   - PostServiceInvoiceFindInvoiceResponse[200];
  9538 +export type PostServiceBankStatementEditBankStatementResponseSuccess =
  9539 + PostServiceBankStatementEditBankStatementResponse[200];
9608 9540 /**
9609 9541 * @description
9610   - * 不分页查询发票
9611   - * @tags 发票
  9542 + * 编辑银行流水
  9543 + * @tags 银行流水
9612 9544 * @produces *
9613 9545 * @consumes application/json
9614 9546 */
9615   -export const postServiceInvoiceFindInvoice = /* #__PURE__ */ (() => {
9616   - const method = 'post';
9617   - const url = '/service/invoice/findInvoice';
9618   - function request(
9619   - option: PostServiceInvoiceFindInvoiceOption,
9620   - ): Promise<PostServiceInvoiceFindInvoiceResponseSuccess> {
9621   - return requester(request.url, {
9622   - method: request.method,
9623   - ...option,
9624   - }) as unknown as Promise<PostServiceInvoiceFindInvoiceResponseSuccess>;
9625   - }
9626   -
9627   - /** http method */
9628   - request.method = method;
9629   - /** request url */
9630   - request.url = url;
9631   - return request;
9632   -})();
  9547 +export const postServiceBankStatementEditBankStatement =
  9548 + /* #__PURE__ */ (() => {
  9549 + const method = 'post';
  9550 + const url = '/service/bankStatement/editBankStatement';
  9551 + function request(
  9552 + option: PostServiceBankStatementEditBankStatementOption,
  9553 + ): Promise<PostServiceBankStatementEditBankStatementResponseSuccess> {
  9554 + return requester(request.url, {
  9555 + method: request.method,
  9556 + ...option,
  9557 + }) as unknown as Promise<PostServiceBankStatementEditBankStatementResponseSuccess>;
  9558 + }
9633 9559  
9634   -/** @description request parameter type for postServiceInvoiceGetInvoiceRecord */
9635   -export interface PostServiceInvoiceGetInvoiceRecordOption {
9636   - /**
9637   - * @description
9638   - * id
9639   - * @format int64
9640   - */
9641   - query?: {
9642   - /**
9643   - @description
9644   - id
9645   - @format int64 */
9646   - id?: number;
9647   - };
9648   -}
  9560 + /** http method */
  9561 + request.method = method;
  9562 + /** request url */
  9563 + request.url = url;
  9564 + return request;
  9565 + })();
9649 9566  
9650   -/** @description response type for postServiceInvoiceGetInvoiceRecord */
9651   -export interface PostServiceInvoiceGetInvoiceRecordResponse {
  9567 +/** @description response type for postServiceBankStatementExportTemplate */
  9568 +export interface PostServiceBankStatementExportTemplateResponse {
9652 9569 /**
9653 9570 * @description
9654 9571 * OK
9655 9572 */
9656   - 200: ServerResult;
  9573 + 200: any;
9657 9574 /**
9658 9575 * @description
9659 9576 * Created
... ... @@ -9676,25 +9593,22 @@ export interface PostServiceInvoiceGetInvoiceRecordResponse {
9676 9593 404: any;
9677 9594 }
9678 9595  
9679   -export type PostServiceInvoiceGetInvoiceRecordResponseSuccess =
9680   - PostServiceInvoiceGetInvoiceRecordResponse[200];
  9596 +export type PostServiceBankStatementExportTemplateResponseSuccess =
  9597 + PostServiceBankStatementExportTemplateResponse[200];
9681 9598 /**
9682 9599 * @description
9683   - * 获取开票记录
9684   - * @tags 发票
  9600 + * 下载银行流水模板
  9601 + * @tags 银行流水
9685 9602 * @produces *
9686 9603 * @consumes application/json
9687 9604 */
9688   -export const postServiceInvoiceGetInvoiceRecord = /* #__PURE__ */ (() => {
  9605 +export const postServiceBankStatementExportTemplate = /* #__PURE__ */ (() => {
9689 9606 const method = 'post';
9690   - const url = '/service/invoice/getInvoiceRecord';
9691   - function request(
9692   - option?: PostServiceInvoiceGetInvoiceRecordOption,
9693   - ): Promise<PostServiceInvoiceGetInvoiceRecordResponseSuccess> {
  9607 + const url = '/service/bankStatement/exportTemplate';
  9608 + function request(): Promise<PostServiceBankStatementExportTemplateResponseSuccess> {
9694 9609 return requester(request.url, {
9695 9610 method: request.method,
9696   - ...option,
9697   - }) as unknown as Promise<PostServiceInvoiceGetInvoiceRecordResponseSuccess>;
  9611 + }) as unknown as Promise<PostServiceBankStatementExportTemplateResponseSuccess>;
9698 9612 }
9699 9613  
9700 9614 /** http method */
... ... @@ -9704,38 +9618,22 @@ export const postServiceInvoiceGetInvoiceRecord = /* #__PURE__ */ (() =&gt; {
9704 9618 return request;
9705 9619 })();
9706 9620  
9707   -/** @description request parameter type for postServiceInvoiceImportInvoiceDetails */
9708   -export interface PostServiceInvoiceImportInvoiceDetailsOption {
  9621 +/** @description request parameter type for postServiceBankStatementImportBankStatementForm */
  9622 +export interface PostServiceBankStatementImportBankStatementFormOption {
9709 9623 /**
9710 9624 * @description
9711   - * detailsExcel
  9625 + * file
9712 9626 */
9713 9627 formData: {
9714 9628 /**
9715 9629 @description
9716   - detailsExcel */
9717   - detailsExcel: File;
9718   - };
9719   -}
9720   -
9721   -/** @description request parameter type for postServiceInvoiceImportInvoiceDetails */
9722   -export interface PostServiceInvoiceImportInvoiceDetailsOption {
9723   - /**
9724   - * @description
9725   - * invoiceRecordId
9726   - * @format int64
9727   - */
9728   - query: {
9729   - /**
9730   - @description
9731   - invoiceRecordId
9732   - @format int64 */
9733   - invoiceRecordId: number;
  9630 + file */
  9631 + file: File;
9734 9632 };
9735 9633 }
9736 9634  
9737   -/** @description response type for postServiceInvoiceImportInvoiceDetails */
9738   -export interface PostServiceInvoiceImportInvoiceDetailsResponse {
  9635 +/** @description response type for postServiceBankStatementImportBankStatementForm */
  9636 +export interface PostServiceBankStatementImportBankStatementFormResponse {
9739 9637 /**
9740 9638 * @description
9741 9639 * OK
... ... @@ -9763,36 +9661,37 @@ export interface PostServiceInvoiceImportInvoiceDetailsResponse {
9763 9661 404: any;
9764 9662 }
9765 9663  
9766   -export type PostServiceInvoiceImportInvoiceDetailsResponseSuccess =
9767   - PostServiceInvoiceImportInvoiceDetailsResponse[200];
  9664 +export type PostServiceBankStatementImportBankStatementFormResponseSuccess =
  9665 + PostServiceBankStatementImportBankStatementFormResponse[200];
9768 9666 /**
9769 9667 * @description
9770   - * 导入发票明细
9771   - * @tags 发票
  9668 + * 导入银行流水表格
  9669 + * @tags 银行流水
9772 9670 * @produces *
9773 9671 * @consumes multipart/form-data
9774 9672 */
9775   -export const postServiceInvoiceImportInvoiceDetails = /* #__PURE__ */ (() => {
9776   - const method = 'post';
9777   - const url = '/service/invoice/importInvoiceDetails';
9778   - function request(
9779   - option: PostServiceInvoiceImportInvoiceDetailsOption,
9780   - ): Promise<PostServiceInvoiceImportInvoiceDetailsResponseSuccess> {
9781   - return requester(request.url, {
9782   - method: request.method,
9783   - ...option,
9784   - }) as unknown as Promise<PostServiceInvoiceImportInvoiceDetailsResponseSuccess>;
9785   - }
  9673 +export const postServiceBankStatementImportBankStatementForm =
  9674 + /* #__PURE__ */ (() => {
  9675 + const method = 'post';
  9676 + const url = '/service/bankStatement/importBankStatementForm';
  9677 + function request(
  9678 + option: PostServiceBankStatementImportBankStatementFormOption,
  9679 + ): Promise<PostServiceBankStatementImportBankStatementFormResponseSuccess> {
  9680 + return requester(request.url, {
  9681 + method: request.method,
  9682 + ...option,
  9683 + }) as unknown as Promise<PostServiceBankStatementImportBankStatementFormResponseSuccess>;
  9684 + }
9786 9685  
9787   - /** http method */
9788   - request.method = method;
9789   - /** request url */
9790   - request.url = url;
9791   - return request;
9792   -})();
  9686 + /** http method */
  9687 + request.method = method;
  9688 + /** request url */
  9689 + request.url = url;
  9690 + return request;
  9691 + })();
9793 9692  
9794   -/** @description request parameter type for postServiceInvoiceInvoiceWriteOff */
9795   -export interface PostServiceInvoiceInvoiceWriteOffOption {
  9693 +/** @description request parameter type for postServiceBankStatementQueryBankStatement */
  9694 +export interface PostServiceBankStatementQueryBankStatementOption {
9796 9695 /**
9797 9696 * @description
9798 9697 * dto
... ... @@ -9801,12 +9700,12 @@ export interface PostServiceInvoiceInvoiceWriteOffOption {
9801 9700 /**
9802 9701 @description
9803 9702 dto */
9804   - dto: Dto;
  9703 + dto: QueryBankStatementDto;
9805 9704 };
9806 9705 }
9807 9706  
9808   -/** @description response type for postServiceInvoiceInvoiceWriteOff */
9809   -export interface PostServiceInvoiceInvoiceWriteOffResponse {
  9707 +/** @description response type for postServiceBankStatementQueryBankStatement */
  9708 +export interface PostServiceBankStatementQueryBankStatementResponse {
9810 9709 /**
9811 9710 * @description
9812 9711 * OK
... ... @@ -9834,36 +9733,37 @@ export interface PostServiceInvoiceInvoiceWriteOffResponse {
9834 9733 404: any;
9835 9734 }
9836 9735  
9837   -export type PostServiceInvoiceInvoiceWriteOffResponseSuccess =
9838   - PostServiceInvoiceInvoiceWriteOffResponse[200];
  9736 +export type PostServiceBankStatementQueryBankStatementResponseSuccess =
  9737 + PostServiceBankStatementQueryBankStatementResponse[200];
9839 9738 /**
9840 9739 * @description
9841   - * 发票核销
9842   - * @tags 发票
  9740 + * 查询银行流水
  9741 + * @tags 银行流水
9843 9742 * @produces *
9844 9743 * @consumes application/json
9845 9744 */
9846   -export const postServiceInvoiceInvoiceWriteOff = /* #__PURE__ */ (() => {
9847   - const method = 'post';
9848   - const url = '/service/invoice/invoiceWriteOff';
9849   - function request(
9850   - option: PostServiceInvoiceInvoiceWriteOffOption,
9851   - ): Promise<PostServiceInvoiceInvoiceWriteOffResponseSuccess> {
9852   - return requester(request.url, {
9853   - method: request.method,
9854   - ...option,
9855   - }) as unknown as Promise<PostServiceInvoiceInvoiceWriteOffResponseSuccess>;
9856   - }
  9745 +export const postServiceBankStatementQueryBankStatement =
  9746 + /* #__PURE__ */ (() => {
  9747 + const method = 'post';
  9748 + const url = '/service/bankStatement/queryBankStatement';
  9749 + function request(
  9750 + option: PostServiceBankStatementQueryBankStatementOption,
  9751 + ): Promise<PostServiceBankStatementQueryBankStatementResponseSuccess> {
  9752 + return requester(request.url, {
  9753 + method: request.method,
  9754 + ...option,
  9755 + }) as unknown as Promise<PostServiceBankStatementQueryBankStatementResponseSuccess>;
  9756 + }
9857 9757  
9858   - /** http method */
9859   - request.method = method;
9860   - /** request url */
9861   - request.url = url;
9862   - return request;
9863   -})();
  9758 + /** http method */
  9759 + request.method = method;
  9760 + /** request url */
  9761 + request.url = url;
  9762 + return request;
  9763 + })();
9864 9764  
9865   -/** @description request parameter type for postServiceInvoiceInvoicing */
9866   -export interface PostServiceInvoiceInvoicingOption {
  9765 +/** @description request parameter type for postServiceInvoiceAddInvoice */
  9766 +export interface PostServiceInvoiceAddInvoiceOption {
9867 9767 /**
9868 9768 * @description
9869 9769 * dto
... ... @@ -9872,12 +9772,12 @@ export interface PostServiceInvoiceInvoicingOption {
9872 9772 /**
9873 9773 @description
9874 9774 dto */
9875   - dto: Dto;
  9775 + dto: InvoiceDto;
9876 9776 };
9877 9777 }
9878 9778  
9879   -/** @description response type for postServiceInvoiceInvoicing */
9880   -export interface PostServiceInvoiceInvoicingResponse {
  9779 +/** @description response type for postServiceInvoiceAddInvoice */
  9780 +export interface PostServiceInvoiceAddInvoiceResponse {
9881 9781 /**
9882 9782 * @description
9883 9783 * OK
... ... @@ -9905,25 +9805,25 @@ export interface PostServiceInvoiceInvoicingResponse {
9905 9805 404: any;
9906 9806 }
9907 9807  
9908   -export type PostServiceInvoiceInvoicingResponseSuccess =
9909   - PostServiceInvoiceInvoicingResponse[200];
  9808 +export type PostServiceInvoiceAddInvoiceResponseSuccess =
  9809 + PostServiceInvoiceAddInvoiceResponse[200];
9910 9810 /**
9911 9811 * @description
9912   - *
  9812 + * 添加发
9913 9813 * @tags 发票
9914 9814 * @produces *
9915 9815 * @consumes application/json
9916 9816 */
9917   -export const postServiceInvoiceInvoicing = /* #__PURE__ */ (() => {
  9817 +export const postServiceInvoiceAddInvoice = /* #__PURE__ */ (() => {
9918 9818 const method = 'post';
9919   - const url = '/service/invoice/invoicing';
  9819 + const url = '/service/invoice/addInvoice';
9920 9820 function request(
9921   - option: PostServiceInvoiceInvoicingOption,
9922   - ): Promise<PostServiceInvoiceInvoicingResponseSuccess> {
  9821 + option: PostServiceInvoiceAddInvoiceOption,
  9822 + ): Promise<PostServiceInvoiceAddInvoiceResponseSuccess> {
9923 9823 return requester(request.url, {
9924 9824 method: request.method,
9925 9825 ...option,
9926   - }) as unknown as Promise<PostServiceInvoiceInvoicingResponseSuccess>;
  9826 + }) as unknown as Promise<PostServiceInvoiceAddInvoiceResponseSuccess>;
9927 9827 }
9928 9828  
9929 9829 /** http method */
... ... @@ -9933,8 +9833,8 @@ export const postServiceInvoiceInvoicing = /* #__PURE__ */ (() =&gt; {
9933 9833 return request;
9934 9834 })();
9935 9835  
9936   -/** @description request parameter type for postServiceInvoiceModifyRecord */
9937   -export interface PostServiceInvoiceModifyRecordOption {
  9836 +/** @description request parameter type for postServiceInvoiceCancelInvoiceAndBankStatement */
  9837 +export interface PostServiceInvoiceCancelInvoiceAndBankStatementOption {
9938 9838 /**
9939 9839 * @description
9940 9840 * dto
... ... @@ -9943,12 +9843,12 @@ export interface PostServiceInvoiceModifyRecordOption {
9943 9843 /**
9944 9844 @description
9945 9845 dto */
9946   - dto: InvoiceRecordDto;
  9846 + dto: CancelInvoiceAndBankStatementDto;
9947 9847 };
9948 9848 }
9949 9849  
9950   -/** @description response type for postServiceInvoiceModifyRecord */
9951   -export interface PostServiceInvoiceModifyRecordResponse {
  9850 +/** @description response type for postServiceInvoiceCancelInvoiceAndBankStatement */
  9851 +export interface PostServiceInvoiceCancelInvoiceAndBankStatementResponse {
9952 9852 /**
9953 9853 * @description
9954 9854 * OK
... ... @@ -9976,36 +9876,37 @@ export interface PostServiceInvoiceModifyRecordResponse {
9976 9876 404: any;
9977 9877 }
9978 9878  
9979   -export type PostServiceInvoiceModifyRecordResponseSuccess =
9980   - PostServiceInvoiceModifyRecordResponse[200];
  9879 +export type PostServiceInvoiceCancelInvoiceAndBankStatementResponseSuccess =
  9880 + PostServiceInvoiceCancelInvoiceAndBankStatementResponse[200];
9981 9881 /**
9982 9882 * @description
9983   - * 修改开票记录
  9883 + * 取消发票与银行流水的关联
9984 9884 * @tags 发票
9985 9885 * @produces *
9986 9886 * @consumes application/json
9987 9887 */
9988   -export const postServiceInvoiceModifyRecord = /* #__PURE__ */ (() => {
9989   - const method = 'post';
9990   - const url = '/service/invoice/modifyRecord';
9991   - function request(
9992   - option: PostServiceInvoiceModifyRecordOption,
9993   - ): Promise<PostServiceInvoiceModifyRecordResponseSuccess> {
9994   - return requester(request.url, {
9995   - method: request.method,
9996   - ...option,
9997   - }) as unknown as Promise<PostServiceInvoiceModifyRecordResponseSuccess>;
9998   - }
  9888 +export const postServiceInvoiceCancelInvoiceAndBankStatement =
  9889 + /* #__PURE__ */ (() => {
  9890 + const method = 'post';
  9891 + const url = '/service/invoice/cancelInvoiceAndBankStatement';
  9892 + function request(
  9893 + option: PostServiceInvoiceCancelInvoiceAndBankStatementOption,
  9894 + ): Promise<PostServiceInvoiceCancelInvoiceAndBankStatementResponseSuccess> {
  9895 + return requester(request.url, {
  9896 + method: request.method,
  9897 + ...option,
  9898 + }) as unknown as Promise<PostServiceInvoiceCancelInvoiceAndBankStatementResponseSuccess>;
  9899 + }
9999 9900  
10000   - /** http method */
10001   - request.method = method;
10002   - /** request url */
10003   - request.url = url;
10004   - return request;
10005   -})();
  9901 + /** http method */
  9902 + request.method = method;
  9903 + /** request url */
  9904 + request.url = url;
  9905 + return request;
  9906 + })();
10006 9907  
10007   -/** @description request parameter type for postServiceInvoiceQueryInvoice */
10008   -export interface PostServiceInvoiceQueryInvoiceOption {
  9908 +/** @description request parameter type for postServiceInvoiceDeleteInvoice */
  9909 +export interface PostServiceInvoiceDeleteInvoiceOption {
10009 9910 /**
10010 9911 * @description
10011 9912 * dto
... ... @@ -10018,8 +9919,8 @@ export interface PostServiceInvoiceQueryInvoiceOption {
10018 9919 };
10019 9920 }
10020 9921  
10021   -/** @description response type for postServiceInvoiceQueryInvoice */
10022   -export interface PostServiceInvoiceQueryInvoiceResponse {
  9922 +/** @description response type for postServiceInvoiceDeleteInvoice */
  9923 +export interface PostServiceInvoiceDeleteInvoiceResponse {
10023 9924 /**
10024 9925 * @description
10025 9926 * OK
... ... @@ -10047,25 +9948,25 @@ export interface PostServiceInvoiceQueryInvoiceResponse {
10047 9948 404: any;
10048 9949 }
10049 9950  
10050   -export type PostServiceInvoiceQueryInvoiceResponseSuccess =
10051   - PostServiceInvoiceQueryInvoiceResponse[200];
  9951 +export type PostServiceInvoiceDeleteInvoiceResponseSuccess =
  9952 + PostServiceInvoiceDeleteInvoiceResponse[200];
10052 9953 /**
10053 9954 * @description
10054   - * 发票页查询
  9955 + * 删除发票
10055 9956 * @tags 发票
10056 9957 * @produces *
10057 9958 * @consumes application/json
10058 9959 */
10059   -export const postServiceInvoiceQueryInvoice = /* #__PURE__ */ (() => {
  9960 +export const postServiceInvoiceDeleteInvoice = /* #__PURE__ */ (() => {
10060 9961 const method = 'post';
10061   - const url = '/service/invoice/queryInvoice';
  9962 + const url = '/service/invoice/deleteInvoice';
10062 9963 function request(
10063   - option: PostServiceInvoiceQueryInvoiceOption,
10064   - ): Promise<PostServiceInvoiceQueryInvoiceResponseSuccess> {
  9964 + option: PostServiceInvoiceDeleteInvoiceOption,
  9965 + ): Promise<PostServiceInvoiceDeleteInvoiceResponseSuccess> {
10065 9966 return requester(request.url, {
10066 9967 method: request.method,
10067 9968 ...option,
10068   - }) as unknown as Promise<PostServiceInvoiceQueryInvoiceResponseSuccess>;
  9969 + }) as unknown as Promise<PostServiceInvoiceDeleteInvoiceResponseSuccess>;
10069 9970 }
10070 9971  
10071 9972 /** http method */
... ... @@ -10075,8 +9976,8 @@ export const postServiceInvoiceQueryInvoice = /* #__PURE__ */ (() =&gt; {
10075 9976 return request;
10076 9977 })();
10077 9978  
10078   -/** @description request parameter type for postServiceInvoiceQueryInvoiceDetail */
10079   -export interface PostServiceInvoiceQueryInvoiceDetailOption {
  9979 +/** @description request parameter type for postServiceInvoiceFindInvoice */
  9980 +export interface PostServiceInvoiceFindInvoiceOption {
10080 9981 /**
10081 9982 * @description
10082 9983 * dto
... ... @@ -10085,12 +9986,12 @@ export interface PostServiceInvoiceQueryInvoiceDetailOption {
10085 9986 /**
10086 9987 @description
10087 9988 dto */
10088   - dto: QueryInvoiceDetailDto;
  9989 + dto: Dto;
10089 9990 };
10090 9991 }
10091 9992  
10092   -/** @description response type for postServiceInvoiceQueryInvoiceDetail */
10093   -export interface PostServiceInvoiceQueryInvoiceDetailResponse {
  9993 +/** @description response type for postServiceInvoiceFindInvoice */
  9994 +export interface PostServiceInvoiceFindInvoiceResponse {
10094 9995 /**
10095 9996 * @description
10096 9997 * OK
... ... @@ -10118,25 +10019,25 @@ export interface PostServiceInvoiceQueryInvoiceDetailResponse {
10118 10019 404: any;
10119 10020 }
10120 10021  
10121   -export type PostServiceInvoiceQueryInvoiceDetailResponseSuccess =
10122   - PostServiceInvoiceQueryInvoiceDetailResponse[200];
  10022 +export type PostServiceInvoiceFindInvoiceResponseSuccess =
  10023 + PostServiceInvoiceFindInvoiceResponse[200];
10123 10024 /**
10124 10025 * @description
10125   - * 查看发票详情
  10026 + * 不分页查询发票
10126 10027 * @tags 发票
10127 10028 * @produces *
10128 10029 * @consumes application/json
10129 10030 */
10130   -export const postServiceInvoiceQueryInvoiceDetail = /* #__PURE__ */ (() => {
  10031 +export const postServiceInvoiceFindInvoice = /* #__PURE__ */ (() => {
10131 10032 const method = 'post';
10132   - const url = '/service/invoice/queryInvoiceDetail';
  10033 + const url = '/service/invoice/findInvoice';
10133 10034 function request(
10134   - option: PostServiceInvoiceQueryInvoiceDetailOption,
10135   - ): Promise<PostServiceInvoiceQueryInvoiceDetailResponseSuccess> {
  10035 + option: PostServiceInvoiceFindInvoiceOption,
  10036 + ): Promise<PostServiceInvoiceFindInvoiceResponseSuccess> {
10136 10037 return requester(request.url, {
10137 10038 method: request.method,
10138 10039 ...option,
10139   - }) as unknown as Promise<PostServiceInvoiceQueryInvoiceDetailResponseSuccess>;
  10040 + }) as unknown as Promise<PostServiceInvoiceFindInvoiceResponseSuccess>;
10140 10041 }
10141 10042  
10142 10043 /** http method */
... ... @@ -10146,8 +10047,8 @@ export const postServiceInvoiceQueryInvoiceDetail = /* #__PURE__ */ (() =&gt; {
10146 10047 return request;
10147 10048 })();
10148 10049  
10149   -/** @description request parameter type for postServiceInvoiceQueryInvoiceRecordList */
10150   -export interface PostServiceInvoiceQueryInvoiceRecordListOption {
  10050 +/** @description request parameter type for postServiceInvoiceInvoiceWriteOff */
  10051 +export interface PostServiceInvoiceInvoiceWriteOffOption {
10151 10052 /**
10152 10053 * @description
10153 10054 * dto
... ... @@ -10156,12 +10057,12 @@ export interface PostServiceInvoiceQueryInvoiceRecordListOption {
10156 10057 /**
10157 10058 @description
10158 10059 dto */
10159   - dto: QueryInvoiceRecordDto;
  10060 + dto: Dto;
10160 10061 };
10161 10062 }
10162 10063  
10163   -/** @description response type for postServiceInvoiceQueryInvoiceRecordList */
10164   -export interface PostServiceInvoiceQueryInvoiceRecordListResponse {
  10064 +/** @description response type for postServiceInvoiceInvoiceWriteOff */
  10065 +export interface PostServiceInvoiceInvoiceWriteOffResponse {
10165 10066 /**
10166 10067 * @description
10167 10068 * OK
... ... @@ -10189,25 +10090,25 @@ export interface PostServiceInvoiceQueryInvoiceRecordListResponse {
10189 10090 404: any;
10190 10091 }
10191 10092  
10192   -export type PostServiceInvoiceQueryInvoiceRecordListResponseSuccess =
10193   - PostServiceInvoiceQueryInvoiceRecordListResponse[200];
  10093 +export type PostServiceInvoiceInvoiceWriteOffResponseSuccess =
  10094 + PostServiceInvoiceInvoiceWriteOffResponse[200];
10194 10095 /**
10195 10096 * @description
10196   - * 获取开票记录列表
  10097 + * 发票核销
10197 10098 * @tags 发票
10198 10099 * @produces *
10199 10100 * @consumes application/json
10200 10101 */
10201   -export const postServiceInvoiceQueryInvoiceRecordList = /* #__PURE__ */ (() => {
  10102 +export const postServiceInvoiceInvoiceWriteOff = /* #__PURE__ */ (() => {
10202 10103 const method = 'post';
10203   - const url = '/service/invoice/queryInvoiceRecordList';
  10104 + const url = '/service/invoice/invoiceWriteOff';
10204 10105 function request(
10205   - option: PostServiceInvoiceQueryInvoiceRecordListOption,
10206   - ): Promise<PostServiceInvoiceQueryInvoiceRecordListResponseSuccess> {
  10106 + option: PostServiceInvoiceInvoiceWriteOffOption,
  10107 + ): Promise<PostServiceInvoiceInvoiceWriteOffResponseSuccess> {
10207 10108 return requester(request.url, {
10208 10109 method: request.method,
10209 10110 ...option,
10210   - }) as unknown as Promise<PostServiceInvoiceQueryInvoiceRecordListResponseSuccess>;
  10111 + }) as unknown as Promise<PostServiceInvoiceInvoiceWriteOffResponseSuccess>;
10211 10112 }
10212 10113  
10213 10114 /** http method */
... ... @@ -10217,57 +10118,8 @@ export const postServiceInvoiceQueryInvoiceRecordList = /* #__PURE__ */ (() =&gt; {
10217 10118 return request;
10218 10119 })();
10219 10120  
10220   -/** @description response type for getServiceInvoiceQueryReadyInvoiceRecordList */
10221   -export interface GetServiceInvoiceQueryReadyInvoiceRecordListResponse {
10222   - /**
10223   - * @description
10224   - * OK
10225   - */
10226   - 200: ServerResult;
10227   - /**
10228   - * @description
10229   - * Unauthorized
10230   - */
10231   - 401: any;
10232   - /**
10233   - * @description
10234   - * Forbidden
10235   - */
10236   - 403: any;
10237   - /**
10238   - * @description
10239   - * Not Found
10240   - */
10241   - 404: any;
10242   -}
10243   -
10244   -export type GetServiceInvoiceQueryReadyInvoiceRecordListResponseSuccess =
10245   - GetServiceInvoiceQueryReadyInvoiceRecordListResponse[200];
10246   -/**
10247   - * @description
10248   - * 获取要开票记录列表
10249   - * @tags 发票
10250   - * @produces *
10251   - */
10252   -export const getServiceInvoiceQueryReadyInvoiceRecordList =
10253   - /* #__PURE__ */ (() => {
10254   - const method = 'get';
10255   - const url = '/service/invoice/queryReadyInvoiceRecordList';
10256   - function request(): Promise<GetServiceInvoiceQueryReadyInvoiceRecordListResponseSuccess> {
10257   - return requester(request.url, {
10258   - method: request.method,
10259   - }) as unknown as Promise<GetServiceInvoiceQueryReadyInvoiceRecordListResponseSuccess>;
10260   - }
10261   -
10262   - /** http method */
10263   - request.method = method;
10264   - /** request url */
10265   - request.url = url;
10266   - return request;
10267   - })();
10268   -
10269   -/** @description request parameter type for postServiceInvoiceReissue */
10270   -export interface PostServiceInvoiceReissueOption {
  10121 +/** @description request parameter type for postServiceInvoiceQueryInvoice */
  10122 +export interface PostServiceInvoiceQueryInvoiceOption {
10271 10123 /**
10272 10124 * @description
10273 10125 * dto
... ... @@ -10276,12 +10128,12 @@ export interface PostServiceInvoiceReissueOption {
10276 10128 /**
10277 10129 @description
10278 10130 dto */
10279   - dto: ReissueInvoiceDto;
  10131 + dto: Dto;
10280 10132 };
10281 10133 }
10282 10134  
10283   -/** @description response type for postServiceInvoiceReissue */
10284   -export interface PostServiceInvoiceReissueResponse {
  10135 +/** @description response type for postServiceInvoiceQueryInvoice */
  10136 +export interface PostServiceInvoiceQueryInvoiceResponse {
10285 10137 /**
10286 10138 * @description
10287 10139 * OK
... ... @@ -10309,25 +10161,25 @@ export interface PostServiceInvoiceReissueResponse {
10309 10161 404: any;
10310 10162 }
10311 10163  
10312   -export type PostServiceInvoiceReissueResponseSuccess =
10313   - PostServiceInvoiceReissueResponse[200];
  10164 +export type PostServiceInvoiceQueryInvoiceResponseSuccess =
  10165 + PostServiceInvoiceQueryInvoiceResponse[200];
10314 10166 /**
10315 10167 * @description
10316   - * 重新开票
  10168 + * 发票页查询
10317 10169 * @tags 发票
10318 10170 * @produces *
10319 10171 * @consumes application/json
10320 10172 */
10321   -export const postServiceInvoiceReissue = /* #__PURE__ */ (() => {
  10173 +export const postServiceInvoiceQueryInvoice = /* #__PURE__ */ (() => {
10322 10174 const method = 'post';
10323   - const url = '/service/invoice/reissue';
  10175 + const url = '/service/invoice/queryInvoice';
10324 10176 function request(
10325   - option: PostServiceInvoiceReissueOption,
10326   - ): Promise<PostServiceInvoiceReissueResponseSuccess> {
  10177 + option: PostServiceInvoiceQueryInvoiceOption,
  10178 + ): Promise<PostServiceInvoiceQueryInvoiceResponseSuccess> {
10327 10179 return requester(request.url, {
10328 10180 method: request.method,
10329 10181 ...option,
10330   - }) as unknown as Promise<PostServiceInvoiceReissueResponseSuccess>;
  10182 + }) as unknown as Promise<PostServiceInvoiceQueryInvoiceResponseSuccess>;
10331 10183 }
10332 10184  
10333 10185 /** http method */
... ... @@ -10337,8 +10189,8 @@ export const postServiceInvoiceReissue = /* #__PURE__ */ (() =&gt; {
10337 10189 return request;
10338 10190 })();
10339 10191  
10340   -/** @description request parameter type for postServiceInvoiceReissueAudit */
10341   -export interface PostServiceInvoiceReissueAuditOption {
  10192 +/** @description request parameter type for postServiceInvoiceQueryInvoiceDetail */
  10193 +export interface PostServiceInvoiceQueryInvoiceDetailOption {
10342 10194 /**
10343 10195 * @description
10344 10196 * dto
... ... @@ -10347,12 +10199,12 @@ export interface PostServiceInvoiceReissueAuditOption {
10347 10199 /**
10348 10200 @description
10349 10201 dto */
10350   - dto: AuditDto;
  10202 + dto: QueryInvoiceDetailDto;
10351 10203 };
10352 10204 }
10353 10205  
10354   -/** @description response type for postServiceInvoiceReissueAudit */
10355   -export interface PostServiceInvoiceReissueAuditResponse {
  10206 +/** @description response type for postServiceInvoiceQueryInvoiceDetail */
  10207 +export interface PostServiceInvoiceQueryInvoiceDetailResponse {
10356 10208 /**
10357 10209 * @description
10358 10210 * OK
... ... @@ -10380,25 +10232,25 @@ export interface PostServiceInvoiceReissueAuditResponse {
10380 10232 404: any;
10381 10233 }
10382 10234  
10383   -export type PostServiceInvoiceReissueAuditResponseSuccess =
10384   - PostServiceInvoiceReissueAuditResponse[200];
  10235 +export type PostServiceInvoiceQueryInvoiceDetailResponseSuccess =
  10236 + PostServiceInvoiceQueryInvoiceDetailResponse[200];
10385 10237 /**
10386 10238 * @description
10387   - * 重新开票审核
  10239 + * 查看发票详情
10388 10240 * @tags 发票
10389 10241 * @produces *
10390 10242 * @consumes application/json
10391 10243 */
10392   -export const postServiceInvoiceReissueAudit = /* #__PURE__ */ (() => {
  10244 +export const postServiceInvoiceQueryInvoiceDetail = /* #__PURE__ */ (() => {
10393 10245 const method = 'post';
10394   - const url = '/service/invoice/reissueAudit';
  10246 + const url = '/service/invoice/queryInvoiceDetail';
10395 10247 function request(
10396   - option: PostServiceInvoiceReissueAuditOption,
10397   - ): Promise<PostServiceInvoiceReissueAuditResponseSuccess> {
  10248 + option: PostServiceInvoiceQueryInvoiceDetailOption,
  10249 + ): Promise<PostServiceInvoiceQueryInvoiceDetailResponseSuccess> {
10398 10250 return requester(request.url, {
10399 10251 method: request.method,
10400 10252 ...option,
10401   - }) as unknown as Promise<PostServiceInvoiceReissueAuditResponseSuccess>;
  10253 + }) as unknown as Promise<PostServiceInvoiceQueryInvoiceDetailResponseSuccess>;
10402 10254 }
10403 10255  
10404 10256 /** http method */
... ... @@ -10408,8 +10260,8 @@ export const postServiceInvoiceReissueAudit = /* #__PURE__ */ (() =&gt; {
10408 10260 return request;
10409 10261 })();
10410 10262  
10411   -/** @description request parameter type for postServiceInvoiceUrgentInvoicing */
10412   -export interface PostServiceInvoiceUrgentInvoicingOption {
  10263 +/** @description request parameter type for postServiceInvoiceReissue */
  10264 +export interface PostServiceInvoiceReissueOption {
10413 10265 /**
10414 10266 * @description
10415 10267 * dto
... ... @@ -10418,12 +10270,12 @@ export interface PostServiceInvoiceUrgentInvoicingOption {
10418 10270 /**
10419 10271 @description
10420 10272 dto */
10421   - dto: AuditDto;
  10273 + dto: ReissueInvoiceDto;
10422 10274 };
10423 10275 }
10424 10276  
10425   -/** @description response type for postServiceInvoiceUrgentInvoicing */
10426   -export interface PostServiceInvoiceUrgentInvoicingResponse {
  10277 +/** @description response type for postServiceInvoiceReissue */
  10278 +export interface PostServiceInvoiceReissueResponse {
10427 10279 /**
10428 10280 * @description
10429 10281 * OK
... ... @@ -10451,25 +10303,25 @@ export interface PostServiceInvoiceUrgentInvoicingResponse {
10451 10303 404: any;
10452 10304 }
10453 10305  
10454   -export type PostServiceInvoiceUrgentInvoicingResponseSuccess =
10455   - PostServiceInvoiceUrgentInvoicingResponse[200];
  10306 +export type PostServiceInvoiceReissueResponseSuccess =
  10307 + PostServiceInvoiceReissueResponse[200];
10456 10308 /**
10457 10309 * @description
10458   - * 加急开票审核
  10310 + * 重新开票
10459 10311 * @tags 发票
10460 10312 * @produces *
10461 10313 * @consumes application/json
10462 10314 */
10463   -export const postServiceInvoiceUrgentInvoicing = /* #__PURE__ */ (() => {
  10315 +export const postServiceInvoiceReissue = /* #__PURE__ */ (() => {
10464 10316 const method = 'post';
10465   - const url = '/service/invoice/urgentInvoicing';
  10317 + const url = '/service/invoice/reissue';
10466 10318 function request(
10467   - option: PostServiceInvoiceUrgentInvoicingOption,
10468   - ): Promise<PostServiceInvoiceUrgentInvoicingResponseSuccess> {
  10319 + option: PostServiceInvoiceReissueOption,
  10320 + ): Promise<PostServiceInvoiceReissueResponseSuccess> {
10469 10321 return requester(request.url, {
10470 10322 method: request.method,
10471 10323 ...option,
10472   - }) as unknown as Promise<PostServiceInvoiceUrgentInvoicingResponseSuccess>;
  10324 + }) as unknown as Promise<PostServiceInvoiceReissueResponseSuccess>;
10473 10325 }
10474 10326  
10475 10327 /** http method */
... ...
src/utils/numberUtil.ts 0 → 100644
  1 +export function getRandomNumber(numDigits: number) {
  2 + if (numDigits <= 0) {
  3 + throw new Error('Number of digits must be greater than 0');
  4 + }
  5 +
  6 + const min = Math.pow(10, numDigits - 1);
  7 + const max = Math.pow(10, numDigits) - 1;
  8 + return Math.floor(Math.random() * (max - min + 1)) + min;
  9 +}
... ...
src/utils/order.ts
  1 +import { postServiceOrderQuerySalesCode } from '@/services';
1 2 import { cloneDeep } from 'lodash';
2 3 import { getUserInfo } from '.';
3 4 export function getReceivingCompanyOptions(PAYEE_OPTIONS: any) {
... ... @@ -63,3 +64,17 @@ export function isFinance() {
63 64 }
64 65 return false;
65 66 }
  67 +/**
  68 + * 获取销售代码枚举,在复制和编辑的时候判断是否为旧的代码
  69 + */
  70 +export const getSalesCodeOptions = async () => {
  71 + const res = await postServiceOrderQuerySalesCode();
  72 + let options = res.data?.map((item) => {
  73 + return {
  74 + label: item.userName,
  75 + value: item.userName,
  76 + number: item.number,
  77 + };
  78 + });
  79 + return options;
  80 +};
... ...
src/utils/validators.ts
... ... @@ -5,3 +5,8 @@ export const validatePhoneNumber = (_: any, value: any) =&gt; {
5 5 }
6 6 return Promise.reject('请输入正确的电话号码格式(例如:13789758969)');
7 7 };
  8 +
  9 +export const validatePhoneNumberBool = (phoneNumber: any) => {
  10 + const regex = /^1[3456789]\d{9}$/;
  11 + return regex.test(phoneNumber);
  12 +};
... ...