소스 검색

reactor:流程配置权限调整;工单受理编辑办理按钮逻辑判断调整;

zhangchong 1 년 전
부모
커밋
016136412c

+ 3 - 10
src/views/business/order/components/Order-detail.vue

@@ -165,7 +165,7 @@
 									{{ state.ruleForm.content }}
 								</el-form-item>
 							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-auth="'file:list'">
+							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 								<el-form-item label="附件">
 									<annex-list name="查看附件" readonly :businessId="state.ruleForm.id" classify="查看附件" />
 								</el-form-item>
@@ -413,7 +413,6 @@
 					type="primary"
 					@click="onRecord"
 					:loading="state.loading"
-					v-auth="'system:workflow:record'"
 					v-if="state.ruleForm?.workflowId"
 					>流程明细</el-button
 				>
@@ -430,7 +429,6 @@
 					type="primary"
 					@click="onSupervise"
 					:loading="state.loading"
-					v-auth="'business:order:urge:apply'"
 					v-if="[100,200].includes(state.ruleForm?.status)"
 					>督 办</el-button
 				>
@@ -439,7 +437,6 @@
 					type="primary"
 					@click="onUrge"
 					:loading="state.loading"
-					v-auth="'business:order:supervise:apply'"
 					v-if="[100,200].includes(state.ruleForm?.status)"
 				>
 					催 办</el-button
@@ -448,7 +445,6 @@
 				<el-button
 					type="primary"
 					@click="onSubmit('延期申请', '延期附件')"
-					v-auth="'business:order:delay'"
 					:loading="state.loading"
           v-if="[100,200].includes(state.ruleForm?.status)"
 					>延 期</el-button
@@ -459,21 +455,19 @@
 					@click="onSubmit('工单办理')"
 					:loading="state.loading"
 					v-if="[100,200].includes(state.ruleForm?.status) && state.workflow.canHandle"
-					v-auth="'business:order:handle'"
 					>办 理</el-button
 				>
 				<!-- 流程结束之后不展示补充按钮 -->
-				<!--				<el-button type="primary" @click="onSupply" :loading="state.loading" v-if="[0].includes(state.workflow.status)" v-auth="'workflow:supply'"
+				<!--				<el-button type="primary" @click="onSupply" :loading="state.loading" v-if="[0].includes(state.workflow.status)"
 					>补 充</el-button
 				>-->
-				<!--				<el-button type="primary" @click="onRevoke" :loading="state.loading" v-auth="'business:order:revoke'">撤 销</el-button>-->
+				<!--				<el-button type="primary" @click="onRevoke" :loading="state.loading">撤 销</el-button>-->
 				<!-- 工单未归档都可以撤回 -->
 				<!--				<el-button
 					type="primary"
 					@click="onSubmit('工单撤回')"
 					:loading="state.loading"
 					v-if="[0].includes(state.ruleForm.workflow?.status)"
-					v-auth="'business:order:recall'"
 					>撤 回(特提)</el-button
 				>-->
 				<!-- 办理中和会签中并且应该自己办理 -->
@@ -482,7 +476,6 @@
 					@click="onSubmit('工单退回')"
 					:loading="state.loading"
 					v-if="[100,200].includes(state.ruleForm?.status) && state.workflow.canHandle"
-					v-auth="'business:order:return'"
 					>退 回</el-button
 				>
 			</span>

+ 127 - 117
src/views/system/config/holiday/index.vue

@@ -6,26 +6,33 @@
 					<div>
 						<el-date-picker v-model="month" type="month" :clearable="false" placeholder="请选择月份" @change="selectMonth" />
 					</div>
-	 				<el-button-group>
-						<el-button type="primary" @click="setHoliday" :disabled="!multipleDates.length"> <SvgIcon name="ele-Sunny" class="mr3"/> 设定休息日</el-button>
-						<el-button type="primary" @click="setWorkDay" :disabled="!multipleDates.length"> <SvgIcon name="ele-Monitor" class="mr3"/> 设定工作日</el-button>
-            <el-button type="primary" @click="clearSelect" :disabled="!multipleDates.length"><SvgIcon name="ele-Delete" class="mr3"/> 清空选择</el-button>
+					<el-button-group v-ath="'system:holiday:workDay'">
+						<el-button type="primary" @click="setHoliday" :disabled="!multipleDates.length">
+							<SvgIcon name="ele-Sunny" class="mr3" /> 设定休息日</el-button
+						>
+						<el-button type="primary" @click="setWorkDay" :disabled="!multipleDates.length">
+							<SvgIcon name="ele-Monitor" class="mr3" /> 设定工作日</el-button
+						>
+						<el-button type="primary" @click="clearSelect" :disabled="!multipleDates.length"
+							><SvgIcon name="ele-Delete" class="mr3" /> 清空选择</el-button
+						>
+					</el-button-group>
+					<el-button-group>
+						<el-button @click="setWorkTime"><SvgIcon name="ele-AlarmClock" class="mr3" /> 设定工作时间</el-button>
 					</el-button-group>
-          <el-button-group>
-            <el-button @click="setWorkTime" ><SvgIcon name="ele-AlarmClock" class="mr3"/> 设定工作时间</el-button>
-          </el-button-group>
 				</template>
 				<template #date-cell="{ data }">
-          <template v-for="(item, index) in state.calendarData" :key="index">
-            <div v-if="data.day === item.currantTime" class="h100">
-              <el-checkbox v-model="item.checked" class="w100 h100">
-                <div>
-                  {{dayjs(data.day).format('D')}}<span :class="item.isWorkDay ? 'color-primary':'color-success'">({{ item.isWorkDay ? '工作日' :'休息日'}})</span>
-                </div>
-                <div class="lunar"  :class="{'color-danger font-bold':isFestival(data)}">{{ solarToLunar(data) }}</div>
-              </el-checkbox>
-            </div>
-          </template>
+					<template v-for="(item, index) in state.calendarData" :key="index">
+						<div v-if="data.day === item.currantTime" class="h100">
+							<el-checkbox v-model="item.checked" class="w100 h100">
+								<div>
+									{{ dayjs(data.day).format('D')
+									}}<span :class="item.isWorkDay ? 'color-primary' : 'color-success'">({{ item.isWorkDay ? '工作日' : '休息日' }})</span>
+								</div>
+								<div class="lunar" :class="{ 'color-danger font-bold': isFestival(data) }">{{ solarToLunar(data) }}</div>
+							</el-checkbox>
+						</div>
+					</template>
 				</template>
 			</el-calendar>
 		</el-card>
@@ -56,18 +63,20 @@
 </template>
 
 <script setup lang="ts" name="holidayConfig">
-import {ref, reactive, onMounted, computed} from 'vue';
-import {ElMessage, ElMessageBox, FormInstance} from 'element-plus';
-import dayjs from "dayjs";
-import calendar from '/@/utils/calendar.js'
-import {getDaysSetting, setHolidayApi} from '/@/api/system/holiday';
+import { ref, reactive, onMounted, computed } from 'vue';
+import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
+import dayjs from 'dayjs';
+import calendar from '/@/utils/calendar.js';
+import { getDaysSetting, setHolidayApi } from '/@/api/system/holiday';
+import { auth } from '/@/utils/authFunction';
+import { getDataByTypeId } from '/@/api/system/dict';
 
 const state = reactive<any>({
 	ruleForm: {
-    time: '',
-    time1: '',
+		time: '',
+		time1: '',
 	},
-  calendarData : [] // 日历数据
+	calendarData: [], // 日历数据
 });
 const today = ref(new Date()); // 当前日期
 const month = ref(new Date()); // 月份
@@ -75,56 +84,55 @@ const dialogVisible = ref(false); // 是否显示弹窗
 const loading = ref(false); // 加载状态
 // 选择月份
 const selectMonth = async (val: Date) => {
-  state.calendarData = [];
-  const days: number = dayjs(val).daysInMonth();
-  state.calendarData = Array.from({ length: days }, (_, i) => ({
-    currantTime: dayjs(val).startOf('month').add(i, 'day').format('YYYY-MM-DD'),
-    checked: false,
-    isWorkDay:![0,6].includes(dayjs(val).startOf('month').add(i, 'day').day())
-  }));
-  dateRange.value = [new Date(dayjs(val).startOf('month').format('YYYY-MM-DD')),
-    new Date(dayjs(val).endOf('month').format('YYYY-MM-DD'))];
-  await getSetting(dayjs(val).format('YYYY'),dayjs(val).format('MM'));
-  today.value = val;
+	state.calendarData = [];
+	const days: number = dayjs(val).daysInMonth();
+	state.calendarData = Array.from({ length: days }, (_, i) => ({
+		currantTime: dayjs(val).startOf('month').add(i, 'day').format('YYYY-MM-DD'),
+		checked: false,
+		isWorkDay: ![0, 6].includes(dayjs(val).startOf('month').add(i, 'day').day()),
+	}));
+	dateRange.value = [new Date(dayjs(val).startOf('month').format('YYYY-MM-DD')), new Date(dayjs(val).endOf('month').format('YYYY-MM-DD'))];
+	await getSetting(dayjs(val).format('YYYY'), dayjs(val).format('MM'));
+	today.value = val;
 };
 // 日期范围
-const dateRange = ref([new Date(dayjs(today.value).startOf('month').format('YYYY-MM-DD')),
-  new Date(dayjs(today.value).endOf('month').format('YYYY-MM-DD'))]); // 日期范围
+const dateRange = ref([
+	new Date(dayjs(today.value).startOf('month').format('YYYY-MM-DD')),
+	new Date(dayjs(today.value).endOf('month').format('YYYY-MM-DD')),
+]); // 日期范围
 // 设置休息日
 const setHoliday = () => {
-  ElMessageBox.confirm(
-      `您确定要将【${multipleDates.value.map((item:any) => dayjs(item).format('YYYY-MM-DD')).join(',')}】设为休息日吗?`,
-      '提示',
-      {
-        type: 'warning',
-        draggable:true
-      }
-  ).then(() => {
-    setHolidayApi({
-      list:multipleDates.value,isWorkDay:false
-    }).then(() => {
-      ElMessage.success('设置成功');
-      selectMonth(today.value);
-    })
-  }).catch(()=>{})
+	ElMessageBox.confirm(`您确定要将【${multipleDates.value.map((item: any) => dayjs(item).format('YYYY-MM-DD')).join(',')}】设为休息日吗?`, '提示', {
+		type: 'warning',
+		draggable: true,
+	})
+		.then(() => {
+			setHolidayApi({
+				list: multipleDates.value,
+				isWorkDay: false,
+			}).then(() => {
+				ElMessage.success('设置成功');
+				selectMonth(today.value);
+			});
+		})
+		.catch(() => {});
 };
 // 设置工作日
 const setWorkDay = () => {
-  ElMessageBox.confirm(
-      `您确定要将【${multipleDates.value.map((item:any) => dayjs(item).format('YYYY-MM-DD')).join(',')}】设为工作日吗?`,
-      '提示',
-      {
-        type: 'warning',
-        draggable:true
-      }
-  ).then(() => {
-    setHolidayApi({
-      list:multipleDates.value,isWorkDay:true
-    }).then(() => {
-      ElMessage.success('设置成功');
-      selectMonth(today.value);
-    })
-  }).catch(()=>{})
+	ElMessageBox.confirm(`您确定要将【${multipleDates.value.map((item: any) => dayjs(item).format('YYYY-MM-DD')).join(',')}】设为工作日吗?`, '提示', {
+		type: 'warning',
+		draggable: true,
+	})
+		.then(() => {
+			setHolidayApi({
+				list: multipleDates.value,
+				isWorkDay: true,
+			}).then(() => {
+				ElMessage.success('设置成功');
+				selectMonth(today.value);
+			});
+		})
+		.catch(() => {});
 };
 // 设置工作时间
 const setWorkTime = () => {
@@ -132,77 +140,79 @@ const setWorkTime = () => {
 };
 // 清除选择
 const clearSelect = () => {
-  state.calendarData.forEach((item:any) => {
-    item.checked = false;
-  })
+	state.calendarData.forEach((item: any) => {
+		item.checked = false;
+	});
 };
 // 获取所选中的日期
 const multipleDates = computed(() => {
-  return state.calendarData.filter((item:any) => item.checked).map((item:any) => item.currantTime);
+	return state.calendarData.filter((item: any) => item.checked).map((item: any) => item.currantTime);
 });
 // 表单ref
 const ruleFormRef = ref<RefType>();
 // 表单提交
 const onSubmit = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
-	formEl.validate((valid:boolean) => {
-    if(!valid) return;
-		
+	formEl.validate((valid: boolean) => {
+		if (!valid) return;
 	});
 };
 // 获取休息日设置
-const getSetting = async ( dateYear: string,dateMoth: string) => {
-  loading.value = true;
-  try {
-    const { result } = await getDaysSetting(dateYear,dateMoth);
-    result.forEach((i:any) => {
-      const item = state.calendarData.find((j:any)=> dayjs(i.day).format('YYYY-MM-DD') === j.currantTime);
-      if (item) {
-        item.isWorkDay = i.isWorkDay;
-      }
-    });
-  } catch {
-    // handle error if needed
-  } finally {
-    loading.value = false;
-  }
+const getSetting = async (dateYear: string, dateMoth: string) => {
+	loading.value = true;
+	if (!auth('system:holiday:query')) ElMessage.error('抱歉,您没有权限获取节假日设置!');
+	else {
+		try {
+			const { result } = await getDaysSetting(dateYear, dateMoth);
+			result.forEach((i: any) => {
+				const item = state.calendarData.find((j: any) => dayjs(i.day).format('YYYY-MM-DD') === j.currantTime);
+				if (item) {
+					item.isWorkDay = i.isWorkDay;
+				}
+			});
+		} catch {
+			// handle error if needed
+		} finally {
+			loading.value = false;
+		}
+	}
 };
 // 是否休息日
-const isFestival = (slotData:any)=> {
-  let solarDayArr = slotData.day.split('-');
-  let lunarDay:any = calendar.solar2lunar(solarDayArr[0], solarDayArr[1], solarDayArr[2])
-  return lunarDay.lunarFestival  || lunarDay.festival;
+const isFestival = (slotData: any) => {
+	let solarDayArr = slotData.day.split('-');
+	let lunarDay: any = calendar.solar2lunar(solarDayArr[0], solarDayArr[1], solarDayArr[2]);
+	return lunarDay.lunarFestival || lunarDay.festival;
 };
 // 公历转农历
-const solarToLunar = (slotData:any)=> {
-  let solarDayArr = slotData.day.split('-');
-  let lunarDay:any = calendar.solar2lunar(solarDayArr[0], solarDayArr[1], solarDayArr[2])
-  // 农历日期
-  let lunarMD = lunarDay.IMonthCn + lunarDay.IDayCn;
-  return lunarDay.lunarFestival ? lunarDay.lunarFestival : lunarDay.festival ? lunarDay.festival : lunarMD
+const solarToLunar = (slotData: any) => {
+	let solarDayArr = slotData.day.split('-');
+	let lunarDay: any = calendar.solar2lunar(solarDayArr[0], solarDayArr[1], solarDayArr[2]);
+	// 农历日期
+	let lunarMD = lunarDay.IMonthCn + lunarDay.IDayCn;
+	return lunarDay.lunarFestival ? lunarDay.lunarFestival : lunarDay.festival ? lunarDay.festival : lunarMD;
 };
-onMounted(async ()=>{
-  const days: number = dayjs(today.value).daysInMonth();
-  state.calendarData = Array.from({ length: days }, (_, i) => ({
-    currantTime: dayjs(today.value).startOf('month').add(i, 'day').format('YYYY-MM-DD'),
-    isWorkDay:![0,6].includes(dayjs(today.value).startOf('month').add(i, 'day').day()),
-    checked: false
-  }));
-  await getSetting(dayjs(today.value).format('YYYY'),dayjs(today.value).format('MM'));
-})
+onMounted(async () => {
+	const days: number = dayjs(today.value).daysInMonth();
+	state.calendarData = Array.from({ length: days }, (_, i) => ({
+		currantTime: dayjs(today.value).startOf('month').add(i, 'day').format('YYYY-MM-DD'),
+		isWorkDay: ![0, 6].includes(dayjs(today.value).startOf('month').add(i, 'day').day()),
+		checked: false,
+	}));
+	await getSetting(dayjs(today.value).format('YYYY'), dayjs(today.value).format('MM'));
+});
 </script>
 <style scoped lang="scss">
 /**日期div的样式-农历*/
 .el-calendar-table .el-calendar-day > div .lunar {
-  padding-top: 10px;
+	padding-top: 10px;
 }
-:deep(.el-checkbox){
-  align-items: center;
-  justify-content: center;
+:deep(.el-checkbox) {
+	align-items: center;
+	justify-content: center;
 }
-:deep(.el-checkbox__input){
-  position: absolute;
-  right: 0;
-  top: 0;
+:deep(.el-checkbox__input) {
+	position: absolute;
+	right: 0;
+	top: 0;
 }
 </style>

+ 2 - 51
src/views/system/config/workflow/index.vue

@@ -52,8 +52,8 @@
               <el-table-column prop="definition.version" label="模板版本" show-overflow-tooltip></el-table-column>
               <el-table-column label="操作" width="160" fixed="right" align="center">
                 <template #default="{ row }">
-                  <el-button link type="primary" @click="onConfig(row)"  title="配置模板"> 配置模板</el-button>
-                  <el-button link type="danger" @click="configClear(row)"  title="清除配置" v-if="row.definition"> 清除配置 </el-button>
+                  <el-button link type="primary" @click="onConfig(row)"  title="配置模板" v-auth="'system:workflow:template:config'"> 配置模板</el-button>
+                  <el-button link type="danger" @click="configClear(row)"  title="清除配置" v-if="row.definition" v-auth="'system:workflow:template:clear'"> 清除配置 </el-button>
                 </template>
               </el-table-column>
 						</template>
@@ -75,19 +75,6 @@
 									<el-button link type="success" v-if="row.status === 0" @click="onReleaseTemp(row)" title="发布" v-auth="'system:workflow:template:publish'" >
 										发布
 									</el-button>
-									<!-- <el-button link type="warning" v-if="row.status === 2" @click="tempEnable(row)" title="启用" v-auth="'system:workflow:template:enable'">
-                    启用
-                  </el-button> -->
-									<!--									<el-button-->
-									<!--										link-->
-									<!--										type="danger"-->
-									<!--										v-if="row.status === 1"-->
-									<!--										@click="tempDisable(row)"-->
-									<!--										title="禁用"-->
-									<!--										v-auth="'system:workflow:template:disable'"-->
-									<!--									>-->
-									<!--										禁用-->
-									<!--									</el-button>-->
 									<!-- 发布之后不能修改 -->
 									<el-button link v-if="row.status === 0" type="danger" @click="onDeleteTemp(row)" title="删除" v-auth="'system:workflow:template:delete'">
 										删除
@@ -323,42 +310,6 @@ const onReleaseTemp = async (row: any) => {
 			})
 			.catch(() => {});
 };
-// 启用模板
-const tempEnable = (row: any) => {
-	ElMessageBox.confirm(`此操作将启用模板:“${row.name}”,是否继续?`, '提示', {
-		confirmButtonText: '确认',
-		cancelButtonText: '取消',
-		type: 'warning',
-		draggable: true,
-		cancelButtonClass: 'default-button',
-		autofocus: false,
-	})
-		.then(() => {
-			workflowEnable(row.id).then(() => {
-				ElMessage.success('启用成功');
-				queryList();
-			});
-		})
-		.catch(() => {});
-};
-// 禁用模板
-const tempDisable = (row: any) => {
-	ElMessageBox.confirm(`此操作将禁用模板:“${row.name}”,是否继续?`, '提示', {
-		confirmButtonText: '确认',
-		cancelButtonText: '取消',
-		type: 'warning',
-		draggable: true,
-		cancelButtonClass: 'default-button',
-		autofocus: false,
-	})
-		.then(() => {
-			workflowDisable(row.id).then(() => {
-				ElMessage.success('禁用成功');
-				queryList();
-			});
-		})
-		.catch(() => {});
-};
 // 跳转流程
 const onLink = (row: any) => {
 	workflowJumpRef.value.openDialog(row);

+ 6 - 1
src/views/todo/seats/accept/index.vue

@@ -442,7 +442,7 @@
 									<el-form-item>
                     <el-button class="default-button" @click="onCancel"> 取消 </el-button>
 										<el-button class="default-button" @click="save(ruleFormRef)" :loading="buttonLoading"> 保存 </el-button>
-										<el-button type="primary" @click="submit(ruleFormRef)" :loading="buttonLoading"> 办理 </el-button>
+										<el-button type="primary" @click="submit(ruleFormRef)" :loading="buttonLoading" v-if="canHandle"> 办理 </el-button>
 									</el-form-item>
 								</el-col>
 							</el-row>
@@ -857,6 +857,11 @@ const selectIdentity = (val: number) => {
 		state.ruleForm.pushTypeCode = state.ruleForm.pushTypeObj.dicDataValue;
 	}
 };
+// 是否可以办理(如果有流程id 并且当前账号可以办理 则可以办理 没有流程ID都可以办理)
+const canHandle = computed(() => {
+  if(state.ruleForm?.workflowId) return state.ruleForm?.workflow?.canHandle;
+  else return true;
+});
 // 流程审批
 const processAuditRef = ref<RefType>();
 const processOrder = (orderDetail: any) => {