| | |
| | | "description": "若依管理系统",
|
| | | "author": "若依",
|
| | | "license": "MIT",
|
| | | "type": "module",
|
| | | "scripts": {
|
| | | "dev": "vite",
|
| | | "build:prod": "vite build",
|
| | |
| | | "url": "https://gitee.com/y_project/RuoYi-Vue.git"
|
| | | },
|
| | | "dependencies": {
|
| | | "@element-plus/icons-vue": "2.0.10",
|
| | | "@element-plus/icons-vue": "2.3.1",
|
| | | "@vueup/vue-quill": "1.2.0",
|
| | | "@vueuse/core": "9.5.0",
|
| | | "@vueuse/core": "10.6.1",
|
| | | "axios": "0.27.2",
|
| | | "echarts": "5.4.0",
|
| | | "element-plus": "2.2.27",
|
| | | "echarts": "5.4.3",
|
| | | "element-plus": "2.4.3",
|
| | | "file-saver": "2.0.5",
|
| | | "fuse.js": "6.6.2",
|
| | | "js-cookie": "3.0.1",
|
| | | "jsencrypt": "3.3.1",
|
| | | "js-cookie": "3.0.5",
|
| | | "jsencrypt": "3.3.2",
|
| | | "nprogress": "0.2.0",
|
| | | "pinia": "2.0.22",
|
| | | "vue": "3.2.45",
|
| | | "vue-cropper": "1.0.3",
|
| | | "vue-router": "4.1.4"
|
| | | "pinia": "2.1.7",
|
| | | "vue": "3.3.9",
|
| | | "vue-cropper": "1.1.1",
|
| | | "vue-router": "4.2.5"
|
| | | },
|
| | | "devDependencies": {
|
| | | "@vitejs/plugin-vue": "3.1.0",
|
| | | "@vue/compiler-sfc": "3.2.45",
|
| | | "sass": "1.56.1",
|
| | | "unplugin-auto-import": "0.11.4",
|
| | | "vite": "3.2.3",
|
| | | "@vitejs/plugin-vue": "4.5.0",
|
| | | "@vue/compiler-sfc": "3.3.9",
|
| | | "sass": "1.69.5",
|
| | | "unplugin-auto-import": "0.17.1",
|
| | | "vite": "5.0.4",
|
| | | "vite-plugin-compression": "0.5.1",
|
| | | "vite-plugin-svg-icons": "2.0.1",
|
| | | "unplugin-vue-setup-extend-plus": "0.4.9"
|
| | | "unplugin-vue-setup-extend-plus": "1.0.0"
|
| | | }
|
| | | }
|
| | |
| | | <template>
|
| | | <el-form size="small">
|
| | | <el-form>
|
| | | <el-form-item>
|
| | | <el-radio v-model='radioValue' :label="1">
|
| | | 日,允许的通配符[, - * ? / L W]
|
| | |
| | | <template>
|
| | | <el-form size="small">
|
| | | <el-form>
|
| | | <el-form-item>
|
| | | <el-radio v-model='radioValue' :label="1">
|
| | | 小时,允许的通配符[, - * /]
|
| | |
| | | <template>
|
| | | <el-form size="small">
|
| | | <el-form>
|
| | | <el-form-item>
|
| | | <el-radio v-model='radioValue' :label="1">
|
| | | 分钟,允许的通配符[, - * /]
|
| | |
| | | <template>
|
| | | <el-form size='small'>
|
| | | <el-form>
|
| | | <el-form-item>
|
| | | <el-radio v-model='radioValue' :label="1">
|
| | | 月,允许的通配符[, - * /]
|
| | |
| | | <template>
|
| | | <el-form size="small">
|
| | | <el-form>
|
| | | <el-form-item>
|
| | | <el-radio v-model='radioValue' :label="1">
|
| | | 秒,允许的通配符[, - * /]
|
| | |
| | | <template>
|
| | | <el-form size='small'>
|
| | | <el-form>
|
| | | <el-form-item>
|
| | | <el-radio v-model='radioValue' :label="1">
|
| | | 周,允许的通配符[, - * ? / L #]
|
| | |
| | | <template>
|
| | | <el-form size="small">
|
| | | <el-form>
|
| | | <el-form-item>
|
| | | <el-radio :label="1" v-model='radioValue'>
|
| | | 不填,允许的通配符[, - * /]
|
| | |
| | | <el-form-item>
|
| | | <el-radio :label="3" v-model='radioValue'>
|
| | | 周期从
|
| | | <el-input-number v-model='cycle01' :min='fullYear' :max="maxFullYear - 1" /> -
|
| | | <el-input-number v-model='cycle02' :min="cycle01 + 1" :max="maxFullYear" />
|
| | | <el-input-number v-model='cycle01' :min='fullYear' :max="2098"/> -
|
| | | <el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : fullYear + 1" :max="2099"/>
|
| | | </el-radio>
|
| | | </el-form-item>
|
| | |
|
| | | <el-form-item>
|
| | | <el-radio :label="4" v-model='radioValue'>
|
| | | 从
|
| | | <el-input-number v-model='average01' :min='fullYear' :max="maxFullYear - 1"/> 年开始,每
|
| | | <el-input-number v-model='average02' :min="1" :max="10" /> 年执行一次
|
| | | <el-input-number v-model='average01' :min='fullYear' :max="2098"/> 年开始,每
|
| | | <el-input-number v-model='average02' :min="1" :max="2099 - average01 || fullYear"/> 年执行一次
|
| | | </el-radio>
|
| | |
|
| | | </el-form-item>
|
| | |
| | | fit="cover"
|
| | | :style="`width:${realWidth};height:${realHeight};`"
|
| | | :preview-src-list="realSrcList"
|
| | | :preview-teleported="true"
|
| | | preview-teleported
|
| | | >
|
| | | <template #error>
|
| | | <div class="image-slot">
|
| | |
| | | <el-tooltip class="item" effect="dark" content="显隐列" placement="top" v-if="columns">
|
| | | <el-button circle icon="Menu" @click="showColumn()" v-if="showColumnsType == 'transfer'"/>
|
| | | <el-dropdown trigger="click" :hide-on-click="false" style="padding-left: 12px" v-if="showColumnsType == 'checkbox'">
|
| | | <el-button size="mini" circle icon="Menu" />
|
| | | <el-button circle icon="Menu" />
|
| | | <template #dropdown>
|
| | | <el-dropdown-menu>
|
| | | <template v-for="item in columns" :key="item.key">
|
| | |
| | | <template>
|
| | | <transition-group name="fade-transform" mode="out-in">
|
| | | <inner-link
|
| | | v-for="(item, index) in tagsViewStore.iframeViews"
|
| | | :key="item.path"
|
| | | :iframeId="'iframe' + index"
|
| | | v-show="route.path === item.path"
|
| | | :src="iframeUrl(item.meta.link, item.query)"
|
| | | ></inner-link>
|
| | | </transition-group>
|
| | | <inner-link
|
| | | v-for="(item, index) in tagsViewStore.iframeViews"
|
| | | :key="item.path"
|
| | | :iframeId="'iframe' + index"
|
| | | v-show="route.path === item.path"
|
| | | :src="iframeUrl(item.meta.link, item.query)"
|
| | | ></inner-link>
|
| | | </template>
|
| | |
|
| | | <script setup>
|
| | |
| | | <div class="drawer-item">
|
| | | <span>开启 TopNav</span>
|
| | | <span class="comp-style">
|
| | | <el-switch v-model="topNav" class="drawer-switch" />
|
| | | <el-switch v-model="settingsStore.topNav" class="drawer-switch" />
|
| | | </span>
|
| | | </div>
|
| | |
|
| | | <div class="drawer-item">
|
| | | <span>开启 Tags-Views</span>
|
| | | <span class="comp-style">
|
| | | <el-switch v-model="tagsView" class="drawer-switch" />
|
| | | <el-switch v-model="settingsStore.tagsView" class="drawer-switch" />
|
| | | </span>
|
| | | </div>
|
| | |
|
| | | <div class="drawer-item">
|
| | | <span>固定 Header</span>
|
| | | <span class="comp-style">
|
| | | <el-switch v-model="fixedHeader" class="drawer-switch" />
|
| | | <el-switch v-model="settingsStore.fixedHeader" class="drawer-switch" />
|
| | | </span>
|
| | | </div>
|
| | |
|
| | | <div class="drawer-item">
|
| | | <span>显示 Logo</span>
|
| | | <span class="comp-style">
|
| | | <el-switch v-model="sidebarLogo" class="drawer-switch" />
|
| | | <el-switch v-model="settingsStore.sidebarLogo" class="drawer-switch" />
|
| | | </span>
|
| | | </div>
|
| | |
|
| | | <div class="drawer-item">
|
| | | <span>动态标题</span>
|
| | | <span class="comp-style">
|
| | | <el-switch v-model="dynamicTitle" class="drawer-switch" />
|
| | | <el-switch v-model="settingsStore.dynamicTitle" class="drawer-switch" />
|
| | | </span>
|
| | | </div>
|
| | |
|
| | |
| | |
|
| | | <script setup>
|
| | | import variables from '@/assets/styles/variables.module.scss'
|
| | | import originElementPlus from 'element-plus/theme-chalk/index.css'
|
| | | import axios from 'axios'
|
| | | import { ElLoading, ElMessage } from 'element-plus'
|
| | | import { useDynamicTitle } from '@/utils/dynamicTitle'
|
| | |
| | | const storeSettings = computed(() => settingsStore);
|
| | | const predefineColors = ref(["#409EFF", "#ff4500", "#ff8c00", "#ffd700", "#90ee90", "#00ced1", "#1e90ff", "#c71585"]);
|
| | |
|
| | | /** 是否需要topnav */
|
| | | const topNav = computed({
|
| | | get: () => storeSettings.value.topNav,
|
| | | set: (val) => {
|
| | | settingsStore.changeSetting({ key: 'topNav', value: val })
|
| | | if (!val) {
|
| | | appStore.toggleSideBarHide(false);
|
| | | permissionStore.setSidebarRouters(permissionStore.defaultRoutes);
|
| | | }
|
| | | }
|
| | | })
|
| | | /** 是否需要tagview */
|
| | | const tagsView = computed({
|
| | | get: () => storeSettings.value.tagsView,
|
| | | set: (val) => {
|
| | | settingsStore.changeSetting({ key: 'tagsView', value: val })
|
| | | }
|
| | | })
|
| | | /**是否需要固定头部 */
|
| | | const fixedHeader = computed({
|
| | | get: () => storeSettings.value.fixedHeader,
|
| | | set: (val) => {
|
| | | settingsStore.changeSetting({ key: 'fixedHeader', value: val })
|
| | | }
|
| | | })
|
| | | /**是否需要侧边栏的logo */
|
| | | const sidebarLogo = computed({
|
| | | get: () => storeSettings.value.sidebarLogo,
|
| | | set: (val) => {
|
| | | settingsStore.changeSetting({ key: 'sidebarLogo', value: val })
|
| | | }
|
| | | })
|
| | | /**是否需要侧边栏的动态网页的title */
|
| | | const dynamicTitle = computed({
|
| | | get: () => storeSettings.value.dynamicTitle,
|
| | | set: (val) => {
|
| | | settingsStore.changeSetting({ key: 'dynamicTitle', value: val })
|
| | | // 动态设置网页标题
|
| | | useDynamicTitle()
|
| | | }
|
| | | })
|
| | |
|
| | | function themeChange(val) {
|
| | | settingsStore.changeSetting({ key: 'theme', value: val })
|
| | | theme.value = val;
|
| | | settingsStore.theme = val;
|
| | | handleThemeStyle(val);
|
| | | }
|
| | | function handleTheme(val) {
|
| | | settingsStore.changeSetting({ key: 'sideTheme', value: val })
|
| | | settingsStore.sideTheme = val;
|
| | | sideTheme.value = val;
|
| | | }
|
| | | function saveSetting() {
|
| | |
| | | </app-link>
|
| | | </template>
|
| | |
|
| | | <el-sub-menu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
|
| | | <el-sub-menu v-else ref="subMenu" :index="resolvePath(item.path)" teleported>
|
| | | <template v-if="item.meta" #title>
|
| | | <svg-icon :icon-class="item.meta && item.meta.icon" />
|
| | | <span class="menu-title" :title="hasTitle(item.meta.title)">{{ item.meta.title }}</span>
|
| | |
| | | import Cookies from 'js-cookie'
|
| | |
|
| | | import ElementPlus from 'element-plus'
|
| | | import locale from 'element-plus/lib/locale/lang/zh-cn' // 中文语言
|
| | | import 'element-plus/dist/index.css'
|
| | | import locale from 'element-plus/es/locale/lang/zh-cn'
|
| | |
|
| | | import '@/assets/styles/index.scss' // global css
|
| | |
|