From 12cf1d435dbf81fd4e3d688a6378e1d47018a30b Mon Sep 17 00:00:00 2001 From: Administrator <123456> Date: Sat, 26 Feb 2022 16:40:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E9=A2=98=E8=AE=BE=E7=BD=AE=EF=BC=88?= =?UTF-8?q?=E7=BC=96=E8=BE=91=EF=BC=8C=E5=88=A0=E9=99=A4=E7=AB=A0=E8=8A=82?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/src/pages/course/subject/service.ts | 32 +- admin/src/pages/course/subject/step/index.tsx | 436 +++++++++++------- 2 files changed, 293 insertions(+), 175 deletions(-) diff --git a/admin/src/pages/course/subject/service.ts b/admin/src/pages/course/subject/service.ts index 5b4d863..e8d8b47 100644 --- a/admin/src/pages/course/subject/service.ts +++ b/admin/src/pages/course/subject/service.ts @@ -62,6 +62,7 @@ export async function copySubject(data: { [key: string]: any }, options?: { [key + // /** 新建规则 PUT /api/rule */ // export async function updateRule(data: { [key: string]: any }, options?: { [key: string]: any }) { // return request('/api/rule', { @@ -93,8 +94,8 @@ export async function copySubject(data: { [key: string]: any }, options?: { [key /** * 获取主题列表 * http://10.10.14.252:8080/workspace/myWorkspace.do?projectId=382#6426 - * @param params - * @returns + * @param params + * @returns */ export async function querySubjectList(params: { page_size: number; @@ -108,8 +109,8 @@ export async function querySubjectList(params: { /** * 根据主题获取章节列表 * http://10.10.14.252:8080/workspace/myWorkspace.do?projectId=382#6428 - * @param params - * @returns + * @param params + * @returns */ export async function queryListChapterBySubject(params: { page_number: number; //页码 number 非必填;默认为1 @@ -122,9 +123,9 @@ export async function querySubjectList(params: { }); } -/** +/** * 新建/修改章节 POST /dsideal_yy/ypt/careerTraining/course/save - * + * */ export async function saveChapter(data: Record, options?: Record) { return request('/dsideal_yy/ypt/careerTraining/subject/saveChapter', { @@ -135,9 +136,9 @@ export async function saveChapter(data: Record, options?: Record, options?: Record) { return request('/dsideal_yy/ypt/careerTraining/subject/commitSubject', { @@ -157,4 +158,17 @@ export async function removeSubject(data: { key: number[] }, options?: Record) { + console.log('data:::', data); + return request>(' /dsideal_yy/ypt/careerTraining/subject/deleteChapter', { + data: { chapter_id: data?.key[0].chapter_id,subject_id: data?.key[0].subject_id}, // 当前接口不支持批量操作 + method: 'POST', + requestType: 'form', + ...(options || {}), + }); +} diff --git a/admin/src/pages/course/subject/step/index.tsx b/admin/src/pages/course/subject/step/index.tsx index 2b4254e..08655ae 100644 --- a/admin/src/pages/course/subject/step/index.tsx +++ b/admin/src/pages/course/subject/step/index.tsx @@ -23,167 +23,16 @@ import ProFormRichEdit from '../components/ProFormRichEdit'; import type { ActionType, ProColumns } from '@ant-design/pro-table'; import ProTable from '@ant-design/pro-table'; import type { TableListItem, TableListPagination } from '../../option/data'; -import { queryCourseList, queryCourseListByTag, queryTagList, saveSubject } from '../../option/service'; -import { commitSubject, getSubjectInfo, queryListChapterBySubject, saveChapter } from '../service'; +import {queryCourseList, queryCourseListByTag, queryTagList, removeCourse, saveSubject} from '../../option/service'; +import { commitSubject, getSubjectInfo, queryListChapterBySubject, saveChapter,deleteChapter } from '../service'; import { v4 as uuidv4 } from 'uuid'; +import {DataItem} from "@antv/data-set/lib/transform/tag-cloud"; +import {removeTrain} from "@/pages/training/option/service"; +import {listMyLearningChapterCourse} from "../../../../../../web/src/pages/course/list/service"; +const { confirm } = Modal; -/** 列表项定义 */ -const columns: ProColumns[] = [ - { - title: '序号', - key: 'index', - valueType: 'indexBorder', - width: 48, - }, - { - title: '章节名称', - dataIndex: 'chapter_name', - valueType: 'text', - hideInTable: false, - hideInDescriptions: false, - hideInForm: false, - hideInSearch: true, - formItemProps: { - rules: [ - { - required: true, - message: '请填写章节名称', - }, - ] - }, - }, - { - title: '简介', - dataIndex: 'chapter_describe', - valueType: 'textarea', - sorter: false, - hideInTable: false, - hideInForm: false, - hideInSearch: true, - formItemProps: { - rules: [ - { - required: true, - message: '请填写章节简介', - }, - ] - }, - renderText: (val: string) => (
), - renderFormItem: (item, { defaultRender, ...rest }, form) => ( - - ), - }, - { - title: '标签', - valueType: 'select', - dataIndex: 'tags', - sorter: false, - hideInTable: true, - hideInForm: false, - hideInSearch: true, - fieldProps: { - mode: "multiple" - }, - renderText: (val: string) => `${val}`, - request: async () => { - const { data: Items } = await queryTagList({}); - console.log('queryTagList...') - const tags = [] - for (let i = 0; i < Items.length; i++) { - tags.push({ label: Items[i].tag_name, value: Items[i].tag_id }) - } - console.log(tags, 'tags:::'); - return tags; - }, - }, - { - title: '课程', - valueType: 'select', - dataIndex: 'course_ids', - sorter: false, - hideInTable: false, - hideInForm: false, - hideInSearch: true, - fieldProps: { - mode: "multiple" - }, - formItemProps: { - rules: [ - { - required: true, - message: '请填选择课程', - }, - ] - }, - renderText: (val: string) => `${val}`, - dependencies: ['tags'], - request: async (params) => { - const {tags} = params; - const { data: Items } = await queryCourseListByTag({tag_ids: tags?.toString()}); - console.log('queryCourseListByTag...') - const courses = [] - for (let i = 0; i < Items?.length; i++) { - courses.push({ label: Items[i]?.course_name, value: Items[i]?.course_id }) - } - console.log(courses, 'courses:::'); - return courses; - }, - - }, - { - title: '学时', - dataIndex: 'course_minutes', - valueType: 'text', - sorter: false, - hideInTable: false, - hideInForm: true, - hideInSearch: true, - renderText: (val: string) => `${val}`, - }, - - { - title: '操作', - dataIndex: 'option', - valueType: 'option', - width: 200, - render: (_dom: any, record: React.SetStateAction) => [ - { - //console.log('entity', entity); - //setCurrentRow(record); - //handleDetailModalVisible(true); - }} - > - 查看 - , - { - //setCurrentRow(record); - //handleUpdateModalVisible(true); - }} - > - 编辑 - , - { }}> - 删除 - , - ], - }, -]; /** * 添加章节 @@ -221,30 +70,224 @@ export default () => { const [createModalVisible, handleCreateModalVisible] = useState(false); const [detailModalVisible, handleDetailModalVisible] = useState(false); const [updateModalVisible, handleUpdateModalVisible] = useState(false); - + const [selectedRowsState, setSelectedRows] = useState([]); const [uploadFileName, SetUploadFileName] = useState(); const [uploadFileExt, SetUploadFileExt] = useState(); const [subjectIntro, setSubjectIntro] = useState({}); - + const [currentRow, setCurrentRow] = useState(); const formMapRef = useRef | undefined>[]>([]); + /** 列表项定义 */ + const columns: ProColumns[] = [ + { + title: '序号', + key: 'index', + valueType: 'indexBorder', + width: 48, + align:'center' + }, + { + title: '章节名称', + dataIndex: 'chapter_name', + valueType: 'text', + hideInTable: false, + hideInDescriptions: false, + hideInForm: false, + hideInSearch: true, + formItemProps: { + rules: [ + { + required: true, + message: '请填写章节名称', + }, + ] + }, + align:'center' + }, + { + title: '简介', + dataIndex: 'chapter_describe', + valueType: 'textarea', + sorter: false, + hideInTable: false, + hideInForm: false, + hideInSearch: true, + formItemProps: { + rules: [ + { + required: true, + message: '请填写章节简介', + }, + ] + }, + renderText: (val: string) => (
), + renderFormItem: (item, { defaultRender, ...rest }, form) => ( + + ), + align:'center' + }, + { + title: '标签', + valueType: 'select', + dataIndex: 'tags', + sorter: false, + hideInTable: true, + hideInForm: false, + hideInSearch: true, + fieldProps: { + mode: "multiple" + }, + renderText: (val: string) => `${val}`, + request: async () => { + const { data: Items } = await queryTagList({}); + console.log('queryTagList...') + const tags = [] + for (let i = 0; i < Items.length; i++) { + tags.push({ label: Items[i].tag_name, value: Items[i].tag_id }) + } + console.log(tags, 'tags:::'); + return tags; + }, + align:'center' + }, + { + title: '课程', + valueType: 'select', + dataIndex: 'course_ids', + sorter: false, + hideInTable: false, + hideInForm: false, + hideInSearch: true, + fieldProps: { + mode: "multiple" + }, + formItemProps: { + rules: [ + { + required: true, + message: '请填选择课程', + }, + ] + }, + renderText: (val: string) => `${val}`, + dependencies: ['tags'], + request: async (params) => { + const {tags} = params; + const { data: Items } = await queryCourseListByTag({tag_ids: tags?.toString()}); + console.log('queryCourseListByTag...') + const courses = [] + for (let i = 0; i < Items?.length; i++) { + courses.push({ label: Items[i]?.course_name, value: Items[i]?.course_id }) + } + console.log(courses, 'courses:::'); + return courses; + }, + align:'center' + }, + { + title: '学时', + dataIndex: 'course_minutes', + valueType: 'text', + sorter: false, + hideInTable: false, + hideInForm: true, + hideInSearch: true, + renderText: (val: string) => `${val}`, + align:'center' + }, + + { + title: '操作', + dataIndex: 'option', + valueType: 'option', + width: 200, + align:'center', + render: (_dom: any, record: React.SetStateAction) => [ + { + setCurrentRow(record); + handleUpdateModalVisible(true); + }} + > + 编辑 + , + { + showConfirm(record) + + }}> + 删除 + , + ], + }, + ]; + + const params = useParams(); - //console.log('params', params); + console.log('params', params); const {data:subjectInfo} = useRequest(() => { return getSubjectInfo({subject_id: params?.id}); }); - + + + const showConfirm=async (record)=>{ + confirm({ + title: '确认删除章节吗?', + centered:true, + onOk() { + handleRemove([record]); + setSelectedRows([]); + actionRef.current?.reloadAndRest?.(); + }, + onCancel() { + }, + }); + }; + + const handleRemove = async (selectedRows: TableListItem[]) => { + const hide = message.loading('正在删除'); + if (!selectedRows) return true; + try { + const {code, msg} = await deleteChapter({ + key: selectedRows, + }); + hide(); + if(code === 2000 ){ + message.success('删除成功,即将刷新'); + }else{ + message.warning(msg); + } + return true; + } catch (error) { + // console.log('error', error) + hide(); + message.error('删除失败,请重试'); + return false; + } + }; + useEffect(() => { - console.log('getSubjectInfo', subjectInfo); + console.log('getSubjectInfo', subjectInfo); console.log('url', subjectInfo?.attachment_json?.url); // 编辑场景下需要使用formMapRef循环设置formData formMapRef.current.forEach((formInstanceRef) => { let fieldsValue; const subjectValue = { - subject_name:subjectInfo?.subject_name, - subject_describe:subjectInfo?.subject_describe, + subject_name:subjectInfo?.subject_name, + subject_describe:subjectInfo?.subject_describe, } if(params?.id && subjectInfo?.attachment_json?.url){ fieldsValue = { @@ -266,6 +309,19 @@ export default () => { }, [subjectInfo]); + /** 获取列数据初始值 */ + const getInitialValues = (cols: any[], vals: any) => { + console.log('getInitialValues-columns', columns); + console.log('getInitialValues-values', vals); + const initialValues: any[] = []; + cols.forEach((column: { dataIndex: string }) => { + const key: any = column?.dataIndex || ''; + initialValues.push({ ...column, initialValue: key ? vals[key] : '' }); + }); + console.log('initialValues::', initialValues); + return initialValues || []; + }; + return ( @@ -314,7 +370,7 @@ export default () => { attachment_json: `{ "url": "${url}"}` }); setSubjectIntro({subject_id:data?.subject_id, subject_name: value?.subject_name, subject_describe:value?.subject_describe}); - + return true; }} > @@ -504,6 +560,54 @@ export default () => { columns={columns} /> + { + handleUpdateModalVisible(false); + }} + footer={null} + > + {console.log('currentRow',currentRow)} + {currentRow?.chapter_id && ( + + layout="horizontal" + layoutType="Form" + labelCol={{ span: 8 }} + wrapperCol={{ span: 12 }} + onFinish={async (values) => { + console.log('values', values) + console.log('currentRow', currentRow) + //const url = values?.upload[0]?.url?.replace('/dsideal_yy/html/','') || values?.upload[0]?.response?.url; + //console.log('url', url) + // await handleUpdate({ + // ...values, + // attachment_filesize: attachment_json?.size || 0, // Bit 字节 + // course_id: currentRow?.course_id, + // attachment_json: `{"img":"", "name": "${values.attachment_json?.name}", "url": "${values.attachment_json?.url}", "size": "${values.attachment_json?.size}"}` + // }); + handleUpdateModalVisible(false); // 隐藏编辑窗口 + actionRef.current?.reloadAndRest?.(); + console.log(values); + }} + submitter={{ + render: (props, doms) => ( + + + {doms} + + + ), + }} + // action = '' + title="编辑" + columns={getInitialValues(columns, currentRow)} + /> + )} +
@@ -544,4 +648,4 @@ export default () => { ); -}; \ No newline at end of file +};