feat(sj_1.3.0-beta1): Job任务管理新增负责人

This commit is contained in:
wodeyangzipingpingwuqi 2024-12-27 17:38:03 +08:00
parent ef2ac40748
commit df7e9e4eb8
8 changed files with 99 additions and 3 deletions

View File

@ -0,0 +1,57 @@
<script setup lang="ts">
import { ref } from 'vue';
import { $t } from '@/locales';
import { fetchGetUserPageList } from '@/service/api';
defineOptions({
name: 'SystemUser'
});
interface Props {
disabled?: boolean;
clearable?: boolean;
}
const props = withDefaults(defineProps<Props>(), {
disabled: false,
clearable: false
});
const model = defineModel<string | null>();
interface Emits {
(e: 'update:modelValue', value: string): void;
}
const emit = defineEmits<Emits>();
/** 可选组列表 */
const userNameList = ref();
async function getUserNameList() {
const { data, error } = await fetchGetUserPageList();
if (!error) {
userNameList.value = data?.data;
}
}
const handleUpdate = (value: string) => {
emit('update:modelValue', value);
};
getUserNameList();
</script>
<template>
<NSelect
v-model:value="model"
:placeholder="$t('page.userManager.form.owerName')"
:options="userNameList"
value-field="id"
label-field="username"
:disabled="props.disabled"
:clearable="props.clearable"
filterable
@update:value="handleUpdate"
/>
</template>
<style scoped></style>

View File

@ -779,6 +779,7 @@ const local: App.I18n.Schema = {
jobTask: {
title: 'JobTask List',
groupName: 'Group name',
owerName: 'Ower name',
jobName: 'Mission name',
argsStr: 'Method parameters',
shardNum: 'Reduce shard num',
@ -801,6 +802,7 @@ const local: App.I18n.Schema = {
updateDt: 'Update time',
form: {
jobStatus: 'Please enter status',
owerName: 'Please enter owerName',
maxRetryTimes: 'Please enter maximum number of retry',
description: 'Please enter description',
triggerType: 'Please enter trigger type',
@ -871,6 +873,7 @@ const local: App.I18n.Schema = {
oldPassword: 'Old Password',
newPassword: 'New Password',
form: {
owerName: 'Please select owername',
role: 'Please enter role',
password: 'Please enter password',
username: 'Please enter username',

View File

@ -786,6 +786,7 @@ const local: App.I18n.Schema = {
jobTask: {
title: '定时任务列表',
groupName: '组名称',
owerName: '负责人',
jobName: '任务名称',
argsStr: '方法参数',
shardNum: 'reduce 分片数',
@ -808,6 +809,7 @@ const local: App.I18n.Schema = {
updateDt: '更新时间',
form: {
jobStatus: '请输入状态',
owerName: '请输入负责人名称',
maxRetryTimes: '请输入最大重试次数',
description: '请输入描述',
triggerType: '请输入触发类型',
@ -878,6 +880,7 @@ const local: App.I18n.Schema = {
oldPassword: '旧密码',
newPassword: '新密码',
form: {
owerName: '请选择负责人',
role: '请输入角色',
password: '请输入密码',
username: '请输入用户名',

View File

@ -958,6 +958,10 @@ declare namespace Api {
type Job = Common.CommonRecord<{
/** 组名称 */
groupName: string;
/** 负责人id */
owerId: string;
/** 负责人名 */
owerName: string;
/** 通知场景ids */
notifyIds: number[];
/** 任务名称 */
@ -1008,6 +1012,7 @@ declare namespace Api {
Api.Job.Job,
| 'groupName'
| 'jobName'
| 'owerName'
| 'argsStr'
| 'argsType'
| 'jobStatus'
@ -1269,7 +1274,7 @@ declare namespace Api {
/** userManager search params */
type UserManagerSearchParams = CommonType.RecordNullable<
Pick<Api.UserManager.UserManager, 'username' | 'password' | 'checkPassword' | 'role' | 'permissions'> &
Pick<Api.UserManager.UserManager, 'id' | 'username' | 'password' | 'checkPassword' | 'role' | 'permissions'> &
CommonSearchParams
>;

View File

@ -986,6 +986,7 @@ declare namespace App {
jobTask: {
title: string;
groupName: string;
owerName: string;
jobName: string;
argsStr: string;
shardNum: string;
@ -1009,6 +1010,7 @@ declare namespace App {
form: {
jobName: string;
jobStatus: string;
owerName: string;
maxRetryTimes: string;
description: string;
triggerType: string;
@ -1078,6 +1080,7 @@ declare namespace App {
oldPassword: string;
newPassword: string;
form: {
owerName: string;
role: string;
password: string;
username: string;

View File

@ -32,7 +32,8 @@ const { columnChecks, columns, data, getData, loading, mobilePagination, searchP
size: 10,
groupName: null,
jobName: null,
jobStatus: null
jobStatus: null,
owerName: null
},
columns: () => [
{
@ -71,6 +72,12 @@ const { columnChecks, columns, data, getData, loading, mobilePagination, searchP
align: 'left',
width: 180
},
{
key: 'owerName',
title: $t('page.jobTask.owerName'),
align: 'left',
width: 120
},
{
key: 'nextTriggerAt',
title: $t('page.jobTask.nextTriggerAt'),
@ -313,7 +320,8 @@ function body(): Api.Job.ExportJob {
jobIds: checkedRowKeys.value,
groupName: searchParams.groupName,
jobName: searchParams.jobName,
jobStatus: searchParams.jobStatus
jobStatus: searchParams.jobStatus,
owerName: searchParams.owerName
};
}

View File

@ -61,6 +61,8 @@ type Model = Pick<
Api.Job.Job,
| 'id'
| 'groupName'
| 'owerId'
| 'owerName'
| 'notifyIds'
| 'jobName'
| 'argsStr'
@ -98,6 +100,7 @@ function createDefaultModel(): Model {
return {
// @ts-expect-error groupName is required
groupName: undefined,
owerId: '',
notifyIds: [],
jobName: '',
argsStr: '',
@ -122,6 +125,7 @@ function createDefaultModel(): Model {
type RuleKey = Extract<
keyof Model,
| 'groupName'
| 'owerId'
| 'jobName'
| 'argsType'
| 'jobStatus'
@ -140,6 +144,7 @@ type RuleKey = Extract<
const rules: Record<RuleKey, App.Global.FormRule> = {
groupName: defaultRequiredRule,
owerId: defaultRequiredRule,
jobName: defaultRequiredRule,
argsType: defaultRequiredRule,
jobStatus: defaultRequiredRule,
@ -268,6 +273,8 @@ async function handleSubmit() {
const {
id,
groupName,
owerId,
owerName,
notifyIds,
jobName,
argsType,
@ -303,6 +310,8 @@ async function handleSubmit() {
if (props.operateType === 'add') {
const { error } = await fetchAddJob({
groupName,
owerId,
owerName,
notifyIds,
jobName,
argsStr,
@ -329,6 +338,8 @@ async function handleSubmit() {
const { error } = await fetchEditJob({
id,
groupName,
owerId,
owerName,
notifyIds,
jobName,
argsStr,
@ -461,6 +472,9 @@ const scriptMethodOptions = [
<NFormItem :label="$t('page.jobTask.groupName')" path="groupName">
<SelectGroup v-model:value="model.groupName" :disabled="props.operateType === 'edit'" />
</NFormItem>
<NFormItem :label="$t('page.jobTask.owerName')" path="owerId">
<SystemUser v-model:value="model.owerId" />
</NFormItem>
<NFormItem :label="$t('page.jobTask.jobStatus')" path="jobStatus">
<NRadioGroup v-model:value="model.jobStatus" name="jobStatus">
<NSpace>

View File

@ -42,6 +42,9 @@ function search() {
clearable
/>
</NFormItemGi>
<NFormItemGi span="24 s:12 m:6" :label="$t('page.jobTask.owerName')" path="owerName" class="pr-24px">
<NInput v-model:value="model.owerName" :placeholder="$t('page.jobTask.form.owerName')" clearable />
</NFormItemGi>
</SearchForm>
</template>