代码格式化

This commit is contained in:
Jason 2022-09-16 16:31:24 +08:00
parent 2dfb13a694
commit 0dfb4050bc
8 changed files with 175 additions and 228 deletions

View File

@ -10,14 +10,13 @@ export function getOaConfig() {
return request.get({ url: '/channel/oa/detail' }) return request.get({ url: '/channel/oa/detail' })
} }
export interface Menu { export interface Menu {
name: string, name: string
menuType?: number, menuType?: number
visitType?: string, visitType?: string
url?: string, url?: string
appId?: string appId?: string
pagePath?: string, pagePath?: string
subButtons: Menu[] | any subButtons: Menu[] | any
} }
@ -25,7 +24,7 @@ export interface Menu {
* @return { Promise } * @return { Promise }
* @description * @description
*/ */
export function getOaMenu() { export function getOaMenu() {
return request.get({ url: '/channel/oaMenu/detail' }) return request.get({ url: '/channel/oaMenu/detail' })
} }
@ -34,7 +33,7 @@ export interface Menu {
* @param { Menu } Menu * @param { Menu } Menu
* @description * @description
*/ */
export function setOaMenuSave(params: Menu | any) { export function setOaMenuSave(params: Menu | any) {
return request.post({ url: '/channel/oaMenu/save', params }) return request.post({ url: '/channel/oaMenu/save', params })
} }
@ -52,7 +51,7 @@ export function setOaMenuPublish(params: Menu | any) {
* @param { string } type * @param { string } type
* @description * @description
*/ */
export function getOaReplyList(params: { type: string } ) { export function getOaReplyList(params: { type: string }) {
return request.get({ url: '/channel/oaReply/list', params }) return request.get({ url: '/channel/oaReply/list', params })
} }
@ -61,7 +60,7 @@ export function setOaMenuPublish(params: Menu | any) {
* @param { number } id * @param { number } id
* @description * @description
*/ */
export function oaReplyDel(params: { id: number }) { export function oaReplyDel(params: { id: number }) {
return request.post({ url: '/channel/oaReply/del', params }) return request.post({ url: '/channel/oaReply/del', params })
} }
@ -70,26 +69,25 @@ export function setOaMenuPublish(params: Menu | any) {
* @param { number } id * @param { number } id
* @description * @description
*/ */
export function changeOaReplyStatus(params: { id: number } ) { export function changeOaReplyStatus(params: { id: number }) {
return request.post({ url: '/channel/oaReply/status', params }) return request.post({ url: '/channel/oaReply/status', params })
} }
export interface Reply { export interface Reply {
content: string; // 内容 content: string // 内容
contentType: number; // 内容类型: 1=文本 contentType: number // 内容类型: 1=文本
keyword?: string; // 关键词 keyword?: string // 关键词
matchingType?: number; // 匹配方式: [1=全匹配, 2=模糊匹配] matchingType?: number // 匹配方式: [1=全匹配, 2=模糊匹配]
name: string; // 规则名称 name: string // 规则名称
status: number; // 状态: 1=开启, 0=关闭 status: number // 状态: 1=开启, 0=关闭
type: string; // 类型: follow=关注, keyword=关键词, default=默认 type: string // 类型: follow=关注, keyword=关键词, default=默认
sort: number // 排序 sort: number // 排序
} }
/** /**
* @return { Promise } * @return { Promise }
* @description * @description
*/ */
export function oaReplyAdd(params: Reply ) { export function oaReplyAdd(params: Reply) {
return request.post({ url: '/channel/oaReply/add', params }) return request.post({ url: '/channel/oaReply/add', params })
} }
@ -97,7 +95,7 @@ export interface Reply {
* @return { Promise } * @return { Promise }
* @description * @description
*/ */
export function oaReplyEdit(params: Reply ) { export function oaReplyEdit(params: Reply) {
return request.post({ url: '/channel/oaReply/edit', params }) return request.post({ url: '/channel/oaReply/edit', params })
} }
@ -106,6 +104,6 @@ export interface Reply {
* @param { string } type * @param { string } type
* @description * @description
*/ */
export function getOaReplyDetail(params: { id: number } ) { export function getOaReplyDetail(params: { id: number }) {
return request.get({ url: '/channel/oaReply/detail', params }) return request.get({ url: '/channel/oaReply/detail', params })
} }

View File

@ -9,12 +9,12 @@ export function getSearch() {
} }
export interface List { export interface List {
name: string // 搜索关键字 name: string // 搜索关键字
sort: number // 热门搜索排序 sort: number // 热门搜索排序
} }
export interface Search { export interface Search {
isHotSearch: number // 是否开启搜索0/1 isHotSearch: number // 是否开启搜索0/1
list: List[] list: List[]
} }
/** /**
@ -25,5 +25,3 @@ export interface Search {
export function setSearch(params: Search) { export function setSearch(params: Search) {
return request.post({ url: '/setting/search/save', params }) return request.post({ url: '/setting/search/save', params })
} }

View File

@ -25,13 +25,12 @@ export function getLogin() {
return request.get({ url: '/setting/login/detail' }) return request.get({ url: '/setting/login/detail' })
} }
export interface LoginSetup { export interface LoginSetup {
loginWay: number[] | any // 登录方式, 逗号隔开 loginWay: number[] | any // 登录方式, 逗号隔开
forceBindMobile: number // 强制绑定手机 0/1 forceBindMobile: number // 强制绑定手机 0/1
openAgreement: number // 是否开启协议 0/1 openAgreement: number // 是否开启协议 0/1
openOtherAuth: number // 第三方登录 0/1 openOtherAuth: number // 第三方登录 0/1
autoLoginAuth: number[] | any // 第三方自动登录 逗号隔开 autoLoginAuth: number[] | any // 第三方自动登录 逗号隔开
} }
/** /**
* @return { Promise } * @return { Promise }
@ -41,5 +40,3 @@ export interface LoginSetup {
export function setLogin(params: LoginSetup) { export function setLogin(params: LoginSetup) {
return request.post({ url: '/setting/login/save', params }) return request.post({ url: '/setting/login/save', params })
} }

View File

@ -1,9 +1,9 @@
<script lang="ts" setup> <script lang="ts" setup>
import { useMenuOa } from "./useMenuOa"; import { useMenuOa } from './useMenuOa'
import oaMenuForm from "./oa-menu-form.vue"; import oaMenuForm from './oa-menu-form.vue'
import oaMenuFormEdit from "./oa-menu-form-edit.vue"; import oaMenuFormEdit from './oa-menu-form-edit.vue'
const menuRef = shallowRef(); const menuRef = shallowRef()
const { const {
menuList, menuList,
@ -11,8 +11,8 @@ const {
handleAddSubMenu, handleAddSubMenu,
handleEditSubMenu, handleEditSubMenu,
handleDelMenu, handleDelMenu,
handleDelSubMenu, handleDelSubMenu
} = useMenuOa(menuRef); } = useMenuOa(menuRef)
</script> </script>
<template> <template>
@ -22,9 +22,7 @@ const {
<div class="text-base oa-attr-title">菜单配置</div> <div class="text-base oa-attr-title">菜单配置</div>
<del-wrap class="w-3/4" @close="handleDelMenu(menuIndex)"> <del-wrap class="w-3/4" @close="handleDelMenu(menuIndex)">
<div <div class="flex items-center w-full p-4 mt-4 rounded bg-fill-light">
class="flex items-center w-full p-4 mt-4 rounded bg-fill-light"
>
<oa-menu-form <oa-menu-form
ref="menuRef" ref="menuRef"
modular="master" modular="master"
@ -40,57 +38,37 @@ const {
<ul> <ul>
<li <li
class="flex" class="flex"
v-for="( v-for="(subItem, subIndex) in attrItem.subButtons"
subItem, subIndex
) in attrItem.subButtons"
:key="subIndex" :key="subIndex"
style="padding: 8px" style="padding: 8px"
> >
<span class="mr-auto">{{ <span class="mr-auto">{{ subItem.name }}</span>
subItem.name
}}</span>
<!-- 编辑子菜单 --> <!-- 编辑子菜单 -->
<oa-menu-form-edit <oa-menu-form-edit
modular="edit" modular="edit"
:subItem="subItem" :subItem="subItem"
@edit=" @edit="handleEditSubMenu($event, subIndex)"
handleEditSubMenu($event, subIndex)
"
> >
<el-icon><EditPen /></el-icon> <el-icon><EditPen /></el-icon>
</oa-menu-form-edit> </oa-menu-form-edit>
<!-- 删除子菜单 --> <!-- 删除子菜单 -->
<popup <popup @confirm="handleDelSubMenu(menuIndex, subIndex)">
@confirm="
handleDelSubMenu(
menuIndex,
subIndex
)
"
>
是否删除当前子菜单 是否删除当前子菜单
<template #trigger> <template #trigger>
<el-icon class="ml-5" <el-icon class="ml-5"><Delete /></el-icon>
><Delete
/></el-icon>
</template> </template>
</popup> </popup>
</li> </li>
</ul> </ul>
<!-- 新增子菜单 --> <!-- 新增子菜单 -->
<oa-menu-form-edit <oa-menu-form-edit modular="add" @add="handleAddSubMenu">
modular="add"
@add="handleAddSubMenu"
>
<el-button <el-button
type="primary" type="primary"
link link
:disabled="attrItem.subButtons.length >= 5" :disabled="attrItem.subButtons.length >= 5"
>添加子菜单({{ >添加子菜单({{ attrItem.subButtons.length }}/5)</el-button
attrItem.subButtons.length
}}/5)</el-button
> >
</oa-menu-form-edit> </oa-menu-form-edit>
</div> </div>

View File

@ -1,52 +1,52 @@
<script lang="ts" setup> <script lang="ts" setup>
import oaMenuForm from "./oa-menu-form.vue"; import oaMenuForm from './oa-menu-form.vue'
const emit = defineEmits<{ const emit = defineEmits<{
(event: "add", value: any): void; (event: 'add', value: any): void
(event: "edit", value: any): void; (event: 'edit', value: any): void
}>(); }>()
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
modular: string; modular: string
subItem?: any; subItem?: any
}>(), }>(),
{ {
modular: "edit", modular: 'edit',
subItem: {}, subItem: {}
} }
); )
const menuFormEditRef = shallowRef(); const menuFormEditRef = shallowRef()
const menuFromPopupRef = shallowRef(); const menuFromPopupRef = shallowRef()
const form = { const form = {
name: "", name: '',
visitType: "view", visitType: 'view',
url: "", url: '',
appId: "", appId: '',
pagePath: "", pagePath: ''
}; }
watchEffect(() => { watchEffect(() => {
if (Object.keys(props.subItem).length != 0) { if (Object.keys(props.subItem).length != 0) {
for (const key in form) { for (const key in form) {
//@ts-ignore //@ts-ignore
form[key] = props.subItem[key]; form[key] = props.subItem[key]
} }
} }
}); })
const handleRules = async () => { const handleRules = async () => {
await menuFormEditRef.value.menuFormRef.validate(); await menuFormEditRef.value.menuFormRef.validate()
if (props.modular === "edit") { if (props.modular === 'edit') {
emit("edit", { ...form }); emit('edit', { ...form })
} else { } else {
emit("add", { ...form }); emit('add', { ...form })
} }
menuFromPopupRef.value.close(); menuFromPopupRef.value.close()
menuFormEditRef.value.menuFormRef.resetFields(); menuFormEditRef.value.menuFormRef.resetFields()
}; }
</script> </script>
<template> <template>

View File

@ -1,34 +1,18 @@
<template> <template>
<el-form <el-form ref="menuFormRef" :rules="rules" :model="menuForm" label-width="120px" class="pr-10">
ref="menuFormRef"
:rules="rules"
:model="menuForm"
label-width="120px"
class="pr-10"
>
<!-- 菜单名称 --> <!-- 菜单名称 -->
<el-form-item <el-form-item :label="modular === 'master' ? '主菜单名称' : '子菜单名称'" prop="name">
:label="modular === 'master' ? '主菜单名称' : '子菜单名称'"
prop="name"
>
<el-input v-model="menuForm.name" /> <el-input v-model="menuForm.name" />
</el-form-item> </el-form-item>
<!-- 菜单类型 --> <!-- 菜单类型 -->
<el-form-item <el-form-item label="主菜单类型" prop="menuType" v-if="modular === 'master'">
label="主菜单类型"
prop="menuType"
v-if="modular === 'master'"
>
<el-radio-group v-model="menuForm.menuType"> <el-radio-group v-model="menuForm.menuType">
<el-radio :label="1">不配置子菜单</el-radio> <el-radio :label="1">不配置子菜单</el-radio>
<el-radio :label="2">配置子菜单</el-radio> <el-radio :label="2">配置子菜单</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="" v-if="menuForm.menuType === 2 && modular === 'master'">
label=""
v-if="menuForm.menuType === 2 && modular === 'master'"
>
<slot></slot> <slot></slot>
</el-form-item> </el-form-item>
@ -62,62 +46,62 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { rules } from "./useMenuOa"; import { rules } from './useMenuOa'
import type { FormInstance } from "element-plus"; import type { FormInstance } from 'element-plus'
const emit = defineEmits([ const emit = defineEmits([
"update:name", 'update:name',
"update:menuType", 'update:menuType',
"update:visitType", 'update:visitType',
"update:url", 'update:url',
"update:pagePath", 'update:pagePath'
]); ])
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
modular?: string; modular?: string
name?: string; name?: string
menuType?: number; menuType?: number
visitType?: string; visitType?: string
url?: string; url?: string
appId?: string; appId?: string
pagePath?: string; pagePath?: string
}>(), }>(),
{ {
modular: "master", modular: 'master',
name: "", name: '',
menuType: 1, menuType: 1,
visitType: "view", visitType: 'view',
url: "", url: '',
appId: "", appId: '',
pagePath: "", pagePath: ''
} }
); )
const menuFormRef = shallowRef<FormInstance>(); const menuFormRef = shallowRef<FormInstance>()
// //
const menuForm = ref({ ...props }); const menuForm = ref({ ...props })
watch( watch(
() => props, () => props,
(value) => { (value) => {
menuForm.value = value; menuForm.value = value
}, },
{ immediate: true } { immediate: true }
); )
watchEffect(() => { watchEffect(() => {
if (props.modular === "master") { if (props.modular === 'master') {
emit("update:menuType", menuForm.value.menuType); emit('update:menuType', menuForm.value.menuType)
} }
emit("update:name", menuForm.value.name); emit('update:name', menuForm.value.name)
emit("update:visitType", menuForm.value.visitType); emit('update:visitType', menuForm.value.visitType)
emit("update:url", menuForm.value.url); emit('update:url', menuForm.value.url)
emit("update:appId", menuForm.value.appId); emit('update:appId', menuForm.value.appId)
emit("update:pagePath", menuForm.value.pagePath); emit('update:pagePath', menuForm.value.pagePath)
}); })
defineExpose({ defineExpose({
menuFormRef, menuFormRef
}); })
</script> </script>

View File

@ -1,12 +1,12 @@
<script lang="ts" setup> <script lang="ts" setup>
import { useMenuOa } from "./useMenuOa"; import { useMenuOa } from './useMenuOa'
import useSettingStore from "@/stores/modules/setting"; import useSettingStore from '@/stores/modules/setting'
// //
const settingStore = useSettingStore(); const settingStore = useSettingStore()
const themeColor = computed(() => settingStore.theme || "#4A5DFF"); const themeColor = computed(() => settingStore.theme || '#4A5DFF')
const { menuList, menuIndex, handleAddMenu } = useMenuOa(useMenuOa); const { menuList, menuIndex, handleAddMenu } = useMenuOa(useMenuOa)
</script> </script>
<template> <template>
@ -34,13 +34,9 @@ const { menuList, menuIndex, handleAddMenu } = useMenuOa(useMenuOa);
<!-- 二级菜单 --> <!-- 二级菜单 -->
<div <div
class="oa-phone-menu-subitem" class="oa-phone-menu-subitem"
v-show=" v-show="menuItem.subButtons.length && menuItem.menuType != 1"
menuItem.subButtons.length && menuItem.menuType != 1
"
> >
<template <template v-for="(subItem, index2) in menuItem.subButtons">
v-for="(subItem, index2) in menuItem.subButtons"
>
<div class="oa-phone-menu-subitem-title"> <div class="oa-phone-menu-subitem-title">
{{ subItem.name }} {{ subItem.name }}
</div> </div>
@ -50,10 +46,7 @@ const { menuList, menuIndex, handleAddMenu } = useMenuOa(useMenuOa);
</template> </template>
<!-- 新增菜单 --> <!-- 新增菜单 -->
<template v-if="menuList.length <= 2"> <template v-if="menuList.length <= 2">
<div <div class="flex items-center justify-center flex-1 h-full" @click="handleAddMenu">
class="flex items-center justify-center flex-1 h-full"
@click="handleAddMenu"
>
<el-icon> <el-icon>
<Plus /> <Plus />
</el-icon> </el-icon>
@ -99,7 +92,7 @@ const { menuList, menuIndex, handleAddMenu } = useMenuOa(useMenuOa);
} }
.active-menu::after { .active-menu::after {
content: ""; content: '';
width: 100%; width: 100%;
height: 41px; height: 41px;
top: -1px; top: -1px;

View File

@ -1,11 +1,11 @@
import { ref } from "vue" import { ref } from 'vue'
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
import type { FormRules } from "element-plus"; import type { FormRules } from 'element-plus'
import { setOaMenuSave, getOaMenu, setOaMenuPublish } from "@/api/channel/wx_oa" import { setOaMenuSave, getOaMenu, setOaMenuPublish } from '@/api/channel/wx_oa'
import type { Menu } from "@/api/channel/wx_oa" import type { Menu } from '@/api/channel/wx_oa'
// 菜单实例 // 菜单实例
export const menuRef = shallowRef(); export const menuRef = shallowRef()
// 菜单数据 // 菜单数据
const menuList = ref<Menu[]>([]) const menuList = ref<Menu[]>([])
const menuIndex = ref<number>(0) const menuIndex = ref<number>(0)
@ -15,56 +15,55 @@ export const rules = reactive<FormRules>({
name: [ name: [
{ {
required: true, required: true,
message: "必填项不能为空", message: '必填项不能为空',
trigger: ["blur", "change"], trigger: ['blur', 'change']
}, },
{ {
min: 1, min: 1,
max: 12, max: 12,
message: "长度限制12个字符", message: '长度限制12个字符',
trigger: ["blur", "change"], trigger: ['blur', 'change']
}, }
], ],
menuType: [ menuType: [
{ {
required: true, required: true,
message: "必填项不能为空", message: '必填项不能为空',
trigger: ["blur", "change"], trigger: ['blur', 'change']
}, }
], ],
visitType: [ visitType: [
{ {
required: true, required: true,
message: "必填项不能为空", message: '必填项不能为空',
trigger: ["blur", "change"], trigger: ['blur', 'change']
}, }
], ],
url: [ url: [
{ {
required: true, required: true,
message: "必填项不能为空", message: '必填项不能为空',
trigger: ["blur", "change"], trigger: ['blur', 'change']
}, }
], ],
appId: [ appId: [
{ {
required: true, required: true,
message: "必填项不能为空", message: '必填项不能为空',
trigger: ["blur", "change"], trigger: ['blur', 'change']
}, }
], ],
pagePath: [ pagePath: [
{ {
required: true, required: true,
message: "必填项不能为空", message: '必填项不能为空',
trigger: ["blur", "change"], trigger: ['blur', 'change']
}, }
], ]
}); })
export const useMenuOa = (ref: any) => { export const useMenuOa = (ref: any) => {
if( ref ) menuRef.value = ref if (ref) menuRef.value = ref
// 添加主菜单 // 添加主菜单
const handleAddMenu = () => { const handleAddMenu = () => {
@ -73,7 +72,7 @@ export const useMenuOa = (ref: any) => {
menuType: 1, menuType: 1,
visitType: 'view', visitType: 'view',
url: '', url: '',
appId: "", appId: '',
pagePath: '', pagePath: '',
subButtons: [] subButtons: []
}) })
@ -81,8 +80,8 @@ export const useMenuOa = (ref: any) => {
// 添加子菜单 // 添加子菜单
const handleAddSubMenu = (event?: Menu) => { const handleAddSubMenu = (event?: Menu) => {
const index = menuIndex.value; const index = menuIndex.value
if(menuList.value[index].subButtons.length>=5) { if (menuList.value[index].subButtons.length >= 5) {
feedback.msgError('已添加上限~') feedback.msgError('已添加上限~')
return return
} }
@ -91,7 +90,7 @@ export const useMenuOa = (ref: any) => {
// 编辑子菜单 // 编辑子菜单
const handleEditSubMenu = (event: Menu, subIndex: number) => { const handleEditSubMenu = (event: Menu, subIndex: number) => {
const index = menuIndex.value; const index = menuIndex.value
menuList.value[index].subButtons[subIndex] = event menuList.value[index].subButtons[subIndex] = event
} }
@ -108,7 +107,7 @@ export const useMenuOa = (ref: any) => {
// 获取菜单 // 获取菜单
const getOaMenuFunc = async () => { const getOaMenuFunc = async () => {
try { try {
menuList.value = await getOaMenu(); menuList.value = await getOaMenu()
} catch (error) { } catch (error) {
console.log('获取菜单=>', error) console.log('获取菜单=>', error)
} }
@ -116,13 +115,13 @@ export const useMenuOa = (ref: any) => {
// 保存菜单 // 保存菜单
const handleSave = async () => { const handleSave = async () => {
const refs = menuRef.value.value; const refs = menuRef.value.value
for (let i = 0; i < refs.length; i++) { for (let i = 0; i < refs.length; i++) {
try { try {
await refs[i].menuFormRef.validate() await refs[i].menuFormRef.validate()
} catch (error) { } catch (error) {
menuIndex.value = i menuIndex.value = i
feedback.msgError(`菜单${i+1}必填项不能为空~`) feedback.msgError(`菜单${i + 1}必填项不能为空~`)
return return
} }
} }
@ -132,13 +131,13 @@ export const useMenuOa = (ref: any) => {
// 保存菜单 // 保存菜单
const handlePublish = async () => { const handlePublish = async () => {
const refs = menuRef.value.value; const refs = menuRef.value.value
for (let i = 0; i < refs.length; i++) { for (let i = 0; i < refs.length; i++) {
try { try {
await refs[i].menuFormRef.validate() await refs[i].menuFormRef.validate()
} catch (error) { } catch (error) {
menuIndex.value = i menuIndex.value = i
feedback.msgError(`菜单${i+1}必填项不能为空~`) feedback.msgError(`菜单${i + 1}必填项不能为空~`)
return return
} }
} }