|
|
@@ -1,8 +1,10 @@
|
|
|
<script setup lang="ts">
|
|
|
+import type { TablePaginationConfig } from 'antdv-next';
|
|
|
import type { Dayjs } from 'dayjs';
|
|
|
|
|
|
import { computed, ref, watch } from 'vue';
|
|
|
|
|
|
+import { $t } from '@/locales';
|
|
|
import {
|
|
|
Button,
|
|
|
DatePicker,
|
|
|
@@ -92,11 +94,23 @@ const userSearchKeyword = ref('');
|
|
|
const userModalOpen = ref(false);
|
|
|
const selectedUsers = ref<any[]>([]);
|
|
|
|
|
|
-const menuItems = [
|
|
|
- { key: 'basic', label: '基本' },
|
|
|
- { key: 'users', label: '关联用户' },
|
|
|
- { key: 'keys', label: '系统密钥' },
|
|
|
-];
|
|
|
+const menuItems = computed(() => [
|
|
|
+ {
|
|
|
+ key: 'basic',
|
|
|
+ label: $t('applicationManagement.modal.menu.basic'),
|
|
|
+ title: $t('applicationManagement.modal.menu.basic'),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'users',
|
|
|
+ label: $t('applicationManagement.modal.menu.users'),
|
|
|
+ title: $t('applicationManagement.modal.menu.users'),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'keys',
|
|
|
+ label: $t('applicationManagement.modal.menu.keys'),
|
|
|
+ title: $t('applicationManagement.modal.menu.keys'),
|
|
|
+ },
|
|
|
+]);
|
|
|
|
|
|
const roleOptions = [
|
|
|
{ value: '普通人员', label: '普通人员' },
|
|
|
@@ -295,7 +309,14 @@ const isOpen = computed({
|
|
|
set: (val) => emit('update:open', val),
|
|
|
});
|
|
|
|
|
|
-function handleMenuClick({ key }: { key: string }) {
|
|
|
+function handleMenuClick({
|
|
|
+ key,
|
|
|
+}: {
|
|
|
+ domEvent: Event;
|
|
|
+ item: any;
|
|
|
+ key: string;
|
|
|
+ keyPath: string[];
|
|
|
+}) {
|
|
|
activeMenu.value = key;
|
|
|
}
|
|
|
|
|
|
@@ -348,7 +369,7 @@ async function handleSave() {
|
|
|
if (result?.isSuccess) {
|
|
|
emit('save', data);
|
|
|
isOpen.value = false;
|
|
|
- message.success('应用保存成功');
|
|
|
+ message.success($t('applicationManagement.saveSuccess'));
|
|
|
}
|
|
|
} catch {}
|
|
|
}
|
|
|
@@ -369,10 +390,12 @@ function handleUserSearch() {
|
|
|
getAddUsers();
|
|
|
}
|
|
|
|
|
|
-function handleUserPageChange(pagination: any) {
|
|
|
- userPagination.value.currentPage = pagination.current;
|
|
|
- userPagination.value.pageSize = pagination.pageSize;
|
|
|
- getAddUsers();
|
|
|
+function handleUserPageChange(pagination: TablePaginationConfig) {
|
|
|
+ if (pagination.current && pagination.pageSize) {
|
|
|
+ userPagination.value.currentPage = pagination.current;
|
|
|
+ userPagination.value.pageSize = pagination.pageSize;
|
|
|
+ getAddUsers();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
async function handleUserSelect(user: any) {
|
|
|
@@ -382,7 +405,7 @@ async function handleUserSelect(user: any) {
|
|
|
formData.value.code,
|
|
|
);
|
|
|
if (result?.isSuccess) {
|
|
|
- message.success('用户添加成功');
|
|
|
+ message.success($t('applicationManagement.addUserSuccess'));
|
|
|
getAssociatedUsers();
|
|
|
userModalOpen.value = false;
|
|
|
}
|
|
|
@@ -391,23 +414,24 @@ async function handleUserSelect(user: any) {
|
|
|
|
|
|
async function handleUserDelete(user: any) {
|
|
|
Modal.confirm({
|
|
|
- title: 'Are you sure delete this task?',
|
|
|
- content: 'Some descriptions',
|
|
|
- okText: 'Yes',
|
|
|
+ title: $t('applicationManagement.deleteConfirm'),
|
|
|
+ content: $t('applicationManagement.deleteDescription'),
|
|
|
+ okText: $t('btn.yes'),
|
|
|
okType: 'danger',
|
|
|
- cancelText: 'No',
|
|
|
- async onOk() {
|
|
|
+ cancelText: $t('btn.no'),
|
|
|
+ type: 'warning',
|
|
|
+ onOk: async () => {
|
|
|
try {
|
|
|
const result = await deleteUserFromApplicationApi(user.id, [
|
|
|
formData.value.id,
|
|
|
]);
|
|
|
if (result?.isSuccess) {
|
|
|
- message.success('用户删除成功');
|
|
|
+ message.success($t('applicationManagement.deleteSuccess'));
|
|
|
getAssociatedUsers();
|
|
|
}
|
|
|
} catch {}
|
|
|
},
|
|
|
- onCancel() {},
|
|
|
+ onCancel: () => {},
|
|
|
});
|
|
|
}
|
|
|
|
|
|
@@ -420,7 +444,7 @@ async function handleAssociateUser(user: any) {
|
|
|
};
|
|
|
const result = await associateUserApi(data);
|
|
|
if (result?.isSuccess) {
|
|
|
- message.success('用户保存成功');
|
|
|
+ message.success($t('applicationManagement.associateUserSuccess'));
|
|
|
}
|
|
|
} catch {}
|
|
|
}
|
|
|
@@ -439,7 +463,7 @@ async function handleGenerateKey() {
|
|
|
};
|
|
|
const result = await generateSystemSecretApi(data);
|
|
|
if (result?.result) {
|
|
|
- message.success('系统密钥生成成功');
|
|
|
+ message.success($t('applicationManagement.generateKeySuccess'));
|
|
|
fetchSystemSecret();
|
|
|
}
|
|
|
} catch {}
|
|
|
@@ -448,7 +472,7 @@ async function handleGenerateKey() {
|
|
|
function handleCopyKey() {
|
|
|
if (keyData.value.systemKey) {
|
|
|
navigator.clipboard.writeText(keyData.value.systemKey);
|
|
|
- message.success('系统密钥已复制');
|
|
|
+ message.success($t('applicationManagement.copyKeySuccess'));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -497,7 +521,11 @@ function resetFormData() {
|
|
|
<Modal
|
|
|
v-model:open="isOpen"
|
|
|
:footer="null"
|
|
|
- :title="mode === 'add' ? '添加应用' : '编辑应用'"
|
|
|
+ :title="
|
|
|
+ mode === 'add'
|
|
|
+ ? $t('applicationManagement.modal.addTitle')
|
|
|
+ : $t('applicationManagement.modal.editTitle')
|
|
|
+ "
|
|
|
width="1200px"
|
|
|
>
|
|
|
<div class="flex h-[600px]">
|
|
|
@@ -515,7 +543,9 @@ function resetFormData() {
|
|
|
<div v-show="activeMenu === 'basic'" class="space-y-4">
|
|
|
<div class="flex items-center gap-4">
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">企业Logo</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.enterpriseLogo')
|
|
|
+ }}</label>
|
|
|
<Upload
|
|
|
v-model:file-list="formData.fileList"
|
|
|
:headers="{ Authorization: String(token) }"
|
|
|
@@ -529,7 +559,9 @@ function resetFormData() {
|
|
|
>
|
|
|
<div class="text-center">
|
|
|
<div class="text-4xl">+</div>
|
|
|
- <div class="text-sm text-gray-500">上传Logo</div>
|
|
|
+ <div class="text-sm text-gray-500">
|
|
|
+ {{ $t('applicationManagement.modal.uploadLogo') }}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</Upload>
|
|
|
@@ -538,115 +570,166 @@ function resetFormData() {
|
|
|
|
|
|
<div class="grid grid-cols-2 gap-4">
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">合作伙伴</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.partner')
|
|
|
+ }}</label>
|
|
|
<Select
|
|
|
v-model:value="formData.partner"
|
|
|
:disabled="props.mode === 'edit'"
|
|
|
:options="applicationMenu"
|
|
|
+ :placeholder="$t('applicationManagement.modal.selectPartner')"
|
|
|
class="h-[32px]"
|
|
|
- placeholder="请选择合作伙伴"
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">项目代码</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.projectCode')
|
|
|
+ }}</label>
|
|
|
<Input
|
|
|
v-model:value="formData.projectCode"
|
|
|
:disabled="props.mode === 'edit'"
|
|
|
- placeholder="请输入项目代码"
|
|
|
+ :placeholder="
|
|
|
+ $t('applicationManagement.modal.enterProjectCode')
|
|
|
+ "
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">克隆项目</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.cloneProject')
|
|
|
+ }}</label>
|
|
|
<Select
|
|
|
v-model:value="formData.cloneProject"
|
|
|
:disabled="props.mode === 'edit'"
|
|
|
:options="applications"
|
|
|
+ :placeholder="
|
|
|
+ $t('applicationManagement.modal.selectCloneProject')
|
|
|
+ "
|
|
|
class="h-[32px]"
|
|
|
- placeholder="请选择克隆项目"
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">项目名称(中文)</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.projectNameCn')
|
|
|
+ }}</label>
|
|
|
<Input
|
|
|
v-model:value="formData.nameCn"
|
|
|
- placeholder="请输入项目名称"
|
|
|
+ :placeholder="
|
|
|
+ $t('applicationManagement.modal.enterProjectName')
|
|
|
+ "
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">项目名称(英文)</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.projectNameEn')
|
|
|
+ }}</label>
|
|
|
<Input
|
|
|
v-model:value="formData.nameEn"
|
|
|
- placeholder="请输入项目名称"
|
|
|
+ :placeholder="
|
|
|
+ $t('applicationManagement.modal.enterProjectName')
|
|
|
+ "
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">客户关系</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.customerRelation')
|
|
|
+ }}</label>
|
|
|
<Select
|
|
|
v-model:value="formData.customerRelation"
|
|
|
:options="customerRelationsOptions"
|
|
|
+ :placeholder="
|
|
|
+ $t('applicationManagement.modal.selectCustomerRelation')
|
|
|
+ "
|
|
|
class="h-[32px]"
|
|
|
- placeholder="请选择客户关系"
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">联系人</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.contact')
|
|
|
+ }}</label>
|
|
|
<Input
|
|
|
v-model:value="formData.contact"
|
|
|
- placeholder="请输入联系人"
|
|
|
+ :placeholder="$t('applicationManagement.modal.enterContact')"
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">手机号</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.phone')
|
|
|
+ }}</label>
|
|
|
<Input
|
|
|
v-model:value="formData.phone"
|
|
|
- placeholder="请输入手机号"
|
|
|
+ :placeholder="$t('applicationManagement.modal.enterPhone')"
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">邮箱</label>
|
|
|
- <Input v-model:value="formData.email" placeholder="请输入邮箱" />
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.email')
|
|
|
+ }}</label>
|
|
|
+ <Input
|
|
|
+ v-model:value="formData.email"
|
|
|
+ :placeholder="$t('applicationManagement.modal.enterEmail')"
|
|
|
+ />
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">地址</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.address')
|
|
|
+ }}</label>
|
|
|
<Input
|
|
|
v-model:value="formData.address"
|
|
|
- placeholder="请输入地址"
|
|
|
+ :placeholder="$t('applicationManagement.modal.enterAddress')"
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">描述</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.description')
|
|
|
+ }}</label>
|
|
|
<Input
|
|
|
v-model:value="formData.description"
|
|
|
+ :placeholder="
|
|
|
+ $t('applicationManagement.modal.enterDescription')
|
|
|
+ "
|
|
|
:rows="3"
|
|
|
- placeholder="请输入描述"
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">是否启用</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.isEnabled')
|
|
|
+ }}</label>
|
|
|
<Switch v-model:checked="formData.isEnabled" class="w-[40px]" />
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">流程数</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.processCount')
|
|
|
+ }}</label>
|
|
|
<Input v-model:value="formData.processCount" type="number" />
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">页面数</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.pageCount')
|
|
|
+ }}</label>
|
|
|
<Input v-model:value="formData.pageCount" type="number" />
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">数据表</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.tableCount')
|
|
|
+ }}</label>
|
|
|
<Input v-model:value="formData.tableCount" type="number" />
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">设计人员数</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.designerCount')
|
|
|
+ }}</label>
|
|
|
<Input v-model:value="formData.designerCount" type="number" />
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">业务场景数</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.scenarioCount')
|
|
|
+ }}</label>
|
|
|
<Input v-model:value="formData.scenarioCount" type="number" />
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">C端用户数</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.userCount')
|
|
|
+ }}</label>
|
|
|
<Input v-model:value="formData.userCount" type="number" />
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -654,14 +737,28 @@ function resetFormData() {
|
|
|
|
|
|
<div v-show="activeMenu === 'users'" class="space-y-4">
|
|
|
<div class="mb-4 flex items-center justify-between">
|
|
|
- <Button type="primary" @click="handleAddUser">添加用户</Button>
|
|
|
+ <Button type="primary" @click="handleAddUser">
|
|
|
+ {{ $t('applicationManagement.modal.users.addUser') }}
|
|
|
+ </Button>
|
|
|
</div>
|
|
|
|
|
|
<Table
|
|
|
:columns="[
|
|
|
- { title: '账户', dataIndex: 'account', key: 'account' },
|
|
|
- { title: '角色', dataIndex: 'roleTypes', key: 'roleTypes' },
|
|
|
- { title: '操作', key: 'action', width: 200 },
|
|
|
+ {
|
|
|
+ title: $t('applicationManagement.modal.users.account'),
|
|
|
+ dataIndex: 'account',
|
|
|
+ key: 'account',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: $t('applicationManagement.modal.users.role'),
|
|
|
+ dataIndex: 'roleTypes',
|
|
|
+ key: 'roleTypes',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: $t('applicationManagement.modal.users.action'),
|
|
|
+ key: 'action',
|
|
|
+ width: 200,
|
|
|
+ },
|
|
|
]"
|
|
|
:data-source="relatedUsers"
|
|
|
:pagination="false"
|
|
|
@@ -682,7 +779,7 @@ function resetFormData() {
|
|
|
type="primary"
|
|
|
@click="handleAssociateUser(record)"
|
|
|
>
|
|
|
- 保存
|
|
|
+ {{ $t('applicationManagement.modal.users.save') }}
|
|
|
</Button>
|
|
|
<Button
|
|
|
class="ml-[10px]"
|
|
|
@@ -690,7 +787,7 @@ function resetFormData() {
|
|
|
size="small"
|
|
|
@click="handleUserDelete(record)"
|
|
|
>
|
|
|
- 删除
|
|
|
+ {{ $t('applicationManagement.modal.users.delete') }}
|
|
|
</Button>
|
|
|
</div>
|
|
|
</template>
|
|
|
@@ -701,7 +798,9 @@ function resetFormData() {
|
|
|
<div v-show="activeMenu === 'keys'" class="space-y-4">
|
|
|
<div class="grid grid-cols-2 gap-4">
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">开始时间</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.keys.startTime')
|
|
|
+ }}</label>
|
|
|
<DatePicker
|
|
|
v-model:value="keyData.startTime"
|
|
|
format="YYYY-MM-DD"
|
|
|
@@ -709,49 +808,67 @@ function resetFormData() {
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">加密类型</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.keys.encryptionType')
|
|
|
+ }}</label>
|
|
|
<Input
|
|
|
v-model:value="keyData.encryptionType"
|
|
|
+ :placeholder="
|
|
|
+ $t('applicationManagement.modal.keys.encryptionType')
|
|
|
+ "
|
|
|
disabled
|
|
|
- placeholder="请输入加密类型"
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">有效天数</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.keys.validDays')
|
|
|
+ }}</label>
|
|
|
<Input
|
|
|
v-model:value="keyData.validDays"
|
|
|
- placeholder="请输入有效天数"
|
|
|
+ :placeholder="
|
|
|
+ $t('applicationManagement.modal.keys.enterValidDays')
|
|
|
+ "
|
|
|
type="number"
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">永久有效</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.keys.isPermanent')
|
|
|
+ }}</label>
|
|
|
<Switch v-model:checked="keyData.isPermanent" class="w-[40px]" />
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">错误信息描述</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.keys.errorDescription')
|
|
|
+ }}</label>
|
|
|
<Input
|
|
|
v-model:value="keyData.errorDescription"
|
|
|
- placeholder="请输入错误信息描述"
|
|
|
+ :placeholder="
|
|
|
+ $t('applicationManagement.modal.keys.enterErrorDescription')
|
|
|
+ "
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="flex flex-col gap-2">
|
|
|
- <label class="text-sm font-medium">系统密钥</label>
|
|
|
+ <label class="text-sm font-medium">{{
|
|
|
+ $t('applicationManagement.modal.keys.systemKey')
|
|
|
+ }}</label>
|
|
|
<Input
|
|
|
v-model:value="keyData.systemKey"
|
|
|
+ :placeholder="$t('applicationManagement.modal.keys.systemKey')"
|
|
|
disabled
|
|
|
- placeholder="系统密钥"
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="mt-6 flex justify-end gap-2">
|
|
|
- <Button type="primary" @click="handleGenerateKey">生成</Button>
|
|
|
+ <Button type="primary" @click="handleGenerateKey">
|
|
|
+ {{ $t('applicationManagement.modal.keys.generate') }}
|
|
|
+ </Button>
|
|
|
<Button
|
|
|
v-if="keyData.systemKey"
|
|
|
type="primary"
|
|
|
@click="handleCopyKey"
|
|
|
>
|
|
|
- 复制
|
|
|
+ {{ $t('applicationManagement.modal.keys.copy') }}
|
|
|
</Button>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -762,53 +879,62 @@ function resetFormData() {
|
|
|
v-if="activeMenu === 'basic'"
|
|
|
class="flex justify-end gap-2 border-t pt-4"
|
|
|
>
|
|
|
- <Button @click="handleCancel">取消</Button>
|
|
|
- <Button type="primary" @click="handleSave">保存</Button>
|
|
|
+ <Button @click="handleCancel">
|
|
|
+ {{ $t('applicationManagement.modal.cancel') }}
|
|
|
+ </Button>
|
|
|
+ <Button type="primary" @click="handleSave">
|
|
|
+ {{ $t('applicationManagement.modal.save') }}
|
|
|
+ </Button>
|
|
|
</div>
|
|
|
|
|
|
<Modal
|
|
|
v-model:open="userModalOpen"
|
|
|
:footer="null"
|
|
|
- title="添加用户"
|
|
|
+ :title="$t('applicationManagement.modal.users.addUser')"
|
|
|
width="700"
|
|
|
>
|
|
|
<div class="space-y-4">
|
|
|
<Input
|
|
|
v-model:value="userSearchKeyword"
|
|
|
- placeholder="搜索用户"
|
|
|
+ :placeholder="
|
|
|
+ $t('applicationManagement.modal.users.searchPlaceholder')
|
|
|
+ "
|
|
|
@change="handleUserSearch"
|
|
|
/>
|
|
|
<Table
|
|
|
:columns="[
|
|
|
{
|
|
|
- title: '账户',
|
|
|
+ title: $t('applicationManagement.modal.users.account'),
|
|
|
dataIndex: 'account',
|
|
|
key: 'account',
|
|
|
ellipsis: true,
|
|
|
width: 120,
|
|
|
},
|
|
|
{
|
|
|
- title: '姓名',
|
|
|
+ title: $t('applicationManagement.modal.users.name'),
|
|
|
dataIndex: 'name',
|
|
|
key: 'name',
|
|
|
ellipsis: true,
|
|
|
width: 120,
|
|
|
},
|
|
|
{
|
|
|
- title: '邮箱',
|
|
|
+ title: $t('applicationManagement.modal.users.emailAddress'),
|
|
|
dataIndex: 'emailAddress',
|
|
|
key: 'emailAddress',
|
|
|
ellipsis: true,
|
|
|
width: 150,
|
|
|
},
|
|
|
{
|
|
|
- title: '电话号码',
|
|
|
+ title: $t('applicationManagement.modal.users.cellPhone'),
|
|
|
dataIndex: 'cellPhone',
|
|
|
key: 'cellPhone',
|
|
|
ellipsis: true,
|
|
|
width: 120,
|
|
|
},
|
|
|
- { title: '操作', key: 'action' },
|
|
|
+ {
|
|
|
+ title: $t('applicationManagement.modal.users.action'),
|
|
|
+ key: 'action',
|
|
|
+ },
|
|
|
]"
|
|
|
:data-source="allUsers"
|
|
|
:pagination="{
|
|
|
@@ -816,7 +942,8 @@ function resetFormData() {
|
|
|
pageSize: userPagination.pageSize,
|
|
|
total: userPagination.total,
|
|
|
showSizeChanger: true,
|
|
|
- showTotal: (total: number) => `共 ${total} 条`,
|
|
|
+ showTotal: (total: number) =>
|
|
|
+ $t('applicationManagement.modal.users.total', { total }),
|
|
|
}"
|
|
|
:scroll="{ y: 460 }"
|
|
|
class="user-table"
|
|
|
@@ -829,7 +956,7 @@ function resetFormData() {
|
|
|
type="primary"
|
|
|
@click="handleUserSelect(record)"
|
|
|
>
|
|
|
- 选择
|
|
|
+ {{ $t('applicationManagement.modal.users.select') }}
|
|
|
</Button>
|
|
|
</template>
|
|
|
</template>
|