Sfoglia il codice sorgente

reactor:消息通知对接;

zhangchong 1 anno fa
parent
commit
c7868bf323

+ 12 - 0
src/api/auxiliary/notice.ts

@@ -15,6 +15,18 @@ export const megcount = (params?: object) => {
         params
     });
 };
+/**
+ * @description 获取我的通知列表
+ * @param {object} params
+ * @return {*}
+ */
+export const muquery = (params?: object) => {
+    return request({
+        url: '/api/v1/Article/circular/muquery',
+        method: 'get',
+        params
+    });
+};
 /**
  * @description 获取所有用户列表
  * @param {object} params

+ 16 - 41
src/components/ProcessAudit/index.vue

@@ -396,39 +396,11 @@
 							<el-checkbox v-model="state.ruleForm.isSms" label="短信通知" />
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="formComponents.includes('ProvinceDelay')">
+<!--					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<el-form-item label="省延期申请" prop="applyDelayProvince">
 							<el-checkbox v-model="state.ruleForm.applyDelayProvince" label="省延期申请" />
 						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="formComponents.includes('Timelimit')">
-						<el-form-item label="办理时限">
-							<el-row :gutter="10">
-								<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-									<el-form-item label="" prop="timeLimitCount" :rules="[{ required: true, message: '请输入办理时限数量', trigger: 'blur' }]">
-										<el-input-number
-											placeholder="办理时限数量"
-											v-model="state.ruleForm.timeLimitCount"
-											controls-position="right"
-											class="w100"
-										></el-input-number>
-									</el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-									<el-form-item
-										label=""
-										label-width="0"
-										prop="timeLimitUnit"
-										:rules="[{ required: true, message: '请选择办理时限单位', trigger: 'change' }]"
-									>
-										<el-select v-model="state.ruleForm.timeLimitUnit" placeholder="办理时限单位" clearable>
-											<el-option v-for="item in timeTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
-										</el-select>
-									</el-form-item>
-								</el-col>
-							</el-row>
-						</el-form-item>
-					</el-col>
+					</el-col>-->
 					<!--  办理流程展示期满时间  -->
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="handelArr.includes(state.processType)">
 						<el-form-item label="期满时间" prop="expiredTime" :rules="[{ required: true, message: '请选择期满时间', trigger: 'change' }]">
@@ -525,14 +497,14 @@
 						v-if="activeStep === 0 && showStepsArr.includes(state.processType)"
 						>下一步</el-button
 					>
-					<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="state.loading" v-if="activeStep === 1">提 交</el-button>
-					<el-button
-						type="primary"
-						@click="onReject(ruleFormRef)"
-						:loading="state.loading"
-						v-if="activeStep === 1 && formComponents.includes('Reject')"
-						>驳 回</el-button
-					>
+          <el-button
+              type="primary"
+              @click="onReject(ruleFormRef)"
+              :loading="state.loading"
+              v-if="activeStep === 1 && canReject"
+          >驳 回</el-button
+          >
+					<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="state.loading" v-if="activeStep === 1">{{ canReject ? '同意' : '提交' }}</el-button>
 				</span>
 			</template>
 		</el-dialog>
@@ -637,7 +609,7 @@ const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
 const showStepsArr = ['延期申请', '甄别申请', '工单重办', '新增通知', '新增公告']; // 显示步骤条的流程
 const handelArr = ['工单办理', '甄别审批']; // 处于办理状态的流程 (如果是汇总节点 需要填写处理人等  办理流程才有期满时间)
 const returnArr = ['工单退回']; // 退回流程 (退回流程不需要展示其他 只需要填写意见和附件即可)
-const formComponents = ref<EmptyArrayType>([]); // 表单组件
+
 const communicationModeOptions = ref<EmptyArrayType>([]); // 沟通方式
 const timeTypeOptions = ref<EmptyArrayType>([]); // 延期申请单位
 const orderRedoReasonOptions = ref<EmptyArrayType>([]); // 重办理由
@@ -649,15 +621,17 @@ const pushRangesOptions = ref<EmptyArrayType>([]); // 公告范围
 const orgsOptions = ref<EmptyArrayType>([]); // 来源单位
 const circularOrgOptions = ref<EmptyArrayType>([]); // 通知对象 部门
 const userTables = ref<EmptyArrayType>([]); // 通知对象 个人
+const canReject = ref<boolean>(false); // 是否可以驳回
 
 const handleResult = (res: any) => {
 	state.nextStepOptions = res.result.steps; //处理人选择内容
 	state.ruleForm.backToCountersignEnd = res.result.backToCountersignEnd ?? false; // 是否回到会签结束节点
+  canReject.value = res.result.canReject ?? false; // 是否可以驳回
 
 	// state.handleId = res.result.id; //流程ID
-	formComponents.value = res.result.components ?? []; // 表单组件
 	communicationModeOptions.value = res.result.communicationModeOptions ?? []; // 沟通方式
 	timeTypeOptions.value = res.result.timeTypeOptions ?? []; // 时间单位
+
 	if (handelArr.includes(state.processType)) {
 		// 办理才有期满时间
 		state.ruleForm.expiredTime = res.result.expiredTime ?? null; // 期满时间
@@ -952,7 +926,8 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.validate((valid: boolean) => {
 		if (!valid) return;
-		ElMessageBox.confirm(`确认提交?`, '提示', {
+    const isAuditText = canReject.value ? '同意' : '提交';
+		ElMessageBox.confirm(`确认${isAuditText}?`, '提示', {
 			confirmButtonText: '确认',
 			cancelButtonText: '取消',
 			type: 'warning',

+ 3 - 23
src/layout/navBars/breadcrumb/user.vue

@@ -20,17 +20,8 @@
 		<div class="layout-navbars-breadcrumb-user-icon mr10" @click="onLayoutSetingClick" title="布局配置"  v-if="showSetting">
       <SvgIcon name="icon-skin iconfont" size="18px"/>
 		</div>
-		 <div class="layout-navbars-breadcrumb-user-icon mr10" title="消息">
-			<el-popover placement="bottom" trigger="click" transition="el-zoom-in-top" :width="300" :persistent="false">
-				<template #reference>
-					<el-badge :value="messageCount" :max="99" :hidden="messageHidden">
-            <SvgIcon name="ele-Bell" size="18px"/>
-					</el-badge>
-				</template>
-				<template #default>
-					<UserNews @onAllReadClick="onAllReadClick"/>
-				</template>
-			</el-popover>
+		 <div class="layout-navbars-breadcrumb-user-icon mr10" title="消息通知">
+       <UserNews />
 		</div>
 		 <div class="layout-navbars-breadcrumb-user-icon mr10" @click="onLockScreen" title="锁屏">
        <SvgIcon name="ele-Lock" size="18px"/>
@@ -197,14 +188,6 @@ const state = reactive({
 		pwd: '', // 锁频密码
 	},
 });
-const messageCount = ref<number>(2);//消息数量
-const messageHidden = computed(() => { //消息是否隐藏
-  return messageCount.value === 0;
-});
-// 全部已读点击
-const onAllReadClick = () => {
-  messageCount.value = 0;
-};
 //  检查密码强度
 let modes = ref<number>(0);
 const checkPassword = (rule: any, value: string, callback: any) => {
@@ -505,10 +488,7 @@ onMounted(() => {
 		cursor: pointer;
 		color: var(--hotline-color-text-main);
 		&:hover {
-			i {
-				display: inline-block;
-				animation: logoAnimation 0.3s ease-in-out;
-			}
+
 		}
 	}
 

+ 87 - 36
src/layout/navBars/breadcrumb/userNews.vue

@@ -1,54 +1,101 @@
 <template>
 	<div class="layout-navbars-breadcrumb-user-news">
-		<div class="head-box">
-			<div class="head-box-title">通知</div>
-			<div class="head-box-btn" v-if="state.newsList.length > 0" @click="onAllReadClick">全部已读</div>
-		</div>
-		<div class="content-box">
-			<template v-if="state.newsList.length > 0">
-				<div class="content-box-item" v-for="(v, k) in state.newsList" :key="k">
-					<div>{{ v.label }}</div>
-					<div class="content-box-msg">
-						{{ v.value }}
-					</div>
-					<div class="content-box-time">{{ v.time }}</div>
+		<el-popover placement="bottom" trigger="click" popper-class="layout-navbars-breadcrumb-user-news" transition="el-zoom-in-top" :width="300" :persistent="false">
+			<template #reference>
+				<el-badge :value="messageCount" :max="99" :hidden="messageHidden">
+					<SvgIcon name="ele-Bell" size="18px" />
+				</el-badge>
+			</template>
+			<template #default>
+				<div class="head-box">
+					<div class="head-box-title">通知</div>
+					<div class="head-box-btn" v-if="state.newsList.length > 0" @click="onAllReadClick">全部已读</div>
+				</div>
+				<div class="content-box">
+					<template v-if="state.newsList.length > 0">
+						<div class="content-box-item" v-for="(v, k) in state.newsList" :key="k" @click="linkNews(v)">
+							<div class="text-no-wrap">{{ v.title }}</div>
+							<div class="content-box-msg">
+                <div class="text-ellipsis2" v-html="v.content"></div>
+							</div>
+							<div class="content-box-time">{{ formatDate(v.circularTime,'YYYY-mm-dd HH:MM:SS') }}</div>
+						</div>
+					</template>
+					<el-empty description="暂无通知" v-else></el-empty>
 				</div>
 			</template>
-			<el-empty description="暂无通知" v-else></el-empty>
-		</div>
-		<div class="foot-box" @click="onGoToGiteeClick" v-if="state.newsList.length > 0">前往通知中心</div>
+		</el-popover>
 	</div>
 </template>
 
 <script setup lang="ts" name="layoutBreadcrumbUserNews">
-import { reactive } from 'vue';
-const emit = defineEmits(['onAllReadClick']);
+import {reactive, computed, ref, onMounted} from 'vue';
+import signalR from '/@/utils/signalR';
+import { formatDate } from '/@/utils/formatTime';
+import {useRouter} from 'vue-router';
+import {megcount,muquery} from '/@/api/auxiliary/notice'
+
 const state = reactive({
-	newsList: [
-		{
-			label: '标题',
-			value: '内容',
-			time: '2020-12-08',
-		},
-		{
-			label: '标题',
-			value: '内容!',
-			time: '2020-12-08',
-		},
-	],
+	newsList: [],
 });
 // 全部已读点击
 const onAllReadClick = () => {
 	state.newsList = [];
-  emit('onAllReadClick');
+	messageCount.value = 0;
 };
-// 前往通知中心点击
-const onGoToGiteeClick = () => {
 
-};
+const messageCount = ref<number>(2); //消息数量
+const messageHidden = computed(() => {
+	//消息是否隐藏
+	return messageCount.value === 0;
+});
+
+// 获取数量
+const getNumAndList = async ()=>{
+  try {
+    const [megcountRes,muqueryRes] = await Promise.all([megcount(),muquery({circularState:2})])
+    messageCount.value = megcountRes.result?.personCount+megcountRes.result?.orgCount;
+    state.newsList = muqueryRes.result?.items ?? [];
+  }catch (e) {
+    console.log(e,'获取消息数量失败')
+  }
+}
+// 点击消息通知
+const router = useRouter();
+const linkNews = (v:any)=>{
+  router.push({
+    name: 'auxiliaryNoticeDetail',
+    params: {
+      id: v.id,
+      isRead: 1,
+      tagsViewName:'通知详情',
+    },
+  });
+}
+onMounted(()=>{
+  getNumAndList();
+  if(signalR.SR){
+    signalR.SR.on('CircularRecord', (data: any) => {
+      // 小红点数量消息通知
+      console.log(data, '小红点数量消息通知');
+      getNumAndList();
+    });
+  }else{
+    //  signalR 初始化signalr
+    signalR.init();
+    // 加入分组
+    signalR.joinGroup('CallCenter');
+    console.log('signalR.SR不存在');
+    signalR.SR.on('CircularRecord', (data: any) => {
+      // 小红点数量消息通知
+      console.log(data, '小红点数量消息通知');
+      getNumAndList();
+    });
+  }
+})
 </script>
 
-<style scoped lang="scss">
+<style lang="scss">
 .layout-navbars-breadcrumb-user-news {
 	.head-box {
 		display: flex;
@@ -75,8 +122,12 @@ const onGoToGiteeClick = () => {
 		font-size: 13px;
 
 		.content-box-item {
-			padding-top: 12px;
-
+			padding: 12px 10px 5px 10px;
+      border-radius: 5px;
+      &:hover{
+        background-color: var(--el-color-primary-light-9);
+        cursor: pointer;
+      }
 			&:last-of-type {
 				padding-bottom: 12px;
 			}

+ 1 - 0
src/utils/signalR.ts

@@ -92,6 +92,7 @@ export default {
 			await this.SR.invoke('LeaveGroupAsync', {GroupName:groupName});
 		}
 	},
+
 	/**
 	 * @description 关闭链接
 	 * @returns

+ 84 - 79
src/views/auxiliary/notice/index.vue

@@ -56,9 +56,12 @@
 				</el-form-item>
 			</el-form>
 			<div class="mb20">
-				<el-button type="primary" @click="onNoticeAdd" v-waves v-auth="'auxiliary:notice:add'">
+				<el-button type="primary" @click="onNoticeAdd" v-if="listType === '0'" v-auth="'auxiliary:notice:add'" title="新增通知">
 					<SvgIcon name="ele-Plus" class="mr5" />新增
 				</el-button>
+        <el-button type="primary" @click="onNoticeAdd" v-else v-auth="'auxiliary:bulletin:add'" title="新增公告">
+          <SvgIcon name="ele-Plus" class="mr5" />新增
+        </el-button>
 			</div>
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
@@ -69,33 +72,33 @@
 					<el-table-column prop="circularStateText" label="通知状态" show-overflow-tooltip></el-table-column>
 					<el-table-column prop="title" label="通知标题" show-overflow-tooltip></el-table-column>
 					<el-table-column prop="commonTypeText" label="必须阅读" show-overflow-tooltip>
-            <template #default="{ row }">
-              {{row.isMustRead ? '是' : '否'}}
-            </template>
-          </el-table-column>
+						<template #default="{ row }">
+							{{ row.isMustRead ? '是' : '否' }}
+						</template>
+					</el-table-column>
 					<el-table-column prop="commonTypeText" label="已阅读数" show-overflow-tooltip>
-            <template #default="{ row }">
-              <el-popover placement="right" :width="400" trigger="click">
-                <template #reference>
-                  <el-button link type="primary">{{row.readedNum+'/'+row.needReadNum}}</el-button>
-                </template>
-                  <el-table :data="row.circularReadGroups" v-loading="state.loading" row-key="id" ref="multipleTableRef">
-                    <el-table-column prop="userName" label="姓名" show-overflow-tooltip v-if="row.circularType === 1"></el-table-column>
-                    <el-table-column prop="orgName" label="部门名称" show-overflow-tooltip v-if="row.circularType === 2"></el-table-column>
-                    <el-table-column prop="isRead" label="阅读状态" show-overflow-tooltip>
-                      <template #default="{ row }">
-                       {{row.isRead ? '已读' : '未读'}}
-                      </template>
-                    </el-table-column>
-                    <el-table-column prop="isTimeOut" label="超时" show-overflow-tooltip>
-                      <template #default="{ row }">
-                        {{row.isTimeOut ? '已超时' : '未超时'}}
-                      </template>
-                    </el-table-column>
-                  </el-table>
-              </el-popover>
-            </template>
-          </el-table-column>
+						<template #default="{ row }">
+							<el-popover placement="right" :width="400" trigger="click">
+								<template #reference>
+									<el-button link type="primary">{{ row.readedNum + '/' + row.needReadNum }}</el-button>
+								</template>
+								<el-table :data="row.circularReadGroups" v-loading="state.loading" row-key="id" ref="multipleTableRef">
+									<el-table-column prop="userName" label="姓名" show-overflow-tooltip v-if="row.circularType === 1"></el-table-column>
+									<el-table-column prop="orgName" label="部门名称" show-overflow-tooltip v-if="row.circularType === 2"></el-table-column>
+									<el-table-column prop="isRead" label="阅读状态" show-overflow-tooltip>
+										<template #default="{ row }">
+											{{ row.isRead ? '已读' : '未读' }}
+										</template>
+									</el-table-column>
+									<el-table-column prop="isTimeOut" label="超时" show-overflow-tooltip>
+										<template #default="{ row }">
+											{{ row.isTimeOut ? '已超时' : '未超时' }}
+										</template>
+									</el-table-column>
+								</el-table>
+							</el-popover>
+						</template>
+					</el-table-column>
 					<el-table-column prop="circularTypeText" label="通知对象" show-overflow-tooltip></el-table-column>
 					<el-table-column prop="commonTypeText" label="通知时间" show-overflow-tooltip width="170">
 						<template #default="{ row }">
@@ -128,12 +131,11 @@
 					</el-table-column>
 					<el-table-column prop="creatorOrgName" label="来源单位" show-overflow-tooltip></el-table-column>
 				</template>
-        <el-table-column label="操作" width="140" fixed="right" align="center">
-          <template #default="{ row }">
-            <el-button link type="primary" @click="onDetail(row)" v-auth="'auxiliary:notice:detail'"> 查看详情 </el-button>
-            <el-button link type="primary" @click="onEdit(row)" v-auth="'auxiliary:notice:edit'"> 编辑 </el-button>
-          </template>
-        </el-table-column>
+				<el-table-column label="操作" width="140" fixed="right" align="center">
+					<template #default="{ row }">
+						<el-button link type="primary" @click="onDetail(row)" v-auth="'auxiliary:notice:detail'"> 查看详情 </el-button>
+					</template>
+				</el-table-column>
 				<template #empty>
 					<Empty />
 				</template>
@@ -148,14 +150,14 @@
 		</el-card>
 		<!-- 流程审批 -->
 		<process-audit ref="processAuditRef" @orderProcessSuccess="queryList" />
-    <!--  编辑通知公告  -->
-    <notice-edit ref="noticeEditRef" />
+		<!--  编辑通知公告  -->
+		<notice-edit ref="noticeEditRef" />
 	</div>
 </template>
 
 <script lang="ts" setup name="auxiliaryNotice">
-import {reactive, ref, onMounted, defineAsyncComponent} from 'vue';
-import {useRouter} from "vue-router";
+import { reactive, ref, onMounted, defineAsyncComponent } from 'vue';
+import { useRouter } from 'vue-router';
 import { ElMessage, FormInstance } from 'element-plus';
 import { shortcuts } from '/@/utils/constants';
 import { formatDate } from '/@/utils/formatTime';
@@ -181,7 +183,7 @@ const state = reactive<any>({
 		exTime: [],
 		Time: [],
 		BulletinTypeId: null, //通知类型
-    CircularTypeId:null,
+		CircularTypeId: null,
 	},
 	total: 0, // 总条数
 	tableData: [], // 表格数据
@@ -198,7 +200,7 @@ const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
 		state.queryParams[startKey] = '';
 		state.queryParams[endKey] = '';
 	}
-  queryList();
+	queryList();
 };
 // 甄别时间
 const timeStartChangeCr = (val: string[]) => {
@@ -209,10 +211,10 @@ const timeStartChange = (val: string[]) => {
 };
 const getBaseData = async () => {
 	try {
-    const resCircularType = await circularBaseData();
-    circularType.value = resCircularType.result?.circularType ?? [];
-    const res = await bulletinBaseData();
-    bulletinType.value = res.result.bulletinType ?? [];
+		const resCircularType = await circularBaseData();
+		circularType.value = resCircularType.result?.circularType ?? [];
+		const res = await bulletinBaseData();
+		bulletinType.value = res.result.bulletinType ?? [];
 	} catch (error) {
 		console.log(error);
 	}
@@ -220,16 +222,16 @@ const getBaseData = async () => {
 // 获取参数列表
 const queryList = () => {
 	state.loading = true;
-	if (!auth('auxiliary:notice:query')) ElMessage.error('抱歉,您没有权限获取通知公告列表!');
-	else {
-		switch (listType.value) {
-			case '0': //通知
-        const requestCircular = {
-          title: state.queryParams.Title,
-          CircularTypeId: state.queryParams.CircularTypeId,
-          CircularTimeStart: state.queryParams.CircularTimeStart,
-          CircularTimeEnd: state.queryParams.CircularTimeEnd,
-        }
+	switch (listType.value) {
+		case '0': //通知
+			if (!auth('auxiliary:notice:query')) ElMessage.error('抱歉,您没有权限获取通知公告列表!');
+			else {
+				const requestCircular = {
+					title: state.queryParams.Title,
+					CircularTypeId: state.queryParams.CircularTypeId,
+					CircularTimeStart: state.queryParams.CircularTimeStart,
+					CircularTimeEnd: state.queryParams.CircularTimeEnd,
+				};
 				circularList(requestCircular)
 					.then((res) => {
 						state.loading = false;
@@ -239,25 +241,28 @@ const queryList = () => {
 					.finally(() => {
 						state.loading = false;
 					});
-				break;
-			case '1': // 公告
-        const requestBulletin = {
-          title: state.queryParams.Title,
-          BulletinTypeId: state.queryParams.BulletinTypeId,
-          BulletinTimeStart: state.queryParams.BulletinTimeStart,
-          BulletinTimeEnd: state.queryParams.BulletinTimeEnd,
-        }
+			}
+			break;
+		case '1': // 公告
+			if (!auth('auxiliary:bulletin:query')) ElMessage.error('抱歉,您没有权限获取通知公告列表!');
+			else {
+				const requestBulletin = {
+					title: state.queryParams.Title,
+					BulletinTypeId: state.queryParams.BulletinTypeId,
+					BulletinTimeStart: state.queryParams.BulletinTimeStart,
+					BulletinTimeEnd: state.queryParams.BulletinTimeEnd,
+				};
 				bulletinList(requestBulletin)
 					.then((res) => {
 						state.loading = false;
-						state.tableData = res.result.items ?? []
+						state.tableData = res.result.items ?? [];
 						state.total = res.result.total ?? 0;
 					})
 					.finally(() => {
 						state.loading = false;
 					});
-				break;
-		}
+			}
+			break;
 	}
 };
 // 重置表单
@@ -289,22 +294,22 @@ const onNoticeAdd = () => {
 };
 // 查看详情
 const router = useRouter();
-const onDetail = (row:any)=>{
-  const tagsViewName = listType.value === '0' ? '通知详情' : '公告详情';
-  router.push({
-    name:'auxiliaryNoticeDetail',
-    params:{
-      id:row.id,
-      isRead:0,
-      tagsViewName,
-    }
-  })
-}
+const onDetail = (row: any) => {
+	const tagsViewName = listType.value === '0' ? '通知详情' : '公告详情';
+	router.push({
+		name: 'auxiliaryNoticeDetail',
+		params: {
+			id: row.id,
+			isRead: 0,
+			tagsViewName,
+		},
+	});
+};
 // 编辑
 const noticeEditRef = ref<RefType>(); // 通知公告编辑
-const onEdit = (row:any)=>{
-  noticeEditRef.value.openDialog(row,listType.value);
-}
+const onEdit = (row: any) => {
+	noticeEditRef.value.openDialog(row, listType.value);
+};
 // 表格多选
 const multipleTableRef = ref<RefType>();
 const multipleSelection = ref<any>([]);
@@ -313,7 +318,7 @@ const handleSelectionChange = (val: any[]) => {
 };
 // 页面加载时
 onMounted(() => {
-  getBaseData();
+	getBaseData();
 	queryList();
 });
 </script>

+ 3 - 1
src/views/quality/project/index.vue

@@ -47,8 +47,10 @@
 							active-text="启用"
 							inactive-text="禁用"
 							@change="changeIsEnable(row)"
+              v-if="auth('quality:project:edit')"
 						/>
-					</template>
+            <span v-else>{{ row.isEnable === 1 ? '启用' : '禁用' }}</span>
+					</template >
 				</el-table-column>
 				<el-table-column prop="creatorName" label="创建人" show-overflow-tooltip></el-table-column>
 				<el-table-column prop="creationTime" label="创建时间" show-overflow-tooltip width="170">

+ 2 - 0
src/views/quality/template/index.vue

@@ -40,7 +40,9 @@
                 active-text="启用"
                 inactive-text="禁用"
                 @change="changeIsEnable(row)"
+                v-if="auth('quality:template:edit')"
             />
+            <span v-else>{{ row.isEnable === 1 ? '启用' : '禁用' }}</span>
           </template>
         </el-table-column>
 				<el-table-column prop="creatorName" label="创建人" show-overflow-tooltip></el-table-column>

+ 1 - 1
src/views/system/roles/component/Role-permission.vue

@@ -33,7 +33,7 @@
 				:props="{ label: 'pageName', children: 'children', class: customNodeClass }"
 			>
 				<template #default="{ data }">
-					<span>{{ data.pageName }}</span>
+					<span>{{ data.pageName }} {{ data.permissionCode }}</span>
 				</template>
 			</el-tree>
 		</div>

+ 1 - 1
src/views/system/roles/component/Role-user-list.vue

@@ -5,7 +5,7 @@
 			<el-table-column type="index" width="60" label="序号" fixed="left" />
 			<el-table-column prop="name" label="姓名" show-overflow-tooltip width="200" fixed="left"></el-table-column>
 			<el-table-column prop="userName" label="账号" show-overflow-tooltip width="200"></el-table-column>
-			<el-table-column prop="organization.orgName" label="所属部门" show-overflow-tooltip width="190"></el-table-column>
+			<el-table-column prop="organization.name" label="所属部门" show-overflow-tooltip width="190"></el-table-column>
 			<el-table-column prop="phoneNo" label="电话号码" show-overflow-tooltip width="130"></el-table-column>
 			<el-table-column prop="staffNo" label="工号" show-overflow-tooltip width="100"></el-table-column>
 			<el-table-column prop="genderText" label="性别" show-overflow-tooltip width="80"></el-table-column>

+ 2 - 0
src/views/system/user/component/User-add.vue

@@ -71,6 +71,8 @@
 							class="w100"
 							placeholder="请选择角色"
 							clearable
+              collapse-tags
+              collapse-tags-tooltip
 						/>
 					</el-form-item>
 				</el-col>

+ 2 - 0
src/views/system/user/component/User-edit.vue

@@ -71,6 +71,8 @@
 							class="w100"
 							placeholder="请选择角色"
 							clearable
+              collapse-tags
+              collapse-tags-tooltip
 						/>
 					</el-form-item>
 				</el-col>

+ 1 - 1
src/views/system/user/index.vue

@@ -142,7 +142,7 @@ watch(filterOrg, (val) => {
 // 搜索部门名称
 const filterNodeOrg = (value: string, data: any) => {
 	if (!value) return true;
-	return data.orgName.includes(value);
+	return data.name.includes(value);
 };
 /** 搜索按钮操作 节流操作 */
 const handleQuery = throttle(() => {