diff --git a/src/pages/examine/index/service.ts b/src/pages/examine/index/service.ts index fa18a92..e3dac4c 100644 --- a/src/pages/examine/index/service.ts +++ b/src/pages/examine/index/service.ts @@ -7,7 +7,7 @@ import request from "@/utils/requestJava" export async function handleGetExamineTypeList(params?: any) { const data = await request.get('/question-categories/getList', { params }) if (data.Result_Code === 100) { - return data.Result_Data.list + return data.Result_Data.List } return [] } @@ -16,7 +16,7 @@ export async function handleGetExamineTypeList(params?: any) { export async function handleGetExamineTypeTreeList(params?: any) { const data = await request.get('/question-categories/tree', params) if (data.Result_Code === 100) { - return data.Result_Data.list + return data.Result_Data.List } return [] } diff --git a/src/pages/examine/modal/index.tsx b/src/pages/examine/modal/index.tsx index deed22d..27ec442 100644 --- a/src/pages/examine/modal/index.tsx +++ b/src/pages/examine/modal/index.tsx @@ -1,17 +1,18 @@ import LeftSelectTree from "@/components/leftSelectTree/leftSelectTree"; import { handleGetServerpartDDL } from "@/components/leftSelectTree/service"; -import { ActionType, FormInstance, ProCard, ProForm, ProFormList, ProFormSelect, ProFormSwitch, ProFormText, ProFormTextArea, ProTable } from "@ant-design/pro-components"; +import { ActionType, FormInstance, ProCard, ProForm, ProFormDigit, ProFormList, ProFormSelect, ProFormSwitch, ProFormText, ProFormTextArea, ProTable } from "@ant-design/pro-components"; import { Button, Col, message, Modal, Popconfirm, Row, Space, Image, Drawer } from "antd"; import moment from "moment"; import { useEffect, useRef, useState } from "react"; import { connect } from "umi"; -import { handleAddTemplates, handleDeleteTemplates, handleGetQuestionList, handleGetTemplatesList, handleSearchModalTree, handleUpdateTemplates, handleUploadFile } from "./service"; +import { handleAddTemplates, handleBatchService, handleDeleteTemplates, handleGetQuestionList, handleGetTemplatesList, handleSearchModalTree, handleUpdateTemplates, handleUploadFile } from "./service"; import { handleGetExamineTypeTreeList } from "../index/service"; import QRCode from 'qrcode'; import { base64ToFile } from "@/utils/publicMethods"; import RecordDetail from "../record/components/recordDetail"; import AddBigType from "../index/components/addBigType"; import AddQuestion from "../question/components/addQuestion"; +import { ArrowDownOutlined, ArrowUpOutlined } from "@ant-design/icons"; const examineModal: React.FC<{ currentUser: any }> = (props) => { @@ -24,10 +25,11 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => { const modalFormRef = useRef(); const cloneFormRef = useRef(); + const batchCloneForm = useRef(); // 弹出框的表单实例 - const modalRef = useRef() + const modalRef = useRef() // 树相关的属性和方法 const [selectedId, setSelectedId] = useState() const [collapsible, setCollapsible] = useState(false) @@ -75,9 +77,10 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => { const [selectedCloneDetail, setSelectedCloneDetail] = useState() // 默认展开行的id const [defaultExpandRow, setDefaultExpandRow] = useState() - - - + // 点位克隆的悬浮框 + const [showBatchCloneModal, setshowBatchCloneModal] = useState(false) + // 批量克隆的loading效果 + const [batchLoading, setBatchLoading] = useState(false) const columns: any = [ // { @@ -209,11 +212,11 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => { align: 'center', hideInSearch: true, fixed: "right", - width: 120, + width: 150, render: (_: any, record: any) => { return record?.type === 'district' || record?.type === 'servicePart' ? '' : { - console.log('record', record); + console.log('currentRow', record); setCurrentRow(record) setShowPlaceModal(true) }}>编辑 @@ -229,6 +232,13 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => { > 删除 + { + console.log('currentRow', record); + setCurrentRow(record) + setshowBatchCloneModal(true) + }}> + 点位克隆 + } @@ -430,32 +440,43 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => { }) } else { // 判断是否有改动 一样 说明没改动 那么把老的拿进去就行 - if (currentRow?.questionnaireTemplateQuestions.length === res.questions.length) { - if (currentRow?.questionnaireTemplateQuestions && currentRow?.questionnaireTemplateQuestions.length > 0) { - currentRow?.questionnaireTemplateQuestions.forEach((item) => { - questions.push({ - questionId: item.question.id, - isRequired: item.question.required, - sortOrder: item.question.sortOrder - }) + // if (currentRow?.questionnaireTemplateQuestions.length === res.questions.length) { + // if (currentRow?.questionnaireTemplateQuestions && currentRow?.questionnaireTemplateQuestions.length > 0) { + // currentRow?.questionnaireTemplateQuestions.forEach((item) => { + // questions.push({ + // questionId: item.question.id, + // isRequired: item.question.required, + // sortOrder: item.question.sortOrder + // }) + // }) + // } + // } else { + // // 不一样 说明有删除 不然走的是第一个 + // if (res.questions && res.questions.length > 0) { + // res.questions.forEach((item) => { + // questions.push({ + // questionId: item.id, + // isRequired: item.required, + // sortOrder: item.sortOrder + // }) + // }) + // } + // } + if (res.questions && res.questions.length > 0) { + res.questions.forEach((item: any) => { + questions.push({ + questionId: item.questionId, + isRequired: item.isRequired, + sortOrder: item.sortOrder }) - } - } else { - // 不一样 说明有删除 不然走的是第一个 - if (res.questions && res.questions.length > 0) { - res.questions.forEach((item) => { - questions.push({ - questionId: item.id, - isRequired: item.required, - sortOrder: item.sortOrder - }) - }) - } + }) } } req = { ...currentRow, + deadlineType: res.deadlineType, + deadlineFrequency: res.deadlineFrequency, title: res.title, serverPartName: serviceObj ? serviceObj[res.serverPartId] : "", serverPartId: res.serverPartId, @@ -464,21 +485,24 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => { status: res.status, description: res.description } + console.log('req', req); data = await handleUpdateTemplates(req) } else { let questions: any = [] if (selectedQuestionDetail && selectedQuestionDetail.length > 0) { - selectedQuestionDetail.forEach((item) => { + selectedQuestionDetail.forEach((item: any, index: number) => { questions.push({ - questionId: item.questionId, + questionId: item.id, isRequired: item.required, - sortOrder: item.sortOrder + sortOrder: index + 1 }) }) } req = { title: res.title, + deadlineType: res.deadlineType, + deadlineFrequency: res.deadlineFrequency, placeName: "", placeId: 0, serverPartName: serviceObj ? serviceObj[res.serverPartId] : "", @@ -489,8 +513,10 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => { status: res.status, description: res.description } + console.log('reqreqreqreqreq', req); data = await handleAddTemplates(req) console.log('datadsadsa1', data); + const myQRCodeDataUrl = await QRCode.toDataURL(`pages/walkAroundManager/index?id=${data.Result_Data.id}`); const file = base64ToFile(myQRCodeDataUrl, `wenjuan${data.Result_Data.id}.png`); console.log('file', file); @@ -528,37 +554,58 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => { setQrCodeUrl(undefined) }} > - { + { console.log('currentRow', currentRow); let questionsList: any = [] let keyList: any = [] if (currentRow?.questionnaireTemplateQuestions && currentRow?.questionnaireTemplateQuestions.length > 0) { - console.log('1'); - - currentRow?.questionnaireTemplateQuestions.forEach((item) => { - console.log('2'); + currentRow?.questionnaireTemplateQuestions.forEach((item: any) => { if (item.question) { let obj = JSON.parse(JSON.stringify(item.question)) - let str: string = '' - if (obj.options && obj?.options.length > 0) { - obj.options.forEach((subItem: any, index: number) => { - str += `${index > 0 ? ',' : ''}选项${index + 1}:${subItem.text}` + // let str: string = '' + // if (obj.options && obj?.options.length > 0) { + // obj.options.forEach((subItem: any, index: number) => { + // str += `${index > 0 ? ',' : ''}选项${index + 1}:${subItem.text}` + // }) + // } + + // obj.text = obj.title + // obj.mark = JSON.stringify(obj.options) + // obj.showText = str + keyList.push(obj.id) + // questionsList.push(obj) + + + let markStr: string = JSON.stringify(item.question.options) + let showText: string = '' + if (item.question.options && item.question.options.length > 0) { + item.question.options.forEach((subItem: any, subIndex: number) => { + if (showText) { + showText += `,选项${subIndex + 1}:${subItem.text}` + } else { + showText = `选项${subIndex + 1}:${subItem.text}` + } }) } - obj.text = obj.title - obj.mark = JSON.stringify(obj.options) - obj.showText = str - keyList.push(obj.id) - questionsList.push(obj) + questionsList.push({ + questionId: item.questionId, + isRequired: item.isRequired, + sortOrder: item.sortOrder, + text: item.question.title, + mark: markStr, + showText: showText + }) } + + }) } - // setSelectedQuestionDetail setSelectedQuestionId(keyList) + console.log('questionsList', questionsList); return { ...currentRow, serverPartId: currentRow.serverPartId.toString(), @@ -618,6 +665,26 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => { handleShowCloneModal(true) }}>克隆点位 + + + + + + + + + = (props) => { creatorButtonProps={{ position: 'bottom', creatorButtonText: '添加选项', - style: { display: 'none' }, - onClick: (e) => { - console.log('e', e); - } + style: { display: 'none' } }} copyIconProps={false} style={{ width: '100%' }} itemContainerStyle={{ width: '100%' }} - itemRender={({ listDom, action }, { record, index }) => ( -
-
{listDom}
-
{action}
-
- )} + itemRender={({ listDom, action }, { record, index, move }) => { + // console.log('modalRef', modalRef); + // let list: any = modalRef?.current?.getFieldValue("questions") || [] + // console.log('newidas2', list); + return ( +
+
{listDom}
+
+ {/* 上移按钮 */} +
+
+ ); + }} + + // itemRender={({ listDom, action }, { record, index }) => ( + //
+ //
{listDom}
+ //
{action}
+ //
+ // )} > @@ -711,6 +848,8 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => { showQuestion.push({ text: item.title, showText: str, mark: item.options ? JSON.stringify(item.options) : "" }) }) } + console.log('showQuestion', showQuestion); + modalRef.current?.setFieldsValue({ questions: showQuestion }) @@ -926,7 +1065,6 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => { - = (props) => { + {/* 批量克隆点位 */} + { + batchCloneForm.current?.validateFields().then(async (res: any) => { + console.log('res', res); + console.log('currentRow', currentRow); + console.log('currentUser', currentUser); + console.log('serviceObj', serviceObj); + + let list: any = res.serviceList + let serverParts: any = [] + if (list && list.length > 0) { + list.forEach((item: any) => { + serverParts.push({ + serverPartName: serviceObj[item], + serverPartId: item + }) + }) + } + let question: any = [] + if (currentRow?.questionnaireTemplateQuestions && currentRow?.questionnaireTemplateQuestions.length > 0) { + currentRow.questionnaireTemplateQuestions.forEach((item: any) => { + question.push({ + questionId: item.questionId, + isRequired: item.isRequired, + sortOrder: item.sortOrder + }) + }) + } + + let req: any = { + title: currentRow?.title, + placeName: currentRow?.placeName, + placeId: currentRow?.placeId, + serverParts: serverParts, + questions: question, + operator: currentUser?.operator, + status: currentRow?.status, + description: currentRow?.description + } + console.log('req', req); + const data = await handleBatchService(req) + console.log('datadatadatadata', data); + if (data.Result_Code === 100) { + message.success('批量克隆成功!') + actionRef.current?.reload() + batchCloneForm.current?.resetFields() + setshowBatchCloneModal(false) + setCurrentRow(undefined) + } else { + message.error(data.Result_Desc) + } + }) + // setshowBatchCloneModal(false) + }} + onCancel={() => { + setshowBatchCloneModal(false) + batchCloneForm.current?.resetFields() + }} + > + + + + { + return (option?.label ?? '').toLowerCase().includes(input.toLowerCase()); + }, + optionFilterProp: "label" + }} + request={async () => { + const req = { + ProvinceCode: currentUser?.provinceCode, + StatisticsType: 1000 + } + const data = await handleGetServerpartDDL(req) + let obj: any = {} + if (data && data.length > 0) { + data.forEach((item: any) => { + obj[item.value] = item.label + }) + } + setAllServiceList(data) + setServiceObj(obj) + return data + }} + rules={[ + { + required: true, + message: "请选择目标服务区" + } + ]} + /> + + + + ) } diff --git a/src/pages/examine/modal/service.ts b/src/pages/examine/modal/service.ts index 7fcafba..a85650d 100644 --- a/src/pages/examine/modal/service.ts +++ b/src/pages/examine/modal/service.ts @@ -7,7 +7,7 @@ import request from "@/utils/requestJava" export async function handleGetTemplatesList(params?: any) { const data = await request.get('/questionnaire-templates', { params }) if (data.Result_Code === 200) { - return data.Result_Data.list + return data.Result_Data.List } return [] } @@ -26,7 +26,7 @@ export async function handleUpdateTemplates(params?: any) { // 删除模版 export async function handleDeleteTemplates(params?: any) { - const data = await request.get(`/questionnaire-templates/delete`,{params}) + const data = await request.get(`/questionnaire-templates/delete`, { params }) return data } @@ -34,7 +34,7 @@ export async function handleDeleteTemplates(params?: any) { export async function handleGetQuestionList(params?: any) { const data = await request.get('/questions/getList', params) if (data.Result_Code === 100) { - return data.Result_Data.list + return data.Result_Data.List } return [] } @@ -49,7 +49,13 @@ export async function handleUploadFile(params?: any) { export async function handleSearchModalTree(params?: any) { const data = await request.post(`/questionnaire-templates/search/tree`, params) if (data.Result_Code === 100) { - return data.Result_Data.list + return data.Result_Data.List } return [] } + +// 批量克隆服务区 +export async function handleBatchService(params?: any) { + const data = await request.post(`/questionnaire-templates/batchSave`, params) + return data +} \ No newline at end of file diff --git a/src/pages/examine/question/service.ts b/src/pages/examine/question/service.ts index 7b13f4e..7084766 100644 --- a/src/pages/examine/question/service.ts +++ b/src/pages/examine/question/service.ts @@ -5,7 +5,7 @@ import request from "@/utils/requestJava" export async function handleGetQuestionList(params?: any) { const data = await request.post('/questions/search/many', params) if (data.Result_Code === 100) { - return data.Result_Data.list + return data.Result_Data.List } return [] } diff --git a/src/pages/examine/record/service.ts b/src/pages/examine/record/service.ts index c5b4257..d81855c 100644 --- a/src/pages/examine/record/service.ts +++ b/src/pages/examine/record/service.ts @@ -6,7 +6,7 @@ import requestMap from '@/utils/requestMap' export async function handleGetRecordList(params?: any) { const data = await request.post('/questionnaire-responses/search/many', params) if (data.Result_Code === 100) { - return data.Result_Data.list + return data.Result_Data.List } return [] } @@ -15,7 +15,7 @@ export async function handleGetRecordList(params?: any) { export async function handleGetRecordTreeList(params?: any) { const data = await request.post('/questionnaire-responses/tree', params) if (data.Result_Code === 100) { - return data.Result_Data.list + return data.Result_Data.List } return [] } @@ -47,4 +47,14 @@ export async function handleUploadFile(params?: any) { return data } +// 拿到考核记录的汇总数据 +export async function handleGetResponsesSummary(params?: any) { + const data = await request.post(`/questionnaire-responses/statistic`, params) + if (data.Result_Code === 100) { + return data.Result_Data.List + } + return data +} + + diff --git a/src/pages/examine/recordSummary/index.tsx b/src/pages/examine/recordSummary/index.tsx index 4b24995..900f9c4 100644 --- a/src/pages/examine/recordSummary/index.tsx +++ b/src/pages/examine/recordSummary/index.tsx @@ -5,7 +5,7 @@ import { connect } from "umi"; import moment from "moment"; import { Button, Drawer, Image, message, Popconfirm, Space } from "antd"; import LeftSelectTree from "@/components/leftSelectTree/leftSelectTree"; -import { handleGetRecordTreeList } from "../record/service"; +import { handleGetRecordTreeList, handleGetResponsesSummary } from "../record/service"; const recordSummary: React.FC<{ currentUser: any }> = (props) => { const { currentUser } = props @@ -72,7 +72,7 @@ const recordSummary: React.FC<{ currentUser: any }> = (props) => { } }, { - title:
巡查次数
, + title:
巡查天数
, dataIndex: "inspectionNumber", align: 'center', hideInSearch: true, @@ -373,8 +373,8 @@ const recordSummary: React.FC<{ currentUser: any }> = (props) => { const req: any = { serverPartIds: selectedId && selectedId.length > 0 ? selectedId : [], - startTime: params?.startTime ? `${params?.startTime}T00:00:00` : "", - endTime: params?.endTime ? `${params?.endTime}T23:59:59` : "", + startTime: params?.startTime ? `${params?.startTime}` : "", + endTime: params?.endTime ? `${params?.endTime}` : "", // serverPartId: params?.serverPartId ? params?.serverPartId : undefined, extend: params?.inspectionType ? [{ key: "situation", @@ -389,7 +389,8 @@ const recordSummary: React.FC<{ currentUser: any }> = (props) => { setSearchParams(params) console.log('req', req); - const data = await handleGetRecordTreeList(req) + // const data = await handleGetRecordTreeList(req) + const data = await handleGetResponsesSummary(req) console.log('dat3a333', data); // 处理一下 根据第三层的实际巡查记录 汇总到第二层来 @@ -454,53 +455,6 @@ const recordSummary: React.FC<{ currentUser: any }> = (props) => { dateObj[moment(thirdItem.createdAt).format('YYYY-MM-DD')] = [thirdItem.template.id] } } - - // if (templateIdList.indexOf(thirdItem.template.id) === -1) { - // templateIdList.push(thirdItem.template.id) - // // 没有过的点位数据 就给他默认值 - // newChildren.push({ - // template: thirdItem.template, - // inspectionNumber: 1, - // normalNumber: extendObj?.situation === 0 ? 1 : 0, - // errorNumber: extendObj?.situation === 1 ? 1 : 0, - // pendingProcessNumber: extendObj?.errorStatus === 0 ? 1 : 0, - // processingNumber: extendObj?.errorStatus === 1 ? 1 : 0, - // processedNumber: extendObj?.errorStatus === 2 ? 1 : 0, - // }) - // } else { - // // 如果已经有过了的点位 给他加当前的状态就好 - // let nowDayData = dateObj[moment(thirdItem.createdAt).format('YYYY-MM-DD')] - // // 判断这一天 这个点位 是否已经有过了 - // let isHave: boolean = false - // if (nowDayData && nowDayData.length > 0) { - // if (nowDayData.indexOf(thirdItem.template.id) !== -1) { - // isHave = true - // } - // } - // if (!isHave) { - // if (newChildren && newChildren.length > 0) { - // newChildren.forEach((fourthItem: any) => { - // if (fourthItem.template.id === thirdItem.template.id) { - - // fourthItem.inspectionNumber += 1 - // if (extendObj?.situation === 0) { - // fourthItem.normalNumber += 1 - // } else if (extendObj?.situation === 1) { - // fourthItem.errorNumber += 1 - // } - - // if (extendObj?.errorStatus === 0) { - // fourthItem.pendingProcessNumber += 1 - // } else if (extendObj?.errorStatus === 1) { - // fourthItem.processingNumber += 1 - // } else if (extendObj?.errorStatus === 2) { - // fourthItem.processedNumber += 1 - // } - // } - // }) - // } - // } - // } console.log('dateObj', dateObj); })