Merge remote-tracking branch 'origin/master'
| | |
| | | # 页面标题 |
| | | VUE_APP_TITLE = 射洪项目管理系统 |
| | | VUE_APP_TITLE = 射洪智慧项目管理系统 |
| | | |
| | | # 开发环境配置 |
| | | ENV = 'development' |
| | | |
| | | # 射洪项目管理系统/开发环境 |
| | | # 射洪智慧项目管理系统/开发环境 |
| | | VUE_APP_BASE_API = '/dev-api' |
| | | |
| | | # 路由懒加载 |
| | |
| | | # 页面标题 |
| | | VUE_APP_TITLE = 射洪项目管理系统 |
| | | VUE_APP_TITLE = 射洪智慧项目管理系统 |
| | | |
| | | # 生产环境配置 |
| | | ENV = 'production' |
| | | |
| | | # 射洪项目管理系统/生产环境 |
| | | # 射洪智慧项目管理系统/生产环境 |
| | | VUE_APP_BASE_API = '/prod-api' |
| | | |
| | | # 开打新的tab的url前缀 |
| | |
| | | # 页面标题 |
| | | VUE_APP_TITLE = 射洪项目管理系统 |
| | | VUE_APP_TITLE = 射洪智慧项目管理系统 |
| | | |
| | | BABEL_ENV = production |
| | | |
| | |
| | | # 测试环境配置 |
| | | ENV = 'staging' |
| | | |
| | | # 射洪项目管理系统/测试环境 |
| | | # 射洪智慧项目管理系统/测试环境 |
| | | VUE_APP_BASE_API = '/stage-api' |
| | |
| | | { |
| | | "name": "ruoyi", |
| | | "version": "3.8.8", |
| | | "description": "射洪项目管理系统", |
| | | "description": "射洪智慧项目管理系统", |
| | | "author": "射洪项目", |
| | | "license": "MIT", |
| | | "scripts": { |
| | |
| | | params: query |
| | | }) |
| | | } |
| | | // 流程节点查看详情表单 |
| | | export function flowTaskFormDetail(taskId) { |
| | | return request({ |
| | | url: '/flowable/task/detail/' + taskId, |
| | | method: 'get', |
| | | }) |
| | | } |
| | |
| | | //main-container全局样式 |
| | | .app-container { |
| | | padding: 20px; |
| | | height: calc(100vh - 96px); |
| | | display: flex; |
| | | flex-direction: column; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | // search面板样式 |
| | |
| | | <el-table-column label="属性值" prop="value" min-width="100px" show-overflow-tooltip /> |
| | | <el-table-column label="操作" width="90px"> |
| | | <template slot-scope="{ row, $index }"> |
| | | <el-button size="mini" type="text" @click="openAttributesForm(row, $index)">编辑</el-button> |
| | | <el-divider direction="vertical" /> |
| | | <el-button size="mini" type="text" style="color: #ff4d4f" @click="removeAttributes(row, $index)">移除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="element-drawer__button"> |
| | | <el-button size="mini" type="primary" icon="el-icon-plus" @click="openAttributesForm(null, -1)">添加属性</el-button> |
| | | <el-button size="mini" type="primary" icon="el-icon-setting" @click="openAttributesForm(null, -1)">属性设置</el-button> |
| | | </div> |
| | | |
| | | <el-dialog :visible.sync="propertyFormModelVisible" title="属性配置" width="600px" append-to-body destroy-on-close> |
| | | <el-form :model="propertyForm" label-width="80px" size="mini" ref="attributeFormRef" @submit.native.prevent> |
| | | <el-form-item label="属性名:" prop="name"> |
| | | <el-input v-model="propertyForm.name" clearable /> |
| | | </el-form-item> |
| | | <el-form-item label="属性值:" prop="value"> |
| | | <el-input v-model="propertyForm.value" clearable /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div v-for="item in canConfigPropertyList"> |
| | | <div v-if="item.vueType === 'switch'"> |
| | | <el-switch |
| | | v-model="item.value" |
| | | :inactive-text="item.name" |
| | | @change="(val) => item.method(item.name, val === true ? '是' : '否')" |
| | | active-color="#13ce66" |
| | | inactive-color="#ff4949"> |
| | | </el-switch> |
| | | </div> |
| | | </div> |
| | | <!-- <el-form :model="propertyForm" label-width="80px" size="mini" ref="attributeFormRef" @submit.native.prevent>--> |
| | | <!-- <el-form-item label="属性名:" prop="name">--> |
| | | <!-- <el-input v-model="propertyForm.name" clearable />--> |
| | | <!-- </el-form-item>--> |
| | | <!-- <el-form-item label="属性值:" prop="value">--> |
| | | <!-- <el-input v-model="propertyForm.value" clearable />--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-form>--> |
| | | <template slot="footer"> |
| | | <el-button size="mini" @click="propertyFormModelVisible = false">取 消</el-button> |
| | | <el-button size="mini" type="primary" @click="saveAttribute">确 定</el-button> |
| | | <el-button size="mini" @click="propertyFormModelVisible = false">关 闭</el-button> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | |
| | | }, |
| | | data() { |
| | | return { |
| | | elementPropertyList: [], |
| | | canConfigPropertyList: [ |
| | | { |
| | | name: '该节点是审批节点', |
| | | value: false, |
| | | vueType: 'switch', |
| | | method: (name, value) => { |
| | | this.propertyForm.name = name |
| | | this.propertyForm.value = value |
| | | this.saveAttribute() |
| | | } |
| | | } |
| | | ], // 可以配置的属性列表 |
| | | elementPropertyList: [], // 扩展属性列表 |
| | | otherExtensionList: [], |
| | | propertyForm: {}, |
| | | editingPropertyIndex: -1, |
| | |
| | | } |
| | | return ex.$type === `flowable:Properties`; |
| | | }) ?? []; |
| | | |
| | | // 保存所有的 扩展属性字段 |
| | | this.bpmnElementPropertyList = this.bpmnElementProperties.reduce((pre, current) => pre.concat(current.values), []); |
| | | // 复制 显示 |
| | | |
| | | // 回显 |
| | | this.canConfigPropertyList.forEach(item => { |
| | | const find = this.bpmnElementPropertyList.find(el => el.name === item.name); |
| | | if (find) { |
| | | if (item.vueType === 'switch') { |
| | | item.value = find.value === '是' ? true : false |
| | | } |
| | | |
| | | } |
| | | }) |
| | | console.log(this.canConfigPropertyList, "这是什么鬼") |
| | | this.elementPropertyList = JSON.parse(JSON.stringify(this.bpmnElementPropertyList ?? [])); |
| | | }, |
| | | openAttributesForm(attr, index) { |
| | |
| | | value |
| | | }); |
| | | } else { |
| | | // 如果已经存在这个属性,就做修改 |
| | | const find = this.bpmnElementPropertyList.find(item => item.name === name); |
| | | if (find) { |
| | | this.modelerStore.modeling.updateModdleProperties(this.bpmnElement, this.bpmnElementPropertyList[this.bpmnElementPropertyList.indexOf(find)], { |
| | | name, |
| | | value |
| | | }); |
| | | } else { |
| | | // 新建属性字段 |
| | | const newPropertyObject = this.modelerStore.moddle.create(`flowable:Property`, { name, value }); |
| | | // 新建一个属性字段的保存列表 |
| | |
| | | }); |
| | | this.updateElementExtensions(propertiesObject); |
| | | } |
| | | this.propertyFormModelVisible = false; |
| | | } |
| | | // this.propertyFormModelVisible = false; |
| | | this.$message.success("操作成功") |
| | | this.resetAttributesList(); |
| | | }, |
| | | updateElementExtensions(properties) { |
| | |
| | | <style lang="scss" scoped> |
| | | .app-main { |
| | | /* 50= navbar 50 */ |
| | | min-height: calc(100vh - 50px); |
| | | // min-height: calc(100vh - 50px); |
| | | width: 100%; |
| | | position: relative; |
| | | overflow: hidden; |
| | |
| | | .hasTagsView { |
| | | .app-main { |
| | | /* 84 = navbar + tags-view = 50 + 34 */ |
| | | min-height: calc(100vh - 84px); |
| | | min-height: calc(100vh - 96px); |
| | | } |
| | | |
| | | .fixed-header + .app-main { |
| | |
| | | <div class="navbar"> |
| | | <div class="ruoyi-logo"> |
| | | <img src="@/assets/logo/logo.png" alt="" /> |
| | | <span>射洪项目管理系统</span> |
| | | <span>射洪智慧项目管理系统</span> |
| | | </div> |
| | | <div class="right-menu flex align-center"> |
| | | <template> |
| | |
| | | id: '', |
| | | name: '', |
| | | avatar: '', |
| | | deptId: null, |
| | | roles: [], |
| | | permissions: [] |
| | | }, |
| | |
| | | }, |
| | | SET_ROLES: (state, roles) => { |
| | | state.roles = roles |
| | | }, |
| | | SET_DEPT: (state, deptId) => { |
| | | state.deptId = deptId |
| | | }, |
| | | SET_PERMISSIONS: (state, permissions) => { |
| | | state.permissions = permissions |
| | |
| | | } |
| | | commit('SET_ID', user.userId) |
| | | commit('SET_NAME', user.userName) |
| | | commit('SET_DEPT', user.deptId) |
| | | commit('SET_AVATAR', avatar) |
| | | |
| | | resolve(res) |
| | | }).catch(error => { |
| | | reject(error) |
| | |
| | | // axios中请求配置有baseURL选项,表示请求URL公共部分 |
| | | baseURL: process.env.VUE_APP_BASE_API, |
| | | // 超时 |
| | | timeout: 10000 |
| | | timeout: 50000 |
| | | }) |
| | | |
| | | // request拦截器 |
| | |
| | | <div class="app-container"> |
| | | <el-card class="box-card" > |
| | | <div slot="header" class="clearfix"> |
| | | <span class="el-icon-document">已发任务</span> |
| | | <span class="el-icon-document">已完成任务</span> |
| | | <el-button style="float: right;" size="mini" type="danger" @click="goBack">关闭</el-button> |
| | | </div> |
| | | <el-tabs tab-position="top" v-model="activeName" @tab-click="handleClick"> |
| | | <!--表单信息--> |
| | | <el-tab-pane label="表单信息" name="1"> |
| | | <el-col :span="16" :offset="4"> |
| | | <v-form-render ref="vFormRef"/> |
| | | <el-col :span="16" :offset="4" v-if="formDataList && formDataList.length > 0"> |
| | | <div v-for="(formDataObj, index) in formDataList" :key="index" class="form-warp"> |
| | | <div v-if="formDataObj.current" style="margin-bottom: 15px;color: #409eff">当前阶段:<span style="color: red">{{formDataObj.beforeNodeName}}</span></div> |
| | | <div v-else style="margin-bottom: 15px;color: #409eff">前置阶段:<span style="color: #d5904b">{{formDataObj.beforeNodeName}}</span></div> |
| | | <v-form-render :form-data="formDataObj.formJson" :ref="'form' + index"/> |
| | | </div> |
| | | </el-col> |
| | | </el-tab-pane> |
| | | <!--流程流转记录--> |
| | |
| | | <script> |
| | | import {flowRecord} from "@/api/flowable/finished"; |
| | | import {getProcessVariables, flowXmlAndNode} from "@/api/flowable/definition"; |
| | | import {flowTaskForm, flowTaskFormDetail} from "@/api/flowable/todo"; |
| | | import BpmnViewer from '@/components/Process/viewer'; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | |
| | |
| | | return { |
| | | // 模型xml数据 |
| | | flowData: {}, |
| | | formDataList: [], // 表单列表 |
| | | activeName: '1', |
| | | // 查询参数 |
| | | queryParams: {}, |
| | | // 遮罩层 |
| | | loading: true, |
| | | flowRecordList: [], // 流程流转数据 |
| | | goBackParams: {}, |
| | | taskForm:{ |
| | | multiple: false, |
| | | comment:"", // 意见内容 |
| | |
| | | this.taskForm.deployId = this.$route.query && this.$route.query.deployId; |
| | | this.taskForm.taskId = this.$route.query && this.$route.query.taskId; |
| | | this.taskForm.procInsId = this.$route.query && this.$route.query.procInsId; |
| | | this.goBackParams = this.$route.query && this.$route.query.goBackParams; |
| | | // 流程任务重获取变量表单 |
| | | this.processVariables( this.taskForm.taskId) |
| | | this.getFlowRecordList(this.taskForm.procInsId, this.taskForm.deployId); |
| | |
| | | processVariables(taskId) { |
| | | if (taskId) { |
| | | // 提交流程申请时填写的表单存入了流程变量中后续任务处理时需要展示 |
| | | getProcessVariables(taskId).then(res => { |
| | | flowTaskFormDetail(taskId).then(res => { |
| | | this.formDataList = res.data |
| | | if (this.formDataList && this.formDataList.length > 0) { |
| | | this.$nextTick(() => { |
| | | // 回显表单 |
| | | this.$refs.vFormRef.setFormJson(res.data.formJson); |
| | | this.formDataList.forEach((formDataObj, index) => { |
| | | console.log("表单数据列表", formDataObj.formJson) |
| | | let that = this |
| | | console.log(eval("that.$refs.form" + index)[0]) |
| | | if (formDataObj.formJsonObj) { |
| | | eval("that.$refs.form" + index)[0].setFormJson(formDataObj.formJsonObj.formJson); |
| | | |
| | | eval("that.$refs.form" + index)[0].setFormData(formDataObj.formJsonObj); |
| | | this.$nextTick(() => { |
| | | // 加载表单填写的数据 |
| | | this.$refs.vFormRef.setFormData(res.data); |
| | | this.$nextTick(() => { |
| | | // 表单禁用 |
| | | this.$refs.vFormRef.disableForm(); |
| | | eval("that.$refs.form" + index)[0].disableForm(); |
| | | }) |
| | | } |
| | | }) |
| | | // this.formJson = this.formDataList[0].formJsonObj.formJson |
| | | }) |
| | | } |
| | | // this.$nextTick(() => { |
| | | // // 回显表单 |
| | | // this.$refs.vFormRef.setFormJson(res.data.formJson); |
| | | // this.$nextTick(() => { |
| | | // // 加载表单填写的数据 |
| | | // this.$refs.vFormRef.setFormData(res.data); |
| | | // this.$nextTick(() => { |
| | | // // 表单禁用 |
| | | // this.$refs.vFormRef.disableForm(); |
| | | // }) |
| | | // }) |
| | | // }) |
| | | }); |
| | | } |
| | | }, |
| | | /** 返回页面 */ |
| | | goBack() { |
| | | // // 关闭当前标签页并返回上个页面 |
| | | // const obj = { path: "/task/process", query: { t: Date.now()} }; |
| | | // this.$tab.closeOpenPage(obj); |
| | | this.$tab.closePage() |
| | | this.$router.push({ |
| | | path: '/projectFlow/detail', |
| | | query: this.goBackParams |
| | | }) |
| | | }, |
| | | } |
| | | }; |
| | |
| | | .my-label { |
| | | background: #E1F3D8; |
| | | } |
| | | |
| | | .form-warp { |
| | | padding: 20px; |
| | | margin-bottom: 20px; |
| | | box-shadow: |
| | | inset 0 -3em 3em rgba(0, 0, 0, 0.1), |
| | | 0 0 0 2px rgb(239, 239, 239), |
| | | 0.3em 0.3em 1em rgba(0, 0, 0, 0.3); |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-card class="box-card" > |
| | | <div slot="header" class="clearfix"> |
| | | <span class="el-icon-document">已发任务</span> |
| | | <el-button style="float: right;" size="mini" type="danger" @click="goBack">关闭</el-button> |
| | | </div> |
| | | <el-tabs tab-position="top" v-model="activeName" @tab-click="handleClick"> |
| | | <!--表单信息--> |
| | | <el-tab-pane label="表单信息" name="1"> |
| | | <el-col :span="16" :offset="4"> |
| | | <v-form-render ref="vFormRef"/> |
| | | </el-col> |
| | | </el-tab-pane> |
| | | <!--流程流转记录--> |
| | | <el-tab-pane label="流转记录" name="2"> |
| | | <el-col :span="16" :offset="4" > |
| | | <div class="block"> |
| | | <el-timeline> |
| | | <el-timeline-item |
| | | v-for="(item,index ) in flowRecordList" |
| | | :key="index" |
| | | :icon="setIcon(item.finishTime)" |
| | | :color="setColor(item.finishTime)" |
| | | > |
| | | <p style="font-weight: 700">{{item.taskName}}</p> |
| | | <el-card :body-style="{ padding: '10px' }"> |
| | | <el-descriptions class="margin-top" :column="1" size="small" border> |
| | | <el-descriptions-item v-if="item.assigneeName" label-class-name="my-label"> |
| | | <template slot="label"><i class="el-icon-user"></i>办理人</template> |
| | | {{item.assigneeName}} |
| | | <el-tag type="info" size="mini">{{item.deptName}}</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item v-if="item.candidate" label-class-name="my-label"> |
| | | <template slot="label"><i class="el-icon-user"></i>候选办理</template> |
| | | {{item.candidate}} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label-class-name="my-label"> |
| | | <template slot="label"><i class="el-icon-date"></i>接收时间</template> |
| | | {{item.createTime}} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item v-if="item.finishTime" label-class-name="my-label"> |
| | | <template slot="label"><i class="el-icon-date"></i>处理时间</template> |
| | | {{item.finishTime}} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item v-if="item.duration" label-class-name="my-label"> |
| | | <template slot="label"><i class="el-icon-time"></i>耗时</template> |
| | | {{item.duration}} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item v-if="item.comment" label-class-name="my-label"> |
| | | <template slot="label"><i class="el-icon-tickets"></i>处理意见</template> |
| | | {{item.comment.comment}} |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | </el-card> |
| | | </el-timeline-item> |
| | | </el-timeline> |
| | | </div> |
| | | </el-col> |
| | | </el-tab-pane> |
| | | <!--流程图--> |
| | | <el-tab-pane label="流程图" name="3"> |
| | | <bpmn-viewer :flowData="flowData" :procInsId="taskForm.procInsId"/> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </el-card> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import {flowRecord} from "@/api/flowable/finished"; |
| | | import {getProcessVariables, flowXmlAndNode} from "@/api/flowable/definition"; |
| | | import BpmnViewer from '@/components/Process/viewer'; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | |
| | | export default { |
| | | name: "Record", |
| | | components: { |
| | | BpmnViewer |
| | | }, |
| | | props: {}, |
| | | data() { |
| | | return { |
| | | // 模型xml数据 |
| | | flowData: {}, |
| | | activeName: '1', |
| | | // 查询参数 |
| | | queryParams: {}, |
| | | // 遮罩层 |
| | | loading: true, |
| | | flowRecordList: [], // 流程流转数据 |
| | | taskForm:{ |
| | | multiple: false, |
| | | comment:"", // 意见内容 |
| | | procInsId: "", // 流程实例编号 |
| | | instanceId: "", // 流程实例编号 |
| | | deployId: "", // 流程定义编号 |
| | | taskId: "" ,// 流程任务编号 |
| | | procDefId: "", // 流程编号 |
| | | }, |
| | | }; |
| | | }, |
| | | created() { |
| | | this.taskForm.deployId = this.$route.query && this.$route.query.deployId; |
| | | this.taskForm.taskId = this.$route.query && this.$route.query.taskId; |
| | | this.taskForm.procInsId = this.$route.query && this.$route.query.procInsId; |
| | | // 流程任务重获取变量表单 |
| | | this.processVariables( this.taskForm.taskId) |
| | | this.getFlowRecordList(this.taskForm.procInsId, this.taskForm.deployId); |
| | | }, |
| | | methods: { |
| | | handleClick(tab, event) { |
| | | if (tab.name === '3'){ |
| | | flowXmlAndNode({procInsId:this.taskForm.procInsId,deployId:this.taskForm.deployId}).then(res => { |
| | | this.flowData = res.data; |
| | | }) |
| | | } |
| | | }, |
| | | setIcon(val) { |
| | | if (val) { |
| | | return "el-icon-check"; |
| | | } else { |
| | | return "el-icon-time"; |
| | | } |
| | | }, |
| | | setColor(val) { |
| | | if (val) { |
| | | return "#2bc418"; |
| | | } else { |
| | | return "#b3bdbb"; |
| | | } |
| | | }, |
| | | /** 流程流转记录 */ |
| | | getFlowRecordList(procInsId, deployId) { |
| | | const that = this |
| | | const params = {procInsId: procInsId, deployId: deployId} |
| | | flowRecord(params).then(res => { |
| | | that.flowRecordList = res.data.flowList; |
| | | }).catch(res => { |
| | | this.goBack(); |
| | | }) |
| | | }, |
| | | /** 获取流程变量内容 */ |
| | | processVariables(taskId) { |
| | | if (taskId) { |
| | | // 提交流程申请时填写的表单存入了流程变量中后续任务处理时需要展示 |
| | | getProcessVariables(taskId).then(res => { |
| | | this.$nextTick(() => { |
| | | // 回显表单 |
| | | this.$refs.vFormRef.setFormJson(res.data.formJson); |
| | | this.$nextTick(() => { |
| | | // 加载表单填写的数据 |
| | | this.$refs.vFormRef.setFormData(res.data); |
| | | this.$nextTick(() => { |
| | | // 表单禁用 |
| | | this.$refs.vFormRef.disableForm(); |
| | | }) |
| | | }) |
| | | }) |
| | | }); |
| | | } |
| | | }, |
| | | /** 返回页面 */ |
| | | goBack() { |
| | | // // 关闭当前标签页并返回上个页面 |
| | | // const obj = { path: "/task/process", query: { t: Date.now()} }; |
| | | // this.$tab.closeOpenPage(obj); |
| | | this.$tab.closePage() |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | .test-form { |
| | | margin: 15px auto; |
| | | width: 800px; |
| | | padding: 15px; |
| | | } |
| | | |
| | | .clearfix:before, |
| | | .clearfix:after { |
| | | display: table; |
| | | content: ""; |
| | | } |
| | | .clearfix:after { |
| | | clear: both |
| | | } |
| | | |
| | | .box-card { |
| | | width: 100%; |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .el-tag + .el-tag { |
| | | margin-left: 10px; |
| | | } |
| | | |
| | | .my-label { |
| | | background: #E1F3D8; |
| | | } |
| | | </style> |
| | |
| | | <el-tab-pane label="表单信息" name="1"> |
| | | <!--初始化流程加载表单信息--> |
| | | <el-col :span="16" :offset="4" v-if="formDataList && formDataList.length > 0"> |
| | | <div v-for="(formDataObj, index) in formDataList" :key="index" class="form-warp"> |
| | | <div v-for="(formDataObj, index) in formDataList" :key="index" class="form-warp" style="position: relative"> |
| | | <div v-if="!formDataObj.current" style="position: absolute; top: 2px; right: 2px"> |
| | | <el-button type="danger" disabled>驳回(功能开发中)</el-button> |
| | | </div> |
| | | <div v-if="formDataObj.current" style="margin-bottom: 15px;color: #409eff">当前阶段:<span style="color: red">{{formDataObj.beforeNodeName}}</span></div> |
| | | <div v-else style="margin-bottom: 15px;color: #409eff">前置阶段:<span style="color: #d5904b">{{formDataObj.beforeNodeName}}</span></div> |
| | | <v-form-render :form-data="formDataObj.formJson" :ref="'form' + index"/> |
| | |
| | | <!-- <v-form-render :form-data="formRenderData" ref="vFormRef"/>--> |
| | | <div style="display: flex;justify-content: center; align-items: center; margin: 20px 0"> |
| | | <el-button type="primary" @click="submitForm">确认并提交</el-button> |
| | | <el-button type="primary" @click="submitForm">协同办理</el-button> |
| | | <el-button type="primary" @click="submitForm">转交他人办理</el-button> |
| | | <el-button type="primary" disabled @click="submitForm">协同办理(功能开发中)</el-button> |
| | | <el-button type="primary" disabled @click="submitForm">转交他人办理(功能开发中)</el-button> |
| | | <!-- <el-button type="primary" @click="resetForm">重 置</el-button>--> |
| | | </div> |
| | | </el-col> |
| | |
| | | props: {}, |
| | | data() { |
| | | return { |
| | | formDataList: [], |
| | | goBackParams: {}, |
| | | formDataList: [], // 表单列表 |
| | | taskId: '', |
| | | processName: '', |
| | | // 模型xml数据 |
| | |
| | | this.taskId = this.$route.query && this.$route.query.taskId; |
| | | // 初始化表单 |
| | | this.procDefId = this.$route.query && this.$route.query.procDefId; |
| | | this.goBackParams = this.$route.query && this.$route.query.goBackParams; |
| | | // this.getNextFlowNodeByStart(this.deployId); |
| | | this.getFlowFormData(this.taskId); |
| | | }, |
| | |
| | | const params = {taskId: taskId} |
| | | flowTaskForm(params).then(res => { |
| | | this.formDataList = res.data |
| | | // this.formRenderDataList = res.data.map(item => item.formJson) |
| | | // console.log("表单数据列表", this.formRenderDataList) |
| | | if (this.formDataList && this.formDataList.length > 0) { |
| | | this.$nextTick(() => { |
| | | this.formDataList.forEach((formDataObj, index) => { |
| | |
| | | }, |
| | | /** 返回页面 */ |
| | | goBack() { |
| | | // // 关闭当前标签页并返回上个页面 |
| | | // const obj = { path: "/task/process", query: { t: Date.now()} }; |
| | | // this.$tab.closeOpenPage(obj); |
| | | this.$tab.closePage() |
| | | this.$router.push({ |
| | | path: '/projectFlow/detail', |
| | | query: this.goBackParams |
| | | }) |
| | | }, |
| | | /** 申请流程表单数据提交 */ |
| | | submitForm() { |
| | |
| | | <div class="login"> |
| | | <div class="nav"> |
| | | <img alt="" src="../assets/images/bj.png" /> |
| | | <div class="ml-[10px]">射洪市项目管理系统</div> |
| | | <div class="ml-[10px]">射洪智慧项目管理系统</div> |
| | | </div> |
| | | <div class="conter"> |
| | | <div class="left"> |
| | | <div class="title">射洪市项目管理系统</div> |
| | | <div class="title">射洪智慧项目管理系统</div> |
| | | <div> |
| | | 运用系统的观点、方法和理论,对项目涉及的全部工作进行有效地管理 |
| | | </div> |
| | |
| | | v-loading="loading" |
| | | :data="projectInfoList" |
| | | @selection-change="handleSelectionChange" |
| | | height="60vh" |
| | | height="100%" |
| | | sortable="custom" |
| | | :show-overflow-tooltip="true"> |
| | | <el-table-column type="selection" width="55" align="center"/> |
| | |
| | | import {approvalList} from "@/api/system/dept"; |
| | | |
| | | export default { |
| | | name: 'BasicInfo', |
| | | dicts: ['sys_funding_type', 'sys_investment_type', 'sys_project_type', 'sys_project_status', 'sys_competent_department' |
| | | , 'sys_administrative_divisions', 'sys_centralized_management', 'sys_approval_type', 'sys_key_categories', 'sys_annual_plan'], |
| | | components: { |
| | |
| | | this.approvalList = res.data; |
| | | }); |
| | | }, |
| | | submit() { |
| | | submit(usedStatus) { |
| | | this.$refs["projectForm"].validate(valid => { |
| | | if (valid) { |
| | | this.projectForm.usedStatus = usedStatus; |
| | | if (this.projectForm.id) { |
| | | updateProject(this.projectForm).then(response => { |
| | | this.$modal.msgSuccess("修改成功"); |
| | |
| | | v-loading="loading" |
| | | :data="projectInfoList" |
| | | @selection-change="handleSelectionChange" |
| | | height="60vh" |
| | | height="100%" |
| | | sortable="custom" |
| | | :show-overflow-tooltip="true"> |
| | | <el-table-column type="selection" width="55" align="center"/> |
| | | <!-- 动态列 --> |
| | | <el-table-column |
| | | v-for="item in columns" |
| | | :key="item.id" |
| | | v-if="item.visible" |
| | | :prop="item.id" |
| | | :label="item.label" |
| | |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :page.sync="queryParams.currentPage" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | |
| | | timeRange: [], |
| | | // 查询参数 |
| | | queryParams: { |
| | | pageNum: 1, |
| | | currentPage: 1, |
| | | pageSize: 10, |
| | | projectName: null, |
| | | projectCode: null, |
| | |
| | | }, |
| | | /** 搜索按钮操作 */ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | | this.queryParams.currentPage = 1; |
| | | this.getList(); |
| | | }, |
| | | /** 重置按钮操作 */ |
| | |
| | | class="full-width custom-height" |
| | | /> |
| | | <div v-if="!disabled" class="button-container"> |
| | | <el-button class="save-button" type="primary" @click="submit">保存</el-button> |
| | | <el-button |
| | | v-if="componentName.name == 'BasicInfo'" |
| | | class="save-button" |
| | | type="primary" |
| | | @click="submit(0)" |
| | | >草稿</el-button |
| | | > |
| | | <el-button class="save-button" type="primary" @click="submit(1)" |
| | | >保存</el-button |
| | | > |
| | | <el-button class="reset-button" @click="reset">重置</el-button> |
| | | <!-- <el-button v-else class="cancel-button" @click="cancel">取消</el-button> --> |
| | | </div> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import BasicInfo from '@/views/projectEngineering/projectLibrary/component/BasicInfo'; |
| | | import InvestInfo from '@/views/projectEngineering/projectLibrary/component/InvestInfo'; |
| | | import InvestmentFunds from '@/views/projectEngineering/projectLibrary/component/investmentFunds'; |
| | | import LegalPerson from '@/views/projectEngineering/projectLibrary/component/legalPerson'; |
| | | import PolicyInfo from '@/views/projectEngineering/projectLibrary/component/PolicyInfo'; |
| | | import DocumentsInfo from '@/views/projectEngineering/projectLibrary/component/DocumentsInfo'; |
| | | import BasicInfo from "@/views/projectEngineering/projectLibrary/component/BasicInfo"; |
| | | import InvestInfo from "@/views/projectEngineering/projectLibrary/component/InvestInfo"; |
| | | import InvestmentFunds from "@/views/projectEngineering/projectLibrary/component/investmentFunds"; |
| | | import LegalPerson from "@/views/projectEngineering/projectLibrary/component/legalPerson"; |
| | | import PolicyInfo from "@/views/projectEngineering/projectLibrary/component/PolicyInfo"; |
| | | import DocumentsInfo from "@/views/projectEngineering/projectLibrary/component/DocumentsInfo"; |
| | | |
| | | export default { |
| | | name: 'ProjectDetails', |
| | | name: "ProjectDetails", |
| | | data() { |
| | | return { |
| | | isShow: false, |
| | | currentTab: '项目管理基础信息', |
| | | currentTab: "项目管理基础信息", |
| | | disabled: false, |
| | | projectForm:{}, |
| | | componentName: BasicInfo, |
| | | TABS_DATA: [ |
| | | { |
| | | label: '项目管理基础信息', |
| | | value: '项目管理基础信息', |
| | | componentName: BasicInfo |
| | | label: "项目管理基础信息", |
| | | value: "项目管理基础信息", |
| | | componentName: BasicInfo, |
| | | }, |
| | | { |
| | | label: '投资管理基础信息', |
| | | value: '投资管理基础信息', |
| | | componentName: InvestInfo |
| | | label: "投资管理基础信息", |
| | | value: "投资管理基础信息", |
| | | componentName: InvestInfo, |
| | | }, |
| | | { |
| | | label: '项目投资及资金来源', |
| | | value: '项目投资及资金来源', |
| | | componentName: InvestmentFunds |
| | | label: "项目投资及资金来源", |
| | | value: "项目投资及资金来源", |
| | | componentName: InvestmentFunds, |
| | | }, |
| | | { |
| | | label: '项目(法人)单位登记信息', |
| | | value: '项目(法人)单位登记信息', |
| | | componentName: LegalPerson |
| | | label: "项目(法人)单位登记信息", |
| | | value: "项目(法人)单位登记信息", |
| | | componentName: LegalPerson, |
| | | }, |
| | | { |
| | | label: '投资项目产业政策符合情况', |
| | | value: '投资项目产业政策符合情况', |
| | | componentName: PolicyInfo |
| | | label: "投资项目产业政策符合情况", |
| | | value: "投资项目产业政策符合情况", |
| | | componentName: PolicyInfo, |
| | | }, |
| | | { |
| | | label: '相关文书', |
| | | value: '相关文书', |
| | | componentName: DocumentsInfo |
| | | } |
| | | label: "相关文书", |
| | | value: "相关文书", |
| | | componentName: DocumentsInfo, |
| | | }, |
| | | ], |
| | | childRef: null, |
| | | }; |
| | |
| | | }, |
| | | handleClick(tabTarget) { |
| | | this.componentName = this.TABS_DATA[tabTarget.index].componentName; |
| | | |
| | | }, |
| | | changeTable(index) { |
| | | this.componentName = this.TABS_DATA[index].componentName; |
| | | this.currentTab = this.TABS_DATA[index].value; |
| | | }, |
| | | submit() { |
| | | this.$refs.childRef.submit(); |
| | | submit(usedStatus) { |
| | | this.$refs.childRef.submit(usedStatus); |
| | | }, |
| | | reset() { |
| | | this.$refs.childRef.reset(); |
| | |
| | | }, |
| | | mounted() { |
| | | if(this.$route.query.disabled){ |
| | | this.disabled = true |
| | | this.disabled = true; |
| | | } |
| | | } |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | ::v-deep .el-tabs__nav-wrap::after { |
| | | background-color: rgba(0, 0, 0, 0) !important; |
| | | } |
| | |
| | | <template> |
| | | <div class="app-container" v-loading.fullscreen.lock="loading"> |
| | | <div class="app-container"> |
| | | <div v-loading="loading"> |
| | | <div class="top"> |
| | | <div class="project-title"> |
| | | <h2>项目名称:{{detailData.projectName}}</h2> |
| | |
| | | <el-input v-model="queryParams.taskName" placeholder="任务名称"></el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" @click="getList">查询</el-button> |
| | | <el-button type="primary" @click="search">查询</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="promoterName" |
| | | label="发起人" |
| | | prop="promoterUnitName" |
| | | label="发起单位" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="promoterUnitName" |
| | | label="发起单位" |
| | | prop="promoterName" |
| | | label="发起人" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | </div> |
| | | <div class="table" style="margin-top: 15px"> |
| | | <el-pagination |
| | | v-if="total > queryParams.pageSize" |
| | | @size-change="getList" |
| | | @current-change="getList" |
| | | @size-change="sizeChange" |
| | | @current-change="pageChange" |
| | | :current-page.sync="queryParams.currentPage" |
| | | :page-sizes="[5, 10, 20]" |
| | | :page-size="100" |
| | | layout="sizes, prev, pager, next" |
| | | :total="total"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | if (row.handlerType === "USER") { |
| | | return this.$store.state.user.id === row.handlerId |
| | | } else if (row.handlerType === "DEPT") { |
| | | return this.$store.state.user.id === row.handlerId |
| | | console.log(this.$store.state.user.deptId, "部门id", row.handlerUnitId) |
| | | return this.$store.state.user.deptId === row.handlerUnitId |
| | | // return this.$store.state.user.name === '市发展改革委' || this.$store.state.user.name === '市住建局' |
| | | } else if (row.handlerType === "ROLE") { |
| | | return this.$auth.hasRole(row.handlerUnitName) |
| | | } |
| | |
| | | } |
| | | }, |
| | | goToDo(row) { |
| | | // TODO 这里的判断条件根据实际情况设置 |
| | | // let params = { |
| | | // processDefId: row.processDefId, |
| | | // taskId: row.taskId |
| | | // } |
| | | // getTaskIsAuditing(params).then(res => { |
| | | // |
| | | // }) |
| | | // if (this.showHandle(row)) { |
| | | console.log("zhe") |
| | | // 查询该任务是否配置了需要审批 |
| | | let params = { |
| | | processDefId: row.processDefId, |
| | | taskId: row.taskId |
| | | } |
| | | getTaskIsAuditing(params).then(res => { |
| | | this.$router.push({ |
| | | path: '/flowable/task/myProcess/send/index', |
| | | query: { |
| | | deployId: row.deployId, |
| | | procDefId: row.processDefId, |
| | | processName: row.taskName, |
| | | taskId: row.taskId |
| | | taskId: row.taskId, |
| | | showAuditing: res.data, |
| | | goBackParams: this.queryParams |
| | | } |
| | | }) |
| | | // } else { |
| | | // this.$router.push({ |
| | | // path: '/flowable/task/todo/detail/index', |
| | | // query: { |
| | | // taskName: row.taskName, |
| | | // startUser: row.promoterName, |
| | | // deployId: row.deployId, |
| | | // taskId: row.taskId, |
| | | // procInsId: row.processInsId, |
| | | // executionId: row.executionId |
| | | // } |
| | | // }) |
| | | // } |
| | | }) |
| | | }, |
| | | goToProcessDetail(row) { |
| | | this.$router.push({ path: '/flowable/task/myProcess/detail/index', |
| | | query: { |
| | | procInsId: row.processInsId, |
| | | deployId: row.deployId, |
| | | taskId: row.taskId |
| | | taskId: row.taskId, |
| | | goBackParams: this.queryParams |
| | | }}) |
| | | }, |
| | | search() { |
| | | this.queryParams.currentPage = 1; |
| | | this.getList() |
| | | }, |
| | | sizeChange(pageSize) { |
| | | this.queryParams.pageSize = pageSize; |
| | | this.getList() |
| | | }, |
| | | pageChange(pageNum) { |
| | | this.queryParams.currentPage = pageNum; |
| | | this.getList() |
| | | }, |
| | | getList() { |
| | | // 获取任务列表 |
| | | getProjectProcessDetailTaskList(this.queryParams).then(res => { |
| | |
| | | v-loading="loading" |
| | | :data="projectInfoList" |
| | | @selection-change="handleSelectionChange" |
| | | height="60vh" |
| | | height="100%" |
| | | sortable="custom" |
| | | :show-overflow-tooltip="true"> |
| | | <el-table-column type="selection" width="55" align="center"/> |
| | |
| | | |
| | | const CompressionPlugin = require('compression-webpack-plugin') |
| | | |
| | | const name = process.env.VUE_APP_TITLE || '射洪项目管理系统' // 网页标题 |
| | | const name = process.env.VUE_APP_TITLE || '射洪智慧项目管理系统' // 网页标题 |
| | | |
| | | const port = process.env.port || process.env.npm_config_port || 80 // 端口 |
| | | |