Browse Source

feat(application): 优化护理申请流程和界面

- 新增护理申请审核、指派等功能
- 重构护理申请列表和详情页面布局
- 优化护理申请状态显示和处理逻辑
- 调整导航栏和按钮样式
lzm 3 months ago
parent
commit
afb2f001bc

+ 9 - 2
common/config/application-api.js

@@ -20,8 +20,15 @@ export const getCareInfo = (data) => http.get(`/dev-api/care/applications/${data
 
 
 //护理送审
-export const putCareSend = (params, config = {}) => http.put('/dev-api/care/applications', params, config);
+export const postCareStart = (params, config = {}) => http.post('/dev-api/care/applications/start', params, config);
 
 //流程记录列表
 export const getCareRecords = (data) => http.get('/dev-api/care/careRecords/list', data);
-
+//删除审批单
+export const delCareApp = (params, config = {}) => http.delete(`/dev-api/care/applications/${params.id??0}`, params, config);
+//护理指派
+export const postCareAssign = (parmas, config = {}) => http.post('/dev-api/care/applications/assign', parmas, config)
+//护理审核
+export const postCareCheck = (parmas, config = {}) => http.post('/dev-api/care/applications/check', parmas, config)
+//完成护理申请
+export const postCareComplete = (parmas, config = {}) => http.post('/dev-api/care/applications/complete', parmas, config)

+ 64 - 66
common/status/index.js

@@ -1,55 +1,59 @@
-const STATUS_CONFIGE = {
-	care_apply_status: [{
-			dictCode: 119,
-			dictLabel: "待指派人员",
-			dictSort: 0,
-			dictType: "care_apply_status",
-			dictValue: "wait_assign_nurse"
-		},
-		{
-			dictCode: 110,
-			dictLabel: "待审核",
-			dictSort: 1,
-			dictType: "care_apply_status",
-			dictValue: "wait_check"
-		},
-		{
-			dictCode: 111,
-			dictLabel: "已同意",
-			dictSort: 2,
-			dictType: "care_apply_status",
-			dictValue: "agree"
-		},
-		{
-			dictCode: 112,
-			dictLabel: "不同意",
-			dictSort: 3,
-			dictType: "care_apply_status",
-			dictValue: "disagree"
-		},
-		{
-			dictCode: 113,
-			dictLabel: "待指派公司",
-			dictSort: 4,
-			dictType: "care_apply_status",
-			dictValue: "wait_assign_company"
-		},
-		{
-			dictCode: 114,
-			dictLabel: "已指派",
-			dictSort: 5,
-			dictType: "care_apply_status",
-			dictValue: "assigned"
-		},
-		{
-			dictCode: 121,
-			dictLabel: "未送审",
-			dictSort: 6,
-			dictType: "care_apply_status",
-			dictValue: "no_check"
-		}
-	],
-	sys_user_sex: [{
+// 1(未送审状态-刚添加了数据) 
+// 2(未送审状态 - 数据被退回啊)  
+// 3(护理申请审核 - 审核) - 区民政
+// 4(护理指派公司 - 指派) - 区民政
+// 5(护理指派人员 - 指派) - 护理公司
+// 6(护理打卡 - 打卡) - 护理人员
+const STATUS_CONFIGE = [{
+		dictCode: 119,
+		dictLabel: "待指派人员",
+		dictSort: 0,
+		dictType: "care_apply_status",
+		dictValue: "wait_assign_nurse"
+	},
+	{
+		dictCode: 110,
+		dictLabel: "待审核",
+		dictSort: 1,
+		dictType: "care_apply_status",
+		dictValue: "wait_check"
+	},
+	{
+		dictCode: 111,
+		dictLabel: "已同意",
+		dictSort: 2,
+		dictType: "care_apply_status",
+		dictValue: "agree"
+	},
+	{
+		dictCode: 112,
+		dictLabel: "不同意",
+		dictSort: 3,
+		dictType: "care_apply_status",
+		dictValue: "disagree"
+	},
+	{
+		dictCode: 113,
+		dictLabel: "待指派公司",
+		dictSort: 4,
+		dictType: "care_apply_status",
+		dictValue: "wait_assign_company"
+	},
+	{
+		dictCode: 114,
+		dictLabel: "已指派",
+		dictSort: 5,
+		dictType: "care_apply_status",
+		dictValue: "assigned"
+	},
+	{
+		dictCode: 121,
+		dictLabel: "未送审",
+		dictSort: 6,
+		dictType: "care_apply_status",
+		dictValue: "no_check"
+	},
+	{
 		dictCode: 1,
 		dictLabel: "男",
 		dictSort: 1,
@@ -67,9 +71,7 @@ const STATUS_CONFIGE = {
 		dictSort: 3,
 		dictType: "sys_user_sex",
 		dictValue: "2"
-	}],
-
-	pay_status: [{
+	}, {
 		dictCode: 117,
 		dictLabel: "未结算",
 		dictSort: 1,
@@ -81,8 +83,7 @@ const STATUS_CONFIGE = {
 		dictSort: 2,
 		dictType: "pay_status",
 		dictValue: "is_pay"
-	}],
-	deal_status: [{
+	}, {
 		dictCode: 120,
 		dictLabel: "未开始",
 		dictSort: 0,
@@ -100,16 +101,13 @@ const STATUS_CONFIGE = {
 		dictSort: 2,
 		dictType: "deal_status",
 		dictValue: "complete"
-	}]
-}
-
-export function getDict(dbName = 'deal_status', query = {}) {
-	if (typeof dbName !== 'string' && typeof query !== 'object') return {};
+	}
+]
+export function getDict(query = {}) {
+	if (typeof query !== 'object') return {};
 	if (Object.keys(query).length === 0) return {};
-	let dbData = STATUS_CONFIGE[dbName];
 	let distRes = {};
-	// console.log('dbData=>', dbData);
-	dbData.some((dict) => {
+	STATUS_CONFIGE.some((dict) => {
 		let bool = true;
 		for (var key in query) {
 			if (dict.hasOwnProperty(key)) {
@@ -126,4 +124,4 @@ export function getDict(dbName = 'deal_status', query = {}) {
 		}
 	})
 	return distRes;
-}
+}

+ 3 - 2
pages/subpack/components/apply/apply-item.vue

@@ -54,7 +54,7 @@ import {
 	}
 	const statusText = computed(()=>{
 		if(props.item.dealStatus === 'complete') return '已完成';
-		let dict = getDict('care_apply_status', {dictValue: props.item.status});
+		let dict = getDict({dictValue: props.item.status, dictType: 'care_apply_status'});
 		return dict.dictLabel??'空状态';
 	})
 </script>
@@ -84,7 +84,8 @@ import {
 			border-radius: 0 20rpx 0 20rpx;
 			font-weight: 500;
 		}
-		&-tag1{
+		&-tag1,
+		&-tagno_start{
 			background: linear-gradient(to right, #EFEFEF 0%, #EFEFEF 100%);
 			color: #888888;
 		}

+ 73 - 22
pages/subpack/pages/application/componenets/page1.vue

@@ -1,13 +1,14 @@
 <template>
 	<view class="page1-warp">
 		<up-form labelPosition="top" :model="formData" ref="formRef">
-			<up-form-item label="指派任务" labelWidth="auto" required>
+			<!-- 'wait_assign_company,wait_assign_nurse'.includes(item.status) -->
+			<up-form-item label="指派任务" labelWidth="auto" v-if="item.status && item.status.includes('wait_assign')" required>
 				<view class="flex-row justify-between align-center" style="width: 100%;">
-					<!-- <view>
+					<view v-if="item.status === 'wait_assign_company'">
 						<view class="">护理公司</view>
 						<view>请选择护理公司</view>
-					</view> -->
-					<view>
+					</view>
+					<view v-if="item.status === 'wait_assign_nurse'">
 						<view class="flow-tips">护理人员</view>
 						<view class="flow-tips-content" :class="{'theme-color': chooseInfo.name}">
 							{{chooseInfo.name??'请选择护理人员'}}
@@ -21,7 +22,7 @@
 
 				</view>
 			</up-form-item>
-			<up-form-item label="护理打卡(0/6)" labelWidth="auto" required>
+			<!-- <up-form-item label="护理打卡(0/6)" labelWidth="auto" required>
 				<view class="flex-row justify-between align-center" style="width: 100%;">
 					<u-upload :sizeType="['compressed']" :capture="['camera']" />
 				</view>
@@ -32,26 +33,22 @@
 						:size="25" />
 					<view>{{formData.score*10}}</view>
 				</view>
-			</up-form-item>
+			</up-form-item> -->
 			<up-form-item label="审批意见" labelWidth="auto" required>
 				<up-textarea v-model="formData.remark" placeholder="请输入您的审批意见" count />
 			</up-form-item>
 		</up-form>
 		<view class="btn-box">
 			<view class="flex-row ">
-				<view class="u-flex flex-column align-center justify-center" style="width: 120rpx;">
-					<u-icon name="file-text-fill" color="#909399" size="24"/>
-					<view>编辑</view>
-				</view>
-				<view style="width: 20rpx;"></view>
-				<up-button class="up-button" type="primary">提交审核</up-button>
+				<up-button class="up-button" v-if="isShowBack" type="error" 
+				style="width: 250rpx;" @tap="checkTap(2)">‌退回</up-button>
+				<view v-if="isShowBack" class="btn-place"></view>
+				<up-button v-if='item.status && item.status.includes("wait_assign")' 
+				class="up-button" type="primary" @tap="assignTap"
+				>指派</up-button>
+				<up-button v-else class="up-button" type="primary"
+				 @tap="checkTap(1)">通过</up-button>
 			</view>
-			<!-- <view>
-				<up-button class="up-button" type="error" style="width: 250rpx;">‌退回</up-button>
-				<view class="btn-place"></view>
-				<up-button class="up-button" type="primary">通过</up-button>
-			</view> -->
-			
 		</view>
 	</view>
 </template>
@@ -62,10 +59,21 @@
 		reactive,
 		computed
 	} from 'vue';
+	import {
+		useStore
+	} from 'vuex';
 	import {
 		onLoad,
 		onUnload
 	} from "@dcloudio/uni-app"
+	import {
+		postCareAssign,
+		postCareCheck,
+		postCareComplete
+	} from '@/common/config/application-api.js'
+	
+	
+	const store = useStore();
 	const props = defineProps({
 		item: {
 			type: Object,
@@ -82,8 +90,12 @@
 		careStaff: '', //护理人员
 		score: 1, //评分
 	})
+	const formRule = reactive({
+		remark: ''
+	})
 	const chooseInfo = ref({}); //选择的数据
-
+	
+	//名字取值
 	const nameText = computed(() => {
 		return (name) => {
 			let index = name.length - 2;
@@ -92,7 +104,7 @@
 		};
 	})
 
-
+	//跳转选择的页面
 	function goToChoosePage() {
 		let params = {
 			maxCount: 1
@@ -100,10 +112,49 @@
 		if (chooseInfo.value.name) {
 			params.dufaultIds = chooseInfo.value.id + "";
 		}
-		console.log(params);
 		uni.$u.route('/pages/subpack/pages/application/choose', params)
 	}
-
+	
+	//是否显示退回按钮
+	function isShowBack(){
+		let user = store.state.vuex_user;
+		return user.roles.includes('area') && props.item.status == 'wait_check';
+	}
+	
+	//点击处理指派
+	function assignTap(){
+		postCareComplete({...props.item}).then(res=>{
+			uni.$u.toast('指派成功');
+			uni.$emit('renderApplyList');
+			setTimeout(()=>{
+				uni.$u.route({
+					type: 'back'
+				})
+			}, 1000)
+		})
+	}
+	//点击处理审核 1 审核  2 退回
+	function checkTap(type = 2){
+		if(!formData.remark){
+			uni.$u.toast('审核理由不能为空');
+			return false;
+		}
+		let checkParams = {...props.item};
+		checkParams.status = 'wait_assign_company';
+		if(type == 2) {
+			checkParams.status = 'disagree';
+		}
+		checkParams.auditReason = formData.remark;
+		postCareCheck(checkParams).then(res=>{
+			uni.$u.toast('审核成功');
+			uni.$emit('renderApplyList');
+			setTimeout(()=>{
+				uni.$u.route({
+					type: 'back'
+				})
+			}, 1000)
+		})
+	}
 
 	onLoad(() => {
 		uni.$on('choose', ({

+ 101 - 13
pages/subpack/pages/application/componenets/page2.vue

@@ -22,6 +22,22 @@
 				</view>
 			</view>
 		</view>
+		<view v-if="'no_check,disagree'.includes(item.status)">
+			<view class="btn-box-place"></view>
+			<view class="btn-box flex-row" :class="{'btn-box-disagree': item.status == 'disagree'}">
+				<view class="u-flex flex-column align-center justify-center" style="width: 120rpx;" @tap="editTap">
+					<u-icon name="file-text-fill" color="#909399" size="24" />
+					<view style="font-size: 28rpx;color: 909399;">编辑</view>
+				</view>
+				<view class="u-flex flex-column align-center justify-center" style="width: 120rpx;margin-left: 20rpx;"
+					@tap="delTap">
+					<u-icon name="trash-fill" color="#909399" size="24" />
+					<view style="font-size: 28rpx;color: 909399;">删除</view>
+				</view>
+				<view style="width: 20rpx;"></view>
+				<up-button class="up-button" type="primary" @tap="applyTap">提交审核</up-button>
+			</view>
+		</view>
 	</view>
 </template>
 
@@ -32,9 +48,10 @@
 		ref
 	} from 'vue';
 	import {
-			getDict
-		} from '@/common/status/index.js'
-	
+		getDict
+	} from '@/common/status/index.js'
+	import {delCareApp, postCareStart} from '@/common/config/application-api.js'
+
 	const props = defineProps({
 		item: {
 			type: Object,
@@ -69,13 +86,16 @@
 		},
 	])
 	//中间层 - item和objKeyValue
-	const itemHandle = computed(()=>{
+	const itemHandle = computed(() => {
 		let itemArray = uni.$u.deepClone(objKeyValue);
-		itemArray.map(keyObj=>{
-			if(props.item.hasOwnProperty(keyObj.key)){
+		itemArray.map(keyObj => {
+			if (props.item.hasOwnProperty(keyObj.key)) {
 				let value = props.item[keyObj.key];
-				if(keyObj.key === 'nurseGender'){
-					value = getDict('sys_user_sex', {dictValue: value}).dictLabel??'-';
+				if (keyObj.key === 'nurseGender') {
+					value = getDict({
+						dictValue: value,
+						dictType: 'sys_user_sex'
+					}).dictLabel ?? '-';
 				}
 				keyObj.value = value;
 			}
@@ -83,20 +103,69 @@
 		return itemArray;
 	})
 
-
-
-
+	//编辑按钮
+	function editTap() {
+		uni.$u.route('/pages/subpack/pages/apply/apply', {
+			id: props.item.applyId
+		})
+	}
+	//删除按钮
+	function delTap() {
+		uni.showModal({
+			title: '提示',
+			content: '您确定删除吗?',
+			success(res) {
+				if (res.confirm) {
+					delCareApp({id: props.item.applyId}).then(res=>{
+						uni.$u.toast('删除成功');
+						uni.$emit('renderApplyList');
+						setTimeout(()=>{
+							uni.$u.route({
+								type: 'back'
+							})
+						}, 1000)
+						
+					})
+				}
+			}
+		})
+	}
+	//审核按钮
+	function applyTap() {
+		uni.showModal({
+			title: '提示',
+			content: '您确定提交审核吗?',
+			success(res) {
+				if (res.confirm) {
+					postCareStart({...props.item}).then(res=>{
+						uni.$u.toast('送审成功');
+						uni.$emit('renderApplyList');
+						setTimeout(()=>{
+							uni.$u.route({
+								type: 'back'
+							})
+						}, 1000)
+					})
+				}
+			}
+		})
+	}
 </script>
 
 <style lang="scss" scoped>
-	.info-dot{
+	:deep(.u-button--normal) {
+		font-size: 28rpx !important;
+	}
+
+	.info-dot {
 		position: relative;
 		margin: 20rpx;
 		padding-left: 20rpx;
 		font-size: 36rpx;
 		color: #0B0B0B;
 	}
-	.info-dot::before{
+
+	.info-dot::before {
 		content: '';
 		position: absolute;
 		width: 12rpx;
@@ -145,4 +214,23 @@
 			border-bottom: none;
 		}
 	}
+
+	.btn-box-place {
+		height: 130rpx;
+	}
+
+	.btn-box {
+		padding: 20rpx 36rpx;
+		background-color: #fff;
+		position: fixed;
+		height: 120rpx;
+		display: flex;
+		align-items: center;
+		bottom: 0;
+		width: 690rpx;
+		z-index: 999999;
+	}
+	.btn-box-disagree{
+		bottom: calc(50px + var(--status-bar-height));
+	}
 </style>

+ 111 - 45
pages/subpack/pages/application/info.vue

@@ -7,15 +7,16 @@
 		</view> -->
 		<!-- 加载组件 -->
 		<view>
-			<Page1 class="page1" :item="appItem" v-show="tabbarIndex === 0" />
-			<Page2 class="page2" :item="appItem" v-show="tabbarIndex === 1" />
-			<Page3 class="page3" :item="appItem" v-show="tabbarIndex === 2" />
+			<Page1 class="page1" :item="appItem" v-show="judgePageIsShow('page2')" />
+			<Page2 class="page2" :item="appItem" v-show="judgePageIsShow('page1')" />
+			<Page3 class="page3" :item="appItem" v-show="judgePageIsShow('page3')" />
 		</view>
-		<up-tabbar :value="tabbarIndex" @change="tabbarChange" fixed placeholder safeAreaInsetBottom>
-			<up-tabbar-item text="特困审批" icon="chrome-circle-fill" />
-			<up-tabbar-item text="基本信息" icon="file-text-fill" />
-			<up-tabbar-item text="申请进度" icon="hourglass-half-fill" />
-		</up-tabbar>
+		<u-tabbar :value="tabbarKey" v-if="judgeTabbarIsShow('tabbar')" @change="tabbarChange" fixed placeholder safeAre
+			aInsetBottom>
+			<u-tabbar-item name="page1" text="基本信息" icon="file-text-fill" />
+			<u-tabbar-item name="page2" text="特困审批" v-if="judgeTabbarIsShow('page2')" icon="chrome-circle-fill" />
+			<u-tabbar-item name="page3" text="申请进度" v-if="judgeTabbarIsShow('page3')" icon="hourglass-half-fill" />
+		</u-tabbar>
 	</view>
 </template>
 
@@ -23,7 +24,8 @@
 	import {
 		reactive,
 		ref,
-		computed
+		computed,
+		getCurrentInstance
 	} from 'vue';
 	import Page1 from './componenets/page1.vue';
 	import Page2 from './componenets/page2.vue';
@@ -31,36 +33,83 @@
 	import {
 		onLoad
 	} from '@dcloudio/uni-app'
-	import { getCareInfo } from '@/common/config/application-api.js'
-	// todo 权限分等级
-	// 计算属性来确定要渲染的组件名称
-	// const pages = [Page1, Page2, Page3];
-	// const currentComponent = computed(() => pages[tabbarIndex.value]);
-	//tabbar 
+	import {
+		getCareInfo
+	} from '@/common/config/application-api.js'
+	const {
+		proxy
+	} = getCurrentInstance();
 	const id = ref(0);
-	const tabbarIndex = ref(0);
+	const tabbarKey = ref('page1');
 	const appItem = ref({})
 
-	function tabbarChange(index) {
-		if (index === tabbarIndex) return;
-		tabbarIndex.value = index;
+	function tabbarChange(key) {
+		if (key === tabbarKey.value) return;
+		tabbarKey.value = key;
 	}
 	const handleTitle = computed(() => {
-		if (tabbarIndex.value === 0) return '特困审批';
-		else if (tabbarIndex.value === 1) return '基本信息';
+		if (tabbarKey.value === 'page2') return '特困审批';
+		else if (tabbarKey.value === 'page1') return '基本信息';
 		else return '申请进度';
 	})
-	
+	const roleAuthStatus = {
+		village: ['no_check'],
+		area: ['wait_assign_company', 'wait_check'],
+		nurse: ['no_check'],
+		company: ['wait_assign_nurse'],
+	}
+
+	function judgePageIsShow(pageName = 'page1') {
+		let status = appItem.value.status;
+		let dealStatus = appItem.value.dealStatus;
+		let roles = proxy.vuex_user.roles;
+		let judgeBool = true;
+		let roleAuthArray = [];
+		roles.map(role => {
+			if (roleAuthStatus.hasOwnProperty(role)) roleAuthArray.push(...roleAuthStatus[role]);
+		})
+		//审批页面只能区民政、公司看到
+		if (pageName === 'page2') {
+			if (dealStatus == 'complete') judgeBool = false;
+			else if (roles.includes('village')) judgeBool = false;
+			else if (!roleAuthArray.includes(status)) judgeBool = false;
+			//流程记录页面只有除了护理人员之外的人看到	
+		} else if (pageName === 'page3') {
+			if (roles.includes('nurse')) judgeBool = false;
+		}
+		return judgeBool && tabbarKey.value == pageName;
+	}
+	//tabbar page1 page2 page3
+	function judgeTabbarIsShow(pageName = 'page1') {
+		let status = appItem.value.status;
+		let dealStatus = appItem.value.dealStatus;
+		let roles = proxy.vuex_user.roles;
+		let roleAuthArray = [];
+		roles.map(role => {
+			if (roleAuthStatus.hasOwnProperty(role)) roleAuthArray.push(...roleAuthStatus[role]);
+		})
+		//当只有一个tabbar的时候 比如未审核的时候
+		if (pageName === 'tabbar' && status == 'no_check') return false;
+		if (pageName === 'page2') {
+			if (dealStatus == 'complete') return false;
+			else if (roles.includes('village')) return false;
+			else if (!roleAuthArray.includes(status)) return false;
+		} else if (pageName === 'page3') {
+			if (roles.includes('nurse')) return false;
+		}
+		return true;
+	}
+
 	function initData() {
 		getCareInfo({
 			id: id.value
-		}).then(res=>{
+		}).then(res => {
 			appItem.value = res;
 			// console.log('getCareInfo=>', res);
 		})
 	}
-	onLoad((params)=>{
-		if(params.id) {
+	onLoad((params) => {
+		if (params.id) {
 			id.value = params.id;
 			initData();
 		}
@@ -72,34 +121,41 @@
 	}
 </style>
 <style lang="scss" scoped>
-	::v-deep{
-		.u-navbar__content__title{
+	::v-deep {
+		.u-navbar__content__title {
 			font-weight: bold;
 			font-size: 36rpx;
 			color: #222222;
 		}
+
 		.u-navbar__content,
-		.u-status-bar{
+		.u-status-bar {
 			background: radial-gradient(circle at left, #FFE5E4 0%, #EEF2F5 40%, #DBEEFB 100%);
 		}
-		.u-tabbar-item__text{
+
+		.u-tabbar-item__text {
 			font-size: 30rpx;
 		}
-		.u-tabbar-item__icon{
-			.u-icon__icon{
+
+		.u-tabbar-item__icon {
+			.u-icon__icon {
 				font-size: 50rpx !important;
 			}
 		}
-		.u-textarea{
+
+		.u-textarea {
 			background-color: rgba(245, 248, 252, 1) !important;
 			border: none;
 		}
-		.u-textarea__count{
+
+		.u-textarea__count {
 			background-color: transparent !important;
 		}
-		.u-steps-item{
+
+		.u-steps-item {
 			padding-bottom: 50rpx;
 		}
+
 		.u-steps-item__line {
 			background: repeating-linear-gradient(to bottom,
 					#207DFF 0,
@@ -107,54 +163,64 @@
 					transparent 4rpx,
 					transparent 8rpx) !important;
 		}
+
 		.u-steps-item__content {
 			margin-top: 0 !important;
 			margin-left: 30rpx !important;
-			.u-text__value{
+
+			.u-text__value {
 				font-size: 32rpx !important;
 				color: #222222 !important;
 			}
 		}
-		.up-icon{
+
+		.up-icon {
 			padding: 10rpx;
 			border-radius: 5rpx;
-			border: 1px dashed rgba(0,0,0,0.6);
+			border: 1px dashed rgba(0, 0, 0, 0.6);
 			width: 50rpx;
 			height: 50rpx;
 			justify-content: center;
 		}
-	} 
+	}
+
 	.page1 {
+
 		// background-color: red;
-		:deep{
-			.u-form-item__body{
+		:deep {
+			.u-form-item__body {
 				background-color: #fff;
 				border-radius: 5rpx;
 				padding: 10rpx;
 				margin-bottom: 20rpx;
 			}
-			.u-form-item__body__right__content{
+
+			.u-form-item__body__right__content {
 				margin-top: 10rpx;
 				background-color: #fff;
 				border-radius: 5rpx;
 				padding: 0 24rpx;
 			}
-			.u-form-item__body__left__content__label{
+
+			.u-form-item__body__left__content__label {
 				font-weight: 550;
 				font-size: 32rpx;
-				color: rgba(0,0,0,0.85);
+				color: rgba(0, 0, 0, 0.85);
 				padding-left: 24rpx;
 			}
-			.u-form-item__body__left__content__required{
+
+			.u-form-item__body__left__content__required {
 				left: 0;
 			}
-			.u-textarea{
+
+			.u-textarea {
 				background-color: #fff !important;
 				border: none;
 				padding: 0;
 			}
 		}
 	}
+
 	.u-navbar-box {
 		background: radial-gradient(circle at left, #FFE5E4 0%, #EEF2F5 40%, #DBEEFB 100%);
 	}

+ 24 - 13
pages/subpack/pages/application/list.vue

@@ -33,6 +33,10 @@
 	import {
 		getCareList
 	} from '@/common/config/application-api.js'
+	import {
+		onLoad,
+		onUnload
+	} from '@dcloudio/uni-app'
 	const store = useStore();
 	const user = store.state.vuex_user;
 
@@ -67,7 +71,7 @@
 		common: [{
 			name: '进行中',
 			query: {
-				dealStatus: 'in_progress'
+				dealStatus: 'in_progress',
 			}
 		}, {
 			name: '已完成',
@@ -78,7 +82,7 @@
 		admin: [{
 			name: '进行中',
 			query: {
-				dealStatus: 'in_progress'
+				dealStatus: 'in_progress',
 			}
 		}, {
 			name: '已完成',
@@ -89,12 +93,13 @@
 		village: [{
 			name: '未送审',
 			query: {
-				status: 'no_check'
+				status: 'no_check,disagree'
 			}
 		}, {
 			name: '进行中',
 			query: {
-				dealStatus: 'in_progress'
+				status: 'wait_assign_nurse,wait_check,agree,wait_assign_company,assigned',
+				dealStatus: 'in_progress',
 			}
 		}, {
 			name: '已完成',
@@ -103,19 +108,15 @@
 			}
 		}],
 		area: [{
-			name: '待审核',
-			query: {
-				status: 'wait_check'
-			}
-		}, {
-			name: '待指派',
+			name: '待处理',
 			query: {
-				status: 'wait_assign_company'
+				status: 'wait_check,wait_assign_company'
 			}
 		}, {
 			name: '进行中',
 			query: {
-				dealStatus: 'in_progress'
+				status: 'wait_assign_nurse,agree,wait_assign_company,assigned',
+				dealStatus: 'in_progress',
 			}
 		}, {
 			name: '已完成',
@@ -136,7 +137,8 @@
 		}, {
 			name: '进行中',
 			query: {
-				dealStatus: 'in_progress'
+				status: 'care_apply_status',
+				dealStatus: 'in_progress',
 			}
 		}, {
 			name: '已完成',
@@ -208,6 +210,15 @@
 		if(!item.applyId) return false;
 		uni.$u.route('/pages/subpack/pages/application/info',{id: item.applyId})
 	}
+	onLoad(()=>{
+		uni.$on('renderApplyList',()=>{
+			proxy.$refs.paging.reload();
+		})
+	})
+	
+	onUnload(()=>{
+		uni.$off('renderApplyList')
+	})
 </script>
 <style>
 	page {

+ 12 - 5
pages/tabbar/mine/mine.vue

@@ -20,29 +20,36 @@
 		</view>
 		<u-cell-group :border="false" :customStyle="{background: '#fff', margin: '30rpx', borderRadius: '20rpx'}">
 			<!-- 县民政 -->
-			<u-cell v-if="vuex_user.roles.includes('village')" icon="setting-fill" title="护理申请" isLink url="/pages/subpack/pages/application/list">
+			<u-cell v-if="vuex_user.roles.includes('village')" title="护理申请" isLink url="/pages/subpack/pages/application/list">
+				<template #icon>
+					<u-image src="/static/mine/task.png" bgColor="transparent" width="36rpx" height="36rpx" />
+				</template>
+			</u-cell>
+			<!-- 县民政 -->
+			<u-cell v-if="vuex_user.roles.includes('village')" title="业务评分" isLink url="/pages/subpack/pages/application/list">
 				<template #icon>
 					<u-image src="/static/mine/task.png" bgColor="transparent" width="36rpx" height="36rpx" />
 				</template>
 			</u-cell>
 			<!-- 区民政 -->
-			<u-cell v-if="vuex_user.roles.includes('area')" icon="setting-fill" title="护理审核" isLink url="/pages/subpack/pages/application/list">
+			<u-cell v-if="vuex_user.roles.includes('area')" title="护理审核" isLink url="/pages/subpack/pages/application/list">
 				<template #icon>
 					<u-image src="/static/mine/task.png" bgColor="transparent" width="36rpx" height="36rpx" />
 				</template>
 			</u-cell>
 			<!-- 护理人员 -->
-			<u-cell icon="setting-fill" title="护理打卡" isLink url="/pages/subpack/pages/application/list">
+			<u-cell v-if="vuex_user.roles.includes('nurse')" title="护理打卡" isLink url="/pages/subpack/pages/application/list">
 				<template #icon>
 					<u-image src="/static/mine/task.png" bgColor="transparent" width="36rpx" height="36rpx" />
 				</template>
 			</u-cell>
-			<!-- 县民政 -->
-			<u-cell icon="setting-fill" title="业务评分" isLink url="/pages/subpack/pages/application/list">
+			<!-- 护理公司 -->
+			<u-cell v-if="vuex_user.roles.includes('company')" title="护理指派" isLink url="/pages/subpack/pages/application/list">
 				<template #icon>
 					<u-image src="/static/mine/task.png" bgColor="transparent" width="36rpx" height="36rpx" />
 				</template>
 			</u-cell>
+			
 			<u-cell icon="integral-fill" title="个人信息" isLink :border="false" url="/pages/subpack/pages/myInfo/info">
 				<template #icon>
 					<u-image src="/static/mine/myself.png" bgColor="transparent" width="36rpx" height="36rpx" />