Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop
This commit is contained in:
commit
d31a70d3d8
|
|
@ -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>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-card class="!border-none" shadow="never">
|
<el-card class="!border-none" shadow="never">
|
||||||
<el-alert
|
<el-alert type="warning" title="温馨提示:填写微信公众号开发配置,请前往微信公众平台申请服务号并完成认证" :closable="false" show-icon />
|
||||||
type="warning"
|
|
||||||
title="温馨提示:填写微信公众号开发配置,请前往微信公众平台申请服务号并完成认证"
|
|
||||||
:closable="false"
|
|
||||||
show-icon
|
|
||||||
/>
|
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||||
<el-card class="!border-none mt-4" shadow="never">
|
<el-card class="!border-none mt-4" shadow="never">
|
||||||
|
|
@ -78,10 +73,7 @@
|
||||||
<el-form-item label="EncodingAESKey" prop="EncodingAESKey">
|
<el-form-item label="EncodingAESKey" prop="EncodingAESKey">
|
||||||
<div>
|
<div>
|
||||||
<div class="w-80">
|
<div class="w-80">
|
||||||
<el-input
|
<el-input v-model="formData.encodingAesKey" placeholder="请输入EncodingAESKey" />
|
||||||
v-model="formData.encodingAesKey"
|
|
||||||
placeholder="请输入EncodingAESKey"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-tips">
|
<div class="form-tips">
|
||||||
消息加密密钥由43位字符组成,字符范围为A-Z,a-z,0-9
|
消息加密密钥由43位字符组成,字符范围为A-Z,a-z,0-9
|
||||||
|
|
@ -164,6 +156,13 @@ const formData = reactive({
|
||||||
qrCode: "",
|
qrCode: "",
|
||||||
appId: "",
|
appId: "",
|
||||||
appSecret: "",
|
appSecret: "",
|
||||||
|
url: "",
|
||||||
|
token: "",
|
||||||
|
encodingAesKey: "",
|
||||||
|
encryptionType: 1,
|
||||||
|
businessDomain: "",
|
||||||
|
jsDomain: "",
|
||||||
|
webDomain: ""
|
||||||
})
|
})
|
||||||
|
|
||||||
const { copy } = useClipboard()
|
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">
|
<el-card shadow="never" class="!border-none">
|
||||||
<div class="font-medium mb-7">通用设置</div>
|
<div class="font-medium mb-7">通用设置</div>
|
||||||
|
|
||||||
<el-form-item label="登录方式" prop="methods">
|
<el-form-item label="登录方式" prop="loginWay">
|
||||||
<div>
|
<div>
|
||||||
<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.methods" true-label="1" false-label="2" label="注册" />
|
<el-checkbox v-model="formData.loginWay[1]" :true-label="2" false-label="" label="注册" />
|
||||||
|
|
||||||
<div class="form-tips">系统通用登录方式,至少选择一项</div>
|
<div class="form-tips">系统通用登录方式,至少选择一项</div>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="强制绑定手机" prop="favicon" required>
|
<el-form-item label="强制绑定手机" prop="forceBindMobile">
|
||||||
<div>
|
<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">{{
|
<span class="mt-1 ml-2">{{
|
||||||
formData.isBindMobile ? "开启" : "关闭"
|
formData.forceBindMobile ? "开启" : "关闭"
|
||||||
}}</span>
|
}}</span>
|
||||||
|
|
||||||
<div class="form-tips">
|
<div class="form-tips">
|
||||||
|
|
@ -28,11 +28,11 @@
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="政策协议" prop="favicon" required>
|
<el-form-item label="政策协议" prop="openAgreement">
|
||||||
<div>
|
<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">{{
|
<span class="mt-1 ml-2">{{
|
||||||
formData.isBindMobile ? "开启" : "关闭"
|
formData.openAgreement ? "开启" : "关闭"
|
||||||
}}</span>
|
}}</span>
|
||||||
|
|
||||||
<div class="form-tips">
|
<div class="form-tips">
|
||||||
|
|
@ -45,23 +45,25 @@
|
||||||
<el-card shadow="never" class="!border-none mt-4">
|
<el-card shadow="never" class="!border-none mt-4">
|
||||||
<div class="font-medium mb-7">第三方设置</div>
|
<div class="font-medium mb-7">第三方设置</div>
|
||||||
|
|
||||||
<el-form-item label="第三方登录" prop="methods">
|
<el-form-item label="第三方登录" prop="openOtherAuth">
|
||||||
<div>
|
<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">{{
|
<span class="mt-1 ml-2">{{
|
||||||
formData.isBindMobile ? "开启" : "关闭"
|
formData.openOtherAuth ? "开启" : "关闭"
|
||||||
}}</span>
|
}}</span>
|
||||||
|
|
||||||
<div class="form-tips">登录时支持第三方登录,新用户授权即自动注册账号</div>
|
<div class="form-tips">登录时支持第三方登录,新用户授权即自动注册账号</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<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=""
|
||||||
<el-checkbox v-model="formData.methods" true-label="1" false-label="2" label="注册" />
|
label="微信登录" />
|
||||||
|
<el-checkbox v-model="formData.autoLoginAuth[1]" :true-label="2" false-label=""
|
||||||
|
label="QQ登录" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="微信开放平台" prop="favicon" required>
|
<el-form-item label="微信开放平台">
|
||||||
<div>
|
<div>
|
||||||
<a href="https://baidu.com" target="_blank">
|
<a href="https://baidu.com" target="_blank">
|
||||||
<el-button type="primary" link class="underline">前往微信开放平台</el-button>
|
<el-button type="primary" link class="underline">前往微信开放平台</el-button>
|
||||||
|
|
@ -84,34 +86,49 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<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 feedback from "@/utils/feedback";
|
||||||
import type { FormInstance } from "element-plus";
|
import type { FormInstance, FormRules } from 'element-plus'
|
||||||
const formRef = ref<FormInstance>();
|
const formRef = ref<FormInstance>();
|
||||||
|
|
||||||
// 表单数据
|
// 表单数据
|
||||||
const formData = reactive({
|
const formData = reactive<LoginSetup>({
|
||||||
methods: 1, // 登录方式
|
loginWay: [],
|
||||||
isBindMobile: 1, // 是否强制绑定手机号码
|
forceBindMobile: 0,
|
||||||
favicon: "", // 网站图标
|
openAgreement: 0,
|
||||||
logo: "", // 网站logo
|
openOtherAuth: 0,
|
||||||
backdrop: "", // 登录页广告图
|
autoLoginAuth: [1, 2]
|
||||||
});
|
});
|
||||||
|
|
||||||
// 表单验证
|
// 表单验证
|
||||||
const rules = {
|
const rules = reactive<FormRules>({
|
||||||
name: [
|
loginWay: [
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: "请输入网站名称",
|
validator: (rule: any, value: any, callback: any) => {
|
||||||
trigger: ["blur"],
|
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 getData = async () => {
|
||||||
const data = await getWebsite();
|
const data = await getLogin();
|
||||||
for (const key in formData) {
|
for (const key in formData) {
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
formData[key] = data[key];
|
formData[key] = data[key];
|
||||||
|
|
@ -120,8 +137,16 @@ const getData = async () => {
|
||||||
|
|
||||||
// 设置备案信息
|
// 设置备案信息
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
|
const loginWay = formData.loginWay.join('')
|
||||||
|
const autoLoginAuth = formData.autoLoginAuth.join('')
|
||||||
|
|
||||||
await formRef.value?.validate();
|
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("操作成功");
|
feedback.msgSuccess("操作成功");
|
||||||
getData();
|
getData();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<el-form ref="formRef" :model="formData" label-width="120px">
|
<el-form ref="formRef" :model="formData" label-width="120px">
|
||||||
<el-form-item label="用户默认头像">
|
<el-form-item label="用户默认头像">
|
||||||
<div>
|
<div>
|
||||||
<material-picker v-model="formData.default_avatar" :limit="1" />
|
<material-picker v-model="formData.defaultAvatar" :limit="1" />
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
|
|
@ -24,19 +24,18 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { getWebsite, setWebsite } from '@/api/setting/website'
|
import { getUserSetup, setUserSetup } from '@/api/setting/user'
|
||||||
import feedback from '@/utils/feedback'
|
import feedback from '@/utils/feedback'
|
||||||
import type { FormInstance } from 'element-plus'
|
import type { FormInstance } from 'element-plus'
|
||||||
const formRef = ref<FormInstance>()
|
|
||||||
|
|
||||||
// 表单数据
|
// 表单数据
|
||||||
const formData = reactive({
|
const formData = reactive({
|
||||||
default_avatar: '', // 用户默认头像
|
defaultAvatar: '', // 用户默认头像
|
||||||
})
|
})
|
||||||
|
|
||||||
// 获取用户设置信息
|
// 获取用户设置信息
|
||||||
const getData = async () => {
|
const getData = async () => {
|
||||||
const data = await getWebsite()
|
const data = await getUserSetup()
|
||||||
for (const key in formData) {
|
for (const key in formData) {
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
formData[key] = data[key]
|
formData[key] = data[key]
|
||||||
|
|
@ -45,8 +44,7 @@ const getData = async () => {
|
||||||
|
|
||||||
// 设置备案信息
|
// 设置备案信息
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
await formRef.value?.validate()
|
await setUserSetup(formData)
|
||||||
await setWebsite(formData)
|
|
||||||
feedback.msgSuccess('操作成功')
|
feedback.msgSuccess('操作成功')
|
||||||
getData()
|
getData()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue