This commit is contained in:
xuyucheng 2022-05-16 16:41:33 +08:00
parent 71e2dc4402
commit 396a39de99
11 changed files with 163 additions and 75 deletions

28
readme.md Normal file
View File

@ -0,0 +1,28 @@
下载安装依赖:
npm install
启动项目:
npm start
文件结构:
config - Webpack配置
node_modules - 依赖
public - 静态公共文件
src - 逻辑代码
assets - 静态资源
style - css
general.css - 全局css样式
editReport.css - Manager > 服务 > 编辑报告 css样式
SourceHanSansK-Normal.ttf - 字体
svg - 静态图片
components - 公共组件
api - 封装axios请求
page - 页面

View File

@ -1,6 +0,0 @@
@mixin flex($wrap) {
display: flex;
justify-content: center;
align-items: center;
flex-wrap: $wrap;
}

View File

@ -0,0 +1,2 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1652324668353" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4330" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
</style></defs><path d="M719.8 480H304.2c-49.5 0-80.3-53.9-55.1-96.5l207.8-352C469.3 10.5 490.7 0 512 0s42.7 10.5 55.1 31.5l207.8 351.9c25.2 42.7-5.5 96.6-55.1 96.6z" p-id="4331" fill="#bfbfbf"></path></svg>

After

Width:  |  Height:  |  Size: 875 B

View File

@ -0,0 +1,2 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1652324652314" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3952" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
</style></defs><path d="M774.9 640.5l-207.8 352c-12.4 21-33.8 31.5-55.1 31.5s-42.7-10.5-55.1-31.5l-207.8-352c-25.2-42.7 5.6-96.5 55.1-96.5h415.6c49.6 0 80.3 53.9 55.1 96.5z" p-id="3953" fill="#bfbfbf"></path></svg>

After

Width:  |  Height:  |  Size: 882 B

View File

@ -2,8 +2,5 @@ import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
import './assets/style/general.css'
import api from './api/request'
React.$axios = api
ReactDOM.render(<App />, document.getElementById('root'))

View File

@ -1,24 +1,19 @@
import React, { Component } from 'react'
import { Input, Select, Row, Form, Button } from 'antd'
import FeTable from '@/components/table'
import { Input, Select, Row, Form, Button, Card, Col, Pagination, Descriptions, Image } from 'antd'
import api from "@/api/request"
import { connect } from 'react-redux';
import store from "@/store/index"
import { operationAction } from "@/action/index"
import sortUp from "@/assets/svg/排序,升序.svg"
import sortDown from "@/assets/svg/排序,降序.svg"
const { Option } = Select
var status = {
name: '',
sort: ''
}
class ManageCompany extends Component {
constructor(props) {
super(props)
this.state = {
data: [],
columns: [],
total: 0,
form: {
search: {},
@ -50,28 +45,15 @@ class ManageCompany extends Component {
onSubmit = () => {
api.post("/admin/company/search", this.state.form).then(res => {
if (res.result.records.length !== 0) {
const col = Object.keys(res.result.records[0]).map((key, i) => {
return {
title: key, dataIndex: key, align: 'center', key: i, sorter: (a, b, c) => { this.sort(c, key) },
}
})
col.push({
title: '详 情',
dataIndex: '详 情',
key: col.length,
align: 'center',
render: () => <span style={{ color: '#108ee9', cursor: 'pointer' }}> </span>
})
this.setState({
data: res.result.records,
total: res.result.total,
columns: col
})
} else {
this.setState({
data: [],
total: 0,
columns: []
})
}
}).catch(err => {
@ -79,26 +61,7 @@ class ManageCompany extends Component {
})
}
sort = (c, item) => {
if (status.name === item && status.sort === c) {
return false
} else {
status = {
name: item,
sort: c
}
this.setState({
form: Object.assign(this.state.form, {
sort: { [item]: c === 'ascend' ? 'asc' : 'desc' }
})
}, () => {
this.onSubmit()
})
}
}
callback(e, value) {
if (e === '详 情') {
callback(value) {
const newPanes = [...this.props.panes]
const state = newPanes.every(item => {
return item.title === value["企业名称"] ? false : true
@ -111,6 +74,24 @@ class ManageCompany extends Component {
}
}
setSortUp(name,value){
this.setState({
form: Object.assign(this.state.form, {
sort: { [name]:value }
})
}, () => {
this.onSubmit()
})
}
setSortDown(name,value){
this.setState({
form: Object.assign(this.state.form, {
sort: { [name]:value }
})
}, () => {
this.onSubmit()
})
}
pageChange = (current, pageSize) => {
@ -142,15 +123,27 @@ class ManageCompany extends Component {
<Row justify='space-between'>
<Form layout="inline" onFinish={this.submit} style={{ marginBottom: 20 }}>
<Form.Item name="企业ID" label="企业ID">
<Input allowClear />
<Input allowClear style={{ width: 150 }} />
<span style={{marginLeft:10}}>
<Image src={sortUp} width={15} preview={false} onClick={this.setSortUp.bind(this,"企业ID","asc")}></Image>
<Image src={sortDown} width={15} preview={false} onClick={this.setSortDown.bind(this,"企业ID","desc")} style={{ position: "relative", left: -15, top: 5 }}></Image>
</span>
</Form.Item>
<Form.Item name="企业名称" label="企业名称">
<Input allowClear />
<Input allowClear style={{ width: 150 }} />
<span style={{marginLeft:10}}>
<Image src={sortUp} width={15} preview={false} onClick={this.setSortUp.bind(this,"企业名称","asc")}></Image>
<Image src={sortDown} width={15} preview={false} onClick={this.setSortDown.bind(this,"企业名称","desc")} style={{ position: "relative", left: -15, top: 5 }}></Image>
</span>
</Form.Item>
<Form.Item name="一级行业" label="一级行业">
<Input allowClear />
<Input allowClear style={{ width: 150 }} />
<span style={{marginLeft:10}}>
<Image src={sortUp} width={15} preview={false} onClick={this.setSortUp.bind(this,"一级行业","asc")}></Image>
<Image src={sortDown} width={15} preview={false} onClick={this.setSortDown.bind(this,"一级行业","desc")} style={{ position: "relative", left: -15, top: 5 }}></Image>
</span>
</Form.Item>
<Form.Item name="综信评价" label="综信评价">
<Form.Item name="信用等级" label="信用等级">
<Select style={{ width: 150 }} mode="multiple" allowClear>
<Option value="AAA">AAA</Option>
<Option value="AA+">AA+</Option>
@ -175,22 +168,44 @@ class ManageCompany extends Component {
<Option value="C">C</Option>
<Option value="C-">C-</Option>
</Select>
<span style={{marginLeft:10}}>
<Image src={sortUp} width={15} preview={false} onClick={this.setSortUp.bind(this,"信用等级","asc")}></Image>
<Image src={sortDown} width={15} preview={false} onClick={this.setSortDown.bind(this,"信用等级","desc")} style={{ position: "relative", left: -15, top: 5 }}></Image>
</span>
</Form.Item>
<Form.Item name="ESG评价" label="ESG评价" >
<Select style={{ minWidth: 150 }} mode="multiple" allowClear>
<Form.Item name="ESG等级" label="ESG等级" >
<Select style={{ width: 150 }} mode="multiple" allowClear>
<Option value="A">A</Option>
<Option value="B">B</Option>
<Option value="C">C</Option>
<Option value="D">D</Option>
<Option value="E">E</Option>
</Select>
<span style={{marginLeft:10}}>
<Image src={sortUp} width={15} preview={false} onClick={this.setSortUp.bind(this,"ESG等级","asc")}></Image>
<Image src={sortDown} width={15} preview={false} onClick={this.setSortDown.bind(this,"ESG等级","desc")} style={{ position: "relative", left: -15, top: 5 }}></Image>
</span>
</Form.Item>
<Button type="primary" htmlType="submit">
检索
</Button>
</Form>
</Row>
<FeTable data={this.state.data} columns={this.state.columns} current={this.state.form.page_no} callback={this.callback.bind(this)} total={this.state.total} pageChange={this.pageChange.bind(this)} onShowSizeChange={this.onShowSizeChange.bind(this)} />
<Row gutter={16}>
{this.state.data.map(item => {
return <Col span={24}>
<Card onClick={this.callback.bind(this, item)}>
<Descriptions title={item["企业名称"]} style={{ margin: 0 }}>
<Descriptions.Item label="一级行业">{item["一级行业"]}</Descriptions.Item>
<Descriptions.Item label="企业ID">{item["企业ID"]}</Descriptions.Item>
<Descriptions.Item label="信用等级">{item["信用等级"] ? item["信用等级"] : "-"}</Descriptions.Item>
<Descriptions.Item label="ESG等级">{item["ESG等级"] ? item["ESG等级"] : "-"}</Descriptions.Item>
</Descriptions>
</Card>
</Col>
})}
</Row>
<Pagination style={{ float: 'right' }} current={this.state.form.page_no} total={this.state.total} onChange={this.pageChange.bind(this)} onShowSizeChange={this.onShowSizeChange.bind(this)} showSizeChanger pageSizeOptions={[5, 10]} />
</React.Fragment>
)
}

View File

@ -18,7 +18,7 @@ function RateProcess1(props) {
.then(res => {
let count = 1
const nodes = []
const edges = [
const edges_1 = [
{
"id": "e1-2",
"source": "1",
@ -92,6 +92,50 @@ function RateProcess1(props) {
"animated": true
}
]
const edges_2 = [
{
"id": "e1-2",
"source": "1",
"target": "2",
"animated": true
},
{
"id": "e1-3",
"source": "1",
"target": "3",
"animated": true
},
{
"id": "e2-4",
"source": "2",
"target": "4",
"animated": true
},
{
"id": "e3-4",
"source": "3",
"target": "4",
"animated": true
},
{
"id": "e4-5",
"source": "4",
"target": "5",
"animated": true
},
{
"id": "e5-6",
"source": "5",
"target": "6",
"animated": true
},
{
"id": "e6-7",
"source": "6",
"target": "7",
"animated": true
},
]
res.info.forEach((item, index) => {
Object.keys(item).forEach((key, i) => {
nodes.push({
@ -115,7 +159,11 @@ function RateProcess1(props) {
})
})
setNodes(nodes)
setEdges(edges)
if (props.value.type === "ESG评价流程") {
setEdges(edges_2)
} else {
setEdges(edges_1)
}
})
}, [props.value])

View File

@ -25,7 +25,6 @@ class ManageRate extends Component {
this.onSearch("")
}
onSearch = (value) => {
api.post("/admin/rating/search", { query: value, skip: 0, limit: 10 }).then(res => {
const col = Object.keys(res.result[0]).map((key, i) => {

View File

@ -13,11 +13,11 @@ class TestCompany extends Component {
super(props)
this.state = {
data: [
{ title: "企业认证", desc: "根据企业名称、统一社会信用代码、法人姓名进行企业认证", obj: { company: "", code: "", legal_person: "", cid: "" }, label: ["企业名称", "统一社会信用代码", "法人姓名", "企业ID"], url: "/admin/test/enterprise_certification", method: 'post' },
{ title: "级联删除企业ID", desc: "根据cid删除与其有关的所有记录", obj: { cid: "", data: [] }, label: ["企业ID", "企业数据"], url: "/admin/test/delete_cid_cascade", method: 'post' },
{ title: "级联删除评价ID", desc: "根据rid删除与其有关的所有记录", obj: { rid: "", record: "", data: [] }, label: ["评价ID", "评价类型", "评价记录"], url: "/admin/test/delete_rid_cascade", method: 'post' },
{ title: "企业认证状态修改", desc: "修改企业认证状态,只能修改为未认证,如需认证则通过认证接口", obj: { cid: "" }, label: ["企业ID"], url: "/admin/test/change_verified", method: 'get' },
{ title: "级联生成企业主页", desc: "根据rid生成企业主页信息", obj: { rid: "", types: "" }, label: ["评价ID", "评价类型"], url: "/admin/test/generate_rid_information", method: 'post' },
// { title: "企业认证", desc: "根据企业名称、统一社会信用代码、法人姓名进行企业认证", obj: { company: "", code: "", legal_person: "", cid: "" }, label: ["企业名称", "统一社会信用代码", "法人姓名", "企业ID"], url: "/admin/test/enterprise_certification", method: 'post' },
// { title: "级联删除企业ID", desc: "根据cid删除与其有关的所有记录", obj: { cid: "", data: [] }, label: ["企业ID", "企业数据"], url: "/admin/test/delete_cid_cascade", method: 'post' },
// { title: "级联删除评价ID", desc: "根据rid删除与其有关的所有记录", obj: { rid: "", record: "", data: [] }, label: ["评价ID", "评价类型", "评价记录"], url: "/admin/test/delete_rid_cascade", method: 'post' },
// { title: "企业认证状态修改", desc: "修改企业认证状态,只能修改为未认证,如需认证则通过认证接口", obj: { cid: "" }, label: ["企业ID"], url: "/admin/test/change_verified", method: 'get' },
// { title: "级联生成企业主页", desc: "根据rid生成企业主页信息", obj: { rid: "", types: "" }, label: ["评价ID", "评价类型"], url: "/admin/test/generate_rid_information", method: 'post' },
{ title: "新增测试企业", desc: "新增一家测试测试", obj: { email: "", company: "", code: "", legal_person: "" }, label: ["邮箱", "企业", "统一社会信用代码", "法人"], url: "/admin/test/new_company", method: 'post' },
],
setIsModalVisible: false,

View File

@ -1,5 +1,5 @@
import JSEncrypt from "jsencrypt";
// RSA加密
export function rsaKey(args) {
var encryptor = new JSEncrypt()
var pubKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxBnMmUNpreT9AJVkcAjfTLXb+2C2O8VYaFeOUPkMT+OzZfmS6DSg5WCH/MdZHbYh/rrOTUK2JfxLq9qzqjV4w7i/DNDnplnsRekrdi2qO5rTuutTLAE29b0hx83/xNbTn8yrMoTCLCjLOvcnuFQkcfCLNnCU7lhFWWhHheDd1NEznzuItfrqI10kzb+aIWUzBgVl6zxxlC9OH690LZd16q/cI+oBW286Xyl8MmKnjND4P9Y1cm2IRHikz6RLPgilL1iy/QXb4eQX+2oCcL8lvrQOCCMfKHpJdC7fwxbHxTiUlqeMVY4bXLwkUUl1wH2+DUkob/X9CAFPDow536iUywIDAQAB"

View File

@ -1,4 +1,7 @@
// 用于生成表格数据的column列数组对象
export function getColumn(params, slot) {
// 参数一表格数据是否数组且长度不为0
// 参数二类插槽填入DOM结构
return Array.isArray(params) && params.length !== 0 ? Object.keys(params[0]).map((key, index) => {
return {
title: key,