diff --git a/src/api/mdp/sys/userFocus.js b/src/api/mdp/sys/userFocus.js
new file mode 100644
index 00000000..fae6a57b
--- /dev/null
+++ b/src/api/mdp/sys/userFocus.js
@@ -0,0 +1,47 @@
+import axios from '@/utils/request'
+
+import { getDicts,initSimpleDicts,initComplexDicts } from '@/api/mdp/meta/item';//字典表
+import config from '@/common/config'
+
+let base = config.getSysBasePath();
+
+/**-------------------------与后端通讯接口------------------请写在下面-------------------------------------------- */
+/**
+ * 我关注的项目或者任务
+ *1 默认只开放普通查询,所有查询,只要上传 分页参数 {pageNum:当前页码从1开始,pageSize:每页记录数,total:总记录【数如果是0后台会自动计算总记录数非0不会自动计算】},后台都会自动按分页查询 其它 api用到再打开,没用到的api请注释掉,
+ *2 查询、新增、修改的参数格式 params={userid:'用户编号 主键',bizId:'关注的对象主键 主键',pbizId:'对象上级编号,项目时填项目编号,任务时填项目编号,产品时填产品编号,需求时填产品编号,bug时填产品编号,迭代时填产品编号 主键',username:'用户名称',focusType:'对象类型:项目-1/任务-2/产品-3/需求-4/bug-5/迭代-6/团队-7/组织-8/个人-9/文章-W/合同-H/客户-K',bizName:'任务名称',pbizName:'对象上级名称',ftime:'关注时间',ubranchId:'用户归属机构'}
+ **/
+
+//普通查询 条件之间and关系
+export const listUserFocus = params => { return axios.get(`${base}/mdp/sys/userFocus/list`, { params: params }); };
+
+//删除一条我关注的项目或者任务 params={userid:'用户编号 主键',bizId:'关注的对象主键 主键',pbizId:'对象上级编号,项目时填项目编号,任务时填项目编号,产品时填产品编号,需求时填产品编号,bug时填产品编号,迭代时填产品编号 主键'}
+export const delUserFocus = params => { return axios.post(`${base}/mdp/sys/userFocus/del`,params); };
+
+//批量删除我关注的项目或者任务 params=[{userid:'用户编号 主键',bizId:'关注的对象主键 主键',pbizId:'对象上级编号,项目时填项目编号,任务时填项目编号,产品时填产品编号,需求时填产品编号,bug时填产品编号,迭代时填产品编号 主键'}]
+export const batchDelUserFocus = params => { return axios.post(`${base}/mdp/sys/userFocus/batchDel`, params); };
+
+//修改一条我关注的项目或者任务记录
+export const editUserFocus = params => { return axios.post(`${base}/mdp/sys/userFocus/edit`, params); };
+
+//新增一条我关注的项目或者任务
+export const addUserFocus = params => { return axios.post(`${base}/mdp/sys/userFocus/add`, params); };
+
+//批量修改某些字段
+export const editSomeFieldsUserFocus = params => { return axios.post(`${base}/mdp/sys/userFocus/editSomeFields`, params); };
+
+//普通查询 条件之间and关系
+export const myFocusForIndex = params => {
+ return axios.get(`${base}/mdp/sys/userFocus/myFocusForIndex`, { params: params });
+};
+
+/**-------------------------前端mng|add|edit界面公共函数---------------请写在下面----------------------------------------------- */
+//初始化页面上的字典
+export const initDicts = (that) => {
+ var itemCodes=['objType'];//在此添加要加载的字典 如['sex','grade','lvl']
+ if(itemCodes.length>0){
+ initSimpleDicts('all',itemCodes).then(res=>{
+ Object.assign(that.dicts,res.data.data)
+ });
+ }
+};
\ No newline at end of file
diff --git a/src/views/myWork/my/components/DoFocus.vue b/src/views/myWork/my/components/DoFocus.vue
new file mode 100644
index 00000000..1d024e9f
--- /dev/null
+++ b/src/views/myWork/my/components/DoFocus.vue
@@ -0,0 +1,113 @@
+
+
+
+ 已关注 取消关注
+
+
+
+ 未关注 去关注
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/myWork/my/components/MyFocusList.vue b/src/views/myWork/my/components/MyFocusList.vue
new file mode 100644
index 00000000..5582fa61
--- /dev/null
+++ b/src/views/myWork/my/components/MyFocusList.vue
@@ -0,0 +1,391 @@
+
+
+
+
+
+
+
+
+

+
产品、项目
+
+
+
+
+
{{item.name}}
+
{{o.bizName }}
+
+
+ 取消关注
+
+
+
+
+
+
+
+
+
+
+
+
+

+
迭代、需求
+
+
+
+
+
{{item.name}}
+
{{o.bizName }}
+
+
+ 取消关注
+
+
+
+
+
+
+
+
+
+
+

+
任务、缺陷
+
+
+
+
+
{{item.name}}
+
{{o.bizName }}
+
+
+ 取消关注
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/myWork/my/components/boxCard.vue b/src/views/myWork/my/components/boxCard.vue
index 3b6d2989..2749acc6 100644
--- a/src/views/myWork/my/components/boxCard.vue
+++ b/src/views/myWork/my/components/boxCard.vue
@@ -44,7 +44,7 @@ import wdcp from '@/views/xm/core/xmProduct/XmProductAllMng.vue';
import wdxm from '@/views/xm/core/xmProject/XmProjectMng';
import { userMenuFavoriteList, saveMenuFavoriteList} from '@/api/mdp/sys/menuFavorite'
-import myFocus from '@/views/xm/core/xmMyFocus/XmMyFocusList';
+import myFocus from './MyFocusList';
import VueGridLayout from 'vue-grid-layout';
import { mapGetters } from 'vuex'
diff --git a/src/views/xm/core/xmMenu/XmMenuEdit.vue b/src/views/xm/core/xmMenu/XmMenuEdit.vue
index d7d6ad7d..2ad8c1c8 100644
--- a/src/views/xm/core/xmMenu/XmMenuEdit.vue
+++ b/src/views/xm/core/xmMenu/XmMenuEdit.vue
@@ -214,7 +214,7 @@ import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue';
import TagMng from "@/views/mdp/arc/tag/TagMng";
import XmSubWorkItem from "@/views/xm/core/xmMenuWorkItem/XmSubWorkItem";
import XmRecord from '../xmRecord/XmRecord'
- import XmMyDoFocus from '../xmMyFocus/XmMyDoFocus.vue';
+ import XmMyDoFocus from '@/views/myWork/my/components/DoFocus';
export default {
computed: {
diff --git a/src/views/xm/core/xmQuestion/XmQuestionEdit.vue b/src/views/xm/core/xmQuestion/XmQuestionEdit.vue
index 4174ec10..161816ca 100644
--- a/src/views/xm/core/xmQuestion/XmQuestionEdit.vue
+++ b/src/views/xm/core/xmQuestion/XmQuestionEdit.vue
@@ -240,7 +240,7 @@
import TagMng from "@/views/mdp/arc/tag/TagMng";
import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';
- import XmMyDoFocus from '../xmMyFocus/XmMyDoFocus.vue';
+ import XmMyDoFocus from '@/views/myWork/my/components/DoFocus';
export default {
computed: {
diff --git a/src/views/xm/core/xmTask/XmTaskEdit.vue b/src/views/xm/core/xmTask/XmTaskEdit.vue
index 42111368..5596bdc6 100644
--- a/src/views/xm/core/xmTask/XmTaskEdit.vue
+++ b/src/views/xm/core/xmTask/XmTaskEdit.vue
@@ -292,7 +292,7 @@
import xmQuestionForTask from "@/views/xm/core/xmQuestion/XmQuestionForTask";
import XmTaskWorkloadRecord from "../xmTaskWorkload/XmTaskWorkloadRecord"
import XmMenuEdit from '../xmMenu/XmMenuEdit.vue';
- import XmMyDoFocus from '../xmMyFocus/XmMyDoFocus.vue';
+ import XmMyDoFocus from '@/views/myWork/my/components/DoFocus';
import XmTaskExecuserForTask from '../xmTaskExecuser/XmTaskExecuserForTask.vue';
export default {
computed: {