Przeglądaj źródła

个人信息

ctt_dev_new
chutingting 1 rok temu
rodzic
commit
8f535ec278
18 zmienionych plików z 402 dodań i 568 usunięć
  1. +0
    -12
      src/apis/Permission.js
  2. +12
    -0
      src/apis/apiManage.js
  3. +36
    -0
      src/apis/home.js
  4. +13
    -0
      src/apis/login.js
  5. +13
    -0
      src/apis/template.js
  6. +8
    -0
      src/layout/components/AppMain.vue
  7. +17
    -90
      src/layout/index.vue
  8. +19
    -22
      src/router/index.ts
  9. +1
    -0
      src/store/modules/user.ts
  10. +7
    -0
      src/store/modules/userInfo.js
  11. +7
    -0
      src/types/components.d.ts
  12. +5
    -5
      src/utils/request.js
  13. +0
    -411
      src/views/apiManage/index copy.vue
  14. +14
    -4
      src/views/apiManage/index.vue
  15. +30
    -23
      src/views/editPass/index.vue
  16. +90
    -0
      src/views/home/index.vue
  17. +1
    -1
      src/views/login/index.vue
  18. +129
    -0
      src/views/template/index.vue

+ 0
- 12
src/apis/Permission.js Wyświetl plik

@@ -11,15 +11,3 @@ export function getMenuNavApi() {
method: 'get',
})
}

/**
* @description:用户角色
* @param
* @return:
*/
export function getUser() {
return request({
url: `/user/getUser`,
method: 'get',
})
}

+ 12
- 0
src/apis/apiManage.js Wyświetl plik

@@ -50,6 +50,18 @@ export function saveMallUserInfo(data) {
})
}

/**
* @description 修改登录账号 详情
* @param {*} data
* @returns data
*/
export function getMallUserInfo(id) {
return request({
url: `/serviceInfo/getMallUserInfo?serviceId=${id}`,
method: 'get'
})
}

/**
* @description 设置时长
* @param {*} data


+ 36
- 0
src/apis/home.js Wyświetl plik

@@ -0,0 +1,36 @@
import request from "@/utils/request.js";
/**
* @description:用户角色
* @param
* @return:
*/
export function getUser() {
return request({
url: `/user/getUser`,
method: 'get',
})
}

/**
* @description: api 剩余时长
* @param
* @return:
*/
export function current() {
return request({
url: `/serviceInfo/current`,
method: 'get',
})
}

/**
* @description: 私有化 剩余时长
* @param
* @return:
*/
export function privateDeployAdminCurrent() {
return request({
url: `/serviceInfo/privateDeployAdminCurrent`,
method: 'get',
})
}

+ 13
- 0
src/apis/login.js Wyświetl plik

@@ -17,6 +17,19 @@ export function loginApi(data) {
})
}

/**
* @description 退出登录
* @params email,password,code
* @returns data
*/
export function logoutApi(data) {
return request({
// url: `/api/user/loginByEmail`,
url: `/logout`,
method: 'get'
})
}

/**
/**
* @description:重新发送邮件


+ 13
- 0
src/apis/template.js Wyświetl plik

@@ -0,0 +1,13 @@
import request from "@/utils/request.js";

/**
* @description 获取合作商列表
* @param {*} (pageNum,pageSize)
* @returns data
*/
export function templateListApi(pageNum, pageSize) {
return request({
url: `/personMould/serviceMouldList?pageNum=${pageNum}&pageSize=${pageSize}`,
method: 'get'
})
}

+ 8
- 0
src/layout/components/AppMain.vue Wyświetl plik

@@ -1,3 +1,10 @@
<!--
* @Autor: Chutingting
* @Date: 2023-11-02 11:32:51
* @LastEditors: Chutingting
* @LastEditTime: 2023-11-08 16:06:12
* @Description:
-->
<script setup lang="ts">
import { useTagsViewStore } from "@/store/modules/tagsView";

@@ -23,6 +30,7 @@ const tagsViewStore = useTagsViewStore();
width: 100%;
/* 50= navbar 50 */
min-height: calc(100vh - 80px);
background: #fff;
// overflow: hidden;
// background-color: var(--el-bg-color-page);
// background-color: #000;


+ 17
- 90
src/layout/index.vue Wyświetl plik

@@ -17,71 +17,23 @@
background-color="#000"
text-color="#fff"
class="el-menu-vertical-demo">
<el-menu-item index="1" @click="router.push('/apiManage')">
<el-menu-item index="1" @click="router.push('/home')">
<el-icon><i-ep-House /></el-icon>
<span>首页</span>
</el-menu-item>
<el-menu-item index="2" @click="router.push('/apiManage')">
<el-icon><i-ep-link /></el-icon>
<span>API接入方管理</span>
</el-menu-item>
<el-menu-item index="2" @click="router.push('/privatization')">
<el-menu-item index="3" @click="router.push('/privatization')">
<el-icon><i-ep-edit /></el-icon>
<span>私有化客户管理</span>
</el-menu-item>
<el-menu-item index="3" @click="router.push('/editPass')">
<el-menu-item index="4" @click="router.push('/template')">
<el-icon><i-ep-edit /></el-icon>
<span>修改密码</span>
<span>模版管理</span>
</el-menu-item>
</el-menu>
<!-- 动态路由 -->
<!-- <div
v-for="item in MenuList"
:key="item.id"
class="myRouter-item"
@click="showChildrenRouter = item.name"
>
<div class="icon">
<el-icon><i-ep-edit /></el-icon>
<span>{{ item.name }}</span>
</div>
<div
v-show="showChildrenRouter == item.name"
v-for="childrens in item.children"
:key="childrens.id"
class="childrenRouter"
@click="router.push(`/${childrens.url}`)"
>
{{ childrens.name }}
</div>
</div> -->
<!-- 固定路由 -->
<!-- <div class="myRouter-item" @click="router.push('/apiManage')">
<div class="icon">
<el-icon><i-ep-edit /></el-icon>
API接入方管理
</div>
</div>
<div class="myRouter-item" @click="router.push('/model')">
<div class="icon">
<el-icon><i-ep-edit /></el-icon>
私有化客户管理
</div>
</div>
<div class="myRouter-item" @click="router.push('/model')">
<div class="icon">
<el-icon><i-ep-edit /></el-icon>
密钥查看
</div>
</div>
<div class="myRouter-item" @click="router.push('/model')">
<div class="icon">
<el-icon><i-ep-edit /></el-icon>
模板管理
</div>
</div>
<div class="myRouter-item" @click="router.push('/editPass')">
<div class="icon">
<el-icon><i-ep-edit /></el-icon>
修改密码
</div>
</div> -->
</div>
</div>
<!-- 右边显示部分 -->
@@ -99,30 +51,13 @@
<lang-select class="navItem" />
</el-tooltip>
<!-- 登录 -->
<el-dropdown>
<span class="el-dropdown-link">
我的
<el-icon class="el-icon--right">
<arrow-down />
</el-icon>
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>账户时长</el-dropdown-item>
<el-dropdown-item>密钥查看</el-dropdown-item>
<el-dropdown-item>模板管理</el-dropdown-item>
<el-dropdown-item @click="showEditPasswordDialog = true">修改密码</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>

<div class="navItem" v-if="!AccessToken" @click="router.push('login')">
<div class="navItem" v-if="!isLogin" @click="router.push('login')">
{{ $t("navbar.goLogin") }}
</div>
<!-- 注销 -->
<div
v-if="isLogin"
class="navItem"
v-if="AccessToken"
@click="logout"
style="margin-left: 10px"
>
@@ -150,8 +85,9 @@ import { useAppStore } from "@/store/modules/app";
// import { useSettingsStore } from "@/store/modules/settings";
import { useRoute, useRouter } from "vue-router";
import { useI18n } from "vue-i18n";
import { getMenuNavApi, getUser } from "@/apis/Permission.js";
import { getMenuNavApi } from "@/apis/Permission.js";
import { userInfoModules } from "@/store/modules/userInfo";
import { logoutApi } from '@/apis/login.js'

const userInfoPinia = userInfoModules();
const route = useRoute();
@@ -174,8 +110,10 @@ function logout() {
confirmButtonText: confirm,
cancelButtonText: cancel,
}).then(() => {
userInfoPinia.loginOut();
router.push(`/login`);
logoutApi().then(res => {
userInfoPinia.loginOut();
router.push(`/login`);
})
localStorage.removeItem("AccessToken");
});
}
@@ -213,7 +151,6 @@ function handleOutsideClick() {

onMounted(() => {
getMenuNavFunc();
isAdminFn()
});
//#region 联系我们弹窗
const showTalkUsDialog = ref(false);
@@ -239,18 +176,8 @@ const showChildrenRouter = ref("");

//#endregion ------------------------------------

// 修改密码
const showEditPasswordDialog = ref(false);
const updateShowEditPassDialog = () => {
showEditPasswordDialog.value = false
}
const isLogin = ref(false);

const isAdmin = ref('');
function isAdminFn() {
getUser().then(res => {
isAdmin.value = res.data.isAdmin // isAdmin=1,为管理人员(邃芒后台) , isAdmin=0,为API接入方登录后台
})
}

</script>



+ 19
- 22
src/router/index.ts Wyświetl plik

@@ -154,28 +154,21 @@ export const constantRoutes: RouteRecordRaw[] = [
{
path: "/",
component: Layout,
redirect: "/editPass",
redirect: "/home",
children: [
{
path: "editPass",
component: () => import("@/views/editPass/index.vue"),
name: "editPass",
path: "/home",
component: () => import("@/views/home/index.vue"),
name: "home",
meta: {
title: "editPass",
icon: "homepage",
title: "home",
icon: "home",
affix: true,
name: "ruleListMangage.title",
},
},
],
},
{
path: "/",
component: Layout,
redirect: "/apiManage",
children: [
{
path: "apiManage",
path: "/apiManage",
component: () => import("@/views/apiManage/index.vue"),
name: "apiManage",
meta: {
@@ -185,15 +178,8 @@ export const constantRoutes: RouteRecordRaw[] = [
name: "ruleListMangage.title",
},
},
],
},
{
path: "/",
component: Layout,
redirect: "/privatization",
children: [
{
path: "privatization",
path: "/privatization",
component: () => import("@/views/privatization/index.vue"),
name: "privatization",
meta: {
@@ -203,6 +189,17 @@ export const constantRoutes: RouteRecordRaw[] = [
name: "ruleListMangage.title",
},
},
{
path: "/template",
component: () => import("@/views/template/index.vue"),
name: "template",
meta: {
title: "template",
icon: "homepage",
affix: true,
name: "ruleListMangage.title",
},
},
],
}
];


+ 1
- 0
src/store/modules/user.ts Wyświetl plik

@@ -25,6 +25,7 @@ export const useUserStore = defineStore("user", () => {
* @returns
*/
function login(loginData: LoginData) {
debugger
return new Promise<void>((resolve, reject) => {
loginApi(loginData)
.then((response) => {


+ 7
- 0
src/store/modules/userInfo.js Wyświetl plik

@@ -1,3 +1,10 @@
/*
* @Autor: Chutingting
* @Date: 2023-11-02 11:32:51
* @LastEditors: Chutingting
* @LastEditTime: 2023-11-08 10:26:54
* @Description:
*/
import { defineStore } from "pinia";
import { store } from "@/store";
import {


+ 7
- 0
src/types/components.d.ts Wyświetl plik

@@ -14,6 +14,7 @@ declare module '@vue/runtime-core' {
EditPosition: typeof import('./../components/EditPosition.vue')['default']
'EditPosition copy': typeof import('./../components/EditPosition copy.vue')['default']
ElButton: typeof import('element-plus/es')['ElButton']
ElCard: typeof import('element-plus/es')['ElCard']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElDropdown: typeof import('element-plus/es')['ElDropdown']
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
@@ -35,11 +36,17 @@ declare module '@vue/runtime-core' {
GithubCorner: typeof import('./../components/GithubCorner/index.vue')['default']
Hamburger: typeof import('./../components/Hamburger/index.vue')['default']
IconSelect: typeof import('./../components/IconSelect/index.vue')['default']
IEpAvatar: typeof import('~icons/ep/avatar')['default']
IEpClock: typeof import('~icons/ep/clock')['default']
IEpDocument: typeof import('~icons/ep/document')['default']
IEpEdit: typeof import('~icons/ep/edit')['default']
IEpHouse: typeof import('~icons/ep/house')['default']
IEpIconMenu: typeof import('~icons/ep/icon-menu')['default']
IEpLink: typeof import('~icons/ep/link')['default']
IEpPlus: typeof import('~icons/ep/plus')['default']
IEpPointer: typeof import('~icons/ep/pointer')['default']
IEpUser: typeof import('~icons/ep/user')['default']
IEpUserFilled: typeof import('~icons/ep/user-filled')['default']
LangSelect: typeof import('./../components/LangSelect/index.vue')['default']
MultiUpload: typeof import('./../components/Upload/MultiUpload.vue')['default']
MyLoading: typeof import('./../components/myLoading.vue')['default']


+ 5
- 5
src/utils/request.js Wyświetl plik

@@ -27,11 +27,11 @@ const request = axios.create({
request.interceptors.request.use(

function (config) {
// 给所有授权的请求提供token
const AccessToken = localStorage.getItem("AccessToken")
if (AccessToken) {
config.headers.token = AccessToken
}
// // 给所有授权的请求提供token
// const AccessToken = localStorage.getItem("AccessToken")
// if (AccessToken) {
// config.headers.token = AccessToken
// }
return config
},
function (error) {


+ 0
- 411
src/views/apiManage/index copy.vue Wyświetl plik

@@ -1,411 +0,0 @@
<template>
<div class="page justify-around">
<div class="addbtn">
<el-button type="primary" @click="dialogVisible = true"><el-icon><i-ep-plus /></el-icon>新增</el-button>
</div>

<el-table
:data="tableData"
style="width: 100%; height: 90%"
size="large"
border
>
<el-table-column
prop="name"
:label="$t('businessMangage.name')"
align="center"
/>

<el-table-column
prop="address"
:label="$t('businessMangage.address')"
align="center"
/>

<el-table-column
prop="status"
:label="$t('businessMangage.status')"
align="center"
>
<template #default="scope">
<span
:style="1 * scope.row.status ? 'color: #ff0000' : 'color: #36db43'"
>{{ getStatus(scope.row.status) }}</span
>
</template>
</el-table-column>

<el-table-column
prop="code"
:label="$t('businessMangage.code')"
width="200"
align="center"
/>

<el-table-column
prop="createTime"
:label="$t('businessMangage.createTime')"
width="200"
align="center"
>
<template #default="scope">
{{ getDate(scope.row.createTime) }}
</template>
</el-table-column>

<el-table-column
fixed="right"
:label="$t('keyMangage.operations')"
width="200"
align="center"
>
<template #default="scope">
<el-button
link
type="primary"
size="small"
@click="showDetail(scope.row.id)"
>查看密钥</el-button
>
<el-button
link
type="primary"
size="small"
@click="showDetail(scope.row.id)"
>充值时长</el-button>
<el-button
link
type="primary"
size="small"
@click="showDetail(scope.row.id)"
>已关联模版</el-button>
<el-button
link
type="primary"
size="small"
@click="showDetail(scope.row.id)"
>关联模版</el-button>
</template>
</el-table-column>
</el-table>

<el-dialog
v-model="dialogVisible"
:title="$t('businessMangage.addNew')"
width="35%"
:before-close="handleClose"
>
<div class="formData">
<el-form
ref="ruleForm"
label-position="left"
label-width="120px"
:model="formData"
:rules="rules"
>
<el-form-item :label="'用户名' + ':'" prop="username">
<el-input
v-model="formData.username"
:placeholder="$t('businessMangage.nameInputText')"
/>
</el-form-item>

<el-form-item
:label="'姓名' + ':'"
prop="name"
>
<el-input
v-model="formData.name"
:placeholder="$t('businessMangage.addressInputText')"
/>
</el-form-item>

<el-form-item :label="'密码' + ':'" prop="password">
<el-input
v-model="formData.password"
:placeholder="$t('businessMangage.codeInputText')"
/>
</el-form-item>

<el-form-item
:label="'手机号' + ':'"
prop="phone"
>
<el-input
v-model="formData.phone"
:placeholder="$t('businessMangage.codeInputText')"
/>
</el-form-item>
</el-form>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">{{
$t("businessMangage.cancel")
}}</el-button>
<el-button type="primary" @click="addNew(ruleForm)">
{{ $t("businessMangage.confirm") }}
</el-button>
</span>
</template>
</el-dialog>

<!-- 设置时长 -->
<!-- <el-dialog
v-model="dialogVisible"
:title="$t('businessMangage.addNew')"
width="35%"
:before-close="handleClose"
>
<div class="formData">
<el-form
ref="ruleForm"
label-position="left"
label-width="120px"
:model="formDataTime"
:rules="rulesTime"
>
<el-form-item :label="'时长' + ':'" prop="times">
<el-input v-model="formData.times" placeholder="请输入时长">
<template #append>秒</template>
</el-input>
</el-form-item>
</el-form>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">{{
$t("businessMangage.cancel")
}}</el-button>
<el-button type="primary" @click="addNew(ruleForm)">
{{ $t("businessMangage.confirm") }}
</el-button>
</span>
</template>
</el-dialog> -->

<div class="pagination">
<el-pagination
v-model:current-page="pageNum"
v-model:page-size="pageSize"
:page-sizes="[10, 50, 100]"
:small="false"
:disabled="false"
:background="true"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</div>
</template>

<!-- videoType==1为竖,==2为横 -->
<script setup>
//#region 导入
import { linkEmits } from "element-plus";
import { getCurrentInstance } from "vue";

import { apiManageListApi, addApiManage } from "@/apis/apiManage.js";

import { useI18n } from "vue-i18n";

import dayjs from "dayjs";

import { useRoute, useRouter } from "vue-router";

const route = useRoute();
const router = useRouter();
const { locale } = useI18n();
const lanChange = ref(locale);

const tableData = ref([]);

const dialogVisible = ref(false);

const showDetail = (id) => {
router.push({
path: "/businessCheck",
query: {
id,
},
});
};

const pageNum = ref(1);
const pageSize = ref(10);
const total = ref(0);

const getStatus = (val) => {
return val * 1 ? "锁定" : "正常";
};

const getDate = (val) => {
return dayjs(val).format("YYYY-MM-DD");
};

const handleSizeChange = (val) => {
pageSize.value = val;
getApiManageListFunc(pageNum.value, pageSize.value);
};

const handleCurrentChange = (val) => {
pageNum.value = val;
getApiManageListFunc(pageNum.value, pageSize.value);
};

const getApiManageListFunc = async (PageNum, PageSize) => {
try {
const res = await apiManageListApi(PageNum, PageSize);
console.log(res, "res");
tableData.value = res.data.list;
total.value = res.data.total * 1;
} catch (error) {
console.log(error, "err");
}
};

const formData = ref({
id: "",
username: "",
name: "",
password: "",
phone: ""
});

const rules = {
username: [
{
required: true,
message: "Please input username",
trigger: "blur",
},
],
name: [
{
required: true,
message: "Please input name",
trigger: "blur",
},
],
password: [
{
required: true,
message: "Please input code",
trigger: "blur",
},
],
phone: [
{
required: true,
message: "Please select access methods",
trigger: "blur",
},
],
};

const accessMethods = ref([
{
label: "api接入",
value: 1,
},
{
label: "私有化接入",
value: 2,
},
]);

const handleClose = () => {
dialogVisible.value = false;
setTimeout(() => {
formData.value = {
id: "",
username: "",
name: "",
password: "",
phone: ""
};
}, 500);
};

const ruleForm = ref();

const addNew = async (refForm) => {
if (!refForm) return;
await refForm.validate(async (valid, fields) => {
if (valid) {
const data = formData.value;
try {
const res = await addApiManage(data);
console.log(res, "res");
if (res.code == 200) {
ElMessage.success("添加成功!");
dialogVisible.value = false;
}
getApiManageListFunc(1, 10);
pageNum.value = 1;
pageSize.value = 10;
} catch (error) {
console.log(error, "err");
ElMessage.error(error.message);
}
} else {
ElMessage.error("请完善信息!");
}
});
};

// 设置时长

const formDataTime = ref({
times: ""
});

const rulesTime = {
times: [
{
required: true,
message: "Please input times",
trigger: "blur",
},
]
};

onMounted(() => {
getApiManageListFunc(1, 10);
});
</script>

<style lang="scss" scoped>
.page {
height: calc(100vh - 80px);
// height: calc(100vh - 80px);
background-color: #ffffff;
border-radius: 30px 0 0 0;
overflow: hidden;
padding: 10vh;
.addbtn {
margin-bottom: 2vh;
text-align: right;
}
.formData {
padding: 5vh 3vh;
}

.pagination {
position: fixed;
left: 55%;
bottom: 8vh;
transform: translateX(-50%);
border-radius: 5px;
padding: 10px 20px;
z-index: 99;
transition: all 0.3s;
cursor: pointer;
&:hover {
background-color: #b8b8b873;
}
}
}
</style>

+ 14
- 4
src/views/apiManage/index.vue Wyświetl plik

@@ -198,7 +198,7 @@
import { linkEmits } from "element-plus";
import { getCurrentInstance } from "vue";

import { businessListApi, addBusinessApi, setRemainingTimes, saveMallUserInfo } from '@/apis/apiManage.js'
import { businessListApi, addBusinessApi, setRemainingTimes, saveMallUserInfo, getMallUserInfo } from '@/apis/apiManage.js'

import { useI18n } from "vue-i18n";

@@ -379,11 +379,21 @@ const accountDialogVisible = ref(false);
const mallUserInfoFlag = ref(false);
const loginAccount = (item) => {
if (item.mallUserInfo) {
formData.value.name = item.name
formData.value.username = item.username
getMallUserInfo(item.id).then(res => {
if (res.code === 200) {
formData2.value = {
serviceId: item.id,
username: res.data.username,
name: res.data.name,
password: '',
phone: res.data.phone
};
}
})
} else {
formData2.value.serviceId = item.id
}
mallUserInfoFlag.value = item.mallUserInfo ? true : false
formData2.value.serviceId = item.id
accountDialogVisible.value = true
}


+ 30
- 23
src/views/editPass/index.vue Wyświetl plik

@@ -2,7 +2,7 @@
* @Autor: Chutingting
* @Date: 2023-11-05 19:03:11
* @LastEditors: Chutingting
* @LastEditTime: 2023-11-07 17:55:54
* @LastEditTime: 2023-11-08 16:45:31
* @Description: 修改密码
-->
<template>
@@ -16,9 +16,9 @@
class="editPass"
>
<el-form-item label="用户名" prop="pass">
<el-input v-model="ruleForm.username" disabled type="password" autocomplete="off" />
<el-input v-model="ruleForm.userName" disabled autocomplete="off" />
</el-form-item>
<el-form-item label="密码" prop="pass">
<el-form-item label="密码" prop="pass">
<el-input v-model="ruleForm.pass" type="password" autocomplete="off" />
</el-form-item>
<el-form-item label="确认密码" prop="checkPass">
@@ -40,6 +40,12 @@
import { reactive, ref } from 'vue'
import type { FormInstance, FormRules } from 'element-plus'
import { updatepwd } from "@/apis/editPass.js";
import { logoutApi } from '@/apis/login.js'
import { userInfoModules } from "@/store/modules/userInfo";
import { useRoute, useRouter } from "vue-router";
const userInfoPinia = userInfoModules();
const router = useRouter();
const emit = defineEmits(["close"]);

const ruleFormRef = ref<FormInstance>()

@@ -65,6 +71,7 @@ const validatePass2 = (rule: any, value: any, callback: any) => {
}

const ruleForm = reactive({
userName: localStorage.getItem("username"),
pass: '',
checkPass: ''
})
@@ -76,16 +83,23 @@ const rules = reactive<FormRules<typeof ruleForm>>({

const submitForm = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.validate((valid) => {
formEl.validate(async (valid) => {
if (valid) {
const data = ruleForm;
const data = {
userName: ruleForm.userName,
pwd: ruleForm.checkPass
};
try {
const res = updatepwd(data);
console.log(res, "res");
// if (res.code == 200) {
// ElMessage.success("修改成功!");
// handleClose(ruleFormRef.value)
// }
const res = await updatepwd(data);
if (res.code == 200) {
ElMessage.success("修改成功!");
logoutApi().then(d => {
userInfoPinia.loginOut();
router.push(`/login`);
})
localStorage.removeItem("AccessToken");
handleClose(ruleFormRef.value)
}
} catch (error) {
console.log(error, "err");
// ElMessage.error(error.message);
@@ -96,16 +110,9 @@ const submitForm = (formEl: FormInstance | undefined) => {
}
})
}

</script>
<style lang="scss" scoped>
.page {
height: calc(100vh - 80px);
// height: calc(100vh - 80px);
background-color: #ffffff;
border-radius: 30px 0 0 0;
overflow: hidden;
padding: 10vh;
const handleClose = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.resetFields()
emit("close");
}
</style>

</script>

+ 90
- 0
src/views/home/index.vue Wyświetl plik

@@ -0,0 +1,90 @@
<template>
<div class="page">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>个人信息</span>
</div>
<div>
<div style="text-align: center">
<div class="el-upload">
<img :src="Avatar" class="avatar">
<p>{{ userData.username }},欢迎您</p>
</div>
</div>
<ul class="user-info">
<li><div style="height: 100%"><el-icon><i-ep-UserFilled /></el-icon> 登录账号<div class="user-right">{{ userData.username }}</div></div></li>
<li><el-icon><i-ep-Avatar /></el-icon> 用户昵称 <div class="user-right">{{ userData.name }}</div></li>
<li><el-icon><i-ep-User /></el-icon> 当前账户时长 <div class="user-right"> {{ userData.remainingTimes }} (秒)</div></li>
<li><el-icon><i-ep-User /></el-icon> 手机号 <div class="user-right"> {{ userData.phone }}</div></li>
<li>
<el-icon><i-ep-edit /></el-icon> 安全设置
<div class="user-right">
<a @click="editDialogVisible = true">修改密码</a>
</div>
</li>
<template v-if="userData.isAdmin === '1' && !userData.localDeploy">
<li><el-icon><i-ep-User /></el-icon> 剩余时长 <div class="user-right"> {{ }}(秒)</div></li>
<li>
<el-icon><i-ep-Pointer /></el-icon> 视频制作统计
<div class="user-right">
<a>查看</a>
</div>
</li>
</template>
</ul>
</div>
</el-card>
<el-dialog v-model="editDialogVisible" title="修改密码" width="40%" :before-close="handleClose" >
<edit-pass @close="handleClose"></edit-pass>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import editPass from '../editPass/index.vue'
import { getUser, privateDeployAdminCurrent, current } from "@/apis/home.js";
const Avatar = ref('https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png')
const editDialogVisible = ref(false)
const handleClose = () => {
editDialogVisible.value = false;
};

const userData = ref({});
function getUserFn() {
getUser().then(res => {
userData.value = res.data
localStorage.setItem("username", res.data.username);
localStorage.setItem("isAdmin", res.data.isAdmin); // isAdmin=1,为管理人员(邃芒后台) , isAdmin=0,为API接入方登录后台 isAmin=1&&localDeploy=true,就是私有化部署的管理后台
if (res.data.isAdmin === 1 && res.data.localDeploy || res.data.isAdmin === 0) {
getTime()
}
})
}
async function getTime() {
let res = userData.isAdmin === 1 && userData.localDeploy ? await privateDeployAdminCurrent() : await current()
userData.value.remainingTimes = res.data.remainingTimes
}
onMounted(() => {
getUserFn()
});
</script>
<style lang="scss" scoped>
.page{
padding: 30px
}
.user-info {
padding-left: 0;
list-style: none;
li{
border-bottom: 1px solid #F0F3F4;
padding: 11px 0;
font-size: 13px;
}
.user-right {
float: right;
a{
color: #317EF3;
}
}
}
</style>

+ 1
- 1
src/views/login/index.vue Wyświetl plik

@@ -1218,7 +1218,7 @@ async function doLogin(data: any) {
// await checkInviteCode();
// userInfoPinia.getUserInfo(); //保存邮箱到pinia
ElMessage.success(msg);
router.push("/model");
router.push("/home");
})
.catch((err) => {
console.log(err, "err");


+ 129
- 0
src/views/template/index.vue Wyświetl plik

@@ -0,0 +1,129 @@
<template>
<div class="page justify-around">

<el-table
:data="tableData"
style="width: 100%; height: 90%"
size="large"
align="center"
border
>
<el-table-column
prop="title"
label="名称"
align="center"
/>

<el-table-column
prop="address"
label="图片"
align="center"
/>
<el-table-column
prop="createTime"
label="创建时间"
align="center"
>
<template #default="scope">
{{ getDate(scope.row.createTime) }}
</template>
</el-table-column>
</el-table>

<div class="pagination">
<el-pagination
v-model:current-page="pageNum"
v-model:page-size="pageSize"
:page-sizes="[10, 50, 100]"
:small="false"
:disabled="false"
:background="true"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</div>
</template>

<!-- videoType==1为竖,==2为横 -->
<script setup>
//#region 导入
import { templateListApi } from '@/apis/template.js'

import { useI18n } from "vue-i18n";

import dayjs from "dayjs";

import { useRoute, useRouter } from "vue-router";

const route = useRoute();
const router = useRouter();

const tableData = ref([]);

const pageNum = ref(1);
const pageSize = ref(10);
const total = ref(0);

const getDate = (val) => {
return dayjs(val).format("YYYY-MM-DD");
};

const handleSizeChange = (val) => {
pageSize.value = val;
getBusinessListFunc(pageNum.value, pageSize.value);
};

const handleCurrentChange = (val) => {
pageNum.value = val;
getBusinessListFunc(pageNum.value, pageSize.value);
};

const getBusinessListFunc = async (PageNum, PageSize) => {
try {
const res = await templateListApi(PageNum, PageSize);
console.log(res, "res");
tableData.value = res.data.list;
total.value = res.data.total * 1;
} catch (error) {
console.log(error, "err");
}
};
onMounted(() => {
getBusinessListFunc(1, 10);
});
</script>

<style lang="scss" scoped>
.page {
height: calc(100vh - 80px);
// height: calc(100vh - 80px);
background-color: #ffffff;
border-radius: 30px 0 0 0;
overflow: hidden;
padding: 10vh;
.addbtn {
margin-bottom: 2vh;
}
.formData {
padding: 5vh 3vh;
}

.pagination {
position: fixed;
left: 55%;
bottom: 8vh;
transform: translateX(-50%);
border-radius: 5px;
padding: 10px 20px;
z-index: 99;
transition: all 0.3s;
cursor: pointer;
&:hover {
background-color: #b8b8b873;
}
}
}
</style>

Ładowanie…
Anuluj
Zapisz