diff --git a/.drone.yml b/.drone.yml index 4d7a73c..f2400d2 100644 --- a/.drone.yml +++ b/.drone.yml @@ -25,9 +25,9 @@ steps: - npm -v - mkdir -p ./node_modules - export NODE_MODULES_PATH=`pwd`/node_modules - #- npm config set registry https://registry.npm.taobao.org + # - npm config set registry https://registry.npmmirror.com #- set NODE_OPTIONS=--openssl-legacy-provider - # - npm install + # - npm install - npm run build - ls /app/build/$DRONE_REPO_NAME/ - echo $NODE_MODULES_PATH diff --git a/index.html b/index.html index 264b8e9..7056f8c 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - 科研管理平台 +
diff --git a/package-lock.json b/package-lock.json index 3af5f7a..bde52a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "axios": "^1.4.0", "d3": "^7.8.5", "echarts": "^5.4.2", - "element-plus": "^2.3.5", + "element-plus": "^2.6.0", "highlight.js": "9.18.5", "jquery": "^3.6.0", "js-cookie": "^3.0.5", diff --git a/package.json b/package.json index afaa0d7..a1ae3a7 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "axios": "^1.4.0", "d3": "^7.8.5", "echarts": "^5.4.2", - "element-plus": "^2.3.5", + "element-plus": "^2.6.0", "highlight.js": "9.18.5", "jquery": "^3.6.0", "js-cookie": "^3.0.5", diff --git a/src/api/home/index.js b/src/api/home/index.js new file mode 100644 index 0000000..f62d17b --- /dev/null +++ b/src/api/home/index.js @@ -0,0 +1,8 @@ +import request from '@/utils/request.js' + +export const getHomeInfo = () => { + return request({ + url: '/workflow/mosr/process/task', + method: "get" + }); +}; diff --git a/src/api/project-demand/index.js b/src/api/project-demand/index.js new file mode 100644 index 0000000..928514b --- /dev/null +++ b/src/api/project-demand/index.js @@ -0,0 +1,84 @@ +import request from '@/utils/request.js' +//需求征集 +export const getDemandInfo = (param) => { + return request({ + url: '/workflow/mosr/requirement', + method: "get", + params: param + }); +}; +export const getWorkflowInfo = () => { + return request({ + url: '/workflow/mosr/requirement/process', + method: "get" + }); +}; +export const getInfo = (requirementId) => { + return request({ + url: `/workflow/mosr/requirement/info/${requirementId}`, + method: "get" + }); +}; +export const getFormInfo = (requirementId) => { + return request({ + url: `/workflow/mosr/requirement/form/${requirementId}`, + method: "get" + }); +}; +export const agreeTask = (data) => { + return request({ + url: `/workflow/mosr/process/task/agree`, + method: "post", + data: data + }); +}; +export const rejectTask = (data) => { + return request({ + url: `/workflow/mosr/process/task/reject`, + method: "post", + data: data + }); +}; + +export const addRequirement = (data) => { + return request({ + url: '/workflow/mosr/requirement', + method: "post", + data: data + }); +}; +export const resubmit = (data) => { + return request({ + url: '/workflow/mosr/requirement/resubmit', + method: "post", + data: data + }); +}; +export const deleteFile = (fileId) => { + return request({ + url: `/workflow/process/file/delete/${fileId}`, + method: "delete" + }); +}; +export const downloadFile = (fileId) => { + return request({ + url: '/workflow/process/file/download', + method: "get", + responseType:'blob', + params:{ + fileId:fileId + } + }); +}; +export const getCompanyOption = () => { + return request({ + url: '/admin/mosr/sub/company/companyOption', + method: "get" + }); +}; +export const deleteDemand = (id) => { + return request({ + url: `/workflow/mosr/requirement/${id}`, + method: "delete" + }); +}; diff --git a/src/api/project-manage/index.js b/src/api/project-manage/index.js new file mode 100644 index 0000000..d4b0d08 --- /dev/null +++ b/src/api/project-manage/index.js @@ -0,0 +1,86 @@ +import request from '@/utils/request.js' +//项目立项 +export const getApplyProcess = (projectId) => { + return request({ + url: `/workflow/mosr/project/approval/initiation/process/${projectId}`, + method: "get" + }); +}; +export const projectApply = (data) => { + return request({ + url: '/workflow/mosr/project/approval/initiation/apply', + method: "post", + data: data + }); +}; +export const getApplyDetail = (ProjectId) => { + return request({ + url: `/workflow/mosr/project/approval/info/${ProjectId}`, + method: "get" + }); +}; + +export const resubmitApply = (data) => { + return request({ + url: '/workflow/mosr/project/approval/initiation/resubmit', + method: "post", + data: data + }); +}; +//项目实施 +export const getCheckDetail = (projectId) => { + return request({ + url: `/workflow/mosr/project/implementation/info/${projectId}`, + method: "get" + }); +}; +export const resubmitCheck = (data) => { + return request({ + url: '/workflow/mosr/project/implementation/resubmit', + method: "post", + data: data + }); +}; + +export const projectCheck = (data) => { + return request({ + url: '/workflow/mosr/project/implementation/initiation/check', + method: "post", + data: data + }); +}; +export const getProjectCheckProcess = (projectId) => { + return request({ + url: `/workflow/mosr/project/implementation/process/${projectId}`, + method: "get" + }); +}; + +//项目归档 +export const getConclusionDetail = (ProjectId) => { + return request({ + url: `/workflow/mosr/project/filing/info/${ProjectId}`, + method: "get" + }); +}; +export const resubmitConclusion = (data) => { + return request({ + url: '/workflow/mosr/project/filing/resubmit', + method: "post", + data: data + }); +}; + +export const projectConclusion = (data) => { + return request({ + url: '/workflow/mosr/project/filing/project/entry', + method: "post", + data: data + }); +}; +export const getProjectConclusionProcess = () => { + return request({ + url: '/workflow/mosr/project/filing/process', + method: "get" + }); +}; diff --git a/src/api/role/role.js b/src/api/role/role.js index 6aa7b3d..28a4f7b 100644 --- a/src/api/role/role.js +++ b/src/api/role/role.js @@ -14,6 +14,14 @@ export const getRoleOption = () => { method: "get" }); }; + +export const getTemRoleOption = () => { + return request({ + url: '/admin/role/option/template', + method: "get" + }); +}; + //查询角色信息 export const getRoleDetail = (roleId) => { return request({ diff --git a/src/api/workflow/process-definition.js b/src/api/workflow/process-definition.js index 98ca1bb..97a8924 100644 --- a/src/api/workflow/process-definition.js +++ b/src/api/workflow/process-definition.js @@ -60,3 +60,12 @@ export function addProcessDefinition(param) { data: param }) } + +export function getTypeOption() { + return request({ + url: "/workflow/process/definition/type/option", + method: "get", + }) +} + + diff --git a/src/api/workflow/process-user.js b/src/api/workflow/process-user.js index abbb07d..fd623f9 100644 --- a/src/api/workflow/process-user.js +++ b/src/api/workflow/process-user.js @@ -22,3 +22,10 @@ export function getDepartmentTree() { method: 'get' }) } +export function getMosrDept(params) { + return request({ + url: '/admin/mosr/user/choose', + method: 'get', + params:params + }) +} diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss index 5c1a3c7..4f3a807 100644 --- a/src/assets/styles/index.scss +++ b/src/assets/styles/index.scss @@ -19,7 +19,7 @@ html, body, #app, .el-container, .el-aside, .el-main { } .el-main { - background: #F4F6F8; + background: #EFEFEF; padding: 0 0 0 18px; position: fixed; left: 200px; @@ -27,6 +27,7 @@ html, body, #app, .el-container, .el-aside, .el-main { margin-left: 0; transition: margin-left .15s; width: calc(100vw - 200px); + &::-webkit-scrollbar { width: 6px; } @@ -83,9 +84,11 @@ html, body, #app, .el-container, .el-aside, .el-main { align-items: center; margin-bottom: 10px; } -.el-dialog__body{ + +.el-dialog__body { padding: 10px 20px; } + .stateIcon { margin-top: 9px; margin-right: 7px; @@ -248,7 +251,8 @@ html, body, #app, .el-container, .el-aside, .el-main { justify-content: center; z-index: 0; position: relative; - .el-icon{ + + .el-icon { width: 1.4em; height: 1.4em; } @@ -287,9 +291,10 @@ html, body, #app, .el-container, .el-aside, .el-main { .layout { display: flex; justify-content: space-around; + .scrollbar-user { - height: calc(100vh - 250px)!important; - overflow: auto!important; + height: calc(100vh - 250px) !important; + overflow: auto !important; } .scrollbar-dict { @@ -373,7 +378,8 @@ html, body, #app, .el-container, .el-aside, .el-main { .scale { margin-top: 10px; z-index: 666; - position: absolute; + position: static; + //top: -20px; } .el-overlay-dialog { @@ -401,6 +407,15 @@ html, body, #app, .el-container, .el-aside, .el-main { } //SvgIcon组件的样式 +.home-icon { + width: 4em; + height: 4em; + vertical-align: -0.15em; + fill: currentColor; + overflow: hidden; + margin-right: 5px; +} + .svg-icon { width: 1.2em; height: 1.2em; @@ -445,10 +460,12 @@ html, body, #app, .el-container, .el-aside, .el-main { overflow: hidden; margin-right: 5px; } -.fen-icon{ + +.fen-icon { width: 1.8em; height: 1.7em; } + .middle-icon { width: 1.4em; height: 1.4em; @@ -530,4 +547,5 @@ html, body, #app, .el-container, .el-aside, .el-main { position: fixed; bottom: 15px; right: 15px; + z-index: 5; } diff --git a/src/assets/svg/home1.svg b/src/assets/svg/home1.svg new file mode 100644 index 0000000..0a99452 --- /dev/null +++ b/src/assets/svg/home1.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/svg/home2.svg b/src/assets/svg/home2.svg new file mode 100644 index 0000000..a71b307 --- /dev/null +++ b/src/assets/svg/home2.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/svg/home3.svg b/src/assets/svg/home3.svg new file mode 100644 index 0000000..98d2c13 --- /dev/null +++ b/src/assets/svg/home3.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/svg/home4.svg b/src/assets/svg/home4.svg new file mode 100644 index 0000000..d9206cd --- /dev/null +++ b/src/assets/svg/home4.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/components/AttachmentUpload.vue b/src/components/AttachmentUpload.vue new file mode 100644 index 0000000..0b74133 --- /dev/null +++ b/src/components/AttachmentUpload.vue @@ -0,0 +1,192 @@ + + + + + diff --git a/src/components/DetailComponent/ApprovalDetail.vue b/src/components/DetailComponent/ApprovalDetail.vue new file mode 100644 index 0000000..3407391 --- /dev/null +++ b/src/components/DetailComponent/ApprovalDetail.vue @@ -0,0 +1,193 @@ + + + + + diff --git a/src/components/DetailComponent/CollectionDetail.vue b/src/components/DetailComponent/CollectionDetail.vue new file mode 100644 index 0000000..f1fdfd4 --- /dev/null +++ b/src/components/DetailComponent/CollectionDetail.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/src/components/DetailComponent/Opinion.vue b/src/components/DetailComponent/Opinion.vue new file mode 100644 index 0000000..76e964a --- /dev/null +++ b/src/components/DetailComponent/Opinion.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/src/components/DetailComponent/SummaryDetail.vue b/src/components/DetailComponent/SummaryDetail.vue new file mode 100644 index 0000000..1d0cd33 --- /dev/null +++ b/src/components/DetailComponent/SummaryDetail.vue @@ -0,0 +1,322 @@ + + + + + diff --git a/src/components/FileUpload.vue b/src/components/FileUpload.vue new file mode 100644 index 0000000..2ead4a1 --- /dev/null +++ b/src/components/FileUpload.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/src/components/NameCircle.vue b/src/components/NameCircle.vue new file mode 100644 index 0000000..4cf79d8 --- /dev/null +++ b/src/components/NameCircle.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/src/components/PopoverDelete.vue b/src/components/PopoverDelete.vue index 7ef03d1..1f9ac87 100644 --- a/src/components/PopoverDelete.vue +++ b/src/components/PopoverDelete.vue @@ -9,7 +9,7 @@ @cancel="handleCancel" > @@ -24,12 +24,16 @@ const props = defineProps({ }, btnType: { type: String, - default: 'text' + default: 'danger' }, type: { type: String, default: '' }, + link: { + type: Boolean, + default: true + }, btnIcon: { type: String, default: '' @@ -61,6 +65,7 @@ const handleCancel = () => { visible.value = false } const handleDelete = () => { + console.log('确认') emit("delete") } diff --git a/src/components/Tinymce.vue b/src/components/Tinymce.vue index f294790..0295cdb 100644 --- a/src/components/Tinymce.vue +++ b/src/components/Tinymce.vue @@ -60,13 +60,21 @@ const props = defineProps({ toolbar: { type: [String, Array], default: [ - "fullscreen undo redo restoredraft | cut copy paste pastetext | forecolor backcolor bold italic underline strikethrough link anchor | alignleft aligncenter alignright alignjustify outdent indent | bullist numlist | blockquote subscript superscript removeformat ", + "fullscreen undo redo | cut copy paste pastetext | forecolor backcolor bold italic underline strikethrough link anchor | alignleft aligncenter alignright alignjustify outdent indent | bullist numlist | blockquote subscript superscript removeformat ", "styleselect formatselect fontselect fontsizeselect | table image axupimgs media pagebreak insertdatetime selectall visualblocks searchreplace | code preview | indent2em lineheight formatpainter", ], }, fontFormats: { type: [String, Array], default: "微软雅黑=Microsoft YaHei,Helvetica Neue,PingFang SC,sans-serif;苹果苹方=PingFang SC,Microsoft YaHei,sans-serif;宋体=simsun,serif;仿宋体=FangSong,serif;黑体=SimHei,sans-serif;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;" + }, + width:{ + type: String, + default: 'auto' + }, + height:{ + type: Number, + default: 450 } }) const content = ref(props.value); @@ -78,9 +86,10 @@ const init = reactive({ content_css: '/skins/content/default/content.css', language: 'zh_CN', placeholder: "在这里输入文字", //textarea中的提示信息 - min_width: 320, - min_height: 220, - height: 500, //注:引入autoresize插件时,此属性失效 + min_width: 300, + min_height: 200, + width:props.width, + height: props.height, //注:引入autoresize插件时,此属性失效 resize: "both", //编辑器宽高是否可变,false-否,true-高可变,'both'-宽高均可,注意引号 promotion: false, branding: false, //tiny技术支持信息是否显示 diff --git a/src/components/Tooltip.vue b/src/components/Tooltip.vue new file mode 100644 index 0000000..2cddc67 --- /dev/null +++ b/src/components/Tooltip.vue @@ -0,0 +1,49 @@ + + + diff --git a/src/components/steps/api/index.js b/src/components/steps/api/index.js new file mode 100644 index 0000000..a6d331c --- /dev/null +++ b/src/components/steps/api/index.js @@ -0,0 +1,15 @@ +import request from '@/utils/request' + +export const getBaseInfoApi = (projectId) => { + return request({ + url: '/workflow/details/info/'+projectId, + method: 'get', + }) +} + +export const getMapProjectStateInfo = (projectId, state) => { + return request({ + url: `/workflow/details/${projectId}/${state}`, + method: 'get' + }) +} \ No newline at end of file diff --git a/src/components/steps/index.vue b/src/components/steps/index.vue new file mode 100644 index 0000000..546904e --- /dev/null +++ b/src/components/steps/index.vue @@ -0,0 +1,256 @@ + + + + + diff --git a/src/directives/permission.js b/src/directives/permission.js index 65ea03a..6a657ee 100644 --- a/src/directives/permission.js +++ b/src/directives/permission.js @@ -8,7 +8,7 @@ export const hasPerm = (el, binding, vnode) => { if (value && value instanceof Array && value.length > 0) { const permissiosFlag = value const hasPermission = permisstions.some(permission => { - return allPermission === permission || permissiosFlag.includes(permission) + return permission === allPermission || permissiosFlag.includes(permission) || permissiosFlag.includes(allPermission) }) if (!hasPermission) { el.parentNode && el.parentNode.removeChild(el) diff --git a/src/fvcomponents/fvRadio/index.vue b/src/fvcomponents/fvRadio/index.vue index ea6e821..9575f2a 100644 --- a/src/fvcomponents/fvRadio/index.vue +++ b/src/fvcomponents/fvRadio/index.vue @@ -15,7 +15,7 @@ const props = defineProps({ default: [] }, modelValue: { - type: [Number, String], + type: [Number, String, Boolean], default: '' }, cacheKey: { diff --git a/src/fvcomponents/fvSearchForm/index.vue b/src/fvcomponents/fvSearchForm/index.vue index 8afc13b..f082ac7 100644 --- a/src/fvcomponents/fvSearchForm/index.vue +++ b/src/fvcomponents/fvSearchForm/index.vue @@ -1,28 +1,28 @@