Browse Source

删除xmMenuExchange

master
陈裕财 3 years ago
parent
commit
d0f24d1477
  1. 30
      src/api/xm/core/xmMenuExchange.js
  2. 3
      src/router/routes_xm.js
  3. 3
      src/views/xm/core/crowd/XmTaskCrowdMng.vue
  4. 79
      src/views/xm/core/xmExchange/TaskUserEditor.vue
  5. 174
      src/views/xm/core/xmExchange/XmExchangeAdd.vue
  6. 169
      src/views/xm/core/xmExchange/XmExchangeEdit.vue
  7. 330
      src/views/xm/core/xmExchange/XmExchangeMng.vue
  8. 3
      src/views/xm/core/xmIteration/XmIterationInfo.vue
  9. 6
      src/views/xm/core/xmMenu/XmMenuEdit.vue
  10. 6
      src/views/xm/core/xmMenu/XmMenuRichDetail.vue
  11. 79
      src/views/xm/core/xmMenuExchange/MenuUserEditor.vue
  12. 393
      src/views/xm/core/xmMenuExchange/XmMenuExchangeMng.vue
  13. 44
      src/views/xm/core/xmMenuExchange/XmMenuExchangeRoute.vue
  14. 3
      src/views/xm/core/xmProduct/XmProductInfo.vue
  15. 3
      src/views/xm/core/xmTask/XmTaskMng.vue

30
src/api/xm/core/xmMenuExchange.js

@ -1,30 +0,0 @@
import axios from '@/utils/request'
import config from '@/common/config'
let base = config.getCoreBasePath();
/**
* 功能表
*1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉
*2 查询新增修改的参数格式 params={id:'评论编号 主键',menuId:'功能编号',menuName:'功能名称',productId:'归属产品编号',remark:'备注',pid:'上级评论编号',cuserid:'评论人编号',cusername:'评论人名称',ctime:'评论时间',cbranchId:'评论人所属机构',adopt:'是否采纳0否1采纳',adoptUserid:'采纳人编号',adoptUsername:'采纳人名称',adoptTime:'采纳时间',closed:'关闭该评论0否1是',puserid:'上级用户编号',pusername:'上级姓名',premark:'上级备注',notifyUserids:'本评论需要同步给的人列表,逗号分隔',notifyChannels:'发送通知渠道inner-email/wxpub/sms/im/out-email等逗号分割',notifyUsernames:'通知用户姓名逗号分隔',cuserHeadImg:'发言人头像地址',replyType:'回复方式1引用2回复'}
**/
//普通查询 条件之间and关系
export const listXmMenuExchange = params => { return axios.get(`${base}/xm/core/xmMenuExchange/list`, { params: params }); };
//模糊查询功能表 条件之间or关系
//export const listXmMenuExchangeKey = params => { return axios.get(`${base}/xm/core/xmMenuExchange/listKey`, { params: params }); };
//删除一条功能表 params={id:'评论编号 主键'}
export const delXmMenuExchange = params => { return axios.post(`${base}/xm/core/xmMenuExchange/del`,params); };
//批量删除功能表 params=[{id:'评论编号 主键'}]
export const batchDelXmMenuExchange = params => { return axios.post(`${base}/xm/core/xmMenuExchange/batchDel`, params); };
//修改一条功能表记录
export const editXmMenuExchange = params => { return axios.post(`${base}/xm/core/xmMenuExchange/edit`, params); };
//新增一条功能表
export const addXmMenuExchange = params => { return axios.post(`${base}/xm/core/xmMenuExchange/add`, params); };

3
src/router/routes_xm.js

@ -112,8 +112,7 @@ export default {
{ path: 'xmMenu/XmMenuDetailRoute', component: _import('xm/core/xmMenu/XmMenuDetailRoute'), name: 'XmMenuDetailRoute', meta: { title: '需求明细' },hidden:true},
{ path: 'xmMenu/XmMenuMng', component: _import('xm/core/xmMenu/XmMenuMngRoute'), name: 'XmMenuMng', meta: { title: '需求管理' }},
{ path: 'xmMenuExchange/XmMenuExchangeMng', component: _import('xm/core/xmMenuExchange/XmMenuExchangeMng'), name: 'XmMenuExchangeMng', meta: { title: '互动评论' }},
{ path: 'xmIteration/XmIterationMng', component: _import('xm/core/xmIteration/XmIterationMng'), name: 'XmIterationMng', meta: { title: '迭代管理' }},
{ path: 'xmIteration/XmIterationMng', component: _import('xm/core/xmIteration/XmIterationMng'), name: 'XmIterationMng', meta: { title: '迭代管理' }},
]
},

3
src/views/xm/core/crowd/XmTaskCrowdMng.vue

@ -618,8 +618,7 @@ import xmExecuserMng from "../xmTaskExecuser/XmTaskExecuserForTask";
import xmSkillMng from "../xmTaskSkill/XmTaskSkillMng";
import skillMng from "@/views/xm/core/skill/skillMng";
import { batchAddSkill } from "@/api/xm/core/xmTaskSkill";
import xmTaskTemplateMng from "../xmTaskTemplate/XmTaskTemplateMng";
import xmExchangeMng from "../xmExchange/XmExchangeMng";
import xmTaskTemplateMng from "../xmTaskTemplate/XmTaskTemplateMng";
import { addUserFocus, delUserFocus } from "@/api/mdp/sys/userFocus";

79
src/views/xm/core/xmExchange/TaskUserEditor.vue

@ -1,79 +0,0 @@
<template>
<div class="comment-list head-editor clearfix">
<div class="comment-avater">
<el-avatar v-if="user.headimgurl" icon="el-icon-user-solid" :src="user.headimgurl">{{user.username}}</el-avatar>
<el-avatar v-else icon="el-icon-user-solid">{{user.username}}</el-avatar>
</div>
<div class="comment-wrap">
<div class="clearfix">
<vue-editor :id="id" :branch-id="userInfo.branchId" :category-id="projectId+'-'+taskId" v-model="content"></vue-editor>
</div>
<div style="margin-top:20px;"></div>
<el-button @click="publish" class="toolbar" type="primary">发布</el-button> <el-button @click="clearContent" style="margin-right: 0.25rem;" class="toolbar" type="plain"></el-button>
</div>
</div>
</template>
<script>
import util from '@/common/js/util';//
import { mapGetters } from 'vuex';
import VueEditor from '@/components/Tinymce/index';
import {sn} from '@/common/js/sequence';
export default {
props:['id',"projectId","taskId",'user'],
computed: {
...mapGetters([
'userInfo','roles',
]),
},
data() {
return {
content: '',
}
},
methods: {
publish() {
let params = {
content: this.content,
}
if(!this.content){
this.$notify.error("请输入内容再提交");
return;
}
this.$emit('publish',params);
},
clearContent(){
this.content="";
}
},
mounted() {
this.$nextTick(() => {
});
},
components: {
VueEditor,
},
}
</script>
<style lang="scss" scoped>
.head-editor{
border: none;
padding: 0 15px 10px 60px;
margin-top: 15px;
position: relative;
}
.comment-avater{
position: absolute;
left: 10px;
top: 0;
}
.toolbar{
float: right;
margin: .25rem 0;
}
.clearfix::after {
clear: both;
content: "";
}
</style>

174
src/views/xm/core/xmExchange/XmExchangeAdd.vue

@ -1,174 +0,0 @@
<template>
<section class="page-container padding border">
<el-row>
<!--新增界面 XmExchange 需求表-->
<el-form :model="addForm" label-width="120px" :rules="addFormRules" ref="addForm">
<el-form-item label="需求编号" prop="taskId">
<el-input v-model="addForm.taskId" placeholder="需求编号" ></el-input>
</el-form-item>
<el-form-item label="需求名称" prop="taskName">
<el-input v-model="addForm.taskName" placeholder="需求名称" ></el-input>
</el-form-item>
<el-form-item label="归属产品编号" prop="projectId">
<el-input v-model="addForm.projectId" placeholder="归属产品编号" ></el-input>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="addForm.remark" placeholder="备注" ></el-input>
</el-form-item>
<el-form-item label="评论编号" prop="id">
<el-input v-model="addForm.id" placeholder="评论编号" ></el-input>
</el-form-item>
<el-form-item label="上级评论编号" prop="pid">
<el-input v-model="addForm.pid" placeholder="上级评论编号" ></el-input>
</el-form-item>
<el-form-item label="评论人编号" prop="cuserid">
<el-input v-model="addForm.cuserid" placeholder="评论人编号" ></el-input>
</el-form-item>
<el-form-item label="评论人名称" prop="cusername">
<el-input v-model="addForm.cusername" placeholder="评论人名称" ></el-input>
</el-form-item>
<el-form-item label="评论时间" prop="ctime">
<el-date-picker type="date" placeholder="选择日期" v-model="addForm.ctime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="评论人所属机构" prop="cbranchId">
<el-input v-model="addForm.cbranchId" placeholder="评论人所属机构" ></el-input>
</el-form-item>
<el-form-item label="是否采纳0否1采纳" prop="adopt">
<el-input v-model="addForm.adopt" placeholder="是否采纳0否1采纳" ></el-input>
</el-form-item>
<el-form-item label="采纳人编号" prop="adoptUserid">
<el-input v-model="addForm.adoptUserid" placeholder="采纳人编号" ></el-input>
</el-form-item>
<el-form-item label="采纳人名称" prop="adoptUsername">
<el-input v-model="addForm.adoptUsername" placeholder="采纳人名称" ></el-input>
</el-form-item>
<el-form-item label="采纳时间" prop="adoptTime">
<el-date-picker type="date" placeholder="选择日期" v-model="addForm.adoptTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="关闭该评论0否1是" prop="closed">
<el-input v-model="addForm.closed" placeholder="关闭该评论0否1是" ></el-input>
</el-form-item>
<el-form-item label="上级用户编号" prop="puserid">
<el-input v-model="addForm.puserid" placeholder="上级用户编号" ></el-input>
</el-form-item>
<el-form-item label="上级姓名" prop="pusername">
<el-input v-model="addForm.pusername" placeholder="上级姓名" ></el-input>
</el-form-item>
<el-form-item label="上级备注" prop="premark">
<el-input v-model="addForm.premark" placeholder="上级备注" ></el-input>
</el-form-item>
<el-form-item label="本评论需要同步给的人列表,逗号分隔" prop="notifyUserids">
<el-input v-model="addForm.notifyUserids" placeholder="本评论需要同步给的人列表,逗号分隔" ></el-input>
</el-form-item>
<el-form-item label="发送通知渠道inner-email/wxpub/sms/im/out-email等逗号分割" prop="notifyChannels">
<el-input v-model="addForm.notifyChannels" placeholder="发送通知渠道inner-email/wxpub/sms/im/out-email等逗号分割" ></el-input>
</el-form-item>
<el-form-item label="通知用户姓名逗号分隔" prop="notifyUsernames">
<el-input v-model="addForm.notifyUsernames" placeholder="通知用户姓名逗号分隔" ></el-input>
</el-form-item>
<el-form-item label="发言人头像地址" prop="cuserHeadImg">
<el-input v-model="addForm.cuserHeadImg" placeholder="发言人头像地址" ></el-input>
</el-form-item>
<el-form-item label="回复方式1引用2回复" prop="replyType">
<el-input v-model="addForm.replyType" placeholder="回复方式1引用2回复" ></el-input>
</el-form-item>
<el-form-item>
<el-col :span="24" :offset="8">
<el-button @click.native="handleCancel">取消</el-button>
<el-button v-loading="load.add" type="primary" @click.native="addSubmit" :disabled="load.add==true">提交</el-button>
</el-col>
</el-form-item>
</el-form>
</el-row>
</section>
</template>
<script>
import util from '@/common/js/util';//
import { initSimpleDicts } from '@/api/mdp/meta/item';//
import { addXmExchange } from '@/api/xm/core/xmExchange';
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters([
'userInfo','roles'
])
},
props:['xmExchange','visible'],
watch: {
'xmExchange':function( xmExchange ) {
this.addForm = xmExchange;
},
'visible':function(visible) {
if(visible==true){
//
}
}
},
data() {
return {
dicts:{},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
load:{ list: false, edit: false, del: false, add: false },//...
addFormRules: {
id: [
//{ required: true, message: '', trigger: 'blur' }
]
},
//
addForm: {
taskId:'',taskName:'',projectId:'',remark:'',id:'',pid:'',cuserid:'',cusername:'',ctime:'',cbranchId:'',adopt:'',adoptUserid:'',adoptUsername:'',adoptTime:'',closed:'',puserid:'',pusername:'',premark:'',notifyUserids:'',notifyChannels:'',notifyUsernames:'',cuserHeadImg:'',replyType:''
}
/**begin 在下面加自定义属性,记得补上面的一个逗号**/
/**end 在上面加自定义属性**/
}//end return
},//end data
methods: {
// @cancel="addFormVisible=false"
handleCancel:function(){
this.$refs['addForm'].resetFields();
this.$emit('cancel');
},
//XmExchange @submit="afterAddSubmit"
addSubmit: function () {
this.$refs.addForm.validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
this.load.add=true
let params = Object.assign({}, this.addForm);
addXmExchange(params).then((res) => {
this.load.add=false
var tips=res.data.tips;
if(tips.isOk){
this.$refs['addForm'].resetFields();
this.$emit('submit');// @submit="afterAddSubmit"
}
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.add=false);
});
}
});
},
/**begin 在下面加自定义方法,记得补上面的一个逗号**/
/**end 在上面加自定义方法**/
},//end method
components: {
// 'xm-exchange-edit':XmExchangeEdit
},
mounted() {
this.addForm=Object.assign(this.addForm, this.xmExchange);
/**在下面写其它函数***/
}//end mounted
}
</script>
<style scoped>
</style>

169
src/views/xm/core/xmExchange/XmExchangeEdit.vue

@ -1,169 +0,0 @@
<template>
<section class="page-container padding border">
<el-row>
<!--编辑界面 XmExchange 需求表-->
<el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editForm">
<el-form-item label="需求编号" prop="taskId">
<el-input v-model="editForm.taskId" placeholder="需求编号"></el-input>
</el-form-item>
<el-form-item label="需求名称" prop="taskName">
<el-input v-model="editForm.taskName" placeholder="需求名称"></el-input>
</el-form-item>
<el-form-item label="归属产品编号" prop="projectId">
<el-input v-model="editForm.projectId" placeholder="归属产品编号"></el-input>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="editForm.remark" placeholder="备注"></el-input>
</el-form-item>
<el-form-item label="评论编号" prop="id">
<el-input v-model="editForm.id" placeholder="评论编号"></el-input>
</el-form-item>
<el-form-item label="上级评论编号" prop="pid">
<el-input v-model="editForm.pid" placeholder="上级评论编号"></el-input>
</el-form-item>
<el-form-item label="评论人编号" prop="cuserid">
<el-input v-model="editForm.cuserid" placeholder="评论人编号"></el-input>
</el-form-item>
<el-form-item label="评论人名称" prop="cusername">
<el-input v-model="editForm.cusername" placeholder="评论人名称"></el-input>
</el-form-item>
<el-form-item label="评论时间" prop="ctime">
<el-date-picker type="date" placeholder="选择日期" v-model="editForm.ctime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="评论人所属机构" prop="cbranchId">
<el-input v-model="editForm.cbranchId" placeholder="评论人所属机构"></el-input>
</el-form-item>
<el-form-item label="是否采纳0否1采纳" prop="adopt">
<el-input v-model="editForm.adopt" placeholder="是否采纳0否1采纳"></el-input>
</el-form-item>
<el-form-item label="采纳人编号" prop="adoptUserid">
<el-input v-model="editForm.adoptUserid" placeholder="采纳人编号"></el-input>
</el-form-item>
<el-form-item label="采纳人名称" prop="adoptUsername">
<el-input v-model="editForm.adoptUsername" placeholder="采纳人名称"></el-input>
</el-form-item>
<el-form-item label="采纳时间" prop="adoptTime">
<el-date-picker type="date" placeholder="选择日期" v-model="editForm.adoptTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="关闭该评论0否1是" prop="closed">
<el-input v-model="editForm.closed" placeholder="关闭该评论0否1是"></el-input>
</el-form-item>
<el-form-item label="上级用户编号" prop="puserid">
<el-input v-model="editForm.puserid" placeholder="上级用户编号"></el-input>
</el-form-item>
<el-form-item label="上级姓名" prop="pusername">
<el-input v-model="editForm.pusername" placeholder="上级姓名"></el-input>
</el-form-item>
<el-form-item label="上级备注" prop="premark">
<el-input v-model="editForm.premark" placeholder="上级备注"></el-input>
</el-form-item>
<el-form-item label="本评论需要同步给的人列表,逗号分隔" prop="notifyUserids">
<el-input v-model="editForm.notifyUserids" placeholder="本评论需要同步给的人列表,逗号分隔"></el-input>
</el-form-item>
<el-form-item label="发送通知渠道inner-email/wxpub/sms/im/out-email等逗号分割" prop="notifyChannels">
<el-input v-model="editForm.notifyChannels" placeholder="发送通知渠道inner-email/wxpub/sms/im/out-email等逗号分割"></el-input>
</el-form-item>
<el-form-item label="通知用户姓名逗号分隔" prop="notifyUsernames">
<el-input v-model="editForm.notifyUsernames" placeholder="通知用户姓名逗号分隔"></el-input>
</el-form-item>
<el-form-item label="发言人头像地址" prop="cuserHeadImg">
<el-input v-model="editForm.cuserHeadImg" placeholder="发言人头像地址"></el-input>
</el-form-item>
<el-form-item label="回复方式1引用2回复" prop="replyType">
<el-input v-model="editForm.replyType" placeholder="回复方式1引用2回复"></el-input>
</el-form-item>
<el-form-item>
<el-col :span="24" :offset="8">
<el-button @click.native="handleCancel">取消</el-button>
<el-button v-loading="load.edit" type="primary" @click.native="editSubmit" :disabled="load.edit==true">提交</el-button>
</el-col>
</el-form-item>
</el-form>
</el-row>
</section>
</template>
<script>
import util from '@/common/js/util';//
import { initSimpleDicts } from '@/api/mdp/meta/item';//
import { editXmExchange } from '@/api/xm/core/xmExchange';
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters([
'userInfo','roles'
])
},
props:['xmExchange','visible'],
watch: {
'xmExchange':function( xmExchange ) {
this.editForm = xmExchange;
},
'visible':function(visible) {
if(visible==true){
//
}
}
},
data() {
return {
dicts:{},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
load:{ list: false, edit: false, del: false, add: false },//...
editFormRules: {
id: [
//{ required: true, message: '', trigger: 'blur' }
]
},
// XmExchange
editForm: {
taskId:'',taskName:'',projectId:'',remark:'',id:'',pid:'',cuserid:'',cusername:'',ctime:'',cbranchId:'',adopt:'',adoptUserid:'',adoptUsername:'',adoptTime:'',closed:'',puserid:'',pusername:'',premark:'',notifyUserids:'',notifyChannels:'',notifyUsernames:'',cuserHeadImg:'',replyType:''
}
/**begin 在下面加自定义属性,记得补上面的一个逗号**/
/**end 在上面加自定义属性**/
}//end return
},//end data
methods: {
// @cancel="editFormVisible=false"
handleCancel:function(){
this.$refs['editForm'].resetFields();
this.$emit('cancel');
},
//XmExchange @submit="afterEditSubmit"
editSubmit: function () {
this.$refs.editForm.validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
this.load.edit=true
let params = Object.assign({}, this.editForm);
editXmExchange(params).then((res) => {
this.load.edit=false
var tips=res.data.tips;
if(tips.isOk){
this.$refs['editForm'].resetFields();
this.$emit('submit');// @submit="afterEditSubmit"
}
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err =>this.load.edit=false);
});
}
});
},
/**begin 在下面加自定义方法,记得补上面的一个逗号**/
/**end 在上面加自定义方法**/
},//end method
components: {
// 'xm-exchange-edit':XmExchangeEdit
},
mounted() {
this.editForm=Object.assign(this.editForm, this.xmExchange);
}
}
</script>
<style scoped>
</style>

330
src/views/xm/core/xmExchange/XmExchangeMng.vue

@ -1,330 +0,0 @@
<template>
<section>
<el-row class="page-main ">
<div style="overflow-x:hidden">
<task-user-editor :id="'head'" :user="{userid:userInfo.userid,username:userInfo.username,headimgurl:userInfo.headimgurl}" :project-id="xmTask.projectId" :task-id="xmTask.taskId" @publish="onPublishContent"></task-user-editor>
<div v-for="(item,i) in xmExchanges" :key="i" class="comment-list clearfix">
<div class="comment-avater">
<el-avatar icon="el-icon-user-solid"></el-avatar>
</div>
<div class="comment-wrap">
<div class="comment-head">
<span>{{item.cusername}}</span>
<el-button slot="reference" type="text" style="font-size:12px;" @click="handleDel(item)"><i class="el-icon-delete-solid"></i>删除</el-button>
<el-popover
placement="bottom"
trigger="click">
<task-user-editor :id="'userquote'+i" :user="{userid:item.cuserid,username:item.cusername,headimgurl:item.cuserHeadImg}" :project-id="xmTask.projectId" :task-id="xmTask.taskId" @publish="onPublishContent($event,item)"></task-user-editor>
<el-button slot="reference" type="text" style="font-size:12px;"><i class="el-icon-paperclip"></i>引用</el-button>
</el-popover>
<el-popover
placement="bottom"
trigger="click">
<task-user-editor :id="'userreply'+i" :user="{userid:item.cuserid,username:item.cusername,headimgurl:item.cuserHeadImg}" :project-id="xmTask.projectId" :task-id="xmTask.taskId" @publish="onPublishContent($event,item)"></task-user-editor>
<el-button slot="reference" type="text" style="font-size:12px;"><i class="el-icon-s-comment"></i>回复</el-button>
</el-popover>
<small>{{item.createTime}}</small>
</div>
<blockquote v-if="item.pid">
<div v-html="item.premark"></div>
<footer> {{item.pcusername+' '+item.ctime}}</footer>
</blockquote>
<div class="comment-content" v-html="item.remark">
{{item.remark}}
</div>
</div>
</div>
</div>
</el-row>
</section>
</template>
<script>
import util from '@/common/js/util';//
import config from '@/common/config';//
import { initSimpleDicts } from '@/api/mdp/meta/item';//
import { listXmExchange, delXmExchange, batchDelXmExchange,addXmExchange } from '@/api/xm/core/xmExchange';
import TaskUserEditor from './TaskUserEditor'
import { mapGetters } from 'vuex'
import {sn} from '@/common/js/sequence';
export default {
computed: {
...mapGetters([
'userInfo','roles'
])
},
props:['xmTask'],
watch:{
xmTask:function(xmTask){
this.searchXmExchanges();
}
},
data() {
return {
filters: {
key: ''
},
xmExchanges: [],//
pageInfo:{//
total:0,//0>0
pageSize:10,//
count:false,//
pageNum:1,//1
orderFields:[],// ['sex','student_id']
orderDirs:[]// asc,desc ['asc','desc']
},
load:{ list: false, edit: false, del: false, add: false },//...
sels: [],//
dicts:{
//sex:[],
},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
addFormVisible: false,//xmExchange
//xmExchange
addForm: {
taskId:'',taskName:'',projectId:'',remark:'',id:'',pid:'',cuserid:'',cusername:'',ctime:'',cbranchId:'',adopt:'',adoptUserid:'',adoptUsername:'',adoptTime:'',closed:'',puserid:'',pusername:'',premark:'',notifyUserids:'',notifyChannels:'',notifyUsernames:'',cuserHeadImg:'',replyType:''
},
editFormVisible: false,//
//xmExchange
editForm: {
taskId:'',taskName:'',projectId:'',remark:'',id:'',pid:'',cuserid:'',cusername:'',ctime:'',cbranchId:'',adopt:'',adoptUserid:'',adoptUsername:'',adoptTime:'',closed:'',puserid:'',pusername:'',premark:'',notifyUserids:'',notifyChannels:'',notifyUsernames:'',cuserHeadImg:'',replyType:''
}
/**begin 自定义属性请在下面加 请加备注**/
/**end 自定义属性请在上面加 请加备注**/
}
},//end data
methods: {
handleSizeChange(pageSize) {
this.pageInfo.pageSize=pageSize;
this.getXmExchanges();
},
handleCurrentChange(pageNum) {
this.pageInfo.pageNum = pageNum;
this.getXmExchanges();
},
// obj.order=ascending/descending, asc/desc ; obj.prop=,
sortChange( obj ){
var dir='asc';
if(obj.order=='ascending'){
dir='asc'
}else{
dir='desc';
}
if(obj.prop=='xxx'){
this.pageInfo.orderFields=['xxx'];
this.pageInfo.orderDirs=[dir];
}
this.getXmExchanges();
},
searchXmExchanges(){
this.pageInfo.count=true;
this.getXmExchanges();
},
// XmExchange
getXmExchanges() {
let params = {
pageSize: this.pageInfo.pageSize,
pageNum: this.pageInfo.pageNum,
total: this.pageInfo.total,
count:this.pageInfo.count
};
if(this.pageInfo.orderFields!=null && this.pageInfo.orderFields.length>0){
let orderBys=[];
for(var i=0;i<this.pageInfo.orderFields.length;i++){
orderBys.push(this.pageInfo.orderFields[i]+" "+this.pageInfo.orderDirs[i])
}
params.orderBy= orderBys.join(",")
}
if(this.filters.key!==""){
//params.xxx=this.filters.key
}else{
//params.xxx=xxxxx
}
params.taskId=this.xmTask.id
params.projectId=this.xmTask.projectId
this.load.list = true;
listXmExchange(params).then((res) => {
var tips=res.data.tips;
if(tips.isOk){
this.pageInfo.total = res.data.total;
this.pageInfo.count=false;
this.xmExchanges = res.data.data;
}else{
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: 'error' });
}
this.load.list = false;
}).catch( err => this.load.list = false );
},
// XmExchange
showEdit: function ( row,index ) {
this.editFormVisible = true;
this.editForm = Object.assign({}, row);
},
// XmExchange
showAdd: function () {
this.addFormVisible = true;
//this.addForm=Object.assign({}, this.editForm);
},
afterAddSubmit(){
this.addFormVisible=false;
this.pageInfo.count=true;
this.getXmExchanges();
},
afterEditSubmit(){
this.editFormVisible=false;
},
//xmExchange
selsChange: function (sels) {
this.sels = sels;
},
//xmExchange
handleDel: function (row,index) {
this.$confirm('确认删除该记录吗?', '提示', {
type: 'warning'
}).then(() => {
this.load.del=true;
let params = { id: row.id };
delXmExchange(params).then((res) => {
this.load.del=false;
var tips=res.data.tips;
if(tips.isOk){
this.pageInfo.count=true;
this.getXmExchanges();
}
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.del=false );
});
},
//xmExchange
batchDel: function () {
this.$confirm('确认删除选中记录吗?', '提示', {
type: 'warning'
}).then(() => {
this.load.del=true;
batchDelXmExchange(this.sels).then((res) => {
this.load.del=false;
var tips=res.data.tips;
if( tips.isOk ){
this.pageInfo.count=true;
this.getXmExchanges();
}
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error'});
}).catch( err => this.load.del=false );
});
},
rowClick: function(row, event, column){
this.$emit('row-click',row, event, column);// @row-click="rowClick"
},
/**begin 自定义函数请在下面加**/
onPublishContent:function(editor,parentXmExchange){
var params={};
params.remark=editor.content;
params.id=sn()
params.taskId=this.xmTask.id
params.projectId=this.xmTask.projectId
params.taskName=this.xmTask.name
params.cuserid=this.userInfo.userid
params.cusername=this.userInfo.username
params.cbranchId=this.userInfo.branchId
params.cuserHeadImg=this.userInfo.headimgurl
if(parentXmExchange){
params.pid=parentXmExchange.id
params.premark=parentXmExchange.remark
params.pcuserid=parentXmExchange.cuserid
params.pcusername=parentXmExchange.cusername
}
addXmExchange(params).then(res=>{
var tips =res.data.tips;
if(tips.isOk){
this.xmExchanges.push(params);
}
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error'});
})
}
/**end 自定义函数请在上面加**/
},//end methods
components: {
//
TaskUserEditor,
},
mounted() {
this.$nextTick(() => {
this.getXmExchanges();
});
/**
initSimpleDicts( "all",["sex","grade"] ).then(res=>{
if(res.data.tips.isOk){
this.dicts=res.data.data
}
});
**/
}
}
</script>
<style scoped>
.comment-list{
border-bottom: 1px solid #dcdcdc;
padding: 0 15px 10px 60px;
margin-top: 15px;
position: relative;
}
.comment-avater{
position: absolute;
left: 10px;
top: 0;
}
/* .toolbar{
float: right;
margin: .25rem 0;
} */
.comment-head{
font-size: 12px;
margin-bottom: 6px;
line-height: 29px;
text-align: right;
color: #00abfc!important;
}
.comment-head span:first-child{
float: left;
font-size: 15px;
}
.comment-head .el-button--text{
color: #606266;
}
.comment-head .el-button--text:hover {
color: #66b1ff;
}
.comment-head .el-button--text:active {
color: #3a8ee6;
}
.comment-wrap blockquote{
margin: 0 0 1rem;
background-color: #f7f7f7;
border-left: 4px solid #eceeef;
font-size: 14px;
padding: 10px 20px;
}
.comment-wrap footer{
margin-top: 5px;
color: #818a91;
font-size: 12px;
}
.clearfix::after {
clear: both;
content: "";
}
</style>

3
src/views/xm/core/xmIteration/XmIterationInfo.vue

@ -400,8 +400,7 @@ import { mapGetters } from "vuex";
import xmTaskMng from "../xmTask/XmTaskMng";
import xmGroupMng from "../xmGroup/XmGroupMng";
import xmGroupSelect from "../xmGroup/XmGroupSelect";
import xmExchange from "../xmExchange/XmExchangeMng";
import xmQuestion from "../xmQuestion/XmQuestionMng";
import xmFileMng from "../xmFile/XmFileMng";
import xmDetail from "../xmProject/XmProjectDetail";

6
src/views/xm/core/xmMenu/XmMenuEdit.vue

@ -290,8 +290,7 @@
import {listXmMenuWithState,editXmMenu,editXmMenuSomeFields,batchChangeParentMenu } from '@/api/xm/core/xmMenu';
import { mapGetters } from 'vuex'
import UsersSelect from "@/views/mdp/sys/user/UsersSelect";
import XmMenuOverview from './XmMenuOverview.vue';
import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue';
import XmMenuOverview from './XmMenuOverview.vue';
import TagMng from "@/views/mdp/arc/tag/TagMng";
import XmSubWorkItem from "@/views/xm/core/xmMenuWorkItem/XmSubWorkItem";
import XmRecord from '../xmRecord/XmRecord'
@ -631,8 +630,7 @@ import CommentArea from '../xmMenuComment/comment-area.vue';
// 'xm-menu-edit':XmMenuEdit
UsersSelect,
XmMenuOverview,
TagMng,
XmMenuExchangeMng,
TagMng,
XmSubWorkItem,
XmRecord,
XmMyDoFocus,

6
src/views/xm/core/xmMenu/XmMenuRichDetail.vue

@ -20,8 +20,7 @@
import util from '@/common/js/util';//
//import { initSimpleDicts } from '@/api/mdp/meta/item';//
import { editXmMenu,listXmMenu } from '@/api/xm/core/xmMenu';
import { mapGetters } from 'vuex'
import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng';//
import { mapGetters } from 'vuex'
@ -120,8 +119,7 @@
/**end 在上面加自定义方法**/
},//end method
components: {
// 'xm-menu-edit':XmMenuEdit
XmMenuExchangeMng
// 'xm-menu-edit':XmMenuEdit
},
mounted() {
this.editForm=Object.assign(this.editForm, this.xmMenu);

79
src/views/xm/core/xmMenuExchange/MenuUserEditor.vue

@ -1,79 +0,0 @@
<template>
<div class="comment-list head-editor clearfix">
<div class="comment-avater">
<el-avatar v-if="user.headimgurl" icon="el-icon-user-solid" :src="user.headimgurl">{{user.username}}</el-avatar>
<el-avatar v-else icon="el-icon-user-solid">{{user.username}}</el-avatar>
</div>
<div class="comment-wrap">
<div class="clearfix">
<vue-editor :key="id" :branch-id="userInfo.branchId" :category-id="productId+'-'+menuId" v-model="content"></vue-editor>
</div>
<div style="margin-top:20px;"></div>
<el-button @click="publish" class="toolbar" type="primary">发布</el-button> <el-button @click="clearContent" style="margin-right: 0.25rem;" class="toolbar" type="plain"></el-button> <el-button @click="close" style="margin-right: 0.25rem;" class="toolbar" type="plain"></el-button>
</div>
</div>
</template>
<script>
import util from '@/common/js/util';//
import { mapGetters } from 'vuex';
import VueEditor from '@/components/Tinymce/index';
import {sn} from '@/common/js/sequence';
export default {
props:['id',"productId","menuId",'user'],
computed: {
...mapGetters([
'userInfo','roles',
]),
},
data() {
return {
content: '',
}
},
methods: {
publish() {
if(!this.content){
this.$notify.error("请输入内容再提交");
return;
}
this.$emit('publish',this.content);
},
clearContent(){
this.content="";
},
close(){
this.$emit("close")
}
},
mounted() {
this.$nextTick(() => {
});
},
components: {
VueEditor,
},
}
</script>
<style lang="scss" scoped>
.head-editor{
border: none;
padding: 0 15px 10px 60px;
margin-top: 15px;
position: relative;
}
.comment-avater{
position: absolute;
left: 10px;
top: 0;
}
.toolbar{
float: right;
margin: .25rem 0;
}
.clearfix::after {
clear: both;
content: "";
}
</style>

393
src/views/xm/core/xmMenuExchange/XmMenuExchangeMng.vue

@ -1,393 +0,0 @@
<template>
<section class="page-container padding">
<el-row>
<el-input style="width:20%;" v-model="filters.key" placeholder="需求名称、评论、评论人姓名模糊搜素" clearable></el-input >&nbsp;&nbsp;<el-input style="width:20%;" v-model="filters.menuId" placeholder="" clearable></el-input>
<el-button type="primary" @click="searchXmMenuExchanges">查询</el-button>
<el-button type="primary" @click="headEditorVisible=true" v-if="filters.xmMenu">发表需求建议</el-button>
</el-row>
<el-row class="page-main" :style="{overflowX:'auto',height:maxTableHeight+'px'}" ref="table">
<div style="overflow-x:hidden">
<menu-user-editor key="head" :id="'head'+filters.xmMenu.menuId" v-if="filters.xmMenu && headEditorVisible" :user="{userid:userInfo.userid,username:userInfo.username,headimgurl:userInfo.headimgurl}" :product-id="filters.xmMenu.productId" :menu-id="filters.xmMenu.menuId" @publish="onPublishContent"></menu-user-editor>
<div v-for="(item,i) in xmMenuExchanges" :key="i" class="comment-list clearfix">
<div class="comment-avater">
<el-avatar icon="el-icon-user-solid"></el-avatar>
</div>
<div class="comment-wrap">
<div class="comment-head">
<span>{{item.cusername}}</span> <font style="font-size:12px;color:black;">需求:&nbsp;&nbsp;{{item.menuId}}{{item.menuName}}</font>&nbsp;&nbsp;{{item.ctime}}
<el-button type="text" style="font-size:12px;" @click="handleDel(item)"><i class="el-icon-delete-solid"></i>删除</el-button>
<el-button type="text" style="font-size:12px;" @click="showEditor(item,i)"><i class="el-icon-paperclip"></i>引用</el-button>
<el-button type="text" style="font-size:12px;" @click="showEditor(item,i)"><i class="el-icon-s-comment"></i>回复</el-button>
<small>{{item.createTime}}</small>
</div>
<blockquote v-if="item.pid">
<div v-html="item.premark"></div>
<footer> {{item.pusername}}</footer>
</blockquote>
<div class="comment-content" v-html="item.remark">
{{item.remark}}
</div>
<menu-user-editor :key="'menu-'+i" :id="'menu-'+item.id" v-show="item.showEditor" :user="{userid:userInfo.userid,username:userInfo.username,headimgurl:userInfo.headimgurl}" :product-id="item.productId" :menu-id="item.menuId" @publish="onPublishContent($event,item)" @close="item.showEditor=false"></menu-user-editor>
</div>
</div>
</div>
</el-row>
<el-pagination layout="total, sizes, prev, pager, next" @current-change="handleCurrentChange" @size-change="handleSizeChange" :page-sizes="[10,20, 50, 100, 500]" :current-page="pageInfo.pageNum" :page-size="pageInfo.pageSize" :total="pageInfo.total" style="float:right;"></el-pagination>
</section>
</template>
<script>
import util from '@/common/js/util';//
import config from '@/common/config';//
import { initSimpleDicts } from '@/api/mdp/meta/item';//
import { listXmMenuExchange, delXmMenuExchange, batchDelXmMenuExchange,addXmMenuExchange } from '@/api/xm/core/xmMenuExchange';
import MenuUserEditor from './MenuUserEditor'
import { mapGetters } from 'vuex'
import {sn} from '@/common/js/sequence';
import VueEditor from '@/components/Tinymce/index';
export default {
computed: {
...mapGetters([
'userInfo','roles'
])
},
props:['xmMenu','simple'],
watch:{
xmMenu:function(xmMenu){
this.filters.xmMenu=xmMenu
this.searchXmMenuExchanges();
}
},
data() {
return {
filters: {
key: '',
xmMenu:null,
menuId:''
},
xmMenuExchanges: [],//
pageInfo:{//
total:0,//0>0
pageSize:10,//
count:false,//
pageNum:1,//1
orderFields:['res.ctime'],// ['sex','student_id']
orderDirs:['desc']// asc,desc ['asc','desc']
},
load:{ list: false, edit: false, del: false, add: false },//...
sels: [],//
dicts:{
//sex:[],
},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
addFormVisible: false,//xmMenuExchange
//xmMenuExchange
addForm: {
menuId:'',menuName:'',productId:'',remark:'',id:'',pid:'',cuserid:'',cusername:'',ctime:'',cbranchId:'',adopt:'',adoptUserid:'',adoptUsername:'',adoptTime:'',closed:'',puserid:'',pusername:'',premark:'',notifyUserids:'',notifyChannels:'',notifyUsernames:'',cuserHeadImg:'',replyType:''
},
addFormInit: {
menuId:'',menuName:'',productId:'',remark:'',id:'',pid:'',cuserid:'',cusername:'',ctime:'',cbranchId:'',adopt:'',adoptUserid:'',adoptUsername:'',adoptTime:'',closed:'',puserid:'',pusername:'',premark:'',notifyUserids:'',notifyChannels:'',notifyUsernames:'',cuserHeadImg:'',replyType:''
},
editFormVisible: false,//
//xmMenuExchange
editForm: {
menuId:'',menuName:'',productId:'',remark:'',id:'',pid:'',cuserid:'',cusername:'',ctime:'',cbranchId:'',adopt:'',adoptUserid:'',adoptUsername:'',adoptTime:'',closed:'',puserid:'',pusername:'',premark:'',notifyUserids:'',notifyChannels:'',notifyUsernames:'',cuserHeadImg:'',replyType:''
},
xmMenuVisible:false,
maxTableHeight:300,
content:'',
headEditorVisible:false,
/**begin 自定义属性请在下面加 请加备注**/
/**end 自定义属性请在上面加 请加备注**/
}
},//end data
methods: {
handleSizeChange(pageSize) {
this.pageInfo.pageSize=pageSize;
this.getXmMenuExchanges();
},
handleCurrentChange(pageNum) {
this.pageInfo.pageNum = pageNum;
this.getXmMenuExchanges();
},
// obj.order=ascending/descending, asc/desc ; obj.prop=,
sortChange( obj ){
var dir='asc';
if(obj.order=='ascending'){
dir='asc'
}else{
dir='desc';
}
if(obj.prop=='xxx'){
this.pageInfo.orderFields=['xxx'];
this.pageInfo.orderDirs=[dir];
}
this.getXmMenuExchanges();
},
searchXmMenuExchanges(){
this.pageInfo.count=true;
this.getXmMenuExchanges();
},
// XmMenuExchange
getXmMenuExchanges() {
let params = {
pageSize: this.pageInfo.pageSize,
pageNum: this.pageInfo.pageNum,
total: this.pageInfo.total,
count:this.pageInfo.count
};
if(this.pageInfo.orderFields!=null && this.pageInfo.orderFields.length>0){
let orderBys=[];
for(var i=0;i<this.pageInfo.orderFields.length;i++){
orderBys.push(this.pageInfo.orderFields[i]+" "+this.pageInfo.orderDirs[i])
}
params.orderBy= orderBys.join(",")
}
if(this.filters.key!==""){
params.key=this.filters.key
}else{
//params.xxx=xxxxx
}
if(this.xmMenu){
params.menuId=this.xmMenu.menuId
}else{
if(this.filters.xmMenu){
params.menuId=this.filters.xmMenu.menuId
}
}
if(this.filters.menuId){
params.menuId=this.filters.menuId
}
if(!params.menuId){
params.branchId=this.userInfo.branchId
}
this.load.list = true;
listXmMenuExchange(params).then((res) => {
var tips=res.data.tips;
if(tips.isOk){
this.pageInfo.total = res.data.total;
this.pageInfo.count=false;
var data=res.data.data;
data.forEach(i=>i.showEditor=false)
this.xmMenuExchanges = data;
}else{
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: 'error' });
}
this.load.list = false;
}).catch( err => this.load.list = false );
},
// XmMenuExchange
showEdit: function ( row,index ) {
this.editFormVisible = true;
this.editForm = Object.assign({}, row);
},
// XmMenuExchange
showAdd: function () {
this.addFormVisible = true;
//this.addForm=Object.assign({}, this.editForm);
},
afterAddSubmit(){
this.addFormVisible=false;
this.pageInfo.count=true;
this.getXmMenuExchanges();
},
afterEditSubmit(){
this.editFormVisible=false;
},
//xmMenuExchange
selsChange: function (sels) {
this.sels = sels;
},
//xmMenuExchange
handleDel: function (row,index) {
this.$confirm('确认删除该记录吗?', '提示', {
type: 'warning'
}).then(() => {
this.load.del=true;
let params = { id: row.id };
delXmMenuExchange(params).then((res) => {
this.load.del=false;
var tips=res.data.tips;
if(tips.isOk){
this.pageInfo.count=true;
this.getXmMenuExchanges();
}
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.del=false );
});
},
//xmMenuExchange
batchDel: function () {
this.$confirm('确认删除选中记录吗?', '提示', {
type: 'warning'
}).then(() => {
this.load.del=true;
batchDelXmMenuExchange(this.sels).then((res) => {
this.load.del=false;
var tips=res.data.tips;
if( tips.isOk ){
this.pageInfo.count=true;
this.getXmMenuExchanges();
}
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error'});
}).catch( err => this.load.del=false );
});
},
rowClick: function(row, event, column){
this.$emit('row-click',row, event, column);// @row-click="rowClick"
},
/**begin 自定义函数请在下面加**/
showEditor(item,replyType){
this.editForm=item;
this.addForm={...this.addFOrmInit}
this.addForm.replyType=replyType;
item.showEditor=true;
},
onPublishContent:function(content,item){
var params={...this.addForm}
params.remark=content;
if(item){
params.puserid=item.cuserid
params.premark=item.remark
params.pusername=item.cusername
params.productId=item.productId
params.menuId=item.menuId
params.menuName=item.menuName
params.pid=item.id
}else if(this.xmMenu){
params.menuId=this.xmMenu.menuId
params.productId=this.xmMenu.productId
params.menuName=this.xmMenu.menuName
}else{
if(this.filters.xmMenu){
params.menuId=this.filters.xmMenu.menuId
params.productId=this.filters.xmMenu.productId
params.menuName=this.filters.xmMenu.menuName
}else{
params.menuId=item.menuId
params.productId=item.productId
params.menuName=item.menuName
}
}
params.cuserid=this.userInfo.userid
params.cusername=this.userInfo.username
params.cbranchId=this.userInfo.branchId
params.cuserHeadImg=this.userInfo.headimgurl
addXmMenuExchange(params).then(res=>{
var tips =res.data.tips;
if(tips.isOk){
var data=res.data.data;
data.showEditor=false;
this.xmMenuExchanges.unshift(data);
this.editForm.showEditor=false;
this.headEditorVisible=false;
}
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error'});
})
},
/**end 自定义函数请在上面加**/
showSelectMenu(){
this.xmMenuVisible=true;
},
onMenuSelected(menu){
this.filters.xmMenu=menu
this.xmMenuVisible=false
this.getXmMenuExchanges()
}
},//end methods
components: {
//
MenuUserEditor,VueEditor
},
mounted() {
this.$nextTick(() => {
this.maxTableHeight = util.calcTableMaxHeight(this.$refs.table.$el);
this.filters.xmMenu=this.xmMenu
this.getXmMenuExchanges();
});
/**
initSimpleDicts( "all",["sex","grade"] ).then(res=>{
if(res.data.tips.isOk){
this.dicts=res.data.data
}
});
**/
}
}
</script>
<style scoped>
h1 {
text-align: center;
}
.comment-list{
border-bottom: 1px solid #dcdcdc;
padding: 0 15px 10px 60px;
margin-top: 15px;
position: relative;
}
.comment-avater{
position: absolute;
left: 10px;
top: 0;
}
/* .toolbar{
float: right;
margin: .25rem 0;
} */
.comment-head{
font-size: 12px;
margin-bottom: 6px;
line-height: 29px;
text-align: right;
color: #00abfc!important;
}
.comment-head span:first-child{
float: left;
font-size: 15px;
}
.comment-head .el-button--text{
color: #606266;
}
.comment-head .el-button--text:hover {
color: #66b1ff;
}
.comment-head .el-button--text:active {
color: #3a8ee6;
}
.comment-wrap blockquote{
margin: 0 0 1rem;
background-color: #f7f7f7;
border-left: 4px solid #eceeef;
font-size: 14px;
padding: 10px 20px;
}
.comment-wrap footer{
margin-top: 5px;
color: #818a91;
font-size: 12px;
}
.clearfix::after {
clear: both;
content: "";
}
</style>

44
src/views/xm/core/xmMenuExchange/XmMenuExchangeRoute.vue

@ -1,44 +0,0 @@
<template>
<section class="padding">
</section>
</template>
<script>
import util from '@/common/js/util';//
import config from '@/common/config';//
import { initSimpleDicts } from '@/api/mdp/meta/item';//
import { mapGetters } from 'vuex'
import {sn} from '@/common/js/sequence';
export default {
computed: {
...mapGetters([
'userInfo','roles'
])
},
watch:{
},
data() {
return {
}
},//end data
methods: {
},//end methods
components: {
},
mounted() {
}
}
</script>
<style scoped>
</style>

3
src/views/xm/core/xmProduct/XmProductInfo.vue

@ -536,8 +536,7 @@ import xmTaskMng from "../xmTask/XmTaskMng";
import xmPlan from "../xmTask/XmPlan";
import xmGroupMng from "../xmGroup/XmGroupMng";
import xmGroupSelect from "../xmGroup/XmGroupSelect";
import xmExchange from "../xmExchange/XmExchangeMng";
import xmQuestion from "../xmQuestion/XmQuestionMng";
import xmFileMng from "../xmFile/XmFileMng";
import xmDetail from "../xmProject/XmProjectDetail";

3
src/views/xm/core/xmTask/XmTaskMng.vue

@ -862,8 +862,7 @@ import xmSkillMng from "../xmTaskSkill/XmTaskSkillMng";
import skillMng from "@/views/xm/core/skill/skillMng";
import { batchAddSkill } from "@/api/xm/core/xmTaskSkill";
import { sn } from "@/common/js/sequence";
import xmTaskTemplateMng from "../xmTaskTemplate/XmTaskTemplateMng";
import xmExchangeMng from "../xmExchange/XmExchangeMng";
import xmTaskTemplateMng from "../xmTaskTemplate/XmTaskTemplateMng";
import xmMenuSelect from "../xmMenu/XmMenuSelect";
import { addUserFocus, delUserFocus } from "@/api/mdp/sys/userFocus";

Loading…
Cancel
Save