Compare commits
33 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
aefa2c6fdd | ||
|
fd9cca025c | ||
|
2491552c8f | ||
|
226595ea84 | ||
|
a9a08c74d3 | ||
|
2cb2247d7e | ||
|
1d72d29dff | ||
|
ce6512ef83 | ||
|
4ac7b46532 | ||
|
c9ce398e4c | ||
|
90a539c4b7 | ||
|
7673c039ef | ||
|
af076119ce | ||
|
e88db236d5 | ||
|
9d0baa69d7 | ||
|
8da25a588d | ||
|
9c3deb02e6 | ||
|
066896bd4f | ||
|
c59b0930a3 | ||
|
4bb31b119a | ||
|
53a71d0bab | ||
|
8db9414cfa | ||
|
7e50c780ce | ||
|
eb7b59078a | ||
|
0bf309cc3d | ||
|
9e83c0b8e9 | ||
|
381a1af149 | ||
|
c0792b7f2f | ||
|
4f9c70f3cb | ||
|
ab0d193095 | ||
|
95d0cd03e0 | ||
|
d84a52912d | ||
|
2bb04ad85f |
@ -17,7 +17,8 @@
|
||||
"svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "0.18.0",
|
||||
"axios": "^0.21.1",
|
||||
"bjjl-engine-2d": "^1.0.22",
|
||||
"echarts": "^4.7.0",
|
||||
"element-ui": "^2.12.0",
|
||||
"file-saver": "^1.3.3",
|
||||
@ -35,7 +36,7 @@
|
||||
"sessionstorage": "^0.1.0",
|
||||
"stompjs": "^2.3.3",
|
||||
"storejs": "^1.0.25",
|
||||
"three": "^0.107.0",
|
||||
"three": "^0.130.1",
|
||||
"video.js": "^7.8.4",
|
||||
"vue": "^2.6.10",
|
||||
"vue-i18n": "^8.12.0",
|
||||
@ -70,7 +71,7 @@
|
||||
"eslint-plugin-vue": "5.2.2",
|
||||
"file-loader": "^3.0.1",
|
||||
"html-webpack-plugin": "3.2.0",
|
||||
"node-sass": "^4.9.0",
|
||||
"node-sass": "^4.14.1",
|
||||
"runjs": "^4.3.2",
|
||||
"sass-loader": "^7.1.0",
|
||||
"script-ext-html-webpack-plugin": "2.1.3",
|
||||
|
50
src/api/circuitryDraft.js
Normal file
50
src/api/circuitryDraft.js
Normal file
@ -0,0 +1,50 @@
|
||||
import request from '@/utils/request';
|
||||
|
||||
/** 查询用户所有电路数据 */
|
||||
export function queryCircuitryDraftList() {
|
||||
return request({
|
||||
url: `/api/circuitryDraft/list/users`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 分页查询用户电路数据 */
|
||||
export function queryCircuitryDraftListPaging(params) {
|
||||
return request({
|
||||
url: `/api/circuitryDraft/page/users`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
/** 根据id获取数据 */
|
||||
export function getCircuitryDraftDataById(id) {
|
||||
return request({
|
||||
url: `/api/circuitryDraft/${id}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 创建草稿 */
|
||||
export function createCircuitryDraft(data) {
|
||||
return request({
|
||||
url: `/api/circuitryDraft`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
/** 更新草稿数据 */
|
||||
export function updateCircuitryDraft(id, data) {
|
||||
return request({
|
||||
url: `/api/circuitryDraft/${id}/data`,
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
/** 删除草稿 */
|
||||
export function deleteCircuitryDarft(id) {
|
||||
return request({
|
||||
url: `/api/circuitryDraft/${id}`,
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
109
src/api/management/model.js
Normal file
109
src/api/management/model.js
Normal file
@ -0,0 +1,109 @@
|
||||
import request from '@/utils/request';
|
||||
|
||||
/** 新建用户草稿2d模型*/
|
||||
export function createModelDraft(data) {
|
||||
return request({
|
||||
url: `/draft/model2d/`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 分页查询用户2d模型草稿*/
|
||||
export function getModelDraftList(params) {
|
||||
return request({
|
||||
url: `/draft/model2d/paging`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
/** 更新2d模型基本信息 */
|
||||
export function updateModelDraftInfo(data) {
|
||||
return request({
|
||||
url: `/draft/model2d/${data.id}/basic`,
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 更新2d模型数据 */
|
||||
export function updateModelDraftData(data) {
|
||||
return request({
|
||||
url: `/draft/model2d/${data.id}/data`,
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 根据id查询2d模型草稿数据 */
|
||||
export function getModelDraftData(id) {
|
||||
return request({
|
||||
url: `/draft/model2d/${id}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 发布模型 */
|
||||
export function publishModelDraft(id) {
|
||||
return request({
|
||||
url: `/draft/model2d/${id}/publish`,
|
||||
method: 'post'
|
||||
});
|
||||
}
|
||||
|
||||
/** 删除草稿模型 */
|
||||
export function deleteModelDraft(id) {
|
||||
return request({
|
||||
url: `/draft/model2d/${id}`,
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
||||
|
||||
/** 分页查询模型数据 */
|
||||
export function getModelList() {
|
||||
return request({
|
||||
url: `/api/model2d/paging`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
/** 查询模型数据 */
|
||||
export function getModelListUnpage() {
|
||||
return request({
|
||||
url: '/api/model2d/list',
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 查询某个模型所有历史版本数据 */
|
||||
export function getModelVersions(code) {
|
||||
return request({
|
||||
url: `/api/model2d/${code}/versions`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 分页查询模型历史版本 */
|
||||
export function getModelVersionsPaging(code) {
|
||||
return request({
|
||||
url: `/api/model2d/${code}/versions/paging`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 更新2d模型基础信息 */
|
||||
export function updateModelBasicInfo(id) {
|
||||
return request({
|
||||
url: `/api/model2d/{id}/basic`,
|
||||
method: 'put'
|
||||
});
|
||||
}
|
||||
|
||||
/** 回滚版本 */
|
||||
export function setModelVersion(code, version) {
|
||||
return request({
|
||||
url: `/api/model2d/${code}/version/${version}`,
|
||||
method: 'put'
|
||||
});
|
||||
}
|
||||
|
@ -66,3 +66,11 @@ export function getClassGradeList(examId, params) {
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
/** 查询组织学生单次考试成绩曲线 */
|
||||
export function getClassGradeStatistic(orgId, examId) {
|
||||
return request({
|
||||
url: `/api/userExam/curve/${orgId}/${examId}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
@ -82,6 +82,7 @@ export default {
|
||||
configLine: 'Line management',
|
||||
deviceManage: 'Device management',
|
||||
iscsDraw: 'Iscs Draw',
|
||||
userModelDesign: 'Model Draw',
|
||||
iscsSystem: 'Iscs System',
|
||||
studentManage: 'Student manage',
|
||||
examDetail: 'Exam detail',
|
||||
@ -99,5 +100,7 @@ export default {
|
||||
publishISCSManage:'publish ISCS Manage',
|
||||
voiceTraining: 'Voice Training',
|
||||
mapGroup: 'Map Group',
|
||||
drawingMange:'Drawing Mange'
|
||||
userModel: 'User Model',
|
||||
drawingMange:'Drawing Mange',
|
||||
newDraw: 'New Draw'
|
||||
};
|
||||
|
@ -82,6 +82,7 @@ export default {
|
||||
configLine: '线路管理',
|
||||
deviceManage: '设备管理',
|
||||
iscsDraw: 'Iscs绘制',
|
||||
userModelDesign: '模型绘制',
|
||||
iscsSystem: 'Iscs系统',
|
||||
studentManage: '学生管理',
|
||||
competitionManage: '竞赛管理',
|
||||
@ -103,5 +104,7 @@ export default {
|
||||
publishISCSManage:'发布ISCS管理',
|
||||
voiceTraining: '语音训练',
|
||||
mapGroup: '地图分组',
|
||||
drawingMange:'图纸管理'
|
||||
userModel: '模型管理',
|
||||
drawingMange:'图纸管理',
|
||||
newDraw: '新版绘制'
|
||||
};
|
||||
|
@ -5,6 +5,7 @@ import ElementUI from 'element-ui';
|
||||
import 'element-ui/lib/theme-chalk/index.css';
|
||||
import '@/styles/index.scss'; // global css
|
||||
import 'quill/dist/quill.snow.css';
|
||||
import Engine2D from 'bjjl-engine-2d';
|
||||
|
||||
import LangStorage from '@/utils/lang';
|
||||
import App from './App';
|
||||
@ -37,6 +38,7 @@ export const i18n = new VueI18n({
|
||||
messages
|
||||
});
|
||||
Vue.use(ElementUI, {i18n: (key, value) => i18n.t(key, value)});
|
||||
Vue.use(Engine2D);
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
|
@ -125,6 +125,8 @@ const PublishExamRule = () => import('@/views/publish/examRule/index');
|
||||
const PublishExamRuleDraft = () => import('@/views/publish/examRule/draft/index');
|
||||
const PublishIBP = () => import('@/views/publish/publishIBP/index');
|
||||
const PublishISCS = () => import('@/views/publish/publishISCS/index');
|
||||
const PublishModel = () => import('@/views/publish/userModel/index');
|
||||
const PublishModelHistory = () => import('@/views/publish/userModel/history');
|
||||
|
||||
const TrainingPlatform = () => import('@/views/trainingPlatform/index');
|
||||
|
||||
@ -165,6 +167,7 @@ const SortLesson = () => import('@/views/organization/draftLessonManage/sortLess
|
||||
const StudentManage = () => import('@/views/organization/classManage/studentManage/index');
|
||||
const DurationView = () => import('@/views/organization/classManage/durationView');
|
||||
const GradeList = () => import('@/views/organization/examManage/gradeList');
|
||||
const GradeStatistics = () => import('@/views/organization/examManage/gradeStatistics');
|
||||
const CreateRule = () => import('@/views/organization/ruleManage/createRule');
|
||||
const TotalGrade = () => import('@/views/organization/ruleManage/totalGrade');
|
||||
const InfoLessonDetail = () => import('@/views/organization/lessonManage/lessonDetail');
|
||||
@ -186,6 +189,11 @@ const UploadPdfList = () => import('@/views/uploadPdf/list');
|
||||
|
||||
const ThirdLogin = () => import('@/views/thirdLogin');
|
||||
|
||||
const UserModelDesign = () => import('@/views/userModelDesign/draftList');
|
||||
const UserModelEdit = () => import('@/views/userModelDesign/edit');
|
||||
const NewDrawList = () => import('@/views/newDraw/list');
|
||||
const NewDrawEdit = () => import('@/views/newDraw/edit');
|
||||
|
||||
// import { GenerateRouteProjectList } from '@/scripts/ProjectConfig';
|
||||
// import { getSessionStorage } from '@/utils/auth';
|
||||
|
||||
@ -611,6 +619,11 @@ export const publicAsyncRoute = [
|
||||
component: GradeList,
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: 'gradeStatistics',
|
||||
component: GradeStatistics,
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: 'createRule',
|
||||
component: CreateRule,
|
||||
@ -911,6 +924,19 @@ export const asyncRouter = [
|
||||
meta: {
|
||||
i18n: 'router.mapGroup'
|
||||
}
|
||||
},
|
||||
{ // 发布模型管理
|
||||
path: 'userModel',
|
||||
component: PublishModel,
|
||||
meta: {
|
||||
i18n: 'router.userModel'
|
||||
}
|
||||
},
|
||||
{ // 模型历史版本
|
||||
path: 'userModel/history',
|
||||
name: 'modelHistory',
|
||||
component: PublishModelHistory,
|
||||
hidden: true
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -1281,6 +1307,34 @@ export const asyncRouter = [
|
||||
hidden: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: 'usermodel',
|
||||
component: UserModelDesign,
|
||||
meta: {
|
||||
i18n: 'router.userModelDesign',
|
||||
roles: [admin]
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'usermodel/:id/edit',
|
||||
name: 'userModelEdit',
|
||||
component: UserModelEdit,
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: 'newdraw',
|
||||
component: NewDrawList,
|
||||
meta: {
|
||||
i18n: 'router.newDraw',
|
||||
roles: [admin]
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'newdraw/:id/edit',
|
||||
name: 'newDrawEdit',
|
||||
component: NewDrawEdit,
|
||||
hidden: true
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -17,6 +17,7 @@ class CommandHandle {
|
||||
this.definitionMap = {
|
||||
Center: {},
|
||||
Local: {},
|
||||
Depot_IL:{},
|
||||
Common: {
|
||||
Set_Fault:{operate: 'Set_Fault', paramList:[{name: 'code'}, {name: 'faultType'}]},
|
||||
Cancel_Fault: {operate:'Cancel_Fault', paramList:[{name: 'code'}, {name: 'faultType'}]},
|
||||
|
@ -11,7 +11,7 @@
|
||||
<el-input v-model="inputName" size="small" style="width: 200px;margin-right: 50px;margin-left: 10px;" placeholder="请输入筛选的名称" @change="changeInput" />
|
||||
<el-button size="small" type="primary" @click="goToFilter">查找</el-button>
|
||||
</el-row>
|
||||
<el-table ref="filterTable" :data="filterTableData" border style="width: 100%" height="calc(100vh - 150px)">
|
||||
<el-table ref="filterTable" :data="filterTableData" border style="width: 100%" height="calc(100vh - 190px)">
|
||||
<el-table-column prop="name" label="试卷名称" />
|
||||
<el-table-column v-if="isGzbShow" prop="classNames" label="所属班级">
|
||||
<template slot-scope="scope">
|
||||
|
57
src/views/newDraw/create.vue
Normal file
57
src/views/newDraw/create.vue
Normal file
@ -0,0 +1,57 @@
|
||||
<template>
|
||||
<el-dialog v-dialogDrag :visible.sync="visible" :title="title" width="300px" center :destroy-on-close="true">
|
||||
<el-form ref="form" :model="formData" :rules="formRules" label-width="80px">
|
||||
<el-form-item label="草稿名称" prop="name">
|
||||
<el-input v-model="formData.name" size="mini" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="close">取 消</el-button>
|
||||
<el-button type="primary" @click="confirmHandler">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { createCircuitryDraft } from '@/api/circuitryDraft';
|
||||
export default {
|
||||
name: 'CreateModelDraftDialog',
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
formData: { name: ''},
|
||||
formRules: {
|
||||
name: [{ required: true, message: '请输入草稿名称', trigger: 'blur' }]
|
||||
}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
title() {
|
||||
return '新建草稿';
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
show() {
|
||||
this.formData = { name: '' };
|
||||
this.visible = true;
|
||||
},
|
||||
close() {
|
||||
this.visible = false;
|
||||
},
|
||||
confirmHandler() {
|
||||
this.$refs.form.validate(valid => {
|
||||
if (valid) {
|
||||
createCircuitryDraft(this.formData).then(resp => {
|
||||
this.close();
|
||||
this.$emit('close');
|
||||
}).catch(() => {
|
||||
this.$message.error('创建草稿失败!');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
167
src/views/newDraw/drawForm.vue
Normal file
167
src/views/newDraw/drawForm.vue
Normal file
@ -0,0 +1,167 @@
|
||||
<template>
|
||||
<div style="background: #fff;">
|
||||
<div style="text-align: right;">
|
||||
<el-button type="text" @click="save">保存</el-button>
|
||||
<el-button type="text" style="margin-right: 10px" @click="back">返回</el-button>
|
||||
</div>
|
||||
<div class="styleGroup">
|
||||
<el-card type="border-card" class="elementCard">
|
||||
<el-tabs v-model="enabledTab" class="eachElementPane" type="card">
|
||||
<el-tab-pane id="drawSettingPane" label="绘图配置" name="drawSetting">
|
||||
<el-form ref="form" :model="form" label-width="80px">
|
||||
<el-form-item label="模型:">
|
||||
<el-select v-model="form.code" size="mini" placeholder="请选择" @change="modelChange">
|
||||
<el-option
|
||||
v-for="item in model"
|
||||
:key="item.code"
|
||||
:label="item.name + '(' + item.code + ')'"
|
||||
:value="item.code"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="位置:">
|
||||
<el-input-number v-model="form.position[0]" size="mini" />
|
||||
<el-input-number v-model="form.position[1]" size="mini" />
|
||||
</el-form-item>
|
||||
<el-form-item label="旋转:">
|
||||
<el-input-number v-model="form.rotation" size="mini" :min="-360" :max="360" />
|
||||
</el-form-item>
|
||||
<el-form-item label="缩放:">
|
||||
<el-input-number v-model="form.scale[0]" :precision="2" :step="0.1" size="mini" :min="0.1" />
|
||||
<el-input-number v-model="form.scale[1]" :precision="2" :step="0.1" size="mini" :min="0.1" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div style="text-align: center;">
|
||||
<el-button :disabled="!form.code" type="warning" size="mini" @click="updateCompose">修改</el-button>
|
||||
<el-button :disabled="!form.code" type="danger" size="mini" @click="deleteCompose">删除</el-button>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<!-- styleList -->
|
||||
<!-- shapeList -->
|
||||
<!-- model 修改 -->
|
||||
<!-- <el-tab-pane v-if="allowModifyList.length>0" id="modelModifyPane" label="模型修改" name="modelModify">
|
||||
<el-tabs v-model="modifyElementTab" class="eachElementPane" @tab-click="handleTabClick">
|
||||
<el-tab-pane v-for="(allowModify,index) in allowModifyList" :key="index" :label="allowModify.name" :name="allowModify.code">
|
||||
<data-form ref="dataform" :form="element" :form-model="modifyElementForm" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-tab-pane> -->
|
||||
</el-tabs>
|
||||
</el-card>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: 'DrawForm',
|
||||
props: {
|
||||
model: {
|
||||
type: Array,
|
||||
default() {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
enabledTab:'drawSetting',
|
||||
// modifyElementTab:'',
|
||||
form: {
|
||||
code: '',
|
||||
type: '',
|
||||
name: '',
|
||||
position: [0, 0],
|
||||
rotation: 0,
|
||||
scale: [1, 1]
|
||||
}
|
||||
// allowModifyList:[],
|
||||
// modifyElementForm:{
|
||||
// code:'',
|
||||
// shape:{},
|
||||
// style:{}
|
||||
// }
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
selectChange({code, type, name, position, rotation, scale, shapeList}) {
|
||||
this.form = {code, type, name, position, rotation, scale};
|
||||
// this.allowModifyList = [];
|
||||
// shapeList.forEach(shape=>{
|
||||
// if (shape.editAttrList && shape.editAttrList.length > 0) {
|
||||
// const formGroup = [];
|
||||
// const list = [{name:'绘图配置', type:'shape'}, {name:'样式配置', type:'style'}];
|
||||
// list.forEach(eachType=>{
|
||||
// // const styleList = elementConst[eachType.type]['formList'][eachType.type];
|
||||
// formGroup.push({name:eachType.name, type: eachType.type});
|
||||
// });
|
||||
// // styleList:
|
||||
// // const styleList = [];
|
||||
// // const shapeList = [];
|
||||
// // shape.editAttrList.forEach(each=>{
|
||||
// // if (each.attrType == 'style') { styleList.push(each); } else { shapeList.push(each); }
|
||||
// // });
|
||||
// // styleList:styleList, shapeList:shapeList,
|
||||
// // this.allowModifyList.push({code:shape.code, editAttrList:shape.editAttrList, formGroup:formGroup, name:shape.name});
|
||||
// // name: "Polyline_0_0.78816"
|
||||
// }
|
||||
// });
|
||||
// if (this.allowModifyList.length > 0) {
|
||||
// const currentModify = this.allowModifyList[0];
|
||||
// this.modifyElementTab = currentModify.code;
|
||||
// this.modifyElementForm.code = currentModify.code;
|
||||
// currentModify.editAttrList.forEach(editAttr=>{
|
||||
// this.modifyElementForm[editAttr.attrType][editAttr.attrName] = '';
|
||||
// });
|
||||
// }
|
||||
},
|
||||
modelChange(code) {
|
||||
const compose = this.model.find(item => item.code === code);
|
||||
this.selectChange(compose);
|
||||
},
|
||||
updateCompose() {
|
||||
this.$emit('updateCompose', this.form);
|
||||
},
|
||||
deleteCompose() {
|
||||
this.$emit('deleteCompose', this.form);
|
||||
this.form = {
|
||||
code: '',
|
||||
type: '',
|
||||
name: '',
|
||||
position: [0, 0],
|
||||
rotation: 0,
|
||||
scale: [1, 1]
|
||||
};
|
||||
},
|
||||
save() {
|
||||
this.$emit('save');
|
||||
},
|
||||
back() {
|
||||
this.$router.go(-1);
|
||||
},
|
||||
handleTabClick() {
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.styleGroup{height:100%}
|
||||
.styleGroup .elementCard {
|
||||
height:100%;
|
||||
width:400px;
|
||||
}
|
||||
#drawSettingPane,#modelModifyPane{height:100%;display: flex;flex-direction:column;}
|
||||
/deep/ .el-form-item__content{
|
||||
text-align: left;
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
#modelModifyPane .eachElementPane .el-tabs__nav .el-tabs__item.is-top.is-active{
|
||||
padding: 0px 10px;
|
||||
border-bottom: 2px solid !important;
|
||||
}
|
||||
</style>
|
||||
|
140
src/views/newDraw/edit.vue
Normal file
140
src/views/newDraw/edit.vue
Normal file
@ -0,0 +1,140 @@
|
||||
<template>
|
||||
<div id="app" style="width: 100%;height: 100%;">
|
||||
<!--<jl-model-builder type="测试类型" composeName="测试名称" :model="model" @save="save"></jl-model-builder>-->
|
||||
<jl-picture-builder ref="jlPictureBuilder" :model="model" :compose-map="composeMap" @selectChange="selectChange" />
|
||||
<div style="height: 300px;background: #fff;z-index: 999;position: absolute;top: 70px;left: 0;overflow:auto">
|
||||
<div v-for="item in modelList" :key="item.code">
|
||||
<el-button size="mini" style="margin: 5px" @click="addModel(item)">{{ item.name }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<draw-form
|
||||
ref="drawForm"
|
||||
:model="model"
|
||||
style="position: absolute;right: 0;top: 60px;height: calc(100% - 60px);"
|
||||
@updateCompose="updateCompose"
|
||||
@deleteCompose="deleteCompose"
|
||||
@save="save"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import DrawForm from './drawForm';
|
||||
import { getModelListUnpage } from '@/api/management/model';
|
||||
import { getCircuitryDraftDataById, updateCircuitryDraft } from '@/api/circuitryDraft';
|
||||
export default {
|
||||
name: 'Edit',
|
||||
components: {
|
||||
DrawForm
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
composeMap: {},
|
||||
model: [],
|
||||
modelList: []
|
||||
};
|
||||
},
|
||||
async mounted() {
|
||||
const res = await getCircuitryDraftDataById(this.$route.params.id);
|
||||
const resp = await getModelListUnpage();
|
||||
this.modelList = resp.data;
|
||||
this.modelList.forEach(item => {
|
||||
this.composeMap[item.code] = item;
|
||||
});
|
||||
if (res.data.drawData) {
|
||||
const data = JSON.parse(res.data.drawData);
|
||||
this.model = data.model || [];
|
||||
this.$refs.jlPictureBuilder.setMap(this.model);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
test() {
|
||||
this.$refs.jlPictureBuilder.update([]);
|
||||
},
|
||||
save(model) {
|
||||
const data = {
|
||||
id: this.$route.params.id,
|
||||
// compose: Object.keys(this.composeMap)
|
||||
drawData: JSON.stringify({ model:this.model })
|
||||
};
|
||||
updateCircuitryDraft(this.$route.params.id, data).then(resp => {
|
||||
this.$message.success('保存草稿数据成功!');
|
||||
}).catch(() => {
|
||||
this.$message.error('保存草稿数据错误!');
|
||||
});
|
||||
},
|
||||
addModel(model) {
|
||||
// if (!this.composeMap[model.code]) {
|
||||
// this.composeMap[model.code] = JSON.parse(model.jsonData);
|
||||
// }
|
||||
const addModel = {
|
||||
code: this.getUID(model.code),
|
||||
position: [100, 100],
|
||||
type: model.code,
|
||||
name: model.name,
|
||||
rotation: 0,
|
||||
scale: [1, 1],
|
||||
modifyAttritubes:{}
|
||||
// shapeList: this.composeMap[model.code].shapeList
|
||||
};
|
||||
this.model.push(addModel);
|
||||
this.$refs.jlPictureBuilder.update([{model: addModel, action:{order:'&Add', shapeType: 'Compose'}}]);
|
||||
},
|
||||
// addModel(model) {
|
||||
// this.addModelData = model;
|
||||
// this.$refs.jlPictureBuilder.addingModel();
|
||||
// },
|
||||
// selectPoint(point) {
|
||||
// if (!this.composeMap[this.addModelData.code]) {
|
||||
// this.composeMap[this.addModelData.code] = JSON.parse(this.addModelData.jsonData);
|
||||
// }
|
||||
// const addModel = {
|
||||
// code: this.getUID(this.addModelData.code),
|
||||
// position: [point.x, point.y],
|
||||
// type: this.addModelData.code,
|
||||
// name: this.addModelData.name,
|
||||
// rotation: 0,
|
||||
// scale: [1, 1],
|
||||
// shapeList: this.composeMap[model.code].shapeList
|
||||
// };
|
||||
// this.model.push(addModel);
|
||||
// this.$refs.jlPictureBuilder.update([{model: addModel, action:{order:'&Add', shapeType: 'Compose'}}]);
|
||||
// },
|
||||
updateCompose(model) {
|
||||
const updateModel = {
|
||||
code: model.code,
|
||||
position: model.position,
|
||||
type: model.type,
|
||||
name: model.name,
|
||||
rotation: model.rotation,
|
||||
scale: model.scale
|
||||
// shapeList: this.composeMap[model.code].shapeList
|
||||
};
|
||||
const index = this.model.findIndex(item => item.code === model.code);
|
||||
this.model.splice(index, 1, updateModel);
|
||||
this.$refs.jlPictureBuilder.update([{model: updateModel, action:{order:'&UPT', shapeType: 'Compose'}}]);
|
||||
},
|
||||
deleteCompose(model) {
|
||||
const index = this.model.findIndex(item => item.code === model.code);
|
||||
this.model.splice(index, 1);
|
||||
this.$refs.jlPictureBuilder.update([{model: model, action:{order:'&DEL', shapeType: 'Compose'}}]);
|
||||
},
|
||||
getUID (type, base = 0) {
|
||||
return [(type || ''), base++, Math.random().toFixed(5)].join('_');
|
||||
},
|
||||
selectChange(compose) {
|
||||
this.$refs.drawForm.selectChange(compose);
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
#app {
|
||||
font-family: "Avenir", Helvetica, Arial, sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
text-align: center;
|
||||
color: #2c3e50;
|
||||
}
|
||||
</style>
|
139
src/views/newDraw/list.vue
Normal file
139
src/views/newDraw/list.vue
Normal file
@ -0,0 +1,139 @@
|
||||
<template>
|
||||
<div class="container">
|
||||
<QueryListPage :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
|
||||
<create-dialog ref="createDialog" @close="closeCreate" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { queryCircuitryDraftListPaging, deleteCircuitryDarft } from '@/api/circuitryDraft';
|
||||
import CreateDialog from './create';
|
||||
export default {
|
||||
name: 'UserModelDesign',
|
||||
components: {
|
||||
CreateDialog
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dialogs: {
|
||||
createShow: false,
|
||||
createMode: ''
|
||||
},
|
||||
pagerConfig: {
|
||||
pageSize: 'pageSize',
|
||||
pageIndex: 'pageNum'
|
||||
},
|
||||
queryForm: {
|
||||
labelWidth: '80px',
|
||||
reset: true,
|
||||
queryObject: {
|
||||
code: {
|
||||
type: 'text',
|
||||
label: '地图编号'
|
||||
},
|
||||
name: {
|
||||
type: 'text',
|
||||
label: '地图名称'
|
||||
}
|
||||
}
|
||||
},
|
||||
queryList: {
|
||||
query: this.queryModelDraftList,
|
||||
selectCheckShow: false,
|
||||
indexShow: true,
|
||||
columns: [
|
||||
{
|
||||
title: '地图编号',
|
||||
prop: 'id'
|
||||
},
|
||||
{
|
||||
title: '地图名称',
|
||||
prop: 'name'
|
||||
},
|
||||
{
|
||||
title: '创建时间',
|
||||
prop: 'createTime'
|
||||
},
|
||||
{
|
||||
title: '修改时间',
|
||||
prop: 'updateTime'
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
title: this.$t('global.operate'),
|
||||
width: '350',
|
||||
buttons: [
|
||||
// {
|
||||
// name: this.$t('global.edit'),
|
||||
// handleClick: this.handleEdit
|
||||
// },
|
||||
{
|
||||
name: '绘图',
|
||||
handleClick: this.handleDraw
|
||||
},
|
||||
{
|
||||
name: this.$t('global.delete'),
|
||||
handleClick: this.handleDelete,
|
||||
type: 'danger'
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
actions: [{ text: this.$t('global.add'), handler: this.handleCreate }]
|
||||
},
|
||||
pubdModel: ''
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
|
||||
queryModelDraftList(params) {
|
||||
return queryCircuitryDraftListPaging(params);
|
||||
},
|
||||
|
||||
handleCreate() {
|
||||
this.$refs.createDialog.show();
|
||||
},
|
||||
|
||||
closeCreate(e) {
|
||||
this.reloadTable();
|
||||
},
|
||||
|
||||
handleEdit(index, data) {
|
||||
this.$refs.createDialog.show('edit', data);
|
||||
},
|
||||
|
||||
handleDelete(idx, data) {
|
||||
this.$confirm('确认删除?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
center: true
|
||||
})
|
||||
.then(
|
||||
() => {
|
||||
deleteCircuitryDarft(data.id).then(() => {
|
||||
this.reloadTable();
|
||||
});
|
||||
},
|
||||
() => {}
|
||||
)
|
||||
.catch(e => {
|
||||
this.$message(e);
|
||||
});
|
||||
},
|
||||
|
||||
handleDraw(idx, data) {
|
||||
this.$router.push({ path: `newdraw/${data.id}/edit` });
|
||||
},
|
||||
|
||||
reloadTable() {
|
||||
this.queryList.reload();
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.container {
|
||||
padding: 20px;
|
||||
}
|
||||
</style>
|
280
src/views/organization/examManage/gradeStatistics.vue
Normal file
280
src/views/organization/examManage/gradeStatistics.vue
Normal file
@ -0,0 +1,280 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="title_content">{{ $route.query.name + ' 成绩统计' }}</div>
|
||||
<el-button type="text" style="position: fixed;right: 20px;top: 70px;" @click="back">返回</el-button>
|
||||
<div class="gradeStatisticPane">
|
||||
<el-form
|
||||
ref="queryForm"
|
||||
size="small"
|
||||
style="padding-top: 18px;"
|
||||
>
|
||||
<el-form-item prop="orgId" label="班级:" :required="false">
|
||||
<el-select
|
||||
ref="orgId"
|
||||
v-model="orgId"
|
||||
:clearable="false"
|
||||
:placeholder="$t('global.choose')"
|
||||
filterable
|
||||
@change="onChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="option in classList"
|
||||
:key="option['value']"
|
||||
:label="option['label']"
|
||||
:value="option['value']"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="statisticChart">
|
||||
<div id="mychart1" class="statisticChartLeft" />
|
||||
<div id="mychart2" class="statisticChartRight" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import * as echarts from 'echarts';
|
||||
import { getClassGradeStatistic } from '@/api/management/userexam';
|
||||
import { getClassListUnPage } from '@/api/company';
|
||||
import { getExamLessonDetail } from '@/api/management/exam';
|
||||
import localStore from 'storejs';
|
||||
export default {
|
||||
name: 'GradeStatistics',
|
||||
data() {
|
||||
return {
|
||||
orgId:'',
|
||||
myChart1:null,
|
||||
userNameList:[],
|
||||
gradeList:[],
|
||||
classList:[],
|
||||
durationList:[],
|
||||
fullPoint:0,
|
||||
passingPoint:0,
|
||||
duration:0,
|
||||
title:{
|
||||
show:true,
|
||||
text:'成绩分布',
|
||||
textAlign:'center',
|
||||
left:'50%',
|
||||
top:'5px',
|
||||
textStyle:{
|
||||
color:'#f00'
|
||||
}
|
||||
},
|
||||
title1:{
|
||||
show:true,
|
||||
text:' 答题时长区间人数 ',
|
||||
// 各分数区间人数统计
|
||||
textAlign:'center',
|
||||
left:'50%',
|
||||
top:'5px',
|
||||
textStyle:{
|
||||
color:'#f00'
|
||||
}
|
||||
},
|
||||
yAxis1:{
|
||||
position:'left',
|
||||
name:'人数',
|
||||
nameLocation:'end',
|
||||
minInterval:1,
|
||||
nameTextStyle:{
|
||||
align:'left',
|
||||
fontSize:14
|
||||
},
|
||||
axisLine:{show:true}
|
||||
},
|
||||
yAxis:{
|
||||
position:'left',
|
||||
name:'分数',
|
||||
nameLocation:'end',
|
||||
min:0,
|
||||
nameTextStyle:{
|
||||
align:'left',
|
||||
fontSize:14
|
||||
},
|
||||
axisLine:{show:true}
|
||||
},
|
||||
durationInterval:[]
|
||||
};
|
||||
},
|
||||
async created() {
|
||||
const resp = await getClassListUnPage();
|
||||
resp.data && resp.data.forEach(item => {
|
||||
this.classList.push({ value: item.id, label: item.name });
|
||||
});
|
||||
localStore.set(this.$route.path, { orgId: this.classList[0].value + '' });
|
||||
this.orgId = this.classList[0].value;
|
||||
const res = await getExamLessonDetail(this.$route.query.examId);
|
||||
if (res.data) {
|
||||
this.yAxis.max = res.data.fullPoint;
|
||||
this.passingPoint = res.data.passingPoint;
|
||||
this.duration = res.data.duration;
|
||||
}
|
||||
var chartDom1 = document.getElementById('mychart1');
|
||||
this.myChart1 = echarts.init(chartDom1);
|
||||
var chartDom2 = document.getElementById('mychart2');
|
||||
this.myChart2 = echarts.init(chartDom2);
|
||||
const eachInterval = this.duration / 6;
|
||||
this.durationInterval = ['0-' + eachInterval,
|
||||
eachInterval + '-' + eachInterval * 2,
|
||||
eachInterval * 2 + '-' + eachInterval * 3,
|
||||
eachInterval * 3 + '-' + eachInterval * 4,
|
||||
eachInterval * 4 + '-' + eachInterval * 5,
|
||||
eachInterval * 5 + '-' + eachInterval * 6
|
||||
];
|
||||
this.getClassGradeStatis();
|
||||
},
|
||||
methods: {
|
||||
back() {
|
||||
this.$router.go(-1);
|
||||
},
|
||||
getClassGradeStatis() {
|
||||
if (this.orgId) {
|
||||
this.userNameList = [];
|
||||
this.gradeList = [];
|
||||
// this.myChart1.restore();
|
||||
getClassGradeStatistic(this.orgId, this.$route.query.examId).then(resp=>{
|
||||
const results = resp.data;
|
||||
if (results) {
|
||||
const gradeList = results.results;
|
||||
const countList = [0, 0, 0, 0, 0];
|
||||
if (gradeList.length > 0) {
|
||||
gradeList.forEach(each=>{
|
||||
this.userNameList.push(each.username || '');
|
||||
this.gradeList.push(each.score);
|
||||
this.durationList.push(each.duration || 0);
|
||||
countList[Math.floor((each.duration || 0) / (this.duration / 6))]++;
|
||||
});
|
||||
const option = {
|
||||
title:this.title,
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
axisLabel:{
|
||||
show :false
|
||||
},
|
||||
data:this.userNameList
|
||||
},
|
||||
tooltip:{
|
||||
show:true,
|
||||
trigger:'item'
|
||||
},
|
||||
yAxis: this.yAxis,
|
||||
series: [
|
||||
{
|
||||
symbolSize: 10,
|
||||
data:this.gradeList,
|
||||
type: 'scatter'
|
||||
}
|
||||
]
|
||||
};
|
||||
const option1 = {
|
||||
title1:this.title1,
|
||||
xAxis: {
|
||||
name:'时长区间/s',
|
||||
type: 'category',
|
||||
data: this.durationInterval
|
||||
},
|
||||
yAxis: this.yAxis1,
|
||||
tooltip:{
|
||||
show:true,
|
||||
trigger:'axis'
|
||||
},
|
||||
series: [
|
||||
{
|
||||
data:countList,
|
||||
type: 'bar'
|
||||
}
|
||||
]
|
||||
};
|
||||
option && this.myChart1 && this.myChart1.setOption(option);
|
||||
option1 && this.myChart2 && this.myChart2.setOption(option1);
|
||||
// debugger;
|
||||
// id": "92",
|
||||
// "userId": "92",
|
||||
// "account": "d8h4pz",
|
||||
// "username": "博涛.朱",
|
||||
// "examId": "92",
|
||||
// "examName": "博涛.朱",
|
||||
// "score": 29.38,
|
||||
// "usedTime": 727,
|
||||
// "result": "dbw206",
|
||||
// "duration": 429,
|
||||
}
|
||||
}
|
||||
}).catch((error) => {
|
||||
const option = {
|
||||
title:this.title,
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data:[]
|
||||
},
|
||||
yAxis:this.yAxis,
|
||||
series: [
|
||||
{
|
||||
symbolSize: 20,
|
||||
data:[],
|
||||
type: 'scatter'
|
||||
}
|
||||
]
|
||||
};
|
||||
const option1 = {
|
||||
title:this.title1,
|
||||
xAxis: {
|
||||
name:'时长区间/s',
|
||||
type: 'category',
|
||||
data: this.durationInterval
|
||||
},
|
||||
yAxis:this.yAxis1,
|
||||
series: [
|
||||
{
|
||||
data:[],
|
||||
type: 'bar'
|
||||
}
|
||||
]
|
||||
};
|
||||
option && this.myChart1 && this.myChart1.setOption(option);
|
||||
option1 && this.myChart2 && this.myChart2.setOption(option1);
|
||||
this.$message.error(error.message);
|
||||
});
|
||||
|
||||
}
|
||||
},
|
||||
onChange(data) {
|
||||
this.getClassGradeStatis();
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.title_content {
|
||||
width: 100%;
|
||||
margin: 20px 0 30px;
|
||||
text-align: center;
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.gradeStatisticPane{
|
||||
margin: 0 auto;
|
||||
width: 300px;
|
||||
}
|
||||
.statisticChart{
|
||||
/* margin-left: 50%; */
|
||||
/* transform: translateX(-50%); */
|
||||
width:90%;
|
||||
display: flex;
|
||||
margin-left:5%;
|
||||
}
|
||||
.statisticChartLeft{
|
||||
width: 50%;
|
||||
display: inline-block;
|
||||
height: 700px;
|
||||
/* border:1px #ccc solid */
|
||||
}
|
||||
.statisticChartRight{
|
||||
width: 50%;
|
||||
display: inline-block;
|
||||
height: 700px;
|
||||
/* border:1px #ccc solid */
|
||||
}
|
||||
</style>
|
@ -122,13 +122,18 @@ export default {
|
||||
{
|
||||
type: 'button',
|
||||
title: this.$t('global.operate'),
|
||||
width: '250',
|
||||
width: '350',
|
||||
buttons: [
|
||||
{
|
||||
name: '成绩查询',
|
||||
handleClick: this.handleQueryGrade,
|
||||
type: 'primary'
|
||||
},
|
||||
{
|
||||
name: '成绩统计',
|
||||
handleClick: this.handleGradeStatistics,
|
||||
type: 'success'
|
||||
},
|
||||
{
|
||||
name: '编辑',
|
||||
handleClick: this.handleEditExam,
|
||||
@ -180,6 +185,9 @@ export default {
|
||||
handleQueryGrade(index, row) {
|
||||
this.$router.push({ path: '/info/gradeList', query: { examId: row.id, name: row.name } });
|
||||
},
|
||||
handleGradeStatistics(index, row) {
|
||||
this.$router.push({ path: '/info/gradeStatistics', query: { examId: row.id, name: row.name } });
|
||||
},
|
||||
handleEditExam(index, row) {
|
||||
this.$router.push({ path: `/info/examRule/draft/edit/${row.id}/0`, query: { source: 'org' } });
|
||||
},
|
||||
|
@ -26,7 +26,6 @@ export default {
|
||||
reset: false,
|
||||
show: false,
|
||||
queryObject: {}
|
||||
|
||||
},
|
||||
queryList: {
|
||||
query: this.queryFunction,
|
||||
|
75
src/views/publish/userModel/components/editInfo.vue
Normal file
75
src/views/publish/userModel/components/editInfo.vue
Normal file
@ -0,0 +1,75 @@
|
||||
<template>
|
||||
<el-dialog v-dialogDrag :visible.sync="visible" :title="title" center :destroy-on-close="true">
|
||||
<el-form :model="formData" :rules="formRules" ref="form">
|
||||
<!-- <el-form-item label="模型编号" prop="code">
|
||||
<el-input v-model="formData.code"></el-input>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="模型名称" prop="name">
|
||||
<el-input v-model="formData.name"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="版本" prop="version">
|
||||
<el-select v-model="formData.version">
|
||||
<el-option
|
||||
v-for="item in versionOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="close">取 消</el-button>
|
||||
<el-button type="primary" @click="confirmHandler">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getModelVersions } from "@/api/management/model";
|
||||
export default {
|
||||
name: "EditModelInfo",
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
title: "编辑模型",
|
||||
formData: { code: "", name: "", type: "", version: "" },
|
||||
versionOptions: [
|
||||
{
|
||||
label: "",
|
||||
value: ""
|
||||
}
|
||||
],
|
||||
formRules: {
|
||||
// code: [{ required: true, message: "请输入模型编号", trigger: "blur" }],
|
||||
name: [{ required: true, message: "请输入模型名称", trigger: "blur" }]
|
||||
}
|
||||
};
|
||||
},
|
||||
mounted() {},
|
||||
methods: {
|
||||
initVersionInfo(code) {
|
||||
getModelVersions(code).then(res => {
|
||||
this.versionOptions = res.data.map(e => {
|
||||
return {
|
||||
label: e.version,
|
||||
value: e.version
|
||||
};
|
||||
});
|
||||
});
|
||||
},
|
||||
show(data) {
|
||||
this.formData = data;
|
||||
this.initVersionInfo(data.code);
|
||||
this.visible = true;
|
||||
},
|
||||
close() {
|
||||
this.visible = false;
|
||||
this.$emit("close");
|
||||
},
|
||||
confirmHandler() {}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style></style>
|
95
src/views/publish/userModel/history.vue
Normal file
95
src/views/publish/userModel/history.vue
Normal file
@ -0,0 +1,95 @@
|
||||
<template>
|
||||
<div class="container">
|
||||
<QueryListPage :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
|
||||
<div class="btn-area">
|
||||
<el-button type="primary" @click="goBack">返回</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getModelVersionsPaging, setModelVersion } from "@/api/management/model";
|
||||
export default {
|
||||
name: "ModelHistory",
|
||||
data() {
|
||||
return {
|
||||
pagerConfig: {
|
||||
pageSize: "pageSize",
|
||||
pageIndex: "pageNum"
|
||||
},
|
||||
queryForm: {
|
||||
labelWidth: "80px",
|
||||
reset: false,
|
||||
show: false,
|
||||
queryObject: {}
|
||||
},
|
||||
queryList: {
|
||||
query: this.queryFunction,
|
||||
selectCheckShow: false,
|
||||
indexShow: true,
|
||||
columns: [
|
||||
{
|
||||
title: "模型编号",
|
||||
prop: "code"
|
||||
// width:'300px'
|
||||
},
|
||||
{
|
||||
title: "模型名称",
|
||||
prop: "name"
|
||||
// width:'200px'
|
||||
},
|
||||
{
|
||||
title: "版本",
|
||||
prop: "version"
|
||||
// width:'200px'
|
||||
},
|
||||
{
|
||||
title: "创建人ID",
|
||||
prop: "createUserId"
|
||||
},
|
||||
{
|
||||
title: "修改时间",
|
||||
prop: "updateTime"
|
||||
},
|
||||
{
|
||||
type: "button",
|
||||
title: this.$t("global.operate"),
|
||||
width: "100",
|
||||
buttons: [
|
||||
{
|
||||
name: "应用",
|
||||
handleClick: this.handleApply
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
queryFunction() {
|
||||
return getModelVersionsPaging(this.$route.query.code);
|
||||
},
|
||||
goBack() {
|
||||
this.$router.go(-1)
|
||||
},
|
||||
handleApply(row, data) {
|
||||
const {code, version} = {...data}
|
||||
setModelVersion(code, version).then(resp=>{
|
||||
this.$message.success(`成功切换为${version}版本`)
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.container {
|
||||
padding: 10px;
|
||||
.btn-area {
|
||||
display: flex;
|
||||
padding: 10px;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
</style>
|
105
src/views/publish/userModel/index.vue
Normal file
105
src/views/publish/userModel/index.vue
Normal file
@ -0,0 +1,105 @@
|
||||
<template>
|
||||
<div class="container">
|
||||
<QueryListPage :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
|
||||
<edit-model-info ref="editDialog" @close="reloadTable" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getModelList } from "@/api/management/model";
|
||||
import EditModelInfo from "./components/editInfo";
|
||||
export default {
|
||||
name: "publishModel",
|
||||
components: { EditModelInfo },
|
||||
data() {
|
||||
return {
|
||||
pagerConfig: {
|
||||
pageSize: "pageSize",
|
||||
pageIndex: "pageNum"
|
||||
},
|
||||
queryForm: {
|
||||
labelWidth: "80px",
|
||||
reset: true,
|
||||
queryObject: {
|
||||
code: {
|
||||
type: "text",
|
||||
label: "模型编号"
|
||||
},
|
||||
name: {
|
||||
type: "text",
|
||||
label: "模型名称"
|
||||
},
|
||||
type: {
|
||||
type: "text",
|
||||
label: "模型类型"
|
||||
}
|
||||
}
|
||||
},
|
||||
queryList: {
|
||||
query: this.queryPublishedModelList,
|
||||
selectCheckShow: false,
|
||||
indexShow: true,
|
||||
columns: [
|
||||
{
|
||||
title: "模型编号",
|
||||
prop: "code"
|
||||
},
|
||||
{
|
||||
title: "模型名称",
|
||||
prop: "name"
|
||||
},{
|
||||
title: '当前版本',
|
||||
prop: "version"
|
||||
},
|
||||
{
|
||||
title: "创建时间",
|
||||
prop: "createTime"
|
||||
},
|
||||
{
|
||||
title: "修改时间",
|
||||
prop: "updateTime"
|
||||
},
|
||||
{
|
||||
type: "button",
|
||||
title: this.$t("global.operate"),
|
||||
width: "350",
|
||||
buttons: [
|
||||
// {
|
||||
// name: "编辑信息",
|
||||
// handleClick: this.handleEdit
|
||||
// },
|
||||
{
|
||||
name: "发布历史",
|
||||
handleClick: this.handleHistory
|
||||
},
|
||||
// {
|
||||
// name: this.$t("global.delete"),
|
||||
// handleClick: this.handleDelete,
|
||||
// type: "danger"
|
||||
// }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
queryPublishedModelList(params) {
|
||||
return getModelList(params);
|
||||
},
|
||||
reloadTable() {
|
||||
this.queryList.reload();
|
||||
},
|
||||
handleEdit(row, data) {
|
||||
this.$refs.editDialog.show(data);
|
||||
},
|
||||
handleDelete(row, data) {},
|
||||
handleHistory(row, data) {
|
||||
console.log(data.code);
|
||||
this.$router.push({ name: `modelHistory`, query: { code: data.code } });
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="sass" scoped></style>
|
71
src/views/userModelDesign/draftList/components/create.vue
Normal file
71
src/views/userModelDesign/draftList/components/create.vue
Normal file
@ -0,0 +1,71 @@
|
||||
<template>
|
||||
<el-dialog v-dialogDrag :visible.sync="visible" :title="title" center :destroy-on-close="true">
|
||||
<el-form :model="formData" :rules="formRules" ref="form">
|
||||
<el-form-item label="模型编号" prop="code">
|
||||
<el-input v-model="formData.code"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="模型名称" prop="name">
|
||||
<el-input v-model="formData.name"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="close">取 消</el-button>
|
||||
<el-button type="primary" @click="confirmHandler">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { createModelDraft, updateModelDraftInfo } from "@/api/management/model";
|
||||
export default {
|
||||
name: "createModelDraftDialog",
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
mode: "",
|
||||
formData: { code: "", name: "", type: "", version: "" },
|
||||
formRules: {
|
||||
code: [{ required: true, message: "请输入模型编号", trigger: "blur" }],
|
||||
name: [{ required: true, message: "请输入模型名称", trigger: "blur" }]
|
||||
}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
submit() {
|
||||
return this.mode === "edit" ? updateModelDraftInfo : createModelDraft;
|
||||
},
|
||||
title() {
|
||||
return {
|
||||
edit: "修改模型信息",
|
||||
create: "新建模型"
|
||||
}[this.mode];
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
show(mode, data) {
|
||||
this.mode = mode;
|
||||
if (mode === "edit") {
|
||||
this.formData = data;
|
||||
} else {
|
||||
this.formData = { code: "", name: "", type: "", version: "" };
|
||||
}
|
||||
this.visible = true;
|
||||
},
|
||||
close() {
|
||||
this.visible = false;
|
||||
this.$emit("close");
|
||||
},
|
||||
confirmHandler() {
|
||||
this.$refs.form.validate(valid => {
|
||||
if (valid) {
|
||||
this.submit(this.formData).then(resp => {
|
||||
this.close();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
169
src/views/userModelDesign/draftList/index.vue
Normal file
169
src/views/userModelDesign/draftList/index.vue
Normal file
@ -0,0 +1,169 @@
|
||||
<template>
|
||||
<div class="container">
|
||||
<QueryListPage :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
|
||||
<create-model-draft-dialog ref="createDialog" @close="closeCreate" />
|
||||
<el-button @click="getList">queryPublishedModel</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getModelDraftList, publishModelDraft, deleteModelDraft, getModelList } from "@/api/management/model";
|
||||
import createModelDraftDialog from "./components/create";
|
||||
|
||||
export default {
|
||||
name: "userModelDesign",
|
||||
components: { createModelDraftDialog },
|
||||
data() {
|
||||
return {
|
||||
dialogs: {
|
||||
createShow: false,
|
||||
createMode: ""
|
||||
},
|
||||
pagerConfig: {
|
||||
pageSize: "pageSize",
|
||||
pageIndex: "pageNum"
|
||||
},
|
||||
queryForm: {
|
||||
labelWidth: "80px",
|
||||
reset: true,
|
||||
queryObject: {
|
||||
code: {
|
||||
type: "text",
|
||||
label: "模型编号"
|
||||
},
|
||||
name: {
|
||||
type: "text",
|
||||
label: "模型名称"
|
||||
}
|
||||
}
|
||||
},
|
||||
queryList: {
|
||||
query: this.queryModelDraftList,
|
||||
selectCheckShow: false,
|
||||
indexShow: true,
|
||||
columns: [
|
||||
{
|
||||
title: "模型编号",
|
||||
prop: "code"
|
||||
},
|
||||
{
|
||||
title: "模型名称",
|
||||
prop: "name"
|
||||
},
|
||||
{
|
||||
title: "创建时间",
|
||||
prop: "createTime"
|
||||
},
|
||||
{
|
||||
title: "修改时间",
|
||||
prop: "updateTime"
|
||||
},
|
||||
{
|
||||
type: "button",
|
||||
title: this.$t("global.operate"),
|
||||
width: "350",
|
||||
buttons: [
|
||||
{
|
||||
name: this.$t("global.edit"),
|
||||
handleClick: this.handleEdit
|
||||
},
|
||||
{
|
||||
name: "绘图",
|
||||
handleClick: this.handleDraw
|
||||
},
|
||||
{
|
||||
name: "发布",
|
||||
handleClick: this.handlePublish,
|
||||
type: "success"
|
||||
},
|
||||
{
|
||||
name: this.$t("global.delete"),
|
||||
handleClick: this.handleDelete,
|
||||
type: "danger"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
actions: [{ text: this.$t("global.add"), handler: this.handleCreate }]
|
||||
},
|
||||
pubdModel: ''
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
|
||||
getList(){
|
||||
getModelList().then(res=>{
|
||||
console.log(res.data)
|
||||
})
|
||||
},
|
||||
|
||||
queryModelDraftList(params) {
|
||||
return getModelDraftList(params);
|
||||
},
|
||||
|
||||
handleCreate() {
|
||||
this.$refs.createDialog.show("create");
|
||||
},
|
||||
|
||||
closeCreate(e) {
|
||||
this.reloadTable();
|
||||
},
|
||||
|
||||
handleEdit(index, data) {
|
||||
this.$refs.createDialog.show("edit", data);
|
||||
},
|
||||
|
||||
handleDelete(idx, data) {
|
||||
this.$confirm("确认删除?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
center: true
|
||||
})
|
||||
.then(
|
||||
() => {
|
||||
deleteModelDraft(data.id).then(() => {
|
||||
this.reloadTable();
|
||||
});
|
||||
},
|
||||
() => {}
|
||||
)
|
||||
.catch(e => {
|
||||
this.$message(e);
|
||||
});
|
||||
},
|
||||
|
||||
handleDraw(idx, data) {
|
||||
this.$router.push({ path: `usermodel/${data.id}/edit` });
|
||||
},
|
||||
|
||||
handlePublish(idx, data) {
|
||||
this.$confirm("确认发布?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
center: true
|
||||
})
|
||||
.then(
|
||||
() => {
|
||||
publishModelDraft(data.id).then(() => {
|
||||
this.reloadTable();
|
||||
});
|
||||
},
|
||||
() => {}
|
||||
)
|
||||
.catch(e => {
|
||||
this.$message(e);
|
||||
});
|
||||
},
|
||||
|
||||
reloadTable() {
|
||||
this.queryList.reload();
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.container {
|
||||
padding: 20px;
|
||||
}
|
||||
</style>
|
49
src/views/userModelDesign/edit/index.vue
Normal file
49
src/views/userModelDesign/edit/index.vue
Normal file
@ -0,0 +1,49 @@
|
||||
<template>
|
||||
<jl-model-builder :id="id" :compose-name="name" :model="model" :type="type" @save="onSave" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { updateModelDraftData, getModelDraftData } from '@/api/management/model';
|
||||
export default {
|
||||
name: 'EditModel',
|
||||
data() {
|
||||
return {
|
||||
name: '',
|
||||
id: '',
|
||||
type: '',
|
||||
model: {}
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.id = this.$route.params.id;
|
||||
this.initModelData();
|
||||
},
|
||||
methods: {
|
||||
initModelData() {
|
||||
getModelDraftData(this.id).then(res => {
|
||||
const data = res.data;
|
||||
this.name = data.name;
|
||||
this.type = data.type || '';
|
||||
this.model = data.jsonData ? JSON.parse(data.jsonData) : {};
|
||||
});
|
||||
},
|
||||
onSave(payload) {
|
||||
console.log(payload);
|
||||
const data = {
|
||||
id: this.id,
|
||||
name: this.name,
|
||||
jsonData: JSON.stringify(payload)
|
||||
};
|
||||
updateModelDraftData(data)
|
||||
.then(resp => {
|
||||
this.$message('保存成功');
|
||||
})
|
||||
.catch(e => {
|
||||
this.$message('error', e);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
Loading…
Reference in New Issue
Block a user