123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775 |
- <template>
- <view class="home">
- <view v-if="tabsIndex1==1">
- <view class="home_item" v-if="isDept.valueconfig==1">
- <view class="title">科室报修</view>
- <view class="content">
- <view @click="repairsView(1,'pending,handler,reassign')">
- <view class="con-title">处理中</view>
- <view class="con-value">{{repairData.deptHandlerCount}}</view>
- </view>
- <view @click="repairsView(1,'close0')">
- <view class="con-title">待评价</view>
- <view class="con-value">{{repairData.deptCloseCount}}</view>
- </view>
- <view>
- <view class="con-title">本月维修费用(元)</view>
- <view class="con-value-gr">{{repairData.deptCurrentMonthPrice || 0}}</view>
- </view>
- </view>
- </view>
- <view class="home_item">
- <view class="title">我的报修</view>
- <view class="content">
- <view @click="repairsView(0,'pending,handler,reassign')">
- <view class="con-title">处理中</view>
- <view class="con-value">{{repairData.userHandlerCount}}</view>
- </view>
- <view @click="repairsView(0,'close0')">
- <view class="con-title">待评价</view>
- <view class="con-value">{{repairData.userCloseCount}}</view>
- </view>
- </view>
- </view>
- <!-- <view class="home_item">
- <uni-notice-bar show-icon scrollable background-color="#ffffff" color="#000"
- :text="noticeData" />
- </view> -->
- <view class="home_item home-disp">
- <view class="bottom-left" @click="addRepairs">
- <view class="bottom-left-box">
- <text class="newicon newicon-kuaisubaoxiu icon"></text>
- <view>快速报修</view>
- </view>
- </view>
- <view class="bottom-right mar-t-20">
- <view class="bottom-right-item" v-if="isRepair.valueconfig==1" @click="scanCodes">
- <text class="newicon newicon-saoma icon"></text>
- <view class="name1">扫资产报修</view>
- </view>
- <view class="bottom-right-item" @click="repository">
- <text class="newicon newicon-zhishiku1 icon"></text>
- <view class="name2">知识库</view>
- </view>
- </view>
- </view>
- </view>
- <view v-if="tabsIndex2==1" class="mine">
- <view class="body">
- <view class="bottom">
- <view class="bottom_name">个人信息</view>
- <view class="bottom_list">
- <view class="bottom_list_item">
- <view class="name"><text class="required newicon newicon-bitian"></text>工号</view>
- <view class="value no-mar">{{loginUserStore.loginUser.user.account}}</view>
- </view>
- <view class="bottom_list_item">
- <view class="name"><text class="required newicon newicon-bitian"></text>姓名</view>
- <view class="value no-mar">{{loginUserStore.loginUser.user.name}}</view>
- </view>
- <view class="bottom_list_item">
- <view class="name"><text class="required newicon newicon-bitian"></text>院区名称</view>
- <uni-data-picker class="value" placeholder="请选择院区名称"
- v-model="dataForm.branch" :localdata="branchData" @change="branchChange"
- :clear-icon="false" :class="{formRed: isSubmit && !dataForm.branch}">
- </uni-data-picker>
- <text class="newicon newicon-youjiantou icon"></text>
- </view>
- <view class="bottom_list_item" v-if="deptRepair.valueconfig==1">
- <view class="name"><text class="required newicon newicon-bitian"></text>科室名称</view>
- <uni-data-picker class="value" placeholder="请选择报修科室"
- v-model="dataForm.dept" :localdata="deptData"
- :clear-icon="false" :class="{formRed: isSubmit && !dataForm.dept}">
- </uni-data-picker>
- <text class="newicon newicon-youjiantou icon"></text>
- </view>
- <view class="bottom_list_item" v-if="deptRepair.valueconfig==1" @click="deptSelect">
- <view class="name">常用科室</view>
- <view class="value">{{commonDeptName}}</view>
- <text class="newicon newicon-youjiantou icon"></text>
- </view>
- <view class="bottom_list_item">
- <view class="name"><text class="required newicon newicon-bitian"></text>联系电话</view>
- <view class="value no-mar" @click="makePhoneCall(loginUserStore.loginUser.user.phone)">{{loginUserStore.loginUser.user.phone}}</view>
- </view>
- </view>
- </view>
- </view>
- <view class="foot_common_btns fixed-btn">
- <button @click="addInfo" type="default" class="primaryButton btn">保存</button>
- </view>
- </view>
- <view class="bottom-tabs">
- <view class="tabs-list" @click="tabsClick1">
- <img src="/static/img/icon_incidentList.png" v-if="tabsIndex1==0" alt="">
- <img src="/static/img/icon_incidentList_active.png" v-if="tabsIndex1==1" alt="">
- <view class="tabs-title" :class="tabsIndex1==1?'active-class':''">我的报修</view>
- </view>
- <view class="tabs-list" @click="tabsClick2">
- <img src="/static/img/icon_my.png" v-if="tabsIndex2==0" alt="">
- <img src="/static/img/icon_my_active.png" v-if="tabsIndex2==1" alt="">
- <view class="tabs-title" :class="tabsIndex2==1?'active-class':''">设置</view>
- </view>
- </view>
- </view>
- </template>
- <script setup>
- import { SM } from "@/http/http.js"
- import { ref, reactive } from 'vue'
- import { onLoad ,onShow, onHide, onPullDownRefresh} from '@dcloudio/uni-app'
- import { api_systemConfiguration, api_userSave, api_user, api_department, api_repairScanCode, api_getNotice, api_getCount } from "@/http/api.js"
- import { useSetTitle } from '@/share/useSetTitle.js'
- import { repositoryListSearchStore } from '@/stores/repositorySearch'
- import { useLoginUserStore } from '@/stores/loginUser'
- import { useMakePhoneCall } from '@/share/useMakePhoneCall.js'
- import { useIncidentNumStore } from '@/stores/incidentNum'
- useSetTitle();
-
- // 数据
- const isDept = ref({})
- const isRepair = ref({})
- const isPublic = ref({})
- const noticeData = ref('')
- const repairData = ref({})
- const tabsIndex1 = ref(1)
- const tabsIndex2 = ref(0)
- const repositorySearchStore = repositoryListSearchStore();
-
-
- const loginUserStore = useLoginUserStore();
- const incidentNumStore = useIncidentNumStore();
- const { makePhoneCall } = useMakePhoneCall();
- const deptRepair = ref(null)
-
- const deptData = ref([])
-
- const branchData = ref([])
-
- const commonDeptName = ref(null)
-
- const commonDeptData = ref(null)
-
- const dataForm = reactive({
- dept: '',
- branch:''
- })
-
- const userTypes = ref(null)
-
- const userData = reactive(loginUserStore.loginUser.user)
-
- const commonDeptDTO = ref([])
-
- // 是否提交
- const isSubmit = ref(false)
-
- // 数据
- const dataInfo = reactive({
- num: 0,
- })
-
- function tabsClick1(){
- tabsIndex1.value=1
- tabsIndex2.value=0
- getCount()
- setTimeout(_=>{
- let data = JSON.parse(uni.getStorageSync('sysData'))
- isDept.value = data.find(i=>i.keyconfig=='deptRepair')
- isRepair.value = data.find(i=>i.keyconfig=='cmdbRepair')
- isPublic.value = data.find(i=>i.keyconfig=='publicRepair')
- },0)
- }
-
- function tabsClick2(){
- tabsIndex2.value=1
- tabsIndex1.value=0
- getUserInfo()
- }
-
- // 知识库
- function repository(){
- repositorySearchStore.clearRepositoryListSearchData()
- uni.navigateTo({
- url: `/pages/repository/repository?type=view&entranceType=repairs`
- })
- }
-
- // 报修列表
- function repairsView(type,value){
- uni.navigateTo({
- url: `/pages/repair/repairsList?type=${type}&value=${value}`
- })
- }
-
- // 获取报修数量
- function getCount(){
- uni.showLoading({
- title: "加载中",
- mask: true,
- });
- api_getCount({}).then(res=>{
- uni.hideLoading();
- repairData.value = res.data
- })
- }
-
- // 快速报修
- function addRepairs(){
- if(isDept.value.valueconfig==0 && isPublic.value.valueconfig==0){
- uni.showToast({
- icon: 'none',
- title: '请先开启科室报修或公共报修'
- });
- return
- }
- uni.setStorageSync('repairsType','subpage')
- uni.navigateTo({
- url: '/pages/repair/rapidRep'
- })
- }
-
- // 扫资产报修
- function scanCodes(){
- uni.showLoading({
- title: "加载中",
- mask: true,
- });
- SM().then((res) => {
- api_repairScanCode({
- code:res
- }).then((res2) => {
- uni.hideLoading();
- if (res2.state == 200) {
- uni.navigateTo({
- url: `/pages/repair/rapidRep?property=${res2.data.name}&assetId=${res2.data.id}`
- })
- } else {
- uni.showToast({
- icon: 'none',
- title: res2.msg || '请求数据失败!'
- });
- }
- });
- })
- }
-
- // 获取文本内容
- function getHtml(data) {
- const tempDiv = document.createElement('div');
- tempDiv.innerHTML = data.content;
- noticeData.value = tempDiv.textContent || tempDiv.innerText || '';
- }
-
-
- // 保存
- function addInfo(){
- if(!dataForm.branch){
- uni.showToast({
- icon: 'none',
- title: '院区不能为空'
- });
- return
- }
-
- if(!dataForm.dept){
- uni.showToast({
- icon: 'none',
- title: '报修科室不能为空'
- });
- return
- }
-
- uni.showLoading({
- title: "加载中",
- mask: true,
- });
- isSubmit.value = true
- userData.currentHospital.id = dataForm.branch
- userData.commonDeptName = commonDeptName.value
- userData.dept={
- id:dataForm.dept
- }
- let arr = []
- for(let i of commonDeptDTO.value){
- arr.push({
- dept:i
- })
- }
- let postData = {
- ...loginUserStore.loginUser.user,
- // ...userData,
- hospital:{
- id:dataForm.branch
- },
- dept:{
- id:dataForm.dept
- },
- commonDept:commonDeptData.value,
- commonDeptDTO:arr
- }
- api_userSave({
- user: postData,
- }).then(res => {
- uni.hideLoading();
- if(res.status == 200){
- loginUserStore.setLoginUser(postData);
- uni.showToast({
- icon: 'none',
- title: '保存成功'
- });
- }else{
- uni.showToast({
- icon: 'none',
- title: res.msg || '请求数据失败!'
- });
- }
- })
- }
-
- // 选择院区
- function branchChange(){
- dataForm.dept = null
- commonDeptName.value = null
- commonDeptData.value = null
- getRepairTypes()
- }
-
- // 获取科室列表
- function getRepairTypes(){
- uni.showLoading({
- title: "加载中",
- mask: true,
- });
- let postData = {
- department: {
- hospital: dataForm.branch?dataForm.branch:loginUserStore.loginUser.user.currentHospital.id,
- },
- idx:0,
- sum:9999
- }
- api_department(postData).then(res => {
- uni.hideLoading();
- res = res.list || [];
- deptData.value = res.map(v => ({
- text: v.dept,
- value: v.id,
- }));
- })
- }
-
- // 获取院区列表
- function getBranch(){
- let arr = loginUserStore.loginUser.hospital.filter(i=>i.parent==undefined)
- branchData.value = arr.map(v => ({
- text: v.hosName,
- value: v.id,
- }));
- }
-
- // 选择常用科室
- function deptSelect(){
- uni.setStorageSync('configData',JSON.stringify(dataForm))
- let data = commonDeptData.value ?
- commonDeptData.value : loginUserStore.loginUser.user.commonDept
- if(!data){
- data = 'none'
- }
- let deptId = dataForm.branch?dataForm.branch:loginUserStore.loginUser.user.currentHospital.id
- uni.navigateTo({
- url: `/pages/repair/deptSelect?data=${JSON.stringify(data)}&commonDeptName=${commonDeptName.value}&deptId=${deptId}&type=subpage`
- })
- }
-
- // 初始化
- function onLoadFn(){
- let data = JSON.parse(uni.getStorageSync('sysData'))
- deptRepair.value = data.find(i=>i.keyconfig=='deptRepair')
- getBranch()
- }
-
- function getUserInfo(){
- let user = loginUserStore.loginUser.user
- let userId = null
- if(user.currentHospital.parent){
- userId = user.currentHospital.parent.id
- }else{
- userId = user.currentHospital.id
- }
- let postData = {
- idx: 0,
- sum: 999,
- user: {
- hospital:{
- id:userId
- },
- name: user.name,
- userTypeIds: String(userTypes.value.map(v => v.id))
- }
- }
- api_user(postData).then(res => {
- if(res.status == 200){
- let item = res.list.find(i=>i.id==user.id)
- if(item){
- if(item.hospital.parent){
- dataForm.branch = item.hospital.parent.id
- }else{
- dataForm.branch = item.hospital.id
- }
- if(item.dept){
- dataForm.dept = item.dept.id
- }
- getRepairTypes()
- let id = []
- let name = []
- if(item.commonDeptDTO){
- for(let i of item.commonDeptDTO){
- id.push(i.id)
- name.push(i.dept)
- }
- commonDeptData.value = id.join(',')
- commonDeptName.value = name.join('/')
- }
- }else{
- // let data = uni.getStorageSync('configData')
- // if(data){
- // data = JSON.parse(data)
- // dataForm.dept = data.dept
- // dataForm.branch = data.branch
- // }else{
- if(user.currentHospital.parent){
- dataForm.branch = user.currentHospital.parent.id
- }else{
- dataForm.branch = user.currentHospital.id
- }
- if(user.dept){
- dataForm.dept = user.dept.id
- }
- // }
- if(user.commonDeptDTO){
- let name = []
- for(let i of user.commonDeptDTO){
- name.push(i.dept)
- }
- commonDeptData.value = user.commonDept
- commonDeptName.value = name.join('/')
- }
- getRepairTypes()
- }
- }else{
- uni.showToast({
- icon: 'none',
- title: res.msg || '请求数据失败!'
- });
- }
- })
- }
-
- onHide(opt=>{
- dataInfo.num = 0
- dataForm.branch = null
- })
-
- onLoad((option) => {
- userTypes.value = JSON.parse(uni.getStorageSync('groupData'))
- onLoadFn();
- dataInfo.num = 1
- if(option.type==2){
- if(option.data){
- tabsIndex1.value = 0
- tabsIndex2.value = 1
- let data = JSON.parse(option.data)
- commonDeptData.value = data.data.join(',')
- commonDeptName.value = data.name.join('/')
- commonDeptDTO.value = data.name
- let data2 = uni.getStorageSync('configData')
- if(data2){
- data2 = JSON.parse(data2)
- dataForm.dept = data2.dept
- dataForm.branch = data2.branch
- }
- getRepairTypes()
- }else{
- getUserInfo()
- }
- }else{
- tabsIndex1.value = 1
- tabsIndex2.value = 0
- getCount()
- setTimeout(_=>{
- let data = JSON.parse(uni.getStorageSync('sysData'))
- isDept.value = data.find(i=>i.keyconfig=='deptRepair')
- isRepair.value = data.find(i=>i.keyconfig=='cmdbRepair')
- isPublic.value = data.find(i=>i.keyconfig=='publicRepair')
- },0)
- }
-
- })
-
- onPullDownRefresh(_=>{
- uni.stopPullDownRefresh();
- })
-
- onShow((option) => {
- userTypes.value = JSON.parse(uni.getStorageSync('groupData'))
- onLoadFn()
- if(dataInfo.num==0){
- getUserInfo()
- }
- })
-
- </script>
- <style scoped>
- >>> .uni-data-tree-input{
- width: 100% !important;
- }
- >>> .input-value-border{
- border: none !important;
- }
- >>> .input-value{
- padding:0 !important;
- flex-direction: row-reverse !important;
- }
- >>> .selected-list{
- flex-direction: row-reverse !important;
- }
- >>> .arrow-area{
- display: none !important;
- }
- >>>.uni-data-tree-dialog{
- z-index: 9999;
- }
- </style>
- <style lang="scss" scoped>
- .home{
- // height: 100vh;
- padding: 20rpx;
- background: #fff;
- .home_item{
- padding: 20rpx;
- box-shadow: 0px 3px 6px 1px rgba(0,0,0,0.16);
- border-radius: 10rpx;
- margin-bottom: 30rpx;
- .title{
- font-size: 26rpx;
- color: $uni-primary;
- padding-left: 18rpx;
- position: relative;
- margin-bottom: 20rpx;
- &:before{
- content: '';
- width: 8rpx;
- height: 25rpx;
- background-color: $uni-primary;
- position: absolute;
- left: 0;
- top: 50%;
- transform: translateY(-50%);
- }
- }
- .content{
- display: flex;
- align-items: center;
- justify-content: space-around;
- text-align: center;
- .con-title{
- color: #949494;
- font-size: 24rpx;
- margin-bottom: 15rpx;
- }
- .con-value{
- color: #000;
- font-size: 50rpx;
- }
- .con-value-gr{
- color: #49B856;
- font-size: 50rpx;
- }
- }
- .uni-noticebar{
- margin: 0 !important;
- padding: 0 !important;
- }
- }
- .home-disp{
- display: flex;
- justify-content: space-around;
- .bottom-left{
- height: 380rpx;
- background: linear-gradient( 269deg, #54B99C 0%, #7AC481 100%);
- border-radius: 10rpx;
- flex: 1.5;
- margin-right: 20rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- color: #FFFFFF;
- margin-top: 20rpx;
- .bottom-left-box{
- text-align: center;
- .icon{
- font-size: 100rpx;
- position: relative;
- top: -20rpx;
- }
- }
- }
- .mar-t-20{
- margin-top: 20rpx;
- }
- .bottom-right{
- flex: 2;
- .bottom-right-item{
- height: 175rpx;
- background: #FFFFFF;
- border-radius: 10rpx;
- border: 2rpx solid #6FC073;
- margin-bottom: 20rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- position: relative;
- .icon{
- font-size: 50rpx;
- color: #6FC073;
- position: absolute;
- left: 60rpx;
- }
- .name1{
- font-size: 32rpx;
- position: absolute;
- right: 50rpx;
- }
- .name2{
- font-size: 32rpx;
- position: absolute;
- right: 80rpx;
- }
- }
- }
- }
- .bottom-tabs{
- border-top:1px solid rgba(0, 0, 0, 0.33);
- background: #fff;
- position: fixed;
- width: 100%;
- left: var(--window-left);
- right: var(--window-right);
- display: flex;
- bottom: 0;
- .tabs-list{
- height: 90rpx;
- display: flex;
- justify-content: center;
- align-items: center;
- flex-direction: column;
- flex: 1;
- font-size: 0;
- text-align: center;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
- img{
- width: 48rpx;
- height: 48rpx;
- }
- .tabs-title{
- color: rgb(136, 136, 136);
- font-size: 20rpx;
- line-height: normal;
- }
- .active-class{
- color: #49B856;
- }
- }
- }
- }
- .mine{
- height: 100%;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- .phone-filled{
- margin-right: 5rpx;
- }
- .newicon-xinjian2,
- .newicon-zhishiku{
- margin-right: 10rpx;
- }
- .body{
- width: 714rpx;
- height: 100%;
- margin: 16rpx auto var(--window-bottom) auto;
- box-sizing: border-box;
- border-radius: 8rpx;
- .top{
- padding: 30rpx;
- background-color: #fff;
- .top_name{
- font-size: 28rpx;
- font-weight: bold;
- }
- .top_count{
- margin-top: 45rpx;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .top_count_item{
- text-align: center;
- .name{
- color: #949494;
- font-size: 22rpx;
- }
- .value{
- font-size: 50rpx;
- font-weight: bold;
- margin-top: 15rpx;
- }
- }
- }
- }
-
- .bottom{
- background-color: #fff;
- margin-top: 15rpx;
- .bottom_name{
- font-size: 26rpx;
- color: $uni-primary;
- padding: 21rpx 24rpx;
- }
- .bottom_list{
- .bottom_list_item{
- border-top: 1rpx solid #DEDEDE;
- padding: 30rpx 30rpx 30rpx 30rpx;
- display: flex;
- justify-content: space-between;
- align-items: center;
- font-size: 24rpx;
- position: relative;
- .value{
- max-width: 380rpx;
- color: #333;
- display: flex;
- align-items: center;
- text-align: justify;
- margin-right: 30rpx;
- }
- .no-mar{
- margin-right:0 !important;
- }
- .icon{
- position: absolute;
- right: 20rpx;
- }
- }
- }
- }
- }
- .fixed-btn{
- position: fixed;
- bottom: 100rpx;
- left: 0;
- }
- }
- </style>
|