!13 Merge branch 'develop' of <a href="https://gitee.com/Ubuntu_925/openhis-itai">https://gitee.com/Ubuntu_925/openhis-itai</a> into develop
Merge pull request !13 from 王海明/develop
2
.gitignore
vendored
@@ -56,3 +56,5 @@
|
|||||||
|
|
||||||
# 忽略设计书
|
# 忽略设计书
|
||||||
PostgreSQL/openHis_DB设计书.xlsx
|
PostgreSQL/openHis_DB设计书.xlsx
|
||||||
|
|
||||||
|
public.sql
|
||||||
68467
20251224init脚本(使用Navicat Premium 17导入).sql
Normal file
4
LICENSE
@@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least
|
|||||||
the "copyright" line and a pointer to where the full notice is found.
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
Copyright 2022-2024 武汉新致数字科技有限公司
|
Copyright 2022-2025 湖北天天数链技术有限公司
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
|
|||||||
If the program does terminal interaction, make it output a short
|
If the program does terminal interaction, make it output a short
|
||||||
notice like this when it starts in an interactive mode:
|
notice like this when it starts in an interactive mode:
|
||||||
|
|
||||||
OpenHis Copyright (C) 2022-2024 武汉新致数字科技有限公司
|
OpenHis Copyright (C) 2022-2025 湖北天天数链技术有限公司
|
||||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
This is free software, and you are welcome to redistribute it
|
This is free software, and you are welcome to redistribute it
|
||||||
under certain conditions; type `show c' for details.
|
under certain conditions; type `show c' for details.
|
||||||
|
|||||||
13908
PostgreSQL/public.sql
48
README.md
@@ -1,6 +1,50 @@
|
|||||||
# OpenHis-ITAII
|
# 平台介绍
|
||||||
|
|
||||||
|
## 🏠【关于我们】
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
天天开源致⼒于打造中国应⽤管理软件开源⽣态,⾯向医疗、企业、教育三⼤⾏业信息化需求,提供优质的开源软件产品与解决⽅案。平台现已发布OpenHIS、OpenCOM、OpenEDU系列开源产品,并持续招募⽣态合作伙伴,期待共同构建开源创新的⾏业协作模式,加速⾏业的数字化进程。
|
||||||
|
|
||||||
|
天天开源的前⾝是新致开源,最早于2022年6⽉发布开源医疗软件平台OpenHIS.org.cn,于2023年6⽉发布开源企业软件平台OpenCOM.com.cn。2025年7⽉,新致开源品牌更新为天天开源,我们始终秉持开源、专业、协作的理念,致⼒于为医疗、教育、中⼩企业等⾏业提供优质的开源解决⽅案。
|
||||||
|
|
||||||
|
了解我们:https://open.tntlinking.com/about?site=gitee
|
||||||
|
|
||||||
|
## 💾【部署包下载】
|
||||||
|
|
||||||
|
请访问官网产品中心下载部署包:https://open.tntlinking.com/resource/productCenter?site=gitee
|
||||||
|
|
||||||
|
## 📚【支持文档】
|
||||||
|
|
||||||
|
技术支持资源:https://open.tntlinking.com/resource/technicalSupport?site=gitee
|
||||||
|
(含演示环境、操作手册、部署手册、开发手册、常见问题等)
|
||||||
|
|
||||||
|
产品介绍:https://open.tntlinking.com/resource/industryKnowledge?site=gitee
|
||||||
|
|
||||||
|
操作教程:https://open.tntlinking.com/resource/operationTutorial?site=gitee
|
||||||
|
|
||||||
|
沙龙回顾:https://open.tntlinking.com/resource/openSourceSalon#23?site=gitee
|
||||||
|
|
||||||
|
## 🤝【合作方式】
|
||||||
|
|
||||||
|
产品服务价格:https://open.tntlinking.com/cost?site=gitee
|
||||||
|
|
||||||
|
加入生态伙伴:https://open.tntlinking.com/ecology/becomePartner?site=gitee
|
||||||
|
|
||||||
|
## 🤗【技术社区】
|
||||||
|
|
||||||
|
请访问官网扫码加入技术社区交流:https://open.tntlinking.com/ecology/joinCommunity?site=gitee
|
||||||
|
|
||||||
|
请关注公众号【天天开源软件】以便获得最新产品更新信息。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 项目介绍
|
||||||
|
|
||||||
|
OpenHIS医院系统(信创版)集十大核心模块于一体,涵盖目录管理、基础数据配置、个性化设置、门诊/住院全流程管理、药房药库智能管控、精细化耗材管理、财务核算体系、医保合规对接及多维报表分析等功能模块,共计372项标准化功能。
|
||||||
|
|
||||||
|
系统深度适配民营及公立一二级医院业务场景,支持单体医院、集团化运营及区域医疗协同等多种部署模式,并通过国家信创认证体系,确保全栈技术自主可控。如有项目需求,可联系官方平台合作。
|
||||||
|
|
||||||
OpenHis 信创版
|
|
||||||
|
|
||||||
|
|
||||||
## 运行环境
|
## 运行环境
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
|
|
||||||
// launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
|
|
||||||
"version": "0.0",
|
|
||||||
"configurations": [{
|
|
||||||
"default" :
|
|
||||||
{
|
|
||||||
"launchtype" : "local"
|
|
||||||
},
|
|
||||||
"mp-weixin" :
|
|
||||||
{
|
|
||||||
"launchtype" : "local"
|
|
||||||
},
|
|
||||||
"type" : "uniCloud"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
<!--
|
|
||||||
* @Description:
|
|
||||||
* @Author: zhuWanLi
|
|
||||||
* @version: 1.0.0
|
|
||||||
* @Date: 2025-03-04 13:33:32
|
|
||||||
-->
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
onLaunch: function() {
|
|
||||||
console.log('App Launch')
|
|
||||||
},
|
|
||||||
onShow: function() {
|
|
||||||
console.log('App Show')
|
|
||||||
},
|
|
||||||
onHide: function() {
|
|
||||||
console.log('App Hide')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
/*每个页面公共css */
|
|
||||||
@import "@/static/font/iconfont.css";
|
|
||||||
</style>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<script>
|
|
||||||
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
|
|
||||||
CSS.supports('top: constant(a)'))
|
|
||||||
document.write(
|
|
||||||
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
|
|
||||||
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
|
|
||||||
</script>
|
|
||||||
<title></title>
|
|
||||||
<!--preload-links-->
|
|
||||||
<!--app-context-->
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="app"><!--app-html--></div>
|
|
||||||
<script type="module" src="/main.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
import App from './App'
|
|
||||||
|
|
||||||
// #ifndef VUE3
|
|
||||||
import Vue from 'vue'
|
|
||||||
import './uni.promisify.adaptor'
|
|
||||||
Vue.config.productionTip = false
|
|
||||||
App.mpType = 'app'
|
|
||||||
const app = new Vue({
|
|
||||||
...App
|
|
||||||
})
|
|
||||||
app.$mount()
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
// #ifdef VUE3
|
|
||||||
import { createSSRApp } from 'vue'
|
|
||||||
export function createApp() {
|
|
||||||
const app = createSSRApp(App)
|
|
||||||
return {
|
|
||||||
app
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// #endif
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
{
|
|
||||||
"name" : "openhis-miniapp",
|
|
||||||
"appid" : "__UNI__FFC6C1D",
|
|
||||||
"description" : "",
|
|
||||||
"versionName" : "1.0.0",
|
|
||||||
"versionCode" : "100",
|
|
||||||
"transformPx" : false,
|
|
||||||
/* 5+App特有相关 */
|
|
||||||
"app-plus" : {
|
|
||||||
"usingComponents" : true,
|
|
||||||
"nvueStyleCompiler" : "uni-app",
|
|
||||||
"compilerVersion" : 3,
|
|
||||||
"splashscreen" : {
|
|
||||||
"alwaysShowBeforeRender" : true,
|
|
||||||
"waiting" : true,
|
|
||||||
"autoclose" : true,
|
|
||||||
"delay" : 0
|
|
||||||
},
|
|
||||||
/* 模块配置 */
|
|
||||||
"modules" : {},
|
|
||||||
/* 应用发布信息 */
|
|
||||||
"distribute" : {
|
|
||||||
/* android打包配置 */
|
|
||||||
"android" : {
|
|
||||||
"permissions" : [
|
|
||||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
|
||||||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
|
||||||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
|
||||||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
|
||||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
|
||||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
|
||||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
|
||||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
|
||||||
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
|
||||||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
|
||||||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
|
||||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
|
||||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
|
||||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
|
||||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
/* ios打包配置 */
|
|
||||||
"ios" : {},
|
|
||||||
/* SDK配置 */
|
|
||||||
"sdkConfigs" : {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
/* 快应用特有相关 */
|
|
||||||
"quickapp" : {},
|
|
||||||
/* 小程序特有相关 */
|
|
||||||
"mp-weixin" : {
|
|
||||||
"appid" : "wx595073ea953abb5c",
|
|
||||||
"setting" : {
|
|
||||||
"urlCheck" : false,
|
|
||||||
"es6" : true,
|
|
||||||
"postcss" : true,
|
|
||||||
"minified" : true
|
|
||||||
},
|
|
||||||
"usingComponents" : true
|
|
||||||
},
|
|
||||||
"mp-alipay" : {
|
|
||||||
"usingComponents" : true
|
|
||||||
},
|
|
||||||
"mp-baidu" : {
|
|
||||||
"usingComponents" : true
|
|
||||||
},
|
|
||||||
"mp-toutiao" : {
|
|
||||||
"usingComponents" : true
|
|
||||||
},
|
|
||||||
"uniStatistics" : {
|
|
||||||
"enable" : false
|
|
||||||
},
|
|
||||||
"vueVersion" : "3"
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
{
|
|
||||||
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
|
|
||||||
{
|
|
||||||
"path": "pages/index/index",
|
|
||||||
"style": {
|
|
||||||
"navigationBarTextStyle": "white",
|
|
||||||
"navigationBarTitleText": "首页"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "pages/healthCard/healthCard",
|
|
||||||
"style": {
|
|
||||||
"navigationBarTextStyle": "white",
|
|
||||||
"navigationBarTitleText": "健康卡"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "pages/personInfo/personInfo",
|
|
||||||
"style": {
|
|
||||||
"navigationBarTextStyle": "white",
|
|
||||||
"navigationBarTitleText": "个人中心"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"globalStyle": {
|
|
||||||
"navigationBarTextStyle": "white",
|
|
||||||
"backgroundColor": "#F8F8F8",
|
|
||||||
"navigationBarBackgroundColor": "#ffffff"
|
|
||||||
// "titleNView": true
|
|
||||||
},
|
|
||||||
"uniIdRouter": {},
|
|
||||||
|
|
||||||
"tabBar": {
|
|
||||||
"color": "#282828",
|
|
||||||
"selectedColor": "#00a2f3",
|
|
||||||
"borderStyle": "white",
|
|
||||||
"backgroundColor": "#ffffff",
|
|
||||||
"list": [{
|
|
||||||
"pagePath": "pages/index/index",
|
|
||||||
"iconPath": "static/images/tabbar/shouye.png",
|
|
||||||
"selectedIconPath": "static/images/tabbar/shouye_1.png",
|
|
||||||
"text": "首页"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pagePath": "pages/healthCard/healthCard",
|
|
||||||
"iconPath": "static/images/tabbar/erweima.png",
|
|
||||||
"selectedIconPath": "static/images/tabbar/erweima_1.png",
|
|
||||||
"text": "健康卡"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pagePath": "pages/personInfo/personInfo",
|
|
||||||
"iconPath": "static/images/tabbar/wode.png",
|
|
||||||
"selectedIconPath": "static/images/tabbar/wode_1.png",
|
|
||||||
"text": "个人中心"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,168 +0,0 @@
|
|||||||
<template>
|
|
||||||
<view class="service-page">
|
|
||||||
<!-- 顶部功能入口 -->
|
|
||||||
<view class="top-section">
|
|
||||||
<view class="top-item" @click="navigateTo('my-doctor')">
|
|
||||||
<image src="/static/icons/doctor.png" mode="aspectFit"></image>
|
|
||||||
<text>我的医生</text>
|
|
||||||
</view>
|
|
||||||
<view class="top-item" @click="navigateTo('online-consult')">
|
|
||||||
<image src="/static/icons/online.png" mode="aspectFit"></image>
|
|
||||||
<text>一键在线复诊</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!-- 会员中心 -->
|
|
||||||
<view class="vip-section" @click="navigateTo('vip-center')">
|
|
||||||
<image src="/static/icons/vip.png" mode="aspectFit"></image>
|
|
||||||
<text>会员中心 · 精选权益超值享</text>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!-- 服务与工具网格 -->
|
|
||||||
<view class="service-grid">
|
|
||||||
<view
|
|
||||||
class="grid-item"
|
|
||||||
v-for="(item, index) in serviceList"
|
|
||||||
:key="index"
|
|
||||||
@click="handleServiceClick(item)"
|
|
||||||
>
|
|
||||||
<image :src="item.icon" mode="aspectFit"></image>
|
|
||||||
<text>{{ item.title }}</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!-- 商务合作 -->
|
|
||||||
<view class="cooperation" @click="navigateTo('business')">
|
|
||||||
<text>商务合作</text>
|
|
||||||
<image src="/static/icons/arrow-right.png" mode="aspectFit"></image>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import { ref } from 'vue';
|
|
||||||
|
|
||||||
// 服务列表数据
|
|
||||||
const serviceList = ref([
|
|
||||||
{ id: 1, title: '收藏', icon: '/static/icons/collect.png', type: 'collect' },
|
|
||||||
{ id: 2, title: '我的医生', icon: '/static/icons/doctor.png', type: 'my-doctor' },
|
|
||||||
{ id: 3, title: '随访计划', icon: '/static/icons/follow-up.png', type: 'follow-plan' },
|
|
||||||
{ id: 4, title: '客服中心', icon: '/static/icons/service.png', type: 'customer-service' }
|
|
||||||
]);
|
|
||||||
|
|
||||||
// 处理服务点击
|
|
||||||
const handleServiceClick = (item) => {
|
|
||||||
switch(item.type) {
|
|
||||||
case 'customer-service':
|
|
||||||
uni.makePhoneCall({ phoneNumber: '400-123-4567' });
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
navigateTo(item.type);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 通用跳转方法
|
|
||||||
const navigateTo = (path) => {
|
|
||||||
uni.navigateTo({ url: `/pages/${path}/${path}` });
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.service-page {
|
|
||||||
padding: 20rpx;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-section {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin: 20rpx 0;
|
|
||||||
padding: 30rpx;
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 16rpx;
|
|
||||||
|
|
||||||
.top-item {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
width: 45%;
|
|
||||||
|
|
||||||
image {
|
|
||||||
width: 100rpx;
|
|
||||||
height: 100rpx;
|
|
||||||
margin-bottom: 20rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
text {
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.vip-section {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 30rpx;
|
|
||||||
margin: 20rpx 0;
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 16rpx;
|
|
||||||
|
|
||||||
image {
|
|
||||||
width: 60rpx;
|
|
||||||
height: 60rpx;
|
|
||||||
margin-right: 20rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
text {
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #ff9900;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-grid {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(4, 1fr);
|
|
||||||
gap: 20rpx;
|
|
||||||
padding: 30rpx;
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 16rpx;
|
|
||||||
|
|
||||||
.grid-item {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
image {
|
|
||||||
width: 80rpx;
|
|
||||||
height: 80rpx;
|
|
||||||
margin-bottom: 20rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
text {
|
|
||||||
font-size: 24rpx;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.cooperation {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: 30rpx;
|
|
||||||
margin-top: 20rpx;
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 16rpx;
|
|
||||||
|
|
||||||
text {
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
|
|
||||||
image {
|
|
||||||
width: 32rpx;
|
|
||||||
height: 32rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
<template>
|
|
||||||
<view class="content">
|
|
||||||
<!-- <image class="logo" src="/static/logo.png"></image>
|
|
||||||
<view class="text-area">
|
|
||||||
<text class="title">{{title}}</text>
|
|
||||||
</view> -->
|
|
||||||
<view :style="{visibility: showSkeleton ? 'hidden' : 'visible'}">
|
|
||||||
<!-- 导航 -->
|
|
||||||
<home-navi @goLogin="openAuto"></home-navi>
|
|
||||||
<!-- 轮播 -->
|
|
||||||
<home-swiper :dataList="dataBanner"></home-swiper>
|
|
||||||
<!-- 菜单 -->
|
|
||||||
<home-menus :dataList="dataMenus" @goLogin="openAuto"></home-menus>
|
|
||||||
<!-- 健康科普 -->
|
|
||||||
<home-article :dataList="dataArticle" @goLogin="openAuto"></home-article>
|
|
||||||
<!-- 视频课堂 -->
|
|
||||||
<home-video :dataList="dataVideo" @goLogin="openAuto"></home-video>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
title: '1111'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onLoad() {
|
|
||||||
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.content {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo {
|
|
||||||
height: 200rpx;
|
|
||||||
width: 200rpx;
|
|
||||||
margin-top: 200rpx;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
margin-bottom: 50rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-area {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.title {
|
|
||||||
font-size: 36rpx;
|
|
||||||
color: #8f8f94;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,318 +0,0 @@
|
|||||||
<template>
|
|
||||||
<view class="container">
|
|
||||||
<!-- 轮播图 -->
|
|
||||||
<swiper class="swiper-container" autoplay circular indicator-dots>
|
|
||||||
<swiper-item v-for="(item, index) in swiperList" :key="index">
|
|
||||||
<image :src="item.image" mode="aspectFill" class="swiper-image"></image>
|
|
||||||
</swiper-item>
|
|
||||||
</swiper>
|
|
||||||
<!-- 用户信息栏 -->
|
|
||||||
<!-- <view class="user-card">
|
|
||||||
<view class="user-info">
|
|
||||||
<view class="user-info-left">
|
|
||||||
<image class="avatar" src="/static/images/user.png"></image>
|
|
||||||
</view>
|
|
||||||
<text class="name">{{ currentPatient.name }}</text>
|
|
||||||
<text class="switch" @click="switchPatient">切换就诊人 ></text>
|
|
||||||
</view>
|
|
||||||
<text class="patient-id">就诊号:{{ currentPatient.id }}</text>
|
|
||||||
</view> -->
|
|
||||||
<view class="user-card">
|
|
||||||
<view class="user-info-left">
|
|
||||||
<image class="avatar" src="/static/images/user.png"></image>
|
|
||||||
<text class="name">{{ currentPatient.name }}</text>
|
|
||||||
<text class="switch-patient" @click="switchPatient">切换就诊人 ></text>
|
|
||||||
</view>
|
|
||||||
<text class="patient-id">就诊号:{{ currentPatient.id }}</text>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!-- 功能宫格区域 -->
|
|
||||||
<scroll-view scroll-y class="main-content">
|
|
||||||
<view class="grid-container">
|
|
||||||
<view class="section-title">医院服务</view>
|
|
||||||
<view class="grid-row">
|
|
||||||
<view v-for="(item, index) in firstRow" :key="index" class="grid-item"
|
|
||||||
@click="handleFunction(item)">
|
|
||||||
<image class="icon" :src="item.icon" mode="aspectFit" />
|
|
||||||
<text class="label">{{ item.label }}</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view class="grid-row">
|
|
||||||
<view v-for="(item, index) in secondRow" :key="index" class="grid-item"
|
|
||||||
@click="handleFunction(item)">
|
|
||||||
<image class="icon" :src="item.icon" mode="aspectFit" />
|
|
||||||
<text class="label">{{ item.label }}</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="section">
|
|
||||||
<view class="service-grid">
|
|
||||||
<view v-for="(item, index) in hospitalServices" :key="index" class="service-item">
|
|
||||||
<text>{{ item }}</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</scroll-view>
|
|
||||||
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
<script setup>
|
|
||||||
import {
|
|
||||||
ref,
|
|
||||||
reactive
|
|
||||||
} from 'vue';
|
|
||||||
|
|
||||||
// 轮播图数据
|
|
||||||
const swiperList = ref([{
|
|
||||||
image: '/static/shouye/lunbotu1.png'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
image: '/static/shouye/lunbotu2.png'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
image: '/static/shouye/lunbotu1.png'
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
// 当前就诊人信息
|
|
||||||
const currentPatient = reactive({
|
|
||||||
name: '张三',
|
|
||||||
id: '123456'
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
// 功能配置(示例数据)
|
|
||||||
const firstRow = ref([{
|
|
||||||
label: '健康码',
|
|
||||||
icon: '/static/icons/health-code.png',
|
|
||||||
path: '/pages/health-code'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '预约挂号',
|
|
||||||
icon: '/static/icons/appointment.png',
|
|
||||||
path: '/pages/appointment'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '当日挂号',
|
|
||||||
icon: '/static/icons/today-reg.png',
|
|
||||||
path: '/pages/today-reg'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '门诊缴费',
|
|
||||||
icon: '/static/icons/payment.png',
|
|
||||||
path: '/pages/payment'
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
|
|
||||||
const secondRow = ref([{
|
|
||||||
label: '查看报告',
|
|
||||||
icon: '/static/icons/report.png',
|
|
||||||
path: '/pages/report'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '就诊记录',
|
|
||||||
icon: '/static/icons/record.png',
|
|
||||||
path: '/pages/records'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '科室查询',
|
|
||||||
icon: '/static/icons/department.png',
|
|
||||||
path: '/pages/department'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '医生查询',
|
|
||||||
icon: '/static/icons/doctor.png',
|
|
||||||
path: '/pages/doctor'
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
|
|
||||||
// 医院服务
|
|
||||||
const hospitalServices = ref([
|
|
||||||
'医院介绍',
|
|
||||||
'国粹中医',
|
|
||||||
'惠民政策',
|
|
||||||
'特色疗法'
|
|
||||||
]);
|
|
||||||
|
|
||||||
// 底部导航
|
|
||||||
const tabItems = ref([{
|
|
||||||
text: '首页',
|
|
||||||
icon: '/static/tabs/home.png',
|
|
||||||
selectedIcon: '/static/tabs/home-active.png'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: '健康卡',
|
|
||||||
icon: '/static/tabs/health-card.png',
|
|
||||||
selectedIcon: '/static/tabs/health-card-active.png'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: '个人中心',
|
|
||||||
icon: '/static/tabs/profile.png',
|
|
||||||
selectedIcon: '/static/tabs/profile-active.png'
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
|
|
||||||
const activeTab = ref(0);
|
|
||||||
|
|
||||||
// 切换就诊人
|
|
||||||
const switchPatient = () => {
|
|
||||||
uni.navigateTo({
|
|
||||||
url: '/pages/patient/switch'
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// 处理功能点击
|
|
||||||
const handleFunction = (item) => {
|
|
||||||
if (item.path) {
|
|
||||||
uni.navigateTo({
|
|
||||||
url: item.path
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 切换底部导航
|
|
||||||
const switchTab = (index) => {
|
|
||||||
activeTab.value = index;
|
|
||||||
// 实际项目应使用路由跳转
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<style scoped>
|
|
||||||
.swiper-container {
|
|
||||||
width: 100%;
|
|
||||||
height: 300rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.swiper-image {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
object-fit: cover;
|
|
||||||
border-radius: 15rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.container {
|
|
||||||
height: 100vh;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.user-card {
|
|
||||||
/* background: linear-gradient(135deg, #6eb4ff, #007aff); */
|
|
||||||
padding: 30rpx;
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
.user-info {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding-bottom: 20rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.name {
|
|
||||||
font-size: 36rpx;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.switch {
|
|
||||||
padding-left: 10rpx;
|
|
||||||
font-size: 28rpx;
|
|
||||||
/* text-decoration: underline; */
|
|
||||||
}
|
|
||||||
|
|
||||||
.patient-id {
|
|
||||||
font-size: 28rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.main-content {
|
|
||||||
flex: 1;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.grid-container {
|
|
||||||
padding-top: 1vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
.grid-row {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 1vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
.grid-item {
|
|
||||||
width: 23%;
|
|
||||||
background: white;
|
|
||||||
border-radius: 16rpx;
|
|
||||||
padding: 20rpx;
|
|
||||||
text-align: center;
|
|
||||||
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
width: 80rpx;
|
|
||||||
height: 80rpx;
|
|
||||||
margin-bottom: 15rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.label {
|
|
||||||
font-size: 24rpx;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
|
|
||||||
.section {
|
|
||||||
background: white;
|
|
||||||
margin: 20rpx;
|
|
||||||
border-radius: 16rpx;
|
|
||||||
padding: 30rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.section-title {
|
|
||||||
font-size: 32rpx;
|
|
||||||
font-weight: bold;
|
|
||||||
margin-bottom: 30rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-grid {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(2, 1fr);
|
|
||||||
gap: 20rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-item {
|
|
||||||
background: #f8f8f8;
|
|
||||||
padding: 30rpx;
|
|
||||||
border-radius: 12rpx;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tabbar {
|
|
||||||
height: 100rpx;
|
|
||||||
background: white;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-around;
|
|
||||||
align-items: center;
|
|
||||||
box-shadow: 0 -4rpx 12rpx rgba(0, 0, 0, 0.05);
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-item {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-icon {
|
|
||||||
width: 48rpx;
|
|
||||||
height: 48rpx;
|
|
||||||
margin-bottom: 8rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.active {
|
|
||||||
color: #007aff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.avatar {
|
|
||||||
width: 120rpx;
|
|
||||||
height: 120rpx;
|
|
||||||
border-radius: 50%;
|
|
||||||
margin-right: 30rpx;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
<template>
|
|
||||||
<view class="service-item" @click="handleClick">
|
|
||||||
<image :src="icon" class="icon" />
|
|
||||||
<text class="title">{{ title }}</text>
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
icon: {
|
|
||||||
type: String,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
title: {
|
|
||||||
type: String,
|
|
||||||
required: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
handleClick() {
|
|
||||||
this.$emit('click');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.service-item {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.icon {
|
|
||||||
width: 40px;
|
|
||||||
height: 40px;
|
|
||||||
}
|
|
||||||
.title {
|
|
||||||
margin-top: 5px;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,233 +0,0 @@
|
|||||||
<template>
|
|
||||||
<view class="container">
|
|
||||||
<!-- 用户信息区域 -->
|
|
||||||
<view class="user-info">
|
|
||||||
<view class="avatar-section">
|
|
||||||
<view class="user-info-left">
|
|
||||||
<image class="avatar" src="/static/images/user.png"></image>
|
|
||||||
</view>
|
|
||||||
<view class="user-info-right">
|
|
||||||
<view class="name-section">
|
|
||||||
<view>
|
|
||||||
<text class="name">{{ currentPatient.name }}</text>
|
|
||||||
<text class="switch-patient" @click="switchPatient">切换就诊人></text>
|
|
||||||
</view>
|
|
||||||
<view class="patient-id">
|
|
||||||
<text>就诊号:{{ currentPatient.id }}</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<!-- 顶部功能入口 -->
|
|
||||||
<view class="top-section">
|
|
||||||
<view class="top-item" @click="navigateTo('my-doctor')">
|
|
||||||
<uni-icons custom-prefix="iconfont" type="my-jiaofeijilu" size="30"></uni-icons>
|
|
||||||
<text>缴费记录</text>
|
|
||||||
</view>
|
|
||||||
<view class="top-item" @click="navigateTo('my-doctor')">
|
|
||||||
<uni-icons custom-prefix="iconfont" type="my-guahaojilu" size="30"></uni-icons>
|
|
||||||
<text>挂号记录</text>
|
|
||||||
</view>
|
|
||||||
<view class="top-item" @click="navigateTo('my-doctor')">
|
|
||||||
<uni-icons custom-prefix="iconfont" type="my-jiuzhenjilu" size="30"></uni-icons>
|
|
||||||
<text>就诊记录</text>
|
|
||||||
</view>
|
|
||||||
<view class="top-item" @click="navigateTo('online-consult')">
|
|
||||||
<uni-icons custom-prefix="iconfont" type="my-wodebaogao" size="30"></uni-icons>
|
|
||||||
<text>我的报告</text>
|
|
||||||
</view>
|
|
||||||
<view class="top-item" @click="navigateTo('my-doctor')">
|
|
||||||
<uni-icons custom-prefix="iconfont" type="my-jiuzhenrenguanli" size="30"></uni-icons>
|
|
||||||
<text>就诊人管理</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<!-- 功能列表 -->
|
|
||||||
<view class="menu-list">
|
|
||||||
<navigator v-for="(item, index) in menus" :key="index" class="menu-item" :url="item.url">
|
|
||||||
<text>{{ item.label }}</text>
|
|
||||||
</navigator>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
<script setup>
|
|
||||||
import {
|
|
||||||
ref,
|
|
||||||
reactive
|
|
||||||
} from 'vue';
|
|
||||||
import {
|
|
||||||
onLoad
|
|
||||||
} from '@dcloudio/uni-app';
|
|
||||||
|
|
||||||
// 用户信息
|
|
||||||
const userInfo = reactive({
|
|
||||||
avatar: ''
|
|
||||||
});
|
|
||||||
|
|
||||||
// 当前就诊人信息
|
|
||||||
const currentPatient = ref({
|
|
||||||
name: '张三',
|
|
||||||
id: '123456'
|
|
||||||
});
|
|
||||||
|
|
||||||
// 菜单配置
|
|
||||||
const menus = ref([{
|
|
||||||
label: '缴费记录',
|
|
||||||
url: '/pages/records/payment'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '挂号记录',
|
|
||||||
url: '/pages/records/registration'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '就诊记录',
|
|
||||||
url: '/pages/records/medical'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '我的报告',
|
|
||||||
url: '/pages/records/report'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '就诊人管理',
|
|
||||||
url: '/pages/patient/manage'
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
|
|
||||||
// 处理头像点击
|
|
||||||
const handleAvatarClick = () => {
|
|
||||||
uni.chooseImage({
|
|
||||||
count: 1,
|
|
||||||
success: (res) => {
|
|
||||||
userInfo.avatar = res.tempFilePaths[0];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// 切换就诊人
|
|
||||||
const switchPatient = () => {
|
|
||||||
uni.navigateTo({
|
|
||||||
url: '/pages/patient/select'
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// 初始化数据
|
|
||||||
onLoad(() => {
|
|
||||||
// 这里可以添加请求用户数据的逻辑
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped lang='scss'>
|
|
||||||
.container {
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
min-height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 设置整个用户信息区域 */
|
|
||||||
.user-info {
|
|
||||||
background-color: #fff;
|
|
||||||
padding-top: 20rpx;
|
|
||||||
padding-left: 20rpx;
|
|
||||||
padding-right: 20rpx;
|
|
||||||
display: flex;
|
|
||||||
/* 启用Flex布局 */
|
|
||||||
justify-content: space-between;
|
|
||||||
/* 在水平上分配空间 */
|
|
||||||
align-items: center;
|
|
||||||
/* 垂直方向居中对齐 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 名字和切换按钮布局 */
|
|
||||||
.name-section {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 名字布局 */
|
|
||||||
.name {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 选择就诊人布局 */
|
|
||||||
.switch-patient {
|
|
||||||
border: #007aff;
|
|
||||||
color: #007aff;
|
|
||||||
padding-left: 10px;
|
|
||||||
font-size: 28rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 就诊号 */
|
|
||||||
.patient-id {
|
|
||||||
font-size: 26rpx;
|
|
||||||
color: #666;
|
|
||||||
padding-top: 10rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.avatar-section {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20rpx;
|
|
||||||
|
|
||||||
/* 左侧区域 */
|
|
||||||
.user-info-left {
|
|
||||||
display: flex;
|
|
||||||
/* 启用Flex布局 */
|
|
||||||
align-items: center;
|
|
||||||
/* 垂直方向居中 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 右侧区域 */
|
|
||||||
.user-info-right {
|
|
||||||
display: flex;
|
|
||||||
/* 启用Flex布局 */
|
|
||||||
align-items: center;
|
|
||||||
/* 垂直方向居中 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.avatar {
|
|
||||||
width: 120rpx;
|
|
||||||
height: 120rpx;
|
|
||||||
border-radius: 50%;
|
|
||||||
margin-right: 30rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-list {
|
|
||||||
margin-top: 20rpx;
|
|
||||||
background-color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* .menu-item {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: 30rpx;
|
|
||||||
border-bottom: 2rpx solid #eee;
|
|
||||||
} */
|
|
||||||
.top-section {
|
|
||||||
display: flex;
|
|
||||||
margin: 20rpx 0;
|
|
||||||
padding: 30rpx;
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 16rpx;
|
|
||||||
|
|
||||||
.top-item {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
width: 45%;
|
|
||||||
font-size: 25 rpx;
|
|
||||||
|
|
||||||
.image {
|
|
||||||
width: 100rpx;
|
|
||||||
height: 100rpx;
|
|
||||||
margin-bottom: 20rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text {
|
|
||||||
/* font-size: 20rpx ; */
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
@font-face {
|
|
||||||
font-family: "iconfont";
|
|
||||||
src: url('/static/font/iconfont.ttf') format('truetype');
|
|
||||||
}
|
|
||||||
|
|
||||||
.iconfont {
|
|
||||||
font-family: "iconfont" !important;
|
|
||||||
font-size: 16px;
|
|
||||||
font-style: normal;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-keshi:before {
|
|
||||||
content: "\e624";
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-yisheng_1:before {
|
|
||||||
content: "\e633";
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-menzhenjiaofei2:before {
|
|
||||||
content: "\e605";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.icon-erweima:before {
|
|
||||||
content: "\e642";
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-jinriguahao:before {
|
|
||||||
content: "\e627";
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-qiandao_:before {
|
|
||||||
content: "\e687";
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-chakanbaogao:before {
|
|
||||||
content: "\e69d";
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-homejiuzhenjilu:before {
|
|
||||||
content: "\e6b1";
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-yuyueguahao:before {
|
|
||||||
content: "\e606";
|
|
||||||
}
|
|
||||||
|
|
||||||
.my-jiuzhenjilu:before {
|
|
||||||
content: "\e61a";
|
|
||||||
}
|
|
||||||
|
|
||||||
.my-guahaojilu:before {
|
|
||||||
content: "\e718";
|
|
||||||
}
|
|
||||||
|
|
||||||
.my-wodebaogao:before {
|
|
||||||
content: "\e67a";
|
|
||||||
}
|
|
||||||
|
|
||||||
.my-jiaofeijilu:before {
|
|
||||||
content: "\e6ce";
|
|
||||||
}
|
|
||||||
|
|
||||||
.my-jiuzhenrenguanli:before {
|
|
||||||
content: "\e6a9";
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 742 B |
|
Before Width: | Height: | Size: 729 B |
|
Before Width: | Height: | Size: 725 B |
|
Before Width: | Height: | Size: 608 B |
|
Before Width: | Height: | Size: 601 B |
@@ -1,13 +0,0 @@
|
|||||||
uni.addInterceptor({
|
|
||||||
returnValue (res) {
|
|
||||||
if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) {
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
res.then((res) => {
|
|
||||||
if (!res) return resolve(res)
|
|
||||||
return res[0] ? reject(res[0]) : resolve(res[1])
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
/**
|
|
||||||
* 这里是uni-app内置的常用样式变量
|
|
||||||
*
|
|
||||||
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
|
|
||||||
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
|
|
||||||
*
|
|
||||||
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* 颜色变量 */
|
|
||||||
|
|
||||||
/* 行为相关颜色 */
|
|
||||||
$uni-color-primary: #007aff;
|
|
||||||
$uni-color-success: #4cd964;
|
|
||||||
$uni-color-warning: #f0ad4e;
|
|
||||||
$uni-color-error: #dd524d;
|
|
||||||
|
|
||||||
/* 文字基本颜色 */
|
|
||||||
$uni-text-color:#333;//基本色
|
|
||||||
$uni-text-color-inverse:#fff;//反色
|
|
||||||
$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
|
|
||||||
$uni-text-color-placeholder: #808080;
|
|
||||||
$uni-text-color-disable:#c0c0c0;
|
|
||||||
|
|
||||||
/* 背景颜色 */
|
|
||||||
$uni-bg-color:#ffffff;
|
|
||||||
$uni-bg-color-grey:#f8f8f8;
|
|
||||||
$uni-bg-color-hover:#f1f1f1;//点击状态颜色
|
|
||||||
$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
|
|
||||||
|
|
||||||
/* 边框颜色 */
|
|
||||||
$uni-border-color:#c8c7cc;
|
|
||||||
|
|
||||||
/* 尺寸变量 */
|
|
||||||
|
|
||||||
/* 文字尺寸 */
|
|
||||||
$uni-font-size-sm:12px;
|
|
||||||
$uni-font-size-base:14px;
|
|
||||||
$uni-font-size-lg:16px;
|
|
||||||
|
|
||||||
/* 图片尺寸 */
|
|
||||||
$uni-img-size-sm:20px;
|
|
||||||
$uni-img-size-base:26px;
|
|
||||||
$uni-img-size-lg:40px;
|
|
||||||
|
|
||||||
/* Border Radius */
|
|
||||||
$uni-border-radius-sm: 2px;
|
|
||||||
$uni-border-radius-base: 3px;
|
|
||||||
$uni-border-radius-lg: 6px;
|
|
||||||
$uni-border-radius-circle: 50%;
|
|
||||||
|
|
||||||
/* 水平间距 */
|
|
||||||
$uni-spacing-row-sm: 5px;
|
|
||||||
$uni-spacing-row-base: 10px;
|
|
||||||
$uni-spacing-row-lg: 15px;
|
|
||||||
|
|
||||||
/* 垂直间距 */
|
|
||||||
$uni-spacing-col-sm: 4px;
|
|
||||||
$uni-spacing-col-base: 8px;
|
|
||||||
$uni-spacing-col-lg: 12px;
|
|
||||||
|
|
||||||
/* 透明度 */
|
|
||||||
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
|
|
||||||
|
|
||||||
/* 文章场景相关 */
|
|
||||||
$uni-color-title: #2C405A; // 文章标题颜色
|
|
||||||
$uni-font-size-title:20px;
|
|
||||||
$uni-color-subtitle: #555555; // 二级标题颜色
|
|
||||||
$uni-font-size-subtitle:26px;
|
|
||||||
$uni-color-paragraph: #3F536E; // 文章段落颜色
|
|
||||||
$uni-font-size-paragraph:15px;
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
## 1.3.5(2022-01-24)
|
|
||||||
- 优化 size 属性可以传入不带单位的字符串数值
|
|
||||||
## 1.3.4(2022-01-24)
|
|
||||||
- 优化 size 支持其他单位
|
|
||||||
## 1.3.3(2022-01-17)
|
|
||||||
- 修复 nvue 有些图标不显示的bug,兼容老版本图标
|
|
||||||
## 1.3.2(2021-12-01)
|
|
||||||
- 优化 示例可复制图标名称
|
|
||||||
## 1.3.1(2021-11-23)
|
|
||||||
- 优化 兼容旧组件 type 值
|
|
||||||
## 1.3.0(2021-11-19)
|
|
||||||
- 新增 更多图标
|
|
||||||
- 优化 自定义图标使用方式
|
|
||||||
- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
|
|
||||||
- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons)
|
|
||||||
## 1.1.7(2021-11-08)
|
|
||||||
## 1.2.0(2021-07-30)
|
|
||||||
- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
|
|
||||||
## 1.1.5(2021-05-12)
|
|
||||||
- 新增 组件示例地址
|
|
||||||
## 1.1.4(2021-02-05)
|
|
||||||
- 调整为uni_modules目录规范
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
<template>
|
|
||||||
<!-- #ifdef APP-NVUE -->
|
|
||||||
<text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" @click="_onClick">{{unicode}}</text>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifndef APP-NVUE -->
|
|
||||||
<text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" :class="['uniui-'+type,customPrefix,customPrefix?type:'']" @click="_onClick"></text>
|
|
||||||
<!-- #endif -->
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import icons from './icons.js';
|
|
||||||
const getVal = (val) => {
|
|
||||||
const reg = /^[0-9]*$/g
|
|
||||||
return (typeof val === 'number' || reg.test(val) )? val + 'px' : val;
|
|
||||||
}
|
|
||||||
// #ifdef APP-NVUE
|
|
||||||
var domModule = weex.requireModule('dom');
|
|
||||||
import iconUrl from './uniicons.ttf'
|
|
||||||
domModule.addRule('fontFace', {
|
|
||||||
'fontFamily': "uniicons",
|
|
||||||
'src': "url('"+iconUrl+"')"
|
|
||||||
});
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Icons 图标
|
|
||||||
* @description 用于展示 icons 图标
|
|
||||||
* @tutorial https://ext.dcloud.net.cn/plugin?id=28
|
|
||||||
* @property {Number} size 图标大小
|
|
||||||
* @property {String} type 图标图案,参考示例
|
|
||||||
* @property {String} color 图标颜色
|
|
||||||
* @property {String} customPrefix 自定义图标
|
|
||||||
* @event {Function} click 点击 Icon 触发事件
|
|
||||||
*/
|
|
||||||
export default {
|
|
||||||
name: 'UniIcons',
|
|
||||||
emits:['click'],
|
|
||||||
props: {
|
|
||||||
type: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
color: {
|
|
||||||
type: String,
|
|
||||||
default: '#333333'
|
|
||||||
},
|
|
||||||
size: {
|
|
||||||
type: [Number, String],
|
|
||||||
default: 16
|
|
||||||
},
|
|
||||||
customPrefix:{
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
icons: icons.glyphs
|
|
||||||
}
|
|
||||||
},
|
|
||||||
computed:{
|
|
||||||
unicode(){
|
|
||||||
let code = this.icons.find(v=>v.font_class === this.type)
|
|
||||||
if(code){
|
|
||||||
return unescape(`%u${code.unicode}`)
|
|
||||||
}
|
|
||||||
return ''
|
|
||||||
},
|
|
||||||
iconSize(){
|
|
||||||
return getVal(this.size)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
_onClick() {
|
|
||||||
this.$emit('click')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss">
|
|
||||||
/* #ifndef APP-NVUE */
|
|
||||||
@import './uniicons.css';
|
|
||||||
@font-face {
|
|
||||||
font-family: uniicons;
|
|
||||||
src: url('./uniicons.ttf') format('truetype');
|
|
||||||
}
|
|
||||||
|
|
||||||
/* #endif */
|
|
||||||
.uni-icons {
|
|
||||||
font-family: uniicons;
|
|
||||||
text-decoration: none;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
@@ -1,663 +0,0 @@
|
|||||||
.uniui-color:before {
|
|
||||||
content: "\e6cf";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-wallet:before {
|
|
||||||
content: "\e6b1";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-settings-filled:before {
|
|
||||||
content: "\e6ce";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-auth-filled:before {
|
|
||||||
content: "\e6cc";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-shop-filled:before {
|
|
||||||
content: "\e6cd";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-staff-filled:before {
|
|
||||||
content: "\e6cb";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-vip-filled:before {
|
|
||||||
content: "\e6c6";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-plus-filled:before {
|
|
||||||
content: "\e6c7";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-folder-add-filled:before {
|
|
||||||
content: "\e6c8";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-color-filled:before {
|
|
||||||
content: "\e6c9";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-tune-filled:before {
|
|
||||||
content: "\e6ca";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-calendar-filled:before {
|
|
||||||
content: "\e6c0";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-notification-filled:before {
|
|
||||||
content: "\e6c1";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-wallet-filled:before {
|
|
||||||
content: "\e6c2";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-medal-filled:before {
|
|
||||||
content: "\e6c3";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-gift-filled:before {
|
|
||||||
content: "\e6c4";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-fire-filled:before {
|
|
||||||
content: "\e6c5";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-refreshempty:before {
|
|
||||||
content: "\e6bf";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-location-filled:before {
|
|
||||||
content: "\e6af";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-person-filled:before {
|
|
||||||
content: "\e69d";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-personadd-filled:before {
|
|
||||||
content: "\e698";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-back:before {
|
|
||||||
content: "\e6b9";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-forward:before {
|
|
||||||
content: "\e6ba";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-arrow-right:before {
|
|
||||||
content: "\e6bb";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-arrowthinright:before {
|
|
||||||
content: "\e6bb";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-arrow-left:before {
|
|
||||||
content: "\e6bc";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-arrowthinleft:before {
|
|
||||||
content: "\e6bc";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-arrow-up:before {
|
|
||||||
content: "\e6bd";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-arrowthinup:before {
|
|
||||||
content: "\e6bd";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-arrow-down:before {
|
|
||||||
content: "\e6be";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-arrowthindown:before {
|
|
||||||
content: "\e6be";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-bottom:before {
|
|
||||||
content: "\e6b8";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-arrowdown:before {
|
|
||||||
content: "\e6b8";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-right:before {
|
|
||||||
content: "\e6b5";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-arrowright:before {
|
|
||||||
content: "\e6b5";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-top:before {
|
|
||||||
content: "\e6b6";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-arrowup:before {
|
|
||||||
content: "\e6b6";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-left:before {
|
|
||||||
content: "\e6b7";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-arrowleft:before {
|
|
||||||
content: "\e6b7";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-eye:before {
|
|
||||||
content: "\e651";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-eye-filled:before {
|
|
||||||
content: "\e66a";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-eye-slash:before {
|
|
||||||
content: "\e6b3";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-eye-slash-filled:before {
|
|
||||||
content: "\e6b4";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-info-filled:before {
|
|
||||||
content: "\e649";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-reload:before {
|
|
||||||
content: "\e6b2";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-micoff-filled:before {
|
|
||||||
content: "\e6b0";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-map-pin-ellipse:before {
|
|
||||||
content: "\e6ac";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-map-pin:before {
|
|
||||||
content: "\e6ad";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-location:before {
|
|
||||||
content: "\e6ae";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-starhalf:before {
|
|
||||||
content: "\e683";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-star:before {
|
|
||||||
content: "\e688";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-star-filled:before {
|
|
||||||
content: "\e68f";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-calendar:before {
|
|
||||||
content: "\e6a0";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-fire:before {
|
|
||||||
content: "\e6a1";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-medal:before {
|
|
||||||
content: "\e6a2";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-font:before {
|
|
||||||
content: "\e6a3";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-gift:before {
|
|
||||||
content: "\e6a4";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-link:before {
|
|
||||||
content: "\e6a5";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-notification:before {
|
|
||||||
content: "\e6a6";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-staff:before {
|
|
||||||
content: "\e6a7";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-vip:before {
|
|
||||||
content: "\e6a8";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-folder-add:before {
|
|
||||||
content: "\e6a9";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-tune:before {
|
|
||||||
content: "\e6aa";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-auth:before {
|
|
||||||
content: "\e6ab";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-person:before {
|
|
||||||
content: "\e699";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-email-filled:before {
|
|
||||||
content: "\e69a";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-phone-filled:before {
|
|
||||||
content: "\e69b";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-phone:before {
|
|
||||||
content: "\e69c";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-email:before {
|
|
||||||
content: "\e69e";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-personadd:before {
|
|
||||||
content: "\e69f";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-chatboxes-filled:before {
|
|
||||||
content: "\e692";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-contact:before {
|
|
||||||
content: "\e693";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-chatbubble-filled:before {
|
|
||||||
content: "\e694";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-contact-filled:before {
|
|
||||||
content: "\e695";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-chatboxes:before {
|
|
||||||
content: "\e696";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-chatbubble:before {
|
|
||||||
content: "\e697";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-upload-filled:before {
|
|
||||||
content: "\e68e";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-upload:before {
|
|
||||||
content: "\e690";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-weixin:before {
|
|
||||||
content: "\e691";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-compose:before {
|
|
||||||
content: "\e67f";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-qq:before {
|
|
||||||
content: "\e680";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-download-filled:before {
|
|
||||||
content: "\e681";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-pyq:before {
|
|
||||||
content: "\e682";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-sound:before {
|
|
||||||
content: "\e684";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-trash-filled:before {
|
|
||||||
content: "\e685";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-sound-filled:before {
|
|
||||||
content: "\e686";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-trash:before {
|
|
||||||
content: "\e687";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-videocam-filled:before {
|
|
||||||
content: "\e689";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-spinner-cycle:before {
|
|
||||||
content: "\e68a";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-weibo:before {
|
|
||||||
content: "\e68b";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-videocam:before {
|
|
||||||
content: "\e68c";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-download:before {
|
|
||||||
content: "\e68d";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-help:before {
|
|
||||||
content: "\e679";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-navigate-filled:before {
|
|
||||||
content: "\e67a";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-plusempty:before {
|
|
||||||
content: "\e67b";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-smallcircle:before {
|
|
||||||
content: "\e67c";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-minus-filled:before {
|
|
||||||
content: "\e67d";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-micoff:before {
|
|
||||||
content: "\e67e";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-closeempty:before {
|
|
||||||
content: "\e66c";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-clear:before {
|
|
||||||
content: "\e66d";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-navigate:before {
|
|
||||||
content: "\e66e";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-minus:before {
|
|
||||||
content: "\e66f";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-image:before {
|
|
||||||
content: "\e670";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-mic:before {
|
|
||||||
content: "\e671";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-paperplane:before {
|
|
||||||
content: "\e672";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-close:before {
|
|
||||||
content: "\e673";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-help-filled:before {
|
|
||||||
content: "\e674";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-paperplane-filled:before {
|
|
||||||
content: "\e675";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-plus:before {
|
|
||||||
content: "\e676";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-mic-filled:before {
|
|
||||||
content: "\e677";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-image-filled:before {
|
|
||||||
content: "\e678";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-locked-filled:before {
|
|
||||||
content: "\e668";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-info:before {
|
|
||||||
content: "\e669";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-locked:before {
|
|
||||||
content: "\e66b";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-camera-filled:before {
|
|
||||||
content: "\e658";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-chat-filled:before {
|
|
||||||
content: "\e659";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-camera:before {
|
|
||||||
content: "\e65a";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-circle:before {
|
|
||||||
content: "\e65b";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-checkmarkempty:before {
|
|
||||||
content: "\e65c";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-chat:before {
|
|
||||||
content: "\e65d";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-circle-filled:before {
|
|
||||||
content: "\e65e";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-flag:before {
|
|
||||||
content: "\e65f";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-flag-filled:before {
|
|
||||||
content: "\e660";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-gear-filled:before {
|
|
||||||
content: "\e661";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-home:before {
|
|
||||||
content: "\e662";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-home-filled:before {
|
|
||||||
content: "\e663";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-gear:before {
|
|
||||||
content: "\e664";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-smallcircle-filled:before {
|
|
||||||
content: "\e665";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-map-filled:before {
|
|
||||||
content: "\e666";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-map:before {
|
|
||||||
content: "\e667";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-refresh-filled:before {
|
|
||||||
content: "\e656";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-refresh:before {
|
|
||||||
content: "\e657";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-cloud-upload:before {
|
|
||||||
content: "\e645";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-cloud-download-filled:before {
|
|
||||||
content: "\e646";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-cloud-download:before {
|
|
||||||
content: "\e647";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-cloud-upload-filled:before {
|
|
||||||
content: "\e648";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-redo:before {
|
|
||||||
content: "\e64a";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-images-filled:before {
|
|
||||||
content: "\e64b";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-undo-filled:before {
|
|
||||||
content: "\e64c";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-more:before {
|
|
||||||
content: "\e64d";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-more-filled:before {
|
|
||||||
content: "\e64e";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-undo:before {
|
|
||||||
content: "\e64f";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-images:before {
|
|
||||||
content: "\e650";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-paperclip:before {
|
|
||||||
content: "\e652";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-settings:before {
|
|
||||||
content: "\e653";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-search:before {
|
|
||||||
content: "\e654";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-redo-filled:before {
|
|
||||||
content: "\e655";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-list:before {
|
|
||||||
content: "\e644";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-mail-open-filled:before {
|
|
||||||
content: "\e63a";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-hand-down-filled:before {
|
|
||||||
content: "\e63c";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-hand-down:before {
|
|
||||||
content: "\e63d";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-hand-up-filled:before {
|
|
||||||
content: "\e63e";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-hand-up:before {
|
|
||||||
content: "\e63f";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-heart-filled:before {
|
|
||||||
content: "\e641";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-mail-open:before {
|
|
||||||
content: "\e643";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-heart:before {
|
|
||||||
content: "\e639";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-loop:before {
|
|
||||||
content: "\e633";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-pulldown:before {
|
|
||||||
content: "\e632";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-scan:before {
|
|
||||||
content: "\e62a";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-bars:before {
|
|
||||||
content: "\e627";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-cart-filled:before {
|
|
||||||
content: "\e629";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-checkbox:before {
|
|
||||||
content: "\e62b";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-checkbox-filled:before {
|
|
||||||
content: "\e62c";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-shop:before {
|
|
||||||
content: "\e62f";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-headphones:before {
|
|
||||||
content: "\e630";
|
|
||||||
}
|
|
||||||
|
|
||||||
.uniui-cart:before {
|
|
||||||
content: "\e631";
|
|
||||||
}
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "uni-icons",
|
|
||||||
"displayName": "uni-icons 图标",
|
|
||||||
"version": "1.3.5",
|
|
||||||
"description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。",
|
|
||||||
"keywords": [
|
|
||||||
"uni-ui",
|
|
||||||
"uniui",
|
|
||||||
"icon",
|
|
||||||
"图标"
|
|
||||||
],
|
|
||||||
"repository": "https://github.com/dcloudio/uni-ui",
|
|
||||||
"engines": {
|
|
||||||
"HBuilderX": "^3.2.14"
|
|
||||||
},
|
|
||||||
"directories": {
|
|
||||||
"example": "../../temps/example_temps"
|
|
||||||
},
|
|
||||||
"dcloudext": {
|
|
||||||
"category": [
|
|
||||||
"前端组件",
|
|
||||||
"通用组件"
|
|
||||||
],
|
|
||||||
"sale": {
|
|
||||||
"regular": {
|
|
||||||
"price": "0.00"
|
|
||||||
},
|
|
||||||
"sourcecode": {
|
|
||||||
"price": "0.00"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"contact": {
|
|
||||||
"qq": ""
|
|
||||||
},
|
|
||||||
"declaration": {
|
|
||||||
"ads": "无",
|
|
||||||
"data": "无",
|
|
||||||
"permissions": "无"
|
|
||||||
},
|
|
||||||
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
|
|
||||||
},
|
|
||||||
"uni_modules": {
|
|
||||||
"dependencies": ["uni-scss"],
|
|
||||||
"encrypt": [],
|
|
||||||
"platforms": {
|
|
||||||
"cloud": {
|
|
||||||
"tcb": "y",
|
|
||||||
"aliyun": "y"
|
|
||||||
},
|
|
||||||
"client": {
|
|
||||||
"App": {
|
|
||||||
"app-vue": "y",
|
|
||||||
"app-nvue": "y"
|
|
||||||
},
|
|
||||||
"H5-mobile": {
|
|
||||||
"Safari": "y",
|
|
||||||
"Android Browser": "y",
|
|
||||||
"微信浏览器(Android)": "y",
|
|
||||||
"QQ浏览器(Android)": "y"
|
|
||||||
},
|
|
||||||
"H5-pc": {
|
|
||||||
"Chrome": "y",
|
|
||||||
"IE": "y",
|
|
||||||
"Edge": "y",
|
|
||||||
"Firefox": "y",
|
|
||||||
"Safari": "y"
|
|
||||||
},
|
|
||||||
"小程序": {
|
|
||||||
"微信": "y",
|
|
||||||
"阿里": "y",
|
|
||||||
"百度": "y",
|
|
||||||
"字节跳动": "y",
|
|
||||||
"QQ": "y"
|
|
||||||
},
|
|
||||||
"快应用": {
|
|
||||||
"华为": "u",
|
|
||||||
"联盟": "u"
|
|
||||||
},
|
|
||||||
"Vue": {
|
|
||||||
"vue2": "y",
|
|
||||||
"vue3": "y"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
## Icons 图标
|
|
||||||
> **组件名:uni-icons**
|
|
||||||
> 代码块: `uIcons`
|
|
||||||
|
|
||||||
用于展示 icons 图标 。
|
|
||||||
|
|
||||||
### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons)
|
|
||||||
#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
|
|
||||||
@@ -21,7 +21,7 @@ import com.core.framework.web.service.SysPermissionService;
|
|||||||
import com.core.framework.web.service.TokenService;
|
import com.core.framework.web.service.TokenService;
|
||||||
import com.core.system.service.ISysMenuService;
|
import com.core.system.service.ISysMenuService;
|
||||||
|
|
||||||
/**
|
/**已评审
|
||||||
* 登录验证
|
* 登录验证
|
||||||
*
|
*
|
||||||
* @author system
|
* @author system
|
||||||
@@ -40,7 +40,7 @@ public class SysLoginController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private TokenService tokenService;
|
private TokenService tokenService;
|
||||||
|
|
||||||
/**
|
/**已评审
|
||||||
* 登录方法
|
* 登录方法
|
||||||
*
|
*
|
||||||
* @param loginBody 登录信息
|
* @param loginBody 登录信息
|
||||||
@@ -51,12 +51,12 @@ public class SysLoginController {
|
|||||||
AjaxResult ajax = AjaxResult.success();
|
AjaxResult ajax = AjaxResult.success();
|
||||||
// 生成令牌
|
// 生成令牌
|
||||||
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
|
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
|
||||||
loginBody.getUuid());
|
loginBody.getUuid(), loginBody.getTenantId());
|
||||||
ajax.put(Constants.TOKEN, token);
|
ajax.put(Constants.TOKEN, token);
|
||||||
return ajax;
|
return ajax;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**已评审 整个admin合拼到app层
|
||||||
* 获取用户信息
|
* 获取用户信息
|
||||||
*
|
*
|
||||||
* @return 用户信息
|
* @return 用户信息
|
||||||
@@ -74,6 +74,8 @@ public class SysLoginController {
|
|||||||
tokenService.refreshToken(loginUser);
|
tokenService.refreshToken(loginUser);
|
||||||
}
|
}
|
||||||
AjaxResult ajax = AjaxResult.success();
|
AjaxResult ajax = AjaxResult.success();
|
||||||
|
ajax.put("optionJson", loginUser.getOptionJson());
|
||||||
|
ajax.put("practitionerId", String.valueOf(loginUser.getPractitionerId()));
|
||||||
ajax.put("user", user);
|
ajax.put("user", user);
|
||||||
ajax.put("roles", roles);
|
ajax.put("roles", roles);
|
||||||
ajax.put("permissions", permissions);
|
ajax.put("permissions", permissions);
|
||||||
@@ -0,0 +1,198 @@
|
|||||||
|
package com.core.web.controller.system;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.core.common.annotation.Anonymous;
|
||||||
|
import com.core.common.core.controller.BaseController;
|
||||||
|
import com.core.common.core.domain.R;
|
||||||
|
import com.core.common.core.domain.entity.SysUser;
|
||||||
|
import com.core.system.domain.SysTenant;
|
||||||
|
import com.core.system.service.ISysTenantService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 租户信息controller
|
||||||
|
*
|
||||||
|
* @author system
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/system/tenant")
|
||||||
|
public class SysTenantController extends BaseController {
|
||||||
|
@Autowired
|
||||||
|
private ISysTenantService sysTenantService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询租户分页列表
|
||||||
|
*
|
||||||
|
* @param tenantId 租户ID查询
|
||||||
|
* @param tenantCode 租户编码模糊查询
|
||||||
|
* @param tenantName 租户名称模糊查询
|
||||||
|
* @param status 状态
|
||||||
|
* @param pageNum 当前页
|
||||||
|
* @param pageSize 每页多少条
|
||||||
|
* @return 租户分页列表
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@GetMapping("/page")
|
||||||
|
public R<IPage<SysTenant>> getTenantPage(@RequestParam(required = false) Integer tenantId,
|
||||||
|
@RequestParam(required = false) String tenantCode, @RequestParam(required = false) String tenantName,
|
||||||
|
@RequestParam(required = false) String status, @RequestParam(defaultValue = "1") Integer pageNum,
|
||||||
|
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||||
|
return sysTenantService.getTenantPage(tenantId, tenantCode, tenantName, status, pageNum, pageSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询租户详情
|
||||||
|
*
|
||||||
|
* @param tenantId 租户ID
|
||||||
|
* @return 租户分页列表
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@GetMapping("/{tenantId}")
|
||||||
|
public R<SysTenant> getTenantDetail(@PathVariable Integer tenantId) {
|
||||||
|
return R.ok(sysTenantService.getById(tenantId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询租户所属用户分页列表
|
||||||
|
*
|
||||||
|
* @param tenantId 租户ID查询
|
||||||
|
* @param userName 用户昵称模糊查询
|
||||||
|
* @param nickName 用户昵称模糊查询
|
||||||
|
* @param phoneNumber 手机号码模糊查询
|
||||||
|
* @param pageNum 当前页
|
||||||
|
* @param pageSize 每页多少条
|
||||||
|
* @return 租户所属用户分页列表
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@GetMapping("/user/page")
|
||||||
|
public R<IPage<SysUser>> getTenantUserPage(@RequestParam(required = false) Integer tenantId,
|
||||||
|
@RequestParam(required = false) String userName, @RequestParam(required = false) String nickName,
|
||||||
|
@RequestParam(required = false) String phoneNumber, @RequestParam(defaultValue = "1") Integer pageNum,
|
||||||
|
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||||
|
return sysTenantService.getTenantUserPage(tenantId, userName, nickName, phoneNumber, pageNum, pageSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增租户
|
||||||
|
*
|
||||||
|
* @param sysTenant 租户实体
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@PostMapping
|
||||||
|
public R<?> addTenant(@RequestBody SysTenant sysTenant) {
|
||||||
|
sysTenantService.save(sysTenant);
|
||||||
|
return R.ok("新增成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改租户
|
||||||
|
*
|
||||||
|
* @param sysTenant 租户实体
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@PutMapping
|
||||||
|
public R<?> editTenant(@RequestBody SysTenant sysTenant) {
|
||||||
|
sysTenantService.updateById(sysTenant);
|
||||||
|
return R.ok("修改成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除租户
|
||||||
|
*
|
||||||
|
* @param tenantIdList 租户ID列表
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@DeleteMapping
|
||||||
|
public R<?> delTenant(@RequestBody List<Integer> tenantIdList) {
|
||||||
|
return sysTenantService.delTenant(tenantIdList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 启用租户
|
||||||
|
*
|
||||||
|
* @param tenantIdList 租户ID列表
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@PutMapping("/enable")
|
||||||
|
public R<?> enableTenant(@RequestBody List<Integer> tenantIdList) {
|
||||||
|
sysTenantService.enableTenant(tenantIdList);
|
||||||
|
return R.ok("启用成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 停用租户
|
||||||
|
*
|
||||||
|
* @param tenantIdList 租户ID列表
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@PutMapping("/disable")
|
||||||
|
public R<?> disableTenant(@RequestBody List<Integer> tenantIdList) {
|
||||||
|
sysTenantService.disableTenant(tenantIdList);
|
||||||
|
return R.ok("停用成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询租户未绑定的用户列表
|
||||||
|
*
|
||||||
|
* @param tenantId 租户ID
|
||||||
|
* @param pageNum 当前页
|
||||||
|
* @param pageSize 每页多少条
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@GetMapping("/{tenantId}/unbind-users")
|
||||||
|
public R<IPage<SysUser>> getUnbindTenantUserList(@PathVariable Integer tenantId,
|
||||||
|
@RequestParam(required = false) String userName, @RequestParam(required = false) String nickName,
|
||||||
|
@RequestParam(required = false) String phoneNumber, @RequestParam(defaultValue = "1") Integer pageNum,
|
||||||
|
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||||
|
return sysTenantService.getUnbindTenantUserList(tenantId, userName, nickName, phoneNumber, pageNum, pageSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绑定租户用户
|
||||||
|
*
|
||||||
|
* @param tenantId 租户ID
|
||||||
|
* @param userIdList 用户ID列表
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@PostMapping("/{tenantId}/bind-users")
|
||||||
|
public R<?> bindTenantUser(@PathVariable Integer tenantId, @RequestBody List<Long> userIdList) {
|
||||||
|
return sysTenantService.bindTenantUser(tenantId, userIdList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解绑租户用户
|
||||||
|
*
|
||||||
|
* @param tenantId 租户ID
|
||||||
|
* @param userIdList 用户ID列表
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@PostMapping("/{tenantId}/unbind-users")
|
||||||
|
public R<?> unbindTenantUser(@PathVariable Integer tenantId, @RequestBody List<Long> userIdList) {
|
||||||
|
return sysTenantService.unbindTenantUser(tenantId, userIdList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询用户绑定的租户列表
|
||||||
|
*
|
||||||
|
* @param username 用户账号
|
||||||
|
* @return 用户绑定的租户列表
|
||||||
|
*/
|
||||||
|
@Anonymous
|
||||||
|
@GetMapping("/user-bind/{username}")
|
||||||
|
public R<List<SysTenant>> getUserBindTenantList(@PathVariable String username) {
|
||||||
|
return sysTenantService.getUserBindTenantList(username);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
package com.core.web.controller.system;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import com.core.common.core.controller.BaseController;
|
||||||
|
import com.core.common.core.domain.R;
|
||||||
|
import com.core.system.domain.dto.SaveTenantOptionDetailDto;
|
||||||
|
import com.core.system.domain.dto.TenantOptionDto;
|
||||||
|
import com.core.system.service.ISysTenantOptionService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 租户配置项信息controller
|
||||||
|
*
|
||||||
|
* @author system
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/system/tenant-option")
|
||||||
|
public class SysTenantOptionController extends BaseController {
|
||||||
|
@Autowired
|
||||||
|
private ISysTenantOptionService sysTenantOptionService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询租户配置项详情列表
|
||||||
|
*
|
||||||
|
* @param tenantId 租户ID
|
||||||
|
* @return 租户配置项详情列表
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@GetMapping("/detail-list/{tenantId}")
|
||||||
|
public R<List<TenantOptionDto>> getTenantOptionDetailList(@PathVariable Integer tenantId) {
|
||||||
|
return R.ok(sysTenantOptionService.getTenantOptionDetailList(tenantId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存租户配置项详情列表
|
||||||
|
*
|
||||||
|
* @param saveTenantOptionDetailDto 参数DTO
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@PostMapping("/detail-list")
|
||||||
|
public R<?> saveTenantOptionDetailList(@RequestBody SaveTenantOptionDetailDto saveTenantOptionDetailDto) {
|
||||||
|
return sysTenantOptionService.saveTenantOptionDetailList(saveTenantOptionDetailDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询租户配置项前端form表单列表
|
||||||
|
*
|
||||||
|
* @return 租户配置项前端form表单列表
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@GetMapping("/form-list")
|
||||||
|
public R<?> getTenantOptionFormList() {
|
||||||
|
return R.ok(sysTenantOptionService.getTenantOptionFormList());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package com.core.web.util;
|
||||||
|
|
||||||
|
import com.core.common.core.domain.model.LoginUser;
|
||||||
|
import com.core.common.enums.TenantOptionDict;
|
||||||
|
import com.core.common.utils.SecurityUtils;
|
||||||
|
import com.core.common.utils.StringUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 租户配置工具类
|
||||||
|
*
|
||||||
|
* @author system
|
||||||
|
*/
|
||||||
|
public class TenantOptionUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取租户配置项内容
|
||||||
|
*
|
||||||
|
* @param optionDict 租户配置项字典
|
||||||
|
* @return 租户配置项内容
|
||||||
|
*/
|
||||||
|
public static String getOptionContent(TenantOptionDict optionDict) {
|
||||||
|
LoginUser loginUser;
|
||||||
|
try {
|
||||||
|
loginUser = SecurityUtils.getLoginUser();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (loginUser == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (loginUser.getOptionMap() == null || loginUser.getOptionMap().isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// return loginUser.getOptionMap().get(optionDict.getCode());
|
||||||
|
|
||||||
|
// TODO:2025/10/17 李永兴提出的sys_option切换TenantOption临时防止报错方案,最晚2025年11月底删除
|
||||||
|
String newValue = loginUser.getOptionMap().get(optionDict.getCode());
|
||||||
|
String oldValue = loginUser.getOptionJson().getString(optionDict.getCode());
|
||||||
|
return StringUtils.isEmpty(newValue) ? oldValue : newValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
149
openhis-server-new/core-common/pom.xml
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<groupId>com.openhis</groupId>
|
||||||
|
<artifactId>openhis-server</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>com.core</groupId>
|
||||||
|
<artifactId>core-common</artifactId>
|
||||||
|
|
||||||
|
<description>
|
||||||
|
common通用工具
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<!-- mybatis-plus 增强CRUD -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.baomidou</groupId>
|
||||||
|
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- lombok -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Spring框架基本的核心工具 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-context-support</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- SpringWeb模块 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- spring security 安全认证 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-security</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- pagehelper 分页插件 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.pagehelper</groupId>
|
||||||
|
<artifactId>pagehelper-spring-boot-starter</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 自定义验证注解 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-validation</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!--常用工具类 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-lang3</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- JSON工具类 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-databind</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 阿里JSON解析器 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.fastjson2</groupId>
|
||||||
|
<artifactId>fastjson2</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- io常用工具类 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-io</groupId>
|
||||||
|
<artifactId>commons-io</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- excel工具 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi-ooxml</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- yml解析器 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.yaml</groupId>
|
||||||
|
<artifactId>snakeyaml</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Token生成与解析-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.jsonwebtoken</groupId>
|
||||||
|
<artifactId>jjwt</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Jaxb -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.xml.bind</groupId>
|
||||||
|
<artifactId>jaxb-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- redis 缓存操作 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- pool 对象池 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-pool2</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 解析客户端操作系统、浏览器等 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>eu.bitwalker</groupId>
|
||||||
|
<artifactId>UserAgentUtils</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- servlet包 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>javax.servlet-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 中文汉字转换为首字母拼音包 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.belerweb</groupId>
|
||||||
|
<artifactId>pinyin4j</artifactId>
|
||||||
|
<version>2.5.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.core.common.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Excel额外表头信息注解
|
||||||
|
*
|
||||||
|
* @author swb
|
||||||
|
*/
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Documented
|
||||||
|
public @interface ExcelExtra {
|
||||||
|
/**
|
||||||
|
* 表头名称
|
||||||
|
*/
|
||||||
|
String name();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期格式,如:yyyy-MM-dd HH:mm:ss
|
||||||
|
*/
|
||||||
|
String dateFormat() default "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序(越小越靠前)
|
||||||
|
*/
|
||||||
|
int sort() default 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认值
|
||||||
|
*/
|
||||||
|
String defaultValue() default "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否导出
|
||||||
|
*/
|
||||||
|
boolean isExport() default true;
|
||||||
|
}
|
||||||
@@ -41,6 +41,11 @@ public class CacheConstants {
|
|||||||
*/
|
*/
|
||||||
public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
|
public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录上次勾选的租户
|
||||||
|
*/
|
||||||
|
public static final String LOGIN_SELECTED_TENANT = "login_selected_tenant:";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 超出上限,排番失败(时间:{},KEY:{}
|
* 超出上限,排番失败(时间:{},KEY:{}
|
||||||
*/
|
*/
|
||||||
@@ -163,7 +163,7 @@ public class Constants {
|
|||||||
/**
|
/**
|
||||||
* 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
|
* 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
|
||||||
*/
|
*/
|
||||||
public static final String[] JOB_WHITELIST_STR = {"com.core.quartz.task"};
|
public static final String[] JOB_WHITELIST_STR = {"com.openhis.quartz.task"};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 定时任务违规的字符
|
* 定时任务违规的字符
|
||||||