Commit e5e4ea57595e0c2033fa9024ca1b3da5d65424d9

Authored by boyang
2 parents bc0849a9 66e38ec1

Merge branch 'dev' into 'master'

Dev



See merge request !32
src/pages/Order/OrderList/OrderDrawer.tsx
@@ -11,6 +11,7 @@ import { @@ -11,6 +11,7 @@ import {
11 postKingdeeRepMaterialUnit, 11 postKingdeeRepMaterialUnit,
12 postKingdeeRepMeasureUnit, 12 postKingdeeRepMeasureUnit,
13 postPrepaidPhoneAvailableList, 13 postPrepaidPhoneAvailableList,
  14 + postResearchGroupsMemberExists,
14 postResearchGroupsNameSet, 15 postResearchGroupsNameSet,
15 postServiceConstCompanyType, 16 postServiceConstCompanyType,
16 postServiceConstOrderSource, 17 postServiceConstOrderSource,
@@ -1242,49 +1243,132 @@ export default ({ onClose, data, subOrders, orderOptType }) => { @@ -1242,49 +1243,132 @@ export default ({ onClose, data, subOrders, orderOptType }) => {
1242 <ProFormDependency name={['companyType']}> 1243 <ProFormDependency name={['companyType']}>
1243 {({ companyType }) => { 1244 {({ companyType }) => {
1244 const renderInstitutionContactName = () => ( 1245 const renderInstitutionContactName = () => (
1245 - <Group>  
1246 - <ProFormSelect  
1247 - key="institutionContactName"  
1248 - width="xl"  
1249 - showSearch  
1250 - name="institutionContactName"  
1251 - rules={[{ required: true, message: '请输入课题组名称!' }]}  
1252 - request={async (value) => {  
1253 - const keywords = value?.keyWords || '';  
1254 - const res = await postResearchGroupsNameSet({  
1255 - data: { status: 'ADD_AUDIT_PASS', groupName: keywords },  
1256 - });  
1257 - return Object.entries(res?.data || {}).map(  
1258 - ([researchGroupsId, researchGroupsName]) => ({  
1259 - label: researchGroupsName,  
1260 - value: researchGroupsName, // 使用 researchGroupsId 作为 value  
1261 - key: researchGroupsId,  
1262 - id: researchGroupsId,  
1263 - }),  
1264 - );  
1265 - }}  
1266 - fieldProps={{  
1267 - filterOption: () => true,  
1268 - onChange: (_, option) => {  
1269 - form.setFieldsValue({  
1270 - researchGroupId: option?.id || '', 1246 + <>
  1247 + <Group>
  1248 + <ProFormSelect
  1249 + key="institutionContactName"
  1250 + width="xl"
  1251 + showSearch
  1252 + name="institutionContactName"
  1253 + rules={[{ required: true, message: '请输入课题组名称!' }]}
  1254 + request={async (value) => {
  1255 + const keywords = value?.keyWords || '';
  1256 + const res = await postResearchGroupsNameSet({
  1257 + data: {
  1258 + status: 'ADD_AUDIT_PASS',
  1259 + groupName: keywords,
  1260 + },
1271 }); 1261 });
1272 - }, 1262 + return Object.entries(res?.data || {}).map(
  1263 + ([researchGroupsId, researchGroupsName]) => ({
  1264 + label: researchGroupsName,
  1265 + value: researchGroupsName, // 使用 researchGroupsId 作为 value
  1266 + key: researchGroupsId,
  1267 + id: researchGroupsId,
  1268 + }),
  1269 + );
  1270 + }}
  1271 + fieldProps={{
  1272 + filterOption: () => true,
  1273 + onChange: async (_, option) => {
  1274 + const researchGroupId = option?.id || '';
  1275 + form.setFieldsValue({
  1276 + researchGroupId: researchGroupId,
  1277 + });
  1278 +
  1279 + // 检查用户是否已经是该课题组成员
  1280 + if (researchGroupId) {
  1281 + const customerContact = form.getFieldValue(
  1282 + 'customerContactNumber',
  1283 + );
  1284 + if (customerContact) {
  1285 + try {
  1286 + const res =
  1287 + await postResearchGroupsMemberExists({
  1288 + query: {
  1289 + customerContact,
  1290 + researchGroupId: Number(researchGroupId),
  1291 + },
  1292 + });
  1293 +
  1294 + // 响应码200表示请求成功,值为false表示用户不是课题组成员
  1295 + // 必须先检查res是否存在并且是否有200属性
  1296 + console.log(res, '5656res');
  1297 + const isMember = res;
  1298 +
  1299 + if (!isMember) {
  1300 + // 显示用户将被添加到课题组的信息
  1301 + form.setFields([
  1302 + {
  1303 + name: 'researchGroupWarning',
  1304 + value: true,
  1305 + },
  1306 + ]);
  1307 + } else {
  1308 + form.setFields([
  1309 + {
  1310 + name: 'researchGroupWarning',
  1311 + value: false,
  1312 + },
  1313 + ]);
  1314 + }
  1315 + } catch (error) {
  1316 + console.error('检查课题组成员失败:', error);
  1317 + }
  1318 + }
  1319 + }
  1320 + },
  1321 + }}
  1322 + debounceTime={1000}
  1323 + label="课题组名称"
  1324 + placeholder="请输入名称"
  1325 + />
  1326 + <ProFormDigit
  1327 + readonly
  1328 + key="researchGroupId"
  1329 + width="md"
  1330 + name="researchGroupId"
  1331 + label="课题组Id"
  1332 + fieldProps={{ precision: 0 }} // 只允许整数
  1333 + rules={[{ required: true, message: '请重新选择课题组!' }]}
  1334 + />
  1335 + </Group>
  1336 + <ProFormDependency
  1337 + name={[
  1338 + 'researchGroupWarning',
  1339 + 'institutionContactName',
  1340 + 'researchGroupId',
  1341 + ]}
  1342 + >
  1343 + {({
  1344 + researchGroupWarning,
  1345 + institutionContactName,
  1346 + researchGroupId,
  1347 + }) => {
  1348 + if (
  1349 + researchGroupWarning &&
  1350 + institutionContactName &&
  1351 + researchGroupId
  1352 + ) {
  1353 + const customerNameString =
  1354 + form.getFieldValue('customerNameString') || '客户';
  1355 + return (
  1356 + <div
  1357 + style={{
  1358 + color: 'red',
  1359 + marginBottom: '15px',
  1360 + marginTop: '0px',
  1361 + }}
  1362 + >
  1363 + 订单提交后{customerNameString}将默认加入
  1364 + {institutionContactName}课题组
  1365 + </div>
  1366 + );
  1367 + }
  1368 + return null;
1273 }} 1369 }}
1274 - debounceTime={1000}  
1275 - label="课题组名称"  
1276 - placeholder="请输入名称"  
1277 - />  
1278 - <ProFormDigit  
1279 - readonly  
1280 - key="researchGroupId"  
1281 - width="md"  
1282 - name="researchGroupId"  
1283 - label="课题组Id"  
1284 - fieldProps={{ precision: 0 }} // 只允许整数  
1285 - rules={[{ required: true, message: '请重新选择课题组!' }]}  
1286 - />  
1287 - </Group> 1370 + </ProFormDependency>
  1371 + </>
1288 ); 1372 );
1289 const renderPlatformType = (fieldKey) => ( 1373 const renderPlatformType = (fieldKey) => (
1290 <ProFormSelect 1374 <ProFormSelect
src/pages/OrderReport/components/OrderStatisticCard.tsx
@@ -338,9 +338,9 @@ export default ({ data, statisticsMethod, reFreshData }) =&gt; { @@ -338,9 +338,9 @@ export default ({ data, statisticsMethod, reFreshData }) =&gt; {
338 <ProCard 338 <ProCard
339 className="order-statictis-card" 339 className="order-statictis-card"
340 bordered 340 bordered
341 - title={<CardTitle title="已开票已回款订单" />} 341 + title={<CardTitle title="未回款订单总金额" />}
342 > 342 >
343 - <CardContent content={data?.invoicedAndReiceptedCount} /> 343 + <CardContent unit="¥" content={data?.unpaidOrdersTotalAmount} />
344 </ProCard> 344 </ProCard>
345 <ProCard 345 <ProCard
346 className="order-statictis-card" 346 className="order-statictis-card"
src/pages/Prepaid/index.tsx
@@ -8,6 +8,7 @@ import { @@ -8,6 +8,7 @@ import {
8 postPrepaidList, 8 postPrepaidList,
9 } from '@/services'; 9 } from '@/services';
10 import { enumValueToLabel, formatDateTime } from '@/utils'; 10 import { enumValueToLabel, formatDateTime } from '@/utils';
  11 +import { getUserInfo } from '@/utils/user';
11 import { PlusOutlined } from '@ant-design/icons'; 12 import { PlusOutlined } from '@ant-design/icons';
12 import { ActionType, ProTable } from '@ant-design/pro-components'; 13 import { ActionType, ProTable } from '@ant-design/pro-components';
13 import { Button, Divider, Image, Tabs, message } from 'antd'; 14 import { Button, Divider, Image, Tabs, message } from 'antd';
@@ -27,6 +28,7 @@ import { @@ -27,6 +28,7 @@ import {
27 import './index.less'; 28 import './index.less';
28 29
29 const PrepaidPage = () => { 30 const PrepaidPage = () => {
  31 + const user = getUserInfo();
30 const prepaidActionRef = useRef<ActionType>(); 32 const prepaidActionRef = useRef<ActionType>();
31 const accountActionRef = useRef<ActionType>(); 33 const accountActionRef = useRef<ActionType>();
32 const [rechargePrepaymentModalVisible, setRechargePrepaymentModalVisible] = 34 const [rechargePrepaymentModalVisible, setRechargePrepaymentModalVisible] =
@@ -327,8 +329,32 @@ const PrepaidPage = () =&gt; { @@ -327,8 +329,32 @@ const PrepaidPage = () =&gt; {
327 const res = await postCanrdApiUserList({ 329 const res = await postCanrdApiUserList({
328 data: { ...params }, 330 data: { ...params },
329 }); 331 });
  332 + const data = res?.data?.data || [];
  333 + const targetPhones = [
  334 + '18550286106',
  335 + '15286038815',
  336 + '15202597163',
  337 + '13267086260',
  338 + '15900392469',
  339 + '13529047645',
  340 + ];
  341 +
  342 + const processedData = data.map((item) => {
  343 + const isAdmin = user.roles.includes('ADMIN');
  344 + const isSalesManager = user.roles.includes('SALES_MANAGER');
  345 + if (
  346 + targetPhones.includes(item.phone) &&
  347 + !(isAdmin || isSalesManager)
  348 + ) {
  349 + return {
  350 + ...item,
  351 + nowMoney: '****',
  352 + };
  353 + }
  354 + return item;
  355 + });
330 return { 356 return {
331 - data: res?.data?.data || [], 357 + data: processedData,
332 total: res?.data?.total || 0, 358 total: res?.data?.total || 0,
333 }; 359 };
334 }} 360 }}
src/services/definition.ts
@@ -3838,6 +3838,12 @@ export interface ResearchGroupListRequest { @@ -3838,6 +3838,12 @@ export interface ResearchGroupListRequest {
3838 end?: number; 3838 end?: number;
3839 /** 3839 /**
3840 * @description 3840 * @description
  3841 + * 课题组ID
  3842 + * @format int64
  3843 + */
  3844 + groupId?: number;
  3845 + /**
  3846 + * @description
3841 * 课题组名称 3847 * 课题组名称
3842 */ 3848 */
3843 groupName?: string; 3849 groupName?: string;
@@ -4134,6 +4140,12 @@ export interface ResearchGroupsAccessDTO { @@ -4134,6 +4140,12 @@ export interface ResearchGroupsAccessDTO {
4134 deleteFlag?: number; 4140 deleteFlag?: number;
4135 /** 4141 /**
4136 * @description 4142 * @description
  4143 + * 课题组id
  4144 + * @format int64
  4145 + */
  4146 + groupId?: number;
  4147 + /**
  4148 + * @description
4137 * 课题组名称 4149 * 课题组名称
4138 */ 4150 */
4139 groupName?: string; 4151 groupName?: string;
src/services/request.ts
@@ -15311,6 +15311,82 @@ export const postResearchGroupsList = /* #__PURE__ */ (() =&gt; { @@ -15311,6 +15311,82 @@ export const postResearchGroupsList = /* #__PURE__ */ (() =&gt; {
15311 return request; 15311 return request;
15312 })(); 15312 })();
15313 15313
  15314 +/** @description request parameter type for postResearchGroupsMemberExists */
  15315 +export interface PostResearchGroupsMemberExistsOption {
  15316 + /**
  15317 + * @description
  15318 + * customerContact
  15319 + */
  15320 + query?: {
  15321 + /**
  15322 + @description
  15323 + customerContact */
  15324 + customerContact?: string;
  15325 + /**
  15326 + @description
  15327 + researchGroupId
  15328 + @format int64 */
  15329 + researchGroupId?: number;
  15330 + };
  15331 +}
  15332 +
  15333 +/** @description response type for postResearchGroupsMemberExists */
  15334 +export interface PostResearchGroupsMemberExistsResponse {
  15335 + /**
  15336 + * @description
  15337 + * OK
  15338 + */
  15339 + 200: boolean;
  15340 + /**
  15341 + * @description
  15342 + * Created
  15343 + */
  15344 + 201: any;
  15345 + /**
  15346 + * @description
  15347 + * Unauthorized
  15348 + */
  15349 + 401: any;
  15350 + /**
  15351 + * @description
  15352 + * Forbidden
  15353 + */
  15354 + 403: any;
  15355 + /**
  15356 + * @description
  15357 + * Not Found
  15358 + */
  15359 + 404: any;
  15360 +}
  15361 +
  15362 +export type PostResearchGroupsMemberExistsResponseSuccess =
  15363 + PostResearchGroupsMemberExistsResponse[200];
  15364 +/**
  15365 + * @description
  15366 + * 查询课题组成员
  15367 + * @tags research-groups-controller
  15368 + * @produces *
  15369 + * @consumes application/json
  15370 + */
  15371 +export const postResearchGroupsMemberExists = /* #__PURE__ */ (() => {
  15372 + const method = 'post';
  15373 + const url = '/research/groups/memberExists';
  15374 + function request(
  15375 + option?: PostResearchGroupsMemberExistsOption,
  15376 + ): Promise<PostResearchGroupsMemberExistsResponseSuccess> {
  15377 + return requester(request.url, {
  15378 + method: request.method,
  15379 + ...option,
  15380 + }) as unknown as Promise<PostResearchGroupsMemberExistsResponseSuccess>;
  15381 + }
  15382 +
  15383 + /** http method */
  15384 + request.method = method;
  15385 + /** request url */
  15386 + request.url = url;
  15387 + return request;
  15388 +})();
  15389 +
15314 /** @description request parameter type for postResearchGroupsNameSet */ 15390 /** @description request parameter type for postResearchGroupsNameSet */
15315 export interface PostResearchGroupsNameSetOption { 15391 export interface PostResearchGroupsNameSetOption {
15316 /** 15392 /**
@@ -21089,6 +21165,61 @@ export const postServiceOrderAuditPaymentReceipt = /* #__PURE__ */ (() =&gt; { @@ -21089,6 +21165,61 @@ export const postServiceOrderAuditPaymentReceipt = /* #__PURE__ */ (() =&gt; {
21089 return request; 21165 return request;
21090 })(); 21166 })();
21091 21167
  21168 +/** @description response type for postServiceOrderBatchCaculateAndSetIntegral */
  21169 +export interface PostServiceOrderBatchCaculateAndSetIntegralResponse {
  21170 + /**
  21171 + * @description
  21172 + * OK
  21173 + */
  21174 + 200: ServerResult;
  21175 + /**
  21176 + * @description
  21177 + * Created
  21178 + */
  21179 + 201: any;
  21180 + /**
  21181 + * @description
  21182 + * Unauthorized
  21183 + */
  21184 + 401: any;
  21185 + /**
  21186 + * @description
  21187 + * Forbidden
  21188 + */
  21189 + 403: any;
  21190 + /**
  21191 + * @description
  21192 + * Not Found
  21193 + */
  21194 + 404: any;
  21195 +}
  21196 +
  21197 +export type PostServiceOrderBatchCaculateAndSetIntegralResponseSuccess =
  21198 + PostServiceOrderBatchCaculateAndSetIntegralResponse[200];
  21199 +/**
  21200 + * @description
  21201 + * 计算积分
  21202 + * @tags 内部订单
  21203 + * @produces *
  21204 + * @consumes application/json
  21205 + */
  21206 +export const postServiceOrderBatchCaculateAndSetIntegral =
  21207 + /* #__PURE__ */ (() => {
  21208 + const method = 'post';
  21209 + const url = '/service/order/batchCaculateAndSetIntegral';
  21210 + function request(): Promise<PostServiceOrderBatchCaculateAndSetIntegralResponseSuccess> {
  21211 + return requester(request.url, {
  21212 + method: request.method,
  21213 + }) as unknown as Promise<PostServiceOrderBatchCaculateAndSetIntegralResponseSuccess>;
  21214 + }
  21215 +
  21216 + /** http method */
  21217 + request.method = method;
  21218 + /** request url */
  21219 + request.url = url;
  21220 + return request;
  21221 + })();
  21222 +
21092 /** @description request parameter type for postServiceOrderCancelSend */ 21223 /** @description request parameter type for postServiceOrderCancelSend */
21093 export interface PostServiceOrderCancelSendOption { 21224 export interface PostServiceOrderCancelSendOption {
21094 /** 21225 /**