fix(): bug修复

qzc-dev-demo
李神峰 2024-11-18 17:50:51 +08:00
parent c1883456a7
commit 590c5d4e18
15 changed files with 311 additions and 199 deletions

View File

@ -85,14 +85,14 @@ function usePageTable<T>(
setState(s => ({ ...s, loading: true }));
const pageParams = {
pageNumber: opt?.pageNumber ?? state.pageNumber,
pageSize: opt?.pageSize ?? 10,
pageSize: opt?.pageSize ?? state.pageSize,
sortField: opt?.sortField ?? state.sortField,
sortOrder: opt?.sortOrder ?? state.sortOrder,
search: opt?.search ?? state.search,
};
const { search, ...params } = pageParams;
// console.log('search',search);
// console.log('params',params);
console.log('pageParams',pageParams);
service({ ...search, ...params }).then((data) => {
if (!abort.current) {

View File

@ -288,7 +288,8 @@ const apiurl = {
delete: service_fxdd + "/assessTemplate/del",
choose: service_fxdd + "/assessIndicator/choose",
info: service_fxdd + "/assessTemplate/queryIndicators",
detail:service_fxdd + "/assessTemplate/detail"
detail: service_fxdd + "/assessTemplate/detail",
stop:service_fxdd + "/assessTemplate/startStop"
}
},
btbb: {

View File

@ -633,4 +633,73 @@ export const myFiltrate = (data,params)=>{
}else{
return Math.ceil(s)
}
}
export const convertQuarterToDate = (quarterStr) => {
if (!quarterStr) {
return null
}
// 将字符串按"-"分割成数组
const [year, quarter] = quarterStr.split("-")
// 判断季度并计算月份和日期
switch (quarter) {
case "Q1":
return {
startDate:`${year}-01-01`,
endDate:`${year}-03-31`
}
case "Q2":
return {
startDate:`${year}-04-01`,
endDate:`${year}-06-30`
}
case "Q3":
return {
startDate:`${year}-07-01`,
endDate:`${year}-09-30`
}
case "Q4":
return {
startDate:`${year}-10-01`,
endDate:`${year}-12-31`
}
default:
return null
}
}
export const getCurrentQuarter = (data) => {
const currentMonth = data ? moment(data).month() : moment().month(); // 获取当前月份注意月份是从0开始的
const currentYear = data ? moment(data).year() : moment().year(); // 获取当前年份
if (currentMonth >= 0 && currentMonth <= 2) {
return {
name: `${currentYear}年第1季度考核`,
value: 1
};
} else if (currentMonth >= 3 && currentMonth <= 5) {
return {
name: `${currentYear}年第2季度考核`,
value: 2
};
} else if (currentMonth >= 6 && currentMonth <= 8) {
return {
name: `${currentYear}年第3季度考核`,
value: 3
};
} else {
return {
name: `${currentYear}年第4季度考核`,
value: 4
};
}
};
export const getQuarterStartEndDates = (quarter, year) => {
const quarterStartMonth = (quarter - 1) * 3; // 计算季度起始月份
const quarterStartDate = moment({ year, month: quarterStartMonth }).startOf('month');
const quarterEndDate = quarterStartDate.clone().endOf('quarter');
return { startDate: quarterStartDate.format('YYYY-MM-DD'), endDate: quarterEndDate.format('YYYY-MM-DD') };
};

View File

@ -42,7 +42,7 @@ export default function Zbform({onSubmit,selectKeys}) {
align: "center",
},
]
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.rcgl.jdkh.khmbgl.choose).find_noCode);
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.rcgl.jdkh.khmbgl.choose).find_noCode,{pageSize:9999});
const [tableData, setTableData] = useState([])
const [selectedRowKeys1, setselectedRowKeys1] = useState([])
const [zbTable, setZbtable] = useState({})
@ -58,7 +58,7 @@ export default function Zbform({onSubmit,selectKeys}) {
const onfinish = (values) => {
const params = {
const params = {
search: {
menuId: values.menuId,
name: values.name
@ -68,7 +68,7 @@ export default function Zbform({onSubmit,selectKeys}) {
}
// 选择某行的回调
const rowChange1 = (selectedRowKeys, selectedRows, info) => {
const rowChange1 = (selectedRowKeys, selectedRows, info) => {
setselectedRowKeys1([...selectedRowKeys])
selectKeyRef.current = selectedRowKeys
setZbtable({keys:selectedRowKeys,data:selectedRows})

View File

@ -139,7 +139,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
setZbOpen(false)
// 重新对数据做处理
data.data.forEach(item => {
if (item.rowSpan) delete item.rowSpan;
if (item?.rowSpan) delete item.rowSpan;
})
const result = handleData(data.data, "name")
let total = data.data.reduce((total,cur) => total + Number(cur.standardScore),0)

View File

@ -31,7 +31,7 @@ const Page = () => {
checkedChildren="启用"
unCheckedChildren="禁用"
checked={v == 0 ? true : false} onChange={(e) => {
onEdit(apiurl.rcgl.jdkh.khmbgl.edit,{...r, status:e ? 0 : 1})
onEdit(apiurl.rcgl.jdkh.khmbgl.stop,{id:r.id, status:e ? 0 : 1})
}} />
},
{title: '创建日期', key: 'createTime', dataIndex: 'createTime', width: 200,align: "center"},

View File

@ -88,7 +88,8 @@ const EditableRow = ({ index, ...props }) => {
};
// 总分
const [tableData, setTableData] = useState([])
const [tableData, setTableData] = useState([])
const [needRectify, setNeedRectify] = useState([])
const score = useMemo(() => tableData?.reduce((total, cur) => total + (cur?.assessScore ?? 0), 0), [tableData]);
const columns = [
{
@ -128,7 +129,13 @@ const EditableRow = ({ index, ...props }) => {
width: 150,
align: "center",
render: (text, row) => {
const checked = compareScore(row)
const checked = compareScore(row)
if (checked) {
const id = needRectify.find(item => item?.id == row.id)
if (!id) {
setNeedRectify([...needRectify, row]);
}
}
return (
<>
<Switch
@ -355,7 +362,8 @@ const EditableRow = ({ index, ...props }) => {
}
// 确认完成
const confirm = async () => {
const confirm = async () => {
const params = {
taskId: record.id,
score,
@ -372,7 +380,7 @@ const EditableRow = ({ index, ...props }) => {
fileList:undefined,
rectifyStatus:0
}))
}
}
if(tableData.length>0){
let flag = true //fasle有位评分的
params.ratings?.map((item)=>{
@ -384,6 +392,10 @@ const EditableRow = ({ index, ...props }) => {
message.error('请输入全部考核评分')
return
}
if (zgPush.length != needRectify.length) {
message.error('请确认需要整改的指标都已完成')
return
}
}
try {
const res = await httppost2(apiurl.rcgl.jdkh.khrwgl.confirmpf, params)
@ -406,7 +418,7 @@ const EditableRow = ({ index, ...props }) => {
}
const [clickItem, setClickItem] = useState()
// 点击某一行的回调
const handleRowClick = (record) => {
const handleRowClick = (record) => {
setClickItem(record)
}
const handleRadioChange = (e) => {
@ -435,12 +447,12 @@ const EditableRow = ({ index, ...props }) => {
const [imgloading, setImgLoading] = useState(false)
const [imgfileList, setImgFileList] = useState([]) //上传文件列表
const [zgItem, setZgItem] = useState("")
const zgCallback = (e) => {
const [zgItem, setZgItem] = useState("")
const [zgPush, setZgPush] = useState([])
const zgCallback = (e) => {
setZgOpen(true)
setZgItem(e)
console.log("ee",e);
}
const imgbeforeUpload = (file) => {
@ -477,7 +489,8 @@ const EditableRow = ({ index, ...props }) => {
setImgFileList(info.fileList)
}
// 整改数据
const onfinish = (values) => {
const onfinish = (values) => {
let files = imgfileList.map(item => ({ fileId: item.response?.data?.fileId }))
values.files = files;
values.isNeedRectify = 1;
@ -489,6 +502,10 @@ const EditableRow = ({ index, ...props }) => {
return item
}
})
const id = zgPush.find(item => item?.id == zgItem.id)
if (!id) {
setZgPush([...zgPush, zgItem]);
}
setTableData(newData)
setZgOpen(false)
setZgItem("")
@ -556,7 +573,8 @@ const EditableRow = ({ index, ...props }) => {
{clickItem ? <div style={{backgroundColor:"#f2f2f2",marginTop:20,padding:10}}>
{clickItem?.indicatorRatings?.map(item => (
<div key={item.id}>
<div>{item?.ratingDesc}</div>
<div>{clickItem?.indicatorName}</div>
<div>{item?.ratingDesc}{item?.standardScore}</div>
</div>
))}
</div> : null}

View File

@ -10,13 +10,12 @@ import MbForm from "./mbForm"
import PersonForm from './transfer';
import "./index.less"
import moment from 'moment';
import {getCurrentQuarter,convertQuarterToDate,getQuarterStartEndDates} from "../../../../utils/tools"
const { RangePicker } = DatePicker
const { Dragger } = Upload;
const url = "http://223.75.53.141:9102/test.by-lyf.tmp"
const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
console.log("record",record);
const taskFreq = [
{label:"年度",value:1},
{label:"季度",value:2},
@ -263,6 +262,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
}
}
const [khTableData, setkhTableData] = useState([])
const [taskType, setTaskType] = useState(2)
const khTableDataRef = useRef(null);
khTableDataRef.current = khTableData;
const onvaluesChange = (changedValues, allValues) => {
@ -273,11 +273,28 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
return { objectUserName, ...filterData,id: item }
})
setkhTableData(khObject)
// debugger
} else {
setkhTableData([])
}
if ("taskFreq" in changedValues) {
setTaskType(changedValues["taskFreq"]);
}
if ("assessBatch" in changedValues) {
console.log(moment(changedValues["assessBatch"]).endOf('days').format("YYYY-MM-DD"));
const assessBatchData = convertQuarterToDate(changedValues["assessBatch"]);
const assessBatchValues = taskType == 2 ? assessBatchData.startDate : changedValues["assessBatch"]
const taskName = taskType == 2 ? getCurrentQuarter(assessBatchData.startDate).name :
taskType == 1 ? `${changedValues["assessBatch"]}年考核` :`${moment(changedValues["assessBatch"]).year()}${moment(changedValues["assessBatch"]).month() + 1}月考核`
const date = taskType == 2 ?
[moment(assessBatchData.startDate), moment(assessBatchData.endDate)] :
taskType == 1 ? [moment(changedValues["assessBatch"]).startOf('year'), moment(changedValues["assessBatch"]).endOf('year')] :
[moment(changedValues["assessBatch"]).startOf('month'), moment(changedValues["assessBatch"]).endOf('month')]
form.setFieldValue("assessBatch", assessBatchValues)
form.setFieldValue("taskName", taskName)
form.setFieldValue("dateRangeSo",date)
}
};
// 删除考核对象
@ -325,11 +342,7 @@ const [selectPerson, setSelectPerson] = useState([])
form.setFieldValue("assessTeams", name)
}
const person = () => {
const e = form.getFieldValue("assessTeams")
setSelectPerson(selectPerson)
setTransferOpen(true)
}
// 考核模版显示
const [mbOpen, setMbOpen] = useState(false)
const [mbItem, setMbItem] = useState({})
@ -351,14 +364,14 @@ const [selectPerson, setSelectPerson] = useState([])
const name = localStorage.getItem('userName')
form.setFieldValue("createUserName", name)
form.setFieldValue("createTime", moment())
form.setFieldValue("taskFreq", 2)
} else {
form.setFieldValue("assessObjects", record.assessObjects.map(item => item.objectUserId - 0))
form.setFieldValue("dateRangeSo", [moment(record.startDate), moment(record.endDate)])
console.log("record",record);
getKhMember(record.id)
getTemplateList(record.taskFreq)
setTaskType(record.taskFreq)
}
}, [mode,record])
@ -366,7 +379,28 @@ const [selectPerson, setSelectPerson] = useState([])
useEffect(() => {
getDeptList()
}, [])
}, [])
useEffect(() => {
if (mode == "save") {
if (taskType == 2) {
getTemplateList(taskType)
const { startDate, endDate } = getQuarterStartEndDates(getCurrentQuarter('').value, moment().year());
form.setFieldValue("assessBatch", moment())
form.setFieldValue("taskName", getCurrentQuarter('').name)
form.setFieldValue("dateRangeSo",[moment(startDate), moment(endDate)])
} else if (taskType == 1) {
form.setFieldValue("assessBatch", moment())
form.setFieldValue("taskName", `${moment().year()}年考核`)
form.setFieldValue("dateRangeSo",[moment().startOf('year'), moment().endOf('year')])
} else {
form.setFieldValue("assessBatch", moment().format('YYYY-MM-DD'))
form.setFieldValue("taskName", `${moment().year()}${moment().month() + 1}月考核`)
form.setFieldValue("dateRangeSo",[moment().startOf('month'), moment().endOf('month')])
}
}
}, [taskType,mode])
return (
<>
@ -428,7 +462,13 @@ const [selectPerson, setSelectPerson] = useState([])
},
]}
>
<DatePicker disabled={mode==='view'} format={'YYYY-MM-DD'} style={{width:'100%'}} allowClear />
<DatePicker
disabled={mode === 'view'}
// format={'YYYY-MM-DD'}
style={{ width: '100%' }}
allowClear
picker={taskType == 2 ? "quarter" : taskType == 1 ? "year" : "month"}
/>
</Form.Item>
</Col>
<Col span={12}>

View File

@ -19,6 +19,7 @@ const Page = () => {
1: "优秀",
2: "良好",
3: "合格",
4:"不合格"
}
const khStatus = {
0: "未启动",
@ -108,6 +109,7 @@ const Page = () => {
render: (value) => <div>{taskStatus[value] || ''}</div>
},
{title: '创建人', key: 'createUserName', dataIndex: 'createUserName', width: 100},
{title: '创建时间', key: 'createTime', dataIndex: 'createTime', width: 150},
{
title: '操作', key: 'operation', width: 300,align: 'center',
render: (v,r) => (
@ -117,7 +119,10 @@ const Page = () => {
<>
{r.status == 0 ? <a onClick={() =>command("edit")(r)}>编辑</a> : null}
<a onClick={() => command("view")(r)}>查看</a>
{r.status == 0 ? <a style={{ color: "red" }} onClick={() => command("del")(r)}>删除</a> : null}
{/* {r.status == 0 ? <a onClick={() => command("del")(r)}>删除</a> : null} */}
{r.status == 0 ? <Popconfirm title="确认删除评分?" onConfirm={()=> command("del")(r)}>
<Button type="link" size="small" style={{ color: "red" }}>删除</Button>
</Popconfirm> : null}
{r.status == 0 ? <Popconfirm title="确认启动评分?" onConfirm={()=>startPf(r)}>
<Button type="link" size="small" title="启动">启动</Button>
</Popconfirm> : null}

View File

@ -251,7 +251,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
label="指标编号"
name="indicatorCode"
>
<Input disabled={mode !='save'} style={{width:'100%'}} allowClear />
<Input disabled={mode =='view'} style={{width:'100%'}} allowClear />
</Form.Item>
</Col>
</Row>

View File

@ -32,8 +32,14 @@ const Page = () => {
render: (v, r) => <Switch
checkedChildren="启用"
unCheckedChildren="禁用"
checked={v == 0 ? true : false} onChange={(e) => {
onEdit(apiurl.rcgl.jdkh.khzbgl.edit,{...r, status:e ? 0 : 1})
checked={v == 0 ? true : false}
onChange={(e) => {
if (r?.isUsed) {
message.error("已使用指标无法修改启用状态");
return;
} else {
onEdit(apiurl.rcgl.jdkh.khzbgl.edit,{...r, status:e ? 0 : 1})
}
}} />
},
{

View File

@ -22,7 +22,7 @@ const ToolBar = ({ setSearchVal }) => {
useEffect(() => {
const value = {year:moment()}
form.setFieldsValue(value)
setSearchVal({...value,year:moment().format("YYYY")})
setSearchVal({year:moment().format("YYYY")})
}, [])
return (

View File

@ -210,11 +210,17 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
setFileList1(filterFile)
}
const [jh, setJh] = useState([])
const [jhData, setJhData] = useState([])
const getJhList = async () => {
try {
const res = await httppost2(apiurl.pxjl.list)
if (res.code == 200) {
setJh(res.data.map(item => ({label:item.name,value:item.id})))
setJhData(res.data)
setJh(res.data.map(item => ({ label: item.name, value: item.id })))
if (mode != 'save') {
const formName = res.data.find(item => item.id == record.planId)
form.setFieldsValue(formName)
}
}
} catch (error) {
console.log(error);
@ -222,26 +228,18 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
}
}
const imgbeforeUpload = (file) => {
const isJpgOrPng =
file.type === 'image/jpeg' ||
file.type === 'image/jpg' ||
file.type === 'image/png';
if (!isJpgOrPng) {
message.error('请上传图片格式的文件!');
const handleFieldChange = (changedValues, allValues) => {
// 检查变化的字段是否是您感兴趣的字段
if ('planId' in changedValues) {
const formName = jhData.find(item => item.id == changedValues['planId'])
form.setFieldsValue(formName)
}
const isLt2M = file.size / 1024 / 1024 < 5;
if (!isLt2M) {
message.error('图片大小需小于5M!');
}
return isJpgOrPng && isLt2M ? true : Upload.LIST_IGNORE;
};
useEffect(()=>{
if (mode !== "save") {
getFileInfo(record)
const momentArr = (record?.stm && record.etm) ? [dayjs("2024-05-06" + record.stm), dayjs("2024-05-06" +record.etm)] : ''
form.setFieldValue("tm",momentArr)
form.setFieldValue("tm", momentArr)
}
}, [record,mode])
@ -255,6 +253,8 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
return (
<div style={{height:"65vh",overflowY:"auto"}}>
<div className='basic-info'>基本信息</div>
@ -264,6 +264,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
{...formItemLayout}
initialValues={record}
onFinish={onfinish}
onValuesChange={handleFieldChange}
>
<Row>
<Col span={12}>
@ -279,7 +280,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
label="培训分类"
name="type"
>
<NormalSelect disabled={mode === 'view'} style={{ width: '100%' }} allowClear options={types} />
<NormalSelect disabled={true} style={{ width: '100%' }} allowClear options={types} />
</Form.Item>
</Col>
</Row>
@ -373,7 +374,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
wrapperCol={{ span: 19 }}
rules={[{ required: true }]}
>
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
<Input disabled={true} style={{width:'100%'}} allowClear />
</Form.Item>
</Col>
</Row>

View File

@ -41,7 +41,7 @@ const Page = () => {
const delBtn = role?.rule?.find(item => item.menuName == "删除") || true;
const refModal = useRef();
const [searchVal, setSearchVal] = useState(false)
const [searchChartVal, setSearchChartVal] = useState(false)
const [searchChartVal, setSearchChartVal] = useState()
const columns = [
{ title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align:"center" },
{ title: '培训日期', key: 'planDate', dataIndex: 'planDate', width: 200, ellipsis: true },
@ -97,23 +97,24 @@ const Page = () => {
}
// 获取统计数据
const [staData, setStaData] = useState()
const [staData, setStaData] = useState({})
const pxOptions = useMemo(() => {
if (staData) {
return options(staData,searchChartVal.teamName)
return options(staData)
} else {
return options({},searchChartVal.teamName)
return options({})
}
}, [staData])
const getStaData = async (params) => {
try {
const res = await httpget2(apiurl.pxjl.sta + `/${params.year}`)
if (res.code == 200) {
if (params.teamName == 1) {
setStaData({...res.data,list:res.data.list1})
} else {
setStaData({...res.data,list:res.data.list2})
}
setStaData({...res.data})
// if (params.teamName == 1) {
// setStaData({...res.data,list:res.data.list1})
// } else {
// setStaData({...res.data,list:res.data.list2})
// }
}else{
message.error(res.description)
setStaData([])

View File

@ -1,137 +1,108 @@
export default function options(data={},teamName) {
const xAxisData = data?.list?.map(item => item.month + "月")
const maxCount = data?.list ? Math.ceil(Math.max(...data?.list?.map(obj => [obj.num1,obj.num2]).flat())) : 0
const minCount = data?.list ? Math.floor(Math.min(...data?.list?.map(obj => [obj.num1, obj.num2]).flat())) : 100
export default function options(data = {}) {
const xAxisData = data ?.list1 ?.map(item => item.month + "月")
const maxCount = data ?.list1 ? Math.ceil(Math.max(...data ?.list1 ?.map(obj => [obj.num1, obj.num2]).flat())) : 0
const minCount = data ?.list1 ? Math.floor(Math.min(...data ?.list1 ?.map(obj => [obj.num1, obj.num2]).flat())) : 100
return {
animation: true,
tooltip: {
trigger: 'axis',
},
grid: {
top: '15%',
bottom: '15%',
right: '8%',
left: '7%',
},
legend: {
show: true,
left: "10%",
top: "-1%",
itemWidth: 11,
itemHeight: 10,
},
xAxis: {
data: xAxisData,
},
yAxis: [{
type: 'value',
position: "left",
offset: 10,
min: minCount,
max: maxCount,
// splitLine:false,
axisTick: {
show: false
},
axisLine: {
show: false,
const maxRate = data?.list ? Math.ceil(Math.max(...data?.list?.map(obj => obj.rate * 100))) : 0
const minRate = data?.list ? Math.floor(Math.min(...data?.list?.map(obj => obj.rate * 100))) : 100
return {
animation: true,
tooltip: {
trigger: 'axis',
formatter: function (params) {
var tooltipText = params[0].name + '<br/>';
params.forEach(function (item) {
if (item.seriesName === '完成率') {
tooltipText += item.marker + ' ' + item.seriesName + ': ' + item.value + '%<br/>';
} else {
tooltipText += item.marker + ' ' + item.seriesName + ': ' + item.value + '<br/>';
}
});
return tooltipText;
}
},
grid: {
top: '15%',
bottom: '15%',
right: '8%',
left: '7%',
},
legend: {
show: true,
left: "10%",
top: "-1%",
itemWidth: 11,
itemHeight: 10,
},
xAxis: {
data:xAxisData,
// axisLine: {
// show: false // 隐藏X轴轴线
// },
// axisTick: {
// show: false // 隐藏X轴轴线
// },
},
axisLabel: {
show: true,
margin: 0,
fontSize: 18,
}
},
{
type: 'value',
position: "right",
offset: 10,
min: minCount,
max: maxCount,
// splitLine:false,
axisTick: {
show: false
},
axisLine: {
show: false,
// axisLabel: {
// show: true,
// margin: 14,
// // formatter: '{value}月'
},
axisLabel: {
show: true,
margin: 0,
fontSize: 18,
}
},
],
series: [{
name: "实际人次",
type: 'bar',
barWidth: 25,
data: data?.list1?.map(item => item.num1),
itemStyle: {
color: "#6295fa"
}
},
{
name: '实际期数',
yAxisIndex: 1,
type: 'bar',
barWidth: 25,
data: data ?.list1 ?.map(item => item.num2),
itemStyle: {
color: "#62daab"
}
},
// {
// name: '完成率',
// type: 'line',
// yAxisIndex: 1,
// showSymbol:false,
// smooth: false, // 平滑曲线显示
// lineStyle: {
// width: 2,
// color: '#5d7092'
// },
// itemStyle: {
// color: '#5d7092',
// shadowColor: '#5d7092',
// shadowBlur: 10,
// borderColor: '#5d7092',
// borderWidth: 2
// },
// data: data?.list?.map(item => item.rate * 100),
// }
},
yAxis: [
{
type: 'value',
offset: 10,
min: minCount,
max: maxCount,
// splitLine:false,
axisTick: {
show: false
},
axisLine: {
show: false,
},
axisLabel: {
show: true,
margin: 0,
fontSize: 18,
}
},
{
type: 'value',
name: '(%)',
splitLine:false,
min: minRate,
max: maxRate,
offset: 10,
nameTextStyle: {
color: 'rgba(255,255,255,0.5)',
fontSize: '12px'
},
axisTick: {
show: false
},
axisLine: {
show: false,
},
axisLabel: {
show: true,
fontSize: 18,
formatter: '{value}%'
}
}
],
series: [
{
name: teamName===1?'计划人次':'计划期数',
type: 'bar',
barWidth: 25,
data: data?.list?.map(item =>item.num2),
itemStyle:{
color:"#6295fa"
}
},
{
name: teamName===1?'实际人次':'实际期数',
type: 'bar',
barWidth: 25,
data: data?.list?.map(item =>item.num1),
itemStyle:{
color:"#62daab"
}
},
{
name: '完成率',
type: 'line',
yAxisIndex: 1,
showSymbol:false,
smooth: false, // 平滑曲线显示
lineStyle: {
width: 2,
color: '#5d7092'
},
itemStyle: {
color: '#5d7092',
shadowColor: '#5d7092',
shadowBlur: 10,
borderColor: '#5d7092',
borderWidth: 2
},
data: data?.list?.map(item => item.rate * 100),
}
]
}
]
}
}