From 3ec7c07e577d8085fc872170da736781989ca4ab Mon Sep 17 00:00:00 2001 From: lixg Date: Wed, 9 Nov 2022 09:36:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=9A=84=E5=AD=98=E4=B8=BA=E6=A8=A1=E7=89=88,=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 98 +++++++ package.json | 2 + src/api/index.js | 12 +- src/api/index1.js | 2 +- src/views/projectcenter/ProjectManage.vue | 300 +++++++++++++++------- src/views/system/SystemManage.vue | 93 ++++++- 6 files changed, 411 insertions(+), 96 deletions(-) diff --git a/package-lock.json b/package-lock.json index 52bc5ebc..be3fa8d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,9 @@ "axios": "^1.1.3", "core-js": "^3.8.3", "element-plus": "^2.2.17", + "html2canvas": "^1.4.1", "jquery": "^3.6.1", + "qrcode.vue": "^3.3.3", "qs": "^6.11.0", "sortablejs": "^1.15.0", "vue": "^3.2.13", @@ -3514,6 +3516,14 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", @@ -4279,6 +4289,14 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/css-loader": { "version": "6.7.1", "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.7.1.tgz", @@ -6332,6 +6350,18 @@ "node": ">=10.13.0" } }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -8757,6 +8787,14 @@ "node": ">=6" } }, + "node_modules/qrcode.vue": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/qrcode.vue/-/qrcode.vue-3.3.3.tgz", + "integrity": "sha512-OsD4tQjIbxg/K6D5ZkWjBdYI9eg9K2i8qeYILdEAX5mdAydSAxV7xKmmZSP/hA12olLqEMZ9ryqDQrwa9jEMgw==", + "peerDependencies": { + "vue": "^3.0.0" + } + }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz", @@ -9911,6 +9949,14 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", @@ -10186,6 +10232,14 @@ "node": ">= 0.4.0" } }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", @@ -14091,6 +14145,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==" + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", @@ -14733,6 +14792,14 @@ "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", "dev": true }, + "css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "requires": { + "utrie": "^1.0.2" + } + }, "css-loader": { "version": "6.7.1", "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.7.1.tgz", @@ -16424,6 +16491,15 @@ "tapable": "^2.0.0" } }, + "html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "requires": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + } + }, "htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -18387,6 +18463,12 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "qrcode.vue": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/qrcode.vue/-/qrcode.vue-3.3.3.tgz", + "integrity": "sha512-OsD4tQjIbxg/K6D5ZkWjBdYI9eg9K2i8qeYILdEAX5mdAydSAxV7xKmmZSP/hA12olLqEMZ9ryqDQrwa9jEMgw==", + "requires": {} + }, "qs": { "version": "6.11.0", "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz", @@ -19358,6 +19440,14 @@ } } }, + "text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "requires": { + "utrie": "^1.0.2" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", @@ -19578,6 +19668,14 @@ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true }, + "utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "requires": { + "base64-arraybuffer": "^1.0.2" + } + }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", diff --git a/package.json b/package.json index 7f47e397..faa48370 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,9 @@ "axios": "^1.1.3", "core-js": "^3.8.3", "element-plus": "^2.2.17", + "html2canvas": "^1.4.1", "jquery": "^3.6.1", + "qrcode.vue": "^3.3.3", "qs": "^6.11.0", "sortablejs": "^1.15.0", "vue": "^3.2.13", diff --git a/src/api/index.js b/src/api/index.js index b0db5ad7..994fc519 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -2,7 +2,7 @@ * @Author: lixg lixg@dongwu-inc.com * @Date: 2022-11-07 17:06:45 * @LastEditors: lixg lixg@dongwu-inc.com - * @LastEditTime: 2022-11-07 20:11:23 + * @LastEditTime: 2022-11-09 09:32:35 * @FilePath: /fe-manage/src/api/index.js * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ @@ -56,4 +56,12 @@ export const getProjectDetail = (obj) => http.get('/admin/project/detail', { par //发布项目 export const releaseProject=(obj)=>http.post('/admin/project/publish',obj) //获取项目学员 -export const projectStudent=(obj)=>http.post('/admin/project/studentList',obj) \ No newline at end of file +export const projectStudent=(obj)=>http.post('/admin/project/studentList',obj) +//撤回发布、结束 +export const handleProject=(obj)=>http.post('/admin/project/handle',obj) + + + + +//获取讨论信息 +export const getDiscussDetail=(obj)=>http.post('/discuss/getDiscussDetail',obj) diff --git a/src/api/index1.js b/src/api/index1.js index 16e7ee9d..0024073f 100644 --- a/src/api/index1.js +++ b/src/api/index1.js @@ -2,7 +2,7 @@ * @Author: lixg lixg@dongwu-inc.com * @Date: 2022-11-04 22:45:31 * @LastEditors: lixg lixg@dongwu-inc.com - * @LastEditTime: 2022-11-06 16:48:50 + * @LastEditTime: 2022-11-09 09:32:52 * @FilePath: /fe-manage/src/api/index1.js * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ diff --git a/src/views/projectcenter/ProjectManage.vue b/src/views/projectcenter/ProjectManage.vue index 085f353d..a121bc62 100644 --- a/src/views/projectcenter/ProjectManage.vue +++ b/src/views/projectcenter/ProjectManage.vue @@ -58,13 +58,13 @@ />
-
+
-
搜索
+
搜索
-
+
-
重置
+
重置
@@ -849,11 +849,11 @@
-
-
取消
+
+
取消
-
-
确定
+
+
确定
@@ -879,11 +879,11 @@ 您确定要删除此项目吗
-
-
取消
+
+
取消
-
-
确定
+
+
确定
@@ -910,10 +910,10 @@
-
取消
+
取消
-
确定
+
确定
@@ -1014,11 +1014,11 @@
(项目撤回后学员进度保留,发布后可继续学习)
-
-
取消
+
+
取消
-
-
确定
+
+
确定
@@ -1080,8 +1080,17 @@ export default { currentEditChildrensProjectId: "", dcProjectID: "", + + currentPage: 1, //当前页 + tableDataTotal: -1, //学习路径列表总数 + pageSize: 10, //每页10条数据 + projectStudentsNum:0,//发布弹窗-学员人数 releaseProjectId: null, //发布的项目id + recallProjectId:null,//撤回的项目id + finishProjectId:null,//结束的项目id + deleteProjectId:null,//删除的项目id + templateProjectId:null,//存为模版的项目id }); // 数据接入 - start - const router = useRouter(); @@ -1146,13 +1155,16 @@ export default { endTime = ""; status = null; managerid = ""; + state.currentPage=1 getTableDate(); }; const searchSubmit = () => { + console.log('点击了搜索') + state.currentPage=1 const obj = { - pageNo: 1, - pageSize: 10, + pageNo: state.currentPage, + pageSize: state.pageSize, beginTime: beginTime, endTime: endTime, status: status, @@ -1354,6 +1366,7 @@ export default { state.doublepro = false; message.destroy(); message.success("创建成功"); + state.currentPage=1 getTableDate(); } }) @@ -1598,6 +1611,7 @@ export default { state.doublesonpro = false; message.destroy(); message.success("创建成功"); + state.currentPage=1 getTableDate(); } }) @@ -1608,6 +1622,9 @@ export default { }); }; + + + // 编辑多层子项目 const edvalue6 = ref(""); const edvalue7 = ref([]); @@ -1743,26 +1760,8 @@ export default { state.eddoublesonpro = false; }; - //确认发布项目 - const releaseProject = () => { - console.log('点击发布') - let obj = { - projectId: state.releaseProjectId, - }; - api - .releaseProject(obj) - .then((res) => { - console.log("发布成功", res); - message.destroy(); - message.success("发布成功"); - state.projectPub = false - getTableDate() - }) - .catch((err) => { - console.log("发布失败", err); - }); - }; - //发布弹窗 + + //打开发布弹窗 const showProjectPub = (projectId) => { state.projectPub = true; state.releaseProjectId = projectId; @@ -1783,9 +1782,142 @@ console.log('获取学员人数失败',err) }) //获取阶段及任务总数 }; - - //撤回 - + //确认发布项目 + const releaseProject = () => { + console.log('点击发布') + let obj = { + projectId: state.releaseProjectId, + }; + api + .releaseProject(obj) + .then((res) => { + console.log("发布成功", res); + message.destroy(); + message.success("发布成功"); + state.projectPub = false + getTableDate() + }) + .catch((err) => { + console.log("发布失败", err); + }); + }; + //关闭发布弹窗 + const closeProjectPub = () => { + state.projectPub = false; + }; + //打开撤回弹窗 + const showBackModal = (projectId) => { + state.backModal = true; +state.recallProjectId = projectId; + }; + //确认撤回发布 + const recallProject = () => { + let obj = { + projectId: state.recallProjectId, + type: 0, + }; + api + .handleProject(obj) + .then((res) => { + console.log("撤回成功", res); + message.destroy(); + message.success("撤回成功"); + state.backModal = false; + getTableDate(); + }) + .catch((err) => { + console.log("撤回失败", err); + }); + }; + //关闭撤回弹窗 + const closeBackModal = () => { + state.backModal = false; + }; +//打开结束弹窗 +const showStopModal = (projectId) => { + state.stopModal = true; + state.finishProjectId=projectId + }; +//确认结束 +const finishProject=()=>{ +let obj = { + projectId: state.finishProjectId, + type: -1, + }; + api + .handleProject(obj) + .then((res) => { + console.log("结束成功", res); + message.destroy(); + message.success("已结束"); + state.stopModal = false; + getTableDate(); + }) + .catch((err) => { + console.log("结束失败", err); + }); +} + //关闭结束弹窗 + const closeStopModal = () => { + state.stopModal = false; + }; + //打开删除弹窗 +const showDeleteModal = (projectId) => { + state.deleteModal = true; + state.deleteProjectId=projectId + }; + //确认删除 +const deleteProject=()=>{ +let obj = { + projectId: state.deleteProjectId, + type: -2, + }; + api + .handleProject(obj) + .then((res) => { + console.log("删除成功", res); + message.destroy(); + message.success("删除成功"); + state.deleteModal = false; + getTableDate(); + }) + .catch((err) => { + console.log("删除失败", err); + }); +} + //关闭删除弹窗 + const closeDeleteModal = () => { + state.deleteModal = false; + }; +//打开存为模版弹窗 + const showStartModal = (projectId) => { + state.startModal = true; + state.templateProjectId=projectId + }; + //确认存为模版 +const templateProject=()=>{ +let obj = { + projectId: state.templateProjectId, + type: 1, + }; + api + .handleProject(obj) + .then((res) => { + console.log("模版保存成功", res); + message.destroy(); + message.success("模版保存成功"); + state.startModal = false; + getTableDate(); + }) + .catch((err) => { + console.log("模版保存失败", err); + }); +} + //关闭存为模版弹窗 + const closeStartModal = () => { + state.startModal = false; + }; + // 数据接入 - end - @@ -1802,9 +1934,7 @@ console.log('获取学员人数失败',err) // 获取项目列表信息 let tableData = ref([]); - let currentPage = ref(1); - let tableDataTotal = ref(""); - let pageSize = ref(10); + const columns = ref([ { @@ -1995,7 +2125,7 @@ console.log('获取学员人数失败',err)
{ - showDeleteModal(); + showDeleteModal(value.record.projectId); }} > 删除 @@ -2181,7 +2311,7 @@ console.log('获取学员人数失败',err)
{ - showDeleteModal(); + showDeleteModal(value.record.projectId); }} > 删除 @@ -2296,7 +2426,7 @@ console.log('获取学员人数失败',err)
{ - showDeleteModal(); + showDeleteModal(value.record.projectId); }} > 删除 @@ -2448,7 +2578,7 @@ console.log('获取学员人数失败',err)
{ - showDeleteModal(); + showDeleteModal(value.record.projectId); }} > 删除 @@ -2589,7 +2719,7 @@ console.log('获取学员人数失败',err)
{ - showDeleteModal(); + showDeleteModal(value.record.projectId); }} > 删除 @@ -2598,7 +2728,7 @@ console.log('获取学员人数失败',err)
{ - showStartModal(); + showStartModal(value.record.projectId); }} > 存为模版 @@ -2639,7 +2769,7 @@ console.log('获取学员人数失败',err)
{ - showStartModal(); + showStartModal(value.record.projectId); }} > 存为模版 @@ -2648,7 +2778,7 @@ console.log('获取学员人数失败',err)
{ - showStopModal(); + showStopModal(value.record.projectId); }} > 结束 @@ -2657,7 +2787,7 @@ console.log('获取学员人数失败',err)
{ - showBackModal(); + showBackModal(value.record.projectId); }} > 撤回 @@ -2686,7 +2816,7 @@ console.log('获取学员人数失败',err)
{ - showStartModal(); + showStartModal(value.record.projectId); }} > 存为模版 @@ -2704,7 +2834,7 @@ console.log('获取学员人数失败',err)
{ - showDeleteModal(); + showDeleteModal(value.record.projectId); }} > 删除 @@ -2738,17 +2868,25 @@ console.log('获取学员人数失败',err) const getTableDate = (pagedata) => { let obj = { - pageNo: 1, - pageSize: 10, + pageNo: state.currentPage, + pageSize: state.pageSize, }; api .getProjectList(pagedata ? pagedata : obj) .then((res) => { console.log(res); if (res.status == 200 && res.data.code == 200) { - tableDataTotal.value = Number(res.data.data.total); + state.tableDataTotal = Number(res.data.data.total); let data = res.data.data.rows; // let data = state.tableData; + if ( + data.length === 0 && + res.data.data.total > 0 && + state.currentPage > 1 + ) { + state.currentPage = state.currentPage - 1; + getTableDate(); + } console.log("1266", data); data.map((value) => { console.log("value %o", value); @@ -2788,10 +2926,10 @@ console.log('获取学员人数失败',err) // 翻页 const changePagination = (page) => { console.log(page); - currentPage.value = page; + state.currentPage = page; let pagedata = { pageNo: page, - pageSize: 10, + pageSize: state.pageSize, }; getTableDate(pagedata); // getLearnPath(); @@ -2826,30 +2964,9 @@ console.log('获取学员人数失败',err) const closeCopyModal = () => { state.copyModal = false; }; - const showStopModal = () => { - state.stopModal = true; - }; - const closeStopModal = () => { - state.stopModal = false; - }; - const showDeleteModal = () => { - state.deleteModal = true; - }; - const closeDeleteModal = () => { - state.deleteModal = false; - }; - const showStartModal = () => { - state.startModal = true; - }; - const closeStartModal = () => { - state.startModal = false; - }; - const showBackModal = () => { - state.backModal = true; - }; - const closeBackModal = () => { - state.backModal = false; - }; + + + const showProjOwner = () => { state.ProjOwnervisible = true; }; @@ -2862,9 +2979,7 @@ console.log('获取学员人数失败',err) const showProjManage = () => { state.ProjManagevisible = true; }; - const closeProjectPub = () => { - state.projectPub = false; - }; + return { ...toRefs(state), selectProjectName, @@ -2895,9 +3010,6 @@ console.log('获取学员人数失败',err) closeProjectPub, tableData, - currentPage, - tableDataTotal, - pageSize, columns, createStoreyProject, classifyList, @@ -2964,6 +3076,10 @@ console.log('获取学员人数失败',err) closeeditModal3, releaseProject, showProjectPub, + recallProject, + finishProject, + deleteProject, + templateProject, }; }, }; diff --git a/src/views/system/SystemManage.vue b/src/views/system/SystemManage.vue index 9c791a40..1c024efb 100644 --- a/src/views/system/SystemManage.vue +++ b/src/views/system/SystemManage.vue @@ -70,7 +70,6 @@ animation="1000" @start="onStart" @end="onEnd" - :list="draggableList" > +
+
下载二维码
+ +
+
下载200
+
下载400
+
下载800