dev
This commit is contained in:
parent
48c69fa2a0
commit
440849475b
|
|
@ -0,0 +1,89 @@
|
||||||
|
<template>
|
||||||
|
<div class="auth">
|
||||||
|
<el-form ref="ruleFormRef" model="ciphertext" label-width="auto"
|
||||||
|
class="demo-ruleForm" status-icon>
|
||||||
|
<el-input
|
||||||
|
v-model="ciphertext"
|
||||||
|
maxlength="400"
|
||||||
|
placeholder="Please input"
|
||||||
|
show-word-limit
|
||||||
|
:autosize="{ minRows: 8, maxRows: 20 }"
|
||||||
|
type="textarea"
|
||||||
|
@input="parsing"
|
||||||
|
/>
|
||||||
|
<div class="btn">
|
||||||
|
<el-button type="primary" @click="save">保存</el-button>
|
||||||
|
</div>
|
||||||
|
</el-form>
|
||||||
|
<el-descriptions title="解析后的数据" size="small" :column="2" border v-if="flag">
|
||||||
|
<el-descriptions-item
|
||||||
|
align="center"
|
||||||
|
label="定点机构编码"
|
||||||
|
:span="2"
|
||||||
|
>
|
||||||
|
{{ decryptedText.fixmedinsCode }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item
|
||||||
|
align="center"
|
||||||
|
label="证书创建时间"
|
||||||
|
>
|
||||||
|
{{ decryptedText.createDate }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item
|
||||||
|
align="center"
|
||||||
|
label="证书过期时间"
|
||||||
|
>
|
||||||
|
{{ decryptedText.expiryDate }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import {post} from "@/utils/request.ts";
|
||||||
|
import {onMounted, onUnmounted, ref} from "vue";
|
||||||
|
import {ElMessage} from "element-plus";
|
||||||
|
|
||||||
|
const decryptedText = ref<any>({})
|
||||||
|
const ciphertext = ref<string>('')
|
||||||
|
const flag = ref<any>(false)
|
||||||
|
|
||||||
|
const parsing = () => {
|
||||||
|
if (ciphertext.value) {
|
||||||
|
post("common/config/parsing", {ciphertext: ciphertext.value}).then((res: any) => {
|
||||||
|
decryptedText.value = res;
|
||||||
|
flag.value = true;
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
flag.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const save = () => {
|
||||||
|
if (ciphertext.value) {
|
||||||
|
post("common/config/setcert", {encryptedText: ciphertext.value}).then((res: any) => {
|
||||||
|
ElMessage.success("保存成功")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const get = () => {
|
||||||
|
|
||||||
|
}
|
||||||
|
onMounted(async () => {
|
||||||
|
post("common/config/get", {key: 'common_cert'}).then((res: any) => {
|
||||||
|
ciphertext.value = res.val;
|
||||||
|
parsing()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.auth {
|
||||||
|
margin: 0 auto;
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
margin: 24px 0;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -17,37 +17,37 @@
|
||||||
:column="1"
|
:column="1"
|
||||||
border
|
border
|
||||||
>
|
>
|
||||||
<el-descriptions-item label="主诉">
|
<el-descriptions-item :width="140" label="主诉">
|
||||||
<div>{{ formDate.mainAppeal}}</div>
|
<div>{{ formDate.mainAppeal}}</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="诊断">
|
<el-descriptions-item :width="140" label="诊断">
|
||||||
<div>{{ formDate.diagnosisSummary}}</div>
|
<div>{{ formDate.diagnosisSummary}}</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="现病史">
|
<el-descriptions-item :width="140" label="现病史">
|
||||||
<div>{{ formDate.nowMedicalHistory}}</div>
|
<div>{{ formDate.nowMedicalHistory}}</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="既往史">
|
<el-descriptions-item :width="140" label="既往史">
|
||||||
<div>{{ formDate.beforeMedicalHistory}}</div>
|
<div>{{ formDate.beforeMedicalHistory}}</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="过敏史">
|
<el-descriptions-item :width="140" label="过敏史">
|
||||||
<div>{{ formDate.allergyHistory}}</div>
|
<div>{{ formDate.allergyHistory}}</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="体格检查">
|
<el-descriptions-item :width="140" label="体格检查">
|
||||||
<div>{{ formDate.exam}}</div>
|
<div>{{ formDate.exam}}</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="望闻问切" v-if="modelType==1">
|
<el-descriptions-item :width="140" label="望闻问切" v-if="modelType==1">
|
||||||
<div>{{ formDate.chinaAdjunctCheck}}</div>
|
<div>{{ formDate.chinaAdjunctCheck}}</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="法制" v-if="modelType==1">
|
<el-descriptions-item :width="140" label="法制" v-if="modelType==1">
|
||||||
<div>{{ formDate.chinaDeal}}</div>
|
<div>{{ formDate.chinaDeal}}</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="口腔检查" v-if="modelType==2">
|
<el-descriptions-item :width="140" label="口腔检查" v-if="modelType==2">
|
||||||
<div>{{ formDate.mouthCheck}}</div>
|
<div>{{ formDate.mouthCheck}}</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="辅助检查" v-if="modelType==2 || modelType ==0">
|
<el-descriptions-item :width="140" label="辅助检查" v-if="modelType==2 || modelType ==0">
|
||||||
<div>{{ formDate.adjunctCheck}}</div>
|
<div>{{ formDate.adjunctCheck}}</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="处置" v-if="modelType==0 || modelType ==2">
|
<el-descriptions-item :width="140" label="处置" v-if="modelType==0 || modelType ==2">
|
||||||
<div>{{ formDate.deal}}</div>
|
<div>{{ formDate.deal}}</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
import Panel from '../common/Panel.vue';
|
import Panel from '../common/Panel.vue';
|
||||||
import {defineEmits, defineModel,defineProps} from 'vue'
|
import {defineEmits, defineModel,defineProps} from 'vue'
|
||||||
const {status}=defineProps(['status'])
|
const {status}=defineProps(['status'])
|
||||||
const emit = defineEmits(['save','deleteItem']);
|
const emit = defineEmits(['save','deleteItem','edit']);
|
||||||
const save = () => {
|
const save = () => {
|
||||||
emit('save');
|
emit('save');
|
||||||
};
|
};
|
||||||
|
|
@ -10,7 +10,9 @@ const deleteItem = () => {
|
||||||
emit('deleteItem');
|
emit('deleteItem');
|
||||||
};
|
};
|
||||||
const totalAmount = defineModel<any>()
|
const totalAmount = defineModel<any>()
|
||||||
|
const editItem= () => {
|
||||||
|
emit('edit');
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
@ -20,7 +22,7 @@ const totalAmount = defineModel<any>()
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<el-button v-if="status == 2" @click="deleteItem">取消接诊</el-button>
|
<el-button v-if="status == 2" @click="deleteItem">取消接诊</el-button>
|
||||||
<el-button v-if="status == 2" type="primary" @click="save">完成接诊</el-button>
|
<el-button v-if="status == 2" type="primary" @click="save">完成接诊</el-button>
|
||||||
<el-button v-if="status == 3" type="primary">修改</el-button>
|
<el-button v-if="status == 3" type="primary" @click="editItem">修改</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Panel>
|
</Panel>
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,59 @@
|
||||||
<template>
|
<template>
|
||||||
<el-form :model="form" label-width="auto">
|
<el-form :model="userInfo" label-width="auto" :rules="rules" ref="ruleFormRef">
|
||||||
<el-descriptions
|
<el-descriptions
|
||||||
:title="props.id?'编辑' : '新增'"
|
title="基本信息"
|
||||||
|
:column="3"
|
||||||
|
direction="vertical"
|
||||||
|
border
|
||||||
|
>
|
||||||
|
<el-descriptions-item label="账号">
|
||||||
|
<el-form-item prop="username">
|
||||||
|
<el-input v-model="userInfo.username"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="密码">
|
||||||
|
<el-form-item prop="password">
|
||||||
|
<el-input v-model="userInfo.password" show-password/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="用户名">
|
||||||
|
<el-form-item>
|
||||||
|
<el-input v-model="userInfo.name"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
</el-form>
|
||||||
|
<el-form :model="memberInfo" label-width="auto">
|
||||||
|
<el-descriptions
|
||||||
|
title="扩展信息"
|
||||||
:column="3"
|
:column="3"
|
||||||
direction="vertical"
|
direction="vertical"
|
||||||
border
|
border
|
||||||
>
|
>
|
||||||
<el-descriptions-item label="姓名">
|
<el-descriptions-item label="姓名">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-input v-model="form.name"/>
|
<el-input v-model="memberInfo.name"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="性别">
|
<el-descriptions-item label="性别">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-input v-model="form.gender"/>
|
<el-input v-model="memberInfo.gender"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="年龄">
|
<el-descriptions-item label="年龄">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-input v-model="form.age"/>
|
<el-input v-model="memberInfo.age"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="手机号">
|
||||||
|
<el-form-item>
|
||||||
|
<el-input v-model="memberInfo.tel"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="角色">
|
<el-descriptions-item label="角色">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="form.role"
|
v-model="memberInfo.role"
|
||||||
placeholder="选择角色"
|
placeholder="选择角色"
|
||||||
size="large"
|
size="large"
|
||||||
>
|
>
|
||||||
|
|
@ -39,18 +68,13 @@
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="身份证号">
|
<el-descriptions-item label="身份证号">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-input v-model="form.idCardNumber"/>
|
<el-input v-model="memberInfo.idCardNumber"/>
|
||||||
</el-form-item>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="手机号">
|
|
||||||
<el-form-item>
|
|
||||||
<el-input v-model="form.tel"/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="科室">
|
<el-descriptions-item label="科室">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="form.sectionId"
|
v-model="memberInfo.sectionId"
|
||||||
placeholder="选择科室"
|
placeholder="选择科室"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
|
|
@ -64,17 +88,17 @@
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="医保人员代码">
|
<el-descriptions-item label="医保人员代码">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-input v-model="form.socialMemberCode"/>
|
<el-input v-model="memberInfo.socialMemberCode"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="备注">
|
<el-descriptions-item label="备注">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-input v-model="form.memo"/>
|
<el-input v-model="memberInfo.memo"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="电子签名">
|
<el-descriptions-item label="电子签名">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<UpLoad v-model="uploadURL" ref="uploadRef" @uploadSuccess="(url)=>{form.electronicSignature=url}"></UpLoad>
|
<UpLoad v-model="uploadURL" ref="uploadRef" @uploadSuccess="(url)=>{memberInfo.electronicSignature=url}"></UpLoad>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
|
|
@ -133,7 +157,7 @@ const roleList = [
|
||||||
label: '其他',
|
label: '其他',
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
const form = ref<any>({
|
const memberInfo = ref<any>({
|
||||||
name: "", // 姓名
|
name: "", // 姓名
|
||||||
gender: "", // 性别
|
gender: "", // 性别
|
||||||
age: "", // 年龄
|
age: "", // 年龄
|
||||||
|
|
@ -144,24 +168,44 @@ const form = ref<any>({
|
||||||
sectionId: "", // 科室id
|
sectionId: "", // 科室id
|
||||||
electronicSignature: "", // 电子签名
|
electronicSignature: "", // 电子签名
|
||||||
memo: '',// 备注
|
memo: '',// 备注
|
||||||
|
password: "",
|
||||||
})
|
})
|
||||||
|
const userInfo= ref<any>({
|
||||||
|
username: "", // 账号
|
||||||
|
name: "",
|
||||||
|
password: "",
|
||||||
|
})
|
||||||
|
const rules= {
|
||||||
|
username: [
|
||||||
|
{required: true, message: '请输入账号', trigger: 'blur'},
|
||||||
|
],
|
||||||
|
password: [
|
||||||
|
{required: true, message: '请输入密码', trigger: 'blur'},
|
||||||
|
],
|
||||||
|
}
|
||||||
const emit = defineEmits(['onSubmit'])
|
const emit = defineEmits(['onSubmit'])
|
||||||
const onSubmit = () => {
|
const onSubmit = () => {
|
||||||
emit('onSubmit')
|
emit('onSubmit')
|
||||||
}
|
}
|
||||||
|
const ruleFormRef= ref<any>('')
|
||||||
const save = () => {
|
const save = () => {
|
||||||
|
ruleFormRef.value.validate((valid: any) => {
|
||||||
|
if (valid) {
|
||||||
if (props.id) {
|
if (props.id) {
|
||||||
post("organization/member/edit", {data: form.value}).then((res) => {
|
post("organization/member/edit", {data: memberInfo.value}).then((res) => {
|
||||||
onSubmit()
|
onSubmit()
|
||||||
form.value = {}
|
memberInfo.value = {}
|
||||||
|
userInfo.value = {}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
post("organization/member/add", {data: form.value}).then((res) => {
|
post("organization/member/add", {data: memberInfo.value}).then((res) => {
|
||||||
onSubmit()
|
onSubmit()
|
||||||
form.value = {}
|
memberInfo.value = {}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
const options = Object.entries(depts).map(([key, value]) => {
|
const options = Object.entries(depts).map(([key, value]) => {
|
||||||
if (typeof value === 'string') {
|
if (typeof value === 'string') {
|
||||||
|
|
@ -180,9 +224,9 @@ const options = Object.entries(depts).map(([key, value]) => {
|
||||||
const uploadRef = ref<any>('')
|
const uploadRef = ref<any>('')
|
||||||
const init = (id: any) => {
|
const init = (id: any) => {
|
||||||
post("organization/member/getById", {id}).then((res: any) => {
|
post("organization/member/getById", {id}).then((res: any) => {
|
||||||
form.value = res
|
memberInfo.value = res
|
||||||
if(form.value.electronicSignature){
|
if(memberInfo.value.electronicSignature){
|
||||||
uploadRef.value?.getImageUrl(form.value.electronicSignature)
|
uploadRef.value?.getImageUrl(memberInfo.value.electronicSignature)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,10 @@ const router = createRouter({
|
||||||
path: '/',
|
path: '/',
|
||||||
redirect: '/home/index',
|
redirect: '/home/index',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/manager/login',
|
||||||
|
component: ()=>import('../views/Login.vue'),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/home',
|
path: '/home',
|
||||||
component: () => import('../views/Layout.vue'),
|
component: () => import('../views/Layout.vue'),
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ export async function initRequest(_router:any) {
|
||||||
function post(path: string, data: any = {}, options: any = {}) {
|
function post(path: string, data: any = {}, options: any = {}) {
|
||||||
let config={catch_error: false,base_url:globalConfig.base_url}
|
let config={catch_error: false,base_url:globalConfig.base_url}
|
||||||
config={...config,...options}
|
config={...config,...options}
|
||||||
|
|
||||||
let token = localStorage.getItem('token');
|
let token = localStorage.getItem('token');
|
||||||
let headers: Record<string, string> = {};
|
let headers: Record<string, string> = {};
|
||||||
if (token) {
|
if (token) {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,338 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import {ref} from 'vue'
|
||||||
|
import {post} from '@/utils/request.ts'
|
||||||
|
import {useRouter} from "vue-router";
|
||||||
|
import {ElMessage} from "element-plus";
|
||||||
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
import Auth from "@/components/manger/Auth.vue";
|
||||||
|
|
||||||
|
const username = ref('')
|
||||||
|
const password = ref('')
|
||||||
|
const rememberMe = ref(false)
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
const handleLogin = () => {
|
||||||
|
post("manager/user/login", {username: username.value, password: password.value}).then((token: any) => {
|
||||||
|
localStorage.setItem('token', token)
|
||||||
|
ElMessage({
|
||||||
|
message: "登陆成功,即将为您跳转到首页",
|
||||||
|
type: 'success',
|
||||||
|
duration: 1000,
|
||||||
|
onClose: () => {
|
||||||
|
router.push("/home/index")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const isShowAuth = ref(false)
|
||||||
|
const showAuth = () => {
|
||||||
|
isShowAuth.value = true
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="login-container">
|
||||||
|
<div class="particles-bg">
|
||||||
|
<div class="particle particle-1"></div>
|
||||||
|
<div class="particle particle-2"></div>
|
||||||
|
<div class="particle particle-3"></div>
|
||||||
|
<div class="particle particle-4"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="login-card">
|
||||||
|
<h1 class="title">欢迎使用药慧精灵</h1>
|
||||||
|
<div class="input-group">
|
||||||
|
<i class="fas fa-user input-icon"></i>
|
||||||
|
<input
|
||||||
|
v-model="username"
|
||||||
|
type="text"
|
||||||
|
placeholder="请输入用户名"
|
||||||
|
class="input-field"
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="input-group">
|
||||||
|
<i class="fas fa-lock input-icon"></i>
|
||||||
|
<input
|
||||||
|
v-model="password"
|
||||||
|
type="password"
|
||||||
|
placeholder="请输入密码"
|
||||||
|
class="input-field"
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div class="button">
|
||||||
|
<button type="submit" class="login-button" @click="handleLogin">登录</button>
|
||||||
|
<button class="auth-button" @click="showAuth">授权</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<Mask :is-show="isShowAuth" @close="isShowAuth=false" :width="600" :height="600" title="授权">
|
||||||
|
<Auth></Auth>
|
||||||
|
</Mask>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.login-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
min-height: 100vh;
|
||||||
|
background: #5078c8;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改粒子容器样式
|
||||||
|
.particles-bg {
|
||||||
|
position: fixed;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改粒子基础样式
|
||||||
|
.particle {
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 50%;
|
||||||
|
animation: float 12s infinite linear;
|
||||||
|
filter: blur(1px);
|
||||||
|
// 调整渐变颜色增加活力
|
||||||
|
background: linear-gradient(145deg, #89c3fd 0%, #a8d8ff 100%);
|
||||||
|
|
||||||
|
// 增加伪元素创建更多粒子
|
||||||
|
&::before, &::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
width: 70%;
|
||||||
|
height: 70%;
|
||||||
|
border-radius: inherit;
|
||||||
|
background: rgba(255, 255, 255, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增粒子尺寸和位置
|
||||||
|
&-1 {
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
top: 15%;
|
||||||
|
left: 5%;
|
||||||
|
animation-duration: 14s;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-2 {
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
top: 70%;
|
||||||
|
right: 10%;
|
||||||
|
animation-duration: 16s;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-3 {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
top: 40%;
|
||||||
|
right: 30%;
|
||||||
|
animation-duration: 12s;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-4 {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
top: 65%;
|
||||||
|
left: 15%;
|
||||||
|
animation-duration: 18s;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增更多粒子(通过伪元素实现)
|
||||||
|
&:nth-child(odd)::before {
|
||||||
|
top: 20%;
|
||||||
|
left: 20%;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(even)::after {
|
||||||
|
bottom: 20%;
|
||||||
|
right: 20%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 优化动画效果
|
||||||
|
@keyframes float {
|
||||||
|
0%, 100% {
|
||||||
|
transform: translate(0, 0) rotate(0deg) scale(1);
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
33% {
|
||||||
|
transform: translate(30px, -80px) rotate(120deg) scale(0.9);
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
66% {
|
||||||
|
transform: translate(-20px, 60px) rotate(240deg) scale(1.1);
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 增加粒子数量(在原有4个基础上通过伪元素生成更多)
|
||||||
|
.particles-bg::before,
|
||||||
|
.particles-bg::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: linear-gradient(145deg, #c2e9fb 0%, #a1c4fd 100%);
|
||||||
|
animation: miniFloat 10s infinite linear;
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.particles-bg::before {
|
||||||
|
top: 20%;
|
||||||
|
right: 5%;
|
||||||
|
animation-delay: 2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.particles-bg::after {
|
||||||
|
bottom: 30%;
|
||||||
|
left: 8%;
|
||||||
|
animation-delay: 5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes miniFloat {
|
||||||
|
0%, 100% {
|
||||||
|
transform: translate(0, 0) scale(1);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
transform: translate(40px, -60px) scale(0.8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 调整原有卡片层级 */
|
||||||
|
.login-card {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
/* 保持原有样式 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-card {
|
||||||
|
background: rgba(255, 255, 255, 0.95);
|
||||||
|
padding: 2.5rem;
|
||||||
|
border-radius: 20px;
|
||||||
|
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
|
||||||
|
width: 480px;
|
||||||
|
transform: translateY(-10%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 2rem;
|
||||||
|
color: #2c3e50;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group {
|
||||||
|
position: relative;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
.input-icon {
|
||||||
|
position: absolute;
|
||||||
|
left: 1rem;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
color: #7f8c8d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-field {
|
||||||
|
width: 100%;
|
||||||
|
padding: 1rem 1rem 1rem 2.5rem;
|
||||||
|
border: 2px solid #ecf0f1;
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 1rem;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
border-color: #3498db;
|
||||||
|
box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.options {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.remember-me {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
color: #7f8c8d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.forgot-password {
|
||||||
|
color: #3498db;
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.button{
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.login-button {
|
||||||
|
flex: 1;
|
||||||
|
padding: 1rem;
|
||||||
|
background: linear-gradient(135deg, #3498db, #2980b9);
|
||||||
|
border: none;
|
||||||
|
border-radius: 8px;
|
||||||
|
color: white;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-weight: 600;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: transform 0.2s ease;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.auth-button{
|
||||||
|
flex: 1;
|
||||||
|
margin-left: 10px;
|
||||||
|
padding: 1rem;
|
||||||
|
background: linear-gradient(135deg, #3498db, #2980b9);
|
||||||
|
border: none;
|
||||||
|
border-radius: 8px;
|
||||||
|
color: white;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-weight: 600;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: transform 0.2s ease;
|
||||||
|
&:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.register-link {
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 1.5rem;
|
||||||
|
color: #7f8c8d;
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #3498db;
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
<PharmaceuticalConsumables v-else v-model="goodsList"></PharmaceuticalConsumables>
|
<PharmaceuticalConsumables v-else v-model="goodsList"></PharmaceuticalConsumables>
|
||||||
</div>
|
</div>
|
||||||
<div class="bottom">
|
<div class="bottom">
|
||||||
<Settlement v-if="status!=1" v-model="totalAmount" @deleteItem="deleteItem" @save="save" :status="status"></Settlement>
|
<Settlement v-if="status!=1" v-model="totalAmount" @deleteItem="deleteItem" @save="save" :status="status" @edit="edit"></Settlement>
|
||||||
</div>
|
</div>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -98,7 +98,6 @@ const getId = (item: any) => {
|
||||||
status.value = 2
|
status.value = 2
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.status == 3) {
|
if (item.status == 3) {
|
||||||
post(apiConfig.DoctorDetail, {
|
post(apiConfig.DoctorDetail, {
|
||||||
regisId: item.id
|
regisId: item.id
|
||||||
|
|
@ -119,6 +118,11 @@ const deleteItem = () => {
|
||||||
const getStatus = (e: any) => {
|
const getStatus = (e: any) => {
|
||||||
status.value = e
|
status.value = e
|
||||||
}
|
}
|
||||||
|
const edit=()=>{
|
||||||
|
post('registration/changeStatus', {id: registerId.value, status: 2}).then((res: any) => {
|
||||||
|
status.value = 2
|
||||||
|
})
|
||||||
|
}
|
||||||
// 使用 watch 监听 goodsList 和 itemList 的变化
|
// 使用 watch 监听 goodsList 和 itemList 的变化
|
||||||
watch([()=>goodsList.value, itemList], ([newGoodsList, newItemList]) => {
|
watch([()=>goodsList.value, itemList], ([newGoodsList, newItemList]) => {
|
||||||
const pharmaceuticalTotalAmount = newItemList.reduce((pre: any, cur: any) => {
|
const pharmaceuticalTotalAmount = newItemList.reduce((pre: any, cur: any) => {
|
||||||
|
|
|
||||||
|
|
@ -4,29 +4,29 @@
|
||||||
<el-table :data="tableData" style="width: 100%" @row-click="rowClick">
|
<el-table :data="tableData" style="width: 100%" @row-click="rowClick">
|
||||||
<el-table-column prop="date" label="日期" width="180">
|
<el-table-column prop="date" label="日期" width="180">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{formatDate(scope.row.createDatetime)}}
|
{{ formatDate(scope.row.createDatetime) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="name" label="姓名" width="180"/>
|
<el-table-column prop="name" label="姓名" width="180"/>
|
||||||
<el-table-column prop="role" label="角色" width="180">
|
<el-table-column prop="role" label="角色" width="180">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{roleList.find((item: any) => item.value === scope.row.role)?.label||'-'}}
|
{{ roleList.find((item: any) => item.value === scope.row.role)?.label || '-' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="sectionId" label="科室">
|
<el-table-column prop="sectionId" label="科室">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{sectionList.find((item: any) => item.id === scope.row.sectionId)?.name ||'-'}}
|
{{ sectionList.find((item: any) => item.id === scope.row.sectionId)?.name || '-' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="memo" label="备注"/>
|
<el-table-column prop="memo" label="备注"/>
|
||||||
</el-table>
|
</el-table>
|
||||||
<Mask :is-show="isShow" @close="init()" :width="800" :height="600">
|
<Mask :is-show="isShow" @close="isShow=false" :width="800" :height="600" title="成员管理">
|
||||||
<MemberEdit :id="id" ref="memberEditRef" @onSubmit="init()"></MemberEdit>
|
<MemberEdit :id="id" ref="memberEditRef" @onSubmit="init()"></MemberEdit>
|
||||||
</Mask>
|
</Mask>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {onMounted, ref,nextTick} from "vue"
|
import {onMounted, ref, nextTick} from "vue"
|
||||||
import Mask from '@/components/common/Mask.vue'
|
import Mask from '@/components/common/Mask.vue'
|
||||||
import MemberEdit from "@/components/settings/MemberEdit.vue";
|
import MemberEdit from "@/components/settings/MemberEdit.vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
|
|
@ -90,13 +90,13 @@ const deleteDoctor = (row: any) => {
|
||||||
})
|
})
|
||||||
console.log(row)
|
console.log(row)
|
||||||
}
|
}
|
||||||
const sectionList=ref<any>([]);
|
const sectionList = ref<any>([]);
|
||||||
const list= ()=>{
|
const list = () => {
|
||||||
post('organization/section/allList').then((res: any) => {
|
post('organization/section/allList').then((res: any) => {
|
||||||
sectionList.value = res
|
sectionList.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
onMounted(()=>{
|
onMounted(() => {
|
||||||
init()
|
init()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue