【后台管理】-- 用户设置

This commit is contained in:
linjinyuan 2022-09-07 16:24:24 +08:00
parent 88ac6114ba
commit e31942371a
8 changed files with 180 additions and 48 deletions

View File

@ -0,0 +1,45 @@
import request from '@/utils/request'
/**
* @return { Promise }
* @description
*/
export function getUserSetup() {
return request.get({ url: '/setting/user/detail' })
}
/**
* @return { Promise }
* @param { string } defaultAvatar
* @description
*/
export function setUserSetup(params: { defaultAvatar: string }) {
return request.post({ url: '/setting/user/save', params })
}
/**
* @return { Promise }
* @description
*/
export function getLogin() {
return request.get({ url: '/setting/login/detail' })
}
export interface LoginSetup {
loginWay: number[] | any // 登录方式, 逗号隔开
forceBindMobile: number // 强制绑定手机 0/1
openAgreement: number // 是否开启协议 0/1
openOtherAuth: number // 第三方登录 0/1
autoLoginAuth: number[] | any // 第三方自动登录 逗号隔开
}
/**
* @return { Promise }
* @param { LoginSetup } LoginSetup
* @description
*/
export function setLogin(params: LoginSetup) {
return request.post({ url: '/setting/login/save', params })
}

View File

@ -1,12 +1,7 @@
<template>
<div>
<el-card class="!border-none" shadow="never">
<el-alert
type="warning"
title="温馨提示:填写微信公众号开发配置,请前往微信公众平台申请服务号并完成认证"
:closable="false"
show-icon
/>
<el-alert type="warning" title="温馨提示:填写微信公众号开发配置,请前往微信公众平台申请服务号并完成认证" :closable="false" show-icon />
</el-card>
<el-form ref="formRef" :model="formData" label-width="160px">
<el-card class="!border-none mt-4" shadow="never">
@ -78,10 +73,7 @@
<el-form-item label="EncodingAESKey" prop="EncodingAESKey">
<div>
<div class="w-80">
<el-input
v-model="formData.encodingAesKey"
placeholder="请输入EncodingAESKey"
/>
<el-input v-model="formData.encodingAesKey" placeholder="请输入EncodingAESKey" />
</div>
<div class="form-tips">
消息加密密钥由43位字符组成字符范围为A-Z,a-z,0-9
@ -164,6 +156,13 @@ const formData = reactive({
qrCode: "",
appId: "",
appSecret: "",
url: "",
token: "",
encodingAesKey: "",
encryptionType: 1,
businessDomain: "",
jsDomain: "",
webDomain: ""
})
const { copy } = useClipboard()

View File

@ -0,0 +1,27 @@
<template>
<div class="menu-oa">
<el-card class="!border-none" shadow="never">
<el-alert type="warning" title="配置微信公众号菜单,点击确认,保存菜单并发布至微信公众号" :closable="false" show-icon />
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<!-- Phone -->
<oa-phone></oa-phone>
</el-card>
<footer-btns v-perms="['channel:h5:save']">
<el-button type="primary" @click="handelSave">保存</el-button>
</footer-btns>
</div>
</template>
<script setup lang="ts">
</script>
<style lang="scss" scoped>
.menu-oa {}
</style>

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,37 @@
<template>
<!-- Phone -->
<div class="oa-phone">
<div class="oa-phone-content"></div>
<div class="oa-phone-menu">
<div class="flex items-center justify-center oa-phone-switch">
<el-icon>
<Grid />
</el-icon>
</div>
</div>
</div>
</template>
<style lang="scss" scoped>
.oa-phone {
width: 260px;
height: 460px;
border: 1px solid #E5E5EA;
&-content {
height: 420px;
border-bottom: 1px solid #E5E5EA;
}
&-menu {
height: 40px;
.oa-phone-switch {
width: 40px;
height: 100%;
border-right: 1px solid #E5E5EA;
}
}
}
</style>

View File

@ -5,20 +5,20 @@
<el-card shadow="never" class="!border-none">
<div class="font-medium mb-7">通用设置</div>
<el-form-item label="登录方式" prop="methods">
<el-form-item label="登录方式" prop="loginWay">
<div>
<el-checkbox v-model="formData.methods" true-label="1" false-label="2" label="登录" />
<el-checkbox v-model="formData.methods" true-label="1" false-label="2" label="注册" />
<el-checkbox v-model="formData.loginWay[0]" :true-label="1" false-label="" label="登录" />
<el-checkbox v-model="formData.loginWay[1]" :true-label="2" false-label="" label="注册" />
<div class="form-tips">系统通用登录方式至少选择一项</div>
</div>
</el-form-item>
<el-form-item label="强制绑定手机" prop="favicon" required>
<el-form-item label="强制绑定手机" prop="forceBindMobile">
<div>
<el-switch v-model="formData.isBindMobile" />
<el-switch v-model="formData.forceBindMobile" :active-value="1" :inactive-value="0" />
<span class="mt-1 ml-2">{{
formData.isBindMobile ? "开启" : "关闭"
formData.forceBindMobile ? "开启" : "关闭"
}}</span>
<div class="form-tips">
@ -28,11 +28,11 @@
</div>
</el-form-item>
<el-form-item label="政策协议" prop="favicon" required>
<el-form-item label="政策协议" prop="openAgreement">
<div>
<el-switch v-model="formData.isBindMobile" />
<el-switch v-model="formData.openAgreement" :active-value="1" :inactive-value="0" />
<span class="mt-1 ml-2">{{
formData.isBindMobile ? "开启" : "关闭"
formData.openAgreement ? "开启" : "关闭"
}}</span>
<div class="form-tips">
@ -45,23 +45,25 @@
<el-card shadow="never" class="!border-none mt-4">
<div class="font-medium mb-7">第三方设置</div>
<el-form-item label="第三方登录" prop="methods">
<el-form-item label="第三方登录" prop="openOtherAuth">
<div>
<el-switch v-model="formData.isBindMobile" />
<el-switch v-model="formData.openOtherAuth" :active-value="1" :inactive-value="0" />
<span class="mt-1 ml-2">{{
formData.isBindMobile ? "开启" : "关闭"
formData.openOtherAuth ? "开启" : "关闭"
}}</span>
<div class="form-tips">登录时支持第三方登录新用户授权即自动注册账号</div>
<div>
<el-checkbox v-model="formData.methods" true-label="1" false-label="2" label="登录" />
<el-checkbox v-model="formData.methods" true-label="1" false-label="2" label="注册" />
<el-checkbox v-model="formData.autoLoginAuth[0]" :true-label="1" false-label=""
label="微信登录" />
<el-checkbox v-model="formData.autoLoginAuth[1]" :true-label="2" false-label=""
label="QQ登录" />
</div>
</div>
</el-form-item>
<el-form-item label="微信开放平台" prop="favicon" required>
<el-form-item label="微信开放平台">
<div>
<a href="https://baidu.com" target="_blank">
<el-button type="primary" link class="underline">前往微信开放平台</el-button>
@ -84,34 +86,49 @@
</template>
<script lang="ts" setup>
import { getWebsite, setWebsite } from "@/api/setting/website";
import type { LoginSetup } from "@/api/setting/user";
import { getLogin, setLogin } from "@/api/setting/user";
import feedback from "@/utils/feedback";
import type { FormInstance } from "element-plus";
import type { FormInstance, FormRules } from 'element-plus'
const formRef = ref<FormInstance>();
//
const formData = reactive({
methods: 1, //
isBindMobile: 1, //
favicon: "", //
logo: "", // logo
backdrop: "", // 广
const formData = reactive<LoginSetup>({
loginWay: [],
forceBindMobile: 0,
openAgreement: 0,
openOtherAuth: 0,
autoLoginAuth: [1, 2]
});
//
const rules = {
name: [
const rules = reactive<FormRules>({
loginWay: [
{
required: true,
message: "请输入网站名称",
trigger: ["blur"],
},
validator: (rule: any, value: any, callback: any) => {
const loginWay = formData.loginWay.join('').length
if (loginWay === 0) {
callback(new Error('登录方式至少选择一项!'))
} else {
if (formData.loginWay !== '') {
if (!formRef.value) return
formRef.value.validateField('checkPass', () => null)
}
callback()
}
},
trigger: 'change'
}
],
};
forceBindMobile: [{ required: true, trigger: "blur" }],
openAgreement: [{ required: true, trigger: "blur" }],
openOtherAuth: [{ required: true, trigger: "blur" }],
});
//
const getData = async () => {
const data = await getWebsite();
const data = await getLogin();
for (const key in formData) {
//@ts-ignore
formData[key] = data[key];
@ -120,8 +137,16 @@ const getData = async () => {
//
const handleSubmit = async () => {
const loginWay = formData.loginWay.join('')
const autoLoginAuth = formData.autoLoginAuth.join('')
await formRef.value?.validate();
await setWebsite(formData);
await setLogin({
...formData,
loginWay: loginWay.length == 2 ? `${loginWay[0]},${loginWay[1]}` : loginWay,
autoLoginAuth: autoLoginAuth.length == 2 ? `${autoLoginAuth[0]},${autoLoginAuth[1]}` : autoLoginAuth,
});
feedback.msgSuccess("操作成功");
getData();
};

View File

@ -6,7 +6,7 @@
<el-form ref="formRef" :model="formData" label-width="120px">
<el-form-item label="用户默认头像">
<div>
<material-picker v-model="formData.default_avatar" :limit="1" />
<material-picker v-model="formData.defaultAvatar" :limit="1" />
</div>
</el-form-item>
<el-form-item>
@ -24,19 +24,18 @@
</template>
<script lang="ts" setup>
import { getWebsite, setWebsite } from '@/api/setting/website'
import { getUserSetup, setUserSetup } from '@/api/setting/user'
import feedback from '@/utils/feedback'
import type { FormInstance } from 'element-plus'
const formRef = ref<FormInstance>()
//
const formData = reactive({
default_avatar: '', //
defaultAvatar: '', //
})
//
const getData = async () => {
const data = await getWebsite()
const data = await getUserSetup()
for (const key in formData) {
//@ts-ignore
formData[key] = data[key]
@ -45,8 +44,7 @@ const getData = async () => {
//
const handleSubmit = async () => {
await formRef.value?.validate()
await setWebsite(formData)
await setUserSetup(formData)
feedback.msgSuccess('操作成功')
getData()
}