9 Commits

Author SHA1 Message Date
ahjung
ee8aed2f62 1.9.1 2024-04-09 16:28:28 +08:00
Ah jung
260397f3ae Merge pull request #279 from thatsgolden/patch-1
feat(BasicForm): trigger query via Enter key
2024-04-09 15:45:58 +08:00
Golden
fa983a9b64 feat(BasicForm): trigger query via Enter key
- Allow push Enter key to query the table form.
2024-03-04 13:36:55 +08:00
Ah jung
4c49e28596 Merge pull request #272 from Mevolove/main
style: 加宽基础表单,分步表单和上传图片中label的宽度
2024-02-18 13:38:49 +08:00
Mevol
9a5fe5249c style: 加宽基础表单,分步表单和上传图片中label的宽度 2024-01-16 15:19:10 +08:00
Ah jung
02235bf6fc Merge pull request #265 from NogiRuka/style/center-upload-icon-and-text-in-basicForm
style(BasicUpload): center upload icon and text in BasicForm
2023-10-25 19:31:11 +08:00
“乃木流架”
0656035857 style(BasicUpload): center upload icon and text in BasicForm 2023-10-21 23:54:14 +09:00
Ah jung
81e8222461 Merge pull request #257 from L1yp/fix-transition-hot-refresh
fix: 修复transition组件导致的白屏(重现: 热更新transition下的组件script代码切换tab即可)
2023-08-10 15:07:26 +08:00
Lyp
09411a927e fix: 修复transition组件导致的白屏(重现: 热更新transition下的组件script代码切换tab即可) 2023-08-10 14:55:16 +08:00
28 changed files with 2469 additions and 2151 deletions

View File

@@ -1,5 +1,11 @@
# CHANGELOG # CHANGELOG
## 1.9.1
- 优化 `typeSctipt` 类型定义
- 优化 `setup` 语法
- 依赖升级
## 1.9.0 ## 1.9.0
- 新增 `BasicForm` 组件,支持 `setLoading`, `setSchema` 方法 - 新增 `BasicForm` 组件,支持 `setLoading`, `setSchema` 方法

View File

@@ -1,6 +1,6 @@
{ {
"name": "naive-ui-admin", "name": "naive-ui-admin",
"version": "1.9.0", "version": "1.9.1",
"author": { "author": {
"name": "Ahjung", "name": "Ahjung",
"email": "735878602@qq.com", "email": "735878602@qq.com",
@@ -32,71 +32,71 @@
"@vicons/ionicons5": "^0.12.0", "@vicons/ionicons5": "^0.12.0",
"@vueup/vue-quill": "^1.2.0", "@vueup/vue-quill": "^1.2.0",
"@vueuse/core": "^9.13.0", "@vueuse/core": "^9.13.0",
"axios": "^1.4.0", "axios": "^1.6.8",
"blueimp-md5": "^2.19.0", "blueimp-md5": "^2.19.0",
"date-fns": "^2.30.0", "date-fns": "^2.30.0",
"echarts": "^5.4.3", "echarts": "^5.5.0",
"element-resize-detector": "^1.2.4", "element-resize-detector": "^1.2.4",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"mitt": "^3.0.1", "mitt": "^3.0.1",
"mockjs": "^1.1.0", "mockjs": "^1.1.0",
"naive-ui": "^2.34.4", "naive-ui": "^2.38.1",
"pinia": "^2.1.6", "pinia": "^2.1.7",
"qs": "^6.11.2", "qs": "^6.12.0",
"vfonts": "^0.0.3", "vfonts": "^0.0.3",
"vue": "^3.3.4", "vue": "^3.4.21",
"vue-router": "^4.2.4", "vue-router": "^4.3.0",
"vue-types": "^4.2.1" "vue-types": "^4.2.1"
}, },
"devDependencies": { "devDependencies": {
"@commitlint/cli": "^17.7.0", "@commitlint/cli": "^17.8.1",
"@commitlint/config-conventional": "^17.7.0", "@commitlint/config-conventional": "^17.8.1",
"@types/lodash": "^4.14.197", "@types/lodash": "^4.17.0",
"@types/node": "^18.17.4", "@types/node": "^18.19.31",
"@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0", "@typescript-eslint/parser": "^5.62.0",
"@vitejs/plugin-vue": "^3.2.0", "@vitejs/plugin-vue": "^3.2.0",
"@vitejs/plugin-vue-jsx": "^2.1.1", "@vitejs/plugin-vue-jsx": "^2.1.1",
"@vue/compiler-sfc": "^3.3.4", "@vue/compiler-sfc": "^3.4.21",
"@vue/eslint-config-typescript": "^11.0.3", "@vue/eslint-config-typescript": "^11.0.3",
"autoprefixer": "^10.4.14", "autoprefixer": "^10.4.19",
"commitizen": "^4.3.0", "commitizen": "^4.3.0",
"core-js": "^3.32.0", "core-js": "^3.36.1",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"dotenv": "^16.3.1", "dotenv": "^16.4.5",
"eslint": "^8.46.0", "eslint": "^8.57.0",
"eslint-config-prettier": "^8.10.0", "eslint-config-prettier": "^8.10.0",
"eslint-define-config": "1.12.0", "eslint-define-config": "1.12.0",
"eslint-plugin-jest": "^27.2.3", "eslint-plugin-jest": "^27.9.0",
"eslint-plugin-prettier": "^4.2.1", "eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-vue": "^9.17.0", "eslint-plugin-vue": "^9.24.1",
"esno": "^0.16.3", "esno": "^0.16.3",
"gh-pages": "^4.0.0", "gh-pages": "^4.0.0",
"husky": "^8.0.3", "husky": "^8.0.3",
"jest": "^29.6.2", "jest": "^29.7.0",
"less": "^4.2.0", "less": "^4.2.0",
"less-loader": "^11.1.3", "less-loader": "^11.1.4",
"lint-staged": "^13.2.3", "lint-staged": "^13.3.0",
"postcss": "^8.4.27", "postcss": "^8.4.38",
"prettier": "^2.8.8", "prettier": "^2.8.8",
"pretty-quick": "^3.1.3", "pretty-quick": "^3.3.1",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"stylelint": "^14.16.1", "stylelint": "^14.16.1",
"stylelint-config-prettier": "^9.0.5", "stylelint-config-prettier": "^9.0.5",
"stylelint-config-standard": "^29.0.0", "stylelint-config-standard": "^29.0.0",
"stylelint-order": "^5.0.0", "stylelint-order": "^5.0.0",
"stylelint-scss": "^4.7.0", "stylelint-scss": "^4.7.0",
"tailwindcss": "^3.3.3", "tailwindcss": "^3.4.3",
"typescript": "^4.9.5", "typescript": "^4.9.5",
"unplugin-vue-components": "^0.22.12", "unplugin-vue-components": "^0.22.12",
"vite": "^3.2.7", "vite": "^3.2.10",
"vite-plugin-compression": "^0.5.1", "vite-plugin-compression": "^0.5.1",
"vite-plugin-html": "^3.2.0", "vite-plugin-html": "^3.2.2",
"vite-plugin-mock": "^2.9.8", "vite-plugin-mock": "^2.9.8",
"vite-plugin-style-import": "^2.0.0", "vite-plugin-style-import": "^2.0.0",
"vue-demi": "^0.13.11", "vue-demi": "^0.13.11",
"vue-draggable-next": "^2.2.1", "vue-draggable-next": "^2.2.1",
"vue-eslint-parser": "^9.3.1", "vue-eslint-parser": "^9.4.2",
"vuedraggable": "^4.1.0" "vuedraggable": "^4.1.0"
}, },
"lint-staged": { "lint-staged": {

3613
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -81,7 +81,3 @@
document.removeEventListener('mousedown', timekeeping); document.removeEventListener('mousedown', timekeeping);
}); });
</script> </script>
<style lang="less">
@import 'styles/index.less';
</style>

View File

@@ -90,6 +90,7 @@
v-bind="getSubmitBtnOptions" v-bind="getSubmitBtnOptions"
@click="handleSubmit" @click="handleSubmit"
:loading="loadingSub" :loading="loadingSub"
attr-type="submit"
>{{ getProps.submitButtonText }}</n-button >{{ getProps.submitButtonText }}</n-button
> >
<n-button <n-button

View File

@@ -31,6 +31,7 @@
v-if="imgList.length < maxNumber" v-if="imgList.length < maxNumber"
> >
<n-upload <n-upload
class="w-auto"
v-bind="$props" v-bind="$props"
:file-list-style="{ display: 'none' }" :file-list-style="{ display: 'none' }"
@before-upload="beforeUpload" @before-upload="beforeUpload"

View File

@@ -10,7 +10,7 @@
<h2 v-show="!collapsed" class="title">{{ websiteConfig.title }}</h2> <h2 v-show="!collapsed" class="title">{{ websiteConfig.title }}</h2>
</div> </div>
<AsideMenu <AsideMenu
v-model:collapsed="collapsed" :collapsed="collapsed"
v-model:location="getMenuLocation" v-model:location="getMenuLocation"
:inverted="getInverted" :inverted="getInverted"
mode="horizontal" mode="horizontal"
@@ -21,7 +21,7 @@
<!-- 菜单收起 --> <!-- 菜单收起 -->
<div <div
class="ml-1 layout-header-trigger layout-header-trigger-min" class="ml-1 layout-header-trigger layout-header-trigger-min"
@click="() => $emit('update:collapsed', !collapsed)" @click="handleMenuCollapsed"
> >
<n-icon size="18" v-if="collapsed"> <n-icon size="18" v-if="collapsed">
<MenuUnfoldOutlined /> <MenuUnfoldOutlined />
@@ -101,12 +101,14 @@
<div class="layout-header-trigger layout-header-trigger-min"> <div class="layout-header-trigger layout-header-trigger-min">
<n-dropdown trigger="hover" @select="avatarSelect" :options="avatarOptions"> <n-dropdown trigger="hover" @select="avatarSelect" :options="avatarOptions">
<div class="avatar"> <div class="avatar">
<n-avatar round> <n-avatar round :src="websiteConfig.logo">
{{ username }}
<template #icon> <template #icon>
<UserOutlined /> <UserOutlined />
</template> </template>
</n-avatar> </n-avatar>
<n-divider vertical />
<span>{{ username }}</span>
</div> </div>
</n-dropdown> </n-dropdown>
</div> </div>
@@ -151,19 +153,18 @@
type: Boolean, type: Boolean,
}, },
}, },
setup(props) { emits: ['update:collapsed'],
setup(props, { emit }) {
const userStore = useUserStore(); const userStore = useUserStore();
const useLockscreen = useScreenLockStore(); const useLockscreen = useScreenLockStore();
const message = useMessage(); const message = useMessage();
const dialog = useDialog(); const dialog = useDialog();
const { navMode, navTheme, headerSetting, menuSetting, crumbsSetting } = useProjectSetting(); const { navMode, navTheme, headerSetting, menuSetting, crumbsSetting } = useProjectSetting();
const { name } = userStore?.info || {};
const drawerSetting = ref(); const drawerSetting = ref();
const state = reactive({ const state = reactive({
username: name ?? '', username: userStore?.info?.username ?? '',
fullscreenIcon: 'FullscreenOutlined', fullscreenIcon: 'FullscreenOutlined',
navMode, navMode,
navTheme, navTheme,
@@ -323,6 +324,10 @@
openDrawer(); openDrawer();
} }
function handleMenuCollapsed() {
emit('update:collapsed', !props.collapsed);
}
return { return {
...toRefs(state), ...toRefs(state),
iconList, iconList,
@@ -341,6 +346,7 @@
getMenuLocation, getMenuLocation,
mixMenu, mixMenu,
websiteConfig, websiteConfig,
handleMenuCollapsed,
}; };
}, },
}); });

View File

@@ -1,6 +1,7 @@
<template> <template>
<RouterView> <RouterView>
<template #default="{ Component, route }"> <template #default="{ Component, route }">
<template v-if="mode === 'production'">
<transition :name="getTransitionName" mode="out-in" appear> <transition :name="getTransitionName" mode="out-in" appear>
<keep-alive v-if="keepAliveComponents.length" :include="keepAliveComponents"> <keep-alive v-if="keepAliveComponents.length" :include="keepAliveComponents">
<component :is="Component" :key="route.fullPath" /> <component :is="Component" :key="route.fullPath" />
@@ -8,6 +9,13 @@
<component v-else :is="Component" :key="route.fullPath" /> <component v-else :is="Component" :key="route.fullPath" />
</transition> </transition>
</template> </template>
<template v-else>
<keep-alive v-if="keepAliveComponents.length" :include="keepAliveComponents">
<component :is="Component" :key="route.fullPath" />
</keep-alive>
<component v-else :is="Component" :key="route.fullPath" />
</template>
</template>
</RouterView> </RouterView>
</template> </template>
@@ -39,9 +47,11 @@
return unref(isPageAnimate) ? unref(pageAnimateType) : ''; return unref(isPageAnimate) ? unref(pageAnimateType) : '';
}); });
const mode = import.meta.env.MODE;
return { return {
keepAliveComponents, keepAliveComponents,
getTransitionName, getTransitionName,
mode,
}; };
}, },
}); });

View File

@@ -1,4 +1,5 @@
import './styles/tailwind.css'; import './styles/tailwind.css';
import './styles/index.less';
import { createApp } from 'vue'; import { createApp } from 'vue';
import { setupNaiveDiscreteApi, setupNaive, setupDirectives } from '@/plugins'; import { setupNaiveDiscreteApi, setupNaive, setupDirectives } from '@/plugins';
import App from './App.vue'; import App from './App.vue';

View File

@@ -8,7 +8,7 @@ import { storage } from '@/utils/Storage';
export type UserInfoType = { export type UserInfoType = {
// TODO: add your own data // TODO: add your own data
name: string; username: string;
email: string; email: string;
}; };

View File

@@ -1 +1 @@
@import 'transition/index.less'; @import url('./transition/index.less');

View File

@@ -54,8 +54,8 @@
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
import { defineComponent, ref, reactive, toRefs } from 'vue'; import { ref, reactive } from 'vue';
import { useMessage } from 'naive-ui'; import { useMessage } from 'naive-ui';
import { basicModal, useModal } from '@/components/Modal'; import { basicModal, useModal } from '@/components/Modal';
import { BasicForm, FormSchema, useForm } from '@/components/Form/index'; import { BasicForm, FormSchema, useForm } from '@/components/Form/index';
@@ -205,9 +205,6 @@
}, },
]; ];
export default defineComponent({
components: { basicModal, BasicForm },
setup() {
const modalRef: any = ref(null); const modalRef: any = ref(null);
const message = useMessage(); const message = useMessage();
@@ -217,11 +214,7 @@
const [ const [
lightModalRegister, lightModalRegister,
{ { openModal: lightOpenModal, closeModal: lightCloseModal, setSubLoading: lightSetSubLoading },
openModal: lightOpenModal,
closeModal: lightCloseModal,
setSubLoading: lightSetSubLoading,
},
] = useModal({ ] = useModal({
title: '确认对话框', title: '确认对话框',
showIcon: true, showIcon: true,
@@ -240,12 +233,6 @@
schemas, schemas,
}); });
const state = reactive({
formValue: {
name: '小马哥',
},
});
async function okModal() { async function okModal() {
const formRes = await submit(); const formRes = await submit();
if (formRes) { if (formRes) {
@@ -274,21 +261,6 @@
function handleReset(values: Recordable) { function handleReset(values: Recordable) {
console.log(values); console.log(values);
} }
return {
...toRefs(state),
modalRef,
register,
modalRegister,
lightModalRegister,
handleReset,
showModal,
okModal,
lightOkModal,
showLightModal,
};
},
});
</script> </script>
<style lang="less"> <style lang="less">

View File

@@ -51,7 +51,7 @@
actionRef.value.reload(); actionRef.value.reload();
} }
function editEnd({ record, index, key, value }) { function editEnd({ value }) {
console.log(value); console.log(value);
} }
</script> </script>

View File

@@ -106,7 +106,7 @@
actionRef.value.reload(); actionRef.value.reload();
} }
function editEnd({ record, index, key, value }) { function editEnd({ value }) {
console.log(value); console.log(value);
} }
</script> </script>

View File

@@ -7,7 +7,7 @@
<n-grid cols="2 s:1 m:3 l:3 xl:3 2xl:3" responsive="screen"> <n-grid cols="2 s:1 m:3 l:3 xl:3 2xl:3" responsive="screen">
<n-grid-item offset="0 s:0 m:1 l:1 xl:1 2xl:1"> <n-grid-item offset="0 s:0 m:1 l:1 xl:1 2xl:1">
<n-form <n-form
:label-width="80" :label-width="90"
:model="formValue" :model="formValue"
:rules="rules" :rules="rules"
label-placement="left" label-placement="left"

View File

@@ -1,16 +1,16 @@
<template> <template>
<div ref="chartRef" :style="{ height, width }"></div> <div ref="chartRef" :style="{ height, width }"></div>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
import { defineComponent, onMounted, ref, Ref } from 'vue'; import { onMounted, ref, Ref } from 'vue';
import { useECharts } from '@/hooks/web/useECharts'; import { useECharts } from '@/hooks/web/useECharts';
import { basicProps } from './props'; import { basicProps } from './props';
export default defineComponent({ defineProps({
props: basicProps, ...basicProps,
setup() { });
const chartRef = ref<HTMLDivElement | null>(null); const chartRef = ref<HTMLDivElement | null>(null);
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>); const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
@@ -81,8 +81,8 @@
{ {
smooth: true, smooth: true,
data: [ data: [
111, 222, 4000, 18000, 33333, 55555, 66666, 33333, 14000, 36000, 66666, 44444, 111, 222, 4000, 18000, 33333, 55555, 66666, 33333, 14000, 36000, 66666, 44444, 22222,
22222, 11111, 4000, 2000, 500, 333, 222, 111, 11111, 4000, 2000, 500, 333, 222, 111,
], ],
type: 'line', type: 'line',
areaStyle: {}, areaStyle: {},
@@ -93,8 +93,8 @@
{ {
smooth: true, smooth: true,
data: [ data: [
33, 66, 88, 333, 3333, 5000, 18000, 3000, 1200, 13000, 22000, 11000, 2221, 1201, 33, 66, 88, 333, 3333, 5000, 18000, 3000, 1200, 13000, 22000, 11000, 2221, 1201, 390,
390, 198, 60, 30, 22, 11, 198, 60, 30, 22, 11,
], ],
type: 'line', type: 'line',
areaStyle: {}, areaStyle: {},
@@ -105,7 +105,4 @@
], ],
}); });
}); });
return { chartRef };
},
});
</script> </script>

View File

@@ -16,15 +16,7 @@
</NRow> </NRow>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
import { defineComponent } from 'vue';
import FluxTrend from './FluxTrend.vue'; import FluxTrend from './FluxTrend.vue';
import VisitAmount from './VisitAmount.vue'; import VisitAmount from './VisitAmount.vue';
export default defineComponent({
components: { FluxTrend, VisitAmount },
setup() {
return {};
},
});
</script> </script>

View File

@@ -1,14 +1,15 @@
<template> <template>
<div ref="chartRef" :style="{ height, width }"></div> <div ref="chartRef" :style="{ height, width }"></div>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
import { defineComponent, onMounted, ref, Ref } from 'vue'; import { onMounted, ref, Ref } from 'vue';
import { useECharts } from '@/hooks/web/useECharts'; import { useECharts } from '@/hooks/web/useECharts';
import { basicProps } from './props'; import { basicProps } from './props';
export default defineComponent({ defineProps({
props: basicProps, ...basicProps,
setup() { });
const chartRef = ref<HTMLDivElement | null>(null); const chartRef = ref<HTMLDivElement | null>(null);
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>); const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
@@ -55,7 +56,4 @@
], ],
}); });
}); });
return { chartRef };
},
});
</script> </script>

View File

@@ -241,11 +241,38 @@
SettingOutlined, SettingOutlined,
} from '@vicons/antd'; } from '@vicons/antd';
interface InVisits {
dayVisits: number;
rise: number;
decline: number;
amount: number;
}
interface InSaleroom {
weekSaleroom: number;
amount: number;
degree: number;
}
interface InOrderLarge {
weekLarge: number;
rise: number;
decline: number;
amount: number;
}
interface InVolume {
weekLarge: number;
rise: number;
decline: number;
amount: number;
}
const loading = ref(true); const loading = ref(true);
const visits = ref<any>({}); const visits = ref({} as InVisits);
const saleroom = ref<any>({}); const saleroom = ref({} as InSaleroom);
const orderLarge = ref<any>({}); const orderLarge = ref({} as InOrderLarge);
const volume = ref(<any>{}); const volume = ref({} as InVolume);
// 图标列表 // 图标列表
const iconList = [ const iconList = [

View File

@@ -9,7 +9,7 @@
<n-grid cols="1 s:1 m:3 l:3 xl:3 2xl:3" responsive="screen"> <n-grid cols="1 s:1 m:3 l:3 xl:3 2xl:3" responsive="screen">
<n-grid-item offset="0 s:0 m:1 l:1 xl:1 2xl:1"> <n-grid-item offset="0 s:0 m:1 l:1 xl:1 2xl:1">
<n-form <n-form
:label-width="80" :label-width="90"
:model="formValue" :model="formValue"
:rules="rules" :rules="rules"
label-placement="left" label-placement="left"

View File

@@ -1,6 +1,6 @@
<template> <template>
<n-form <n-form
:label-width="90" :label-width="100"
:model="formValue" :model="formValue"
:rules="rules" :rules="rules"
label-placement="left" label-placement="left"

View File

@@ -13,7 +13,7 @@
<n-step title="完成转账" description="恭喜您,转账成功" /> <n-step title="完成转账" description="恭喜您,转账成功" />
</n-steps> </n-steps>
<step1 v-if="currentTab === 1" @next-step="nextStep" /> <step1 v-if="currentTab === 1" @next-step="nextStep" />
<step2 v-if="currentTab === 2" @next-step="nextStep" @prevStep="prevStep" /> <step2 v-if="currentTab === 2" @next-step="nextStep" @prev-step="prevStep" />
<step3 v-if="currentTab === 3" @prev-step="prevStep" @finish="finish" /> <step3 v-if="currentTab === 3" @prev-step="prevStep" @finish="finish" />
</n-space> </n-space>
</n-card> </n-card>
@@ -21,7 +21,7 @@
</template> </template>
<script setup> <script setup>
import { defineComponent, ref } from 'vue'; import { ref } from 'vue';
import step1 from './Step1.vue'; import step1 from './Step1.vue';
import step2 from './Step2.vue'; import step2 from './Step2.vue';
import step3 from './Step3.vue'; import step3 from './Step3.vue';

View File

@@ -3,7 +3,7 @@
<div class="n-layout-page-header"> <div class="n-layout-page-header">
<n-card :bordered="false" title="基础详情"> 基础详情有时也用于显示只读信息 </n-card> <n-card :bordered="false" title="基础详情"> 基础详情有时也用于显示只读信息 </n-card>
</div> </div>
<n-card :bordered="false" class="proCard mt-4" size="small" :segmented="{ content: true }"> <n-card :bordered="false" class="mt-4 proCard" size="small" :segmented="{ content: true }">
<n-descriptions label-placement="left" class="py-2"> <n-descriptions label-placement="left" class="py-2">
<n-descriptions-item> <n-descriptions-item>
<template #label>收款人姓名</template> <template #label>收款人姓名</template>
@@ -21,14 +21,6 @@
</div> </div>
</template> </template>
<script> <script lang="ts" setup></script>
import { defineComponent } from 'vue';
export default defineComponent({
setup() {
return {};
},
});
</script>
<style lang="less" scoped></style> <style lang="less" scoped></style>

View File

@@ -53,8 +53,8 @@
</n-grid> </n-grid>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
import { defineComponent, reactive, ref, toRefs } from 'vue'; import { reactive, ref, toRefs } from 'vue';
import { useDialog, useMessage } from 'naive-ui'; import { useDialog, useMessage } from 'naive-ui';
const rules = { const rules = {
@@ -70,14 +70,11 @@
}, },
}; };
export default defineComponent({
setup() {
const formRef: any = ref(null); const formRef: any = ref(null);
const message = useMessage(); const message = useMessage();
const dialog = useDialog(); const dialog = useDialog();
const state = reactive({ const formValue = ref({
formValue: {
name: '', name: '',
mobile: '', mobile: '',
icpCode: '', icpCode: '',
@@ -86,7 +83,6 @@
closeText: closeText:
'网站维护中,暂时无法访问!本网站正在进行系统维护和技术升级,网站暂时无法访问,敬请谅解!', '网站维护中,暂时无法访问!本网站正在进行系统维护和技术升级,网站暂时无法访问,敬请谅解!',
systemOpen: true, systemOpen: true,
},
}); });
function systemOpenChange(value) { function systemOpenChange(value) {
@@ -100,7 +96,7 @@
message.success('操作成功'); message.success('操作成功');
}, },
onNegativeClick: () => { onNegativeClick: () => {
state.formValue.systemOpen = true; formValue.value.systemOpen = true;
}, },
}); });
} }
@@ -119,15 +115,4 @@
function resetForm() { function resetForm() {
formRef.value.restoreValidation(); formRef.value.restoreValidation();
} }
return {
formRef,
...toRefs(state),
rules,
formSubmit,
resetForm,
systemOpenChange,
};
},
});
</script> </script>

View File

@@ -36,8 +36,8 @@
</n-grid> </n-grid>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
import { defineComponent, reactive, ref, toRefs } from 'vue'; import { reactive, ref, toRefs } from 'vue';
import { useMessage } from 'naive-ui'; import { useMessage } from 'naive-ui';
const rules = { const rules = {
@@ -47,15 +47,12 @@
trigger: 'blur', trigger: 'blur',
}, },
}; };
export default defineComponent({
setup() {
const formRef: any = ref(null); const formRef: any = ref(null);
const message = useMessage(); const message = useMessage();
const state = reactive({ const formValue = ref({
formValue: {
originator: '', originator: '',
},
}); });
function formSubmit() { function formSubmit() {
@@ -67,13 +64,4 @@
} }
}); });
} }
return {
formRef,
...toRefs(state),
rules,
formSubmit,
};
},
});
</script> </script>

View File

@@ -88,8 +88,8 @@
</n-grid> </n-grid>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
import { defineComponent, reactive, ref, toRefs } from 'vue'; import { reactive, ref, toRefs } from 'vue';
import { useDialog, useMessage } from 'naive-ui'; import { useDialog, useMessage } from 'naive-ui';
const rules = { const rules = {
@@ -152,14 +152,11 @@
}, },
]; ];
export default defineComponent({
setup() {
const formRef: any = ref(null); const formRef: any = ref(null);
const message = useMessage(); const message = useMessage();
const dialog = useDialog(); const dialog = useDialog();
const state = reactive({ const formValue = ref({
formValue: {
bigWidth: '', bigWidth: '',
bigHeight: '', bigHeight: '',
smallWidth: '', smallWidth: '',
@@ -168,7 +165,6 @@
pricePrecise: 1, pricePrecise: 1,
isMarketPrice: true, isMarketPrice: true,
pricePreciseNum: null, pricePreciseNum: null,
},
}); });
function systemOpenChange(value) { function systemOpenChange(value) {
@@ -182,7 +178,7 @@
message.success('操作成功'); message.success('操作成功');
}, },
onNegativeClick: () => { onNegativeClick: () => {
state.formValue.systemOpen = true; formValue.value.systemOpen = true;
}, },
}); });
} }
@@ -201,18 +197,4 @@
function resetForm() { function resetForm() {
formRef.value.restoreValidation(); formRef.value.restoreValidation();
} }
return {
formRef,
...toRefs(state),
pricePreciseList,
watermarkPlaceList,
pricePreciseNumList,
rules,
formSubmit,
resetForm,
systemOpenChange,
};
},
});
</script> </script>

View File

@@ -25,8 +25,8 @@
</n-grid> </n-grid>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
import { defineComponent, reactive, toRefs } from 'vue'; import { reactive, toRefs } from 'vue';
import BasicSetting from './BasicSetting.vue'; import BasicSetting from './BasicSetting.vue';
import RevealSetting from './RevealSetting.vue'; import RevealSetting from './RevealSetting.vue';
import EmailSetting from './EmailSetting.vue'; import EmailSetting from './EmailSetting.vue';
@@ -48,9 +48,7 @@
key: 3, key: 3,
}, },
]; ];
export default defineComponent({
components: { BasicSetting, RevealSetting, EmailSetting },
setup() {
const state = reactive({ const state = reactive({
type: 1, type: 1,
typeTitle: '基本设置', typeTitle: '基本设置',
@@ -60,14 +58,6 @@
state.type = e.key; state.type = e.key;
state.typeTitle = e.name; state.typeTitle = e.name;
} }
return {
...toRefs(state),
switchType,
typeTabList,
};
},
});
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.thing-cell { .thing-cell {

View File

@@ -1,5 +1,5 @@
<template> <template>
<n-drawer v-model:show="isDrawer" :width="width" :placement="placement"> <n-drawer v-model:show="state.isDrawer" :width="width" :placement="state.placement">
<n-drawer-content :title="title" closable> <n-drawer-content :title="title" closable>
<n-form <n-form
:model="formParams" :model="formParams"
@@ -38,7 +38,7 @@
<template #footer> <template #footer>
<n-space> <n-space>
<n-button type="primary" :loading="subLoading" @click="formSubmit">提交</n-button> <n-button type="primary" :loading="state.subLoading" @click="formSubmit">提交</n-button>
<n-button @click="handleReset">重置</n-button> <n-button @click="handleReset">重置</n-button>
</n-space> </n-space>
</template> </template>
@@ -46,8 +46,8 @@
</n-drawer> </n-drawer>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
import { defineComponent, reactive, ref, toRefs } from 'vue'; import { reactive, ref, toRefs } from 'vue';
import { useMessage } from 'naive-ui'; import { useMessage } from 'naive-ui';
const rules = { const rules = {
@@ -62,10 +62,8 @@
trigger: 'blur', trigger: 'blur',
}, },
}; };
export default defineComponent({
name: 'CreateDrawer', defineProps({
components: {},
props: {
title: { title: {
type: String, type: String,
default: '添加顶级菜单', default: '添加顶级菜单',
@@ -74,8 +72,8 @@
type: Number, type: Number,
default: 450, default: 450,
}, },
}, });
setup() {
const message = useMessage(); const message = useMessage();
const formRef: any = ref(null); const formRef: any = ref(null);
const defaultValueRef = () => ({ const defaultValueRef = () => ({
@@ -87,14 +85,11 @@
path: '', path: '',
hidden: false, hidden: false,
}); });
const formParams = ref(defaultValueRef());
const state = reactive({ const state = reactive({
isDrawer: false, isDrawer: false,
subLoading: false, subLoading: false,
formParams: defaultValueRef(),
placement: 'right' as const, placement: 'right' as const,
alertText:
'该功能主要实时预览各种布局效果,更多完整配置在 projectSetting.ts 中设置,建议在生产环境关闭该布局预览功能。',
}); });
function openDrawer() { function openDrawer() {
@@ -119,18 +114,6 @@
function handleReset() { function handleReset() {
formRef.value.restoreValidation(); formRef.value.restoreValidation();
state.formParams = Object.assign(state.formParams, defaultValueRef()); formParams.value = Object.assign(formParams.value, defaultValueRef());
} }
return {
...toRefs(state),
formRef,
rules,
formSubmit,
handleReset,
openDrawer,
closeDrawer,
};
},
});
</script> </script>