qhw-dev-0927
qiuhongwu 1 year ago
parent 77b09bec49
commit c53a0fb0f1

@ -7,14 +7,14 @@ VITE_PUBLIC_PATH = /
# 本地开发代理,可以解决跨域及多地址代理
# 如果接口地址匹配到则会转发到http://localhost:3000防止本地出现跨域问题
# 可以有多个,注意多个不能换行,否则代理将会失效
VITE_PROXY = [["/dev-api","http://localhost:8091/admin-api"],["/upload","http://localhost:48080/admin-api/infra/file/upload"]]
VITE_PROXY = [["/dev-api","http://192.168.0.162:8091/admin-api"],["/upload","http://192.168.0.162:8091/admin-api/infra/file/upload"]]
# VITE_PROXY=[["/api","http://vben.xingyuv.com/test"]]
# 是否删除Console.log
VITE_DROP_CONSOLE = false
# 基础页面地址,例如 swagger 等页面
VITE_GLOB_BASE_URL = "http://localhost:8091"
VITE_GLOB_BASE_URL = "http://192.168.0.162:8091"
# 接口地址,如果没有跨域问题,直接在这里配置即可
VITE_GLOB_API_URL = /dev-api

@ -1,18 +1,19 @@
<script lang="ts" setup>
import { reactive, ref } from 'vue'
import type { UnwrapRef } from 'vue'
import {
ManOutlined,
UserOutlined,
WomanOutlined,
FieldTimeOutlined,
LeftOutlined, ManOutlined,
RightCircleFilled,
UserOutlined, WindowsFilled,
WomanOutlined,
} from '@ant-design/icons-vue'
//
const sex = ref<string>('保密')//
const value1 = ref<string>('a')
const message = ref<string>('全部信息')//
interface FormState {
name: string
delivery: boolean
@ -27,34 +28,56 @@ const formState: UnwrapRef<FormState> = reactive({
resource: '',
desc: '',
})
//
//
const open = ref<boolean>(false)
const confirmLoading = ref<boolean>(false)
function showModal() {
open.value = true
}
function handleOk() {
modalText.value = ''
confirmLoading.value = true
setTimeout(() => {
open.value = false
confirmLoading.value = false
}, 2000)
}
//antd
const state = reactive({
checked1: true,
})
//
const current = ref(6)//
//
const isVisible = ref(true)
const isVisible2 = ref(false)
const toggleBlocks: any = () => {
isVisible.value = !isVisible.value
isVisible2.value = !isVisible2.value
}
//antd^^^
const customButtonStyle = [ {
width:'80px',
textAlign:'center',
borderRadius: '50px',
margin:'0 10px',
}]
const messageStyle = [ {
color:'#6666',
width:'90px',
fontSize:'12px',
textAlign:'center',
borderRadius: '5px',
margin:'0 5px',
}]
const phoneStyle = [{
width:'60%',
}]
const changeStyle = [{
border:'none',
boxShadow: 'none',
@ -63,6 +86,54 @@ const changeStyle = [{
const labelCol = { style: { width: '100px' } }
const wrapperCol = { span: 20 }
const activeKey = ref('1')
//
const tablecolumns = [
{
name: '通知标题',
dataIndex: 'title',
key: 'title',
},
{
title: '状态',
dataIndex: 'state',
key: 'state',
},
{
title: '类型',
key: 'type',
dataIndex: 'type',
},
{
title: '发布时间',
key: 'time',
dataIndex: 'time',
},
]
const tabledata = [
{
key: '1',
title: '供应链管理平台正式上线',
state: '已读',
type:'产品信息',
time:'2023-08-22 22:31',
},
{
key: '2',
title: '供应链管理平台正式上线',
state: '已读',
type: '产品信息',
time:'2023-08-22 22:31',
}, {
key: '3',
title: '供应链管理平台正式上线',
state: '已读',
type: '产品信息',
time:'2023-08-22 22:31',
},
]
</script>
<template>
@ -71,6 +142,7 @@ const activeKey = ref('1')
default-active-tab-key
>
<a-tabs v-model:activeKey="activeKey" tab-position="left">
<!-- 第一部分 -->
<a-tab-pane key="1" tab="资料设置">
<div class="datum">
<div class="datumtop">
@ -108,8 +180,8 @@ const activeKey = ref('1')
<a-button :style="changeStyle" @click="showModal">
修改手机号
</a-button>
<a-modal v-model:open="open" title="修改手机号" :confirm-loading="confirmLoading" @ok="handleOk">
<div>
<a-modal v-model:open="open" title="修改手机号" centered :confirm-loading="confirmLoading" @ok="handleOk">
<div class="dialog">
<a-form :model="formState" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-form-item label="原手机号码:">
<a-input v-model:value="value" placeholder="输入内容" />
@ -122,7 +194,6 @@ const activeKey = ref('1')
</a-button>
</div>
</a-form-item>
<a-form-item label="新手机号码:">
<a-input v-model:value="value" placeholder="输入新手机号" />
</a-form-item>
@ -144,21 +215,19 @@ const activeKey = ref('1')
<a-form-item label="性别:">
<div>
<div>
<a-radio-group v-model:value="value1">
<div>
<a-radio-group v-model:value="value1">
<a-radio-button :style="customButtonStyle" value="a">
男性<ManOutlined />
</a-radio-button>
<a-radio-button :style="customButtonStyle" value="b">
女性<WomanOutlined />
</a-radio-button>
<a-radio-button :style="customButtonStyle" value="c">
保密
</a-radio-button>
</a-radio-group>
</div>
</a-radio-group>
<div>
<a-radio-group v-model:value="sex">
<a-radio-button :style="customButtonStyle" value="男性">
男性<ManOutlined />
</a-radio-button>
<a-radio-button :style="customButtonStyle" value="女性">
女性<WomanOutlined />
</a-radio-button>
<a-radio-button :style="customButtonStyle" value="保密">
保密
</a-radio-button>
</a-radio-group>
</div>
</div>
</div>
</a-form-item>
@ -171,8 +240,27 @@ const activeKey = ref('1')
<a-form-item label="籍贯:">
<a-input v-model:value="value" placeholder="输入内容" />
</a-form-item>
<a-form-item label="学历:">
<a-input v-model:value="value" placeholder="输入内容" />
<a-form-item label="学历" name="region">
<a-select v-model:value="formState.region" placeholder="选择学历">
<a-select-option value="初中">
初中
</a-select-option>
<a-select-option value="高中">
高中
</a-select-option>
<a-select-option value="初中">
大专
</a-select-option>
<a-select-option value="高中">
本科
</a-select-option>
<a-select-option value="初中">
研究生
</a-select-option>
<a-select-option value="高中">
博士
</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="专业:">
<a-input v-model:value="value" placeholder="输入内容" />
@ -220,7 +308,8 @@ const activeKey = ref('1')
</div>
</a-tab-pane>
<!-- 修改密码 -->
<!-- 第二部分 -->
<a-tab-pane key="2" tab="修改密码">
<div class="datum">
@ -258,6 +347,8 @@ const activeKey = ref('1')
</div>
</div>
</a-tab-pane>
<!-- 第三部分 -->
<a-tab-pane key="3" tab="登录记录">
<div class="datum">
<div class="datumtop">
@ -267,35 +358,121 @@ const activeKey = ref('1')
</p>
</div>
<!-- 日期 -->
<div class="date">
{{ `2023-08-22` }}
</div>
<div class="recordbox">
<div class="recordleft">
<div>
图标
<div
v-for="(item, index) in 5" :key="index"
>
<div class="date">
{{ `2023-08-22` }}
</div>
<div
v-for="(item, index) in 5"
:key="index" class="recordbox"
>
<div class="recordleft">
<div class="recordicon">
<WindowsFilled />
</div>
<div class="recordmessage">
<div class="usersId">
{{ `kang-pc` }}
</div>
{{ `上海市长宁区 14.127.100.242` }}
</div>
</div>
<div>
登录人和地点时间
<div class="recordright">
<span><FieldTimeOutlined /></span>{{ `2023-08-22 12:00` }}
</div>
</div>
<div class="recordright">
<span>图标</span>{{ `具体时间` }}
</div>
</div>
<div class="sorter">
<a-pagination v-model:current="current" :total="500" />
</div>
</div>
</a-tab-pane>
<!-- 第四部分 -->
<a-tab-pane key="4" tab="系统通知">
<div class="datum">
<div v-if="isVisible" class="datum">
<div class="datumtop">
<p>
<span></span>
系统通知
</p>
</div>
<div class="messagetitle">
<div class="messagetitleleft">
<a-radio-group v-model:value="message">
<a-radio-button :style="messageStyle" value="全部信息">
全部信息
</a-radio-button>
<a-radio-button :style="messageStyle" value="服务信息">
服务信息
</a-radio-button>
<a-radio-button :style="messageStyle" value="活动信息">
活动信息
</a-radio-button>
<a-radio-button :style="messageStyle" value="产品信息">
产品信息
</a-radio-button>
<a-radio-button :style="messageStyle" value="安全信息">
安全信息
</a-radio-button>
<a-radio-button :style="messageStyle" value="故障信息">
故障信息
</a-radio-button>
</a-radio-group>
</div>
<div class="messagetitleright">
全部标记为已读
</div>
</div>
<div class="table">
<a-table :columns="tablecolumns" :data-source="tabledata" :total="500">
<template #headerCell="{ column }">
<template v-if="column.key === 'title'">
<span>
通知标题
</span>
</template>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'name'">
<a href=""> {{ record.name }}</a>
</template>
<template v-else-if="column.key === 'title'">
<div style="cursor: pointer;" @click="toggleBlocks">
{{ record.title }}
</div>
</template>
</template>
</a-table>
</div>
</div>
<div v-else-if="isVisible2" class="details">
<div class="detailstop">
<p>
关于供应链管理平台正式上线的通知
</p>
<div @click="toggleBlocks">
<a-button><LeftOutlined />返回</a-button>
</div>
</div>
<div class="nav">
<p>消息类型<span>{{ `产品信息` }}</span>发布时间<span>{{ `2023-08-22 22:31` }}</span></p>
</div>
<div class="main">
<p>
8月22日由长江云息打造的供应链管理平台正式上线运行该项目基于云息云建设涵盖采购需求采购价格采购配额采购订单到货签收质量协同对账开票付款计划 / 付款申请等全业务流程助力客户实现对标准采购VMI 采购委外加工等业务的全面管理实现供应商全周期管理实现从需求寻源合同到采购执行的全过程管理打造具有云息特色的端到端的数智化供应链管理体系
</p>
</div>
</div>
</a-tab-pane>
<!-- 第五部分 -->
<a-tab-pane key="5" tab="信息设置">
<div class="datum">
<div class="datumtop">
@ -304,8 +481,33 @@ const activeKey = ref('1')
信息设置
</p>
</div>
<div class="inform">
<div
v-for="(item, index) in 5"
:key="index" class="informbox"
>
<div class="informleft">
<div class="informicon">
<WindowsFilled />
</div>
<div class="informmessage">
<div class="informId">
{{ `未读日报` }}
</div>
{{ `未读日报将以站内信的形式通知` }}
</div>
</div>
<div class="informright">
<a-space direction="vertical">
<a-switch v-model:checked="state.checked1" checked-children="" un-checked-children="" />
</a-space>
</div>
</div>
</div>
</div>
</a-tab-pane>
<!-- 第六部分 -->
<a-tab-pane key="6" tab="公司列表">
<div class="datum">
<div class="datumtop">
@ -314,6 +516,48 @@ const activeKey = ref('1')
公司列表
</p>
</div>
<div class="listmainbox">
<div class="listmain">
<div v-for="(item, index) in 4" :key="index" class="list">
<div class="firm">
<div class="firmtop">
<div class="firmtopleft">
<img src="https://files.axshare.com/gsc/F4557Q/03/bb/8b/03bb8b5afc694032b44452387757f019/images/%E5%85%AC%E5%8F%B8%E5%88%97%E8%A1%A8/u30.png?pageId=125c1eb4-7fa5-4390-86d9-40ffd2c7d87c" alt="">
</div>
<div class="firmtopright">
<p>{{ `济钢城市矿产科技有限公司` }}</p>
<p class="fontcss">
职务{{ `产品经理` }}
</p>
</div>
</div>
<div class="firmtopbot">
<p class="fontcss">
部门{{ `再生资源事业部<采购部` }}
</p>
<p class="fontcss">
业务线{{ `废铁、废铝` }}
</p>
</div>
</div>
<div class="default">
<p class="fontcss">
默认登录:
<span style="margin-left: 15px;">
<a-switch v-model:checked="state.checked1" checked-children="" un-checked-children="" /></span>
</p>
<a href="http://www.hao123.com/" class="fontcss">
<span><RightCircleFilled /></span>
进入
</a>
</div>
</div>
</div>
<div class="sorter">
<a-pagination v-model:current="current" :total="50" show-less-items />
</div>
</div>
</div>
</a-tab-pane>
</a-tabs>
@ -322,6 +566,130 @@ const activeKey = ref('1')
<style scoped lang="less">
.details{
height: 1200px;
padding: 20px;
.detailstop{
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
p{
font-size: 20px;
font-weight: 800;
color: #666;
}
}
.nav{
height: 30px;
padding: 0 0 0 10px;
line-height: 30px;
background-color: rgb(249 249 249);
border: 1px solid #999;
border-color: rgb(228 228 228 / 100%);
p{
font-size: 12px;
color: #999;
span{
margin: 0 10px;
color: #666;
}
}
}
}
.main{
padding: 20px 0;
p{
font-size: 16px;
font-weight: 700;
line-height: 28px;
color: #666;
text-align: left;
}
}
.listmainbox{
display: flex;
flex-direction: column;
width:100%;
padding: 20px ;
margin-top: 30px;
border-radius: 10px;
box-shadow: 0 0 0 0.2px #8f8c8c;
}
.listmain{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.list{
width: 30%;
height: 215px;
margin-bottom: 20px;
overflow: hidden;
border-radius: 10px;
box-shadow: 0 0 0 0.2px #8f8c8c;
.fontcss{
font-size:14px;
color:#999;
}
.firm{
display:flex;
flex-direction:column;
justify-content:space-between;
height: 165px;
padding: 10px;
background-color: rgb(227 240 252 );
.firmtop{
display: flex;
.firmtopleft{
width: 70px;
height: 70px;
margin-right:15px;
img{
width: 100%;
}
}
}
}
.default{
display:flex;
align-items: flex-end;
justify-content: space-between;
height:50px;
padding: 0 10px;
a{
line-height: 50px;
}
a:hover{
color:#333;
}
}
}
}
.ant-tabs-nav-list{
width: 300px !important;
}
@ -333,7 +701,7 @@ const activeKey = ref('1')
}
.datum{
//
//
width: 100%;
margin-left: 20px;
color: #666;
@ -394,22 +762,102 @@ const activeKey = ref('1')
}
}
.messagetitle{
display: flex;
justify-content: space-between;
width: 100%;
margin: 20px 0;
font-size: 12px;
.messagetitleright{
width: 100px;
margin-right: 15px;
}
}
.dialog{
height: 400px;
margin-top: 30px;
}
.table{
width: 100%;
text-align: center;
}
.date{
padding: 20px;
font-weight: 700;
}
.sorter{
display: flex;
flex-direction: row-reverse;
}
.informbox{
display: flex;
align-items: center;
justify-content: space-between;
height: 90px;
padding:0 20px 0 0;
margin-bottom: 15px;
box-shadow:0 0.3px 0 0 ;
.informleft{
display: flex;
.informId{
font-weight: 600;
}
.informicon{
width: 50px ;
height: 50px;
margin-right: 20px;
font-size: 30px;
line-height: 50px;
color: #6666;
text-align: center;
border: 1px solid #6666;
border-radius: 50%;
}}}
.recordbox{
display: flex;
align-items: center;
justify-content: space-between;
height: 90px;
padding: 0 20px;
border: 1px solid #a1a0a0;
margin-bottom: 15px;
border: 1px solid #6666;
.recordleft{
display: flex;
.recordicon{
width: 50px ;
height: 50px;
font-size: 30px;
line-height: 50px;
color: #6666;
text-align: center;
border: 1px solid #6666;
border-radius: 50%;
}
.recordmessage{
display: flex;
flex-direction: column;
width: 300px;
margin-left: 20px;
.usersId{
font-size:20px ;
font-weight: 700;
}
}
}
}
@ -432,6 +880,10 @@ justify-content: space-between;
:where(.css-dev-only-do-not-override-176pxz6).ant-radio-button-wrapper:not(:first-child)::before {
display: none;
}
:where(.css-dev-only-do-not-override-176pxz6).ant-radio-button-wrapper:first-child{
border-inline-start: 1px solid #d9d9d9;
}
</style>

Loading…
Cancel
Save