63cea824 by 杨炀

init

1 parent dce034b2
<template>
<div>
<h3 class="homeTitle">待办提醒<router-link class="fr" to="/messages">更多<el-icon><ArrowRight /></el-icon></router-link></h3>
<div class="wcard">
<ul class="mesUl" :style="`height: ${mesHeight}px`">
<li v-for="item in messageList" :key="item.id" :class="{'done':item.readFlag=='1'}" @click="readMessage(item)">
<div>{{ item.name }}</div>
<span class="date">{{ parseTime(item.createTime,'{m}-{d} {h}:{i}') }}</span>
</li>
<li v-if="messageList?.length<=0" class="done">
暂无代办业务!
</li>
</ul>
</div>
</div>
</template>
<script setup>
import { onMounted, ref } from 'vue'
import { getMessage, reader } from '@/api/system/homePage'
import _ from 'lodash'
import { useRouter } from 'vue-router'
const router = useRouter()
const messageList = ref([])
defineProps({
mesHeight: {
type: Number,
default: 300
}
})
onMounted(() => {
getMessageList()
})
async function getMessageList() {
const res = await getMessage({
pageNum: 1,
pageSize: 10
})
_.each(res.rows, (d) => {
switch (d.type) {
case 30001:
d.name = '你有一条会员缴费等待审批,点击去处理!'
d.path = '/member/audit'
break
case 30002:
d.name = '你有一条级位考试等待审批,点击去处理!'
d.path = '/level/approval'
break
case 30003:
d.name = '你有一条段位考试等待审批,点击去处理!'
d.path = '/rank/approval'
break
case 30004:
d.name = '你有一条会员调动等待审批,点击去处理!'
d.path = '/member/mobillize'
break
case 30005:
d.name = '你有一条团体会员认证等待审批,点击去处理!'
d.path = '/group/authentication'
break
case 30006:
d.name = '你有一条段位成绩等待审批,点击去处理!'
d.path = '/rank/score/approval'
break
case 40001:
d.name = '你有一条级位申请待提交,点击去处理!'
d.path = '/level/apply/modify/' + d.eventId
break
case 40002:
d.name = '你有一条段位申请待提交,点击去处理!'
d.path = '/rank/apply/modify/' + d.eventId
break
case 40003:
d.name = '你有一条成绩维护的数据待提交,点击去处理!'
d.path = '/rank/score/modify/' + d.eventId
break
case 50001:
d.name = '你有一条新的个人会员申请,点击去处理!'
d.path = '/member/list'
break
}
})
messageList.value = res.rows
}
async function readMessage(item) {
await router.push(item.path)
await reader({ id: item.id })
item.readFlag = '1'
}
</script>
<style scoped lang="scss">
.homeTitle{font-weight: 500;color: #2B3133;margin: 30px 0 15px;}
.wcard{background: #fff; padding:15px;overflow: hidden;position: relative;
.po-title{position: absolute;
h3{font-size: 18px;color: #2B3133;margin: 0;}
h2{color: #014A9F;font-size: 30px;margin: 6px 0;}
p{color: #7B7F83;font-size: 18px;margin: 0;}
}
}
.home {
background: RGBA(245, 247, 249, 1);
font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 13px;
color: #676a6c;
overflow-x: hidden;
ul {
padding: 0;
margin: 0;list-style-type: none;
}
}
.mesUl{
overflow: auto;
li{ position: relative;line-height: 45px;padding-left: 40px;display: flex;justify-content: space-between;
color: #666;cursor: pointer;
&>div{width: 80%;overflow: hidden;text-overflow: ellipsis;white-space: nowrap; font-size: 16px;}
&:before{width: 6px;content: '';
height: 6px;position: absolute;left: 20px;top: 0;bottom: 0;margin: auto;
background: var(--el-color-primary);
border-radius: 50%;}
&:hover{background: #f4f4f4;}
.link{display: inline-block;}
.date{font-size: 12px;float: right;color: #999;width: 20%;text-align: right;padding-right: 15px; min-width: 80px}
}
li.done{&:before{background: #ddd;}}
}
</style>
<template>
<div class="app-container">
<div class="wcard">
<ul class="mesUl">
<li v-for="item in messageList" :key="item.id" :class="{'done':item.readFlag=='1'}" @click="readMessage(item)">
<div>{{ item.name }}</div>
<span class="date">{{ item.createTime }}</span>
</li>
<li v-if="messageList.length<=0" class="done">
暂无代办业务!
</li>
</ul>
<pagination
v-show="total > 0"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
:page-sizes="[15,30,45,60]"
:total="total"
@pagination="getMessageList"
/>
</div>
</div>
</template>
<script setup name="Messages">
import { onMounted, reactive, ref } from 'vue'
import { getMessage, reader } from '@/api/system/homePage'
import _ from 'lodash'
import { useRouter } from 'vue-router'
const router = useRouter()
const messageList = ref([])
const queryParams = reactive({
pageNum: 1,
pageSize: 10
})
const total = ref(0)
onMounted(() => {
getMessageList()
})
async function getMessageList() {
const res = await getMessage(queryParams)
_.each(res.rows, (d) => {
switch (d.type) {
case 30001:
d.name = '你有一条会员缴费等待审批,点击去处理!'
d.path = '/member/audit'
break
case 30002:
d.name = '你有一条级位考试等待审批,点击去处理!'
d.path = '/level/approval'
break
case 30003:
d.name = '你有一条段位考试等待审批,点击去处理!'
d.path = '/rank/approval'
break
case 30004:
d.name = '你有一条会员调动等待审批,点击去处理!'
d.path = '/member/mobillize'
break
case 30005:
d.name = '你有一条团体会员认证等待审批,点击去处理!'
d.path = '/member/audit'
break
case 30006:
d.name = '你有一条段位成绩等待审批,点击去处理!'
d.path = '/rank/score/approval'
break
case 40001:
d.name = '你有一条级位申请待提交,点击去处理!'
d.path = '/level/apply/modify/:examId'
break
case 40002:
d.name = '你有一条段位位申请待提交,点击去处理!'
d.path = '/rank/apply/modify/:examId'
break
}
})
messageList.value = res.rows
total.value = res.total
}
async function readMessage(item) {
await router.push(item.path)
await reader({ id: item.id })
item.readFlag = '1'
}
</script>
<style scoped lang="scss">
.wcard{background: #fff; padding:15px;overflow: hidden;position: relative;
.po-title{position: absolute;
h3{font-size: 18px;color: #2B3133;margin: 0;}
h2{color: #014A9F;font-size: 30px;margin: 6px 0;}
p{color: #7B7F83;font-size: 18px;margin: 0;}
}
}
.mesUl{
li{ position: relative;line-height: 45px;padding-left: 40px;display: flex;justify-content: space-between;
color: #666;cursor: pointer;
&>div{width: 80%;overflow: hidden;text-overflow: ellipsis;white-space: nowrap; font-size: 16px;}
&:before{width: 6px;content: '';
height: 6px;position: absolute;left: 20px;top: 0;bottom: 0;margin: auto;
background: var(--el-color-primary);
border-radius: 50%;}
&:hover{background: #f4f4f4;}
.link{display: inline-block;}
.date{font-size: 12px;float: right;color: #999;width: 20%;text-align: right;padding-right: 15px;}
}
li.done{&:before{background: #f4f4f4;}}
}
</style>
<template>
<div class="mb20">
<el-card :body-style="{'padding':'0'}">
<div class="indexTitle">
<h3 class="leftboderTT" v-if="user.utype=='2'">
{{ language == 0 ? '机构基础信息' : 'ORGANIZATION BASIC INFORMATION' }}</h3>
<h3 class="leftboderTT" v-if="user.utype=='1'">{{
language == 0 ? '个人基础信息' : 'Personal Basic Information'
}}</h3>
</div>
<!-- uType字段 1 是个人 2是团体-->
<!-- {{user}}-->
<team-info :form="myform" v-if="user.utype=='2'"/>
<div class="pd20" v-else>
<div class="d-form-border" style="margin-top: 0">
<el-form class="d-form" label-width="120" :rules="rules" ref="formref"
:label-position="language==0?'left':'top'" style="max-width: 500px;margin: auto">
<el-form-item :label="language==0?'用户名':'Account'">
{{ user.userName }}
</el-form-item>
<el-form-item :label="language==0?'姓名':'Real Name'" required prop="realName" v-if="user.utype=='1'">
<el-input v-model="myform.realName" disabled/>
</el-form-item>
<el-form-item :label="language==0?'性别':'Gender'" required >
<el-radio-group v-model="myform.sex">
<el-radio value="0">{{ language == 0 ? '女' : 'female' }}</el-radio>
<el-radio value="1">{{ language == 0 ? '男' : 'male' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="language==0?'出生日期':'Date of Birth'">
<el-date-picker
v-model="myform.birth"
style="width: 100%;"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item :label="language==0?'代表':'Representing'" required v-if="user.utype=='1'">
<el-input v-model="myform.representing" disabled/>
</el-form-item>
<el-form-item :label="language==1?'Age group':'年龄组'" required v-if="user.utype=='1'">
<el-input v-model="myform.ageGroup" disabled/>
</el-form-item>
<el-form-item :label="language==0?'舞种':'Division'" required v-if="user.utype=='1'">
<el-input v-model="myform.division" disabled/>
</el-form-item>
<el-form-item :label="language==0?'状态':'Status'" required v-if="user.utype=='1'">
<el-input v-model="myform.wdsfStatus" disabled/>
</el-form-item>
<el-form-item :label="language==0?'证件号':'Passport number'" required v-if="user.utype=='1'">
<el-input v-model="myform.passportNumber" disabled/>
</el-form-item>
<el-form-item :label="language==0?'有效证件':'Valid Passport'" required v-if="user.utype=='1'">
<image-upload v-model="myform.passportUrl" :limit="1" :is-show-tip="false"
:button-text="language==0?'上传':'Upload'"/>
</el-form-item>
<el-form-item :label="language==0?'WDSF会员号':'WDSF MIN'" prop="wdsfMin" v-if="user.utype=='1'">
{{myform.wdsfMin}}
</el-form-item>
<!-- <el-form-item :label="language==0?'证件类型':'ID type'" required prop="idcType">-->
<!-- <el-select v-model="myform.idcType" style="width: 100%">-->
<!-- <el-option-->
<!-- v-for="item in certificates"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="language==0?'证件号码':'ID NO'" prop="idcCode">-->
<!-- <el-input v-model="myform.idcCode" @blur="checkCode"/>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="language==0?'类型':'Type'" required>-->
<!-- <el-select v-model="myform.type" style="width: 100%;">-->
<!-- <el-option :label="language==0?'业余':'amateur'" value="0"/>-->
<!-- <el-option :label="language==0?'专业':'Professional'" value="1"/>-->
<!-- <el-option :label="language==0?'大专院校':'Colleges and universities'" value="2"/>-->
<!-- <el-option :label="language==0?'其他':'Other'" value="3"/>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="language==0?'邮箱':'Email'" required prop="email">-->
<!-- <el-input v-model="myform.email" type="email" :placeholder="language==0?'请输入内容':''"/>-->
<!-- </el-form-item>-->
</el-form>
<div class="text-center" v-if="user.utype=='1'||user.utype=='2'">
<el-button type="primary" class="btn-lineG" round @click="save">
{{language == 0 ? '确定修改' : 'Save'}}
</el-button>
</div>
</div>
</div>
</el-card>
</div>
</template>
<script setup>
import {ref} from 'vue'
import {useRouter} from 'vue-router'
import {getCurrentInstance, onMounted} from '@vue/runtime-core'
import * as match from '@/apiPc/match'
import {ElMessage, ElMessageBox} from 'element-plus'
import useUserStore from "@/store/modules/user";
import {useStorage} from "@vueuse/core/index";
const language= useStorage('language',0)
const router = useRouter()
const {proxy} = getCurrentInstance()
const props = defineProps({
user: {
type: Object,
required: true
}
})
const rules = ref({
realName: [{required: true, message: '必填', trigger: 'blur'}],
sex: [{required: true, message: '必填', trigger: 'change'}],
idcType: [{required: true, message: '必填', trigger: 'change'}],
type: [{required: true, message: '必填', trigger: 'change'}],
idcCode: [{required: true, message: '必填', trigger: 'blur'}],
email: [{required: true, message: '必填', trigger: 'blur'}],
})
const activeName = ref('first')
const myform = ref({
idcType: 0,
countryId: '',
realName: ''
})
const labelArr = ref([])
const certificates = ref([
{
value: '0',
label: language.value == 0 ? '居民身份证' : 'Resident ID card'
},
{
value: '1',
label: language.value == 0 ? '护照' : 'Passport'
},
{
value: '2',
label: language.value == 0 ? '其他' : 'Other'
}
])
const user = useUserStore().user || {}
getData()
function getData() {
if (user.utype == '2') {
match.getGroupInfo().then(res => {
myform.value = res.data
})
}
if (user.utype == '1') {
match.getMyPersonInfo().then(res => {
myform.value = res.data
if(language.value=='1'){
myform.value.type = '1'
}
})
}
}
function save() {
match.saveMyBaseInfo(myform.value).then(res => {
ElMessage.success(language.value==0?'保存成功':'Save successfully')
})
}
function checkCode() {
if (myform.value.idcType == 0 && myform.value.idcCode) {
if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(myform.value.idcCode))) {
ElMessage.warning('请输入正确的身份证号码')
} else {
let tmpStr = ''
if (myform.value.idcCode.length == 15) {
tmpStr = myform.value.idcCode.substring(6, 12)
tmpStr = '19' + tmpStr
tmpStr = tmpStr.substring(0, 4) + '-' + tmpStr.substring(4, 6) + '-' + tmpStr.substring(6)
} else {
tmpStr = myform.value.idcCode.substring(6, 14)
tmpStr = tmpStr.substring(0, 4) + '-' + tmpStr.substring(4, 6) + '-' + tmpStr.substring(6)
}
myform.value.birth = tmpStr
const res = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/
if (myform.value.idcCode && res.test(myform.value.idcCode)) {
const genderCode = myform.value.idcCode.charAt(16)
if (parseInt(genderCode) % 2 == 0) {
myform.value.sex = '0'
} else {
myform.value.sex = '1'
}
}
}
}
}
</script>
<style scoped lang="scss">
.indexTitle {
margin: 20px 0 12px;
padding: 0 20px 15px;
border-bottom: 1px solid #e5e5e5;
h3 {
font-size: 16px;
color: var(--el-color-primary);
}
}
</style>
<template>
<div class="mb20">
<el-card :body-style="{'padding':'0'}">
<div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'修改密码':'Change Password' }}</h3></div>
<div class="pd20">
<div class="d-form-border" style="margin-top: 0">
<el-form class="d-form" ref="pwdRef" :model="user" :rules="rules"
label-width="120px" :label-position="language==0?'left':'top'"
style="max-width: 500px;margin: auto">
<el-form-item :label="language==0?'旧密码':'Old Password'" prop="oldPassword">
<el-input v-model="user.oldPassword" :placeholder="language==0?'请输入旧密码':''" type="password" show-password/>
</el-form-item>
<el-form-item :label="language==0?'新密码':'New Password'" prop="newPassword">
<el-input v-model="user.newPassword" :placeholder="language==0?'请设置8位以上大小写字母、数字、特殊符号':''" type="password"
show-password/>
</el-form-item>
<el-form-item :label="language==0?'确认密码':'Confirm Password'" prop="confirmPassword">
<el-input v-model="user.confirmPassword" :placeholder="language==0?'请确认新密码':''" type="password" show-password/>
</el-form-item>
</el-form>
</div>
<el-row justify="center">
<el-button type="primary" class="btn-lineG" round @click="submit">{{ language==0?'保存':'Save' }}</el-button>
</el-row>
</div>
</el-card>
</div>
</template>
<script setup>
import {updateUserPwd} from '@/api/system/user'
import useUserStore from '@/store/modules/user'
import {reactive, ref, getCurrentInstance} from 'vue'
import {validPassword} from '@/utils/validate'
import {useStorage} from "@vueuse/core/index";
const language = useStorage('language', 0)
const show = ref(false)
const {proxy} = getCurrentInstance()
const userStore = useUserStore()
const user = reactive({
oldPassword: undefined,
newPassword: undefined,
confirmPassword: undefined
})
const equalToPassword = (rule, value, callback) => {
if (user.newPassword !== value) {
callback(new Error('两次输入的密码不一致'))
} else {
callback()
}
}
const validPwd = (rule, value, callback) => {
if (import.meta.env.DEV) {
callback()
} else {
if (!validPassword(value)) {
callback(new Error('请设置8位以上大小写字母、数字、特殊符号组合的密码'))
} else {
callback()
}
}
}
const rules = ref({
oldPassword: [{required: true, message: language.value==0?'旧密码不能为空':'required', trigger: 'blur'}],
newPassword: [
{required: true, message: language.value==0?'新密码不能为空':'required', trigger: 'blur'},
{validator: validPwd, trigger: 'blur'}
],
confirmPassword: [
{required: true, message: language.value==0?'确认密码不能为空':'required', trigger: 'blur'},
{required: true, validator: equalToPassword, trigger: 'blur'}
]
})
/** 提交按钮 */
function submit() {
proxy.$refs['pwdRef'].validate(valid => {
if (valid) {
updateUserPwd(user.oldPassword, user.newPassword).then(response => {
proxy.$modal.msgSuccess(language.value==0?'修改成功':'password is changed!')
userStore.logOut().then(() => {
setTimeout(() => {
location.reload()
}, 1000)
})
})
}
})
}
</script>
<style scoped lang="scss">
.indexTitle {
margin: 20px 0 12px;
padding: 0 20px 15px;
border-bottom: 1px solid #e5e5e5;
h3 {
font-size: 16px;
color: var(--el-color-primary);
}
}
</style>
......@@ -2,8 +2,6 @@
<!-- -->
<div class="partA">
<rotate-part>
</rotate-part>
<div class="gif_bg">
<img src="@/assets/img/rote.png">
......@@ -93,7 +91,6 @@
</template>
<script setup>
import rotatePart from './rotatePart'
import {onMounted, ref, watch} from 'vue'
import {ArrowRight} from '@element-plus/icons-vue'
import {szToHz} from '@/utils/ruoyi'
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!