|
|
@@ -1,10 +1,10 @@
|
|
|
<template>
|
|
|
<div class="app-container">
|
|
|
- <el-form :model="queryParams" ref="queryFormRef" :inline="true" v-show="showSearch" label-width="80px">
|
|
|
- <el-form-item label="用戶名稱" prop="username">
|
|
|
+ <el-form :model="queryParams" ref="queryFormRef" :inline="true" v-show="showSearch" label-width="120px">
|
|
|
+ <el-form-item :label="t('myuser.username')" prop="username">
|
|
|
<el-input
|
|
|
v-model="queryParams.username"
|
|
|
- placeholder="請輸入用戶名稱"
|
|
|
+ :placeholder="t('myuser.pleaseEnterUsername')"
|
|
|
clearable
|
|
|
@keyup.enter="handleQuery"
|
|
|
/>
|
|
|
@@ -17,10 +17,10 @@
|
|
|
<!-- @keyup.enter="handleQuery"-->
|
|
|
<!-- />-->
|
|
|
<!-- </el-form-item>-->
|
|
|
- <el-form-item label="手機號碼" prop="phone">
|
|
|
+ <el-form-item :label="t('myuser.phone')" prop="phone">
|
|
|
<el-input
|
|
|
v-model="queryParams.phone"
|
|
|
- placeholder="請輸入手機號碼"
|
|
|
+ :placeholder="t('myuser.pleaseEnterPhone')"
|
|
|
clearable
|
|
|
@keyup.enter="handleQuery"
|
|
|
/>
|
|
|
@@ -56,8 +56,8 @@
|
|
|
<!-- />-->
|
|
|
<!-- </el-form-item>-->
|
|
|
<el-form-item>
|
|
|
- <el-button type="primary" icon="Search" @click="handleQuery">搜尋</el-button>
|
|
|
- <el-button icon="Refresh" @click="resetQuery">重設</el-button>
|
|
|
+ <el-button type="primary" icon="Search" @click="handleQuery">{{ t('common.search') }}</el-button>
|
|
|
+ <el-button icon="Refresh" @click="resetQuery">{{ t('common.reset') }}</el-button>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
|
|
|
@@ -105,52 +105,52 @@
|
|
|
|
|
|
<el-table v-loading="loading" :data="loanuserList" @selection-change="handleSelectionChange">
|
|
|
<el-table-column type="selection" width="50" align="center" />
|
|
|
- <el-table-column label="使用者ID" align="center" prop="loanUserId" />
|
|
|
- <el-table-column label="使用者名稱" align="center" prop="username" :show-overflow-tooltip="true" />
|
|
|
- <el-table-column label="使用者暱稱" align="center" prop="nickname" :show-overflow-tooltip="true" />
|
|
|
- <el-table-column label="頭像" align="center" prop="avatar" width="100">
|
|
|
+ <el-table-column :label="t('myuser.userId')" align="center" prop="loanUserId" />
|
|
|
+ <el-table-column :label="t('myuser.userName')" align="center" prop="username" :show-overflow-tooltip="true" />
|
|
|
+ <el-table-column :label="t('myuser.nickname')" align="center" prop="nickname" :show-overflow-tooltip="true" />
|
|
|
+ <el-table-column :label="t('myuser.avatar')" align="center" prop="avatar" width="100">
|
|
|
<template #default="{ row }">
|
|
|
<image-preview :src="getImageUrl(row.avatar)" :width="40" :height="40"/>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="手機號碼" align="center" prop="phone" width="120" />
|
|
|
- <el-table-column label="通訊錄上傳狀態" align="center" prop="upContact">
|
|
|
+ <el-table-column :label="t('myuser.phone')" align="center" prop="phone" width="120" />
|
|
|
+ <el-table-column :label="t('myuser.contactUploadStatus')" align="center" prop="upContact">
|
|
|
<template #default="{ row }">
|
|
|
<span>{{ upText(row.upContact) }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="簡訊上傳狀態" align="center" prop="upSms">
|
|
|
+ <el-table-column :label="t('myuser.smsUploadStatus')" align="center" prop="upSms">
|
|
|
<template #default="{ row }">
|
|
|
<span>{{ upText(row.upSms) }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="通話記錄上傳狀態" align="center" prop="upCall">
|
|
|
+ <el-table-column :label="t('myuser.callUploadStatus')" align="center" prop="upCall">
|
|
|
<template #default="{ row }">
|
|
|
<span>{{ upText(row.upCall) }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="用户定位上傳狀態" align="center" prop="upPosition">
|
|
|
+ <el-table-column :label="t('myuser.positionUploadStatus')" align="center" prop="upPosition">
|
|
|
<template #default="{ row }">
|
|
|
<span>{{ upText(row.upPosition) }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="用户圖片上傳狀態" align="center" prop="upImage">
|
|
|
+ <el-table-column :label="t('myuser.imageUploadStatus')" align="center" prop="upImage">
|
|
|
<template #default="{ row }">
|
|
|
<span>{{ upText(row.upImage) }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="代理" align="center" prop="isAgent">
|
|
|
+ <el-table-column :label="t('myuser.agent')" align="center" prop="isAgent">
|
|
|
<template #default="{ row }">
|
|
|
- <span>{{ row.isAgent ? '是' : '否' }}</span>
|
|
|
+ <span>{{ row.isAgent ? t('myuser.yes') : t('myuser.no') }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="所属代理ID" align="center" prop="agentId" />
|
|
|
- <el-table-column label="狀態" align="center" prop="status">
|
|
|
+ <el-table-column :label="t('myuser.agentId')" align="center" prop="agentId" />
|
|
|
+ <el-table-column :label="t('myuser.status')" align="center" prop="status">
|
|
|
<template #default="{ row }">
|
|
|
<dict-tag :options="sys_normal_disable" :value="row.status"/>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="建立時間" align="center" prop="createTime" width="160">
|
|
|
+ <el-table-column :label="t('myuser.createTime')" align="center" prop="createTime" width="160">
|
|
|
<template #default="{ row }">
|
|
|
<span>{{ proxy.parseTime(row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
|
|
</template>
|
|
|
@@ -160,9 +160,9 @@
|
|
|
<!-- <span>{{ parseTime(row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>-->
|
|
|
<!-- </template>-->
|
|
|
<!-- </el-table-column>-->
|
|
|
- <el-table-column label="操作" align="center" width="140" class-name="small-padding fixed-width">
|
|
|
+ <el-table-column :label="t('myuser.operation')" align="center" width="140" class-name="small-padding fixed-width">
|
|
|
<template #default="{ row }">
|
|
|
- <el-tooltip content="查看" placement="top">
|
|
|
+ <el-tooltip :content="t('myuser.view')" placement="top">
|
|
|
<el-button link type="primary" icon="View" @click.stop="handleView(row)"></el-button>
|
|
|
</el-tooltip>
|
|
|
</template>
|
|
|
@@ -179,45 +179,45 @@
|
|
|
|
|
|
<!-- 新增或修改会员对话框 -->
|
|
|
<el-dialog :title="title" v-model="open" width="600px" append-to-body>
|
|
|
- <el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
|
|
|
- <el-form-item label="用户名称" prop="username">
|
|
|
- <el-input v-model="form.username" :disabled="isUpdate || isView" placeholder="请输入用户名称" />
|
|
|
+ <el-form ref="formRef" :model="form" :rules="rules" label-width="140px">
|
|
|
+ <el-form-item :label="t('myuser.userInfo')" prop="username">
|
|
|
+ <el-input v-model="form.username" :disabled="isUpdate || isView" :placeholder="t('myuser.pleaseEnterUserInfo')" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="用户昵称" prop="nickname">
|
|
|
- <el-input v-model="form.nickname" :disabled="isView" placeholder="请输入用户昵称" />
|
|
|
+ <el-form-item :label="t('myuser.userNickname')" prop="nickname">
|
|
|
+ <el-input v-model="form.nickname" :disabled="isView" :placeholder="t('myuser.pleaseEnterUserNickname')" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="頭像" prop="avatar">
|
|
|
+ <el-form-item :label="t('myuser.avatar')" prop="avatar">
|
|
|
<image-preview :src="getImageUrl(form.avatar)" :limit="1" :width="80" :height="80" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="手机号码" prop="phone">
|
|
|
- <el-input v-model="form.phone" :disabled="isView" placeholder="请输入手机号码" />
|
|
|
+ <el-form-item :label="t('myuser.phoneNumber')" prop="phone">
|
|
|
+ <el-input v-model="form.phone" :disabled="isView" :placeholder="t('myuser.pleaseEnterPhoneNumber')" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="代理" prop="isAgent">
|
|
|
+ <el-form-item :label="t('myuser.agent')" prop="isAgent">
|
|
|
<el-radio-group v-model="form.isAgent" :disabled="isView">
|
|
|
<el-radio
|
|
|
key="true"
|
|
|
:label="true"
|
|
|
- >是</el-radio>
|
|
|
+ >{{ t('myuser.yes') }}</el-radio>
|
|
|
<el-radio
|
|
|
key="false"
|
|
|
:label="false"
|
|
|
- >否</el-radio>
|
|
|
+ >{{ t('myuser.no') }}</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="状态" prop="status">
|
|
|
+ <el-form-item :label="t('myuser.status')" prop="status">
|
|
|
<el-radio-group v-model="form.status" :disabled="isView">
|
|
|
<el-radio
|
|
|
- v-for="dict in sys_normal_disable"
|
|
|
+ v-for="dict in statusOptions"
|
|
|
:key="dict.value"
|
|
|
:label="parseInt(dict.value)"
|
|
|
- >{{dict.label}}</el-radio>
|
|
|
+ >{{ dict.label }}</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
<template #footer>
|
|
|
<div class="dialog-footer">
|
|
|
<!-- <el-button type="primary" :disabled="isView" @click="submitForm">确 定</el-button>-->
|
|
|
- <el-button @click="cancel">取 消</el-button>
|
|
|
+ <el-button @click="cancel">{{ t('common.cancel') }}</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
@@ -225,14 +225,33 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup name="Loanuser">
|
|
|
-import { ref, reactive, getCurrentInstance, onMounted, nextTick } from 'vue'
|
|
|
+import { ref, reactive, computed, getCurrentInstance, onMounted, nextTick } from 'vue'
|
|
|
import { getMyAgentMember } from "@/api/system/myuser.js"
|
|
|
import { ElMessageBox, ElMessage } from 'element-plus'
|
|
|
import { isExternal } from '@/utils/validate'
|
|
|
+import { useI18n } from '@/composables/useI18n'
|
|
|
+
|
|
|
+const { t } = useI18n()
|
|
|
|
|
|
const { proxy } = getCurrentInstance()
|
|
|
const { sys_show_hide, sys_normal_disable } = proxy.useDict("sys_show_hide", "sys_normal_disable")
|
|
|
|
|
|
+// 状态选项(国际化)
|
|
|
+const statusOptions = computed(() => {
|
|
|
+ if (!sys_normal_disable.value || !Array.isArray(sys_normal_disable.value)) {
|
|
|
+ return []
|
|
|
+ }
|
|
|
+ return sys_normal_disable.value.map(dict => {
|
|
|
+ // 根据字典值返回对应的翻译
|
|
|
+ if (dict.value === '0' || dict.value === 0) {
|
|
|
+ return { ...dict, label: t('myuser.statusNormal') }
|
|
|
+ } else if (dict.value === '1' || dict.value === 1) {
|
|
|
+ return { ...dict, label: t('myuser.statusDisable') }
|
|
|
+ }
|
|
|
+ return dict
|
|
|
+ })
|
|
|
+})
|
|
|
+
|
|
|
// 獲取文件路徑前綴
|
|
|
const filePath = import.meta.env.VITE_APP_FILE_PATH || ''
|
|
|
|
|
|
@@ -282,27 +301,27 @@ const queryParams = reactive({
|
|
|
const form = ref({})
|
|
|
|
|
|
// 表单校验
|
|
|
-const rules = reactive({
|
|
|
+const rules = computed(() => ({
|
|
|
username: [
|
|
|
- { required: true, message: "使用者名稱不能為空", trigger: "blur" }
|
|
|
+ { required: true, message: t('myuser.usernameRequired'), trigger: "blur" }
|
|
|
],
|
|
|
nickname: [
|
|
|
- { required: true, message: "使用者暱稱不能為空", trigger: "blur" }
|
|
|
+ { required: true, message: t('myuser.nicknameRequired'), trigger: "blur" }
|
|
|
],
|
|
|
password: [
|
|
|
- { required: true, message: "密碼不能為空", trigger: "blur" }
|
|
|
+ { required: true, message: t('myuser.passwordRequired'), trigger: "blur" }
|
|
|
],
|
|
|
phone: [
|
|
|
- { required: true, message: "手機號碼不能為空", trigger: "blur" }
|
|
|
+ { required: true, message: t('myuser.phoneRequired'), trigger: "blur" }
|
|
|
],
|
|
|
status: [
|
|
|
- { required: true, message: "狀態不能為空", trigger: "change" }
|
|
|
+ { required: true, message: t('myuser.statusRequired'), trigger: "change" }
|
|
|
],
|
|
|
isAgent: [
|
|
|
- { required: true, message: "代理不能為空", trigger: "change" }
|
|
|
+ { required: true, message: t('myuser.agentRequired'), trigger: "change" }
|
|
|
],
|
|
|
- adminPassword: [{ required: true, message: "管理員密碼不能為空", trigger: "blur" }],
|
|
|
-})
|
|
|
+ adminPassword: [{ required: true, message: t('myuser.adminPasswordRequired'), trigger: "blur" }],
|
|
|
+}))
|
|
|
|
|
|
// 获取ref引用
|
|
|
const queryFormRef = ref()
|
|
|
@@ -339,9 +358,9 @@ const getList = () => {
|
|
|
const upText = (type) => {
|
|
|
switch (type) {
|
|
|
case true:
|
|
|
- return '已上傳'
|
|
|
+ return t('myuser.uploaded')
|
|
|
case false:
|
|
|
- return '拒絕'
|
|
|
+ return t('myuser.rejected')
|
|
|
default:
|
|
|
return type
|
|
|
}
|
|
|
@@ -349,15 +368,15 @@ const upText = (type) => {
|
|
|
|
|
|
/** 重设密码按钮操作 */
|
|
|
const handleResetPwd = (row) => {
|
|
|
- proxy.$prompt('請輸入"' + row.username + '"的新密碼', "提示", {
|
|
|
- confirmButtonText: "確定",
|
|
|
- cancelButtonText: "取消",
|
|
|
+ proxy.$prompt(t('myuser.resetPasswordPrompt', { username: row.username }), t('login.tip'), {
|
|
|
+ confirmButtonText: t('common.confirm'),
|
|
|
+ cancelButtonText: t('common.cancel'),
|
|
|
closeOnClickModal: false,
|
|
|
inputPattern: /^.{5,20}$/,
|
|
|
- inputErrorMessage: "使用者密碼長度必須介於 5 和 20 之間",
|
|
|
+ inputErrorMessage: t('myuser.passwordLengthError'),
|
|
|
inputValidator: (value) => {
|
|
|
if (/<|>|"|'|\||\\/.test(value)) {
|
|
|
- return "不能包含非法字元:< > \" ' \\\ |"
|
|
|
+ return t('myuser.invalidChars')
|
|
|
}
|
|
|
},
|
|
|
}).then(({ value }) => {
|
|
|
@@ -420,7 +439,7 @@ const handleAdd = () => {
|
|
|
open.value = true
|
|
|
isUpdate.value = false
|
|
|
isView.value = false
|
|
|
- title.value = "新增會員管理"
|
|
|
+ title.value = t('myuser.addMember')
|
|
|
nextTick(() => {
|
|
|
if (formRef.value) formRef.value.clearValidate && formRef.value.clearValidate()
|
|
|
})
|
|
|
@@ -435,7 +454,7 @@ const handleUpdate = (row) => {
|
|
|
open.value = true
|
|
|
isUpdate.value = true
|
|
|
isView.value = false
|
|
|
- title.value = "修改會員管理"
|
|
|
+ title.value = t('myuser.editMember')
|
|
|
nextTick(() => {
|
|
|
if (formRef.value) formRef.value.clearValidate && formRef.value.clearValidate()
|
|
|
})
|
|
|
@@ -448,7 +467,7 @@ const handleView = (row) => {
|
|
|
isUpdate.value = false
|
|
|
isView.value = true
|
|
|
open.value = true
|
|
|
- title.value = "查看會員管理"
|
|
|
+ title.value = t('myuser.viewMember')
|
|
|
nextTick(() => {
|
|
|
if (formRef.value) formRef.value.clearValidate && formRef.value.clearValidate()
|
|
|
})
|
|
|
@@ -464,11 +483,11 @@ const handleUpdatePasswrod = (row) => {
|
|
|
|
|
|
const submitChangePassword = (row) => {
|
|
|
const loanUserIds = row.loanUserId || ids.value
|
|
|
- ElMessageBox.confirm('是否確認重置會員密碼為123456?').then(() => {
|
|
|
+ ElMessageBox.confirm(t('myuser.resetPasswordConfirm')).then(() => {
|
|
|
// return delLoanuser(loanUserIds)
|
|
|
}).then(() => {
|
|
|
getList()
|
|
|
- ElMessage.success("重置成功")
|
|
|
+ ElMessage.success(t('myuser.resetPasswordSuccess'))
|
|
|
}).catch(() => {})
|
|
|
}
|
|
|
|
|
|
@@ -496,11 +515,11 @@ const submitForm = () => {
|
|
|
/** 删除按钮操作 */
|
|
|
const handleDelete = (row) => {
|
|
|
const loanUserIds = row.loanUserId || ids.value
|
|
|
- ElMessageBox.confirm('是否確認刪除會員管理編號為"' + loanUserIds + '"的資料項?').then(() => {
|
|
|
+ ElMessageBox.confirm(t('myuser.deleteConfirm', { id: loanUserIds })).then(() => {
|
|
|
// return delLoanuser(loanUserIds)
|
|
|
}).then(() => {
|
|
|
getList()
|
|
|
- ElMessage.success("刪除成功")
|
|
|
+ ElMessage.success(t('myuser.deleteSuccess'))
|
|
|
}).catch(() => {})
|
|
|
}
|
|
|
|