This commit is contained in:
文永达 2023-06-12 08:50:29 +08:00
commit 2a188e5076
14 changed files with 180 additions and 135 deletions

View File

@ -23,7 +23,7 @@
"axios": "^0.27.2",
"countup.js": "^2.1.0",
"echarts": "5.2.2",
"element-plus": "^2.3.2",
"element-plus": "^2.3.6",
"file-saver": "2.0.5",
"fuse.js": "6.4.6",
"highlight.js": "^11.5.1",
@ -35,18 +35,18 @@
"pinia": "^2.0.33",
"qs": "^6.11.0",
"sortablejs": "^1.15.0",
"vue": "^3.2.47",
"vue": "^3.3.4",
"vue-clipboard3": "^2.0.0",
"vue-cropper": "1.0.2",
"vue-i18n": "^9.2.2",
"vue-router": "^4.1.6"
"vue-router": "^4.2.2"
},
"devDependencies": {
"@vitejs/plugin-vue": "^4.1.0",
"@vue/compiler-sfc": "^3.2.47",
"@vitejs/plugin-vue": "^4.2.3",
"@vue/compiler-sfc": "^3.3.4",
"sass": "1.45.0",
"unplugin-auto-import": "0.5.3",
"vite": "^4.2.1",
"vite": "^4.3.9",
"vite-plugin-compression": "^0.3.6",
"vite-plugin-svg-icons": "1.0.5",
"vite-plugin-vue-setup-extend": "^0.4.0"

View File

@ -1,10 +1,12 @@
<template>
<el-image
:src="`${realSrc}`"
fit="cover"
fit="contain"
preview-teleported
:hide-on-click-modal="true"
lazy
:style="`width:${realWidth};height:${realHeight};`"
:preview-src-list="realSrcList"
>
:preview-src-list="realSrcList">
<template #error>
<div class="image-slot">
<el-icon><picture-filled /></el-icon>
@ -14,50 +16,58 @@
</template>
<script setup>
import { isExternal } from "@/utils/validate";
import { isExternal, isArray } from '@/utils/validate'
const props = defineProps({
src: {
type: String,
required: true
type: [String, null],
required: true,
default: ''
},
width: {
type: [Number, String],
default: ""
default: ''
},
height: {
type: [Number, String],
default: ""
default: ''
},
split: {
type: String,
default: ','
}
});
})
const realSrc = computed(() => {
let real_src = props.src.split(",")[0];
if (isExternal(real_src)) {
return real_src;
if (props.src == null || props.src == undefined) return
let real_src = props.src.split(props.split)
if (real_src && isArray(real_src)) {
var url0 = real_src[0]
if (isExternal(url0)) {
return url0
}
}
return import.meta.env.VITE_APP_BASE_API + real_src;
});
return import.meta.env.VITE_APP_BASE_API + real_src
})
const realSrcList = computed(() => {
let real_src_list = props.src.split(",");
let srcList = [];
real_src_list.forEach(item => {
if (props.src == null || props.src == undefined) return
let real_src_list = props.src.split(props.split)
let srcList = []
real_src_list.forEach((item) => {
if (isExternal(item)) {
return srcList.push(item);
return srcList.push(item)
}
return srcList.push(import.meta.env.VITE_APP_BASE_API + item);
});
return srcList;
});
return srcList.push(import.meta.env.VITE_APP_BASE_API + item)
})
return srcList
})
const realWidth = computed(() =>
typeof props.width == "string" ? props.width : `${props.width}px`
);
const realWidth = computed(() => (typeof props.width == 'string' ? props.width : `${props.width}px`))
const realHeight = computed(() =>
typeof props.height == "string" ? props.height : `${props.height}px`
);
const realHeight = computed(() => (typeof props.height == 'string' ? props.height : `${props.height}px`))
</script>
<style lang="scss" scoped>

View File

@ -19,7 +19,7 @@
<el-dropdown @command="handleCommand" class="right-menu-item avatar-container" trigger="hover">
<span class="avatar-wrapper">
<img :src="userStore.avatar" class="user-avatar" />
<el-avatar :size="25" shape="circle" class="user-avatar" :src="userStore.avatar" />
<span class="name">{{ userStore.name }}</span>
<el-icon><ArrowDown /></el-icon>
</span>

View File

@ -282,3 +282,14 @@ export function color16() {
const color = `#${r.toString(16)}${g.toString(16)}${b.toString(16)}`
return color
}
/**
* 返回星期几
* @param {*} num
* @returns
*/
export function getWeek(num = 0) {
var datas = dayjs().add(num, 'day').day()
var week = ['日', '一', '二', '三', '四', '五', '六']
return '星期' + week[datas]
}

View File

@ -11,8 +11,9 @@
</router-link>
</div>
</template>
<el-empty :image-size="80" v-if="commonRouters && commonRouters.length <= 0" />
</div>
<el-empty :image-size="80" v-if="commonRouters && commonRouters.length <= 0" />
</template>
<script setup>
import usePermissionStore from '@/store/modules/permission'

View File

@ -22,7 +22,7 @@
</el-col>
</el-row>
<el-table :data="dataList">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="字典编码" align="center" prop="dictCode" />
<el-table-column label="字典标签" align="center" prop="dictLabel">
<template #default="scope">
@ -63,13 +63,11 @@
</el-form-item>
<el-form-item label="样式属性" prop="cssClass">
<!-- <el-input v-model="form.cssClass" placeholder="请输入样式属性" /> -->
<el-select v-model="form.cssClass" clearable="">
<el-option
v-for="dict in cssClassOptions"
:class="dict.value"
:key="dict.value"
:label="dict.label + '(' + dict.value + ')'"
:value="dict.value"></el-option>
<el-select v-model="form.cssClass" allow-create filterable clearable="">
<el-option v-for="dict in cssClassOptions" :class="dict.value" :key="dict.value" :label="dict.label" :value="dict.value">
<span style="float: left" :class="dict.value">{{ dict.label }}</span>
<span style="float: right">{{ dict.value }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="显示排序" prop="dictSort">
@ -77,11 +75,8 @@
</el-form-item>
<el-form-item label="回显样式" prop="listClass">
<el-select v-model="form.listClass">
<el-option
v-for="item in listClassOptions"
:key="item.value"
:label="item.label + '(' + item.value + ')'"
:value="item.value"></el-option>
<el-option v-for="item in listClassOptions" :key="item.value" :label="item.label + '(' + item.value + ')'" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">

View File

@ -2,11 +2,11 @@
<div class="home">
<!-- 用户信息 -->
<el-row :gutter="15">
<el-col :md="24" :lg="24" :xl="24" class="mb10">
<el-col :md="24" :lg="18" :xl="24" class="mb10">
<el-card shadow="hover">
<div class="user-item">
<div class="user-item-left">
<img :src="userInfo.avatar" />
<el-avatar :size="60" shape="circle" :src="userInfo.avatar" />
</div>
<div class="user-item-right">
@ -24,6 +24,12 @@
</div>
</el-card>
</el-col>
<el-col :lg="6" class="mb10">
<el-card style="height: 100%">
<div class="text-warning mb10">{{ currentTime }} {{ weekName }}</div>
<div>上次登录时间{{ userInfo.loginDate }}</div>
</el-card>
</el-col>
</el-row>
<el-row :gutter="15">
@ -88,6 +94,7 @@ import BarChart from './dashboard/BarChart'
import CommonMenu from './components/CommonMenu'
import useUserStore from '@/store/modules/user'
import { getWeek } from '@/utils/ruoyi'
const showEdit = ref(false)
const data = {
newVisitis: {
@ -112,8 +119,9 @@ const userInfo = computed(() => {
return useUserStore().userInfo
})
const currentTime = computed(() => {
return proxy.parseTime(new Date())
return proxy.parseTime(new Date(), 'YYYY-MM-DD')
})
const weekName = getWeek()
let lineChartData = reactive([])
const dataType = ref(null)
@ -143,13 +151,8 @@ function handleAdd() {
.user-item-left {
width: 60px;
height: 60px;
border-radius: 50%;
overflow: hidden;
margin-right: 10px;
img {
width: 100%;
height: 100%;
}
}
.user-item-right {
flex: 1;

View File

@ -49,7 +49,7 @@
<el-table-column prop="fmt_type" label="编辑器类型" width="100"> </el-table-column>
<el-table-column prop="tags" label="标签" width="100" :show-overflow-tooltip="true"> </el-table-column>
<el-table-column prop="hits" label="点击量" width="80" align="center"> </el-table-column>
<el-table-column prop="content" label="文章内容" :show-overflow-tooltip="true"> </el-table-column>
<!-- <el-table-column prop="content" label="文章内容" :show-overflow-tooltip="true"> </el-table-column> -->
<el-table-column sortable prop="status" align="center" label="状态" width="90">
<template #default="scope">
<el-tag :type="scope.row.status == '2' ? 'danger' : 'success'" disable-transitions

View File

@ -3,49 +3,62 @@
<el-row :gutter="24">
<!-- :model属性用于表单验证使用 比如下面的el-form-item prop属性用于对表单值进行验证操作 -->
<el-form :model="form" ref="formRef" label-width="100px" :rules="rules" @submit.prevent>
<el-form-item label="文章标题" prop="title">
<el-input v-model="form.title" placeholder="请输入文章标题(必须)" />
</el-form-item>
<el-form-item label="文章分类" prop="categoryId">
<el-cascader
class="w100"
:options="categoryOptions"
:props="{ checkStrictly: true, value: 'categoryId', label: 'name', emitPath: false }"
placeholder="请选择文章分类"
clearable
v-model="form.categoryId" />
</el-form-item>
<el-row :gutter="20">
<el-col :lg="12">
<el-form-item label="文章标题" prop="title">
<el-input v-model="form.title" placeholder="请输入文章标题(必须)" />
</el-form-item>
</el-col>
<el-form-item label="文章标签">
<el-tag v-for="tag in form.dynamicTags" :key="tag" class="mr10" closable :disable-transitions="false" @close="handleCloseTag(tag)">
{{ tag }}
</el-tag>
<el-input
v-if="inputVisible"
ref="inputRef"
v-model="inputValue"
class="w20"
@keyup.enter="handleInputConfirm"
@blur="handleInputConfirm" />
<el-col :lg="12">
<el-form-item label="文章分类" prop="categoryId">
<el-cascader
class="w100"
:options="categoryOptions"
:props="{ checkStrictly: true, value: 'categoryId', label: 'name', emitPath: false }"
placeholder="请选择文章分类"
clearable
v-model="form.categoryId" />
</el-form-item>
</el-col>
<el-button v-else class="button-new-tag" size="small" @click="showInput">+ 文章标签</el-button>
</el-form-item>
<el-form-item label="是否公开">
<el-switch v-model="form.isPublic" inline-prompt :active-value="1" :in-active-value="0" active-text="是" inactive-text="否" />
</el-form-item>
<el-form-item label="文章封面">
<UploadImage ref="uploadRef" v-model="form.coverUrl" :limit="1" :fileSize="15" :drag="true" />
</el-form-item>
<el-form-item prop="content" label="文章内容">
<MdEditor v-model="form.content" :onUploadImg="onUploadImg" />
</el-form-item>
<el-col :lg="12">
<el-form-item label="是否公开">
<el-switch v-model="form.isPublic" inline-prompt :active-value="1" :in-active-value="0" active-text="是" inactive-text="否" />
</el-form-item>
</el-col>
<el-col :lg="24">
<el-form-item style="text-align: right">
<el-button @click="handlePublish('1')">发布文章</el-button>
<el-button type="success" @click="handlePublish('2')">存为草稿</el-button>
<el-col :lg="12">
<el-form-item label="文章标签">
<el-tag v-for="tag in form.dynamicTags" :key="tag" class="mr10" closable :disable-transitions="false" @close="handleCloseTag(tag)">
{{ tag }}
</el-tag>
<el-input
v-if="inputVisible"
ref="inputRef"
v-model="inputValue"
class="w20"
@keyup.enter="handleInputConfirm"
@blur="handleInputConfirm" />
<el-button v-else class="button-new-tag" size="small" @click="showInput">+ 文章标签</el-button>
</el-form-item>
</el-col>
<el-form-item label="文章封面">
<UploadImage ref="uploadRef" v-model="form.coverUrl" :limit="1" :fileSize="15" :drag="true" />
</el-form-item>
</el-col>
<el-form-item prop="content" label="文章内容">
<MdEditor v-model="form.content" :onUploadImg="onUploadImg" />
</el-form-item>
<el-col :lg="24">
<el-form-item style="text-align: right">
<el-button type="success" @click="handlePublish('1')">发布文章</el-button>
<el-button @click="handlePublish('2')">存为草稿</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-row>
</div>

View File

@ -52,7 +52,7 @@
<el-table :data="typeList" v-loading="loading" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="字典编号" align="center" prop="dictId" width="100" sortable />
<el-table-column label="字典类型" align="center" :show-overflow-tooltip="true">
<el-table-column label="字典类型" :show-overflow-tooltip="true">
<template #default="scope">
<el-link type="primary" @click="showDictData(scope.row)">{{ scope.row.dictType }}</el-link>
</template>

View File

@ -58,9 +58,9 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button size="small" text icon="bell" @click="handleNotice(scope.row)" v-hasPermi="['system:notice:edit']"> 通知</el-button>
<el-button size="small" text icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:notice:edit']"> 修改</el-button>
<el-button size="small" text icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:notice:remove']"> 删除</el-button>
<el-button text icon="bell" @click="handleNotice(scope.row)" v-hasPermi="['system:notice:edit']"> 通知</el-button>
<el-button text icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:notice:edit']"> 修改</el-button>
<el-button text icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:notice:remove']"> 删除</el-button>
</template>
</el-table-column>
</el-table>
@ -71,22 +71,25 @@
<el-dialog :title="title" v-model="open" width="780px" append-to-body>
<el-form ref="noticeRef" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :lg="12">
<el-col :lg="24">
<el-form-item label="公告标题" prop="noticeTitle">
<el-input v-model="form.noticeTitle" placeholder="请输入公告标题" />
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="公告类型" prop="noticeType">
<el-select v-model="form.noticeType" placeholder="请选择公告类型">
<!-- <el-select v-model="form.noticeType" placeholder="请选择公告类型">
<el-option v-for="dict in typeOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue"></el-option>
</el-select>
</el-select> -->
<el-radio-group v-model="form.noticeType">
<el-radio v-for="dict in typeOptions" :key="dict.dictValue" :label="parseInt(dict.dictValue)">{{ dict.dictLabel }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :lg="24">
<el-col :lg="12">
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in statusOptions" :key="dict.dictValue" :label="dict.dictValue">{{ dict.dictLabel }}</el-radio>
<el-radio v-for="dict in statusOptions" :key="dict.dictValue" :label="parseInt(dict.dictValue)">{{ dict.dictLabel }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@ -167,9 +170,9 @@ function reset() {
form.value = {
noticeId: undefined,
noticeTitle: undefined,
noticeType: undefined,
noticeType: 1,
noticeContent: undefined,
status: '0'
status: 0
}
proxy.resetForm('noticeRef')
}

View File

@ -1,6 +1,7 @@
<template>
<div class="user-info-head" @click="editCropper()">
<img :src="options.img" title="点击上传头像" class="img-circle img-lg" />
<!-- <img :src="options.img" title="点击上传头像" class="img-circle img-lg" /> -->
<el-avatar shape="circle" :size="120" :src="options.img" />
</div>
<el-dialog :title="title" v-model="open" width="800px" append-to-body @opened="modalOpened" @close="closeDialog">
<el-row>
@ -62,12 +63,12 @@ import useUserStore from '@/store/modules/user'
export default {
components: {
VueCropper,
uploadAvatar,
uploadAvatar
},
props: {
user: {
type: Object,
},
type: Object
}
},
setup() {
const useStore = useUserStore()
@ -84,7 +85,7 @@ export default {
autoCropWidth: 200, //
autoCropHeight: 200, //
fixedBox: true, //
previews: {}, //
previews: {} //
})
/** 编辑头像 */
@ -162,9 +163,9 @@ export default {
beforeUpload,
uploadImg,
realTime,
closeDialog,
closeDialog
}
},
}
}
</script>

View File

@ -115,7 +115,7 @@
<el-option label="单选框" value="radio" />
<el-option label="复选框" value="checkbox" />
<el-option label="日期时间范围控件" value="datetime" />
<el-option label="日期范围控件" value="datePicker" />
<el-option label="日期范围控件" value="datePicker" />
<el-option label="图片上传" value="imageUpload" />
<el-option label="文件上传" value="fileUpload" />
<el-option label="富文本控件" value="editor" />
@ -224,7 +224,8 @@ function submitForm() {
checkedBtn: info.value.checkedBtn,
permissionPrefix: info.value.permissionPrefix,
colNum: info.value.colNum,
generateRepo: info.value.generateRepo
generateRepo: info.value.generateRepo,
generateMenu: info.value.generateMenu
}
updateGenTable(genTable)

View File

@ -162,6 +162,31 @@
<el-input v-model="info.genPath" placeholder="前端代码路径在后端配置文件gen->vuePath下配置"></el-input>
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="是否生成仓储层">
<template #label>
是否生成仓储层
<span>
<el-tooltip content="不勾选代码将不会生成对应的ZR.Repository代码" placement="top">
<el-icon>
<question-filled />
</el-icon>
</el-tooltip>
</span>
</template>
<el-radio-group v-model="info.generateRepo">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :lg="12" v-if="info.genType == '1'">
<el-form-item prop="generateMenu" label="添加菜单">
<el-switch v-model="info.generateMenu" class="ml-2" />
</el-form-item>
</el-col>
<el-col :lg="24">
<el-form-item prop="colNum" label="一行显示列">
<el-radio v-model="info.colNum" :label="12">2列</el-radio>
@ -195,24 +220,6 @@
</el-checkbox-group>
</el-form-item>
</el-col>
<el-col :lg="24">
<el-form-item label="是否生成仓储层">
<template #label>
是否生成仓储层
<span>
<el-tooltip content="不勾选代码将不会生成对应的ZR.Repository代码" placement="top">
<el-icon>
<question-filled />
</el-icon>
</el-tooltip>
</span>
</template>
<el-radio-group v-model="info.generateRepo">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row v-show="info.tplCategory == 'tree'">