master
赵玉瑞 2 years ago
parent 4151c852d4
commit 8e7c5449d0
  1. 2
      ant-design-vue-jeecg/src/components/dict/JDictSelectTag.vue
  2. 1
      ant-design-vue-jeecg/src/components/dict/JMultiSelectTag.vue
  3. 8
      ant-design-vue-jeecg/src/utils/util.js
  4. 451
      ant-design-vue-jeecg/src/views/modulex/ModulexList.vue
  5. 57
      ant-design-vue-jeecg/src/views/modulex/modules/ModulexForm.vue
  6. 82
      ant-design-vue-jeecg/src/views/projectUserRole/ProjectUserRoleList.vue
  7. 167
      ant-design-vue-jeecg/src/views/projectUserRole/modules/ProjectUserRoleForm.vue
  8. 103
      ant-design-vue-jeecg/src/views/projectx/ProjectxList.vue
  9. 13
      ant-design-vue-jeecg/src/views/projectx/modules/ProjectxForm.vue
  10. 45
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/modulex/entity/Modulex.java
  11. 22
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/projectUserRole/entity/ProjectUserRole.java
  12. 7
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/projectx/entity/Projectx.java

@ -103,7 +103,7 @@
}else{ }else{
val = e val = e
} }
console.log(val); console.log('JDictSelectTag选中的实际数据: ',val);
this.$emit('change', val); this.$emit('change', val);
}, },
setCurrentDictOptions(dictOptions){ setCurrentDictOptions(dictOptions){

@ -101,6 +101,7 @@ export default {
} }
}, },
onChange(selectedValue) { onChange(selectedValue) {
console.log('JMultiSelectTag 选中的实际数据: ',selectedValue)
this.$emit('change', selectedValue.join(this.spliter)) this.$emit('change', selectedValue.join(this.spliter))
}, },
setCurrentDictOptions(dictOptions) { setCurrentDictOptions(dictOptions) {

@ -180,10 +180,10 @@ function generateChildRouters(data) {
} }
//--update-end----author:scott---date:20190320------for:根据后台菜单配置,判断是否路由菜单字段,动态选择是否生成路由(为了支持参数URL菜单)------ //--update-end----author:scott---date:20190320------for:根据后台菜单配置,判断是否路由菜单字段,动态选择是否生成路由(为了支持参数URL菜单)------
} }
console.log(routers, '生成路由列表 ') //console.log('生成路由列表 ', routers)
routers.forEach((res, index) => { // routers.forEach((res, index) = > {
console.log(res.path) // console.log(res.path)
}) // })
return routers //返回路由 return routers //返回路由
} }

@ -4,6 +4,20 @@
<div class="table-page-search-wrapper"> <div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery"> <a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :md="6" :sm="12">
<a-form-item label="角色名称">
<j-input v-model="queryParam.moduleName"></j-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
<a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
</span>
</a-col>
</a-row> </a-row>
</a-form> </a-form>
</div> </div>
@ -12,24 +26,13 @@
<!-- 操作按钮区域 --> <!-- 操作按钮区域 -->
<div class="table-operator"> <div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button> <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('模块管理')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<!-- 高级查询区域 -->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div> </div>
<!-- table区域-begin --> <!-- table区域-begin -->
<div> <div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
style="font-weight: 600">{{ selectedRowKeys.length }}</a>
<a style="margin-left: 24px" @click="onClearSelected">清空</a> <a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div> </div>
@ -50,40 +53,18 @@
<template slot="htmlSlot" slot-scope="text"> <template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div> <div v-html="text"></div>
</template> </template>
<template slot="imgSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
<span slot="action" slot-scope="text, record"> <span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a> <a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical"/>
<a @click="handleDetail(record)">详情</a>
<a-divider type="vertical"/>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
<a-divider type="vertical" />
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span> </span>
</a-table> </a-table>
@ -95,206 +76,206 @@
<script> <script>
import '@assets/less/TableExpand.less' import '@assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin' import {mixinDevice} from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin' import {JeecgListMixin} from '@/mixins/JeecgListMixin'
import ModulexModal from './modules/ModulexModal' import ModulexModal from './modules/ModulexModal'
export default { export default {
name: 'ModulexList', name: 'ModulexList',
mixins:[JeecgListMixin, mixinDevice], mixins: [JeecgListMixin, mixinDevice],
components: { components: {
ModulexModal ModulexModal
}, },
data () { data() {
return { return {
description: '模块管理管理页面', description: '模块管理管理页面',
// //
columns: [ columns: [
{ {
title: '#', title: '#',
dataIndex: '', dataIndex: '',
key:'rowIndex', key: 'rowIndex',
width:60, width: 60,
align:"center", align: "center",
customRender:function (t,r,index) { customRender: function (t, r, index) {
return parseInt(index)+1; return parseInt(index) + 1;
}
},
{
title:'上级模块id',
align:"center",
dataIndex: 'pid'
},
{
title:'项目id',
align:"center",
dataIndex: 'projectId'
},
{
title:'中文名称',
align:"center",
dataIndex: 'moduleName'
},
{
title:'英文名称',
align:"center",
dataIndex: 'moduleEnName'
},
{
title:'模块编码',
align:"center",
dataIndex: 'moduleCode'
},
{
title:'内容描述',
align:"center",
dataIndex: 'pmDescribe'
},
// {
// title:'',
// align:"center",
// dataIndex: 'managerUsers'
// },
{
title:'任务等级',
align:"center",
dataIndex: 'workLevel_dictText'
},
{
title:'任务状态',
align:"center",
dataIndex: 'workStatus_dictText'
},
{
title:'发布时间',
align:"center",
dataIndex: 'publishTime',
customRender:function (text) {
return !text?"":(text.length>10?text.substr(0,10):text)
}
},
{
title:'任务时长',
align:"center",
dataIndex: 'duration'
},
// {
// title:'',
// align:"center",
// dataIndex: 'startTime',
// customRender:function (text) {
// return !text?"":(text.length>10?text.substr(0,10):text)
// }
// },
// {
// title:'',
// align:"center",
// dataIndex: 'submitTime',
// customRender:function (text) {
// return !text?"":(text.length>10?text.substr(0,10):text)
// }
// },
{
title:'实际时长',
align:"center",
dataIndex: 'realDuration'
},
// {
// title:'',
// align:"center",
// dataIndex: 'userRole'
// },
// {
// title:'',
// align:"center",
// dataIndex: 'relatedBean'
// },
// {
// title:'',
// align:"center",
// dataIndex: 'prototypes'
// },
// {
// title:'',
// align:"center",
// dataIndex: 'diagrams'
// },
{
title:'模块状态',
align:"center",
dataIndex: 'status_dictText'
},
{
title:'版本状态',
align:"center",
dataIndex: 'verisonStatus_dictText'
},
// {
// title:'',
// align:"center",
// dataIndex: 'verison'
// },
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
} }
],
url: {
list: "/modulex/modulex/list",
delete: "/modulex/modulex/delete",
deleteBatch: "/modulex/modulex/deleteBatch",
exportXlsUrl: "/modulex/modulex/exportXls",
importExcelUrl: "modulex/modulex/importExcel",
}, },
dictOptions:{}, {
superFieldList:[], title: '上级模块id',
} align: "center",
}, dataIndex: 'pid_dictText'
created() { },
{
title: '项目id',
align: "center",
dataIndex: 'projectId_dictText'
},
{
title: '中文名称',
align: "center",
dataIndex: 'moduleName'
},
{
title: '英文名称',
align: "center",
dataIndex: 'moduleEnName'
},
{
title: '模块编码',
align: "center",
dataIndex: 'moduleCode'
},
// {
// title: '',
// align: "center",
// dataIndex: 'pmDescribe'
// },
// {
// title:'',
// align:"center",
// dataIndex: 'managerUsers'
// },
{
title: '任务等级',
align: "center",
dataIndex: 'workLevel_dictText'
},
{
title: '任务状态',
align: "center",
dataIndex: 'workStatus_dictText'
},
{
title: '发布时间',
align: "center",
dataIndex: 'publishTime',
customRender: function (text) {
return !text ? "" : (text.length > 10 ? text.substr(0, 10) : text)
}
},
{
title: '任务时长',
align: "center",
dataIndex: 'duration'
},
// {
// title:'',
// align:"center",
// dataIndex: 'startTime',
// customRender:function (text) {
// return !text?"":(text.length>10?text.substr(0,10):text)
// }
// },
// {
// title:'',
// align:"center",
// dataIndex: 'submitTime',
// customRender:function (text) {
// return !text?"":(text.length>10?text.substr(0,10):text)
// }
// },
{
title: '实际时长',
align: "center",
dataIndex: 'realDuration'
},
// {
// title:'',
// align:"center",
// dataIndex: 'userRole'
// },
{
title:'关联实体',
align:"center",
dataIndex: 'relatedBean_dictText'
},
// {
// title:'',
// align:"center",
// dataIndex: 'prototypes'
// },
// {
// title:'',
// align:"center",
// dataIndex: 'diagrams'
// },
{
title: '模块状态',
align: "center",
dataIndex: 'status_dictText'
},
{
title: '版本状态',
align: "center",
dataIndex: 'verisonStatus_dictText'
},
// {
// title:'',
// align:"center",
// dataIndex: 'verison'
// },
{
title: '操作',
dataIndex: 'action',
align: "center",
fixed: "right",
width: 147,
scopedSlots: {customRender: 'action'}
}
],
url: {
list: "/modulex/modulex/list",
delete: "/modulex/modulex/delete",
deleteBatch: "/modulex/modulex/deleteBatch",
exportXlsUrl: "/modulex/modulex/exportXls",
importExcelUrl: "modulex/modulex/importExcel",
},
dictOptions: {},
superFieldList: [],
}
},
created() {
this.getSuperFieldList(); this.getSuperFieldList();
},
computed: {
importExcelUrl: function () {
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
}, },
computed: { },
importExcelUrl: function(){ methods: {
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; initDictConfig() {
},
}, },
methods: { getSuperFieldList() {
initDictConfig(){ let fieldList = [];
}, fieldList.push({type: 'string', value: 'pid', text: '上级模块id', dictCode: ''})
getSuperFieldList(){ fieldList.push({type: 'string', value: 'projectId', text: '项目id', dictCode: ''})
let fieldList=[]; fieldList.push({type: 'string', value: 'moduleName', text: '中文名称', dictCode: ''})
fieldList.push({type:'string',value:'pid',text:'上级模块id',dictCode:''}) fieldList.push({type: 'string', value: 'moduleEnName', text: '英文名称', dictCode: ''})
fieldList.push({type:'string',value:'projectId',text:'项目id',dictCode:''}) fieldList.push({type: 'string', value: 'moduleCode', text: '模块编码', dictCode: ''})
fieldList.push({type:'string',value:'moduleName',text:'中文名称',dictCode:''}) fieldList.push({type: 'string', value: 'pmDescribe', text: '内容描述', dictCode: ''})
fieldList.push({type:'string',value:'moduleEnName',text:'英文名称',dictCode:''}) fieldList.push({type: 'string', value: 'managerUsers', text: '责任人', dictCode: ''})
fieldList.push({type:'string',value:'moduleCode',text:'模块编码',dictCode:''}) fieldList.push({type: 'int', value: 'workLevel', text: '任务等级', dictCode: ''})
fieldList.push({type:'string',value:'pmDescribe',text:'内容描述',dictCode:''}) fieldList.push({type: 'int', value: 'workStatus', text: '任务状态', dictCode: ''})
fieldList.push({type:'string',value:'managerUsers',text:'责任人',dictCode:''}) fieldList.push({type: 'date', value: 'publishTime', text: '发布时间'})
fieldList.push({type:'int',value:'workLevel',text:'任务等级',dictCode:''}) fieldList.push({type: 'double', value: 'duration', text: '任务时长', dictCode: ''})
fieldList.push({type:'int',value:'workStatus',text:'任务状态',dictCode:''}) fieldList.push({type: 'date', value: 'startTime', text: '开始时间'})
fieldList.push({type:'date',value:'publishTime',text:'发布时间'}) fieldList.push({type: 'date', value: 'submitTime', text: '提交时间'})
fieldList.push({type:'double',value:'duration',text:'任务时长',dictCode:''}) fieldList.push({type: 'double', value: 'realDuration', text: '实际时长', dictCode: ''})
fieldList.push({type:'date',value:'startTime',text:'开始时间'}) fieldList.push({type: 'string', value: 'userRole', text: '用户角色', dictCode: ''})
fieldList.push({type:'date',value:'submitTime',text:'提交时间'}) fieldList.push({type: 'string', value: 'relatedBean', text: '关联实体', dictCode: ''})
fieldList.push({type:'double',value:'realDuration',text:'实际时长',dictCode:''}) fieldList.push({type: 'string', value: 'prototypes', text: '原型图', dictCode: ''})
fieldList.push({type:'string',value:'userRole',text:'用户角色',dictCode:''}) fieldList.push({type: 'string', value: 'diagrams', text: '分析图', dictCode: ''})
fieldList.push({type:'string',value:'relatedBean',text:'关联实体',dictCode:''}) fieldList.push({type: 'int', value: 'status', text: '模块状态', dictCode: ''})
fieldList.push({type:'string',value:'prototypes',text:'原型图',dictCode:''}) fieldList.push({type: 'int', value: 'verisonStatus', text: '版本状态', dictCode: ''})
fieldList.push({type:'string',value:'diagrams',text:'分析图',dictCode:''}) fieldList.push({type: 'int', value: 'verison', text: '版本号', dictCode: ''})
fieldList.push({type:'int',value:'status',text:'模块状态',dictCode:''}) this.superFieldList = fieldList
fieldList.push({type:'int',value:'verisonStatus',text:'版本状态',dictCode:''})
fieldList.push({type:'int',value:'verison',text:'版本号',dictCode:''})
this.superFieldList = fieldList
}
} }
} }
}
</script> </script>
<style scoped> <style scoped>
@import '~@assets/less/common.less'; @import '~@assets/less/common.less';
</style> </style>

@ -5,12 +5,16 @@
<a-row> <a-row>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="上级模块id" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pid"> <a-form-model-item label="上级模块id" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pid">
<a-input v-model="model.pid" placeholder="请输入上级模块id" ></a-input> <!-- <a-input v-model="model.pid" placeholder="请输入上级模块id" ></a-input>-->
<j-dict-select-tag v-model="model.pid" dict-code="modulex,module_name,id"
placeholder="请输入上级模块id" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="项目id" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="projectId"> <a-form-model-item label="项目id" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="projectId">
<a-input v-model="model.projectId" placeholder="请输入项目id" ></a-input> <!-- <a-input v-model="model.projectId" placeholder="请输入项目id" ></a-input>-->
<j-dict-select-tag v-model="model.projectId" dict-code="projectx,project_name,id"
placeholder="请输入项目id" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
@ -35,72 +39,85 @@
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="责任人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="managerUsers"> <a-form-model-item label="责任人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="managerUsers">
<a-input v-model="model.managerUsers" placeholder="请输入责任人" ></a-input> <!-- <a-input v-model="model.managerUsers" placeholder="请输入责任人" ></a-input>-->
<j-select-user-by-dep v-model="model.managerUsers" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="任务等级" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workLevel"> <a-form-model-item label="任务等级" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workLevel">
<a-input-number v-model="model.workLevel" placeholder="请输入任务等级" style="width: 100%" /> <!-- <a-input-number v-model="model.workLevel" placeholder="请输入任务等级" style="width: 100%" />-->
<j-dict-select-tag v-model="model.workLevel" dict-code="work_level"
placeholder="请输入任务等级" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="任务状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workStatus"> <a-form-model-item label="任务状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workStatus">
<a-input-number v-model="model.workStatus" placeholder="请输入任务状态" style="width: 100%" /> <!-- <a-input-number v-model="model.workStatus" placeholder="请输入任务状态" style="width: 100%" />-->
<j-dict-select-tag v-model="model.workStatus" dict-code="work_status"
placeholder="请输入任务状态" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="发布时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="publishTime"> <a-form-model-item label="发布时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="publishTime">
<j-date placeholder="请选择发布时间" v-model="model.publishTime" style="width: 100%" /> <j-date placeholder="请选择发布时间" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.publishTime" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="任务时长" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="duration"> <a-form-model-item label="任务时长" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="duration">
<a-input-number v-model="model.duration" placeholder="请输入任务时长" style="width: 100%" /> <a-input-number :min="0.1" :max="16" :precision="1" v-model="model.duration" placeholder="请输入任务时长" style="width: 100%"/>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="开始时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="startTime"> <a-form-model-item label="开始时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="startTime">
<j-date placeholder="请选择开始时间" v-model="model.startTime" style="width: 100%" /> <j-date placeholder="请选择开始时间" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.startTime" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="提交时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="submitTime"> <a-form-model-item label="提交时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="submitTime">
<j-date placeholder="请选择提交时间" v-model="model.submitTime" style="width: 100%" /> <j-date placeholder="请选择提交时间" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.submitTime" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="实际时长" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="realDuration"> <a-form-model-item label="实际时长" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="realDuration">
<a-input-number v-model="model.realDuration" placeholder="请输入实际时长" style="width: 100%" /> <!-- <a-input-number v-model="model.realDuration" placeholder="请输入实际时长" style="width: 100%" />-->
<a-input-number :min="0.1" :max="16" :precision="1" v-model="model.realDuration" placeholder="请输入实际时长" style="width: 100%"/>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="用户角色" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="userRole"> <a-form-model-item label="用户角色" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="userRole">
<a-input v-model="model.userRole" placeholder="请输入用户角色" ></a-input> <!-- <a-input v-model="model.userRole" placeholder="请输入用户角色" ></a-input>-->
<j-multi-select-tag type="list_multi" v-model="model.userRole" dictCode="sys_role,role_name,id" placeholder="请选择用户角色" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="关联实体" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="relatedBean"> <a-form-model-item label="关联实体" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="relatedBean">
<a-input v-model="model.relatedBean" placeholder="请输入关联实体" ></a-input> <j-dict-select-tag v-model="model.relatedBean" dict-code="tablex,table_name,id"
placeholder="请输入关联实体" ></j-dict-select-tag>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="原型图" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="prototypes"> <a-form-model-item label="原型图" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="prototypes">
<a-input v-model="model.prototypes" placeholder="请输入原型图" ></a-input> <!-- <a-input v-model="model.prototypes" placeholder="请输入原型图" ></a-input>-->
<j-image-upload isMultiple v-model="model.prototypes" ></j-image-upload>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="分析图" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="diagrams"> <a-form-model-item label="分析图" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="diagrams">
<a-input v-model="model.diagrams" placeholder="请输入分析图" ></a-input> <!-- <a-input v-model="model.diagrams" placeholder="请输入分析图" ></a-input>-->
<j-image-upload isMultiple v-model="model.diagrams" ></j-image-upload>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="模块状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="status"> <a-form-model-item label="模块状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="status">
<a-input-number v-model="model.status" placeholder="请输入模块状态" style="width: 100%" /> <!-- <a-input-number v-model="model.status" placeholder="请输入模块状态" style="width: 100%" />-->
<j-dict-select-tag type="radio" v-model="model.status" placeholder="请输入模块状态" dict-code="a_status" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="版本状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="verisonStatus"> <a-form-model-item label="版本状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="verisonStatus">
<a-input-number v-model="model.verisonStatus" placeholder="请输入版本状态" style="width: 100%" /> <!-- <a-input-number v-model="model.verisonStatus" placeholder="请输入版本状态" style="width: 100%" />-->
<j-dict-select-tag type="radioButton" v-model="model.verisonStatus" dict-code="verison_status"
placeholder="请输入版本状态"/>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<!-- <a-col :span="24">--> <!-- <a-col :span="24">-->
@ -118,6 +135,7 @@
import { httpAction, getAction } from '@api/manage' import { httpAction, getAction } from '@api/manage'
import { validateDuplicateValue } from '@/utils/util' import { validateDuplicateValue } from '@/utils/util'
import moment from "dayjs";
export default { export default {
name: 'ModulexForm', name: 'ModulexForm',
@ -134,6 +152,13 @@
data () { data () {
return { return {
model:{ model:{
workLevel: 2,
workStatus: 0,
duration: 1,
submitTime: moment(new Date()).format("YYYY-MM-DD HH:mm:ss"),
realDuration: 16,
status: 1,
verisonStatus: 1,
}, },
labelCol: { labelCol: {
xs: { span: 24 }, xs: { span: 24 },

@ -4,6 +4,20 @@
<div class="table-page-search-wrapper"> <div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery"> <a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :md="6" :sm="12">
<a-form-item label="角色名称">
<!--<a-input placeholder="请输入账号查询" v-model="queryParam.username"></a-input>-->
<j-input v-model="queryParam.userRole"></j-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
<a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
</span>
</a-col>
</a-row> </a-row>
</a-form> </a-form>
</div> </div>
@ -12,18 +26,18 @@
<!-- 操作按钮区域 --> <!-- 操作按钮区域 -->
<div class="table-operator"> <div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button> <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('管理项目用户角色')">导出</a-button> <!-- <a-button type="primary" icon="download" @click="handleExportXls('管理项目用户角色')">导出</a-button>-->
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <!-- <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">-->
<a-button type="primary" icon="import">导入</a-button> <!-- <a-button type="primary" icon="import">导入</a-button>-->
</a-upload> <!-- </a-upload>-->
<!-- 高级查询区域 --> <!-- &lt;!&ndash; 高级查询区域 &ndash;&gt;-->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query> <!-- <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>-->
<a-dropdown v-if="selectedRowKeys.length > 0"> <!-- <a-dropdown v-if="selectedRowKeys.length > 0">-->
<a-menu slot="overlay"> <!-- <a-menu slot="overlay">-->
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item> <!-- <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>-->
</a-menu> <!-- </a-menu>-->
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button> <!-- <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>-->
</a-dropdown> <!-- </a-dropdown>-->
</div> </div>
<!-- table区域-begin --> <!-- table区域-begin -->
@ -54,36 +68,19 @@
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span> <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template> </template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
<span slot="action" slot-scope="text, record"> <span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a> <a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" /> <a-divider type="vertical" />
<a-dropdown> <a @click="handleDetail(record)">详情</a>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay"> <a-divider type="vertical" />
<a-menu-item> <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a @click="handleDetail(record)">详情</a> <a>删除</a>
</a-menu-item> </a-popconfirm>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span> </span>
</a-table> </a-table>
@ -124,7 +121,7 @@
{ {
title:'项目id', title:'项目id',
align:"center", align:"center",
dataIndex: 'projectId' dataIndex: 'projectId_dictText'
}, },
{ {
title:'角色名称', title:'角色名称',
@ -139,12 +136,17 @@
{ {
title:'父用户', title:'父用户',
align:"center", align:"center",
dataIndex: 'sourceId' dataIndex: 'sourceId_dictText'
}, },
{ {
title:'上级用户', title:'上级用户',
align:"center", align:"center",
dataIndex: 'pid' dataIndex: 'pid_dictText'
},
{
title:'创建时间',
align:"center",
dataIndex: 'createTime'
}, },
{ {
title: '操作', title: '操作',

@ -4,28 +4,32 @@
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail"> <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row> <a-row>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="项目id" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="projectId"> <a-form-model-item label="项目名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="projectId">
<a-input v-model="model.projectId" placeholder="请输入项目id" ></a-input> <j-dict-select-tag type="select" v-model="model.projectId" dict-code="projectx,project_name,id"
placeholder="请选择项目"></j-dict-select-tag>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="角色名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="userRole"> <a-form-model-item label="角色名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="userRole">
<a-input v-model="model.userRole" placeholder="请输入角色名称" ></a-input> <a-input v-model="model.userRole" placeholder="请输入角色名称"></a-input>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="角色描述" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pmDescribe"> <a-form-model-item label="角色描述" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pmDescribe">
<a-input v-model="model.pmDescribe" placeholder="请输入角色描述" ></a-input> <a-input v-model="model.pmDescribe" placeholder="请输入角色描述"></a-input>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="父用户" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sourceId"> <a-form-model-item label="父用户" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sourceId">
<a-input v-model="model.sourceId" placeholder="请输入父用户" ></a-input> <j-dict-select-tag v-model="model.sourceId" dict-code="project_user_role,user_role,id"
placeholder="请输入父用户"></j-dict-select-tag>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="上级用户" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pid"> <a-form-model-item label="上级用户" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pid">
<a-input v-model="model.pid" placeholder="请输入上级用户" ></a-input> <!-- <a-input v-model="model.pid" placeholder="请输入上级用户"></a-input>-->
<j-dict-select-tag v-model="model.pid" dict-code="project_user_role,user_role,id"
placeholder="请输入父用户"></j-dict-select-tag>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
</a-row> </a-row>
@ -36,89 +40,86 @@
<script> <script>
import { httpAction, getAction } from '@/api/manage' import {httpAction, getAction} from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util' import {validateDuplicateValue} from '@/utils/util'
export default { export default {
name: 'ProjectUserRoleForm', name: 'ProjectUserRoleForm',
components: { components: {},
}, props: {
props: { //
// disabled: {
disabled: { type: Boolean,
type: Boolean, default: false,
default: false, required: false
required: false }
} },
}, data() {
data () { return {
return { model: {},
model:{ labelCol: {
}, xs: {span: 24},
labelCol: { sm: {span: 5},
xs: { span: 24 }, },
sm: { span: 5 }, wrapperCol: {
}, xs: {span: 24},
wrapperCol: { sm: {span: 16},
xs: { span: 24 }, },
sm: { span: 16 }, confirmLoading: false,
}, validatorRules: {},
confirmLoading: false, url: {
validatorRules: { add: "/projectx/projectUserRole/add",
}, edit: "/projectx/projectUserRole/edit",
url: { queryById: "/projectx/projectUserRole/queryById"
add: "/projectx/projectUserRole/add",
edit: "/projectx/projectUserRole/edit",
queryById: "/projectx/projectUserRole/queryById"
}
} }
}
},
computed: {
formDisabled() {
return this.disabled
}, },
computed: { },
formDisabled(){ created() {
return this.disabled //model
}, this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add() {
this.edit(this.modelDefault);
}, },
created () { edit(record) {
//model this.model = Object.assign({}, record);
this.modelDefault = JSON.parse(JSON.stringify(this.model)); this.visible = true;
}, },
methods: { submitForm() {
add () { const that = this;
this.edit(this.modelDefault); //
}, this.$refs.form.validate(valid => {
edit (record) { if (valid) {
this.model = Object.assign({}, record); that.confirmLoading = true;
this.visible = true; let httpurl = '';
}, let method = '';
submitForm () { if (!this.model.id) {
const that = this; httpurl += this.url.add;
// method = 'post';
this.$refs.form.validate(valid => { } else {
if (valid) { httpurl += this.url.edit;
that.confirmLoading = true; method = 'put';
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
} }
httpAction(httpurl, this.model, method).then((res) => {
if (res.success) {
that.$message.success(res.message);
that.$emit('ok');
} else {
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
}) })
}, },
}
} }
}
</script> </script>

@ -37,25 +37,25 @@
<!-- 操作按钮区域 --> <!-- 操作按钮区域 -->
<div class="table-operator"> <div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button> <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('项目管理 管理项目基本信息')">导出</a-button> <!-- <a-button type="primary" icon="download" @click="handleExportXls('项目管理 管理项目基本信息')">导出</a-button>-->
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" <!-- <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"-->
@change="handleImportExcel"> <!-- @change="handleImportExcel">-->
<a-button type="primary" icon="import">导入</a-button> <!-- <a-button type="primary" icon="import">导入</a-button>-->
</a-upload> <!-- </a-upload>-->
<!-- 高级查询区域 --> <!-- &lt;!&ndash; 高级查询区域 &ndash;&gt;-->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" <!-- <j-super-query :fieldList="superFieldList" ref="superQueryModal"-->
@handleSuperQuery="handleSuperQuery"></j-super-query> <!-- @handleSuperQuery="handleSuperQuery"></j-super-query>-->
<a-dropdown v-if="selectedRowKeys.length > 0"> <!-- <a-dropdown v-if="selectedRowKeys.length > 0">-->
<a-menu slot="overlay"> <!-- <a-menu slot="overlay">-->
<a-menu-item key="1" @click="batchDel"> <!-- <a-menu-item key="1" @click="batchDel">-->
<a-icon type="delete"/> <!-- <a-icon type="delete"/>-->
删除 <!-- 删除-->
</a-menu-item> <!-- </a-menu-item>-->
</a-menu> <!-- </a-menu>-->
<a-button style="margin-left: 8px"> 批量操作 <!-- <a-button style="margin-left: 8px"> 批量操作-->
<a-icon type="down"/> <!-- <a-icon type="down"/>-->
</a-button> <!-- </a-button>-->
</a-dropdown> <!-- </a-dropdown>-->
</div> </div>
<!-- table区域-begin --> <!-- table区域-begin -->
@ -92,19 +92,13 @@
<a @click="handleEdit(record)">编辑</a> <a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical"/> <a-divider type="vertical"/>
<a-dropdown> <a @click="handleDetail(record)">详情</a>
<a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
<a-menu slot="overlay"> <a-divider type="vertical"/>
<a-menu-item> <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a @click="handleDetail(record)">详情</a> <a>删除</a>
</a-menu-item> </a-popconfirm>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span> </span>
</a-table> </a-table>
@ -157,21 +151,21 @@ export default {
align: "center", align: "center",
dataIndex: 'projectCode' dataIndex: 'projectCode'
}, },
{ // {
title: '项目描述', // title: '',
align: "center", // align: "center",
dataIndex: 'pmDescribe' // dataIndex: 'pmDescribe'
}, // },
{ // {
title: '项目图片', // title: '',
align: "center", // align: "center",
dataIndex: 'projectPic' // dataIndex: 'projectPic'
}, // },
{ // {
title: '项目网址', // title: '',
align: "center", // align: "center",
dataIndex: 'projectUrl' // dataIndex: 'projectUrl'
}, // },
// { // {
// title:'', // title:'',
// align:"center", // align:"center",
@ -203,16 +197,21 @@ export default {
return !text ? "" : (text.length > 10 ? text.substr(0, 10) : text) return !text ? "" : (text.length > 10 ? text.substr(0, 10) : text)
} }
}, },
// { {
// title:'', title:'复制来源',
// align:"center", align:"center",
// dataIndex: 'sourceProjectId' dataIndex: 'sourceProjectId_dictText'
// }, },
{ {
title: '项目状态', title: '项目状态',
align: "center", align: "center",
dataIndex: 'projectStatus_dictText' dataIndex: 'projectStatus_dictText'
}, },
{
title: '创建时间',
align: "center",
dataIndex: 'createTime'
},
{ {
title: '管理', title: '管理',
dataIndex: 'htmlSlot', dataIndex: 'htmlSlot',

@ -25,7 +25,8 @@
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="项目图片" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="projectPic"> <a-form-model-item label="项目图片" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="projectPic">
<a-input v-model="model.projectPic" placeholder="请输入项目图片" ></a-input> <!-- <a-input v-model="model.projectPic" placeholder="请输入项目图片" ></a-input>-->
<j-image-upload isMultiple v-model="model.projectPic" ></j-image-upload>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
@ -50,17 +51,19 @@
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="开始时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="startTime"> <a-form-model-item label="开始时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="startTime">
<j-date placeholder="请选择开始时间" v-model="model.startTime" style="width: 100%" /> <j-date placeholder="请选择开始时间" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.startTime" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="完成时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="completeTime"> <a-form-model-item label="完成时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="completeTime">
<j-date placeholder="请选择完成时间" v-model="model.completeTime" style="width: 100%" /> <j-date placeholder="请选择完成时间" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.completeTime" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="复制来源" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sourceProjectId"> <a-form-model-item label="复制来源" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sourceProjectId">
<a-input v-model="model.sourceProjectId" placeholder="请输入复制来源" ></a-input> <!-- <a-input v-model="model.sourceProjectId" placeholder="请输入复制来源" ></a-input>-->
<j-dict-select-tag v-model="model.sourceProjectId" placeholder="请输入复制来源"
dict-code="projectx,project_name,id"/>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
@ -77,7 +80,7 @@
<!-- </a-radio>--> <!-- </a-radio>-->
<!-- </a-radio-group>--> <!-- </a-radio-group>-->
<j-dict-select-tag v-model="model.projectStatus" placeholder="请输入项目状态" dict-code="project_status"/> <j-dict-select-tag type="radio" v-model="model.projectStatus" placeholder="请输入项目状态" dict-code="project_status"/>
<!-- <a-input-number :min="0" v-model="model.projectStatus" placeholder="请输入项目状态" style="width: 100%" />--> <!-- <a-input-number :min="0" v-model="model.projectStatus" placeholder="请输入项目状态" style="width: 100%" />-->
</a-form-model-item> </a-form-model-item>

@ -51,15 +51,28 @@ public class Modulex implements Serializable {
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期") @ApiModelProperty(value = "更新日期")
private Date updateTime; private Date updateTime;
/**上级模块id*/ /**
* 上级模块id
* 关联表字段 modulex.id
* 显示上级名称
*/
@Excel(name = "上级模块id", width = 15) @Excel(name = "上级模块id", width = 15)
@ApiModelProperty(value = "上级模块id") @ApiModelProperty(value = "上级模块id")
@Dict(dictTable = "modulex",dicText = "module_name",dicCode = "id")
private String pid; private String pid;
/**项目id*/ /**
* 项目id
* 关联表字段 modulex.id
* 显示项目名称
*/
@Excel(name = "项目id", width = 15) @Excel(name = "项目id", width = 15)
@ApiModelProperty(value = "项目id") @ApiModelProperty(value = "项目id")
@Dict(dictTable = "projectx",dicText = "project_name",dicCode = "id")
private String projectId; private String projectId;
/**中文名称*/ /**
* 中文名称
* 相同上级的模块不能重名
*/
@Excel(name = "中文名称", width = 15) @Excel(name = "中文名称", width = 15)
@ApiModelProperty(value = "中文名称") @ApiModelProperty(value = "中文名称")
private String moduleName; private String moduleName;
@ -75,7 +88,11 @@ public class Modulex implements Serializable {
@Excel(name = "内容描述", width = 15) @Excel(name = "内容描述", width = 15)
@ApiModelProperty(value = "内容描述") @ApiModelProperty(value = "内容描述")
private String pmDescribe; private String pmDescribe;
/**责任人*/ /**
* 责任人
* 关联表字段 用户表.id(s)
* 用户id列表模块的开发任务可以分配给多个人员显示用户名称列表
*/
@Excel(name = "责任人", width = 15) @Excel(name = "责任人", width = 15)
@ApiModelProperty(value = "责任人") @ApiModelProperty(value = "责任人")
private String managerUsers; private String managerUsers;
@ -89,7 +106,7 @@ public class Modulex implements Serializable {
private Integer workLevel; private Integer workLevel;
/** /**
* 任务状态 * 任务状态
* 未发布0已发布1开发中2已完成3驳回8默认0 * 未发布0已发布1开发中2已完成3审核4DEBUG9默认0
*/ */
@Excel(name = "任务状态", width = 15) @Excel(name = "任务状态", width = 15)
@ApiModelProperty(value = "任务状态") @ApiModelProperty(value = "任务状态")
@ -101,7 +118,10 @@ public class Modulex implements Serializable {
@DateTimeFormat(pattern="yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "发布时间") @ApiModelProperty(value = "发布时间")
private Date publishTime; private Date publishTime;
/**任务时长*/ /**
* 任务时长
* 单位小时等于下级模块时长的和默认1小时
*/
@Excel(name = "任务时长", width = 15) @Excel(name = "任务时长", width = 15)
@ApiModelProperty(value = "任务时长") @ApiModelProperty(value = "任务时长")
private Double duration; private Double duration;
@ -121,13 +141,22 @@ public class Modulex implements Serializable {
@Excel(name = "实际时长", width = 15) @Excel(name = "实际时长", width = 15)
@ApiModelProperty(value = "实际时长") @ApiModelProperty(value = "实际时长")
private Double realDuration; private Double realDuration;
/**用户角色*/ /**
* 用户角色
* 关联表字段 project_user_role.id(s)
* 规则 角色列表哪些用户可以使用该模块即未来系统的权限分配显示角色名列表
*/
@Excel(name = "用户角色", width = 15) @Excel(name = "用户角色", width = 15)
@ApiModelProperty(value = "用户角色") @ApiModelProperty(value = "用户角色")
private String userRole; private String userRole;
/**关联实体*/ /**
* 关联实体
* 关联表字段 tablex.id
* 规则 关联实体表关联的是该模块管理的实体最下级模块有显示表名
*/
@Excel(name = "关联实体", width = 15) @Excel(name = "关联实体", width = 15)
@ApiModelProperty(value = "关联实体") @ApiModelProperty(value = "关联实体")
@Dict(dictTable = "tablex",dicText = "table_name",dicCode = "id")
private String relatedBean; private String relatedBean;
/**原型图*/ /**原型图*/
@Excel(name = "原型图", width = 15) @Excel(name = "原型图", width = 15)

@ -10,6 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@ -50,9 +51,14 @@ public class ProjectUserRole implements Serializable {
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期") @ApiModelProperty(value = "更新日期")
private Date updateTime; private Date updateTime;
/**项目id*/ /**
* 项目id
* 关联表字段 projectx.id
* 显示项目名称
*/
@Excel(name = "项目id", width = 15) @Excel(name = "项目id", width = 15)
@ApiModelProperty(value = "项目id") @ApiModelProperty(value = "项目id")
@Dict(dictTable = "projectx",dicText = "project_name",dicCode = "id")
private String projectId; private String projectId;
/**角色名称*/ /**角色名称*/
@Excel(name = "角色名称", width = 15) @Excel(name = "角色名称", width = 15)
@ -62,12 +68,22 @@ public class ProjectUserRole implements Serializable {
@Excel(name = "角色描述", width = 15) @Excel(name = "角色描述", width = 15)
@ApiModelProperty(value = "角色描述") @ApiModelProperty(value = "角色描述")
private String pmDescribe; private String pmDescribe;
/**父用户*/ /**
* 父用户
* 关联表字段 project_user_role.id
* 继承的用户角色显示角色名称
*/
@Excel(name = "父用户", width = 15) @Excel(name = "父用户", width = 15)
@ApiModelProperty(value = "父用户") @ApiModelProperty(value = "父用户")
@Dict(dictTable = "project_user_role",dicText = "user_role",dicCode = "id")
private String sourceId; private String sourceId;
/**上级用户*/ /**
* 上级用户
* 关联表字段 project_user_role.id
* 本用户的上级用户角色显示角色名称
*/
@Excel(name = "上级用户", width = 15) @Excel(name = "上级用户", width = 15)
@ApiModelProperty(value = "上级用户") @ApiModelProperty(value = "上级用户")
@Dict(dictTable = "project_user_role",dicText = "user_role",dicCode = "id")
private String pid; private String pid;
} }

@ -99,9 +99,14 @@ public class Projectx implements Serializable {
@DateTimeFormat(pattern="yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "完成时间") @ApiModelProperty(value = "完成时间")
private Date completeTime; private Date completeTime;
/**复制来源*/ /**
* 复制来源
* 关联表字段 projectx.id
* 规则 复制源项目的id显示源项目名称
*/
@Excel(name = "复制来源", width = 15) @Excel(name = "复制来源", width = 15)
@ApiModelProperty(value = "复制来源") @ApiModelProperty(value = "复制来源")
@Dict(dictTable = "projectx", dicText = "project_name",dicCode = "id")
private String sourceProjectId; private String sourceProjectId;
/**项目状态*/ /**项目状态*/
@Excel(name = "项目状态", width = 15) @Excel(name = "项目状态", width = 15)

Loading…
Cancel
Save