This commit is contained in:
sx1989827 2023-09-10 09:38:10 +08:00
parent bc9a907ab1
commit cb633d2036
20 changed files with 113 additions and 47 deletions

View File

@ -1,11 +1,33 @@
<script setup lang="ts">
import enUS from '@arco-design/web-vue/es/locale/lang/en-us'</script>
<template>
<a-config-provider :locale="enUS">
<a-config-provider :locale="lang">
<router-view></router-view>
</a-config-provider>
</template>
<script setup lang="ts">
import enUS from '@arco-design/web-vue/es/locale/lang/en-us'
import zhCN from '@arco-design/web-vue/es/locale/lang/zh-cn'
import {computed} from "vue";
const lang=computed(()=>{
let lang=localStorage.getItem("lang")
if(lang) {
if(lang==="zh") {
return zhCN
} else {
return enUS
}
} else {
let lang=(navigator.language || "en").toLowerCase().split("-")[0]
if(lang==="zh") {
return zhCN
} else {
return enUS
}
}
})
</script>
<style scoped>
</style>

View File

@ -78,7 +78,7 @@
<div style="position: absolute;line-height:20px;border-radius: 5px;padding-left: 5px;color: white;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;cursor: move" :style="{left:item.left,top:item.top,right:item.right,height:item.height,backgroundColor:objManage.checkCrossEvent(item)?item.color:'',color:objManage.checkCrossEvent(item)?'white':item.color}" :data-id="item.id" :data-index="JSON.stringify(item.index)" data-type="move" v-if="parseInt(item.top)+parseInt(item.height)<monthDayHeight-30">
{{moment.tz({hour:item.startDate.hour,minute:item.startDate.minute},props.timeZone).format("HH:mm")+" "+item.name}}
</div>
<div class="eventMore" style="position: absolute;line-height:20px;border-radius: 5px;padding-left: 5px;font-weight: bold;color: rgb(3,155,229)" :style="{left:item.left,top:item.top,right:item.right,height:item.height}" v-else-if="check(index,index1)" @click="onMore(index-1,$event)" name="more">more</div>
<div class="eventMore" style="position: absolute;line-height:20px;border-radius: 5px;padding-left: 5px;font-weight: bold;color: rgb(3,155,229)" :style="{left:item.left,top:item.top,right:item.right,height:item.height}" v-else-if="check(index,index1)" @click="onMore(index-1,$event)" name="more">{{$t("util.more")}}</div>
</template>
</div>
</div>

View File

@ -35,7 +35,7 @@
<template #icon>
<icon-plus />
</template>
Add
{{$t("util.add")}}
</a-tag>
<slot :value="commitValue"></slot>
</a-space>

View File

@ -25,16 +25,16 @@
ORGANIZATION:organization {{(obj.data as ICommon_Model_Organization)?.name}} is inviting you
<template v-if="obj.status===ECommon_Model_Notification_Status.PENDING">
&nbsp;
<a href="javascript:void(0)" @click="onAcceptOrganizationInvitation">Accept</a>&nbsp;&nbsp;
<a href="javascript:void(0)" style="color: red" @click="onRejectOrganizationInvitation">Reject</a>&nbsp;
<a href="javascript:void(0)" @click="onAcceptOrganizationInvitation">{{$t("util.accept")}}</a>&nbsp;&nbsp;
<a href="javascript:void(0)" style="color: red" @click="onRejectOrganizationInvitation">{{$t("util.reject")}}</a>&nbsp;
</template>
<template v-else-if="obj.status===ECommon_Model_Notification_Status.RESOLVED">
&nbsp;&nbsp;
<span style="color: blue">Accepted</span>
<span style="color: blue">{{$t("util.accepted")}}</span>
</template>
<template v-else-if="obj.status===ECommon_Model_Notification_Status.REJECTED">
&nbsp;&nbsp;
<span style="color: red">Rejected</span>
<span style="color: red">{{$t("util.rejected")}}</span>
</template>
</template>
<template v-else-if="obj.type===ECommon_Model_Notification_Type.ISSUE_COMMENT_AT">

View File

@ -18,11 +18,11 @@
<a-switch :checked-value="1" :unchecked-value="0" v-model="data.isAllDay" size="small" @change="onChangeAllDay"></a-switch>
{{$t("controller.app.calendar.calendarEventDateEdit.repeat")}}:
<a-select style="width: 110px" size="small" v-model="data.recurring">
<a-option :value="ECommon_Calendar_Recurring_Type.NONE">No</a-option>
<a-option :value="ECommon_Calendar_Recurring_Type.DAY">Day</a-option>
<a-option :value="ECommon_Calendar_Recurring_Type.WORKDAY">Workday</a-option>
<a-option :value="ECommon_Calendar_Recurring_Type.WEEK">Week</a-option>
<a-option :value="ECommon_Calendar_Recurring_Type.MONTH">Month</a-option>
<a-option :value="ECommon_Calendar_Recurring_Type.NONE">{{$t("util.none")}}</a-option>
<a-option :value="ECommon_Calendar_Recurring_Type.DAY">{{$t("util.day")}}</a-option>
<a-option :value="ECommon_Calendar_Recurring_Type.WORKDAY">{{$t("util.workday")}}</a-option>
<a-option :value="ECommon_Calendar_Recurring_Type.WEEK">{{$t("util.week")}}</a-option>
<a-option :value="ECommon_Calendar_Recurring_Type.MONTH">{{$t("util.month")}}</a-option>
</a-select>
<template v-if="data.recurring===ECommon_Calendar_Recurring_Type.WEEK">
{{$t("controller.app.calendar.calendarEventDateEdit.selectWeekday")}}:

View File

@ -83,7 +83,7 @@
<UserAvatar :organization-user-id="record.organizationUserId" :name="record.nickname" :photo="record.photo"></UserAvatar>
</template>
</a-table>
<a-button type="primary" style="margin-top: 10px" size="small" @click="onMeeting">Start</a-button>
<a-button type="primary" style="margin-top: 10px" size="small" @click="onMeeting">{{$t("util.start")}}</a-button>
</a-row>
</template>
</a-popover>

View File

@ -54,7 +54,7 @@
<UserAvatar :organization-user-id="record.organizationUserId" :name="record.nickname" :photo="record.photo"></UserAvatar>
</template>
</a-table>
<a-button type="primary" style="margin-top: 10px" size="small" @click="onMeeting">Start</a-button>
<a-button type="primary" style="margin-top: 10px" size="small" @click="onMeeting">{{$t("util.start")}}</a-button>
</a-row>
</template>
</a-popover>

View File

@ -28,7 +28,7 @@
<UserAvatar :organization-user-id="record.id" :name="record.name" :photo="record.photo"></UserAvatar>
</template>
</a-table>
<a-button type="primary" style="margin-top: 10px" size="small" @click="onMeeting">Invite</a-button>
<a-button type="primary" style="margin-top: 10px" size="small" @click="onMeeting">{{$t("util.invite")}}</a-button>
</a-row>
</template>
</a-popover>

View File

@ -43,7 +43,7 @@
<icon-down />
</template>
<template #content>
<a-doption v-if="actionList" v-for="item in actionList as any[]" :key="item.isApproval?item.name:item.id" @click="onAction(item1.id,item)">{{item.name}}</a-doption>
<a-doption v-if="actionList" v-for="item in actionList as any[]" :key="item.isApproval?item.type:item.id" @click="onAction(item1.id,item)">{{item.isApproval?approvalMap[item.type]:item.name}}</a-doption>
<a-spin loading v-else></a-spin>
</template>
</a-dropdown-button>
@ -142,7 +142,10 @@ import {ICommon_Model_Workflow_Action} from "../../../../../../../common/model/w
import ProjectIssueNext from "@/business/controller/app/project/issue/projectIssueNext.vue";
import {EClient_EVENTBUS_TYPE, eventBus} from "@/business/common/event/event";
import {ECommon_Model_Workflow_Node_Status} from "../../../../../../../common/model/workflow_node";
import {ECommon_Model_Project_Issue_Approval_Type} from "../../../../../../../common/model/project_issue_approval";
import {
ECommon_Model_Project_Issue_Approval_Action,
ECommon_Model_Project_Issue_Approval_Type
} from "../../../../../../../common/model/project_issue_approval";
import {useI18n} from "vue-i18n";
moment;
@ -156,6 +159,12 @@ const sprintId=ref("")
const sprintList=ref<DCSType<ICommon_Model_Board_Sprint>[]>([])
const sprintInfo=ref<DCSType<ICommon_Route_Res_Board_Sprint_Info>>()
const {t}=useI18n()
const approvalMap={
[ECommon_Model_Project_Issue_Approval_Action.COMMIT]:t("util.commit"),
[ECommon_Model_Project_Issue_Approval_Action.RESOLVE]:t("util.resolve"),
[ECommon_Model_Project_Issue_Approval_Action.REJECT]:t("util.reject"),
[ECommon_Model_Project_Issue_Approval_Action.REVOKE]:t("util.revoke")
}
const cardData=ref<{
id:string,
name:string,
@ -182,7 +191,7 @@ let objDrag:{
}
const actionList=ref<DCSType<ICommon_Model_Workflow_Action>[] | {
isApproval:true,
name:"Resolve"|"Reject"|"Revoke"|"Commit"
type:ECommon_Model_Project_Issue_Approval_Action
}[]>()
const onSearch=async (keyword:string)=>{
let res=await apiBoard.listSprint({
@ -502,10 +511,10 @@ const onClickIssue=(projectId:string,projectIssueId:string)=>{
const onAction=async (projectIssueId:string,item:ICommon_Model_Workflow_Action | {
isApproval:true,
name:"Resolve"|"Reject"|"Revoke"|"Commit"
type:ECommon_Model_Project_Issue_Approval_Action
})=>{
if("isApproval" in item) {
if(item.name==="Revoke") {
if(item.type===ECommon_Model_Project_Issue_Approval_Action.REVOKE) {
let res=await apiIssue.revokeApproval({
projectIssueId:projectIssueId
})
@ -513,7 +522,7 @@ const onAction=async (projectIssueId:string,item:ICommon_Model_Workflow_Action |
Message.error(res.msg)
return
}
} else if(item.name==="Resolve") {
} else if(item.type==ECommon_Model_Project_Issue_Approval_Action.RESOLVE) {
let res=await apiIssue.resolveApproval({
projectIssueId:projectIssueId
})
@ -521,7 +530,7 @@ const onAction=async (projectIssueId:string,item:ICommon_Model_Workflow_Action |
Message.error(res.msg)
return
}
} else if(item.name==="Reject") {
} else if(item.type==ECommon_Model_Project_Issue_Approval_Action.REJECT) {
let ret=await Dialog.inputRich(root.value,appContext,t("tip.rejectReason"))
if(ret) {
let res=await apiIssue.rejectApproval({
@ -535,7 +544,7 @@ const onAction=async (projectIssueId:string,item:ICommon_Model_Workflow_Action |
} else {
return
}
} else if(item.name==="Commit") {
} else if(item.type==ECommon_Model_Project_Issue_Approval_Action.COMMIT) {
let res=await apiIssue.commitApproval({
projectIssueId:projectIssueId
})

View File

@ -11,7 +11,7 @@
</a-select>
<a-input-search size="small" style="width: 300px" v-model="keyword" @search="onSearch" search-button :placeholder="$t('placeholder.typeSprintName')"></a-input-search>
<a-button size="small" type="primary" @click="onCreate">
Create
{{$t("util.create")}}
</a-button>
</a-space>
</a-row>

View File

@ -27,10 +27,10 @@
<template #actions v-if="checkPermission(permission,Permission_Types.Project.ADMIN) || item.value.created_by.id==store.userInfo.id">
<template v-if="!item.isEdit">
<a-link href="javascript:void(0)" style="color: gray;font-size: 13px;padding: 0px" @click="onEdit(item)">
Edit
{{$t("util.edit")}}
</a-link>
<a-link href="javascript:void(0)" style="color: gray;font-size: 13px;padding: 0px" @click="onRemoveComment(index)">
Delete
{{$t("util.delete")}}
</a-link>
</template>
<template v-else>

View File

@ -27,7 +27,7 @@
<a-button :disabled="actionList.length==0" :type="info?.workflowNode.status===ECommon_Model_Workflow_Node_Status.NOTSTART?'secondary':'primary'" :status="info?.approval?.type===ECommon_Model_Project_Issue_Approval_Type.REJECTED?'danger':info?.workflowNode.status===ECommon_Model_Workflow_Node_Status.DONE?'success':'normal'">{{calculateApprovalName}}&nbsp;&nbsp;<icon-down></icon-down>
</a-button>
<template #content>
<a-doption v-for="item in actionList as any[]" :key="item.isApproval?item.name:item.id" @click="onAction(item)">{{item.name}}</a-doption>
<a-doption v-for="item in actionList as any[]" :key="item.isApproval?item.type:item.id" @click="onAction(item)">{{item.isApproval?approvalMap[item.type]:item.name}}</a-doption>
</template>
</a-dropdown>
<a-button v-if="!parentIssue" @click="onCreateSubIssue">
@ -126,7 +126,10 @@ import ProjectIssueComment from "./projectIssueComment.vue";
import ProjectIssueField from "./projectIssueField.vue";
import ProjectIssueRelated from "./projectIssueRelated.vue";
import ProjectIssueHistory from "./projectIssueHistory.vue";
import {ECommon_Model_Project_Issue_Approval_Type} from "../../../../../../../common/model/project_issue_approval";
import {
ECommon_Model_Project_Issue_Approval_Action,
ECommon_Model_Project_Issue_Approval_Type
} from "../../../../../../../common/model/project_issue_approval";
import RichEditor from "@/business/common/component/richEditor/richEditor.vue";
import {ECommon_Content_Line_Config_Type} from "../../../../../../../common/model/content";
import {RichEditorEventHandle} from "@/business/common/component/richEditorEventHandle";
@ -152,7 +155,7 @@ const moduleList=ref<DCSType<ICommon_Model_Project_Module>[]>([])
const labelList=ref<DCSType<ICommon_Model_Project_Label>[]>([])
const actionList=ref<DCSType<ICommon_Model_Workflow_Action>[] | {
isApproval:true,
name:"Resolve"|"Reject"|"Revoke"|"Commit"
type:ECommon_Model_Project_Issue_Approval_Action
}[]>([])
const fieldList=ref<ICommon_Route_Res_ProjectIssue_fieldsInfo[]>([])
const store=useDesktopStore()
@ -170,6 +173,12 @@ const rowSelection=ref<TableRowSelection>({
onlyCurrent:false
})
const {t}=useI18n()
const approvalMap={
[ECommon_Model_Project_Issue_Approval_Action.COMMIT]:t("util.commit"),
[ECommon_Model_Project_Issue_Approval_Action.RESOLVE]:t("util.resolve"),
[ECommon_Model_Project_Issue_Approval_Action.REJECT]:t("util.reject"),
[ECommon_Model_Project_Issue_Approval_Action.REVOKE]:t("util.revoke")
}
const columns = [
{
title: t("util.name"),
@ -284,10 +293,10 @@ const getActionList=async ()=>{
}
const onAction=async (item:ICommon_Model_Workflow_Action | {
isApproval:true,
name:"Resolve"|"Reject"|"Revoke"|"Commit"
type:ECommon_Model_Project_Issue_Approval_Action
})=>{
if("isApproval" in item) {
if(item.name==="Revoke") {
if(item.type===ECommon_Model_Project_Issue_Approval_Action.REVOKE) {
let res=await apiIssue.revokeApproval({
projectIssueId:props.projectIssueId
})
@ -295,7 +304,7 @@ const onAction=async (item:ICommon_Model_Workflow_Action | {
Message.error(res.msg)
return
}
} else if(item.name==="Resolve") {
} else if(item.type===ECommon_Model_Project_Issue_Approval_Action.RESOLVE) {
let res=await apiIssue.resolveApproval({
projectIssueId:props.projectIssueId
})
@ -303,7 +312,7 @@ const onAction=async (item:ICommon_Model_Workflow_Action | {
Message.error(res.msg)
return
}
} else if(item.name==="Reject") {
} else if(item.type===ECommon_Model_Project_Issue_Approval_Action.REJECT) {
let ret=await Dialog.inputRich(root.value,appContext,t("tip.rejectReason"))
if(ret) {
let res=await apiIssue.rejectApproval({
@ -317,7 +326,7 @@ const onAction=async (item:ICommon_Model_Workflow_Action | {
} else {
return
}
} else if(item.name==="Commit") {
} else if(item.type===ECommon_Model_Project_Issue_Approval_Action.COMMIT) {
let res=await apiIssue.commitApproval({
projectIssueId:props.projectIssueId
})

View File

@ -1,7 +1,7 @@
<template>
<div ref="root">
<a-dropdown-button type="primary" size="small">
Add
{{$t("util.add")}}
<template #icon>
<icon-down></icon-down>
</template>

View File

@ -2,7 +2,9 @@
<div ref="root">
<a-space>
<a-input-search @search="onSearch" v-model="keyword" style="width: 300px" search-button :placeholder="$t('placeholder.typeProjectName')"></a-input-search>
<a-button type="primary" @click="onCreate">Create</a-button>
<a-button type="primary" @click="onCreate">
{{$t("util.create")}}
</a-button>
</a-space>
<a-table style="margin-top: 10px" :columns="columns" :data="data" :pagination="pagination" @pageChange="onPageChange">
<template #name="{record}">

View File

@ -22,7 +22,9 @@
<a-option :label="$t('util.joined')" value="joined"></a-option>
</a-select>
<a-input-search style="width: 250px" v-model="keyword" :placeholder="$t('placeholder.typeWikiName')" @search="onSearch"></a-input-search>
<a-button type="primary" @click="onAddWiki" v-if="checkPermission(storeOrganization.organizationPermission,Permission_Types.Organization.CREATE_WIKI)">Create</a-button>
<a-button type="primary" @click="onAddWiki" v-if="checkPermission(storeOrganization.organizationPermission,Permission_Types.Organization.CREATE_WIKI)">
{{$t("util.create")}}
</a-button>
</a-space>
</a-row>
<a-space wrap style="margin-top: 20px" size="large" v-if="list.length>0">

View File

@ -317,6 +317,11 @@ export default {
joinDate:"Join Date",
starting:"Starting",
completed:"Completed",
accept:"Accept",
reject:"Reject",
workDay:"WorkDay",
commit:"Commit",
resolve:"Resolve"
},
"common":{
"component":{

View File

@ -93,7 +93,10 @@ export default {
contentNotEmpty:"内容不能为空",
selectBothDate:"日期都需要选择!",
notStartNodeNotRemove:"未开始节点不能被删除!!!",
typeCode:"输入验证码"
typeCode:"输入验证码",
accept:"接受",
reject:"拒绝",
workDay:"工作日"
},
placeholder:{
pleaseSelect:"请选择",
@ -315,6 +318,11 @@ export default {
joinDate:"加入日期",
starting:"进行中",
completed:"已完成",
accept:"接受",
reject:"拒绝",
workDay:"工作日",
commit:"提交",
resolve:"撤销"
},
"common":{
"component":{

View File

@ -6,6 +6,13 @@ export enum ECommon_Model_Project_Issue_Approval_Type {
REJECTED
}
export enum ECommon_Model_Project_Issue_Approval_Action {
RESOLVE,
REJECT,
REVOKE,
COMMIT
}
export interface ICommon_Model_Project_Issue_Approval {
id: string,
project_issue_id:string

View File

@ -18,6 +18,7 @@ import {ECommon_HttpApi_Method} from "./types";
import {ICommon_Model_Project_Issue_Field_Value} from "../model/project_issue_field_value";
import {ICommon_Model_Project_Release} from "../model/project_release";
import {ICommon_Model_Project_Issue_History} from "../model/project_issue_history";
import {ECommon_Model_Project_Issue_Approval_Action} from "../model/project_issue_approval";
const api={
baseUrl:"/issue",
@ -147,7 +148,7 @@ const api={
}>{},
res:<ICommon_Model_Workflow_Action[] | {
isApproval:true,
name:"Resolve"|"Reject"|"Revoke"|"Commit"
type:ECommon_Model_Project_Issue_Approval_Action
}[]>{},
permission:[Permission_Types.Project.READ]
},

View File

@ -27,6 +27,7 @@ import {
import {ECommon_Model_Workflow_Approval_Type} from "../../../common/model/workflow_approval";
import rpcUserApi from "../../user/rpc/user"
import {
ECommon_Model_Project_Issue_Approval_Action,
ECommon_Model_Project_Issue_Approval_Type,
ICommon_Model_Project_Issue_Approval,
projectIssueApprovalModel
@ -605,7 +606,7 @@ export class ProjectIssueService extends Entity<typeof projectIssueModel,typeof
async actionsInfo(organizationUserId:string):Promise<ICommon_Model_Workflow_Action[] | {
isApproval:true,
name:"Resolve"|"Reject"|"Revoke"|"Commit"
type:ECommon_Model_Project_Issue_Approval_Action
}[]> {
let process=await projectIssueMapper.getProcess(this.getId())
let workflowNode=await WorkflowNodeService.getItemById(process[process.length-1])
@ -623,18 +624,18 @@ export class ProjectIssueService extends Entity<typeof projectIssueModel,typeof
return [
{
isApproval:true,
name:"Resolve"
type:ECommon_Model_Project_Issue_Approval_Action.RESOLVE
},
{
isApproval:true,
name:"Reject"
type:ECommon_Model_Project_Issue_Approval_Action.REJECT
}
]
} else {
return [
{
isApproval:true,
name:"Revoke"
type:ECommon_Model_Project_Issue_Approval_Action.REVOKE
}
]
}
@ -642,11 +643,11 @@ export class ProjectIssueService extends Entity<typeof projectIssueModel,typeof
return [
{
isApproval:true,
name:"Revoke"
type:ECommon_Model_Project_Issue_Approval_Action.REVOKE
},
{
isApproval:true,
name:"Commit"
type:ECommon_Model_Project_Issue_Approval_Action.COMMIT
}
]
} else if(objApproval.getItem().type===ECommon_Model_Project_Issue_Approval_Type.RESOLVED) {