Merge pull request 'master' (#117) from master into prod

Reviewed-on: http://git.feashow.cn/clay/mosr-web/pulls/117
This commit is contained in:
2024-05-09 10:27:32 +00:00
7 changed files with 296 additions and 66 deletions

View File

@@ -68,7 +68,7 @@ const filterConfig = computed(()=>{
// 搜索功能表单元素默认值
const setDefaultFormValues = () => {
filterConfig.value.forEach(item=>{
form.value[item.prop] = item.props.defaultValue || null
form.value[item.prop] = item.props?.defaultValue || null
})
}

View File

@@ -1,37 +1,37 @@
<template>
<div>
<el-popover
:width="300"
trigger="click"
placement="bottom"
popper-style="box-shadow: rgb(14 18 22 / 35%) 0px 10px 38px -10px, rgb(14 18 22 / 20%) 0px 10px 20px -15px; padding: 10px;"
>
<template #reference>
<el-badge :hidden="total===0" :value="total" class="item">
<el-icon size="22px" style="cursor: pointer">
<Bell/>
</el-icon>
</el-badge>
</template>
<template #default>
<div v-if="total===0" style="height: 100px;display: flex;align-items: center;justify-content: center">
暂无数据~
</div>
<ul v-else>
<li v-for="(notice,index) in noticeList" :key="index">
<span @click="handleToNotifyDetail(notice,index)">{{ notice.noticeTitle }}</span>
<span v-if="notice.state==='0'" @click="handleRead(notice)">已读</span>
</li>
</ul>
<!-- <el-popover-->
<!-- :width="300"-->
<!-- trigger="click"-->
<!-- placement="bottom"-->
<!-- popper-style="box-shadow: rgb(14 18 22 / 35%) 0px 10px 38px -10px, rgb(14 18 22 / 20%) 0px 10px 20px -15px; padding: 10px;"-->
<!-- >-->
<!-- <template #reference>-->
<!-- <el-badge :hidden="total===0" :value="total" class="item">-->
<!-- <el-icon size="22px" style="cursor: pointer">-->
<!-- <Bell/>-->
<!-- </el-icon>-->
<!-- </el-badge>-->
<!-- </template>-->
<!-- <template #default>-->
<!-- <div v-if="total===0" style="height: 100px;display: flex;align-items: center;justify-content: center">-->
<!-- 暂无数据~-->
<!-- </div>-->
<!-- <ul v-else>-->
<!-- <li v-for="(notice,index) in noticeList" :key="index">-->
<!-- <span @click="handleToNotifyDetail(notice,index)">{{ notice.noticeTitle }}</span>-->
<!-- <span v-if="notice.state==='0'" @click="handleRead(notice)">已读</span>-->
<!-- </li>-->
<!-- </ul>-->
<div class="notify-btn">
<el-button type="primary" @click="handlePrevious" :disabled="pageInfo.pageNum===1" link>上一页</el-button>
<span @click="handleMoreRead">本页已读</span>
<el-button type="primary" @click="handleNext" :disabled="pageInfo.pageNum*pageInfo.pageSize>total" link>下一页
</el-button>
</div>
</template>
</el-popover>
<!-- <div class="notify-btn">-->
<!-- <el-button type="primary" @click="handlePrevious" :disabled="pageInfo.pageNum===1" link>上一页</el-button>-->
<!-- <span @click="handleMoreRead">本页已读</span>-->
<!-- <el-button type="primary" @click="handleNext" :disabled="pageInfo.pageNum*pageInfo.pageSize>total" link>下一页-->
<!-- </el-button>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-popover>-->
<el-dialog width="1200px" title="通知公告详情" v-model="visible" @close="visible=false">
<el-form :model="viewForm" label-width="100px">
<el-row>

View File

@@ -6,8 +6,8 @@
<bell-socket/>
<div class="user-box">
<div>
<img :src="userInfo.avatar" alt="" @click.stop="handleVisitedP">
<span>{{userInfo.userName}}</span>
<!-- <img :src="userInfo.avatar" alt="" @click.stop="handleVisitedP">-->
<span>欢迎回来{{userInfo.userName}}</span>
</div>
<div class="person" v-if="visitedP">
<ul>

View File

@@ -107,7 +107,17 @@ export const usePermisstionStroe = defineStore('permisstion', () => {
}
const removeMenu = () => {
menuList.value.length = 0
menuList.value = [
{
name: 'home',
path: '/home',
icon: 'home',
title: '首页',
meta: {
breadcrumb: true
}
}
]
asyncRouters.value.length = 0
}

View File

@@ -21,12 +21,12 @@
</el-col>
<el-col :xs="24" :sm="8" :md="6" :lg="4" :xl="4">
<div class="right">
<div class="right-top">
<h3>欢迎回来 Sunshine</h3>
<div>科技创新项目需求征集中 要求参见OA内部信</div>
</div>
<!-- <div class="right-top">-->
<!-- <h3>欢迎回来 Sunshine</h3>-->
<!-- <div>科技创新项目需求征集中 要求参见OA内部信</div>-->
<!-- </div>-->
<!-- <div class="right-gap"></div>-->
<div class="right-down">
<div class="right-top ">
<div>
<h3>帮助文档</h3>
<span>查看更多</span>
@@ -36,6 +36,14 @@
{{ item.title }}
</div>
</div>
<div class="right-down">
<div>
<h3>工具下载</h3>
<span>常用网站</span>
</div>
<el-divider/>
</div>
</div>
</el-col>
</el-row>
@@ -103,10 +111,11 @@ const tableConfig = reactive({
align: 'center',
},
{
prop: 'state',
label: '状态',
prop: 'type',
label: '类型',
align: 'center',
currentRender: ({row, index}) => (<Tag dictType={'normal_disable'} value={row.state}/>)
showOverflowTooltip: false,
// currentRender: ({row, index}) => (<Tag dictType={'normal_disable'} value={row.state}/>)
},
{
prop: 'createTime',
@@ -119,6 +128,7 @@ const tableConfig = reactive({
fixed: 'right',
width: '150',
align: 'center',
showOverflowTooltip: false,
currentRender: ({row, index}) => {
return (
<div>
@@ -232,20 +242,20 @@ const headBtnClick = (key) => {
flex-direction: column;
justify-content: space-between;
.right-top {
h3 {
text-align: center;
margin-bottom: 15px;
}
div {
color: #909399;
font-size: 14px;
margin: 0 20px;
letter-spacing: 1px;
line-height: 25px;
}
}
//.right-top {
// h3 {
// text-align: center;
// margin-bottom: 15px;
// }
//
// div {
// color: #909399;
// font-size: 14px;
// margin: 0 20px;
// letter-spacing: 1px;
// line-height: 25px;
// }
//}
.right-top, .right-down {
flex: 0.5;
@@ -254,8 +264,7 @@ const headBtnClick = (key) => {
background-color: #ffffff;
}
.right-down {
.right-down,.right-top {
flex: 0.48;
> div:first-child {

View File

@@ -1,13 +1,108 @@
<template>
<div>
需求征集
</div>
<fvSearchForm :searchConfig="searchConfig" @search="search"></fvSearchForm>
<fvTable ref="tableIns" :tableConfig="tableConfig" @headBtnClick="headBtnClick"></fvTable>
</template>
<script setup lang="jsx">
import fvSelect from '@/fvcomponents/fvSelect/index.vue'
import Tag from '@/components/Tag.vue'
const router = useRouter()
const searchConfig = reactive([
{
label: '名称',
prop: 'roleName',
component: 'el-input',
props: {
placeholder: '请输入名称查询',
clearable: true
}
},
{
label: '状态',
prop: 'state',
component: shallowRef(fvSelect),
props: {
placeholder: '请选择',
clearable: true,
cacheKey: 'normal_disable'
}
}
])
const tableIns = ref()
const auths = {
edit: ['admin:role:edit'],
add: ['admin:role:add'],
export: ['admin:role:export'],
}
const tableConfig = reactive({
columns: [
{
type: 'selection',
prop: 'selection'
},
{
prop: 'roleName',
label: '名称',
align: 'center'
},
{
prop: 'roleKey',
label: '所属公司',
align: 'center'
},
{
prop: 'time',
label: '发布时间',
align: 'center'
},
{
prop: 'state',
label: '状态',
align: 'center',
showOverflowTooltip: false,
currentRender: ({row, index}) => (<Tag dictType={'normal_disable'} value={row.state}/>)
},
{
prop: 'oper',
label: '操作',
align: 'center',
showOverflowTooltip: false,
currentRender: ({row, index}) => {
return (
<div>
<el-button type={'primary'} link onClick={()=>{}}>详情</el-button>
<el-button type={'primary'} link onClick={()=>{}}>上报</el-button>
</div>
)
}
}
],
api: '',
btns: [
{name: '新增', key: 'add', auth: auths.add, type: 'primary'},
{name: '导出', key: 'add', auth: auths.add, type: 'primary'},
],
params: {}
})
const search = (val) => {
tableConfig.params = {...val}
tableIns.value.refresh()
}
const headBtnClick = (key) => {
switch (key) {
case 'add':
handleAdd()
break;
case 'export':
handleExport()
break;
}
}
</script>
<style lang="scss" scoped>
</style>
</style>

View File

@@ -1,11 +1,127 @@
<template>
<div>
需求汇总
</div>
<fvSearchForm :searchConfig="searchConfig"></fvSearchForm>
<fvTable :table-config="tableConfig"></fvTable>
</template>
<script setup lang="jsx">
import { reactive, shallowRef } from 'vue';
import fvSelect from './../../../fvcomponents/fvSelect/index.vue'
const localData = reactive({
// 表格配置
})
const searchConfig = reactive([
{
label: '名称',
prop: 'name',
component: 'el-input',
colProps: {}
},
{
label: '项目类型',
prop: 'projectType',
component: shallowRef(fvSelect),
props: {},
colProps: {}
},
{
label: '研发主体',
prop: 'productMainBody',
component: shallowRef(fvSelect),
props: {},
colProps: {}
},
{
label: '项目影响',
prop: 'projectEffect',
component: shallowRef(fvSelect),
props: {},
colProps: {}
},
{
label: '起止时间',
prop: 'time',
component: 'el-date-picker',
props: {},
colProps: {}
},
{
label: '最小金额',
prop: 'minMoney',
component: 'el-input',
colProps: {}
},
{
label: '最大金额',
prop: 'maxMoney',
component: 'el-input',
colProps: {}
},
])
const tableConfig = reactive({
columns: [
{
type: 'selection',
prop: 'selection'
},
{
prop: 'name',
label: '名称',
align: 'center'
},
{
prop: 'company',
label: '所属公司',
align: 'center'
},
{
prop: 'projectType',
label: '项目类型',
align: 'center'
},
{
prop: 'productMainBody',
label: '研发主体',
align: 'center'
},
{
prop: 'projectEffect',
label: '项目影响',
align: 'center'
},
{
prop: 'survey',
label: '经营概况',
align: 'center'
},
{
prop: 'time',
label: '起止时间',
align: 'center'
},
{
prop: 'status',
label: '发布状态',
align: 'center'
},
{
prop: 'oper',
label: '操作',
align: 'center',
currentRender: ({row, index}) => {
return (
<div>
<el-button type={'primary'} link onClick={()=>{}}>详情</el-button>
<el-button type={'primary'} link onClick={()=>{}}>上报</el-button>
</div>
)
}
}
]
})
</script>
<style lang="scss" scoped>