This commit is contained in:
X1627315083
2025-09-01 14:03:30 +08:00
parent c387a71ba8
commit 89639aaec9
49 changed files with 819 additions and 232 deletions

View File

@@ -45,11 +45,11 @@
</div>
</div>
<div class="modal_title_text">
<div>{{ title }} User</div>
<div>{{ title.label }} User</div>
</div>
<div class="allUserPoeration_center admin_page">
<div class="admin_state_item">
<span>User Name: <span>*</span></span>
<span>{{ $t('adminSeAllUser.UserName') }}: <span>*</span></span>
<input
v-model="userName"
placeholder="Please enter user name"
@@ -58,7 +58,7 @@
/>
</div>
<div class="admin_state_item">
<span>User Email: <span>*</span></span>
<span>{{ $t('adminSeAllUser.UserEmail') }}: <span>*</span></span>
<input
v-model="userEmail"
placeholder="Please enter email"
@@ -67,7 +67,7 @@
/>
</div>
<div class="admin_state_item">
<span>Password: <span>*</span></span>
<span>{{ $t('adminSeAllUser.Password') }}: <span>*</span></span>
<input
@focus="focus"
@blur="blur"
@@ -78,7 +78,7 @@
/>
</div>
<div class="admin_state_item">
<span>Maximum Credits:</span>
<span>{{ $t('adminSeAllUser.MaximumCredits') }}:</span>
<input
v-model="credits"
placeholder="Please enter credits"
@@ -88,8 +88,8 @@
</div>
</div>
<div class="allUserPoeration_btn admin_page">
<div class="admin_search_item" @click="cancelDsign">Close</div>
<div class="admin_search_item" @click="setOk">OK</div>
<div class="admin_search_item" @click="cancelDsign">{{ $t('adminSeAllUser.Close') }}</div>
<div class="admin_search_item" @click="setOk">{{ $t('adminSeAllUser.OK') }}</div>
</div>
</a-modal>
<div class="mark_loading" v-show="loadingShow">
@@ -119,7 +119,7 @@ export default defineComponent({
operationsModal: false,
operationsEdit: false,
loadingShow: false,
title: "",
title: null,
});
let operationsData = reactive({
accountId: -1,
@@ -151,8 +151,8 @@ export default defineComponent({
operations.operationsModal = true;
operations.operationsEdit = true;
operations.title = funStr;
if (funStr == "Add") operations.operationsEdit = false;
if (funStr == "Edit") {
if (funStr.value == "Add") operations.operationsEdit = false;
if (funStr.value == "Edit") {
operationsData.accountId = data.id;
operationsData.userName = data.userName;
operationsData.userEmail = data.userEmail;
@@ -195,7 +195,7 @@ export default defineComponent({
userEmail: operationsData.userEmail,
userPassword:
operationsData.password == operationsData.oldPassword
? ""
? null
: md5(operationsData.password + "abc"),
};
};
@@ -209,19 +209,18 @@ export default defineComponent({
};
let setOk = () => {
let data;
if (operations.title == "Add") {
if (operations.title?.value == "Add") {
data = setAddData();
if (!isEmail(data.userEmail)) {
message.info("The email format is incorrect");
message.info(t('adminSeAllUser.jsContent1'));
return;
}
if (
!data.userName ||
!data.userEmail ||
!data.userPassword ||
!data.creditsUsageLimit
!data.userPassword
)
return message.warning("Please check the input box marked with *");
return message.warning(t('adminSeAllUser.jsContent2'));
Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then(
(rv) => {
if (rv) {
@@ -236,7 +235,7 @@ export default defineComponent({
message.info("The email format is incorrect");
return;
}
if (!data.userName || !data.userEmail || !data.creditsUsageLimit)
if (!data.userName || !data.userEmail)
return message.warning("Please check the input box marked with *");
Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then(
(rv) => {

View File

@@ -3,7 +3,7 @@
<div class="admin_table_search">
<div class="admin_state">
<div class="admin_state_item">
<span>Create Time:</span>
<span>{{ $t('adminSeAllUser.CreateTime') }}:</span>
<a-range-picker
style="width: 230px"
class="range_picker"
@@ -45,7 +45,7 @@
/>
</div> -->
<div class="admin_state_item">
<span>User Name:</span>
<span>{{ $t('adminSeAllUser.UserName') }}:</span>
<a-select
v-model:value="ids"
mode="multiple"
@@ -74,16 +74,22 @@
</div>
<div class="admin_search">
<div class="admin_search_item" @click="searchHistoryList">
Search
{{ $t('adminSeAllUser.search') }}
</div>
<div class="admin_search_item" @click="addhHistoryList">
Add
{{ $t('adminSeAllUser.add') }}
</div>
<div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="downloadTemplate">
Download template
{{ $t('adminSeAllUser.DownloadTemplate') }}
</div>
<div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="uploadTemplate">
Upload template
{{ $t('adminSeAllUser.UploadTemplate') }}
</div>
<div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="ExportAccountData">
{{ $t('adminSeAllUser.ExportAccountData') }}
</div>
<div class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="deleteList">
{{ $t('adminSeAllUser.Delete') }}
</div>
</div>
<div class="admin_state_list">
@@ -91,19 +97,19 @@
class="admin_state_list_item"
@click="lastGeTrialList('year')"
>
Nearly a year
{{ $t('adminSeAllUser.NearlyAYear') }}
</div>
<div
class="admin_state_list_item"
@click="lastGeTrialList('month')"
>
Last month
{{ $t('adminSeAllUser.LastMonth') }}
</div>
<div
class="admin_state_list_item"
@click="lastGeTrialList('week')"
>
Last week
{{ $t('adminSeAllUser.LastWeek') }}
</div>
</div>
</div>
@@ -113,6 +119,8 @@
:loading="tableLoading"
:columns="columns"
:data-source="dataList"
:row-selection="rowSelection"
rowKey="id"
:scroll="{ y: historyTableHeight }"
@change="changePage"
:showSorterTooltip='false'
@@ -132,13 +140,13 @@
@click="setAagree(record)"
style="margin-right: 2rem;"
>
Edit
{{ $t('adminSeAllUser.Edit') }}
</div>
<div
class="operate_item"
@click="deleteAagree(record)"
>
Delete
{{ $t('adminSeAllUser.Delete') }}
</div>
<!-- <div
class="operate_item"
@@ -169,18 +177,31 @@ import { Https } from "@/tool/https";
import { Modal,message } from 'ant-design-vue';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import allUserPoerationsVue from "./addAllUser.vue";
import { useI18n } from 'vue-i18n'
export default defineComponent({
components: {allUserPoerationsVue,},
setup() {
const store:any = useStore()
const selectedRowKeys = ref([]) as any;
const onSelectChange = (changableRowKeys: string[]) => {
selectedRowKeys.value = changableRowKeys;
};
let filter: any = reactive({
dataList: [],
tableLoading: false,
allUserList: computed(()=>{
return store.state.adminPage.allUserList
}),
allCountry:[]
allCountry:[],
rowSelection:computed(() => {
return {
selectedRowKeys: unref(selectedRowKeys),
onChange: onSelectChange,
}
})
});
const {t} = useI18n()
let filterData: any = reactive({
rangePickerValue: [],
currentPage: 1,
@@ -196,37 +217,12 @@ export default defineComponent({
orderBy:'',
userName: "",
});
let state: any = ref([
{
label: "all",
value: "",
},
{
label:'visitor',
value:'0',
},
{
label:'yearly',
value:'1',
},
{
label:'monthly',
value:'2',
},
{
label:'trial',
value:'3',
},
{
label: "userInEvent",
value: "4",
},
]);
let renameData: any = ref({}); //修改名字选中的数据
const columns: any = computed(() => {
return [
{
title: "User Id",
title: t("adminSeAllUser.UserId"),
align: "center",
dataIndex: "id",
key: "id",
@@ -235,7 +231,7 @@ export default defineComponent({
sorter: true,
},
{
title: "Email",
title: t("adminSeAllUser.Email"),
align: "center",
dataIndex: "userEmail",
key: "userEmail",
@@ -243,7 +239,7 @@ export default defineComponent({
ellipsis:true
},
{
title: "User Name",
title: t("adminSeAllUser.UserName"),
align: "center",
dataIndex: "userName",
key: "userName",
@@ -258,7 +254,7 @@ export default defineComponent({
// },
},
{
title: "language",
title: t("adminSeAllUser.language"),
align: "center",
dataIndex: "language",
key: "language",
@@ -266,7 +262,7 @@ export default defineComponent({
ellipsis:true,
},
{
title: "Create Date",
title: t("adminSeAllUser.CreateDate"),
align: "center",
dataIndex: "createDate",
key: "createDate",
@@ -274,19 +270,19 @@ export default defineComponent({
sorter: true,
},
{
title: "Credits",
title: t("adminSeAllUser.Credits"),
align: "center",
// width: 150,
// minWidth: 100,
// maxWidth: 200,
// resizable: true,
dataIndex: "creditsUsageLimit",
dataIndex: "credits",
key: "credits",
width:100,
sorter: true,
},
{
title: "Credits Usage",
title: t("adminSeAllUser.CreditsUsage"),
align: "center",
dataIndex: "creditsUsage",
key: "creditsUsage",
@@ -294,7 +290,7 @@ export default defineComponent({
sorter: true,
},
{
title: "Credits Usage Limit",
title: t("adminSeAllUser.CreditsUsageLimit"),
align: "center",
dataIndex: "creditsUsageLimit",
key: "creditsUsageLimit",
@@ -302,7 +298,7 @@ export default defineComponent({
sorter: true,
},
{
title: "Operations",
title: t("adminSeAllUser.Operations"),
key: "operation",
width:120,
align: "center",
@@ -418,11 +414,11 @@ export default defineComponent({
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
};
let addhHistoryList = () => {
allUserPoerationsVue.value.init('Add','')
allUserPoerationsVue.value.init({value:'Add',label:t('adminSeAllUser.add')},'')
};
let allUserPoerationsVue = ref()
let setAagree = (data:any) =>{
allUserPoerationsVue.value.init('Edit',data)
allUserPoerationsVue.value.init({value:'Edit',label:t('adminSeAllUser.Edit')},data)
}
const downloadTemplate = ()=>{
Https.axiosGet(Https.httpUrls.subAccountImportExcelDownload,{responseType: 'blob',env:{binary:true}}).then((rv:any)=>{
@@ -436,6 +432,18 @@ export default defineComponent({
URL.revokeObjectURL(link.href);
})
}
const ExportAccountData = ()=>{
Https.axiosGet(Https.httpUrls.exportAccountsToExcel,{headers:{responseType: 'blob',},env:{binary:true,binaryType:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'}}).then((rv:any)=>{
const link = document.createElement('a');
link.href = rv.url;
link.download = 'file.xlsx'; // 设置正确的文件扩展名
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// 释放 URL 对象
URL.revokeObjectURL(link.href);
})
}
const uploadTemplate = ()=>{
const fileInput = document.createElement('input');
fileInput.type = 'file';
@@ -473,6 +481,18 @@ export default defineComponent({
});
})
}
const deleteList = async ()=>{
console.log(selectedRowKeys.value)
if(selectedRowKeys.value.length == 0)return
let boolean:any = await confirmDelete()
if(!boolean){
return
}
Https.axiosPost(Https.httpUrls.deleteSubAccount,{deleteIdList:selectedRowKeys.value})
.then((rv:any)=>{
gettrialList();
})
}
const deleteAagree = async (event:any)=>{
let boolean:any = await confirmDelete()
if(!boolean){
@@ -496,7 +516,6 @@ export default defineComponent({
return {
...toRefs(filter),
...toRefs(filterData),
state,
columns,
renameData,
changePage,
@@ -508,7 +527,9 @@ export default defineComponent({
allUserPoerationsVue,
setAagree,
downloadTemplate,
ExportAccountData,
uploadTemplate,
deleteList,
deleteAagree,
};
},
@@ -530,13 +551,17 @@ export default defineComponent({
<style lang="less" scoped>
.admin_page .admin_table_search .admin_state {
display: flex;
width: 75%;
width: 70%;
flex-wrap: wrap;
align-content: flex-start;
}
.admin_page .admin_table_search .admin_search {
display: flex;
flex-wrap: wrap;
width: 25%;
width: 30%;
> .admin_search_item{
height: 4rem;
font-size: 1.6rem;
}
}
</style>

View File

@@ -4,7 +4,7 @@
<div class="admin_state">
<div class="admin_state_item">
<span>Start Date:</span>
<span>{{ $t('adminSeDesignDetail.StartDate') }}:</span>
<a-range-picker
style="width:250px"
class="range_picker"
@@ -23,11 +23,11 @@
</a-range-picker>
</div>
<div class="admin_state_item">
<span>Start Time:</span>
<span>{{ $t('adminSeDesignDetail.StartTime') }}:</span>
<a-time-range-picker style="width:250px" class="range_picker" valueFormat="HH:mm:ss" v-model:value="rangeTimeValue" />
</div>
<div class="admin_state_item">
<span>Email:</span>
<span>{{ $t('adminSeDesignDetail.Email') }}:</span>
<input
v-model="email"
placeholder="Please enter email"
@@ -37,7 +37,7 @@
/>
</div>
<div class="admin_state_item">
<span>User Name:</span>
<span>{{ $t('adminSeDesignDetail.UserName') }}:</span>
<a-select
v-model:value="ids"
mode="multiple"
@@ -79,6 +79,7 @@
import { defineComponent, ref, createVNode, computed } from "vue";
import { useStore } from "vuex";
import { Https } from "@/tool/https";
import { useI18n } from 'vue-i18n'
export default defineComponent({
components: {
},
@@ -87,10 +88,11 @@ export default defineComponent({
let rangePickerValue: any = ref([]);
let rangeTimeValue: any = ref([]);
let renameData: any = ref({}); //修改名字选中的数据
const {t} = useI18n()
const columns: any = computed(() => {
return [
{
title: 'Email',
title: t('adminSeDesignDetail.Email'),
align: "center",
dataIndex: "userEmail",
key: "userEmail",
@@ -98,7 +100,7 @@ export default defineComponent({
fixed: "left",
},
{
title: 'User Id',
title: t('adminSeDesignDetail.UserId'),
align: "center",
ellipsis: true,
dataIndex: "accountId",
@@ -106,7 +108,7 @@ export default defineComponent({
width:100,
},
{
title: 'User Name',
title: t('adminSeDesignDetail.UserName'),
align: "center",
ellipsis: 200,
dataIndex: "userName",
@@ -121,7 +123,7 @@ export default defineComponent({
// },
},
{
title: 'Frequency',
title: t('adminSeDesignDetail.Frequency'),
align: "center",
ellipsis: true,
dataIndex: "designTimes",
@@ -129,7 +131,7 @@ export default defineComponent({
width:100,
},
{
title: 'Create Time',
title: t('adminSeDesignDetail.CreateTime'),
align: "center",
ellipsis: true,
// width: 150,
@@ -141,7 +143,7 @@ export default defineComponent({
width:200,
},
{
title: 'Credits',
title: t('adminSeDesignDetail.Credits'),
align: "center",
ellipsis: true,
// width: 150,