This commit is contained in:
孟帅
2024-11-27 18:44:19 +08:00
parent 6254505a7d
commit 2fd3854aeb
69 changed files with 656 additions and 245 deletions

View File

@@ -104,7 +104,8 @@ body .n-icon {
}
body .proCard {
border-radius: 4px;
border-radius: 12px;
margin-top: 12px;
.n-card__content {
padding: 16px;
@@ -119,11 +120,15 @@ body .n-modal {
border-radius: 6px;
}
.n-layout-page-header .n-card {
border-radius: 12px;
}
//body .proCardTabs{
// .n-card__content{ padding-top: 3px}
// .n-card__content:first-child{ padding-top: 3px}
//}
.n-layout-page-header {
margin: 0 -10px;
margin: 8px 0;
}

View File

@@ -63,3 +63,19 @@ export function goBackOrToPage(to: RouteLocationRaw): void {
});
}
}
// 更新hash路由get参数不刷新页面
export function pushHashRouterParameter(url, key, value) {
const urlParts = url.split('?');
let newUrl = '';
if (urlParts.length >= 2) {
const baseUrl = urlParts[0];
const queryString = urlParts[1];
const searchParams = new URLSearchParams(queryString);
searchParams.set(key, value);
newUrl = `${baseUrl}?${searchParams.toString()}`;
} else {
newUrl = `${url}?${key}=${value}`;
}
window.history.pushState({ path: newUrl }, '', newUrl);
}

View File

@@ -1,6 +1,6 @@
<template>
<div>
<n-grid cols="24 300:1 600:24" :x-gap="24">
<n-grid cols="24 300:1 600:24" :x-gap="12">
<n-grid-item span="6">
<n-card :bordered="false" size="small" class="proCard">
<n-thing

View File

@@ -1,6 +1,6 @@
<template>
<div>
<n-card title="应用入口" style="margin-bottom: 16px">
<n-card title="应用入口" class="proCard">
<n-tabs type="line" animated>
<n-tab-pane name="admin" tab="后台API">
<Form path="/admin/hgexample/index/test?name=HotGo" />

View File

@@ -3,9 +3,9 @@
<div class="n-layout-page-header">
<n-card :bordered="false" title="表格例子"> 一个树形表格例子 </n-card>
</div>
<n-grid class="mt-6" cols="1 s:1 m:1 l:4 xl:4 2xl:4" responsive="screen" :x-gap="12">
<n-grid cols="1 s:1 m:1 l:4 xl:4 2xl:4" responsive="screen" :x-gap="12">
<n-gi span="1">
<n-card :segmented="{ content: true }" :bordered="false" size="small">
<n-card :segmented="{ content: true }" :bordered="false" size="small" class="proCard">
<template #header>
<n-space>
<n-button type="info" icon-placement="left" @click="openCreateDrawer">
@@ -88,7 +88,7 @@
</n-card>
</n-gi>
<n-gi span="3">
<n-card :segmented="{ content: true }" :bordered="false" size="small">
<n-card :segmented="{ content: true }" :bordered="false" size="small" class="proCard">
<template #header>
<n-space>
<n-icon size="18">

View File

@@ -3,9 +3,9 @@
<div class="n-layout-page-header">
<n-card :bordered="false" title="省市区"> 中国省市区编码对照表 </n-card>
</div>
<n-grid class="mt-6" cols="1 s:1 m:1 l:4 xl:4 2xl:4" responsive="screen" :x-gap="12">
<n-grid cols="1 s:1 m:1 l:4 xl:4 2xl:4" responsive="screen" :x-gap="12">
<n-gi span="1">
<n-card :segmented="{ content: true }" :bordered="false" size="small">
<n-card :segmented="{ content: true }" :bordered="false" size="small" class="proCard">
<template #header>
<n-space>
<n-button type="info" icon-placement="left" @click="openCreateDrawer">
@@ -88,7 +88,7 @@
</n-card>
</n-gi>
<n-gi span="3">
<n-card :segmented="{ content: true }" :bordered="false" size="small">
<n-card :segmented="{ content: true }" :bordered="false" size="small" class="proCard">
<template #header>
<n-space>
<n-icon size="18">

View File

@@ -1,10 +1,6 @@
<template>
<div>
<div class="n-layout-page-header">
<n-card :bordered="false" title="提现管理" />
</div>
<n-card :bordered="false" class="proCard">
<n-card :bordered="false" class="proCard" title="提现管理">
<n-tabs
type="card"
class="card-tabs"

View File

@@ -4,7 +4,7 @@
<n-card :bordered="false" title="在线充值"> 余额可用于购买付费产品或商城消费 </n-card>
</div>
<n-spin :show="loading">
<n-grid class="mt-6" cols="1 s:1 m:1 l:4 xl:4 2xl:4" responsive="screen" :x-gap="12">
<n-grid cols="1 s:1 m:1 l:4 xl:4 2xl:4" responsive="screen" :x-gap="12">
<n-gi span="4">
<n-card :bordered="false" class="proCard">
<n-thing>

View File

@@ -1,9 +1,6 @@
<template>
<div>
<div class="n-layout-page-header">
<n-card :bordered="false" title="充值记录" />
</div>
<n-card :bordered="false" class="proCard">
<n-card :bordered="false" title="充值记录" class="proCard">
<n-tabs
type="card"
class="card-tabs"

View File

@@ -1,5 +1,5 @@
<template>
<div>
<div class="mt-2">
<Company v-if="userStore.isCompanyDept" />
<Tenant v-else-if="userStore.isTenantDept" />
<Merchant v-else-if="userStore.isMerchantDept" />

View File

@@ -1,6 +1,6 @@
<template>
<div>
<div class="n-layout-page-header">
<div class="mt-2">
<n-card :bordered="false" title="工作台">
<n-grid cols="2 s:1 m:1 l:2 xl:2 2xl:2" responsive="screen">
<n-gi>

View File

@@ -1,7 +1,7 @@
<template>
<div>
<n-spin :show="show" description="正在生成配置信息...">
<n-card>
<n-card class="proCard">
<n-tabs
type="card"
class="card-tabs"

View File

@@ -1,6 +1,6 @@
<template>
<div>
<n-grid cols="24 300:1 600:24" :x-gap="24">
<n-grid cols="24 300:1 600:24" :x-gap="12">
<n-grid-item span="6">
<n-card :bordered="false" class="proCard">
<n-thing
@@ -33,6 +33,7 @@
import CashSetting from './CashSetting.vue';
import ThirdBind from './ThirdBind.vue';
import { useRouter } from 'vue-router';
import {pushHashRouterParameter} from "@/utils/urlUtils";
const router = useRouter();
const type = ref(1);
@@ -81,6 +82,7 @@
function switchType(e) {
type.value = e.key;
typeTitle.value = e.name;
pushHashRouterParameter(window.location.href, 'type', e.key);
}
</script>
<style lang="less" scoped>

View File

@@ -1,9 +1,6 @@
<template>
<div>
<div class="n-layout-page-header">
<n-card :bordered="false" title="在线用户" />
</div>
<n-card :bordered="false" class="proCard">
<n-card :bordered="false" class="proCard" title="在线用户">
<BasicForm @register="register" @submit="handleSubmit" @reset="handleReset">
<template #statusSlot="{ model, field }">
<n-input v-model:value="model[field]" />

View File

@@ -5,9 +5,9 @@
<!-- 这是由系统生成的CURD表格你可以将此行注释改为表格的描述 -->
</n-card>
</div>
<n-grid class="mt-4" cols="1 s:1 m:1 l:4 xl:4 2xl:4" responsive="screen" :x-gap="12">
<n-grid cols="1 s:1 m:1 l:4 xl:4 2xl:4" responsive="screen" :x-gap="12">
<n-gi span="1">
<n-card :segmented="{ content: true }" :bordered="false" size="small">
<n-card :segmented="{ content: true }" :bordered="false" size="small" class="proCard">
<template #header>
<n-space>
<n-button type="info" icon-placement="left" @click="addTable" v-if="hasPermission(['/optionTreeDemo/edit'])">

View File

@@ -1,11 +1,6 @@
<template>
<div>
<div class="n-layout-page-header">
<n-card :bordered="false" title="部门管理">
<!-- 这是由系统生成的CURD表格你可以将此行注释改为表格的描述 -->
</n-card>
</div>
<n-card :bordered="false" class="proCard">
<n-card :bordered="false" class="proCard" title="部门管理">
<BasicForm
ref="searchFormRef"
@register="register"

View File

@@ -1,9 +1,6 @@
<template>
<div>
<div class="n-layout-page-header">
<n-card :bordered="false" title="后台用户" />
</div>
<n-card :bordered="false" class="proCard">
<n-card :bordered="false" class="proCard" title="后台用户">
<n-tabs
type="card"
class="card-tabs"

View File

@@ -6,13 +6,12 @@
</n-card>
</div>
<n-grid
:class="isModal ? '' : 'mt-4'"
cols="1 s:1 m:1 l:3 xl:3 2xl:3"
responsive="screen"
:x-gap="12"
>
<n-gi span="1">
<n-card :segmented="{ content: true }" :bordered="false" size="small">
<n-card :segmented="{ content: true }" :bordered="false" size="small" class="proCard">
<template #header>
<n-space>
<n-button type="info" icon-placement="left" @click="openCreateDrawer">
@@ -85,7 +84,7 @@
</n-card>
</n-gi>
<n-gi span="2">
<n-card :segmented="{ content: true }" :bordered="false" size="small">
<n-card :segmented="{ content: true }" :bordered="false" size="small" class="proCard">
<template #header>
<n-space>
<n-icon size="18">

View File

@@ -1,6 +1,6 @@
<template>
<div>
<n-card :bordered="false" title="角色管理">
<n-card :bordered="false" class="proCard" title="角色管理">
<n-space vertical :size="12">
<n-space>
<n-button type="primary" @click="addTable">

View File

@@ -1,6 +1,6 @@
<template>
<div>
<n-grid cols="24 300:1 600:24" :x-gap="24">
<n-grid cols="24 300:1 600:24" :x-gap="12">
<n-grid-item span="6">
<n-card :bordered="false" size="small" class="proCard">
<n-thing
@@ -34,7 +34,9 @@
</div>
</template>
<script lang="ts">
import { defineAsyncComponent, defineComponent, reactive, toRefs } from 'vue';
import { defineAsyncComponent, defineComponent, reactive, toRefs, onMounted } from 'vue';
import { useRouter } from 'vue-router';
import { pushHashRouterParameter } from '@/utils/urlUtils';
/** 异步加载的组件,用到的时候再加载组件 */
const BasicSetting = defineAsyncComponent(() => {
return import('./BasicSetting.vue');
@@ -141,6 +143,7 @@
LoginSetting,
},
setup() {
const router = useRouter();
const state = reactive({
type: 1,
typeTitle: '基本设置',
@@ -149,8 +152,26 @@
function switchType(e) {
state.type = e.key;
state.typeTitle = e.name;
pushHashRouterParameter(window.location.href, 'type', e.key);
}
function setDefaultOption() {
const key = router.currentRoute.value.query.type as unknown as number;
if (key !== undefined && key > 0) {
for (const item of typeTabList) {
if (item.key == key) {
switchType(item);
}
}
}
}
onMounted(() => {
if (router.currentRoute.value.query?.type) {
setDefaultOption();
}
});
return {
...toRefs(state),
switchType,

View File

@@ -5,9 +5,9 @@
可代替后台管理系统设置的大量枚举值和配置统一标准化管理随时修改或增加
</n-card>
</div>
<n-grid class="mt-6" cols="1 s:1 m:1 l:4 xl:4 2xl:4" responsive="screen" :x-gap="12">
<n-grid cols="1 s:1 m:1 l:4 xl:4 2xl:4" responsive="screen" :x-gap="12">
<n-gi span="1">
<n-card :segmented="{ content: true }" :bordered="false" size="small">
<n-card :segmented="{ content: true }" :bordered="false" size="small" class="proCard">
<template #header>
<n-space>
<n-button type="info" icon-placement="left" @click="openCreateDrawer">
@@ -90,7 +90,7 @@
</n-card>
</n-gi>
<n-gi span="3">
<n-card :segmented="{ content: true }" :bordered="false" size="small">
<n-card :segmented="{ content: true }" :bordered="false" size="small" class="proCard">
<template #header>
<n-space>
<n-icon size="18">

View File

@@ -92,6 +92,34 @@
return adaModalWidth(840);
});
// 提交表单
function confirmForm(e) {
e.preventDefault();
formRef.value.validate((errors) => {
if (!errors) {
formBtnLoading.value = true;
Edit(formValue.value)
.then((_res) => {
message.success('操作成功');
closeForm();
emit('reloadTable');
})
.finally(() => {
formBtnLoading.value = false;
});
} else {
message.error('请填写完整信息');
}
});
}
// 关闭表单
function closeForm() {
showModal.value = false;
loading.value = false;
}
// 打开模态框
function openModal(state: State) {
showModal.value = true;
@@ -121,33 +149,6 @@
});
}
// 提交表单
function confirmForm(e) {
e.preventDefault();
formRef.value.validate((errors) => {
if (!errors) {
formBtnLoading.value = true;
Edit(formValue.value)
.then((_res) => {
message.success('操作成功');
closeForm();
emit('reloadTable');
})
.finally(() => {
formBtnLoading.value = false;
});
} else {
message.error('请填写完整信息');
}
});
}
// 关闭表单
function closeForm() {
showModal.value = false;
loading.value = false;
}
defineExpose({
openModal,
});

View File

@@ -49,13 +49,13 @@
import { adaTableScrollX } from '@/utils/hotgo';
import Edit from './edit.vue';
const dict = useDictStore();
const dialog = useDialog();
const message = useMessage();
const { hasPermission } = usePermission();
const actionRef = ref();
const searchFormRef = ref<any>({});
const editRef = ref();
const dict = useDictStore();
const checkedIds = ref([]);
@@ -64,7 +64,7 @@
title: '操作',
key: 'action',
fixed: 'right',
render(record) {
render(record: State) {
return h(TableAction as any, {
style: 'button',
actions: [

View File

@@ -1,11 +1,9 @@
import { h, ref } from 'vue';
import { NTag } from 'naive-ui';
import { cloneDeep } from 'lodash-es';
import { FormSchema } from '@/components/Form';
import { isNullObject } from '@/utils/is';
import { defRangeShortcuts } from '@/utils/dateUtil';
import { renderOptionTag } from '@/utils';
import { useDictStore } from '@/store/modules/dict';
import type { FormRules } from 'naive-ui/es/form/src/interface';
const dict = useDictStore();
@@ -39,7 +37,7 @@ export function newState(state: State | Record<string, any> | null): State {
}
// 表单验证规则
export const rules: FormRules = {
export const rules = {
name: {
required: true,
trigger: ['blur', 'input'],
@@ -137,23 +135,8 @@ export const columns = [
key: 'status',
align: 'left',
width: -1,
render(row) {
if (isNullObject(row.status)) {
return ``;
}
return h(
NTag,
{
style: {
marginRight: '6px',
},
type: dict.getType('sys_normal_disable', row.status),
bordered: false,
},
{
default: () => dict.getLabel('sys_normal_disable', row.status),
}
);
render(row: State) {
return renderOptionTag('sys_normal_disable', row.status);
},
},
{
@@ -167,4 +150,4 @@ export const columns = [
// 加载字典数据选项
export function loadOptions() {
dict.loadOptions(['sys_normal_disable']);
}
}