Browse Source

deploy

master
Soleilw 3 months ago
parent
commit
614de6d094
100 changed files with 2742 additions and 2212 deletions
  1. 1
    1
      config/routes.ts
  2. 0
    95
      dist/186.85ff8a92.async.js
  3. 0
    95
      dist/211.0e350842.async.js
  4. 1
    0
      dist/231.d69fb849.async.js
  5. 2
    0
      dist/244.a733fb95.async.js
  6. 2
    0
      dist/318.34dd3549.async.js
  7. 1
    0
      dist/337.b68e4aaa.async.js
  8. 95
    0
      dist/338.622c8470.async.js
  9. 1
    0
      dist/457.bd6e4e3e.async.js
  10. 0
    1
      dist/487.f62e0607.async.js
  11. 0
    1
      dist/50.b8d3f0bd.async.js
  12. 0
    142
      dist/581.9dc3f9bf.async.js
  13. 142
    0
      dist/581.9f96f300.async.js
  14. 2
    0
      dist/668.1988c2ef.async.js
  15. 0
    2
      dist/668.922f5baf.async.js
  16. 0
    1
      dist/673.ac212c69.async.js
  17. 0
    2
      dist/833.a35fa8fe.async.js
  18. 0
    1
      dist/881.47fbd868.async.js
  19. 95
    0
      dist/895.8e2c5dcd.async.js
  20. 1
    1
      dist/index.html
  21. 0
    1
      dist/p__Activity__List__index.8a3ad2bb.async.js
  22. 1
    0
      dist/p__Activity__List__index.c95792e0.async.js
  23. 0
    1
      dist/p__Advertisement__List__index.1d0bb612.async.js
  24. 1
    0
      dist/p__Advertisement__List__index.c9276c4f.async.js
  25. 1
    0
      dist/p__Advertisement__Putin__index.1a0ae1d5.async.js
  26. 0
    1
      dist/p__Advertisement__Putin__index.322efb77.async.js
  27. 0
    1
      dist/p__Company__Department__index.5c29a99a.async.js
  28. 1
    0
      dist/p__Company__Department__index.a0a44529.async.js
  29. 0
    2
      dist/p__Company__List__index.2ef83605.async.js
  30. 1
    0
      dist/p__Company__List__index.94823330.async.js
  31. 1
    0
      dist/p__Company__Post__index.7c11931c.async.js
  32. 0
    1
      dist/p__Company__Post__index.bf18b8b4.async.js
  33. 1
    0
      dist/p__Company__Vip__index.36cb2475.async.js
  34. 0
    1
      dist/p__Company__Vip__index.5b365e65.async.js
  35. 1
    0
      dist/p__Fair__List__index.ed3aab22.async.js
  36. 0
    1
      dist/p__Fair__List__index.f5374228.async.js
  37. 1
    0
      dist/p__Feedback__index.2d8d63d7.async.js
  38. 0
    1
      dist/p__Feedback__index.910cf59a.async.js
  39. 1
    1
      dist/p__Home__index.425111da.async.js
  40. 1
    0
      dist/p__Information__Article__index.18cf708e.async.js
  41. 0
    1
      dist/p__Information__Article__index.3727a096.async.js
  42. 1
    0
      dist/p__Information__Section__index.12a869db.async.js
  43. 0
    1
      dist/p__Information__Section__index.6eb89de2.async.js
  44. 0
    1
      dist/p__Jobseeker__Account__index.2317941d.async.js
  45. 1
    0
      dist/p__Jobseeker__Account__index.60a09eb7.async.js
  46. 0
    1
      dist/p__Jobseeker__List__index.5d15f551.async.js
  47. 1
    0
      dist/p__Jobseeker__List__index.a4088fb7.async.js
  48. 1
    0
      dist/p__Login__index.0d769940.async.js
  49. 0
    1
      dist/p__Login__index.ae8f7263.async.js
  50. 0
    1
      dist/p__Permission__Account__index.13228745.async.js
  51. 1
    0
      dist/p__Permission__Account__index.d5b3851b.async.js
  52. 1
    0
      dist/p__Permission__List__index.787df597.async.js
  53. 0
    1
      dist/p__Permission__List__index.cbdc93ec.async.js
  54. 0
    1
      dist/p__Permission__Role__index.a45d0a71.async.js
  55. 1
    0
      dist/p__Permission__Role__index.f6e1a6f2.async.js
  56. 1
    1
      dist/p__Publichouse__index.e0008e1d.async.js
  57. 1
    0
      dist/p__Setting__Dictionary__index.09a77210.async.js
  58. 0
    1
      dist/p__Setting__Dictionary__index.22072e08.async.js
  59. 1
    1
      dist/p__Setting__Other__index.b4c43b67.async.js
  60. 1
    0
      dist/p__Setting__System__index.031006f0.async.js
  61. 0
    1
      dist/p__Setting__System__index.5609f0cd.async.js
  62. 29
    29
      dist/umi.847c9816.js
  63. 3
    2
      src/apis/types/company.d.ts
  64. 60
    38
      src/components/Common/upload/index.tsx
  65. 10
    8
      src/components/Render/Main/Activity/List/table/index.tsx
  66. 8
    8
      src/components/Render/Main/Advertisement/List/create/index.tsx
  67. 57
    58
      src/components/Render/Main/Advertisement/List/table/index.tsx
  68. 101
    88
      src/components/Render/Main/Advertisement/Putin/create/index.tsx
  69. 123
    121
      src/components/Render/Main/Advertisement/Putin/table/index.tsx
  70. 2
    1
      src/components/Render/Main/Company/Department/create/index.tsx
  71. 43
    15
      src/components/Render/Main/Company/Department/table/index.tsx
  72. 62
    105
      src/components/Render/Main/Company/List/create/index.tsx
  73. 269
    250
      src/components/Render/Main/Company/List/table/index.tsx
  74. 122
    136
      src/components/Render/Main/Company/Post/create/index.tsx
  75. 142
    41
      src/components/Render/Main/Company/Post/table/index.tsx
  76. 125
    115
      src/components/Render/Main/Company/Vip/create/index.tsx
  77. 19
    10
      src/components/Render/Main/Company/Vip/fee/index.tsx
  78. 158
    61
      src/components/Render/Main/Company/Vip/table/index.tsx
  79. 65
    65
      src/components/Render/Main/Fair/List/create/index.tsx
  80. 149
    43
      src/components/Render/Main/Fair/List/table/index.tsx
  81. 2
    3
      src/components/Render/Main/Feedback/table/index.tsx
  82. 75
    88
      src/components/Render/Main/Information/Article/create/index.tsx
  83. 139
    92
      src/components/Render/Main/Information/Article/table/index.tsx
  84. 54
    49
      src/components/Render/Main/Information/Section/create/index.tsx
  85. 124
    27
      src/components/Render/Main/Information/Section/table/index.tsx
  86. 58
    26
      src/components/Render/Main/Jobseeker/Account/table/index.tsx
  87. 1
    1
      src/components/Render/Main/Jobseeker/List/create/index.tsx
  88. 7
    17
      src/components/Render/Main/Jobseeker/List/resume/basic/index.tsx
  89. 68
    82
      src/components/Render/Main/Jobseeker/List/resume/credential/index.tsx
  90. 111
    111
      src/components/Render/Main/Jobseeker/List/table/index.tsx
  91. 80
    59
      src/components/Render/Permission/Account/create/index.tsx
  92. 5
    7
      src/components/Render/Permission/Account/table/index.tsx
  93. 62
    45
      src/components/Render/Permission/List/create/index.tsx
  94. 1
    1
      src/components/Render/Permission/List/parent/index.tsx
  95. 27
    26
      src/components/Render/Permission/List/table/index.tsx
  96. 1
    1
      src/components/Render/Permission/Role/create/index.tsx
  97. 5
    6
      src/components/Render/Permission/Role/table/index.tsx
  98. 7
    7
      src/components/Render/Setting/Dictionary/create/index.tsx
  99. 3
    5
      src/components/Render/Setting/Dictionary/table/index.tsx
  100. 0
    0
      src/components/Render/Setting/System/create/index.tsx

+ 1
- 1
config/routes.ts View File

@@ -230,4 +230,4 @@ export default [
// }
// ]
// }
]
]

+ 0
- 95
dist/186.85ff8a92.async.js
File diff suppressed because it is too large
View File


+ 0
- 95
dist/211.0e350842.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/231.d69fb849.async.js
File diff suppressed because it is too large
View File


+ 2
- 0
dist/244.a733fb95.async.js
File diff suppressed because it is too large
View File


+ 2
- 0
dist/318.34dd3549.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/337.b68e4aaa.async.js
File diff suppressed because it is too large
View File


+ 95
- 0
dist/338.622c8470.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/457.bd6e4e3e.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/487.f62e0607.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/50.b8d3f0bd.async.js
File diff suppressed because it is too large
View File


+ 0
- 142
dist/581.9dc3f9bf.async.js
File diff suppressed because it is too large
View File


+ 142
- 0
dist/581.9f96f300.async.js
File diff suppressed because it is too large
View File


+ 2
- 0
dist/668.1988c2ef.async.js
File diff suppressed because it is too large
View File


+ 0
- 2
dist/668.922f5baf.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/673.ac212c69.async.js
File diff suppressed because it is too large
View File


+ 0
- 2
dist/833.a35fa8fe.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/881.47fbd868.async.js
File diff suppressed because it is too large
View File


+ 95
- 0
dist/895.8e2c5dcd.async.js
File diff suppressed because it is too large
View File


+ 1
- 1
dist/index.html View File

@@ -8,6 +8,6 @@
</head>
<body>
<div id="root"></div>
<script src="/umi.8cdc18ca.js"></script>
<script src="/umi.847c9816.js"></script>
</body>
</html>

+ 0
- 1
dist/p__Activity__List__index.8a3ad2bb.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Activity__List__index.c95792e0.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Advertisement__List__index.1d0bb612.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Advertisement__List__index.c9276c4f.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Advertisement__Putin__index.1a0ae1d5.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Advertisement__Putin__index.322efb77.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Company__Department__index.5c29a99a.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Company__Department__index.a0a44529.async.js
File diff suppressed because it is too large
View File


+ 0
- 2
dist/p__Company__List__index.2ef83605.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Company__List__index.94823330.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Company__Post__index.7c11931c.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Company__Post__index.bf18b8b4.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Company__Vip__index.36cb2475.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Company__Vip__index.5b365e65.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Fair__List__index.ed3aab22.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Fair__List__index.f5374228.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Feedback__index.2d8d63d7.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Feedback__index.910cf59a.async.js
File diff suppressed because it is too large
View File


dist/p__Home__index.425111da.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Information__Article__index.18cf708e.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Information__Article__index.3727a096.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Information__Section__index.12a869db.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Information__Section__index.6eb89de2.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Jobseeker__Account__index.2317941d.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Jobseeker__Account__index.60a09eb7.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Jobseeker__List__index.5d15f551.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Jobseeker__List__index.a4088fb7.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Login__index.0d769940.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Login__index.ae8f7263.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Permission__Account__index.13228745.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Permission__Account__index.d5b3851b.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Permission__List__index.787df597.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Permission__List__index.cbdc93ec.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Permission__Role__index.a45d0a71.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Permission__Role__index.f6e1a6f2.async.js
File diff suppressed because it is too large
View File


dist/p__Publichouse__index.e0008e1d.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Setting__Dictionary__index.09a77210.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Setting__Dictionary__index.22072e08.async.js
File diff suppressed because it is too large
View File


dist/p__Setting__Other__index.b4c43b67.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Setting__System__index.031006f0.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Setting__System__index.5609f0cd.async.js
File diff suppressed because it is too large
View File


dist/umi.847c9816.js
File diff suppressed because it is too large
View File


+ 3
- 2
src/apis/types/company.d.ts View File

@@ -29,6 +29,7 @@ declare namespace CompanyType {
company_photos ?: Object[],
longitude?: Number,
latitude?: Number,
status?: Number,

// 其他参数
location_arr ?: number[]
@@ -43,8 +44,8 @@ declare namespace CompanyType {
famous ?: Number,
member_type ?: Number,
member_status ?: Number,
start_date ?: Date,
end_date ?: Date,
start_date ?: Date | String,
end_date ?: Date | String,
sale ?: String,

// 其他参数

+ 60
- 38
src/components/Common/upload/index.tsx View File

@@ -1,59 +1,81 @@
import { useState } from "react";
import { useEffect, useState } from "react";
import { request } from '@umijs/max';
import { baseUrl } from '@/constants/index'
import { message } from 'antd';
import { message, Space, Image } from 'antd';
import { ProFormUploadButton } from '@ant-design/pro-components';
import { Imageprefix } from '@/constants';


type UploadModelProps = {
form_name: string;
uploadTxt: string;
image_type: number | 1;
image_length: number | 1;
onUploadComplete: (filename: string) => void;
multiple: boolean | false
multiple: boolean | false,
imageUrl?: String | undefined;

};
const UploadModel: React.FC<UploadModelProps> = (props) => {
const { onUploadComplete, uploadTxt, image_type, form_name, image_length , multiple} = props;
const { onUploadComplete, uploadTxt, image_type, form_name, image_length, multiple, imageUrl } = props;
const handleUploadComplete = (filename: string) => {
if (onUploadComplete) {
if (filename) {
onUploadComplete(filename);
}
};

const [image_url, setImageUrl] = useState<string>(imageUrl)

useEffect(() => {
setImageUrl(imageUrl)
}, [imageUrl])




return (
<>
<ProFormUploadButton
label={uploadTxt}
name={form_name}
icon={null}
title={uploadTxt}
fieldProps={{
maxCount: image_length,
multiple: multiple,
fileList: [],
listType: 'picture-card',
showUploadList: false,
customRequest: (e) => {
let formdata = new FormData();
formdata.append('image', e.file);
console.log(formdata)
request(baseUrl + '/common/image/upload?imgtype=' + image_type, {
method: 'post',
data: formdata,
Headers: {
Authorization: sessionStorage.getItem('token'),
'X-Requested-With': null
}
}).then(res => {
handleUploadComplete(res.data.filename)
}).catch(err => {
console.log(err)
message.error('上传失败')
})
}
}}
>

</ProFormUploadButton>
<Space>
<ProFormUploadButton
label={uploadTxt}
name={form_name}
icon={null}
title={uploadTxt}
fieldProps={{
maxCount: image_length,
multiple: multiple,
fileList: [],
listType: 'picture-card',
showUploadList: false,
customRequest: (e) => {
let formdata = new FormData();
formdata.append('image', e.file);
console.log(formdata)
request(baseUrl + '/common/image/upload?imgtype=' + image_type, {
method: 'post',
data: formdata,
Headers: {
Authorization: sessionStorage.getItem('token'),
'X-Requested-With': null
}
}).then(res => {
setImageUrl(res.data.filename)
handleUploadComplete(res.data.filename)
}).catch(err => {
console.log(err)
message.error('上传失败')
})
}
}}
>
</ProFormUploadButton>

{
image_url && <Image src={`${Imageprefix}${image_url}`} width={102} height={102} style={{ borderRadius: 8 }} />
}


</Space>
</>
)
}

+ 10
- 8
src/components/Render/Main/Activity/List/table/index.tsx View File

@@ -36,27 +36,31 @@ const PagesMainActivityListTable: React.FC = ({ dispatch, openModel, getId }: an
}}
>
<ProTable
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
actionRef={actionRef}
dataSource={list}
search={{ span: 8, labelWidth: 'auto' }}
rowSelection={{
type: 'checkbox'
}}
columns={[{
title: 'ID',
dataIndex: 'id',
width: 100,
width: 200,
search: false,
},
{
title: '地址',
dataIndex: 'address',
width: 240,
width: 200,
search: false
},
{
title: '地址分类',
dataIndex: 'cate',
valueType: 'select',
width: 100,
width: 200,
valueEnum: {
'菊城人才': {
text: '菊城人才',
@@ -79,21 +83,19 @@ const PagesMainActivityListTable: React.FC = ({ dispatch, openModel, getId }: an
title: '审核账号',
dataIndex: 'audit_mobile',
ellipsis: true,
width: 120,
width: 200,
search: false
},
{
title: '审核人',
dataIndex: 'contact_person',
width: 120,
width: 200,
search: false
},
{
title: '操作',
width: 100,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record.id)

+ 8
- 8
src/components/Render/Main/Advertisement/List/create/index.tsx View File

@@ -6,6 +6,7 @@ import {
ProFormText,
ProFormSegmented,
ProFormDigit,
ProFormRadio,
ProForm
} from '@ant-design/pro-components';
import { ConfigProvider, Flex, Space, Modal, message, Row, Col } from 'antd';
@@ -98,7 +99,7 @@ const PagesMainAdvertisementListCreate: React.FC = ({ dispatch, dictModel, openM
}}
>
<Row gutter={[16, 16]}>
<Col span={24}>
<Col span={12}>
<ProFormText
label="广告位置,按照该格式:来源页面广告位名"
name="name"
@@ -106,12 +107,12 @@ const PagesMainAdvertisementListCreate: React.FC = ({ dispatch, dictModel, openM
rules={[{ required: true, message: '请输入广告位置,如:小程序首页轮播图;小程序首页企业LOGO图' }]}
/>
</Col>
<Col span={24}>
<Col span={12}>
<ProFormText
label="广告位置代码,使用拼音缩写,不要超过十个字母,按照该格式:xcx(小程序)/gw(官网)-ym(页面)-ggwm(广告位名), 如:minisylbt(小程序首页轮播图)"
label="广告位置代码,使用拼音缩写,不要超过十个字母"
name="code"
placeholder="请输入广告位置代码,如:如:minisylbt(小程序首页轮播图)"
rules={[{ required: true, message: '请输入广告位置代码,如:如:minisylbt(小程序首页轮播图)' }]}
placeholder="请输入广告位置代码,使用拼音缩写,不要超过十个字母"
rules={[{ required: true, message: '请输入广告位置代码,使用拼音缩写,不要超过十个字母s' }]}
/>
</Col>
<Col span={12}>
@@ -136,10 +137,9 @@ const PagesMainAdvertisementListCreate: React.FC = ({ dispatch, dictModel, openM
</Col>
<Col span={12}>
<ProFormDigit label="行间距" name="row_padding" min={1} rules={[{ required: true, message: '请输入行间距' }]} />

</Col>
<Col span={12}>
<ProFormSegmented
<ProFormRadio.Group
name="random_show"
label="随机显示"
request={async () => [
@@ -150,7 +150,7 @@ const PagesMainAdvertisementListCreate: React.FC = ({ dispatch, dictModel, openM
/>
</Col>
<Col span={12}>
<ProFormSegmented
<ProFormRadio.Group
name="disabled_status"
label="禁用状态"
request={async () => [

+ 57
- 58
src/components/Render/Main/Advertisement/List/table/index.tsx View File

@@ -4,8 +4,8 @@ import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProTable, TableDropdown
} from '@ant-design/pro-components';
import { Button, Image, ConfigProvider, Select } from 'antd';
import { GetAdvertareaList} from '@/apis/api';
import { Button, Image, ConfigProvider, Space, Descriptions } from 'antd';
import { GetAdvertareaList } from '@/apis/api';

const PagesMainAdvertisementListTable: React.FC = ({ dispatch, openModel, getId }: any) => {
const actionRef = useRef<ActionType>();
@@ -24,6 +24,24 @@ const PagesMainAdvertisementListTable: React.FC = ({ dispatch, openModel, getId
}
}, [openModel.openModal])

const expandedRowRender = (record) => {
return (
<>
<Space direction='vertical' style={{ width: '100%' }}>
<Descriptions title="基本信息" bordered column={3} contentStyle={{ fontWeight: 'bold' }} labelStyle={{ width: 180 }}>
<Descriptions.Item label="限制显示广告数">{record.ad_num}</Descriptions.Item>
<Descriptions.Item label="显示列数">{record.cols}</Descriptions.Item>
<Descriptions.Item label="广告显示宽度">{record.width}</Descriptions.Item>
<Descriptions.Item label="广告显示高度">{record.height}</Descriptions.Item>
<Descriptions.Item label="列间距">{record.col_padding}</Descriptions.Item>
<Descriptions.Item label="行间距">{record.row_padding}</Descriptions.Item>
</Descriptions>
</Space >

</>
);
};

return (
<>
<ConfigProvider
@@ -35,69 +53,46 @@ const PagesMainAdvertisementListTable: React.FC = ({ dispatch, openModel, getId
}}
>
<ProTable
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
scroll={{ x: 1300 }}
actionRef={actionRef}
dataSource={list}
columns={[ {
search={{ span: 8, labelWidth: 'auto' }}
rowSelection={{
type: 'checkbox'
}}
expandable={{
expandedRowRender
}}
columns={[{
title: 'ID',
dataIndex: 'id',
width: 100,
search: false,
},
{
title: '广告位置',
dataIndex: 'name',
width: 240
},
{
title: '广告位置代码',
dataIndex: 'code',
search: false
},
{
title: '限制显示广告数',
dataIndex: 'ad_num',
search: false
},
{
title: '显示列数',
dataIndex: 'cols',
search: false
},{
title: '广告显示宽度',
dataIndex: 'width',
search: false
},{
title: '广告显示高度',
dataIndex: 'height',
search: false
},{
title: '列间距',
dataIndex: 'col_padding',
search: false
},{
title: '行间距',
dataIndex: 'row_padding',
search: false
},
{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record.id)
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>编辑</Button>,
<Button key='2' type='link' onClick={() => {
{
title: '广告位置',
dataIndex: 'name',
},
{
title: '广告位置代码',
dataIndex: 'code',

}}>删除</Button>
],
},
search: false
},
{
title: '操作',
key: 'option',
valueType: 'option',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record.id)
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>编辑</Button>,
<Button key='2' type='link' onClick={() => {

}}>删除</Button>
],
},
]}
rowKey="id"
pagination={{
@@ -122,7 +117,7 @@ const PagesMainAdvertisementListTable: React.FC = ({ dispatch, openModel, getId
sort: 'id',
sortby: 'desc',
keyword: params.name,
}).then(res => {
setList(res.data.advertareas)
setTotal(res.data.total)
@@ -130,6 +125,10 @@ const PagesMainAdvertisementListTable: React.FC = ({ dispatch, openModel, getId
}
headerTitle="广告位置列表"
toolBarRender={() => [
<Button type="primary" onClick={() => {
}}>
批量删除
</Button>,
<Button type="primary" onClick={() => {
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>

+ 101
- 88
src/components/Render/Main/Advertisement/Putin/create/index.tsx View File

@@ -7,7 +7,7 @@ import {
ProFormSegmented,
ProFormSelect,
ProForm,
FormControlRender,
ProFormRadio,
ProFormDatePicker,
ProFormDigit
} from '@ant-design/pro-components';
@@ -41,7 +41,7 @@ const PagesMainAdvertisementPutinCreate: React.FC = ({ dispatch, dictModel, open
theme={{
token: {
colorPrimary: '#4FBE70',
} , components: {
}, components: {
Segmented: {
itemSelectedBg: '#19be6e',
itemSelectedColor: '#ffffff'
@@ -111,97 +111,110 @@ const PagesMainAdvertisementPutinCreate: React.FC = ({ dispatch, dictModel, open
}
}}
>
<ProFormText
label="广告标题"
name="title"
placeholder="请输入广告标题"
rules={[{ required: true, message: '请输入广告标题' }]}
/>
<ProFormSelect
showSearch
name="area_id"
label="投放位置"
placeholder="请选择投放位置"
fieldProps={{
fieldNames: selectfieldNames
}}
request={(keyword) =>
GetAdvertareaList({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.advertareas;
})
}
rules={[{ required: true, message: '请选择投放位置' }]}

/>
<Row gutter={[16, 16]}>
{
detail ?
<Col span={24} style={{ display: 'flex' }}>
<UploadModel multiple={false} form_name="image_url" image_length={1} uploadTxt="上传封面图" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
{uploadedFilephotoName ? <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginLeft: '16px', marginTop: '32px', width: '100px', height: '100px' }}></Image> : <Image src={`${Imageprefix}${detail?.image_url}`} style={{ marginLeft: '16px', marginTop: '32px', width: '100px', height: '100px' }}></Image>}
</Col> : <>
<Col span={24} style={{ display: 'flex' }}>
<UploadModel multiple={false} form_name="image_url" image_length={1} uploadTxt="上传封面图" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
{uploadedFilephotoName ? <Col span={8}> <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image> </Col> : ''}
</Col>
</>
}
<Col span={24}>
<UploadModel multiple={false} form_name="image_url" image_length={1} uploadTxt="上传封面图" image_type={3} imageUrl={detail?.photo} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</Col>
<Col span={8}>
<ProFormText
label="广告标题"
name="title"
placeholder="请输入广告标题"
rules={[{ required: true, message: '请输入广告标题' }]}
/>
</Col>
<Col span={8}>
<ProFormSelect
showSearch
name="area_id"
label="投放位置"
placeholder="请选择投放位置"
fieldProps={{
fieldNames: selectfieldNames
}}
request={(keyword) =>
GetAdvertareaList({ page: 1, pagesize: 100, keyword: keyword.keyWords, sortby: 'desc', }).then(res => {
return res.data.advertareas;
})
}
rules={[{ required: true, message: '请选择投放位置' }]}

/>
</Col>
<Col span={8}>
<ProFormText
label="说明"
name="ad_description"
placeholder="请输入说明"
rules={[{ required: true, message: '请输入说明' }]}
/>
</Col>
<Col span={24}>
<ProFormText
label="跳转网址,小程序内部路径,以/pages/开头,如/pages/index/index, 外部网址需以http://或https://开头, 没有链接就填 //"
name="target_url"
placeholder="请输入跳转网址"
rules={[{ required: true, message: '请输入跳转网址' }]}
/>
</Col>
<Col span={8}>
<ProFormDigit
label="此广告展示顺序"
placeholder="请输入此广告展示顺序,请输入优先级的数字"
name="show_order"
min={1}
rules={[{ required: true, message: '请输入此广告展示顺序,请输入优先级的数字' }]}
/>
</Col>
<Col span={8}>
<ProFormDatePicker
width={'lg'}
name="valid_date"
label="有效时间"
fieldProps={{
format: 'YYYY-MM-DD'
}}
rules={[{ required: true, message: '请选择有效时间' }]}
/>
</Col>
<Col span={8}>
<ProFormRadio.Group
name="hide_ad"
label="是否隐藏广告"
request={async () => [
{ label: '是', value: 1 },
{ label: '否', value: 2 }
]}
rules={[{ required: true, message: '请选择是否隐藏广告' }]}
/>
</Col>
<Col span={8}>

<ProFormSelect
showSearch
name="company_id"
label="选择企业,没有企业选人才市场"
placeholder="请选择企业"
fieldProps={{
fieldNames: selectfieldCompanyNames
}}
rules={[{ required: true, message: '请选择企业' }]}
request={(keyword) =>
getCompanyList({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.list;
})
}
/>

</Col>
</Row>
<ProFormText
label="说明"
name="ad_description"
placeholder="请输入说明"
rules={[{ required: true, message: '请输入说明' }]}
/>
<ProFormText
label="跳转网址,小程序内部路径,以/pages/开头,如/pages/index/index, 外部网址需以http://或https://开头, 没有链接就填 //"
name="target_url"
placeholder="请输入跳转网址"
rules={[{ required: true, message: '请输入跳转网址' }]}
/>
<ProFormDigit
label="此广告展示顺序"
placeholder="请输入此广告展示顺序,请输入优先级的数字"
name="show_order"
min={1}
rules={[{ required: true, message: '请输入此广告展示顺序,请输入优先级的数字' }]}
/>
<ProFormDatePicker
name="valid_date"
label="有效时间"
fieldProps={{
format: 'YYYY-MM-DD'
}}
rules={[{ required: true, message: '请选择有效时间' }]}
/>
<ProFormSegmented
name="hide_ad"
label="是否隐藏广告"
request={async () => [
{ label: '是', value: 1 },
{ label: '否', value: 2 }
]}
rules={[{ required: true, message: '请选择是否隐藏广告' }]}
/>
<ProFormSelect
showSearch
name="company_id"
label="选择企业,没有企业选人才市场"
placeholder="请选择企业"
fieldProps={{
fieldNames: selectfieldCompanyNames
}}
rules={[{ required: true, message: '请选择企业' }]}
request={(keyword) =>
getCompanyList({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.list;
})
}
/>




</ProForm>
</Modal>
</ConfigProvider>
</ConfigProvider >
</>
);
};

+ 123
- 121
src/components/Render/Main/Advertisement/Putin/table/index.tsx View File

@@ -4,8 +4,8 @@ import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProTable, ProFormSelect
} from '@ant-design/pro-components';
import { Button, Popconfirm, ConfigProvider, Tag,message } from 'antd';
import { GetAdvertscheduleList, getCompanyList, GetAdvertareaList, PostAdvertscheduleDel} from '@/apis/api';
import { Button, Popconfirm, ConfigProvider, Tag, message } from 'antd';
import { GetAdvertscheduleList, getCompanyList, GetAdvertareaList, PostAdvertscheduleDel } from '@/apis/api';
const selectfieldNames = { label: 'full_name', value: 'id' };
const selectfieldAreaNames = { label: 'name', value: 'id' };

@@ -37,135 +37,137 @@ const PagesMainAdvertisementPutinTable: React.FC = ({ dispatch, openModel, getId
}}
>
<ProTable
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
scroll={{ x: 1300 }}
actionRef={actionRef}
dataSource={list}
columns={[ {
search={{ span: 8, labelWidth: 'auto' }}
rowSelection={{
type: 'checkbox'
}}
columns={[{
title: 'ID',
dataIndex: 'id',
width: 100,
width: 200,
search: false,
},
{
title: '投放标题',
dataIndex: 'title',
width: 240
},
{
title: '投放位置',
dataIndex: 'area_name',
search: false
},
{
title: '投放位置',
dataIndex: 'area_id',
hidden: true,
valueType: 'select',
renderFormItem: () => {
return (
<ProFormSelect
width='lg'
fieldProps={{
fieldNames: selectfieldAreaNames,
}}
request={async (keyword) =>
GetAdvertareaList({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.advertareas;
})
}
placeholder="请选择投放位置"
/>
)
}
},
{
title: '投放描述',
dataIndex: 'ad_description',
search: false
},
{
title: '企业',
dataIndex: 'company_name',
search: false
},
{
title: '企业',
dataIndex: 'company_id',
hidden: true,
valueType: 'select',
renderFormItem: () => {
return (
<ProFormSelect
showSearch
fieldProps={{
fieldNames: selectfieldNames,
}}
request={async (keyword) =>
getCompanyList({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.list;
})
}
placeholder="请选择企业"
/>
)
}
},
{
title: '投放状态',
dataIndex: 'hide_ad',
render: (_, record) => (<>
{
<>
{record.hide_ad === 0 && <Tag>未设置</Tag> }
{record.hide_ad === 1 && <Tag>隐藏</Tag>}
{record.hide_ad === 2 && <Tag color="green">显示</Tag> }
</>
}
{
title: '投放标题',
dataIndex: 'title',
width: 200
},
{
title: '投放位置',
dataIndex: 'area_name',
width: 200,

</>),
valueType: 'select',
valueEnum: {
0: { text: '全部' },
1: {
text: '隐藏广告',
},
2: {
text: '显示广告',
}
},
},
{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record.id)
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>编辑</Button>,
<Popconfirm
title="是否删除"
onConfirm={(e) => {
PostAdvertscheduleDel({ id: record.id }).then(res => {
message.success('删除成功')
actionRef.current.reload();
search: false
},
{
title: '投放位置',
dataIndex: 'area_id',
hidden: true,
valueType: 'select',
renderFormItem: () => {
return (
<ProFormSelect
width='lg'
fieldProps={{
fieldNames: selectfieldAreaNames,
}}
request={async (keyword) =>
GetAdvertareaList({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.advertareas;
})
}
placeholder="请选择投放位置"
/>
)
}
},
{
title: '投放描述',
dataIndex: 'ad_description',
width: 200,

search: false
},
{
title: '企业',
dataIndex: 'company_name',
width: 200,

search: false
},
{
title: '企业',
dataIndex: 'company_id',
hidden: true,
valueType: 'select',
renderFormItem: () => {
return (
<ProFormSelect
showSearch
fieldProps={{
fieldNames: selectfieldNames,
}}
okText="删除"
cancelText="取消"
>
<a
key="delete"
>
删除
</a>
</Popconfirm>
],
request={async (keyword) =>
getCompanyList({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.list;
})
}
placeholder="请选择企业"
/>
)
}
},
{
title: '投放状态',
dataIndex: 'hide_ad',
width: 200,
valueType: 'select',
valueEnum: {
0: { text: '全部' ,
status: 'Errorr'},
1: {
text: '隐藏',
status: 'Errorr'
},
2: {
text: '显示',
status: 'Processing'
}
},
},
{
title: '操作',
key: 'option',
valueType: 'option',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record.id)
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>编辑</Button>,
<Popconfirm
title="是否删除"
onConfirm={(e) => {
PostAdvertscheduleDel({ id: record.id }).then(res => {
message.success('删除成功')
actionRef.current.reload();
})
}}
okText="删除"
cancelText="取消"
>
<a
key="delete"
>
删除
</a>
</Popconfirm>
],
},
]}
rowKey="id"
pagination={{
@@ -190,7 +192,7 @@ const PagesMainAdvertisementPutinTable: React.FC = ({ dispatch, openModel, getId
sort: 'id',
sortby: 'desc',
keyword: params.title,
hide_ad: params.hide_ad ? params.hide_ad : 0,
hide_ad: params.hide_ad ? params.hide_ad : 0,
company_id: params.company_id,
area_id: params.area_id
}).then(res => {

+ 2
- 1
src/components/Render/Main/Company/Department/create/index.tsx View File

@@ -38,7 +38,7 @@ const PagesMainCompanyDepartmentCreate: React.FC = ({ dispatch, dictModel, openM
maskClosable={false}
footer={null}
destroyOnClose
width={1000}
width={600}
onCancel={() => {
dispatch({ type: 'openModel/getOpenModal', payload: false })
}}
@@ -85,6 +85,7 @@ const PagesMainCompanyDepartmentCreate: React.FC = ({ dispatch, dictModel, openM
}
}}
>
<ProFormSelect
showSearch
name="company_id"

+ 43
- 15
src/components/Render/Main/Company/Department/table/index.tsx View File

@@ -5,7 +5,7 @@ import type { ActionType } from '@ant-design/pro-components';
import {
ProTable, ProFormSelect
} from '@ant-design/pro-components';
import { Button, ConfigProvider, } from 'antd';
import { Button, ConfigProvider, Modal } from 'antd';
import { GetCompanyDepartmentList, getCompanyList, GetCompanyInfo } from '@/apis/api';
const selectfieldNames = { label: 'full_name', value: 'id' };
const PagesMainCompanyDepartmentTable: React.FC = ({ dispatch, getId, openModel }: any) => {
@@ -38,24 +38,30 @@ const PagesMainCompanyDepartmentTable: React.FC = ({ dispatch, getId, openModel
>

<ProTable
scroll={{ x: 1300 }}
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
actionRef={actionRef}
dataSource={list}
search={{ span: 8, labelWidth: 'auto' }}
rowSelection={{
type: 'checkbox'
}}
columns={[
{
title: '部门名称',
dataIndex: 'name',
width: 300
width: 200
},
{
title: '所属企业',
dataIndex: 'company_name',
width: 300,
width: 200
},
{
title: '所属企业',
dataIndex: 'company_id',
width: 300,
width: 200,
hidden: true,
valueType: 'select',
renderFormItem: () => {
@@ -85,38 +91,44 @@ const PagesMainCompanyDepartmentTable: React.FC = ({ dispatch, getId, openModel
{
title: '联系人',
search: false,
width: 200,

dataIndex: 'contact'
},
{
title: '联系电话',
search: false,
width: 200,

dataIndex: 'phone'
},
{
title: '手机',
search: false,
width: 200,

dataIndex: 'mobile'
},
{
title: '邮箱',
search: false,
width: 200,

dataIndex: 'email'
},
{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record.id)
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>编辑</Button>
}}>编辑</Button>,
<Button key='2' type='link' danger onClick={() => {
setId(record.id)
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>删除</Button>
],
},
]}
@@ -154,15 +166,31 @@ const PagesMainCompanyDepartmentTable: React.FC = ({ dispatch, getId, openModel
sessionStorage.removeItem('company_info')
}
setCompanyId(0)
actionRef.current.reload();
actionRef.current?.reload();
}}
headerTitle="部门列表"
toolBarRender={() => [
<Button type="primary" onClick={() => {
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>
添加部门
</Button>
toolBarRender={() => [<Button type="primary" onClick={() => {
Modal.confirm({
title: '批量删除',
content: '确定要删除所选的数据吗,参数:id',
onOk() {

},
onCancel() {
console.log('Cancel');
},
okText: '确定',
cancelText: '取消',
centered: true
});
}}>
批量删除
</Button>,
<Button type="primary" onClick={() => {
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>
添加部门
</Button>,
]}
/>


+ 62
- 105
src/components/Render/Main/Company/List/create/index.tsx View File

@@ -1,29 +1,22 @@
import { useRef, useState, useEffect } from 'react';
import { connect } from '@umijs/max';
import type { ProFormInstance } from '@ant-design/pro-components';
import {
StepsForm, ProCard,
ProFormDatePicker,
ProFormDependency,
ProFormText,
ProFormCascader,
ProFormRadio,
FormControlRender,
ProFormSelect
} from '@ant-design/pro-components';
import { Row, Col, Image, ConfigProvider, Modal, Switch, Form, message, Button } from 'antd';
import { addCompany, PostCompanyEdit, GetCompanyInfo } from '@/apis/api';
import { Imageprefix } from '@/constants';
import { StepsForm, ProCard, ProFormDatePicker, ProFormDependency, ProFormText, ProFormCascader, ProFormRadio, FormControlRender, ProFormSelect } from '@ant-design/pro-components';
import { Row, Col, Image, ConfigProvider, Modal, Space, Form, message, Button } from 'antd';
import { selectfieldNames, cascaderfieldNames, Imageprefix } from '@/constants'
import { findAncestors } from '@/utils/dataHelper'
import { disAfterData } from '@/utils/format'

import MapComponent from '@/components/Common/map';
import RichComponent from '@/components/Common/rich';
import UploadModel from '@/components/Common/upload';

const selectfieldNames = { label: 'name', value: 'id', children: 'children' };
const cascaderfieldNames = { label: 'name', value: 'id', children: 'children' };
import { addCompany, PostCompanyEdit, GetCompanyInfo } from '@/apis/api';

const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel, id }: any) => {
interface PagesMainCompanyListCreateProps {
id: any
}
const PagesMainCompanyListCreate: React.FC<PagesMainCompanyListCreateProps> = ({ dispatch, dictModel, openModel, id }: any) => {
const formRef = useRef<ProFormInstance>();
const formMapRef = useRef<
React.MutableRefObject<ProFormInstance<any> | undefined>[]
@@ -41,13 +34,13 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
};

const [uploadedFilelicenseName, setUploadedFilelicenseName] = useState<string>('');
const handleFileUploadedlicense = (filename: string) => {
const handleFileUploadedlicense = (filename: string) => {
setUploadedFilelicenseName(filename);
};

const [uploadedFilephotosName, setUploadedFilephotosName] = useState<object[]>([]);

const handleFileUploadedphotos = (filename: string) => {
const handleFileUploadedphotos = (filename: string) => {
setUploadedFilephotosName([...uploadedFilephotosName, { photo: filename }]);
};

@@ -103,7 +96,6 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
formInstanceRef?.current?.setFieldsValue(res.data);
});
setDetail(res.data)

});
} else {
setDetail(null)
@@ -141,7 +133,7 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
message.success('提交成功')
dispatch({ type: 'openModel/getOpenModal', payload: false })
} else {
let res = await addCompany(values)
message.success('提交成功')
dispatch({ type: 'openModel/getOpenModal', payload: false })
@@ -422,93 +414,58 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
}}
>
<Row gutter={[16, 16]}>
{
detail ?
<Col span={6}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="上传企业照片" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</Col> : <>
<Col span={6}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="上传企业照片" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</Col>
</>
}

<Col span={8}>
<ProFormRadio.Group
name="photo_status"
label="企业照片审核状态"
radioType="button"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '待审',
value: 1,
},
{
label: '通过',
value: 2,
},
{
label: '不通过',
value: 3,
}
]}
/>
<Col span={12}>
<Space direction='vertical'>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="上传企业照片" image_type={3} imageUrl={detail?.photo} onUploadComplete={handleFileUploadedphoto}></UploadModel>
<ProFormRadio.Group
name="photo_status"
label="企业照片审核状态"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '待审',
value: 1,
},
{
label: '通过',
value: 2,
},
{
label: '不通过',
value: 3,
}
]}
/>
</Space>
</Col>
{
detail ?
<Col span={8}>
{uploadedFilephotoName ? <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image> : <Image src={`${Imageprefix}${detail?.photo}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image>}
</Col> : <>
{uploadedFilephotoName ? <Col span={8}> <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image> </Col> : ''}
</>
}
</Row>
<Row gutter={[16, 16]}>
{
detail ?
<Col span={6}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="上传营业执照" image_type={4} onUploadComplete={handleFileUploadedlicense}></UploadModel>
</Col> : <Col span={6}>
<UploadModel multiple={false} form_name="license_path" image_length={1} uploadTxt="上传营业执照" image_type={4} onUploadComplete={handleFileUploadedlicense}></UploadModel>
</Col>
}
<Col span={8}>
<ProFormRadio.Group
name="license_status"
label="营业执照审核状态"
radioType="button"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '待审',
value: 1,
},
{
label: '通过',
value: 2,
},
{
label: '不通过',
value: 3,
}
]}
/>
<Col span={12}>
<Space direction='vertical'>
<UploadModel multiple={false} form_name="license_path" image_length={1} uploadTxt="上传营业执照" imageUrl={detail?.license_path} image_type={4} onUploadComplete={handleFileUploadedlicense}></UploadModel>
<ProFormRadio.Group
name="license_status"
label="营业执照审核状态"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '待审',
value: 1,
},
{
label: '通过',
value: 2,
},
{
label: '不通过',
value: 3,
}
]}
/>
</Space>
</Col>
{
detail ?
<Col span={8}>
{uploadedFilelicenseName ? <Image src={`${Imageprefix}${uploadedFilelicenseName}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image> : <Image src={`${Imageprefix}${detail?.license_path}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image>}
</Col> : <>
{uploadedFilelicenseName ? <Col span={8}> <Image src={`${Imageprefix}${uploadedFilelicenseName}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image> </Col> : ''}
</>
}
</Row>
<Row gutter={[16, 16]}>
{
detail ?
<Col span={24} style={{ display: 'flex' }}>

+ 269
- 250
src/components/Render/Main/Company/List/table/index.tsx View File

@@ -1,13 +1,16 @@
import { useRef, useState, useEffect } from 'react';
import { connect, history } from '@umijs/max';
import { connect, history, Link } from '@umijs/max';
import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProTable, TableDropdown, PageContainer
ProTable, TableDropdown, ProForm
} from '@ant-design/pro-components';
import { Button, Image, ConfigProvider, Select, message, DatePicker } from 'antd';
import { getCompanyList, GetCompanyInfo, updateCompany, PostCompanyExport, getRoleGetpermissionids } from '@/apis/api';
import { Button, Image, ConfigProvider, Select, message, Descriptions, Space, Radio, Modal, Row, Col, Badge } from 'antd';
import { getCompanyList, GetCompanyInfo, updateCompany, PostCompanyExport, PostCompanyEdit } from '@/apis/api';
import { Imageprefix } from '@/constants';
import { findId } from '@/utils/dataHelper';
import { Header } from 'antd/es/layout/layout';

import UploadModel from '@/components/Common/upload';


const PagesMainCompanyListTable: React.FC = ({ dispatch, openModel, getId }: any) => {
@@ -16,6 +19,8 @@ const PagesMainCompanyListTable: React.FC = ({ dispatch, openModel, getId }: any
const [total, setTotal] = useState<number>(0)
const [page, setPage] = useState<number>(1)
const [pageSize, setPageSize] = useState<number>(10)
const [expandedRowKeys, setExpandedRowKeys] = useState<string[]>([])


const setId = (id: number) => {
getId(id)
@@ -24,15 +29,157 @@ const PagesMainCompanyListTable: React.FC = ({ dispatch, openModel, getId }: any
const [addButton, setAddButton] = useState<boolean>(true)
const [editButton, setEditButton] = useState<boolean>(true)




useEffect(() => {
if (!openModel.openModal) {
actionRef.current.reload();
actionRef.current?.reload();
}
}, [openModel.openModal])


const [uploadedFilephotoName, setUploadedFilephotoName] = useState<string>('');
const uploadedFilephotoNameRef = useRef<string>('');
const handleFileUploadedphoto = (filename: string) => {
setUploadedFilephotoName(filename);
};

useEffect(() => {
uploadedFilephotoNameRef.current = uploadedFilephotoName;
}, [uploadedFilephotoName])


const [uploadedFilelicenseName, setUploadedFilelicenseName] = useState<string>('');
const uploadedFilelicenseNameRef = useRef<string>('');
const handleFileUploadedlicense = (filename: string) => {
setUploadedFilelicenseName(filename);
};

useEffect(() => {
uploadedFilelicenseNameRef.current = uploadedFilelicenseName;
}, [uploadedFilelicenseName])
const expandedRowRender = (record) => {
return (
<>
<Space direction='vertical' style={{ width: '100%' }}>
<Descriptions title="基本信息" bordered column={3} contentStyle={{ fontWeight: 'bold' }} labelStyle={{ width: 180 }}>
<Descriptions.Item label="成立日期">{record.establishment_date}</Descriptions.Item>
<Descriptions.Item label="来源">{record.origin_text}</Descriptions.Item>
<Descriptions.Item label="登录次数">{record.login_count}</Descriptions.Item>
<Descriptions.Item label="点击次数">{record.click_count}</Descriptions.Item>
<Descriptions.Item label="企业照片">
<Space align='center'>
<Image src={`${Imageprefix}${record.photo}`} width={60} height={60} />
<Button size='small' type='primary' onClick={() => {
Modal.confirm({
title: '更换企业照片',
content: (<>
<ProForm submitter={{ render: false }}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="更换企业照片" image_type={3} imageUrl={record.photo} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</ProForm>
</>),
async onOk() {
let info = await GetCompanyInfo({ id: record.id });
let res = await updateCompany({ ...info.data, photo: uploadedFilephotoNameRef.current });
setUploadedFilephotoName('');
actionRef.current?.reload();
},
onCancel() {
console.log('Cancel');
},
okText: '保存',
cancelText: '取消',
centered: true,
});
}}>更换企业照片</Button>
</Space>
</Descriptions.Item>
<Descriptions.Item label="照片审核">
<Radio.Group value={record.photo_status} size='small' onChange={async (e) => {
let info = await GetCompanyInfo({ id: record.id });
let res = await updateCompany({ ...info.data, photo_status: e.target.value });
actionRef.current?.reload();
}}>
<Radio value={1}>待审</Radio>
<Radio value={2}>通过</Radio>
<Radio value={3}>不通过</Radio>
</Radio.Group>
</Descriptions.Item>
<Descriptions.Item label="登录账号">{record.login_name}</Descriptions.Item>

<Descriptions.Item label="营业执照">
<Space align='center'>
<Image src={`${Imageprefix}${record.license_path}`} width={60} height={60} />
<Button size='small' type='primary' onClick={() => {
Modal.confirm({
title: '更换营业执照',
content: (<>
<ProForm submitter={{ render: false }}>
<UploadModel multiple={false} form_name="license_path" image_length={1} uploadTxt="更换营业执照" image_type={3} imageUrl={record.license_path} onUploadComplete={handleFileUploadedlicense}></UploadModel>
</ProForm>
</>),
async onOk() {
let info = await GetCompanyInfo({ id: record.id });
let res = await updateCompany({ ...info.data, license_path: uploadedFilelicenseNameRef.current });
setUploadedFilelicenseName('');
actionRef.current?.reload();
},
onCancel() {
console.log('Cancel');
},
okText: '保存',
cancelText: '取消',
centered: true,
});
}}>更换营业执照</Button>
</Space>
</Descriptions.Item>
<Descriptions.Item label="营业执照审核">
<Radio.Group value={record.photo_status} size='small' onChange={async (e) => {
let info = await GetCompanyInfo({ id: record.id });
let res = await updateCompany({ ...info.data, license_status: e.target.value });
actionRef.current?.reload();
}}>
<Radio value={1}>待审</Radio>
<Radio value={2}>通过</Radio>
<Radio value={3}>不通过</Radio>
</Radio.Group>
</Descriptions.Item>
</Descriptions>
<Descriptions title="会员信息" bordered column={3} contentStyle={{ fontWeight: 'bold' }} labelStyle={{ width: 180 }}>
<Descriptions.Item label="会员类型">
{
record.member_type_text && <Button type="primary" size='small' onClick={() => {
sessionStorage.setItem('vip_company_info', JSON.stringify(record))
history.push({
pathname: '/company/vip'
})
}}>
{record.member_type_text}
</Button>
}
</Descriptions.Item>
<Descriptions.Item label="开始时间">
{record.start_date}
</Descriptions.Item>
<Descriptions.Item label="到期时间">
{record.end_date}
</Descriptions.Item>
<Descriptions.Item label="剩余点数">
{record.code}
</Descriptions.Item>
<Descriptions.Item label="会员状态">
{
record.member_status === 2 ? <Badge status="processing" text={record.member_status_text} /> : <Badge status="error" text={record.member_status_text} />
}

</Descriptions.Item>

</Descriptions>
</Space >

</>
);
};

return (
<>
<ConfigProvider
@@ -40,98 +187,97 @@ const PagesMainCompanyListTable: React.FC = ({ dispatch, openModel, getId }: any
token: {
colorPrimary: '#4FBE70',
colorLink: '#4FBE70',
},
components: {
Descriptions: {
labelBg: '#ffffff',
contentColor: '#000'
},

}
}}
>
<ProTable
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
scroll={{ x: 1300 }}
actionRef={actionRef}
dataSource={list}
search={{ span: 8, labelWidth: 'auto' }}
rowSelection={{
type: 'checkbox'
}}
expandable={{
expandedRowRender
}}

columns={[
{
title: '筛选日期',
dataIndex: 'date_range',
hidden: true,
width: 120,
valueType: 'dateRange',
width: 200
},
{
title: 'ID',
dataIndex: 'id',
width: 100,
fixed: 'left',
width: 200
},
{
title: '企业名称',
dataIndex: 'full_name',
width: 240,
width: 200
},
{
title: '来源',
dataIndex: 'origin_text',
search: false,
width: 100,
title: '社会统一信用代码',
dataIndex: 'registration_number',
width: 200,
search: false
},
{
title: '登录次数',
dataIndex: 'login_count',
search: false,
width: 100
title: '性质',
dataIndex: 'nature_text',
width: 200,
search: false
},
{
title: '点击次数',
dataIndex: 'click_count',
search: false,
width: 100
title: '规模',
dataIndex: 'scale_text',
width: 200,
search: false
},
{
title: '会员类型',
dataIndex: 'member_type',
width: 100,
hidden: true,
title: '账号状态',
dataIndex: 'status',
width: 200,
render: (_, record) => (<>
<Radio.Group size='small' value={record.status} onChange={async (e) => {

actionRef.current?.reload();
}}>
<Radio value={1}>开通</Radio>
<Radio value={2}>关闭</Radio>
</Radio.Group>
</>),
valueType: 'select',
valueEnum: {
0: { text: '全部' },
1: {
text: '试用申请中',
text: '开通',
status: 'Processing'
},
2: {
text: '试用正式',
},
3: {
text: '普通申请中',
},
4: {
text: '普通正式',
},
5: {
text: 'VIP申请中',
},
6: {
text: 'VIP正式',
text: '关闭',
status: 'Error'
},
},
},
{
title: '会员类型',
dataIndex: 'member_type_text',
dataIndex: 'member_type',
width: 100,
search: false,
render: (_, record) => (<>
{
record.member_type_text && <Button type="primary" size='small' onClick={() => {
sessionStorage.setItem('vip_company_info', JSON.stringify(record))
history.push({
pathname: '/company/vip'
})
}}>
{record.member_type_text}
</Button>
}

</>),
hidden: true,
valueType: 'select',
valueEnum: {
0: { text: '全部' },
@@ -155,176 +301,10 @@ const PagesMainCompanyListTable: React.FC = ({ dispatch, openModel, getId }: any
},
},
},
{
title: '开始时间',
dataIndex: 'start_date',
width: 140
},
{
title: '到期时间',
dataIndex: 'end_date',
search: false,
width: 140
}, {
title: '剩余点数',
dataIndex: 'code',
search: false,
width: 100
},
{
title: '会员状态',
dataIndex: 'member_status',
width: 100,
hidden: true,
valueType: 'select',
valueEnum: {
0: { text: '全部' },
1: {
text: '待审',
},
2: {
text: '正常',
},
3: {
text: '到期',
},
4: {
text: '推荐',
}
},
},
{
title: '状态',
dataIndex: 'status',
hidden: true,
valueType: 'select',
valueEnum: {
0: { text: '全部' },
1: {
text: '开通',
},
2: {
text: '关闭',
},
},
},
{
title: '会员状态',
dataIndex: 'member_status_text',
width: 120,
search: false,
valueType: 'select',
valueEnum: {
0: { text: '全部' },
1: {
text: '待审',
},
2: {
text: '正常',
},
3: {
text: '到期',
},
4: {
text: '推荐',
}
},
},
{
title: '企业照片',
dataIndex: 'photo',
search: false,
width: 100,
render: (_, record) => (<>
<Image src={`${Imageprefix + record.photo}`} width={40} height={40} />
</>
)
}, {
title: '照片审核',
dataIndex: 'photo_status_text',
search: false,
width: 120,
render: (_, record) => (<>
<Select
size="small"
style={{ width: 100 }}
value={record.photo_status_text}
options={[
{
label: '待审',
value: 1,
},
{
label: '通过',
value: 2,
},
{
label: '不通过',
value: 3,
},
]}
onChange={async (value) => {
let info = await GetCompanyInfo({ id: record.id });
let res = await updateCompany({ ...info.data, photo_status: value });
actionRef.current.reload();
}}
></Select>
</>)
},
{
title: '营业执照',
dataIndex: 'license_path',
search: false,
width: 120,
render: (_, record) => (<>
<Image src={`${Imageprefix}${record.license_path}`} width={40} height={40} />
</>
)
},
{
title: '营业执照审核',
dataIndex: 'license_status_text',
search: false,
width: 120,
render: (_, record) => (<>
<Select
size="small"
style={{ width: 100 }}
value={record.license_status_text}
options={[
{
label: '待审',
value: 1,
},
{
label: '通过',
value: 2,
},
{
label: '不通过',
value: 3,
},
]}
onChange={async (value) => {
let info = await GetCompanyInfo({ id: record.id });
let res = await updateCompany({ ...info.data, license_status: value });
actionRef.current.reload();
}}
></Select>
</>)
},
{
title: '登录账号',
dataIndex: 'login_name',
width: 200
},

{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<>
{
@@ -341,32 +321,22 @@ const PagesMainCompanyListTable: React.FC = ({ dispatch, openModel, getId }: any
pathname: '/company/department'
})
})
}}>查看部门</Button>,
<TableDropdown
key="actionGroup"
menus={[
{
name: '查看职位',
key: '3',
onClick: () => {
GetCompanyInfo({ id: record.id }).then(res => {
sessionStorage.setItem('post_company_info', JSON.stringify(res.data))
history.push({
pathname: '/company/post'
})
})
},
},
{
name: '子账号解绑',
key: '4',
onClick: () => {
setId(record.id)
dispatch({ type: 'openModel/getOpenBindModal', payload: true })
},
},
]}
/>,
}}>企业部门</Button>,
<Button key='3' type='link' onClick={() => {
GetCompanyInfo({ id: record.id }).then(res => {
sessionStorage.setItem('post_company_info', JSON.stringify(res.data))
history.push({
pathname: '/company/post'
})
})
}}>企业职位</Button>,
<Link to={`/company/vip?full_name=${record.full_name}`}>会员信息</Link>,
<Button key='5' type='link' onClick={() => {
setId(record.id)
dispatch({ type: 'openModel/getOpenBindModal', payload: true })
}}>子账号解绑</Button>,

],
},
]}
@@ -407,6 +377,55 @@ const PagesMainCompanyListTable: React.FC = ({ dispatch, openModel, getId }: any
}
headerTitle="企业列表"
toolBarRender={() => [
<Button type="primary" onClick={() => {
Modal.confirm({
title: '请选择对批量数据进行何种操作',
content: (<>
<div>参数: id, status</div>
<Radio.Group size='small' onChange={async (e) => {
actionRef.current?.reload();
}}>
<Row gutter={[20, 20]} style={{ padding: 20 }}>
<Col span={12}>
<Radio value={1}>开通账号</Radio>
</Col>
<Col span={12}>
<Radio value={1}>禁用1天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>禁用3天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>禁用7天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>禁用15天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>禁用30天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>永久禁用</Radio>
</Col>
<Col span={12}>
<Radio value={2}>关闭账号</Radio>
</Col>
</Row>
</Radio.Group>
</>),
onOk() {

},
onCancel() {
console.log('Cancel');
},
okText: '确定',
cancelText: '取消',
centered: true
});
}}>
批量管理账号
</Button>,
<Button type="primary" onClick={() => {
message.info('数据导出需要时间,请耐心等待')
PostCompanyExport().then(res => {

+ 122
- 136
src/components/Render/Main/Company/Post/create/index.tsx View File

@@ -15,7 +15,7 @@ import {
ProFormTreeSelect,
ProFormDigitRange
} from '@ant-design/pro-components';
import { Row, Col, Image, ConfigProvider, Modal, Switch, Form, message, } from 'antd';
import { Row, Col, Image, ConfigProvider, Modal, Space, Form, message, } from 'antd';
import { getCompanyList, GetCompanyDepartmentList, PostCompanyJobAdd, PostCompanyJobEdit, PostCompanyJobInfo, GetCompanyInfo, GetCompanyDepartmentInfo } from '@/apis/api';
import { Imageprefix } from '@/constants';
import { verifyPhone } from '@/utils/VerifyHelper';
@@ -95,7 +95,7 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
afterOpenChange={async (open) => {
if (open && id) {
let res = await PostCompanyJobInfo({ id: id })
let res1 = await GetCompanyInfo({ id: res.data.company_id })
let res1 = await GetCompanyInfo({ id: res.data.company_id })
sessionStorage.setItem('post_company_info', JSON.stringify(res1.data))
formMapRef?.current?.forEach((formInstanceRef) => {
res.data.age_arr = [res.data.age_min, res.data.age_max];
@@ -207,16 +207,16 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
>
<Row gutter={[16, 16]}>
<Col span={24}>
<ProFormSegmented
<ProFormRadio.Group
name="urgent"
label="是否紧急"
request={async () => [
options={[
{ label: '是', value: 1 },
{ label: '否', value: 2 }
]}
/>
</Col>

</Col>
<Col span={8}>
<ProFormSelect
showSearch
@@ -402,7 +402,7 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
}}
>
<Row gutter={[16, 16]}>
<Col span={24}>
<Col span={12}>
<Form.Item
name='gangweizhize'
label="岗位职责"
@@ -429,7 +429,7 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
</FormControlRender>
</Form.Item>
</Col>
<Col span={24}>
<Col span={12}>
<Form.Item
name='renzhiyaoqiu'
label="任职要求"
@@ -457,17 +457,17 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
</Form.Item>
</Col>
<Col span={5}>
<ProFormSegmented
<ProFormRadio.Group
name="fulltime"
label="是否全职"
request={async () => [
options={[
{ label: '是', value: 1 },
{ label: '否', value: 2 }
]}
/>
</Col>
<Col span={5}>
<ProFormSegmented
<ProFormRadio.Group
name="parttime"
label="是否兼职"
request={async () => [
@@ -477,7 +477,7 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
/>
</Col>
<Col span={5}>
<ProFormSegmented
<ProFormRadio.Group
name="casual"
label="是否临时"
request={async () => [
@@ -487,7 +487,7 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
/>
</Col>
<Col span={5}>
<ProFormSegmented
<ProFormRadio.Group
name="practical"
label="是否实习"
request={async () => [
@@ -497,7 +497,7 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
/>
</Col>
<Col span={4}>
<ProFormSegmented
<ProFormRadio.Group
name="campus"
label="校园招聘"
request={async () => [
@@ -659,10 +659,7 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
<ProFormRadio.Group
name="degree_better"
label="是否是最高学历"
radioType="button"
fieldProps={{
buttonStyle: 'solid'
}}

options={[
{
label: '是',
@@ -725,10 +722,7 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
<ProFormRadio.Group
name="sex"
label="性别要求"
radioType="button"
fieldProps={{
buttonStyle: 'solid'
}}

options={[
{
label: '男',
@@ -762,10 +756,6 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
<ProFormRadio.Group
name="marital_status"
label="婚姻状况"
radioType="button"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '已婚',
@@ -845,7 +835,7 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
}}
>
<Row gutter={[16, 16]}>
<Col span={24}>
<Col span={12}>
<ProFormText
label="联系人"
name="contact"
@@ -853,7 +843,7 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
rules={[{ required: true, message: '请输入联系人' }]}
/>
</Col>
<Col span={24}>
<Col span={12}>
<ProFormText
label="担任职位"
name="possession"
@@ -861,124 +851,120 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
/>
</Col>

<Col span={8}>
<ProFormText
label="联系电话"
name="phone"
placeholder="请输入联系电话"
rules={[{ required: true, message: '请输入联系电话' }]}
/>
</Col>
<Col span={16}>
<ProFormRadio.Group
name="phone_public"
label="是否公开联系电话"
radioType="button"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '是',
value: 1,
},
{
label: '否',
value: 2,
}
]}

/>
</Col>
<Col span={8}>
<ProFormText
label="手机"
name="mobile"
placeholder="请输入手机"
rules={[{ required: true, message: '请输入手机' }]}
/>
<Col span={12}>
<Space>
<ProFormText
width={'md'}
label="联系电话"
name="phone"
placeholder="请输入联系电话"
rules={[{ required: true, message: '请输入联系电话' }]}
/>
<ProFormRadio.Group
name="phone_public"
label="是否公开联系电话"
options={[
{
label: '是',
value: 1,
},
{
label: '否',
value: 2,
}
]}

/>
</Space>
</Col>
<Col span={16}>
<ProFormRadio.Group
name="mobile_public"
label="是否公开手机"
radioType="button"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '是',
value: 1,
},
{
label: '否',
value: 2,
}
]}
<Col span={12}>
<Space >
<ProFormText
width={'md'}

label="手机"
name="mobile"
placeholder="请输入手机"
rules={[{ required: true, message: '请输入手机' }]}
/>
<ProFormRadio.Group
name="mobile_public"
label="是否公开手机"

options={[
{
label: '是',
value: 1,
},
{
label: '否',
value: 2,
}
]}

/>
</Space>

/>
</Col>
<Col span={8}>
<ProFormText
label="邮箱"
name="email"
placeholder="请输入邮箱"
/>
<Col span={12}>
<Space >
<ProFormText
width={'md'}

label="邮箱"
name="email"
placeholder="请输入邮箱"
/>
<ProFormRadio.Group
name="email_public"
label="是否公开邮箱"

options={[
{
label: '是',
value: 1,
},
{
label: '否',
value: 2,
}
]}

/>
</Space>
</Col>
<Col span={16}>
<ProFormRadio.Group
name="email_public"
label="是否公开邮箱"
radioType="button"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '是',
value: 1,
},
{
label: '否',
value: 2,
}
]}

/>
</Col>
<Col span={8}>
<ProFormText
label="传真"
name="fax"
placeholder="请输入传真"
<Col span={12}>
<Space>
<ProFormText
width={'md'}

label="传真"
name="fax"
placeholder="请输入传真"

/>
<ProFormRadio.Group
name="fax_public"
label="是否公开传真"

options={[
{
label: '是',
value: 1,
},
{
label: '否',
value: 2,
}
]}

/>
</Space>

/>
</Col>
<Col span={16}>
<ProFormRadio.Group
name="fax_public"
label="是否公开传真"
radioType="button"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '是',
value: 1,
},
{
label: '否',
value: 2,
}
]}

/>
</Col>
<Col span={24}>

<ProFormSegmented
name="status"
label="职位状态"
request={async () => [

+ 142
- 41
src/components/Render/Main/Company/Post/table/index.tsx View File

@@ -4,7 +4,7 @@ import type { ActionType } from '@ant-design/pro-components';
import {
ProTable, ProFormSelect
} from '@ant-design/pro-components';
import { Button, ConfigProvider,message } from 'antd';
import { Button, ConfigProvider, message, Space, Descriptions, Radio, Row, Col, Modal } from 'antd';
import { GetCompanyJobList, getCompanyList, GetCompanyInfo, PostJobExport } from '@/apis/api';
import { Imageprefix } from '@/constants';
const selectfieldNames = { label: 'full_name', value: 'id' };
@@ -15,16 +15,19 @@ const PagesMainCompanyPostTable: React.FC = ({ dispatch, getId, openModel }: any
const [page, setPage] = useState<number>(1)
const [pageSize, setPageSize] = useState<number>(10)
const [companyId, setCompanyId] = useState<number>(0);
const [expandedRowKeys, setExpandedRowKeys] = useState<string[]>([])
const setId = (id: number) => {
getId(id)
}

useEffect(() => {
if (!openModel.openModal) {
actionRef.current.reload();
actionRef.current?.reload();
}
}, [openModel.openModal])



return (
<>
<ConfigProvider
@@ -38,28 +41,32 @@ const PagesMainCompanyPostTable: React.FC = ({ dispatch, getId, openModel }: any
>

<ProTable
scroll={{ x: 1300 }}
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
actionRef={actionRef}
dataSource={list}
search={{ span: 8, labelWidth: 'auto' }}
rowSelection={{
type: 'checkbox'
}}
columns={[
{
title: '筛选日期',
dataIndex: 'date_range',
hidden: true,
width: 120,
valueType: 'dateRange',
},
{
title: 'ID',
dataIndex: 'id',
width: 100,
fixed: 'left',
width: 200
},
{
title: '所属企业',
dataIndex: 'full_name',
width: 300,
width: 200,
valueType: 'select',
renderFormItem: () => {
return (
@@ -87,61 +94,72 @@ const PagesMainCompanyPostTable: React.FC = ({ dispatch, getId, openModel }: any
{
title: '职位名称',
dataIndex: 'name',
width: 200,
fixed: 'left'
width: 200
},
{
title: '点击次数',
dataIndex: 'click_count',
width: 200,
search: false,
width: 100
},
{
title: '职位状态',
dataIndex: 'status',
width: 100,
hidden: true,
valueType: 'select',
width: 200,
colSize: 16,
valueType: 'radio',
initialValue: '0',
valueEnum: {
0: { text: '全部' },
1: {
text: '发布中',
status: 'Processing'
},
2: {
text: '未发布',
status: 'Error'
},
3: {
text: '暂停',
status: 'Error'
},
4: {
text: '已锁定',
status: 'Error'
},
5: {
text: '回收站',
status: 'Error'
},
6: {
text: '已过期',
status: 'Error'
}
},
},

{
title: '状态',
dataIndex: 'status_text',
title: '有效期(天)',
dataIndex: 'useful_life',
width: 200,
search: false,
width: 100
},
{
title: '有效期(天)',
dataIndex: 'useful_life',
title: '发布时间',
dataIndex: 'publish_date',
width: 200,
search: false,
},
{
title: '到期时间',
dataIndex: 'disabled_date',
width: 200,
search: false,
width: 150
},
{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record.id)
@@ -174,7 +192,7 @@ const PagesMainCompanyPostTable: React.FC = ({ dispatch, getId, openModel }: any
sortby: 'desc',
keyword: params.name,
expired: params.expired,
status: params.status,
status: params.status ? params.status : 0,
company_id: sessionStorage.getItem('post_company_info') ? JSON.parse(sessionStorage.getItem('post_company_info')).id : companyId,
start_date: params.date_range ? params.date_range[0] : '',
end_date: params.date_range ? params.date_range[1] : '',
@@ -188,25 +206,108 @@ const PagesMainCompanyPostTable: React.FC = ({ dispatch, getId, openModel }: any
sessionStorage.removeItem('post_company_info')
}
setCompanyId(0)
actionRef.current.reload();
actionRef.current?.reload();

}}
headerTitle="部门列表"
toolBarRender={() => [
<Button type="primary" onClick={() => {
message.info('数据导出需要时间,请耐心等待')
PostJobExport().then(res => {
let url = Imageprefix + res.data.excel_url;
window.open(url);
message.info('数据导出完毕')
})
}}>
导出数据
</Button>,
<Button type="primary" onClick={() => {
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>
添加职位
</Button>
headerTitle="职位列表"
toolBarRender={() => [<Button type="primary" onClick={() => {
Modal.confirm({
title: '批量发布',
content: (<>
<h4 style={{ fontWeight: 'bold' }}>有效期:</h4>
<Radio.Group size='small' onChange={async (e) => {
actionRef.current?.reload();
}}>
<Row gutter={[20, 20]} style={{ padding: 20 }}>
<Col span={12}>
<Radio value={1}>1天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>3天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>7天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>15天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>30天</Radio>
</Col>
</Row>

</Radio.Group>
</>),
onOk() {

},
onCancel() {
console.log('Cancel');
},
okText: '确定',
cancelText: '取消',
centered: true
});
}}>
批量发布
</Button>,
<Button type="primary" onClick={() => {
Modal.confirm({
title: '批量更改状态',
content: (<>
<Radio.Group size='small' onChange={async (e) => {
actionRef.current?.reload();
}}>
<Row gutter={[20, 20]} style={{ padding: 20 }}>
<Col span={12}>
<Radio value={1}>发布中</Radio>
</Col>
<Col span={12}>
<Radio value={1}>未发布</Radio>
</Col>
<Col span={12}>
<Radio value={1}>暂停</Radio>
</Col>
<Col span={12}>
<Radio value={1}>已锁定</Radio>
</Col>
<Col span={12}>
<Radio value={1}>回收站</Radio>
</Col>
<Col span={12}>
<Radio value={1}>已过期</Radio>
</Col>
</Row>
</Radio.Group>
</>),
onOk() {

},
onCancel() {
console.log('Cancel');
},
okText: '确定',
cancelText: '取消',
centered: true
});
}}>
批量更改状态
</Button>,
<Button type="primary" onClick={() => {
message.info('数据导出需要时间,请耐心等待')
PostJobExport().then(res => {
let url = Imageprefix + res.data.excel_url;
window.open(url);
message.info('数据导出完毕')
})
}}>
导出数据
</Button>,
<Button type="primary" onClick={() => {
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>
添加职位
</Button>
]}
/>


+ 125
- 115
src/components/Render/Main/Company/Vip/create/index.tsx View File

@@ -7,7 +7,7 @@ import {
ProForm,
ProFormDateRangePicker
} from '@ant-design/pro-components';
import { ConfigProvider, Flex, Space, Modal, message } from 'antd';
import { ConfigProvider, Flex, Space, Modal, message, Row, Col } from 'antd';
import { PostCompanyVipmanage, GetCompanyVipInfo } from '@/apis/api';
import dayjs from "dayjs";

@@ -40,7 +40,7 @@ const PagesMainCompanyPostCreate: React.FC = ({ dispatch, dictModel, openModel,
maskClosable={false}
footer={null}
destroyOnClose
width={1000}
width={680}
onCancel={() => {
dispatch({ type: 'openModel/getOpenModal', payload: false })
}}
@@ -50,6 +50,7 @@ const PagesMainCompanyPostCreate: React.FC = ({ dispatch, dictModel, openModel,
request={async () => {
if (id) {
let res = await GetCompanyVipInfo({ id: id })
res.data.dateRange = [res.data.start_date ? res.data.start_date : null, res.data.end_date ? res.data.end_date : null]
return res.data;
}
}}
@@ -66,125 +67,134 @@ const PagesMainCompanyPostCreate: React.FC = ({ dispatch, dictModel, openModel,
}}
onFinish={async (values) => {
values.id = id;
values.start_date = values.dateRange[0];
values.end_date = values.dateRange[1];
values.start_date = values.dateRange && values.dateRange.length > 0 ? values.dateRange[0] : '';
values.end_date = values.dateRange && values.dateRange.length > 0 ? values.dateRange[1] : '';
delete values.dateRange;
let res = await PostCompanyVipmanage(values)
message.success('提交成功')
dispatch({ type: 'openModel/getOpenModal', payload: false })
}}
>
<ProFormRadio.Group
name="probation"
label="见习基地"
radioType="button"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '是',
value: 1,
},
{
label: '否',
value: 2,
}
]}
/>
<ProFormRadio.Group
name="famous"
label="知名企业"
radioType="button"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '是',
value: 1,
},
{
label: '否',
value: 2,
}
]}
/>
<ProFormRadio.Group
name="member_type"
label="会员类型"
radioType="button"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '试用申请中',
value: 1,
},
{
label: '试用正式',
value: 2,
},
{
label: '普通申请中',
value: 3,
},
{
label: '普通正式',
value: 4,
},
{
label: 'VIP申请中',
value: 5,
},
{
label: 'VIP正式',
value: 6,
}
]}
/>
<ProFormRadio.Group
name="member_status"
label="会员状态"
radioType="button"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '待审',
value: 1,
},
{
label: '正常',
value: 2,
},
{
label: '到期',
value: 3,
},
{
label: '推荐',
value: 4,
}
]}
/>
<ProFormDateRangePicker
name="dateRange"
label="会员生效时间"
placeholder={['会员生效时间', '会员失效时间']}
fieldProps={{
format: 'YYYY-MM-DD'
}}

/>

<ProFormText
name="sale"
label="业务员"
placeholder="请输入业务员"
/>
<Row gutter={[16, 16]}>
<Col span={6}>
<ProFormRadio.Group
name="probation"
label="见习基地"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '是',
value: 1,
},
{
label: '否',
value: 2,
}
]}
/>
</Col>
<Col span={6}>
<ProFormRadio.Group
name="famous"
label="知名企业"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '是',
value: 1,
},
{
label: '否',
value: 2,
}
]}
/>
</Col>
<Col span={24}>
<ProFormRadio.Group
name="member_type"
label="会员类型"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '试用申请中',
value: 1,
},
{
label: '试用正式',
value: 2,
},
{
label: '普通申请中',
value: 3,
},
{
label: '普通正式',
value: 4,
},
{
label: 'VIP申请中',
value: 5,
},
{
label: 'VIP正式',
value: 6,
}
]}
/>
</Col>
<Col span={24}>
<ProFormRadio.Group
name="member_status"
label="会员状态"
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '待审',
value: 1,
},
{
label: '正常',
value: 2,
},
{
label: '到期',
value: 3,
},
{
label: '推荐',
value: 4,
}
]}
/>
</Col>
<Col span={12}>
<ProFormDateRangePicker
name="dateRange"
label="会员生效时间"
placeholder={['会员生效时间', '会员失效时间']}
fieldProps={{
format: 'YYYY-MM-DD'
}}

/>
</Col>
<Col span={12}>
<ProFormText
name="sale"
label="业务员"
placeholder="请输入业务员"
/>
</Col>
</Row>

</ProForm>


+ 19
- 10
src/components/Render/Main/Company/Vip/fee/index.tsx View File

@@ -4,11 +4,12 @@ import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProFormText,
ProForm,
ProFormSegmented,
ProFormRadio,
ProFormDigit
} from '@ant-design/pro-components';
import { ConfigProvider, Flex, Space, Modal, message } from 'antd';
import { ConfigProvider, Flex, Space, Modal, message, } from 'antd';
import { PostCompanyFeechange } from '@/apis/api';
import { PostCompanyVipmanage, GetCompanyVipInfo } from '@/apis/api';


const selectfieldNames = { label: 'full_name', value: 'id' };
@@ -27,7 +28,7 @@ const PagesMainCompanyPostCreate: React.FC = ({ dispatch, dictModel, openModel,
theme={{
token: {
colorPrimary: '#4FBE70',
} , components: {
}, components: {
Segmented: {
itemSelectedBg: '#19be6e',
itemSelectedColor: '#ffffff'
@@ -38,17 +39,24 @@ const PagesMainCompanyPostCreate: React.FC = ({ dispatch, dictModel, openModel,

<Modal
open={openPreview}
title='编辑VIP'
title='变更点数'
centered
maskClosable={false}
footer={null}
destroyOnClose
width={1000}
width={480}
onCancel={() => {
dispatch({ type: 'openModel/getOpenFeeModal', payload: false })
}}
>
<ProForm<CompanyType.fee>
request={async () => {
if (id) {
let res = await GetCompanyVipInfo({ id: id })
res.data.fee = res.data.balance_fee
return res.data;
}
}}
formRef={formRef}
submitter={{
searchConfig: {
@@ -57,7 +65,6 @@ const PagesMainCompanyPostCreate: React.FC = ({ dispatch, dictModel, openModel,
},
render: (_, dom) => { return <Flex justify='flex-end'> <Space>{dom}</Space></Flex> },
onReset: () => {

setOpenPreview(false)
}
}}
@@ -75,11 +82,13 @@ const PagesMainCompanyPostCreate: React.FC = ({ dispatch, dictModel, openModel,
min={0}
rules={[{ required: true, message: '请输入点数值' }]}
/>

<ProFormSegmented
<ProFormRadio.Group
name="change_type"
label="变更类型"
request={async () => [
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{
label: '增加',
value: 1,
@@ -90,6 +99,7 @@ const PagesMainCompanyPostCreate: React.FC = ({ dispatch, dictModel, openModel,
}
]}
rules={[{ required: true, message: '请选择变更类型' }]}

/>

<ProFormText
@@ -97,7 +107,6 @@ const PagesMainCompanyPostCreate: React.FC = ({ dispatch, dictModel, openModel,
label="备注说明"
placeholder="备注说明"
rules={[{ required: true, message: '请输入备注说明' }]}

/>

</ProForm>

+ 158
- 61
src/components/Render/Main/Company/Vip/table/index.tsx View File

@@ -1,11 +1,11 @@
import { useRef, useState, useEffect } from 'react';
import { connect } from '@umijs/max';
import { useSearchParams, connect } from '@umijs/max';
import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProTable
} from '@ant-design/pro-components';
import { Button, Image, ConfigProvider, Input } from 'antd';
import { PostCompanyViplist ,PostCompanyFeechange} from '@/apis/api';
import { Button, Image, ConfigProvider, Input, Descriptions, Space, Modal, Radio, Row, Col } from 'antd';
import { PostCompanyViplist, PostCompanyFeechange } from '@/apis/api';
import { Imageprefix } from '@/constants';


@@ -13,11 +13,12 @@ import { Imageprefix } from '@/constants';

const CompanyListPage: React.FC = ({ dispatch, getId, openModel }: any) => {
const actionRef = useRef<ActionType>();
const [searchParams, setSearchParams] = useSearchParams();
const [list, setList] = useState<object[]>([])
const [total, setTotal] = useState<number>(0)
const [page, setPage] = useState<number>(1)
const [pageSize, setPageSize] = useState<number>(10)
const [fullname, setFullname] = useState<any>(sessionStorage.getItem('vip_company_info') ? JSON.parse(sessionStorage.getItem('vip_company_info')).full_name : '')

const setId = (id: number) => {
getId(id)
@@ -25,16 +26,33 @@ const CompanyListPage: React.FC = ({ dispatch, getId, openModel }: any) => {

useEffect(() => {
if (!openModel.openModal) {
actionRef.current.reload();
actionRef.current?.reload();

}
}, [openModel.openModal])

useEffect(() => {
if (!openModel.openFeeModal) {
actionRef.current.reload();
actionRef.current?.reload();
}
}, [openModel.openFeeModal])

const expandedRowRender = (record) => {
return (
<>
<Space direction='vertical' style={{ width: '100%' }}>
<Descriptions title="基本信息" bordered column={3} contentStyle={{ fontWeight: 'bold' }} labelStyle={{ width: 180 }}>
<Descriptions.Item label="见习基地">{record.probation_text}</Descriptions.Item>
<Descriptions.Item label="知名企业">{record.famous_text}</Descriptions.Item>
<Descriptions.Item label="业务员">{record.sales}</Descriptions.Item>

</Descriptions>
</Space >

</>
);
};

return (
<>
<ConfigProvider
@@ -46,102 +64,116 @@ const CompanyListPage: React.FC = ({ dispatch, getId, openModel }: any) => {
}
}}
>

<ProTable
scroll={{ x: 1300 }}
scroll={{ y: 480, x: 'auto' }}
bordered={true}
actionRef={actionRef}
dataSource={list}
search={{
span: 8, labelWidth: 'auto',
}}
rowSelection={{
type: 'checkbox'
}}
expandable={{
expandedRowRender
}}
columns={[
{
title: '筛选日期',
dataIndex: 'date_range',
hidden: true,
width: 120,
valueType: 'dateRange',
search: {
transform: (value) => {
return {
start_date: value[0],
end_date: value[1],
};
},
},
},
{
title: 'ID',
dataIndex: 'id',
width: 80,
fixed: 'left',
width: 200,
},
{
title: '企业名称',
dataIndex: 'full_name',
width: 300,
fixed: 'left',
valueType: 'input',
renderFormItem: () => {
width: 200,
renderFormItem: (_, { type, defaultRender }) => {
return (
<><Input placeholder="请输入企业名称" value={fullname} onChange={(e) => {
setFullname(e.target.value)
}} /></>
<Input
placeholder="请输入企业名称"
defaultValue={searchParams.get('full_name')}
onChange={(e) => {
console.log(e.target.value);
}}
/>
)
}
},
{
title: '见习基地',
dataIndex: 'probation_text',
search: false,
width: 100,
},
{
title: '知名企业',
dataIndex: 'famous_text',
search: false,
width: 100
},
},
{
title: '会员类型',
dataIndex: 'member_type_text',
width: 200,
search: false,
width: 100
},
{
title: '会员状态',
dataIndex: 'member_status_text',
width: 100,
dataIndex: 'member_status',
width: 200,
search: false,

valueEnum: {
0: { text: '全部' },
1: {
text: '待审',
status: 'Error'
},
2: {
text: '正常',
status: 'Processing'
},
3: {
text: '到期',
status: 'Error'
},
4: {
text: '推荐',
status: 'Error'
},
},
},
{
title: '开始时间',
dataIndex: 'start_date',
width: 200,
search: false,

width: 200
},
{
title: '到期时间',
dataIndex: 'end_date',
width: 200,
search: false,

width: 200
}, {
title: '剩余点数',
dataIndex: 'balance_fee',
width: 200,
search: false,
width: 100,
},
{
title: '业务员',
dataIndex: 'sales',
search: false,
width: 200
},
{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [

<Button key='1' type='link' onClick={() => {
setId(record.id)
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>编辑</Button>,
<Button key='1' type='link' onClick={() => {
<Button key='2' type='link' onClick={() => {
setId(record.id)
dispatch({ type: 'openModel/getOpenFeeModal', payload: true })
}}>变更点数</Button>
@@ -170,22 +202,86 @@ const CompanyListPage: React.FC = ({ dispatch, getId, openModel }: any) => {
pagesize: pageSize,
sort: 'id',
sortby: 'desc',
keyword: fullname,
start_date: params.date_range ? params.date_range[0] : '',
end_date: params.date_range ? params.date_range[1] : '',
keyword: searchParams.get('full_name') ? searchParams.get('full_name') : params.full_name,
id: params.id,
start_date: params.start_date,
end_date: params.end_date,
}).then(res => {
setList(res.data.list)
setTotal(res.data.total)
})
}
onReset={() => {
if (sessionStorage.getItem('vip_company_info')) {
sessionStorage.removeItem('vip_company_info')
}
setFullname('')
actionRef.current.reload();
}}
headerTitle="企业列表"

headerTitle="VIP企业列表"
toolBarRender={() => [
<Button type="primary" onClick={() => {
Modal.confirm({
title: '请选择对批量数据开通哪种会员类型',
content: (<>
<div>参数: id, member_type,start_date,end_date </div>
<h4 style={{ fontWeight: 'bold' }}>类型:</h4>
<Radio.Group size='small' onChange={async (e) => {

actionRef.current?.reload();
}}>
<Row gutter={[20, 20]} style={{ padding: 20 }}>
<Col span={12}>
<Radio value={1}>试用申请中</Radio>
</Col>
<Col span={12}>
<Radio value={1}>试用正式</Radio>
</Col>
<Col span={12}>
<Radio value={1}>普通申请中</Radio>
</Col>
<Col span={12}>
<Radio value={1}>普通正式</Radio>
</Col>
<Col span={12}>
<Radio value={1}>VIP申请中</Radio>
</Col>
<Col span={12}>
<Radio value={1}>VIP正式</Radio>
</Col>
</Row>
</Radio.Group>
<h4 style={{ fontWeight: 'bold' }}>时长:</h4>
<Radio.Group size='small' onChange={async (e) => {
actionRef.current?.reload();
}}>
<Row gutter={[20, 20]} style={{ padding: 20 }}>
<Col span={12}>
<Radio value={1}>1天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>3天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>7天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>15天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>30天</Radio>
</Col>
</Row>
</Radio.Group>
</>),
onOk() {

},
onCancel() {
console.log('Cancel');
},
okText: '保存',
cancelText: '取消',
centered: true
});
}}>
批量开通会员
</Button>,
]}
/>
</ConfigProvider>
</>
@@ -197,4 +293,5 @@ const CompanyListPage: React.FC = ({ dispatch, getId, openModel }: any) => {
export default connect(({ dictModel, openModel }: any) => ({
dictModel,
openModel
}))(CompanyListPage);
}))(CompanyListPage);


+ 65
- 65
src/components/Render/Main/Fair/List/create/index.tsx View File

@@ -8,7 +8,7 @@ import {
ProFormDependency,
FormControlRender,
ProForm,
ProFormSegmented
ProFormRadio
} from '@ant-design/pro-components';
import { ConfigProvider, Flex, Space, Modal, message, Form, Row, Col, Image } from 'antd';
import { PostRecruitmentUpdate, PostRecruitmentAdd, GetCompanyInfo, GetRecruitmentDetail } from '@/apis/api';
@@ -108,73 +108,39 @@ const PagesMainFairListCreate: React.FC = ({ dispatch, dictModel, openModel, id
}
}}
>
<ProFormText
name="title"
label="招聘会主题"
placeholder="请输入招聘会主题"
rules={[{ required: true, message: '请输入招聘会主题' }
]}
/>
<Form.Item
name='content'
label="招聘会内容"
rules={[{ required: true }]}
>
<FormControlRender>
{() => {
return (
<ProFormDependency name={['content']} >
{({ content }, form) => {
return (
<RichComponent placeholder="请输入招聘会内容" defaultValue={content}
onChange={(value) => {
setRichTxt(value)
form.formRef.current.setFieldsValue({
content: value
})
}}></RichComponent>
);
}}
</ProFormDependency>
);
}}
</FormControlRender>
</Form.Item>


<ProFormDateTimeRangePicker
name="dateRange"
label="选择有效的日期时间范围"
fieldProps={{
format: 'YYYY-MM-DD HH:mm:ss'
}}
rules={[{ required: true, message: '请选择有效的时间范围' }]}
/>



<Row gutter={[16, 16]}>
{
detail ?
<Col span={6}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="上传招聘会照片" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</Col> : <>
<Col span={6}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="上传招聘会照片" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</Col>
</>
}
{
detail ?
<Col span={6}>
{uploadedFilephotoName ? <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image> : <Image src={`${Imageprefix}${detail?.photo}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image>}
</Col> : <>
{uploadedFilephotoName ? <Col span={6}> <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image> </Col> : ''}
</>
}
<Col span={24}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="上传招聘会照片" image_type={3} imageUrl={detail?.photo} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</Col>
<Col span={12}>
<ProFormText
name="title"
label="招聘会主题"
placeholder="请输入招聘会主题"
rules={[{ required: true, message: '请输入招聘会主题' }
]}
/>
</Col>
<Col span={12}>
<ProFormDateTimeRangePicker
name="dateRange"
label="选择有效的日期时间范围"
fieldProps={{
format: 'YYYY-MM-DD HH:mm:ss'
}}
rules={[{ required: true, message: '请选择有效的时间范围' }]}
/>
</Col>

{/* <Col span={24}>
<Switch checked={mapSwitch} checkedChildren='地图已显示' unCheckedChildren="地图已关闭" onChange={(val) => {
setMapSwitch(val)
}} />
</Col> */}
<Col span={24}>
<Col span={8}>
<ProFormText
label="详细地址"
name="address"
@@ -192,15 +158,49 @@ const PagesMainFairListCreate: React.FC = ({ dispatch, dictModel, openModel, id
}}></MapComponent>
</Col>
} */}
<Col span={24}>
<ProFormSegmented
<Col span={6}>
<ProFormRadio.Group
name="status"
label="招聘会状态"
request={async () => [
fieldProps={{
buttonStyle: 'solid'
}}
options={[
{ label: '开启', value: 1 },
{ label: '结束', value: 2 }
]}
/>

</Col>

<Col span={24}>
<Form.Item
name='content'
label="招聘会内容"
rules={[{ required: true }]}
>
<FormControlRender>
{() => {
return (
<ProFormDependency name={['content']} >
{({ content }, form) => {
return (
<RichComponent placeholder="请输入招聘会内容" defaultValue={content}
onChange={(value) => {
setRichTxt(value)
form.formRef.current.setFieldsValue({
content: value
})
}}></RichComponent>
);
}}
</ProFormDependency>
);
}}
</FormControlRender>
</Form.Item>


</Col>
</Row>
</ProForm>

+ 149
- 43
src/components/Render/Main/Fair/List/table/index.tsx View File

@@ -2,11 +2,15 @@ import { useRef, useState, useEffect } from 'react';
import { connect, history } from '@umijs/max';
import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProTable
ProTable, ProForm
} from '@ant-design/pro-components';
import { Button, ConfigProvider, Tag } from 'antd';
import { Button, ConfigProvider, Tag, Modal, Radio, Row, Col, Descriptions, Space, Image } from 'antd';
import { Imageprefix } from '@/constants';
import { listRecruitment, GetRecruitmentDetail } from '@/apis/api';

import UploadModel from '@/components/Common/upload';


const MainFairListPage: React.FC = ({ dispatch, getId, openModel }: any) => {
const actionRef = useRef<ActionType>();
const [list, setList] = useState<object[]>([])
@@ -20,10 +24,37 @@ const MainFairListPage: React.FC = ({ dispatch, getId, openModel }: any) => {

useEffect(() => {
if (!openModel.openModal) {
actionRef.current.reload();
actionRef.current?.reload();
}
}, [openModel.openModal])

const [uploadedFilephotoName, setUploadedFilephotoName] = useState<string>('');
const uploadedFilephotoNameRef = useRef<string>('');
const handleFileUploadedphoto = (filename: string) => {
setUploadedFilephotoName(filename);
};

useEffect(() => {
uploadedFilephotoNameRef.current = uploadedFilephotoName;
}, [uploadedFilephotoName])


const expandedRowRender = (record) => {
return (
<>
<Space direction='vertical' style={{ width: '100%' }}>
<Descriptions title="参会信息" bordered column={3} contentStyle={{ fontWeight: 'bold' }} labelStyle={{ width: 180 }}>
<Descriptions.Item label="参与的企业总数">{record.join_count}</Descriptions.Item>
<Descriptions.Item label="已审核企业总数">{record.job_count}</Descriptions.Item>
<Descriptions.Item label="参与职位数">{record.job_count}</Descriptions.Item>
<Descriptions.Item label="需求人数">{record.recruiting_num}</Descriptions.Item>
</Descriptions>
</Space >

</>
);
};

return (
<>
<ConfigProvider
@@ -37,15 +68,21 @@ const MainFairListPage: React.FC = ({ dispatch, getId, openModel }: any) => {
>

<ProTable
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
scroll={{ x: 1300 }}
actionRef={actionRef}
dataSource={list}
search={{ span: 8, labelWidth: 'auto' }}
rowSelection={{
type: 'checkbox'
}}
expandable={{
expandedRowRender
}}
columns={[{
title: 'ID',
dataIndex: 'id',
width: 80,
width: 200,
},
{
title: '招聘会名称',
@@ -62,51 +99,40 @@ const MainFairListPage: React.FC = ({ dispatch, getId, openModel }: any) => {
width: 200,
search: false
}, {
title: '开状态',
title: '开状态',
dataIndex: 'status',
width: 100,
width: 300,
render: (_, record) => (<>
{
<>
{record.status === 1 ? <Tag color="green">进行中</Tag> : <Tag color="red">已结束</Tag>}
</>
}

<Radio.Group size='small' value={record.status} onChange={async (e) => {
actionRef.current?.reload();
}}>
<Radio value={1}>已开启</Radio>
<Radio value={2}>已关闭</Radio>
</Radio.Group>
</>),
valueType: 'select',
valueEnum: {
0: { text: '全部' },
1: {
text: '进行中',
text: '已开启',
},
2: {
text: '已结束',
text: '已关闭',
}
},
}, {
title: '参与的企业总数',
dataIndex: 'join_count',
width: 120,
search: false
}, {
title: '已审核企业总数',
dataIndex: 'audit_count',
width: 120,
search: false
}, {
title: '参与职位数',
dataIndex: 'job_count',
width: 100,
search: false
}, {
title: '需求人数',
dataIndex: 'recruiting_num',
width: 100,
search: false
title: '封面图',
dataIndex: 'photo',
width: 200,
search: false,
render: (_, record) => (<>
<Image src={`${Imageprefix}${record.photo}`} width={60} height={60} />
</>
)
},
{
title: '操作',
width: 120,
key: 'option',
valueType: 'option',
render: (_, record, action) => [
@@ -114,11 +140,38 @@ const MainFairListPage: React.FC = ({ dispatch, getId, openModel }: any) => {
setId(record)
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>编辑</Button>,
<Button size='small' type='link' onClick={() => {
Modal.confirm({
title: '更换图片',
content: (<>
<ProForm submitter={{ render: false }}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="更换图片" image_type={3} imageUrl={record.photo} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</ProForm>
</>),
async onOk() {
// let info = await GetCompanyInfo({ id: record.id });
// let res = await updateCompany({ ...info.data, license_path: uploadedFilelicenseNameRef.current });
// setUploadedFilelicenseName('');
actionRef.current?.reload();
},
onCancel() {
console.log('Cancel');
},
okText: '保存',
cancelText: '取消',
centered: true,
});
}}>更换图片</Button>,
<Button key='2' type='link' onClick={() => {
setId(record)
dispatch({ type: 'openModel/getOpenFairDetailModal', payload: true })

}}>详情</Button>
}}>详情</Button>,
<Button key='3' type='link' onClick={() => {
setId(record)
dispatch({ type: 'openModel/getOpenFairDetailModal', payload: true })

}}>参与企业</Button>
],
},
]}
@@ -151,12 +204,65 @@ const MainFairListPage: React.FC = ({ dispatch, getId, openModel }: any) => {
setTotal(res.data.total)
})
}
toolBarRender={() => [
<Button type="primary" onClick={() => {
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>
添加招聘会
</Button>
toolBarRender={() => [<Button type="primary" onClick={() => {
Modal.confirm({
title: '请选择对批量数据进行何种操作',
content: (<>
<h4 style={{ fontWeight: 'bold' }}>状态:</h4>
<Radio.Group size='small' onChange={async (e) => {

actionRef.current?.reload();
}}>
<Row gutter={[20, 20]} style={{ padding: 20 }}>
<Col span={12}>
<Radio value={1}>开启</Radio>
</Col>
<Col span={12}>
<Radio value={1}>关闭</Radio>
</Col>
</Row>
</Radio.Group>
<h4 style={{ fontWeight: 'bold' }}>时长:</h4>
<Radio.Group size='small' onChange={async (e) => {
actionRef.current?.reload();
}}>
<Row gutter={[20, 20]} style={{ padding: 20 }}>
<Col span={12}>
<Radio value={1}>1天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>3天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>7天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>15天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>30天</Radio>
</Col>
</Row>
</Radio.Group>
</>),
onOk() {

},
onCancel() {
console.log('Cancel');
},
okText: '保存',
cancelText: '取消',
centered: true
});
}}>
批量管理招聘会
</Button>,
<Button type="primary" onClick={() => {
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>
添加招聘会
</Button>
]}
headerTitle="招聘会列表"
/>

+ 2
- 3
src/components/Render/Main/Feedback/table/index.tsx View File

@@ -38,10 +38,11 @@ const MainFeedbackListPage: React.FC = ({ dispatch, getId, openModel }: any) =>

<ProTable
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
scroll={{ x: 1300 }}
actionRef={actionRef}
dataSource={list}
search={{ span: 8, labelWidth: 'auto' }}
columns={[
{
title: '用户',
@@ -57,10 +58,8 @@ const MainFeedbackListPage: React.FC = ({ dispatch, getId, openModel }: any) =>
},
{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record.id)

+ 75
- 88
src/components/Render/Main/Information/Article/create/index.tsx View File

@@ -6,6 +6,7 @@ import {
ProFormText,
ProFormSegmented,
ProFormSelect,
ProFormRadio,
ProForm,
FormControlRender,
ProFormDependency,
@@ -74,7 +75,7 @@ const PagesMainInformationArticleCreate: React.FC = ({ dispatch, dictModel, open
let res = await GetArticleDetail({ id: id })
setUploadedFilephotoName(res.data.cover_img)
res.data.section_arr = [res.data.section_name]
setDetail(res.data)
return res.data;
} else {
@@ -128,72 +129,59 @@ const PagesMainInformationArticleCreate: React.FC = ({ dispatch, dictModel, open
}
}}
>
<ProFormText
label="文章标题"
name="title"
placeholder="请输入文章标题"
rules={[{ required: true, message: '请输入文章标题' }]}
/>

<Row gutter={[16, 16]}>
{
detail ?
<Col span={24} style={{ display: 'flex' }}>
<UploadModel multiple={false} form_name="cover_img" image_length={1} uploadTxt="上传封面图" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
{uploadedFilephotoName ? <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginLeft: '16px', marginTop: '32px', width: '100px', height: '100px' }}></Image> : <Image src={`${Imageprefix}${detail?.cover_img}`} style={{ marginLeft: '16px', marginTop: '32px', width: '100px', height: '100px' }}></Image>}
</Col> : <>
<Col span={24} style={{ display: 'flex' }}>
<UploadModel multiple={false} form_name="cover_img" image_length={1} uploadTxt="上传封面图" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
{uploadedFilephotoName ? <Col span={8}> <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image> </Col> : ''}
</Col>
</>
}
</Row>
<ProFormSwitch fieldProps={{
checked: showUplaod,
checkedChildren: '关闭上传文件',
unCheckedChildren: '开启上传文件',
onChange: (val) => {
setShowUplaod(val)
}
}} />
{
showUplaod && <>
<DragUpload form_name="doc_url" uploadTxt="上传文件" onUploadComplete={handleFileUploadedDoc}></DragUpload>
<Typography.Paragraph copyable>链接:{`${Imageprefix}${uploadedFileDocName}`}</Typography.Paragraph>
</>
}
<Col span={8}>
<UploadModel multiple={false} form_name="cover_img" image_length={1} uploadTxt="上传封面图" image_type={3} imageUrl={detail?.photo} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</Col>

<Col span={8}>
<ProFormRadio.Group
name="stick_top"
label="是否置顶"
request={async () => [
{ label: '是', value: 1 },
{ label: '否', value: 2 }
]}
rules={[{ required: true, message: '请选择是否置顶' }]}
/>
</Col>
<Col span={8}>
<ProFormRadio.Group
name="hot"
label="成为热门"
request={async () => [
{ label: '普通', value: 1 },
{ label: '热门推荐', value: 2 }
]}
rules={[{ required: true, message: '请选择是否成为热门' }]}
/>
</Col>
<Col span={8}>
<ProFormText
label="文章标题"
name="title"
placeholder="请输入文章标题"
rules={[{ required: true, message: '请输入文章标题' }]}
/>
</Col>
<Col span={8}>
<ProFormCascader
label="栏目/频道"
name="section_arr"
fieldProps={{
fieldNames: cascaderfieldNames,
changeOnSelect: true
}}
placeholder="请选择栏目/频道"
request={(keyword) =>
listSection({ page: 1, pagesize: 100, keyword: keyword.keyWords, sortby: 'desc', }).then(res => {
return res.data.sections;
})
}
/>
</Col>

<ProFormCascader
label="栏目/频道"
name="section_arr"
fieldProps={{
fieldNames: cascaderfieldNames,
changeOnSelect: true
}}
placeholder="请选择栏目/频道"
request={(keyword) =>
listSection({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.sections;
})
}
/>

{/* <ProFormSelect
showSearch
name="section_id"
label="栏目/频道"
placeholder="请选择栏目/频道"
fieldProps={{
fieldNames: selectfieldNames
}}
request={(keyword) =>
listSection({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.sections;
})
}
/> */}
<Row gutter={[16, 16]}>
<Col span={24}>
<Form.Item
name='content'
@@ -220,31 +208,30 @@ const PagesMainInformationArticleCreate: React.FC = ({ dispatch, dictModel, open
</FormControlRender>
</Form.Item>
</Col>
<Col span={24}>
<ProFormSwitch fieldProps={{
checked: showUplaod,
checkedChildren: '关闭上传文件',
unCheckedChildren: '开启上传文件',
onChange: (val) => {
setShowUplaod(val)
}
}} />
{
showUplaod && <>
<DragUpload form_name="doc_url" uploadTxt="上传文件" onUploadComplete={handleFileUploadedDoc}></DragUpload>
<Typography.Paragraph copyable>链接:{`${Imageprefix}${uploadedFileDocName}`}</Typography.Paragraph>
</>
}
</Col>
<Col span={8}>
<ProFormText
name="author"
label="作者"
placeholder="请输入作者"
/>
</Col>
</Row>
<ProFormSegmented
name="stick_top"
label="是否置顶"
request={async () => [
{ label: '是', value: 1 },
{ label: '否', value: 2 }
]}
rules={[{ required: true, message: '请选择是否置顶' }]}
/>
<ProFormSegmented
name="hot"
label="成为热门"
request={async () => [
{ label: '普通', value: 1 },
{ label: '热门推荐', value: 2 }
]}
rules={[{ required: true, message: '请选择是否成为热门' }]}
/>

<ProFormText
name="author"
label="作者"
placeholder="请输入作者"
/>

</ProForm>
</Modal>

+ 139
- 92
src/components/Render/Main/Information/Article/table/index.tsx View File

@@ -2,12 +2,13 @@ import { useRef, useState, useEffect } from 'react';
import { connect, history } from '@umijs/max';
import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProTable, TableDropdown,ProFormSelect
ProTable, TableDropdown, ProFormSelect
} from '@ant-design/pro-components';
import { Button, Image, ConfigProvider, Popconfirm, message , Tag} from 'antd';
import { listArticle, listSection, delArticle} from '@/apis/api';
import { Button, Image, ConfigProvider, Popconfirm, message, Modal } from 'antd';
import { listArticle, listSection, delArticle } from '@/apis/api';
import { Imageprefix } from '@/constants';
const selectfieldNames = { label: 'name', value: 'id', children: 'childs' };
import UploadModel from '@/components/Common/upload';

const PagesMainInformationArticleTable: React.FC = ({ dispatch, openModel, getId }: any) => {
const actionRef = useRef<ActionType>();
@@ -22,10 +23,20 @@ const PagesMainInformationArticleTable: React.FC = ({ dispatch, openModel, getId

useEffect(() => {
if (!openModel.openModal) {
actionRef.current.reload();
actionRef.current?.reload();
}
}, [openModel.openModal])

const [uploadedFilephotoName, setUploadedFilephotoName] = useState<string>('');
const uploadedFilephotoNameRef = useRef<string>('');
const handleFileUploadedphoto = (filename: string) => {
setUploadedFilephotoName(filename);
};

useEffect(() => {
uploadedFilephotoNameRef.current = uploadedFilephotoName;
}, [uploadedFilephotoName])

return (
<>
<ConfigProvider
@@ -37,101 +48,136 @@ const PagesMainInformationArticleTable: React.FC = ({ dispatch, openModel, getId
}}
>
<ProTable
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
scroll={{ x: 1300 }}
actionRef={actionRef}
dataSource={list}
columns={[ {
search={{ span: 8, labelWidth: 'auto' }}
rowSelection={{
type: 'checkbox'
}}
columns={[{
title: 'ID',
dataIndex: 'id',
width: 100,
width: 200,
search: false,
},
{
title: '文章名',
dataIndex: 'title',
width: 400,
},
{
title: '所属栏目',
dataIndex: 'section_name',
search: false
},
{
title: '所属栏目',
dataIndex: 'section_id',
hidden: true,
valueType: 'select',
renderFormItem: () => {
return (
<ProFormSelect
width='lg'
fieldProps={{
fieldNames: selectfieldNames,
}}
request={async (keyword) =>
listSection({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.sections;
})
}
placeholder="请选择所属栏目"
/>
)
}
},
{
title: '封面图',
dataIndex: 'cover_img',
search: false,
render: (_, record) => (<>
<Image src={`${Imageprefix}${record.cover_img}`} width={40} height={40}/>
</>
{
title: '文章名',
dataIndex: 'title',
width: 200,
},
{
title: '所属栏目',
dataIndex: 'section_name',
search: false,
width: 200,
},
{
title: '所属栏目',
dataIndex: 'section_id',
hidden: true,
valueType: 'select',
renderFormItem: () => {
return (
<ProFormSelect
width='lg'
fieldProps={{
fieldNames: selectfieldNames,
}}
request={async (keyword) =>
listSection({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.sections;
})
}
placeholder="请选择所属栏目"
/>
)
}
},
{
title: '封面图',
dataIndex: 'cover_img',
search: false,
width: 200,
render: (_, record) => (<>
<Image src={`${Imageprefix}${record.cover_img}`} width={60} height={60} />
</>
)
},
{
title: '置顶',
dataIndex: 'stick_top',
width: 200,
valueEnum: {
0: { text: '全部' },
1: {
text: '置顶',
status: 'Processing'
},
2: {
text: '未置顶',
status: 'Error'
},
},
{
title: '置顶',
dataIndex: 'stick_top',
search: false,
render: (_, record) => (<>
{
<>
{record.stick_top === 1 ? <Tag color="green">置顶</Tag> : <Tag>未置顶</Tag>}
</>
}

</>),
},
{
title: '热门',
dataIndex: 'hot',
search: false,
width: 200,
valueEnum: {
0: { text: '全部' },
1: {
text: '热门推荐',
status: 'Processing'
},
2: {
text: '普通',
status: 'Error'
},
},
{
title: '热门',
dataIndex: 'hot',
search: false,
render: (_, record) => (<>
{
<>
{record.hot === 1 ? <Tag >普通</Tag> : <Tag color="red">热门推荐</Tag>}
</>
}
},

</>),
},
{
title: '作者',
dataIndex: 'author',
search: false
},
{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record.id)
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>编辑</Button>,
<Popconfirm
{
title: '作者',
dataIndex: 'author',
search: false,
width: 200,

},
{
title: '操作',
key: 'option',
valueType: 'option',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record.id)
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>编辑</Button>,
<Button size='small' type='link' onClick={() => {
Modal.confirm({
title: '更换图片',
content: (<>
<ProForm submitter={{ render: false }}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="更换图片" image_type={3} imageUrl={record.photo} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</ProForm>
</>),
async onOk() {
// let info = await GetCompanyInfo({ id: record.id });
// let res = await updateCompany({ ...info.data, license_path: uploadedFilelicenseNameRef.current });
// setUploadedFilelicenseName('');
actionRef.current?.reload();
},
onCancel() {
console.log('Cancel');
},
okText: '保存',
cancelText: '取消',
centered: true,
});
}}>更换图片</Button>,
<Popconfirm
title="是否删除"
onConfirm={(e) => {
delArticle({ id: record.id }).then(res => {
@@ -142,14 +188,15 @@ const PagesMainInformationArticleTable: React.FC = ({ dispatch, openModel, getId
okText="删除"
cancelText="取消"
>
<a
<Button
type='link'
key="delete"
>
删除
</a>
</Button>
</Popconfirm>
],
},
],
},
]}
rowKey="id"
pagination={{

+ 54
- 49
src/components/Render/Main/Information/Section/create/index.tsx View File

@@ -5,7 +5,7 @@ import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProFormText,
ProFormSegmented,
ProFormSelect,
ProFormRadio,
ProForm
} from '@ant-design/pro-components';
import { ConfigProvider, Flex, Space, Modal, message, Image, Row, Col, Switch } from 'antd';
@@ -88,7 +88,8 @@ const PagesMainInformationSectionCreate: React.FC = ({ dispatch, dictModel, open
cover_img: '',
parent_id: -1,
description: '',
display: 1
display: 1,
park: 2
}
}
}}
@@ -125,55 +126,59 @@ const PagesMainInformationSectionCreate: React.FC = ({ dispatch, dictModel, open
}
}}
>
<ProFormText
label="栏目名称"
name="name"
placeholder="请输入栏目名称"
rules={[{ required: true, message: '请输入栏目名称' }]}
/>
<ProFormText
label="栏目编码,用英文字母表示,编码不能与其他栏目编码重复"
name="code"
placeholder="请输入栏目编码,用英文字母表示,编码不能与其他栏目编码重复"
rules={[{ required: true, message: '请输入栏目编码,用英文字母表示,编码不能与其他栏目编码重复' }]}
/>
<ProFormText
name="description"
label="描述"
placeholder="请输入描述"
rules={[{ required: true, message: '请输入描述' }
]}
/>
<Row gutter={[16, 16]}>
{
detail ?
<Col span={24} style={{ display: 'flex' }}>
<UploadModel multiple={false} form_name="cover_img" image_length={1} uploadTxt="上传封面图" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
{uploadedFilephotoName ? <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginLeft: '16px', marginTop: '32px', width: '100px', height: '100px' }}></Image> : <Image src={`${Imageprefix}${detail?.cover_img}`} style={{ marginLeft: '16px', marginTop: '32px', width: '100px', height: '100px' }}></Image>}
</Col> : <>
<Col span={24} style={{ display: 'flex' }}>
<UploadModel multiple={false} form_name="cover_img" image_length={1} uploadTxt="上传封面图" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
{uploadedFilephotoName ? <Col span={8}> <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image> </Col> : ''}
</Col>
</>
}
<Col span={24}>
<UploadModel multiple={false} form_name="cover_img" image_length={1} uploadTxt="上传封面图" image_type={3} imageUrl={detail?.photo} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</Col>
<Col span={8}>
<ProFormText
label="栏目名称"
name="name"
placeholder="请输入栏目名称"
rules={[{ required: true, message: '请输入栏目名称' }]}
/>
</Col>
<Col span={16}>
<ProFormText
label="栏目编码,用英文字母表示,不可重复"
name="code"
placeholder="栏目编码,用英文字母表示,不可重复"
rules={[{ required: true, message: '请输入栏目编码,用英文字母表示,不可重' }]}
/>
</Col>
<Col span={8}>
<ProFormText
name="description"
label="描述"
placeholder="请输入描述"
rules={[{ required: true, message: '请输入描述' }
]}
/>
</Col>
<Col span={8}>
<ProFormRadio.Group
name="display"
label="是否显示"
request={async () => [
{ label: '是', value: 1 },
{ label: '否', value: 2 }
]}
/>
</Col>
<Col span={8}>
<ProFormRadio.Group
name="park"
label="是否是科创园栏目"
request={async () => [
{ label: '是', value: 1 },
{ label: '否', value: 2 }
]}
/>
</Col>
</Row>
<ProFormSegmented
name="display"
label="是否显示"
request={async () => [
{ label: '是', value: 1 },
{ label: '否', value: 2 }
]}
/>
<ProFormSegmented
name="park"
label="是否是科创园栏目"
request={async () => [
{ label: '是', value: 1 },
{ label: '否', value: 2 }
]}
/>



</ProForm>
</Modal>
</ConfigProvider>

+ 124
- 27
src/components/Render/Main/Information/Section/table/index.tsx View File

@@ -2,11 +2,12 @@ import { useRef, useState, useEffect } from 'react';
import { connect, history } from '@umijs/max';
import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProTable, TableDropdown
ProTable, ProForm
} from '@ant-design/pro-components';
import { Button, Image, ConfigProvider, Popconfirm, message,Tag } from 'antd';
import { Button, Image, ConfigProvider, Popconfirm, message, Modal } from 'antd';
import { listSection, delSection } from '@/apis/api';
import { Imageprefix } from '@/constants';
import UploadModel from '@/components/Common/upload';

const PagesMainInformationSectionTable: React.FC = ({ dispatch, openModel, getId }: any) => {
const actionRef = useRef<ActionType>();
@@ -21,10 +22,20 @@ const PagesMainInformationSectionTable: React.FC = ({ dispatch, openModel, getId

useEffect(() => {
if (!openModel.openModal) {
actionRef.current.reload();
actionRef.current?.reload();
}
}, [openModel.openModal])

const [uploadedFilephotoName, setUploadedFilephotoName] = useState<string>('');
const uploadedFilephotoNameRef = useRef<string>('');
const handleFileUploadedphoto = (filename: string) => {
setUploadedFilephotoName(filename);
};

useEffect(() => {
uploadedFilephotoNameRef.current = uploadedFilephotoName;
}, [uploadedFilephotoName])

return (
<>
<ConfigProvider
@@ -36,43 +47,52 @@ const PagesMainInformationSectionTable: React.FC = ({ dispatch, openModel, getId
}}
>
<ProTable
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
scroll={{ x: 1300 }}
actionRef={actionRef}
dataSource={list}
search={{ span: 8, labelWidth: 'auto' }}
rowSelection={{
type: 'checkbox'
}}
columns={[
{
title: 'ID',
dataIndex: 'id',
width: 100,
width: 200,
search: false,
},
{
title: '栏目名称',
dataIndex: 'name'
dataIndex: 'name',
width: 200,
},
{
title: '栏目编码',
dataIndex: 'code'
dataIndex: 'code',
width: 200,
},
{
title: '可见',
dataIndex: 'display',
search: false,
render: (_, record) => (<>
{
<>
{record.display === 1 ? <Tag color="green">可见</Tag> : <Tag>不可见</Tag>}
</>
}

</>),
width: 200,
valueEnum: {
0: { text: '全部' },
1: {
text: '可见',
status: 'Processing'
},
2: {
text: '不可见',
status: 'Error'
},
},
},
{
title: '封面图',
dataIndex: 'cover_img',
search: false,
width: 200,
render: (_, record) => (<>
<Image src={`${Imageprefix}${record.cover_img}`} width={40} height={40} />
</>
@@ -81,19 +101,41 @@ const PagesMainInformationSectionTable: React.FC = ({ dispatch, openModel, getId
{
title: '描述',
dataIndex: 'description',
width: 200,

search: false
},
{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record)
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>编辑</Button>,
<Button size='small' type='link' onClick={() => {
Modal.confirm({
title: '更换图片',
content: (<>
<ProForm submitter={{ render: false }}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="更换图片" image_type={3} imageUrl={record.photo} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</ProForm>
</>),
async onOk() {
// let info = await GetCompanyInfo({ id: record.id });
// let res = await updateCompany({ ...info.data, license_path: uploadedFilelicenseNameRef.current });
// setUploadedFilelicenseName('');
actionRef.current?.reload();
},
onCancel() {
console.log('Cancel');
},
okText: '保存',
cancelText: '取消',
centered: true,
});
}}>更换图片</Button>,
<Button key='1' type='link' onClick={() => {
record.nextlevel = record.id // 添加下级栏目,把id赋值给nextlevel
setId(record)
@@ -110,11 +152,13 @@ const PagesMainInformationSectionTable: React.FC = ({ dispatch, openModel, getId
okText="删除"
cancelText="取消"
>
<a
<Button
danger
type='link'
key="delete"
>
删除
</a>
</Button>
</Popconfirm>
],
},
@@ -149,12 +193,65 @@ const PagesMainInformationSectionTable: React.FC = ({ dispatch, openModel, getId
})
}
headerTitle="栏目/频道"
toolBarRender={() => [
<Button type="primary" onClick={() => {
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>
添加栏目/频道
</Button>
toolBarRender={() => [<Button type="primary" onClick={() => {
Modal.confirm({
title: '请选择对批量数据进行何种操作',
content: (<>
<h4 style={{ fontWeight: 'bold' }}>状态:</h4>
<Radio.Group size='small' onChange={async (e) => {

actionRef.current?.reload();
}}>
<Row gutter={[20, 20]} style={{ padding: 20 }}>
<Col span={12}>
<Radio value={1}>开启</Radio>
</Col>
<Col span={12}>
<Radio value={1}>关闭</Radio>
</Col>
</Row>
</Radio.Group>
<h4 style={{ fontWeight: 'bold' }}>时长:</h4>
<Radio.Group size='small' onChange={async (e) => {
actionRef.current?.reload();
}}>
<Row gutter={[20, 20]} style={{ padding: 20 }}>
<Col span={12}>
<Radio value={1}>1天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>3天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>7天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>15天</Radio>
</Col>
<Col span={12}>
<Radio value={1}>30天</Radio>
</Col>
</Row>
</Radio.Group>
</>),
onOk() {

},
onCancel() {
console.log('Cancel');
},
okText: '保存',
cancelText: '取消',
centered: true
});
}}>
批量管理可见状态
</Button>,
<Button type="primary" onClick={() => {
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>
添加栏目/频道
</Button>
]}
expandable={{
childrenColumnName: 'childs', // 指定子节点数据的字段名

+ 58
- 26
src/components/Render/Main/Jobseeker/Account/table/index.tsx View File

@@ -4,7 +4,10 @@ import type { ActionType } from '@ant-design/pro-components';
import {
ProTable
} from '@ant-design/pro-components';
import { Button, ConfigProvider, Select } from 'antd';
import {
Button, ConfigProvider, Modal,
Radio
} from 'antd';
import { GetCustomerList, GetCustomerDetail, PostCustomerUpdate, PostCustomerDel } from '@/apis/api';
import { Imageprefix } from '@/constants';

@@ -40,9 +43,15 @@ const PagesMainJobseekerAccountTable: React.FC = ({ dispatch, getId, dictModel,
>

<ProTable
scroll={{ x: 1300 }}
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
actionRef={actionRef}
dataSource={list}
search={{ span: 8, labelWidth: 'auto' }}
rowSelection={{
type: 'checkbox'
}}
columns={[
{
title: '用户',
@@ -51,40 +60,38 @@ const PagesMainJobseekerAccountTable: React.FC = ({ dispatch, getId, dictModel,
}, {
title: '邮箱',
dataIndex: 'email',
search: false
search: false,
width: 200
},
{
title: '联系方式',
dataIndex: 'mobile',
search: false
search: false,
width: 200
},
{
title: '登录次数',
dataIndex: 'login_count',
search: false
search: false,
width: 200
},
{
title: '账号状态',
dataIndex: 'status',
width: 200,
render: (_, record) => (<>
{
<>
<Select style={{ width: '100%' }}
value={record.status === 1 ? '使用' : '禁用'}
options={[{ name: '正常', id: 1 }, { name: '禁用', id: 2 }]}
fieldNames={selectfieldNames}
onChange={(value) => {
PostCustomerUpdate({
id: record.id,
status: value
}).then(res => {
actionRef.current.reload()
})
}}>
</Select>
</>
}

<Radio.Group size='small' value={record.status} onChange={async (e) => {
PostCustomerUpdate({
id: record.id,
status: e.target.value
}).then(res => {
actionRef.current?.reload()
})
actionRef.current?.reload();
}}>
<Radio value={1}>使用中</Radio>
<Radio value={2}>已禁用</Radio>
</Radio.Group>
</>),
valueType: 'select',
valueEnum: {
@@ -100,14 +107,13 @@ const PagesMainJobseekerAccountTable: React.FC = ({ dispatch, getId, dictModel,
{
title: '注册日期',
dataIndex: 'created_at',
search: false
search: false,
width: 200,
},
{
title: '操作',
width: 100,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record)
@@ -148,6 +154,32 @@ const PagesMainJobseekerAccountTable: React.FC = ({ dispatch, getId, dictModel,
})
}
headerTitle="简历列表"
toolBarRender={() => [
<Button type="primary" onClick={() => {
Modal.confirm({
title: '请选择对批量数据进行何种操作',
content: (<>
<Radio.Group size='small' onChange={async (e) => {
actionRef.current?.reload();
}}>
<Radio value={1}>开通</Radio>
<Radio value={2}>禁用</Radio>
</Radio.Group>
</>),
onOk() {

},
onCancel() {
console.log('Cancel');
},
okText: '保存',
cancelText: '取消',
centered: true
});
}}>
批量管理账号
</Button>,
]}
/>
</ConfigProvider>


+ 1
- 1
src/components/Render/Main/Jobseeker/List/create/index.tsx View File

@@ -43,7 +43,7 @@ const PagesMainJobseekerListCreate: React.FC = ({ dispatch, dictModel, openModel
maskClosable={false}
footer={null}
destroyOnClose
width={'80%'}
width={1200}
onCancel={() => {
dispatch({ type: 'openModel/getOpenModal', payload: false })
}}

+ 7
- 17
src/components/Render/Main/Jobseeker/List/resume/basic/index.tsx View File

@@ -53,7 +53,7 @@ const PagesMainJobseekerListResumeBasic: React.FC = ({ dispatch, dictModel, open
theme={{
token: {
colorPrimary: '#4FBE70',
} , components: {
}, components: {
Segmented: {
itemSelectedBg: '#19be6e',
itemSelectedColor: '#ffffff'
@@ -68,7 +68,7 @@ const PagesMainJobseekerListResumeBasic: React.FC = ({ dispatch, dictModel, open
let res = await GetJobapplicantDetail({ customer_id: id.customer_id })
res.data.reg_arr = [
res.data.reg_level1 ? res.data.reg_level1 : 0,
res.data.reg_level2? res.data.reg_level2 : 0,
res.data.reg_level2 ? res.data.reg_level2 : 0,
res.data.reg_level3 ? res.data.reg_level3 : 0,
res.data.reg_level4 ? res.data.reg_level4 : 0
]
@@ -131,19 +131,9 @@ const PagesMainJobseekerListResumeBasic: React.FC = ({ dispatch, dictModel, open
}}
>
<Row gutter={[16, 16]}>
{
detail ?
<Col span={24} style={{ display: 'flex' }}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="个人照片" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
{uploadedFilephotoName ? <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginLeft: '16px', marginTop: '32px', width: '100px', height: '100px' }}></Image> : <Image src={`${Imageprefix}${detail?.photo}`} style={{ marginLeft: '16px', marginTop: '32px', width: '100px', height: '100px' }}></Image>}
</Col> : <>
<Col span={24} style={{ display: 'flex' }}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="个人照片" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
{uploadedFilephotoName ? <Col span={8}> <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image> </Col> : ''}
</Col>
</>
}

<Col span={24} style={{ display: 'flex' }}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="个人照片" image_type={3} imageUrl={uploadedFilephotoName} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</Col>
<Col span={8}>
<ProFormText
label="姓名"
@@ -183,8 +173,8 @@ const PagesMainJobseekerListResumeBasic: React.FC = ({ dispatch, dictModel, open
}, () => ({
validator: (rule, value) => {
let info = verifyIdCard(value);
if (typeof (info) == 'boolean') {
return Promise.resolve();
}

+ 68
- 82
src/components/Render/Main/Jobseeker/List/resume/credential/index.tsx View File

@@ -59,98 +59,84 @@ const PagesMainJobseekerListResumeCredetial: React.FC = ({ dispatch, dictModel,
}

}}
columns={[ {
columns={[{
title: 'ID',
dataIndex: 'id',
editable: false,
width: 100

},
{
title: '证书名称',
dataIndex: 'name',
formItemProps: {
rules: [
{
required: true,
message: '请输入证书名称',
},
],
},
},
{
title: '证书描述',
dataIndex: 'description',
formItemProps: {
rules: [
{
required: true,
message: '请输入证书描述',
},
],
},
{
title: '证书名称',
dataIndex: 'name',
formItemProps: {
rules: [
{
required: true,
message: '请输入证书名称',
},
],
},
{
title: '证书',
dataIndex: 'certificate_photo',
formItemProps: {
rules: [
{
required: true,
message: '请上传证书',
},
],
},
render: (text, record) => (
<>
<Image src={`${Imageprefix + record.certificate_photo}`} width={40} height={40} preview={false} />
</>
),
renderFormItem: (_, record, { isEditable }) => {
return isEditable ? <>
{
<Row>
<Col span={24} style={{ display: 'flex' }}>
<UploadModel multiple={false} form_name="certificate_photo" image_length={1} uploadTxt="证书" image_type={2} onUploadComplete={handleFileUploadedphoto}></UploadModel>
{uploadedFilephotoName ? <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginLeft: '16px', width: '100px', height: '100px' }}></Image> : <Image src={`${Imageprefix}${record?.certificate_photo}`} style={{ marginLeft: '16px', marginTop: '32px', width: '100px', height: '100px' }}></Image>}
</Col>
</Row>
}
</> :
<>
{
<Row>
<Col span={24} style={{ display: 'flex' }}>
<UploadModel multiple={false} form_name="certificate_photo" image_length={1} uploadTxt="证书" image_type={2} onUploadComplete={handleFileUploadedphoto}></UploadModel>
{uploadedFilephotoName ? <Col span={8}> <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{marginLeft: '16px', width: '100px', height: '100px' }}></Image> </Col> : ''}
</Col>
</Row>
}
</>;
},
},
{
title: '证书描述',
dataIndex: 'description',
formItemProps: {
rules: [
{
required: true,
message: '请输入证书描述',
},
],
},
{
title: '操作',
valueType: 'option',
width: 200,
render: (text, record, _, action) => [
<a
key="editable"
onClick={() => {
action?.startEditable?.(record.id);
}}
>
编辑
</a>,
<a
key="delete"
onClick={() => {
}}
>
删除
</a>,
},
{
title: '证书',
dataIndex: 'certificate_photo',
formItemProps: {
rules: [
{
required: true,
message: '请上传证书',
},
],
},
render: (text, record) => (
<>
<Image src={`${Imageprefix + record.certificate_photo}`} width={40} height={40} preview={false} />
</>
),
renderFormItem: (_, record, { isEditable }) => {
return isEditable ? <>
<UploadModel multiple={false} form_name="certificate_photo" image_length={1} uploadTxt="证书" image_type={2} imageUrl={record.certificate_photo} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</> :
<>
<UploadModel multiple={false} form_name="certificate_photo" image_length={1} uploadTxt="证书" image_type={2} imageUrl='' onUploadComplete={handleFileUploadedphoto}></UploadModel>
</>;
},
},
{
title: '操作',
valueType: 'option',
width: 200,
render: (text, record, _, action) => [
<a
key="editable"
onClick={() => {
action?.startEditable?.(record.id);
}}
>
编辑
</a>,
<a
key="delete"
onClick={() => {
}}
>
删除
</a>,
],
},
]}
editable={{
type: 'single',

+ 111
- 111
src/components/Render/Main/Jobseeker/List/table/index.tsx View File

@@ -4,7 +4,7 @@ import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProTable, ProForm, ProFormSelect, ProFormText, ProFormDependency
} from '@ant-design/pro-components';
import { Button, ConfigProvider, Image, message, Select, Input, Row, Col, Space, Flex } from 'antd';
import { Button, ConfigProvider, Image, message, Modal, Input, Row, Col, Space, Radio, Descriptions } from 'antd';
import { PostJobseekerList, PostJobseekerExport, PostJobapplicantUpdate } from '@/apis/api';
import { Imageprefix } from '@/constants';

@@ -50,6 +50,45 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope
dispatch({ type: 'dictModel/getList', payload: { code: 2027, type: 'setIndustryPostList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2010, type: 'setPoliticalList' } })
}, [])

const expandedRowRender = (record) => {
return (
<>
<Space direction='vertical' style={{ width: '100%' }}>
<Descriptions title="基本信息" bordered column={3} contentStyle={{ fontWeight: 'bold' }} labelStyle={{ width: 180 }}>
<Descriptions.Item label="英语">{record.english_txt}</Descriptions.Item>
<Descriptions.Item label="国语">{record.mandarin_txt}</Descriptions.Item>
<Descriptions.Item label="粤语">{record.cantonese_txt}</Descriptions.Item>
<Descriptions.Item label="职称">{record.title_txt}</Descriptions.Item>
<Descriptions.Item label="政治面貌">{record.political_status_txt}</Descriptions.Item>
<Descriptions.Item label="月薪要求范围">{record.salary_range_txt}</Descriptions.Item>
<Descriptions.Item label="审核状态">
<Radio.Group size='small' defaultValue={record.status} onChange={async (e) => {
let res = await PostJobapplicantUpdate({ customer_id: record.customer_id, id: record.id, status: e.target.value });
actionRef.current?.reload();
}}>
<Radio value={1}>待审</Radio>
<Radio value={2}>通过</Radio>
<Radio value={3}>不通过</Radio>
</Radio.Group>
</Descriptions.Item>
{
record.status == 3 ? <>
<Descriptions.Item label="不通过原因">
<Input size='small' placeholder='输入原因,按回车键保存' defaultValue={record.status_txt} onPressEnter={async (e) => {
let res = await PostJobapplicantUpdate({ customer_id: record.customer_id, id: record.id, status: 3, audit_memo: e.target.value });
actionRef.current?.reload();
}}></Input>
</Descriptions.Item>
</> : record.status_txt
}
</Descriptions>

</Space >

</>
);
};
return (
<>
<ConfigProvider
@@ -63,16 +102,23 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope

<ProTable
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
scroll={{ x: 1300 }}
actionRef={actionRef}
dataSource={list}
search={{ span: 8, labelWidth: 'auto' }}
rowSelection={{
type: 'checkbox'
}}
expandable={{
expandedRowRender
}}
columns={[
{
title: '筛选日期',
dataIndex: 'date_range',
hidden: true,
width: 120,
width: 200,
valueType: 'dateRange',
},
{
@@ -82,7 +128,7 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope
}, {
title: '性别',
dataIndex: 'gender',
width: 80,
width: 200,
valueType: 'select',
valueEnum: {
'男': '男',
@@ -91,12 +137,12 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope
}, {
title: '教育程度',
dataIndex: 'education_txt',
width: 120,
width: 200,
search: false
}, {
title: '教育程度',
dataIndex: 'education',
width: 120,
width: 200,
hidden: true,
valueType: 'select',
fieldProps: {
@@ -105,14 +151,9 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope
}
},
{
title: '英语',
dataIndex: 'english_txt',
width: 120,
search: false
}, {
title: '英语',
dataIndex: 'english',
width: 120,
width: 200,
hidden: true,
valueType: 'select',
fieldProps: {
@@ -121,31 +162,19 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope
}
},
{
title: '国语',
dataIndex: 'mandarin_txt',
width: 120,
search: false

}, {
title: '国语',
dataIndex: 'mandarin',
width: 120,
width: 200,
hidden: true,
valueType: 'select',
fieldProps: {
fieldNames: selectfieldNames,
options: dictModel.degreeList
}
}, {
title: '粤语',
dataIndex: 'cantonese_txt',
width: 120,
search: false

}, {
title: '粤语',
dataIndex: 'cantonese',
width: 120,
width: 200,
hidden: true,
valueType: 'select',
fieldProps: {
@@ -154,14 +183,9 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope
}
},
{
title: '职称',
dataIndex: 'title_txt',
width: 120,
search: false
}, {
title: '职称',
dataIndex: 'title',
width: 120,
width: 200,
hidden: true,
valueType: 'select',
fieldProps: {
@@ -170,29 +194,19 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope
}
},
{
title: '政治面貌',
dataIndex: 'political_status_txt',
width: 120,
search: false
}, {
title: '政治面貌',
dataIndex: 'political_status',
width: 120,
width: 200,
hidden: true,
valueType: 'select',
fieldProps: {
fieldNames: selectfieldNames,
options: dictModel.politicalList
}
}, {
title: '月薪要求范围',
dataIndex: 'salary_range_txt',
width: 120,
search: false
}, {
title: '月薪要求',
dataIndex: 'salary_range_desire',
width: 120,
width: 200,
hidden: true,
valueType: 'select',
fieldProps: {
@@ -202,64 +216,21 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope
},
{
title: '审核状态',
dataIndex: 'status_txt',
width: 120,
search: false,
render: (_, record) => (<>
<Select style={{ width: 100 }} size='small' defaultValue={record.status_txt} options={[
{
label: '待审',
value: 1,
},
{
label: '通过',
value: 2,
},
{
label: '不通过',
value: 3,
},
]} onChange={async (value) => {
let res = await PostJobapplicantUpdate({ customer_id: record.customer_id, id: record.id, status: value });
actionRef.current.reload();
}} />
</>)
},
{
title: '审核原因',
dataIndex: 'audit_memo',
dataIndex: 'status',
width: 200,
search: false,
render: (_, record) => (
<>
{
record.status == 3 ? <>
<Input size='small' placeholder='输入原因,按回车键保存' onPressEnter={async (e) => {
let res = await PostJobapplicantUpdate({ customer_id: record.customer_id, id: record.id, status: 3, audit_memo: e.target.value });
actionRef.current.reload();
}}></Input></> : record.status_txt
}
</>

)
hidden: true,
valueType: 'select',
valueEnum: {
0: '全部',
1: '待审核',
2: '审核通过',
3: '审核不通过'
}
},
// {
// title: '审核状态',
// dataIndex: 'status',
// width: 120,
// hidden: true,
// valueType: 'select',
// valueEnum: {
// 0: '全部',
// 1: '待审核',
// 2: '审核通过',
// 3: '审核不通过'
// }
// },
{
title: '简历是否可见',
dataIndex: 'hide_resume',
width: 120,
width: 200,
search: false,
render: (_, record) => (<>
{
@@ -273,7 +244,7 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope
{
title: '简历是否在家政模块可见',
dataIndex: 'house_keeping_status',
width: 120,
width: 200,
search: false,
render: (_, record) => (<>
{
@@ -286,10 +257,8 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope
},
{
title: '操作',
width: 400,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record)
@@ -349,17 +318,48 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope
setTotal(res.data.total)
})
}
toolBarRender={() => [
<Button type="primary" onClick={() => {
message.info('数据导出需要时间,请耐心等待')
PostJobseekerExport().then(res => {
let url = Imageprefix + res.data.excel_url;
window.open(url);
message.info('数据导出完毕')
})
}}>
导出数据
</Button>
toolBarRender={() => [<Button type="primary" onClick={(record) => {
Modal.confirm({
title: '请选择对批量数据审核',
content: (<>
<Space direction='vertical' style={{ width: '100%', padding: 20 }}>
<Radio.Group size='small' onChange={async (e) => {
actionRef.current?.reload();
}}>
<Radio value={2}>通过</Radio>
<Radio value={3}>不通过</Radio>
</Radio.Group>
<h4>如不通过请输入原因,按回车键保存,也可不填</h4>
<Input style={{ width: '100%' }} placeholder='此处不通过原因' defaultValue={record.status_txt} onPressEnter={async (e) => {
let res = await PostJobapplicantUpdate({ customer_id: record.customer_id, id: record.id, status: 3, audit_memo: e.target.value });
actionRef.current?.reload();
}}></Input>
</Space>

</>),
onOk() {

},
onCancel() {
console.log('Cancel');
},
okText: '保存',
cancelText: '取消',
centered: true
});
}}>
批量审核
</Button>,
<Button type="primary" onClick={() => {
message.info('数据导出需要时间,请耐心等待')
PostJobseekerExport().then(res => {
let url = Imageprefix + res.data.excel_url;
window.open(url);
message.info('数据导出完毕')
})
}}>
导出数据
</Button>
]}
headerTitle="简历列表"
/>

+ 80
- 59
src/components/Render/Permission/Account/create/index.tsx View File

@@ -100,9 +100,9 @@ const PagesPermissionAccountCreate: React.FC = ({ dispatch, dictModel, openModel
}}
onFinish={async (values) => {
values.province = values.location_arr && values.location_arr.length > 0 && values.location_arr[0] ? values.location_arr[0] : 0;
values.city = values.location_arr && values.location_arr.length > 0 && values.location_arr[1] ? values.location_arr[1] : 0;
values.district = values.location_arr && values.location_arr.length > 0 && values.location_arr[2] ? values.location_arr[2] : 0;
values.street = values.location_arr && values.location_arr.length > 0 && values.location_arr[3] ? values.location_arr[3] : 0;
values.city = values.location_arr && values.location_arr.length > 0 && values.location_arr[1] ? values.location_arr[1] : 0;
values.district = values.location_arr && values.location_arr.length > 0 && values.location_arr[2] ? values.location_arr[2] : 0;
values.street = values.location_arr && values.location_arr.length > 0 && values.location_arr[3] ? values.location_arr[3] : 0;
delete values.location_arr;
values.roleids = values.roleids.join(',')
console.log(values.roleids)
@@ -118,31 +118,6 @@ const PagesPermissionAccountCreate: React.FC = ({ dispatch, dictModel, openModel
}
}}
>
<ProFormText
label="手机号"
name="mobile"
placeholder="请输入手机号"
rules={[{ required: true, message: '请输入手机号' }]}
/>

<ProFormText.Password
label="密码"
name="password"
placeholder="请输入密码"
rules={[{ required: true, message: '请输入密码' }]}
/>
<ProFormText.Password
label="确认密码"
name="repassword"
placeholder="请输入确认密码"
rules={[{ required: true, message: '请输入确认密码' }]}
/>
<ProFormText
label="昵称"
name="nickname"
placeholder="请输入昵称"
/>
<Row gutter={[16, 16]}>
{
detail ?
@@ -156,38 +131,84 @@ const PagesPermissionAccountCreate: React.FC = ({ dispatch, dictModel, openModel
</Col>
</>
}
<Col span={12}>
<ProFormText
label="手机号"
name="mobile"
placeholder="请输入手机号"
rules={[{ required: true, message: '请输入手机号' }]}
/>
</Col>

<Col span={12}>
<ProFormText.Password
label="密码"
name="password"
placeholder="请输入密码"
rules={[{ required: true, message: '请输入密码' }]}
/>
</Col>
<Col span={12}>
<ProFormText.Password
label="确认密码"
name="repassword"
placeholder="请输入确认密码"
rules={[{ required: true, message: '请输入确认密码' }]}
/>
</Col>
<Col span={12}>
<ProFormText
label="昵称"
name="nickname"
placeholder="请输入昵称"
/>
</Col>
<Col span={12}>
<ProFormText
label="邮箱"
name="email"
placeholder="请输入邮箱"
/>
</Col>
<Col span={12}>
<ProFormSelect
showSearch
name="roleids"
label="选择角色"
placeholder="请选择角色"
fieldProps={{
fieldNames: selectfieldNames,
mode: 'multiple'
}}
request={(keyword) =>
GetRoleList({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.roles.filter(item => item.id !== 3);
})
}
rules={[{ required: true, message: '请输入确认密码' }]}
/>
</Col>
<Col span={12}>
<ProFormCascader
label="选择社区"
name="location_arr"
fieldProps={{
fieldNames: cascaderfieldNames,
options: dictModel.areaList,
changeOnSelect: true
}}
placeholder="企业所在地区"
/>
</Col>
</Row>
<ProFormText
label="邮箱"
name="email"
placeholder="请输入邮箱"
/>
<ProFormSelect
showSearch
name="roleids"
label="选择角色"
placeholder="请选择角色"
fieldProps={{
fieldNames: selectfieldNames,
mode: 'multiple'
}}
request={(keyword) =>
GetRoleList({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.roles.filter(item => item.id !== 3 );
})
}
rules={[{ required: true, message: '请输入确认密码' }]}
/>
<ProFormCascader
label="选择社区"
name="location_arr"
fieldProps={{
fieldNames: cascaderfieldNames,
options: dictModel.areaList,
changeOnSelect: true
}}
placeholder="企业所在地区"
/>









</ProForm>
</Modal>

+ 5
- 7
src/components/Render/Permission/Account/table/index.tsx View File

@@ -5,7 +5,7 @@ import {
ProTable, TableDropdown
} from '@ant-design/pro-components';
import { Button, Image, ConfigProvider, Tag } from 'antd';
import { getAccount} from '@/apis/api';
import { getAccount } from '@/apis/api';
import { Imageprefix } from '@/constants';

const PagesPermissionAccountTable: React.FC = ({ dispatch, openModel, getId }: any) => {
@@ -36,11 +36,11 @@ const PagesPermissionAccountTable: React.FC = ({ dispatch, openModel, getId }: a
}}
>
<ProTable
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
scroll={{ x: 1300 }}
actionRef={actionRef}
dataSource={list}
search={{ span: 8, labelWidth: 'auto' }}
columns={[
{
title: '手机号码',
@@ -64,13 +64,11 @@ const PagesPermissionAccountTable: React.FC = ({ dispatch, openModel, getId }: a
title: '角色ID',
dataIndex: 'roleids',
search: false,
},
},
{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record.id)
@@ -105,7 +103,7 @@ const PagesPermissionAccountTable: React.FC = ({ dispatch, openModel, getId }: a
sort: 'id',
sortby: 'desc',
keyword: params.mobile,
}).then(res => {
setList(res.data.users)
setTotal(res.data.total)

+ 62
- 45
src/components/Render/Permission/List/create/index.tsx View File

@@ -8,11 +8,11 @@ import {
ProFormSelect,
ProForm,
FormControlRender,
ProFormDependency,
ProFormRadio,
ProFormSwitch
} from '@ant-design/pro-components';
import { ConfigProvider, Flex, Space, Modal, message, Image, Row, Col, Switch, Form, Typography } from 'antd';
import { addPermission, updatePermission, getPermissionListWithchilds, GetDetailPermission} from '@/apis/api';
import { addPermission, updatePermission, getPermissionListWithchilds, GetDetailPermission } from '@/apis/api';


const selectfieldNames = { label: 'name', value: 'id' };
@@ -34,7 +34,7 @@ const PagesPermissionListCreate: React.FC = ({ dispatch, dictModel, openModel, i
theme={{
token: {
colorPrimary: '#4FBE70',
} , components: {
}, components: {
Segmented: {
itemSelectedBg: '#19be6e',
itemSelectedColor: '#ffffff'
@@ -49,7 +49,7 @@ const PagesPermissionListCreate: React.FC = ({ dispatch, dictModel, openModel, i
maskClosable={false}
footer={null}
destroyOnClose
width={1000}
width={600}
onCancel={() => {
dispatch({ type: 'openModel/getOpenModal', payload: false })
}}
@@ -65,7 +65,7 @@ const PagesPermissionListCreate: React.FC = ({ dispatch, dictModel, openModel, i
path: '',
action: '',
module: '',
p_type: '',
p_type: 2,
parent_id: id.nextlevel,
description: ''
};
@@ -81,12 +81,12 @@ const PagesPermissionListCreate: React.FC = ({ dispatch, dictModel, openModel, i
path: '',
action: '',
module: '',
p_type: '',
p_type: 2,
parent_id: 0,
description: '',
}
}
}}
submitter={{
searchConfig: {
@@ -120,44 +120,61 @@ const PagesPermissionListCreate: React.FC = ({ dispatch, dictModel, openModel, i
}
}}
>
<ProFormText
label="权限/菜单名称"
name="name"
placeholder="请输入权限/菜单名称"
rules={[{ required: true, message: '请输入权限/菜单名称' }]}
/>
<ProFormText
label="路径"
name="path"
placeholder="请输入路径"
rules={[{ required: true, message: '请输入路径' }]}
/>
<ProFormText
label="标识名称"
name="action"
placeholder="请输入标识名称"
rules={[{ required: true, message: '请输入标识名称' }]}
/>
<ProFormText
label="指向页面"
name="module"
placeholder="请输入指向页面"
rules={[{ required: true, message: '请输入指向页面' }]}
/>
<ProFormSegmented
name="p_type"
label="权限类型"
request={async () => [
{ label: '权限', value: 1 },
{ label: '菜单', value: 2 }
]}
rules={[{ required: true, message: '请选择是否置顶' }]}
/>
<ProFormText
name="description"
label="描述"
placeholder="请输入描述"
/>
<Row gutter={16}>
<Col span={24}>
<ProFormText
label="权限/菜单名称"
name="name"
placeholder="请输入权限/菜单名称"
rules={[{ required: true, message: '请输入权限/菜单名称' }]}
/>
</Col>
<Col span={24}>

<ProFormText
label="路径"
name="path"
placeholder="请输入路径"
rules={[{ required: true, message: '请输入路径' }]}
/>
</Col>
<Col span={24}>
<ProFormText
label="标识名称"
name="action"
placeholder="请输入标识名称"
rules={[{ required: true, message: '请输入标识名称' }]}
/>
</Col>
<Col span={24}>
<ProFormText
label="指向页面"
name="module"
placeholder="请输入指向页面"
rules={[{ required: true, message: '请输入指向页面' }]}
/>
</Col>
<Col span={24}>
<ProFormRadio.Group
name="p_type"
label="权限类型"
request={async () => [
{ label: '权限', value: 1 },
{ label: '菜单', value: 2 }
]}
rules={[{ required: true, message: '请选择权限类型' }]}
/>
</Col>

<Col span={24}>
<ProFormText
name="description"
label="描述"
placeholder="请输入描述"
/>
</Col>
</Row>

</ProForm>
</Modal>
</ConfigProvider>

+ 1
- 1
src/components/Render/Permission/List/parent/index.tsx View File

@@ -63,7 +63,7 @@ const PagesPermissionListParent: React.FC = ({ dispatch, dictModel, openModel, i
maskClosable={false}
footer={null}
destroyOnClose
width={1000}
width={600}
onCancel={() => {
dispatch({ type: 'openModel/getOpenParentModal', payload: false })
}}

+ 27
- 26
src/components/Render/Permission/List/table/index.tsx View File

@@ -4,7 +4,7 @@ import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProTable, TableDropdown
} from '@ant-design/pro-components';
import { Button, Image, ConfigProvider, Tag, Modal } from 'antd';
import { Button, Image, ConfigProvider, Tag, Badge } from 'antd';
import { getPermissionListWithchilds } from '@/apis/api';
import { Imageprefix } from '@/constants';

@@ -19,7 +19,7 @@ const PagesPermissionListTable: React.FC = ({ dispatch, openModel, getId }: any)
getId(id)
}

useEffect(() => {
if (!openModel.openParentModal) {
actionRef.current.reload();
@@ -43,74 +43,75 @@ const PagesPermissionListTable: React.FC = ({ dispatch, openModel, getId }: any)
}}
>
<ProTable
size='small'
search={false}
scroll={{ y: 480, x: 'auto' }}
bordered={true}
scroll={{ x: 1300 }}
actionRef={actionRef}
dataSource={list}
search={false}
columns={[
{
title: 'ID',
dataIndex: 'id',
width: 100,
width: 200,
search: false,
},

{
title: '权限/菜单',
dataIndex: 'name',
width: 300,
width: 200,
search: false,
render: (_, record) => (<>
{record.p_type == 1 ? <>{record.name} <Tag>权限</Tag></> : <>{record.name} <Tag color='green'>菜单</Tag></>}
</>
)
}, {
title: '权限/菜单',
title: '类型',
dataIndex: 'p_type',
search: false,
width: 100,
render: (_, record) => (<>
{record.p_type == 1 ? <><Tag>权限</Tag></> : <> <Tag color='green'>菜单</Tag></>}
</>
)
width: 200,
valueEnum: {
1: {
text: '权限',
status: 'Error'
},
2: {
text: '菜单',
status: 'Processing'
},
},
}, {
title: '路径',
dataIndex: 'path',
search: false,
width: 180,
width: 200,

}, {
title: '标识名称',
dataIndex: 'action',
search: false,
width: 180,
width: 200,
}, {
title: '指向页面',
dataIndex: 'module',
search: false,
width: 180,
}, {
width: 200,
},
{
title: '上级菜单id',
dataIndex: 'parent_id',
search: false,
width: 180,
width: 200,
render: (_, record) => (<>
{record.parent_id == -1 ? '当前已是顶级菜单' : record.parent_id}
{record.parent_id == -1 ? <Badge status="processing" text='顶级菜单' /> : <Badge status="error" text={record.parent_id}/> }
</>
)
}, {
title: '描述',
dataIndex: 'description',
search: false,
width: 180,
width: 200,
},
{
title: '操作',
width: 400,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record)

+ 1
- 1
src/components/Render/Permission/Role/create/index.tsx View File

@@ -35,7 +35,7 @@ const PagesPermissionRoleCreate: React.FC = ({ dispatch, dictModel, openModel, i
maskClosable={false}
footer={null}
destroyOnClose
width={1000}
width={600}
onCancel={() => {
dispatch({ type: 'openModel/getOpenModal', payload: false })
}}

+ 5
- 6
src/components/Render/Permission/Role/table/index.tsx View File

@@ -36,25 +36,26 @@ const PagesPermissionRoleTable: React.FC = ({ dispatch, openModel, getId }: any)
}}
>
<ProTable
size='small'
scroll={{ y: 480, x: 'auto' }}
bordered={true}
scroll={{ x: 1300 }}
actionRef={actionRef}
dataSource={list}
search={{ span: 8, labelWidth: 'auto' }}
columns={[
{
title: 'ID',
dataIndex: 'id',
width: 100,
search: false,
},
{
title: '角色名',
dataIndex: 'name'
dataIndex: 'name',

},
{
title: '别名',
dataIndex: 'code',

search: false,
},
{
@@ -64,10 +65,8 @@ const PagesPermissionRoleTable: React.FC = ({ dispatch, openModel, getId }: any)
},
{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record.id)

+ 7
- 7
src/components/Render/Setting/Dictionary/create/index.tsx View File

@@ -4,11 +4,11 @@ import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProFormText,
ProFormSegmented,
ProFormSelect,
ProFormRadio,
ProForm
} from '@ant-design/pro-components';
import { ConfigProvider, Flex, Space, Modal, message, Image, Row, Col, Switch } from 'antd';
import {PostDictAdd, PostDictUpdate , GetDictDetail } from '@/apis/api';
import { PostDictAdd, PostDictUpdate, GetDictDetail } from '@/apis/api';



@@ -28,7 +28,7 @@ const PagesSettingDictionaryCreate: React.FC = ({ dispatch, dictModel, openModel
theme={{
token: {
colorPrimary: '#4FBE70',
} , components: {
}, components: {
Segmented: {
itemSelectedBg: '#19be6e',
itemSelectedColor: '#ffffff'
@@ -43,7 +43,7 @@ const PagesSettingDictionaryCreate: React.FC = ({ dispatch, dictModel, openModel
maskClosable={false}
footer={null}
destroyOnClose
width={1000}
width={600}
onCancel={() => {
dispatch({ type: 'openModel/getOpenModal', payload: false })
}}
@@ -59,7 +59,7 @@ const PagesSettingDictionaryCreate: React.FC = ({ dispatch, dictModel, openModel
parent_id: id.nextlevel,
name: '',
value: '',
display: '',
display: 'S',
childs: null,
};
} else {
@@ -74,7 +74,7 @@ const PagesSettingDictionaryCreate: React.FC = ({ dispatch, dictModel, openModel
parent_id: -1,
name: '',
value: '',
display: '',
display: 'S',
childs: null,
}
}
@@ -130,7 +130,7 @@ const PagesSettingDictionaryCreate: React.FC = ({ dispatch, dictModel, openModel
name="value"
placeholder="请输入字典代码值"
/>
<ProFormSegmented
<ProFormRadio.Group
name="display"
label="是否显示"
request={async () => [

+ 3
- 5
src/components/Render/Setting/Dictionary/table/index.tsx View File

@@ -5,7 +5,7 @@ import {
ProTable, TableDropdown
} from '@ant-design/pro-components';
import { Button, Image, ConfigProvider, Tag } from 'antd';
import { GetDictList} from '@/apis/api';
import { GetDictList } from '@/apis/api';
import { Imageprefix } from '@/constants';

const PagesSettingDictionaryTable: React.FC = ({ dispatch, openModel, getId }: any) => {
@@ -38,8 +38,8 @@ const PagesSettingDictionaryTable: React.FC = ({ dispatch, openModel, getId }: a
<ProTable
size='small'
search={false}
scroll={{ y: 480, x: 'auto' }}
bordered={true}
scroll={{ x: 1300 }}
actionRef={actionRef}
dataSource={list}
columns={[
@@ -61,10 +61,8 @@ const PagesSettingDictionaryTable: React.FC = ({ dispatch, openModel, getId }: a
},
{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record)
@@ -76,7 +74,7 @@ const PagesSettingDictionaryTable: React.FC = ({ dispatch, openModel, getId }: a
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>添加下级字典</Button>,
<Button key='2' type='link' onClick={() => {
}}>删除</Button>,
],
},

+ 0
- 0
src/components/Render/Setting/System/create/index.tsx View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save