【后台管理】-- 用户设置
This commit is contained in:
parent
88ac6114ba
commit
e31942371a
|
|
@ -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 })
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -0,0 +1 @@
|
|||
|
||||
|
|
@ -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>
|
||||
|
|
@ -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();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue