diff --git a/src/api/okr/comment.js b/src/api/okr/comment.js new file mode 100644 index 0000000..a9758a9 --- /dev/null +++ b/src/api/okr/comment.js @@ -0,0 +1,29 @@ +import request from '@/config/axios' + +// 创建 +export const createComment = (data) => { + return request.post({ + url: '/admin-api/okr/comments/create', + data, + isSubmitForm: true, + headers: { 'instance-id': 1016 } + }) +} + +// 分页 +export const getCommentPage = (params) => { + return request.get({ + url: '/admin-api/okr/comments/page', + params, + headers: { 'instance-id': 1016 } + }) +} + +// 获取评论类型 +export const getCommentTypeOptions = () => { + return request.get({ + url: '/admin-api/okr/dict-data/get-by-type', + params: { dictType: 'comment_type' } + // headers: { 'instance-id': 1016 } + }) +} diff --git a/src/api/okr/okr.js b/src/api/okr/okr.js index e72bdc3..a274ab0 100644 --- a/src/api/okr/okr.js +++ b/src/api/okr/okr.js @@ -5,8 +5,8 @@ export const createOkrNode = (data) => { return request.post({ url: '/admin-api/okr/node/add', data, - isSubmitForm: true, - headers: { 'instance-id': 1016 } + isSubmitForm: true + // headers: { 'instance-id': 1016 } }) } @@ -14,8 +14,8 @@ export const createOkrNode = (data) => { export const updateOkrNode = (data) => { return request.put({ url: '/admin-api/okr/node/update', - data, - headers: { 'instance-id': 1016 } + data + // headers: { 'instance-id': 1016 } }) } @@ -23,8 +23,8 @@ export const updateOkrNode = (data) => { export const getOkrNodeDetail = (nodeId) => { return request.get({ url: '/admin-api/okr/node/get', - params: { nodeId }, - headers: { 'instance-id': 1016 } + params: { nodeId } + // headers: { 'instance-id': 1016 } }) } @@ -32,8 +32,8 @@ export const getOkrNodeDetail = (nodeId) => { export const getMyNodeTree = (params) => { return request.get({ url: '/admin-api/okr/node/my/list', - params, - headers: { 'instance-id': 1016 } + params + // headers: { 'instance-id': 1016 } }) } @@ -41,8 +41,8 @@ export const getMyNodeTree = (params) => { export const getMyOkrPage = (params) => { return request.get({ url: '/admin-api/okr/node/my/object/list', - params, - headers: { 'instance-id': 1016 } + params + // headers: { 'instance-id': 1016 } }) } @@ -50,8 +50,8 @@ export const getMyOkrPage = (params) => { export const getAllNodeTree = (params) => { return request.get({ url: '/admin-api/okr/node/all/list', - params, - headers: { 'instance-id': 1016 } + params + // headers: { 'instance-id': 1016 } }) } @@ -59,8 +59,8 @@ export const getAllNodeTree = (params) => { export const getAllOkrPage = (params) => { return request.get({ url: '/admin-api/okr/node/all/object/list', - params, - headers: { 'instance-id': 1016 } + params + // headers: { 'instance-id': 1016 } }) } @@ -68,8 +68,8 @@ export const getAllOkrPage = (params) => { export const getOkrNodeHistory = (nodeId) => { return request.get({ url: '/admin-api/okr/record/list', - params: { nodeId }, - headers: { 'instance-id': 1016 } + params: { nodeId } + // headers: { 'instance-id': 1016 } }) } @@ -77,7 +77,16 @@ export const getOkrNodeHistory = (nodeId) => { export const getDefaultOkrOptions = () => { return request.get({ url: '/admin-api/okr/dict-data/get-by-type', - params: { dictType: 'key_result_source' }, - headers: { 'instance-id': 1016 } + params: { dictType: 'key_result_source' } + // headers: { 'instance-id': 1016 } + }) +} + +// 更新OKR进度 +export const updateOkrProgress = (data) => { + return request.put({ + url: '/admin-api/okr/node/progress/update', + data + // headers: { 'instance-id': 1016 } }) } diff --git a/src/api/okr/wait.js b/src/api/okr/wait.js index 2431c03..fa8517e 100644 --- a/src/api/okr/wait.js +++ b/src/api/okr/wait.js @@ -5,8 +5,8 @@ export const createWait = (data) => { return request.post({ url: '/admin-api/okr/agent-work/create', data, - isSubmitForm: true, - headers: { 'instance-id': 1016 } + isSubmitForm: true + // headers: { 'instance-id': 1016 } }) } @@ -14,8 +14,8 @@ export const createWait = (data) => { export const updateWait = (data) => { return request.put({ url: '/admin-api/okr/agent-work/update', - data, - headers: { 'instance-id': 1016 } + data + // headers: { 'instance-id': 1016 } }) } @@ -23,8 +23,8 @@ export const updateWait = (data) => { export const getWaitPage = (params) => { return request.get({ url: '/admin-api/okr/agent-work/page', - params, - headers: { 'instance-id': 1016 } + params + // headers: { 'instance-id': 1016 } }) } @@ -32,8 +32,8 @@ export const getWaitPage = (params) => { export const getWaitDetail = (id) => { return request.get({ url: '/admin-api/okr/agent-work/get', - params: { id }, - headers: { 'instance-id': 1016 } + params: { id } + // headers: { 'instance-id': 1016 } }) } @@ -41,8 +41,8 @@ export const getWaitDetail = (id) => { export const deleteWait = (id) => { return request.delete({ url: '/admin-api/okr/agent-work/delete', - params: { id }, - headers: { 'instance-id': 1016 } + params: { id } + // headers: { 'instance-id': 1016 } }) } @@ -50,8 +50,8 @@ export const deleteWait = (id) => { export const urgeWait = (workId) => { return request.get({ url: '/admin-api/okr/agent-work/urge', - params: { workId }, - headers: { 'instance-id': 1016 } + params: { workId } + // headers: { 'instance-id': 1016 } }) } @@ -60,8 +60,8 @@ export const followWait = (data) => { return request.post({ url: '/admin-api/okr/agent-work-follow/create', data, - isSubmitForm: true, - headers: { 'instance-id': 1016 } + isSubmitForm: true + // headers: { 'instance-id': 1016 } }) } @@ -69,15 +69,15 @@ export const followWait = (data) => { export const getFollowWaitPage = (params) => { return request.get({ url: '/admin-api/okr/agent-work-follow/list', - params, - headers: { 'instance-id': 1016 } + params + // headers: { 'instance-id': 1016 } }) } export const getWaitCount = (params) => { return request.get({ url: '/admin-api/okr/agent-work/getAgentWorkNum', - params, - headers: { 'instance-id': 1016 } + params + // headers: { 'instance-id': 1016 } }) } diff --git a/src/views/OKR/Management/Components/AllTarget.vue b/src/views/OKR/Management/Components/AllTarget.vue index 0d31bb0..df18538 100644 --- a/src/views/OKR/Management/Components/AllTarget.vue +++ b/src/views/OKR/Management/Components/AllTarget.vue @@ -10,7 +10,7 @@ :default-expand-all="false" check-strictly style="width: 400px" - @change="getOkrList" + @change="nodeChange" /> 新建节点 @@ -23,7 +23,7 @@ - + @@ -35,7 +35,7 @@ import DialogOkrInfo from './DialogOkrInfo.vue' import DialogOkr from './DialogOkr.vue' import { getAllNodeTree, getAllOkrPage } from '@/api/okr/okr' -import { listToTree } from '@/utils/tree' +import { listToTree, findNode } from '@/utils/tree' const message = useMessage() @@ -56,6 +56,10 @@ onMounted(() => { handleSearchPeroid() }) +// 当前是否是叶子节点 +// 如果不是叶子节点,则表格数据不可修改 +const isCurrentLeafNode = ref(false) + function handleSearchPeroid() { getAllNodeTree().then((resp) => { peroidList.value = listToTree(resp.tree, { @@ -63,9 +67,21 @@ function handleSearchPeroid() { pid: 'parentId', children: 'children' }) - searchForm.value.nodeId = resp.nodeId - getOkrList() + nodeChange(resp.nodeId) + }) +} + +function nodeChange(nodeId) { + searchForm.value.nodeId = nodeId + getOkrList() + const currentNode = findNode(peroidList.value, (node) => { + return node.nodeId == nodeId }) + if (!currentNode.children || currentNode.children.length == 0) { + isCurrentLeafNode.value = true + } else { + isCurrentLeafNode.value = false + } } function getOkrList() { @@ -88,13 +104,18 @@ function handleEditOkr() { } function handleUpdateProcess() { - message.success('更新进度成功') - getOkrList() + okrTableRef.value.updateProcess(searchForm.value.nodeId).then(() => { + message.success('更新成功') + getOkrList() + }) } const dialogOkr = ref(null) function handleShowOkr(id) { - dialogOkr.value.open(id) + dialogOkr.value.open({ + nodeId: id, + canEdit: isCurrentLeafNode.value + }) } diff --git a/src/views/OKR/Management/Components/DialogOkr.vue b/src/views/OKR/Management/Components/DialogOkr.vue index 8df6a1b..f430229 100644 --- a/src/views/OKR/Management/Components/DialogOkr.vue +++ b/src/views/OKR/Management/Components/DialogOkr.vue @@ -18,7 +18,7 @@ ork落地
【节点】 - {{ nodeInfo.nodeName }} + {{ nodeInfo.allNodeName }}
@@ -68,7 +68,7 @@
- +
@@ -134,11 +134,12 @@ style="width: 120px" @change="getCommentTemplate" > - - - - - +
@@ -158,7 +159,12 @@ :toolbarConfig="toolbarConfig" />
-
+
- 门庆 + {{ it.creatorName }} -
西门庆
+
{{ it.creatorName }}
-
01-01 12:15
+
{{ it.createTime }}
-
+
- 6 + {{ it.likeCount }}
- 1 + {{ it.commentCount }}
@@ -248,7 +254,7 @@ v-for="item in nodeRecords" :key="item.recordId" placement="bottom" - :timestamp="formatDate(item.createTime)" + :timestamp="formatDate(item.createTime, 'YYYY-MM-DD HH:mm:ss')" color="#30d1fc" >
{{ item.creator }}
@@ -271,10 +277,12 @@ import { formatDate } from '@/utils/formatTime' import OkrTable from './OkrTable.vue' import { getOkrNodeDetail, getOkrNodeHistory } from '@/api/okr/okr' +import { getCommentTypeOptions, createComment, getCommentPage } from '@/api/okr/comment' const emit = defineEmits(['edit']) const show = ref(false) +const canEdit = ref(false) const toolbarConfig = { toolbarKeys: [ @@ -301,10 +309,19 @@ const okrTableRef = ref(null) const nodeInfo = ref({}) const nodeRecords = ref([]) +const commentTypeOptions = ref([]) -async function open(id) { +async function open(curNode) { + canEdit.value = curNode.canEdit + nodeInfo.value.nodeId = curNode.nodeId + // 获取数据详情 + searchInfo(curNode) + show.value = true +} + +function searchInfo(curNode) { try { - getOkrNodeDetail(id).then((resp) => { + getOkrNodeDetail(curNode.nodeId).then((resp) => { nodeInfo.value = resp if (resp.objectives) { okrList.value = resp.objectives.map((item) => ({ @@ -319,13 +336,15 @@ async function open(id) { okrTableRef.value.prepareData(okrList.value) }) }) - getOkrNodeHistory(id).then((resp) => { + getOkrNodeHistory(curNode.nodeId).then((resp) => { nodeRecords.value = resp }) + getCommentTypeOptions().then((resp) => { + commentTypeOptions.value = resp + }) + searchCommentList() } finally { } - show.value = true - // 获取数据详情 } function close() { @@ -335,7 +354,10 @@ function close() { defineExpose({ open, close }) function handleSaveProcess() { - console.log(okrList.value) + okrTableRef.value.updateProcess(nodeInfo.value.nodeId).then(() => { + message.success('更新成功') + searchInfo() + }) } function handleChildItem() { @@ -345,28 +367,60 @@ function handleChildItem() { const addNewComment = ref(false) const form = ref({ commentValue: '', - commentType: 1 + commentType: undefined }) function handleInsertComment() { addNewComment.value = true - form.value = { - commentValue: '', - commentType: 1 + const defaultComment = commentTypeOptions.value[0] + if (defaultComment) { + form.value = { + commentType: defaultComment.id, + mentionedUserIdList: [] + } } getCommentTemplate() } function getCommentTemplate() { - form.value.commentValue = `

一、工作概况

   

二、数据统计

  1. 呼出电话数:
  2. 有效沟通数:
  3. 销售成果

三、问题与改进方案


` + if (form.value.commentType) { + form.value.commentValue = commentTypeOptions.value.find( + (item) => item.id == form.value.commentType + ).remark + } else { + form.value.commentValue = `

一、工作概况

   

二、数据统计

  1. 呼出电话数:
  2. 有效沟通数:
  3. 销售成果

三、问题与改进方案


` + } } function handleSaveComment() { addNewComment.value = false + try { + const data = { + businessType: 1, + businessId: nodeInfo.value.nodeId, + contentType: 1, + content: form.value.commentValue, + mentionedUserIdList: form.value.mentionedUserIdList + } + createComment(data).then(() => { + message.success('评论成功') + searchCommentList() + }) + } catch (error) { + message.error('评论失败') + } } +const commentList = ref([]) -const commentListVal = ref( - `

一、工作概况

  刷牙洗脸吃饭穿鞋出门开车上班捣台球 

二、数据统计

  1. 呼出电话数:666
  2. 有效沟通数:123
  3. 销售成果:今日成交20,本月成交120,距离目标还差888

三、问题与改进方案


` -) +function searchCommentList() { + getCommentPage({ + businessType: 1, + businessId: nodeInfo.value.nodeId, + pageNum: 1, + pageSize: 100 + }).then((resp) => { + commentList.value = resp.list + }) +} function good(index) { console.log(index) diff --git a/src/views/OKR/Management/Components/DialogOkrInfo.vue b/src/views/OKR/Management/Components/DialogOkrInfo.vue index d3003a0..1e791e5 100644 --- a/src/views/OKR/Management/Components/DialogOkrInfo.vue +++ b/src/views/OKR/Management/Components/DialogOkrInfo.vue @@ -1,6 +1,5 @@ @@ -59,8 +59,17 @@