apple 1 день назад
Родитель
Сommit
28604540d2

+ 15 - 14
js/load.js

@@ -11,19 +11,20 @@ window.ss = { dom: { TYPE : { "INPUT" : 1, "OBJP":2,"DATE":3,"TIME":4,"DATETIME"
 window.SS = window.ss;//最终都用小写ss,暂时先兼容大写SS
 
 (function(){
-    const _deps = [
-        ['script', '/js/ajax/axios.js',''],	// , '/newUI/ss/ajax/axios.js',。Lin(新UI)
-        ['script', '/js/vue/vue3.js',''],	// , '/newUI/ss/vue/vue3.js',。Lin(新UI)
-        ['script', '/js/vue/vue-router.gloabl.js',''],	// , '/newUI/ss/vue/vue-router.gloabl.js',。Lin(新UI)
-        ['script', '/js/lodash/lodash.js',''],	// , '/newUI/ss/lodash/lodash.js',。Lin(新UI)
-        ['script', '/js/elementPlus/element-plus.js',''],	// , '/newUI/ss/elementPlus/element-plus.js',。Lin(新UI)
-        ['script', '/js/elementPlus/element-plus-zhCN.js',''],	// , '/newUI/ss/elementPlus/element-plus-zhCN.js',。Lin(新UI)
-        ['script', '/js/echarts/echarts5-5-0.js',''],	// , '/newUI/ss/echarts/echarts5-5-0.js'。Lin(新UI)
-        ['script', '/js/jodit/ace.js',''],	// , `/newUI/ss/jodit/ace.js`,。Lin(新UI)
-        ['script', '/js/jodit/beautify.min.js',''],	// , `/newUI/ss/jodit/beautify.min.js`,。Lin(新UI)
-        ['script', '/js/jodit/beautify-html.min.js',''],	// , `/newUI/ss/jodit/beautify-html.min.js`,。Lin(新UI)
-        // ['script', `/newUI/ss/jodit/theme-idle_fingers.js`,''],
-        // ['script', `/newUI/ss/jodit/mode-html.js`,''],
+	    const _deps = [
+	        ['script', '/js/ajax/axios.js',''],	// , '/newUI/ss/ajax/axios.js',。Lin(新UI)
+	        ['script', '/js/vue/vue3.js',''],	// , '/newUI/ss/vue/vue3.js',。Lin(新UI)
+	        ['script', '/js/vue/vue-router.gloabl.js',''],	// , '/newUI/ss/vue/vue-router.gloabl.js',。Lin(新UI)
+	        ['script', '/js/lodash/lodash.js',''],	// , '/newUI/ss/lodash/lodash.js',。Lin(新UI)
+	        ['script', '/js/elementPlus/element-plus.js',''],	// , '/newUI/ss/elementPlus/element-plus.js',。Lin(新UI)
+	        ['script', '/js/elementPlus/element-plus-zhCN.js',''],	// , '/newUI/ss/elementPlus/element-plus-zhCN.js',。Lin(新UI)
+	        ['script', '/js/echarts/echarts5-5-0.js',''],	// , '/newUI/ss/echarts/echarts5-5-0.js'。Lin(新UI)
+	        ['script', '/js/Sortable/Sortable.min.js',''],	// 业务面板拖拽排序 by xu 20260106
+	        ['script', '/js/jodit/ace.js',''],	// , `/newUI/ss/jodit/ace.js`,。Lin(新UI)
+	        ['script', '/js/jodit/beautify.min.js',''],	// , `/newUI/ss/jodit/beautify.min.js`,。Lin(新UI)
+	        ['script', '/js/jodit/beautify-html.min.js',''],	// , `/newUI/ss/jodit/beautify-html.min.js`,。Lin(新UI)
+	        // ['script', `/newUI/ss/jodit/theme-idle_fingers.js`,''],
+	        // ['script', `/newUI/ss/jodit/mode-html.js`,''],
         ['script', '/js/jodit/jodit.js',''],	// , '/newUI/ss/jodit/jodit.js',。Lin(新UI)
         ['script', '/js/vue/tools.js','module'],	// , '/newUI/ss/js/tools.js',。Lin(新UI)
         ['script', '/js/vue/icon-config.js','module'],	// , '/newUI/ss/js/icon-config.js',。Lin(新UI)
@@ -98,4 +99,4 @@ window.SS = window.ss;//最终都用小写ss,暂时先兼容大写SS
     } else {
         loadAll();
     }
-})();
+})();

Разница между файлами не показана из-за своего большого размера
+ 1604 - 105
js/vue/ss-components.js


+ 2110 - 0
mock/ry_objList.html

@@ -0,0 +1,2110 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<script>window.loginStatus = "1"</script>
+	<LINK href="/skin/easy/main.css" rel="stylesheet" type="text/css">
+
+	<script type="text/javascript" src="/ss/jquery/jquery.js"></script>
+	<script type="text/javascript" src="/ss/artdialog/artDialogUtil.js"></script>
+	<script type="text/javascript" src="/ss/js/base.js"></script>
+	<script> if (!window.wd) var wd = {}; if (!wd.display) wd.display = {}; wd.display.wdDialogId = "objList"; if (!wd.app) wd.app = {}; wd.app.name = 'pms';</script>
+	<script type="text/javascript" src="/ss/js/masklayer.js"></script>
+	<script type="text/javascript" src="/ss/js/wdDialogInit.js"></script>
+	<script type="text/javascript" src="/ss/js/common.js"></script>
+	<script type="text/javascript" src="/ss/js/display.js"></script>
+	<script type="text/javascript" src="/ss/js/edit.js"></script>
+	<script type="text/javascript" src="/ss/nicescroll/jquery.nicescroll.js"></script>
+	<script type="text/javascript" src="/ss/nicescroll/jquery.nicescroll.iframehelper.min.js"></script>
+	<link rel="stylesheet" type="text/css" href="/ss/window/theme/dhtmlxwindows.css">
+	<link rel="stylesheet" type="text/css" href="/ss/window/theme/dhx_blue/dhtmlxwindows_dhx_blue.css">
+	<script type="text/javascript" src="/ss/window/dhtmlxcommon.js"></script>
+	<script type="text/javascript" src="/ss/window/dhtmlxwindows.js"></script>
+	<script type="text/javascript" src="/ss/window/dhtmlxcontainer.js"></script>
+	<script type="text/javascript" src="/ss/js/common.js"></script>
+	<script type="text/javascript" src="/ss/js/display.js"></script>
+	<script type="text/javascript" src="/ss/js/edit.js"></script>
+	<ssDlg setPval="true" />
+	<script type="text/javascript" src="/ss/jquery/jquery.ellipsis.js"></script>
+
+
+	<script src="/js/load.js"></script>
+	<script src="/js/pageC.js"></script>
+
+
+
+
+
+
+
+
+	<script>
+		window.ss.dom.formElemConfig = window.ss.dom.formElemConfig || {};
+	</script>
+</head>
+
+<body>
+
+	<div id="app">
+
+		<form class="page-container" id="myForm"
+			action="/service?ssToken=d66b3011932e436f841ea8cacc05209f&P_A=ry_cx_objList_notInrylbm11005100sfyzry1dataTypechangeisReady1"
+			method="post">
+			<input type="hidden" name="isAnd" value='' />
+			<input name="management" type="hidden" value="99" />
+			<input name="isFulltext" type="hidden" value="" />
+
+
+
+		<!-- 主布局容器:左侧内容 + 右侧占位 by xu 20260105 -->
+		<div style="display: flex; height: calc(100vh);">
+
+
+		<!-- 左侧导航栏占位 by xu 20260105 -->
+		<div style="width: 60px; height: 100%; background: #ffffff; border-right: 1px solid #dddfe6; display: flex; flex-direction: column;">
+			<!-- 菜单项1 -->
+			<div style="width: 60px; height: 60px; display: flex; align-items: center; justify-content: center; cursor: pointer; border-bottom: 1px solid #dddfe6;">
+				<div style="width: 24px; height: 24px; background: #4A90E2; border-radius: 4px;"></div>
+			</div>
+			<!-- 菜单项2 -->
+			<div style="width: 60px; height: 60px; display: flex; align-items: center; justify-content: center; cursor: pointer; border-bottom: 1px solid #dddfe6;">
+				<div style="width: 24px; height: 24px; background: #E74C3C; border-radius: 4px;"></div>
+			</div>
+			<!-- 菜单项3 -->
+			<div style="width: 60px; height: 60px; display: flex; align-items: center; justify-content: center; cursor: pointer; border-bottom: 1px solid #dddfe6;">
+				<div style="width: 24px; height: 24px; background: #2ECC71; border-radius: 4px;"></div>
+			</div>
+			<!-- 菜单项4 -->
+			<div style="width: 60px; height: 60px; display: flex; align-items: center; justify-content: center; cursor: pointer; border-bottom: 1px solid #dddfe6;">
+				<div style="width: 24px; height: 24px; background: #F39C12; border-radius: 4px;"></div>
+			</div>
+			<!-- 菜单项5 -->
+			<div style="width: 60px; height: 60px; display: flex; align-items: center; justify-content: center; cursor: pointer; border-bottom: 1px solid #dddfe6;">
+				<div style="width: 24px; height: 24px; background: #9B59B6; border-radius: 4px;"></div>
+			</div>
+		</div>
+			<!-- 左侧:搜索条件 + 卡片列表 -->
+			<div style="flex: 1; display: flex; flex-direction: column; overflow: hidden;">
+			<div class="search-bar">
+				<ss-breadcrumb></ss-breadcrumb>
+				<div class="search-bar-contaienr">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+					<!-- <ss-objp
+									v-model="rylbm"
+									name="rylbm"
+									:options="rylbmOption"
+									placeholder="人员类别"
+									width="120"
+									input="true"
+							></ss-objp> -->
+
+					<ss-objp v-model="rylbm" name="rylbm" :opt="rylbmOption" placeholder="人员类别" width="150px" inp="true"
+						url="/service?ssServ=loadObjpOpt&objectpickerdropdown1=1" cb="rylb"></ss-objp>
+					<script>
+						/**
+						 * objectPicker(如:性别码)
+						 * optUrl:加载下拉菜单option选项的url
+						 */
+						window.ss.dom.formElemConfig.rylbm = { desc: '人员类别', value: '', optUrl: '123456', type: 2 };//放当前页面表单元素配置的变量
+					</script>
+
+
+
+
+
+
+
+
+
+
+
+					<!-- <ss-objp
+									v-model="bmid"
+									name="bmid"
+									:options="bmidOption"
+									placeholder="部门"
+									width="120"
+									input="true"
+							></ss-objp> -->
+
+					<ss-objp v-model="bmid" name="bmid" :opt="bmidOption" placeholder="部门" width="150px" inp="true"
+						url="/service?ssServ=loadObjpOpt&objectpickerdropdown1=1" cb="bm"></ss-objp>
+					<script>
+						/**
+						 * objectPicker(如:性别码)
+						 * optUrl:加载下拉菜单option选项的url
+						 */
+						window.ss.dom.formElemConfig.bmid = { desc: '部门', value: '', optUrl: '123456', type: 2 };//放当前页面表单元素配置的变量
+					</script>
+
+
+
+
+
+
+
+
+
+					<!-- <ss-search-input
+							name="ssKeyword"
+							placeholder="关键词"
+							v-model="form.keyword"
+							width="120"
+					>
+					</ss-search-input> -->
+					<ss-search-input name="ssKeyword" placeholder="关键词" v-model="ssKeyword" width="100px"
+						@search="search">
+					</ss-search-input>
+					<script>
+
+						//关键词
+						window.ss.dom.formElemConfig.ssKeyword = { value: '', name: "ssKeyword", desc: "关键词", type: 31 };//放当前页面表单元素配置的变量
+					</script>
+
+
+					<ss-search-button text="所有" icon-class="nav-icon-search" :opt="searchButtonConfig"
+						:check-id="searchButtonConfigCheckId"></ss-search-button>
+
+					<!-- 状态筛选按钮 by xu 20260105 -->
+					<ss-search-button text="状态" icon-class="nav-icon-search" :opt="statusFilterConfig"
+						:check-id="statusFilterCheckId"></ss-search-button>
+
+
+
+
+
+					<!-- <ss-search-button text="搜索" @click="console.log('这里改成提交表单')">
+				</ss-search-button> -->
+
+					<script>
+
+						window.ss.dom.btnElemConfig = window.ss.dom.btnElemConfig || {};
+
+					</script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+					<!-- <ss-search-button
+									text="增加"
+									icon-class="nav-icon-add"
+							></ss-search-button> -->
+
+					<script>
+						function admin_addhandleClick() {
+							wd.display.showComponent({
+								show: ["wdDialog"],
+								url: "/service?ssToken=b59e43bcf08b490c80a473de3b24c941&P_A=ry_lr_zj_objInp_notInrylbm11005100sfyzry1",
+								title: "增加人员",
+								width: "1100",
+								height: "530",
+								minHeight: "54",
+								maxHeight: "853",
+								showTitle: "false"
+							});
+						}
+						window.ss.dom.btnElemConfig.admin_add = {
+							desc: "增加",
+							id: "admin_add",
+							dropOptions: [],
+							onclick: () => {
+								wd.display.showComponent({ show: ["wdDialog"], url: "/service?ssToken=f5c366661b004dfbb69ea6ed72fa8eb3&P_A=ry_lr_zj_objInp_notInrylbm11005100sfyzry1", title: "增加人员", width: "1100", height: "530", minHeight: "54", maxHeight: "853", showTitle: "false" });
+							}
+						};
+					</script>
+					<ss-search-button text="增加" icon-class="nav-icon-add" :opt="[]" :check-id="0"
+						onclick="admin_addhandleClick()"></ss-search-button>
+
+
+
+
+
+
+				</div>
+			</div>
+
+
+
+
+
+
+
+
+			<div style="clear: both;"></div>
+			<script type="text/javascript" src="/ss/js/myEcharts.js"></script>
+
+
+			<script type="text/javascript" src="/ss/env/env_search.js"></script>
+
+
+			<script>
+
+
+
+				window.ss.dom.listConfig = window.ss.dom.listConfig || {};
+				//二级对象 草稿箱
+				window.ss.dom.listConfig.draftbox = [];
+				//在用或停用的对象列表
+				window.ss.dom.listConfig.list = [];
+				// 添加缩略图类型卡片示例 by xu 20260105
+// {
+// 	let item = {};
+// 	window.ss.dom.listConfig.list.push(item);
+
+// 	item.titlexxx = "查看文档(缩略图示例)";
+// 	item.onclick = function () {
+// 		console.log('点击了缩略图卡片');
+// 	}
+
+// 	item.title = "缩略图卡片示例";
+
+// 	// 设置为缩略图类型
+// 	item.thumbType = 'photo';
+// 	item.thumb = "https://via.placeholder.com/180x100/4A90E2/ffffff?text=photo";
+
+// 	item.tags = [];
+// 	item.tags.push({ 类型: '缩略图' });
+// 	item.tags.push({ 尺寸: '180×100px' });
+// 	item.tags.push({ 状态: '测试' });
+// 	item.status = "available";
+
+// 	// 添加状态图标示例 by xu 20260105
+// 	item.statusIcons = [];
+// 	item.statusIcons.push({
+// 		class: 'icon-emoji',  // 示例图标
+// 		title: '清洁中'
+// 	});
+
+// 	item.buttons = [];
+// 	item.buttons.push({
+// 		id: "no-Buttonphoto",
+// 		titlexxx: "编辑文档",
+// 		class: "cart-list-setting",
+// 		title: "编辑",
+// 		onclick: () => {
+// 			console.log('点击了编辑按钮');
+// 		}
+// 	});
+// }
+
+// 	// 添加证件照类型卡片示例 by xu 20260105
+// 	{
+// 		let item = {};
+// 		window.ss.dom.listConfig.list.push(item);
+
+// 	item.titlexxx = "查看人员(证件照示例)";
+// 	item.onclick = function () {
+// 		console.log('点击了证件照卡片');
+// 	}
+// 	item.status = "disabled";
+// 	item.title = "证件照卡片示例";
+
+// 	// 设置为证件照类型(或不设置,默认就是证件照)
+// 	item.thumbType = 'photo';
+// 	item.thumb = "https://via.placeholder.com/73x100/E74C3C/ffffff?text=Photo";
+
+// 	item.desc = "摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要摘要"
+// 	item.objNum = '123456'
+// 	item.category = [];
+// 	item.category.push({类目:"这是类目"})
+// 	item.tags = [];
+// 	item.tags.push({ 类型: '证件照' });
+// 	item.tags.push({ 尺寸: '73×100px' });
+// 	item.tags.push({ 状态: '测试' });
+// 	item.tags.push({ 测试: '测试' });
+
+// 		item.buttons = [];
+// 			item.buttons.push({
+// 		id: "no-ButtonPhoto",
+// 		titlexxx: "变动人员",
+// 		class: "cart-list-setting",
+// 		title: "变动",
+// 		onclick: () => {
+// 			console.log('点击了变动按钮');
+// 		}
+// 			});
+// 		}
+
+// 		// 无图占位(证件照)测试:thumbType 有,但 thumb 为空时显示 biz icon by xu 20260109
+// 		{
+// 			let item = {};
+// 			window.ss.dom.listConfig.list.push(item);
+// 			item.titlexxx = "查看人员(无图占位-photo)";
+// 			item.onclick = function () { console.log('点击了无图占位-photo'); }
+// 			item.status = "available";
+// 			item.title = "无图占位(证件照)";
+// 			item.thumbType = 'photo';
+// 			item.thumb = ""; // 故意置空 by xu 20260109
+// 			item.tags = [];
+// 			item.tags.push({ 部门: '小学部' });
+// 			item.objNum = "RY-PLACEHOLDER-PHOTO";
+// 			item.buttons = [];
+// 		}
+
+// 		// 无图占位(缩略图)测试:thumbType 有,但 thumb 为空时显示 biz icon by xu 20260109
+// 		{
+// 			let item = {};
+// 			window.ss.dom.listConfig.list.push(item);
+// 			item.titlexxx = "查看人员(无图占位-photo)";
+// 			item.onclick = function () { console.log('点击了无图占位-photo'); }
+// 			item.status = "available";
+// 			item.title = "无图占位(缩略图)";
+// 			item.thumbType = 'photo';
+// 			item.thumb = ""; // 故意置空 by xu 20260109
+// 			item.tags = [];
+// 			item.tags.push({ 部门: '小学部' });
+// 			item.objNum = "RY-PLACEHOLDER-THUMB";
+// 			item.buttons = [];
+// 		}
+
+// 	// 右侧文字区回显:标签省略 + hover 展开测试 by xu 20260108
+// 	{
+// 		let item = {};
+// 		window.ss.dom.listConfig.list.push(item);
+// 		item.titlexxx = "查看人员(tags ellipsis)";
+// 		item.onclick = function () { console.log('点击了 tags ellipsis 卡片'); }
+// 		item.status = "available";
+// 		item.title = "标签省略测试";
+// 		item.thumbType = 'photo';
+// 		item.thumb = "https://via.placeholder.com/73x100/3498DB/ffffff?text=T";
+// 		item.tags = [];
+// 		item.tags.push({ 部门: '小学部' });
+// 		item.tags.push({ 职位: '班主任' });
+// 		item.tags.push({ 级别: '高级' });
+// 		item.tags.push({ 状态: '在岗' });
+// 		item.tags.push({ 备注: '这个备注很长很长很长很长很长,用于触发省略' });
+// 		item.buttons = [];
+// 	}
+
+// 	// 右侧文字区回显:对象号省略 + hover 展开测试 by xu 20260108
+// 	{
+// 		let item = {};
+// 		window.ss.dom.listConfig.list.push(item);
+// 		item.titlexxx = "查看人员(objNum ellipsis)";
+// 		item.onclick = function () { console.log('点击了 objNum ellipsis 卡片'); }
+// 		item.status = "unavailable";
+// 		item.title = "对象号省略测试";
+// 		item.thumbType = 'photo';
+// 		item.thumb = "https://via.placeholder.com/180x100/2ECC71/ffffff?text=OBJ";
+// 		item.objNum = "OBJ-2026-01-08-000000000000000000000000000000000000000000";
+// 		item.tags = [];
+// 		item.tags.push({ 类型: '缩略图' });
+// 		item.tags.push({ 尺寸: '180×100px' });
+// 		item.buttons = [];
+// 	}
+
+// 	// 右侧文字区回显:对象号省略(带摘要/标签组合) by xu 20260108
+// 	{
+// 		let item = {};
+// 		window.ss.dom.listConfig.list.push(item);
+// 		item.titlexxx = "查看人员(objNum+summary+tags)";
+// 		item.onclick = function () { console.log('点击了 objNum+summary+tags 卡片'); }
+// 		item.status = "available";
+// 		item.title = "对象号+摘要+标签";
+// 		item.thumbType = 'photo';
+// 		item.thumb = "https://via.placeholder.com/73x100/9B59B6/ffffff?text=S";
+// 		item.desc = "这是一个短摘要(应只占一行,标签补位),但也可能在窄宽时出现省略";
+// 		item.objNum = "RY-OBJ-2026-01-08-000000000000000000000000000000000000000000";
+// 		item.tags = [];
+// 		item.tags.push({ 部门: '小学部' });
+// 		item.tags.push({ 职位: '教师' });
+// 		item.tags.push({ 备注: '标签末行平铺很长很长很长,触发省略' });
+// 		item.buttons = [];
+// 	}
+
+// 	// 右侧文字区回显:类目省略 + hover 展开测试(类目与标签不会同时存在) by xu 20260108
+// 	{
+// 		let item = {};
+// 		window.ss.dom.listConfig.list.push(item);
+// 		item.titlexxx = "查看人员(category ellipsis)";
+// 		item.onclick = function () { console.log('点击了 category ellipsis 卡片'); }
+// 		item.status = "disabled";
+// 		item.title = "类目省略测试";
+// 		item.thumbType = 'photo';
+// 			item.desc = "这是一个短摘要(应只占一行,标签补位),但也可能在窄宽时出现省略";
+
+// 		item.thumb = "https://via.placeholder.com/73x100/E67E22/ffffff?text=C";
+// 		item.category = [];
+// 		item.category.push({ 类目: '类目名称很长很长很长很长很长很长很长,用于触发省略' });
+// 		item.category.push({ 归属: 'A-区-一层-东侧-走廊尽头-最里面' });
+// 		item.category.push({ 备注: '第二关键属性也很长很长很长,用于触发省略' });
+// 		// item.objNum = "CAT-0000000000000000000000000000000000000000";
+// 		item.buttons = [];
+// 	}
+
+// 	// 右侧文字区回显组合用例:摘要(desc) + 标签(tags) + 对象号(objNum) by xu 20260108
+// 	{
+// 		let item = {};
+// 		window.ss.dom.listConfig.list.push(item);
+// 		item.titlexxx = "[摘要+标签+对象号] desc+tags+objNum";
+// 		item.onclick = function () { console.log('点击 [摘要+标签+对象号]'); }
+// 		item.status = "available";
+// 		item.title = "摘要+标签+对象号(摘要较长触发)这是一个很长很长很长的标题用于测试标题单行省略";
+// 		item.thumbType = 'photo';
+// 		item.thumb = "https://via.placeholder.com/180x100/1ABC9C/ffffff?text=STO";
+// 		item.desc = "这是一个很长很长的摘要,用于触发两行省略这是一个很长很长的摘要,用于触发两行省略这是一个很长很长的摘要,用于触发两行省略";
+// 		item.objNum = "RY-OBJ-2026-01-08-000000000000000000000000000000000000000000";
+// 		item.tags = [];
+// 		item.tags.push({ 部门: '小学部' });
+// 		item.tags.push({ 职位: '班主任' });
+// 		item.tags.push({ 状态: '在岗' });
+// 		item.tags.push({ 备注: '最后一行平铺会很长很长很长,用于触发' });
+// 		item.buttons = [];
+// 	}
+
+// 	// 右侧文字区回显组合用例:摘要(desc) + 类目(category) + 对象号(objNum) by xu 20260108
+// 	{
+// 		let item = {};
+// 		window.ss.dom.listConfig.list.push(item);
+// 		item.titlexxx = "[摘要+类目+对象号] desc+category+objNum";
+// 		item.onclick = function () { console.log('点击 [摘要+类目+对象号]'); }
+// 		item.status = "unavailable";
+// 		item.title = "摘要+类目+对象号(类目末行触发)";
+// 		item.thumbType = 'photo';
+// 		item.thumb = "https://via.placeholder.com/73x100/16A085/ffffff?text=SCO";
+// 		item.desc = "摘要中等长度,可能只占一行。";
+// 		item.category = [];
+// 		item.category.push({ 类目: '类目1-名称较长较长较长较长较长较长触发省略' });
+// 		item.category.push({ 归属: '归属2-也很长很长很长很长触发省略' });
+// 		item.category.push({ 备注: '备注3-最后一行平铺剩余,触发' });
+// 		item.objNum = "SCO-0000000000000000000000000000000000000000000";
+// 		item.buttons = [];
+// 	}
+
+// 	// 新规则:摘要(desc) + 类目(category)(无对象号) by xu 20260108
+// 	{
+// 		let item = {};
+// 		window.ss.dom.listConfig.list.push(item);
+// 		item.titlexxx = "[摘要+类目] desc+category";
+// 		item.onclick = function () { console.log('点击 [摘要+类目]'); }
+// 		item.status = "available";
+// 		item.title = "摘要+类目(新规则:有摘要则只显示摘要,类目不会显示)";
+// 		item.thumbType = 'photo';
+// 		item.thumb = "https://via.placeholder.com/73x100/27AE60/ffffff?text=SC";
+// 		item.desc = "这是一个摘要(会占第二部分最多3行)。类目即使存在也不会显示在右侧区域。";
+// 		item.category = [];
+// 		item.category.push({ 类目: '类目内容存在但应被对象号/摘要优先级覆盖(此处无对象号,但仍被摘要覆盖)' });
+// 		item.category.push({ 归属: '归属信息也存在,但默认态不显示' });
+// 		item.buttons = [];
+// 	}
+
+// 	// 右侧文字区回显组合用例:摘要(desc) + 标签(tags)(无对象号) by xu 20260108
+// 	{
+// 		let item = {};
+// 		window.ss.dom.listConfig.list.push(item);
+// 		item.titlexxx = "[摘要+标签] desc+tags";
+// 		item.onclick = function () { console.log('点击 [摘要+标签]'); }
+// 		item.status = "disabled";
+// 		item.title = "摘要+标签(无对象号)";
+// 		item.thumbType = 'photo';
+// 		item.thumb = "https://via.placeholder.com/73x100/2980B9/ffffff?text=ST";
+// 		item.desc = "摘要很短(1行),标签应该补位占更多行。";
+// 		item.tags = [];
+// 		item.tags.push({ 部门: '初中部' });
+// 		item.tags.push({ 职位: '教师' });
+// 		item.tags.push({ 状态: '离岗' });
+// 		item.tags.push({ 备注: '最后一行平铺很长很长很长,用于触发' });
+// 		item.buttons = [];
+// 	}
+
+// 	// 右侧文字区回显组合用例:标签(tags) + 对象号(objNum)(无摘要) by xu 20260108
+// 	{
+// 		let item = {};
+// 		window.ss.dom.listConfig.list.push(item);
+// 		item.titlexxx = "[标签+对象号] tags+objNum";
+// 		item.onclick = function () { console.log('点击 [标签+对象号]'); }
+// 		item.status = "available";
+// 		item.title = "标签+对象号(无摘要)";
+// 		item.thumbType = 'photo';
+// 		item.thumb = "https://via.placeholder.com/180x100/C0392B/ffffff?text=TO";
+// 		item.objNum = "TO-2026-01-08-0000000000000000000000000000000000000000";
+// 		item.tags = [];
+// 		item.tags.push({ A: '1111111111111111111111111111很长触发省略' });
+// 		item.tags.push({ B: '2222222222222222222222222222很长触发省略' });
+// 		item.tags.push({ C: '3333333333333333333333333333很长触发省略' });
+// 		item.tags.push({ D: '4444444444444444444444444444很长触发省略' });
+// 		item.buttons = [];
+// 	}
+
+// 	// 右侧文字区回显组合用例:仅标签(tags only) by xu 20260108
+// 	{
+// 		let item = {};
+// 		window.ss.dom.listConfig.list.push(item);
+// 		item.titlexxx = "[仅标签] tags only";
+// 		item.onclick = function () { console.log('点击 [仅标签]'); }
+// 		item.status = "unavailable";
+// 		item.title = "仅标签(标签独占4行)";
+// 		item.thumbType = 'photo';
+// 		item.thumb = "https://via.placeholder.com/73x100/8E44AD/ffffff?text=T";
+// 		item.tags = [];
+// 		item.tags.push({ A: 'alpha-alpha-alpha-alpha-alpha' });
+// 		item.tags.push({ B: 'beta-beta-beta-beta-beta-beta-beta' });
+// 		item.tags.push({ C: 'gamma-gamma-gamma-gamma-gamma-gamma-gamma' });
+// 		item.tags.push({ D: 'delta-delta-delta-delta-delta-delta-delta-delta' });
+// 		item.tags.push({ E: 'epsilon-epsilon-epsilon-epsilon-epsilon-epsilon-epsilon-epsilon' });
+// 		item.buttons = [];
+// 	}
+
+// 	// 新规则:第二部分为空(无摘要且无 tags)→ 第三部分占满 4 行 by xu 20260108
+// 	{
+// 		let item = {};
+// 		window.ss.dom.listConfig.list.push(item);
+// 		item.titlexxx = "[第二部分为空] objNum 占满4行";
+// 		item.onclick = function () { console.log('点击 [第二部分为空]'); }
+// 		item.status = "available";
+// 		item.title = "第二部分为空:对象号占满4行(超出)";
+// 		item.thumbType = 'photo';
+// 		item.thumb = "https://via.placeholder.com/73x100/34495E/ffffff?text=FULL";
+// 		item.objNum = "FULL-OBJNUM-2026-01-08-000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
+// 		item.buttons = [];
+// 	}
+
+				{
+					let item = {};//列表的其中一行的属性
+					window.ss.dom.listConfig.list.push(item);
+					item.titlexxx = "查看人员(陈欣欣)";
+					item.onclick = function () {
+						wd.display.showComponent({ getSize: 1, width: ((880 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=b2f666ee35f5439e99339cff519c8234&P_A=ry_ck_objPlay_ssObjId111122998ssObjNameryryid111122998notInrylbm11005100sfyzry1", title: "查看人员(陈欣欣)", height: "650", minHeight: "109", maxHeight: "808" });
+					}
+					item.title = "陈欣欣";
+					item.tags = [];
+					{
+						let v;
+						v = '学校教职工';
+						item.tags.push({ 人员类别: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '小学部德育处';
+
+						item.tags.push({ 部门: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '女性';
+
+						item.tags.push({ 性别: v });
+					}
+
+
+
+
+
+
+					item.buttons = [];
+
+
+					item.buttons.push(
+						{
+							id: "no-Button1",
+							titlexxx: "变动人员(陈欣欣)",
+							class: "cart-list-setting",
+							title: "变动",
+							onclick: () => {
+
+								wd.display.showComponent({ getSize: 1, width: ((1100 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=ecf4a2c3a58c487f83cf58058c0da8e6&P_A=ry_bd_objChg_ssObjId111122998ssObjNameryryid111122998notInrylbm11005100sfyzry1", title: "变动人员(陈欣欣)", height: "600", minHeight: "84", maxHeight: "783" });
+
+							}
+						}
+					);
+
+
+
+
+
+				}
+
+				{
+					let item = {};//列表的其中一行的属性
+					window.ss.dom.listConfig.list.push(item);
+
+
+
+
+					item.titlexxx = "查看人员(吴晓惠)";
+					item.onclick = function () {
+						wd.display.showComponent({ getSize: 1, width: ((880 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=1d1a696ba493452d9f688344eff45b21&P_A=ry_ck_objPlay_ssObjId111122999ssObjNameryryid111122999notInrylbm11005100sfyzry1", title: "查看人员(吴晓惠)", height: "650", minHeight: "109", maxHeight: "808" });
+					}
+
+
+
+
+
+
+
+
+
+
+					item.title = "吴晓惠";
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+					item.tags = [];
+
+
+					{
+						let v;
+
+
+
+
+
+						v = '学校教职工';
+
+						item.tags.push({ 人员类别: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '小学部德育处';
+
+						item.tags.push({ 部门: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '女性';
+
+						item.tags.push({ 性别: v });
+					}
+
+
+
+
+
+
+					item.buttons = [];
+
+
+					item.buttons.push(
+						{
+							id: "no-Button2",
+							titlexxx: "变动人员(吴晓惠)",
+							class: "cart-list-setting",
+							title: "变动",
+							onclick: () => {
+
+								wd.display.showComponent({ getSize: 1, width: ((1100 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=31d5c01f958f4532b503179fe9e06569&P_A=ry_bd_objChg_ssObjId111122999ssObjNameryryid111122999notInrylbm11005100sfyzry1", title: "变动人员(吴晓惠)", height: "600", minHeight: "84", maxHeight: "783" });
+
+							}
+						}
+					);
+
+
+
+
+
+				}
+
+				{
+					let item = {};//列表的其中一行的属性
+					window.ss.dom.listConfig.list.push(item);
+
+
+
+
+					item.titlexxx = "查看人员(陈丽花)";
+					item.onclick = function () {
+						wd.display.showComponent({ getSize: 1, width: ((880 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=cb131510e4df4a558cc61095f4d6d6ff&P_A=ry_ck_objPlay_ssObjId111123000ssObjNameryryid111123000notInrylbm11005100sfyzry1", title: "查看人员(陈丽花)", height: "650", minHeight: "109", maxHeight: "808" });
+					}
+
+
+
+
+
+
+
+
+
+
+					item.title = "陈丽花";
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+					item.tags = [];
+
+
+					{
+						let v;
+
+
+
+
+
+						v = '学校教职工';
+
+						item.tags.push({ 人员类别: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '小学部德育处';
+
+						item.tags.push({ 部门: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '女性';
+
+						item.tags.push({ 性别: v });
+					}
+
+
+
+
+
+
+					item.buttons = [];
+
+
+					item.buttons.push(
+						{
+							id: "no-Button3",
+							titlexxx: "变动人员(陈丽花)",
+							class: "cart-list-setting",
+							title: "变动",
+							onclick: () => {
+
+								wd.display.showComponent({ getSize: 1, width: ((1100 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=c0aea92348dd4cadaceef1cb50561c41&P_A=ry_bd_objChg_ssObjId111123000ssObjNameryryid111123000notInrylbm11005100sfyzry1", title: "变动人员(陈丽花)", height: "600", minHeight: "84", maxHeight: "783" });
+
+							}
+						}
+					);
+
+
+
+
+
+				}
+
+				{
+					let item = {};//列表的其中一行的属性
+					window.ss.dom.listConfig.list.push(item);
+
+
+
+
+					item.titlexxx = "查看人员(黄文东)";
+					item.onclick = function () {
+						wd.display.showComponent({ getSize: 1, width: ((880 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=d7ea3255174346739c8bb813bff85921&P_A=ry_ck_objPlay_ssObjId111123001ssObjNameryryid111123001notInrylbm11005100sfyzry1", title: "查看人员(黄文东)", height: "650", minHeight: "109", maxHeight: "808" });
+					}
+
+
+
+
+
+
+
+
+
+
+					item.title = "黄文东";
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+					item.tags = [];
+
+
+					{
+						let v;
+
+
+
+
+
+						v = '学校教职工';
+
+						item.tags.push({ 人员类别: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '艺体中心';
+
+						item.tags.push({ 部门: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '男性';
+
+						item.tags.push({ 性别: v });
+					}
+
+
+
+
+
+
+					item.buttons = [];
+
+
+					item.buttons.push(
+						{
+							id: "no-Button4",
+							titlexxx: "变动人员(黄文东)",
+							class: "cart-list-setting",
+							title: "变动",
+							onclick: () => {
+
+								wd.display.showComponent({ getSize: 1, width: ((1100 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=d6b72d581a724a528a5b7e07ed18d928&P_A=ry_bd_objChg_ssObjId111123001ssObjNameryryid111123001notInrylbm11005100sfyzry1", title: "变动人员(黄文东)", height: "600", minHeight: "84", maxHeight: "783" });
+
+							}
+						}
+					);
+
+
+
+
+
+				}
+
+				{
+					let item = {};//列表的其中一行的属性
+					window.ss.dom.listConfig.list.push(item);
+
+
+
+
+					item.titlexxx = "查看人员(张春英)";
+					item.onclick = function () {
+						wd.display.showComponent({ getSize: 1, width: ((880 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=c38a5fd0066b409fb8280bb88b19da8c&P_A=ry_ck_objPlay_ssObjId111123002ssObjNameryryid111123002notInrylbm11005100sfyzry1", title: "查看人员(张春英)", height: "650", minHeight: "109", maxHeight: "808" });
+					}
+
+
+
+
+
+
+
+
+
+
+					item.title = "张春英";
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+					item.tags = [];
+
+
+					{
+						let v;
+
+
+
+
+
+						v = '学校教职工';
+
+						item.tags.push({ 人员类别: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '小学部德育处';
+
+						item.tags.push({ 部门: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '女性';
+
+						item.tags.push({ 性别: v });
+					}
+
+
+
+
+
+
+					item.buttons = [];
+
+
+					item.buttons.push(
+						{
+							id: "no-Button5",
+							titlexxx: "变动人员(张春英)",
+							class: "cart-list-setting",
+							title: "变动",
+							onclick: () => {
+
+								wd.display.showComponent({ getSize: 1, width: ((1100 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=1dcdc0625b15423ca6ad71b7a3d93f25&P_A=ry_bd_objChg_ssObjId111123002ssObjNameryryid111123002notInrylbm11005100sfyzry1", title: "变动人员(张春英)", height: "600", minHeight: "84", maxHeight: "783" });
+
+							}
+						}
+					);
+
+
+
+
+
+				}
+
+				{
+					let item = {};//列表的其中一行的属性
+					window.ss.dom.listConfig.list.push(item);
+
+
+
+
+					item.titlexxx = "查看人员(江雅诗)";
+					item.onclick = function () {
+						wd.display.showComponent({ getSize: 1, width: ((880 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=f5e38a2a826b463389110a2b64f2eeef&P_A=ry_ck_objPlay_ssObjId111123004ssObjNameryryid111123004notInrylbm11005100sfyzry1", title: "查看人员(江雅诗)", height: "650", minHeight: "109", maxHeight: "808" });
+					}
+
+
+
+
+
+
+
+
+
+
+					item.title = "江雅诗";
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+					item.tags = [];
+
+
+					{
+						let v;
+
+
+
+
+
+						v = '学校教职工';
+
+						item.tags.push({ 人员类别: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '初中部德育处';
+
+						item.tags.push({ 部门: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '女性';
+
+						item.tags.push({ 性别: v });
+					}
+
+
+
+
+
+
+					item.buttons = [];
+
+
+					item.buttons.push(
+						{
+							id: "no-Button6",
+							titlexxx: "变动人员(江雅诗)",
+							class: "cart-list-setting",
+							title: "变动",
+							onclick: () => {
+
+								wd.display.showComponent({ getSize: 1, width: ((1100 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=6c222f70c61c4e15ba21447648f6bec3&P_A=ry_bd_objChg_ssObjId111123004ssObjNameryryid111123004notInrylbm11005100sfyzry1", title: "变动人员(江雅诗)", height: "600", minHeight: "84", maxHeight: "783" });
+
+							}
+						}
+					);
+
+
+
+
+
+				}
+
+				{
+					let item = {};//列表的其中一行的属性
+					window.ss.dom.listConfig.list.push(item);
+
+
+
+
+					item.titlexxx = "查看人员(刘海鸥)";
+					item.onclick = function () {
+						wd.display.showComponent({ getSize: 1, width: ((880 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=80ea5c7cdc23426ab126473d9228fc9f&P_A=ry_ck_objPlay_ssObjId111123005ssObjNameryryid111123005notInrylbm11005100sfyzry1", title: "查看人员(刘海鸥)", height: "650", minHeight: "109", maxHeight: "808" });
+					}
+
+
+
+
+
+
+
+
+
+
+					item.title = "刘海鸥";
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+					item.tags = [];
+
+
+					{
+						let v;
+
+
+
+
+
+						v = '学校教职工';
+
+						item.tags.push({ 人员类别: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '初中部德育处';
+
+						item.tags.push({ 部门: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '女性';
+
+						item.tags.push({ 性别: v });
+					}
+
+
+
+
+
+
+					item.buttons = [];
+
+
+					item.buttons.push(
+						{
+							id: "no-Button7",
+							titlexxx: "变动人员(刘海鸥)",
+							class: "cart-list-setting",
+							title: "变动",
+							onclick: () => {
+
+								wd.display.showComponent({ getSize: 1, width: ((1100 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=a87f50f2c3654eba849ca0f03409831b&P_A=ry_bd_objChg_ssObjId111123005ssObjNameryryid111123005notInrylbm11005100sfyzry1", title: "变动人员(刘海鸥)", height: "600", minHeight: "84", maxHeight: "783" });
+
+							}
+						}
+					);
+
+
+
+
+
+				}
+
+				{
+					let item = {};//列表的其中一行的属性
+					window.ss.dom.listConfig.list.push(item);
+
+
+
+
+					item.titlexxx = "查看人员(罗桂秀)";
+					item.onclick = function () {
+						wd.display.showComponent({ getSize: 1, width: ((880 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=980c1860fbaa45b1888faea7c97e4ab4&P_A=ry_ck_objPlay_ssObjId111123006ssObjNameryryid111123006notInrylbm11005100sfyzry1", title: "查看人员(罗桂秀)", height: "650", minHeight: "109", maxHeight: "808" });
+					}
+
+
+
+
+
+
+
+
+
+
+					item.title = "罗桂秀";
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+					item.tags = [];
+
+
+					{
+						let v;
+
+
+
+
+
+						v = '学校教职工';
+
+						item.tags.push({ 人员类别: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '生活一部';
+
+						item.tags.push({ 部门: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '女性';
+
+						item.tags.push({ 性别: v });
+					}
+
+
+
+
+
+
+					item.buttons = [];
+
+
+					item.buttons.push(
+						{
+							id: "no-Button8",
+							titlexxx: "变动人员(罗桂秀)",
+							class: "cart-list-setting",
+							title: "变动",
+							onclick: () => {
+
+								wd.display.showComponent({ getSize: 1, width: ((1100 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=4613780c52534a79ba80c0aaddd3b9c7&P_A=ry_bd_objChg_ssObjId111123006ssObjNameryryid111123006notInrylbm11005100sfyzry1", title: "变动人员(罗桂秀)", height: "600", minHeight: "84", maxHeight: "783" });
+
+							}
+						}
+					);
+
+
+
+
+
+				}
+
+				{
+					let item = {};//列表的其中一行的属性
+					window.ss.dom.listConfig.list.push(item);
+
+
+
+
+					item.titlexxx = "查看人员(何秋冬)";
+					item.onclick = function () {
+						wd.display.showComponent({ getSize: 1, width: ((880 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=5a8db34cc8a04be0a08cc0e3f6fe00c6&P_A=ry_ck_objPlay_ssObjId111123007ssObjNameryryid111123007notInrylbm11005100sfyzry1", title: "查看人员(何秋冬)", height: "650", minHeight: "109", maxHeight: "808" });
+					}
+
+
+
+
+
+
+
+
+
+
+					item.title = "何秋冬";
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+					item.tags = [];
+
+
+					{
+						let v;
+
+
+
+
+
+						v = '学校教职工';
+
+						item.tags.push({ 人员类别: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '生活一部';
+
+						item.tags.push({ 部门: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '女性';
+
+						item.tags.push({ 性别: v });
+					}
+
+
+
+
+
+
+					item.buttons = [];
+
+
+					item.buttons.push(
+						{
+							id: "no-Button9",
+							titlexxx: "变动人员(何秋冬)",
+							class: "cart-list-setting",
+							title: "变动",
+							onclick: () => {
+
+								wd.display.showComponent({ getSize: 1, width: ((1100 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=18e085e0c31549efa9597733d32e32a0&P_A=ry_bd_objChg_ssObjId111123007ssObjNameryryid111123007notInrylbm11005100sfyzry1", title: "变动人员(何秋冬)", height: "600", minHeight: "84", maxHeight: "783" });
+
+							}
+						}
+					);
+
+
+
+
+
+				}
+
+				{
+					let item = {};//列表的其中一行的属性
+					window.ss.dom.listConfig.list.push(item);
+
+
+
+
+					item.titlexxx = "查看人员(黄智霖)";
+					item.onclick = function () {
+						wd.display.showComponent({ getSize: 1, width: ((880 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=ba8f7c48fea14306900c50e668b64621&P_A=ry_ck_objPlay_ssObjId111123008ssObjNameryryid111123008notInrylbm11005100sfyzry1", title: "查看人员(黄智霖)", height: "650", minHeight: "109", maxHeight: "808" });
+					}
+					item.status = "unavailable";
+
+
+
+
+
+
+
+
+
+					item.title = "黄智霖";
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+					item.tags = [];
+
+
+					{
+						let v;
+
+
+
+
+
+						v = '学校教职工';
+
+						item.tags.push({ 人员类别: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '生活二部';
+
+						item.tags.push({ 部门: v });
+					}
+
+					{
+						let v;
+
+
+
+
+
+						v = '男性';
+
+						item.tags.push({ 性别: v });
+					}
+
+
+
+
+
+
+					item.buttons = [];
+
+
+					item.buttons.push(
+						{
+							id: "no-Button10",
+							titlexxx: "变动人员(黄智霖)",
+							class: "cart-list-setting",
+							title: "变动",
+							onclick: () => {
+
+								wd.display.showComponent({ getSize: 1, width: ((1100 + DOM_SIZE_objInfoTabWidth) + ""), show: ["wdDialog"], url: "/service?ssToken=8f5a0337b9f1436ca8a053586f6020cf&P_A=ry_bd_objChg_ssObjId111123008ssObjNameryryid111123008notInrylbm11005100sfyzry1", title: "变动人员(黄智霖)", height: "600", minHeight: "84", maxHeight: "783" });
+
+							}
+						}
+					);
+
+
+
+
+
+				}
+
+
+
+			</script>
+
+
+
+					<!-- 功能说明:卡片区域使用 grid 自动分列,剩余宽度平分(不锁死 max-width) by xu 20260109 -->
+					<div :class="['content-area','item-content-area', cardGridKind ? ('ss-card-grid--' + cardGridKind) : '']" style="flex: 1; overflow-y: auto;">
+						<template v-for="(item, i) in listConfig.draftbox" :key="i">
+							<ss-folder-card v-if="item.children" :item="item"></ss-folder-card>
+							<!-- 功能说明:通过 props 传 ssObjName(用于无图占位 biz icon) by xu 20260109 -->
+								<ss-list-card v-else :item="item" :ss-obj-name="ssObjName" :card-click-action="cardClickAction" @toggle-select="handleToggleSelect"></ss-list-card>
+						</template>
+					<template v-for="(item, i) in listConfig.list" :key="i">
+						<ss-folder-card v-if="item.children" :item="item"></ss-folder-card>
+						<!-- 功能说明:通过 props 传 ssObjName(用于无图占位 biz icon) by xu 20260109 -->
+							<ss-list-card v-else :item="item" :ss-obj-name="ssObjName" :card-click-action="cardClickAction" @toggle-select="handleToggleSelect"></ss-list-card>
+						</template>
+
+				<ss-page v-show="575" :total="575" :size="10" :page="1" @change="handlePageChange">
+				</ss-page>
+
+			</div>
+
+			</div>
+				<!-- 右侧:ss-sidebar(方案A:父级 state 中转) by xu 20260106 -->
+				<ss-sidebar
+					:buttons="sidebarButtons"
+					:panels="sidebarPanels"
+					@remove="handleSidebarRemove"
+				></ss-sidebar>
+			</div>
+
+
+
+		</form>
+	</div>
+</body>
+
+	</html>
+	<!-- Sortable:业务面板拖拽排序 by xu 20260106 -->
+	<script src="../js/Sortable/Sortable.min.js"></script>
+	<script type="module">
+
+	// function objectPickMockAjax(url) {
+	//     return new Promise((resolve) => {
+	//         setTimeout(() => {
+	//             resolve([
+	// 				{ label: '学校领导', value: '190'},
+	// 				{ label: '业务部', value: '101241' },
+	//                 { label: '男', value: '1' },
+	//                 { label: '女', value: '2' }
+	//             ]);
+	//         }, 1000);
+	//     });
+	// }
+	// 定义 objPickerLoad 函数
+	// async function objPickerLoad(url, optionsName) {
+	//     const result = await objectPickMockAjax(url);
+	//     return result; 
+	// }
+	window.ss.dom.formElemConfig.testtime = {
+		type: '34',
+		desc: '时间',
+		name: 'testtime',
+		value: '',
+	};
+	window.ss.dom.formElemConfig.testdatetime = {
+		type: '35',
+		desc: '日期时间',
+		name: 'testdatetime',
+		value: '',
+	};
+
+	console.log(window.ss.dom.formElemConfig);
+				const data = {
+					ssObjName:"ry",
+					cardClickAction: "single", // 功能:卡片主体点击动作(view=查看;single=单选互斥;角标仍多选) by xu 20260109
+					systemType: window.ss.dom.TYPE,
+					listConfig: window.ss.dom.listConfig,
+				formElemConfig: window.ss.dom.formElemConfig,
+				btnElemConfig: window.ss.dom.btnElemConfig,
+				cardGridKind: '', // 功能:卡片网格布局类型(none/photo/thumbnail) by xu 20260109
+				// 右侧边栏:已选列表(左侧卡片选中 -> 进入“已选”面板) by xu 20260106
+				selectedItems: [],
+			// 右侧边栏:顶部固定按钮 mock(复用 ss-search-button) by xu 20260106
+			sidebarButtons: [
+				{ id: 'reserve', text: '预定', onClick: () => console.log('点击:预定') },
+				{ id: 'checkin', text: '入住', onClick: () => console.log('点击:入住') },
+				{ id: 'checkout', text: '退房', onClick: () => console.log('点击:退房') },
+				{ id: 'clean', text: '清洁', onClick: () => console.log('点击:清洁') },
+			],
+			// 右侧边栏:除“人员”外其他分区先写死 mock by xu 20260106
+			sidebarMockSelected: [
+				{ title: '木色咖啡厅' },
+				{ title: '图书馆阅览室1号间' },
+				{ title: '羽毛球馆1号' },
+			],
+			sidebarMockService: [
+				{ title: '木色咖啡厅' },
+			],
+			sidebarMockReserve: [
+				{ title: '木色咖啡厅' },
+				{ title: '图书馆阅览室1号间' },
+				{ title: '羽毛球馆1号' },
+			],
+			// 右侧边栏:图表 mock(ECharts) by xu 20260106
+			sidebarMockChart: {
+				title: '校舍建筑面积和总体分布',
+				height: '220px',
+				options: {
+					grid: { left: 40, right: 10, top: 20, bottom: 30 },
+					xAxis: { type: 'category', data: ['教学及科研', '行政办公', '生活用房', '教工住宅', '其他用房'] },
+					yAxis: { type: 'value' },
+					series: [
+						{
+							type: 'bar',
+							data: [90.6, 4.5, 50, 10, 7],
+							label: { show: true, position: 'inside', formatter: '{c}%' },
+						},
+					],
+					color: ['#4A90E2'],
+				},
+			},
+			// 右侧边栏:第二个图表 mock(测试多图) by xu 20260108
+			sidebarMockChart2: {
+				title: '校舍使用率趋势',
+				height: '220px',
+				options: {
+					grid: { left: 40, right: 10, top: 20, bottom: 30 },
+					xAxis: { type: 'category', data: ['1月', '2月', '3月', '4月', '5月', '6月'] },
+					yAxis: { type: 'value' },
+					series: [
+						{
+							type: 'line',
+							data: [65, 72, 78, 85, 82, 88],
+							label: { show: true, position: 'top', formatter: '{c}%' },
+						},
+					],
+					color: ['#50C878'],
+				},
+			},
+			// 右侧边栏:第三个图表 mock(饼图) by xu 20260108
+			sidebarMockChart3: {
+				title: '设施类型分布',
+				height: '220px',
+				options: {
+					tooltip: { trigger: 'item' },
+					legend: { orient: 'vertical', left: 'left' },
+					series: [
+						{
+							type: 'pie',
+							radius: '60%',
+							data: [
+								{ value: 1048, name: '教学楼' },
+								{ value: 735, name: '宿舍楼' },
+								{ value: 580, name: '办公楼' },
+								{ value: 484, name: '实验楼' },
+								{ value: 300, name: '食堂' },
+							],
+							label: { show: true, formatter: '{b}: {c}' },
+						},
+					],
+					color: ['#5470C6', '#91CC75', '#FAC858', '#EE6666', '#73C0DE'],
+				},
+			},
+			// 右侧边栏:第四个图表 mock(堆叠柱状图) by xu 20260108
+			sidebarMockChart4: {
+				title: '各区域预约情况',
+				height: '220px',
+				options: {
+					grid: { left: 40, right: 10, top: 30, bottom: 30 },
+					xAxis: { type: 'category', data: ['东区', '西区', '南区', '北区', '中区'] },
+					yAxis: { type: 'value' },
+					legend: { data: ['已预约', '使用中', '空闲'] },
+					series: [
+						{
+							type: 'bar',
+							name: '已预约',
+							stack: 'total',
+							data: [120, 132, 101, 134, 90],
+						},
+						{
+							type: 'bar',
+							name: '使用中',
+							stack: 'total',
+							data: [220, 182, 191, 234, 290],
+						},
+						{
+							type: 'bar',
+							name: '空闲',
+							stack: 'total',
+							data: [150, 232, 201, 154, 190],
+						},
+					],
+					color: ['#5470C6', '#91CC75', '#FAC858'],
+				},
+			},
+			// 右侧边栏:第五个图表 mock(雷达图) by xu 20260108
+			sidebarMockChart5: {
+				title: '设施综合评分',
+				height: '220px',
+				options: {
+					radar: {
+						indicator: [
+							{ name: '设备', max: 100 },
+							{ name: '环境', max: 100 },
+							{ name: '服务', max: 100 },
+							{ name: '维护', max: 100 },
+							{ name: '安全', max: 100 },
+							{ name: '管理', max: 100 },
+						],
+					},
+					series: [
+						{
+							type: 'radar',
+							data: [
+								{
+									value: [85, 90, 78, 82, 88, 80],
+									name: '本季度',
+								},
+							],
+						},
+					],
+					color: ['#5470C6'],
+				},
+			},
+			// 右侧边栏:分区配置 by xu 20260106
+			sidebarPanels: [],
+
+		searchButtonConfigCheckId: '99',
+		searchButtonConfig: [
+			{
+				id: "99",
+				desc: "所有",
+				callback: () => {
+					$("[name=pageNo]").val('1');
+					$("[name=management]").val('99');
+					$("#myForm").submit();
+
+				},
+			},
+			{
+				id: "2",
+				desc: "管理",
+				callback: () => {
+					$("[name=pageNo]").val('1');
+					$("[name=management]").val('2');
+					$("#myForm").submit();
+				},
+			},
+			{
+				id: "1",
+				desc: "创建",
+				callback: () => {
+					$("[name=pageNo]").val('1');
+					$("[name=management]").val('1');
+					$("#myForm").submit();
+				},
+			},
+			{
+				id: "3",
+				desc: "已办",
+				callback: () => {
+					$("[name=pageNo]").val('1');
+					$("[name=management]").val('3');
+					$("#myForm").submit();
+				},
+			},
+			{
+				id: "55",
+				desc: "停用",
+				callback: () => {
+					$("[name=pageNo]").val('1');
+					$("[name=management]").val('55');
+					$("#myForm").submit();
+				},
+			},
+		],
+
+		// 状态筛选配置 by xu 20260105
+		statusFilterCheckId: 'all',
+		statusFilterConfig: [
+			{
+				id: "all",
+				desc: "状态",
+				callback: () => {
+					console.log('筛选:全部状态');
+					// 这里添加筛选逻辑
+				},
+			},
+			{
+				id: "available",
+				desc: "可选",
+				callback: () => {
+					console.log('筛选:可选状态');
+					// 这里添加筛选逻辑
+				},
+			},
+			{
+				id: "unavailable",
+				desc: "已选",
+				callback: () => {
+					console.log('筛选:已选状态');
+					// 这里添加筛选逻辑
+				},
+			},
+			{
+				id: "disabled",
+				desc: "禁选",
+				callback: () => {
+					console.log('筛选:禁选状态');
+					// 这里添加筛选逻辑
+				},
+			},
+		],
+	}
+	if (window.ss.dom.formElemConfig) {
+		Object.entries(window.ss.dom.formElemConfig).forEach(([key, config]) => {
+			data[key] = config.value;
+			// 处理 objPicker
+			if (config.type === window.ss.dom.TYPE.OBJPICKER) {
+				data[key + "ObjPicker"] = true;
+				data[key + "Option"] = [];
+				data[key + "Url"] = config.optUrl;
+			}
+		})
+
+	}
+		console.log('data:' + JSON.stringify(data));
+		SS.ready(function () {
+			window.ss.dom.initializeFormApp({
+				el: "#app",
+				data() {
+					return data;
+				},
+				methods: {
+					// 功能:探测当前业务列表卡片类型,用于网格列最小宽度 by xu 20260109
+					detectCardGridKind() {
+						const all = []
+							.concat(this.listConfig?.draftbox || [])
+							.concat(this.listConfig?.list || []);
+						// 真实业务中形态一致;这里按“最大”优先:thumbnail > photo > none by xu 20260109
+						if (all.some(it => String(it?.thumbType || '').trim() === 'thumbnail')) return 'thumbnail';
+						if (all.some(it => !!it?.thumb || !!it?.thumbType)) return 'photo';
+						return 'none';
+					},
+					// 初始化右侧边栏分区(人员分区 items 指向 selectedItems) by xu 20260106
+					initSidebarPanels() {
+						this.sidebarPanels = [
+							{
+								type: 'list',
+								title: '人员',
+								count: 0,
+								// header:仅保留一个筛选条件(下拉)+ 搜索按钮(mock) by xu 20260106
+								iconClass: 'menu-icon icon-obj-ry',
+								headerFilters: [
+									{
+										// 关键词筛选(使用封装组件,不做下拉 mock) by xu 20260106
+										key: 'keyword',
+										component: 'ss-search-input',
+										props: { name: 'keyword', placeholder: '人员', width: '140px' },
+										value: '',
+									},
+								],
+								headerSearchButton: true,
+								onSearch: ({ keyword, filters }) => console.log('人员搜索', keyword, filters),
+								// 人员列表暂不承载“已选”,后续接接口返回列表 by xu 20260106
+								mode: 'selected',
+								items: [],
+								itemAction: false,
+							},
+							{
+								type: 'list',
+								title: '已选',
+								// 左侧选中进入此面板 by xu 20260106
+								count: this.selectedItems.length,
+								iconClass: 'menu-icon icon-obj-xcd',
+								// 选中类分区:右侧关闭按钮=清空 by xu 20260106
+								closable: true,
+								mode: 'selected',
+								items: this.selectedItems,
+								itemLayout: 'person',
+								itemAction: true,
+								onClear: () => {
+									// 清空已选并重置左侧角标状态 by xu 20260106
+									this.selectedItems.forEach((it) => { if (it) it._ssSelected = false; });
+									this.selectedItems.splice(0);
+									this.updatePickedPanelCount();
+									console.log('清空:已选');
+								},
+							},
+							{
+								type: 'list',
+								title: '服务',
+								count: this.sidebarMockService.length,
+								iconClass: 'menu-icon icon-obj-wp',
+								// 选中类分区:右侧关闭按钮=清空 by xu 20260106
+								closable: true,
+								mode: 'selected',
+								items: this.sidebarMockService,
+								itemAction: false,
+								onClear: () => { this.sidebarMockService.splice(0); console.log('清空:服务'); },
+							},
+							{
+								type: 'list',
+								title: '预定',
+								count: this.sidebarMockReserve.length,
+								iconClass: 'menu-icon icon-obj-cd',
+								// 选中类分区:右侧关闭按钮=清空 by xu 20260106
+								closable: true,
+								mode: 'selected',
+								items: this.sidebarMockReserve,
+								itemAction: false,
+								onClear: () => { this.sidebarMockReserve.splice(0); console.log('清空:预定'); },
+							},
+							{
+								type: 'chart',
+								title: this.sidebarMockChart.title,
+								iconClass: 'menu-icon icon-obj-jzw',
+								height: this.sidebarMockChart.height,
+								options: this.sidebarMockChart.options,
+							},
+							{
+								type: 'chart',
+								title: this.sidebarMockChart2.title,
+								iconClass: 'menu-icon icon-obj-jzw',
+								height: this.sidebarMockChart2.height,
+								options: this.sidebarMockChart2.options,
+							},
+							{
+								type: 'chart',
+								title: this.sidebarMockChart3.title,
+								iconClass: 'menu-icon icon-obj-jzw',
+								height: this.sidebarMockChart3.height,
+								options: this.sidebarMockChart3.options,
+							},
+							{
+								type: 'chart',
+								title: this.sidebarMockChart4.title,
+								iconClass: 'menu-icon icon-obj-jzw',
+								height: this.sidebarMockChart4.height,
+								options: this.sidebarMockChart4.options,
+							},
+							{
+								type: 'chart',
+								title: this.sidebarMockChart5.title,
+								iconClass: 'menu-icon icon-obj-jzw',
+								height: this.sidebarMockChart5.height,
+								options: this.sidebarMockChart5.options,
+							},
+						];
+					},
+					// 更新已选分区计数 by xu 20260106
+					updatePickedPanelCount() {
+						const pickedPanel = this.sidebarPanels?.[1];
+						if (pickedPanel) pickedPanel.count = this.selectedItems.length;
+					},
+					// 左侧卡片角标选中 -> 同步到右侧边栏 by xu 20260106
+					handleToggleSelect({ item, selected, exclusive }) {
+						if (!item) return;
+						// 已选分区:补充人员号(中间槽位) by xu 20260106
+						if (!item.meta) item.meta = String(202500000 + this.selectedItems.length + 1);
+						// 卡片主体单选互斥:仅当本次切到选中时清理其他选择 by xu 20260109
+						if (exclusive && selected && this.cardClickAction === 'single') {
+							this.selectedItems.forEach((it) => { if (it && it !== item) it._ssSelected = false; });
+							// 重要:不要重新赋值数组,否则 sidebarPanels 内部 items 仍引用旧数组 by xu 20260109
+							this.selectedItems.splice(0, this.selectedItems.length);
+							this.selectedItems.push(item);
+							this.updatePickedPanelCount();
+							return;
+						}
+						const idx = this.selectedItems.indexOf(item);
+						if (selected) {
+							if (idx === -1) this.selectedItems.push(item);
+						} else {
+							if (idx > -1) this.selectedItems.splice(idx, 1);
+						}
+						this.updatePickedPanelCount();
+					},
+					// 右侧边栏移除 -> 反向同步左侧卡片状态 by xu 20260106
+					handleSidebarRemove(item) {
+						if (!item) return;
+						item._ssSelected = false;
+						const idx = this.selectedItems.indexOf(item);
+						if (idx > -1) this.selectedItems.splice(idx, 1);
+						this.updatePickedPanelCount();
+					},
+					handlePageChange({ pageNo, rowNumPer, rowNum }) {
+						// 更新隐藏表单值
+						document.getElementsByName('pageNo')[0].value = pageNo;
+						document.getElementsByName('rowNumPer')[0].value = rowNumPer;
+					document.getElementsByName('rowNum')[0].value = rowNum;
+					// 提交表单
+					document.getElementById('myForm').submit();
+				},
+					search() {
+						document.getElementById('myForm').submit();
+					}
+				},
+				mounted() {
+					// 初始化 sidebar 分区 by xu 20260106
+					this.initSidebarPanels();
+					// 初始化卡片网格类型(用于自动分列/宽度平分) by xu 20260109
+					this.cardGridKind = this.detectCardGridKind();
+					// const self = this;
+					// // 在这里可以使用 Vue 实例
+					// Object.entries(this.$data).forEach(([key, value]) => {
+					//     // 处理 objPicker
+					//     if (key.includes('ObjPicker')) {
+				//         const originalKey = key.replace('ObjPicker', '');
+				//         if (value) {
+				//             objPickerLoad(value, key).then(result => {            
+				// 				if(self.formElemConfig[originalKey]) {
+				// 					self.formElemConfig[originalKey].name = originalKey;
+				// 					self.formElemConfig[originalKey].options = result;
+				// 				}
+				//             });
+				//         }
+				//     }
+				// });
+			}
+
+		});
+	});
+
+
+
+	tokenCleanser("/service?ssToken=f6ecb50245aa478b95d800e754fa86eb&P_A=ss.clearPageToken__", { tokenList: "d66b3011932e436f841ea8cacc05209f,b59e43bcf08b490c80a473de3b24c941,f5c366661b004dfbb69ea6ed72fa8eb3,b2f666ee35f5439e99339cff519c8234,ecf4a2c3a58c487f83cf58058c0da8e6,1d1a696ba493452d9f688344eff45b21,31d5c01f958f4532b503179fe9e06569,cb131510e4df4a558cc61095f4d6d6ff,c0aea92348dd4cadaceef1cb50561c41,d7ea3255174346739c8bb813bff85921,d6b72d581a724a528a5b7e07ed18d928,c38a5fd0066b409fb8280bb88b19da8c,1dcdc0625b15423ca6ad71b7a3d93f25,f5e38a2a826b463389110a2b64f2eeef,6c222f70c61c4e15ba21447648f6bec3,80ea5c7cdc23426ab126473d9228fc9f,a87f50f2c3654eba849ca0f03409831b,980c1860fbaa45b1888faea7c97e4ab4,4613780c52534a79ba80c0aaddd3b9c7,5a8db34cc8a04be0a08cc0e3f6fe00c6,18e085e0c31549efa9597733d32e32a0,ba8f7c48fea14306900c50e668b64621,8f5a0337b9f1436ca8a053586f6020cf,f6ecb50245aa478b95d800e754fa86eb" });
+</script>

+ 39 - 21
page/env/objList.jsp

@@ -900,14 +900,17 @@ wd.display.initGrowHigh('lmms${item2.bgmbid}','80px',{},null,false);
 
 		<%--搜索结果start--%>
 		
-		<div class="content-area item-content-area" style="gap: 20px">
-			<template v-for="(item, i) in listConfig.draftbox" :key="i">
-				<ss-folder-card v-if="item.children" :item="item"></ss-folder-card>
-				<ss-list-card v-else :item="item"></ss-list-card>
-			</template>
+			<%-- 功能说明:卡片区域使用 grid 自动分列,剩余宽度平分(不锁死 max-width) by xu 20260109 --%>
+			<div :class="['content-area','item-content-area', cardGridKind ? ('ss-card-grid--' + cardGridKind) : '']">
+				<template v-for="(item, i) in listConfig.draftbox" :key="i">
+					<ss-folder-card v-if="item.children" :item="item"></ss-folder-card>
+					<!-- 功能说明:通过 props 传 ssObjName(用于无图占位 biz icon) by xu 20260109 -->
+					<ss-list-card v-else :item="item" :ss-obj-name="ssObjName" :card-click-action="cardClickAction"></ss-list-card>
+				</template>
 			<template v-for="(item, i) in listConfig.list" :key="i">
 				<ss-folder-card v-if="item.children" :item="item"></ss-folder-card>
-				<ss-list-card v-else :item="item"></ss-list-card>
+				<!-- 功能说明:通过 props 传 ssObjName(用于无图占位 biz icon) by xu 20260109 -->
+					<ss-list-card v-else :item="item" :ss-obj-name="ssObjName" :card-click-action="cardClickAction"></ss-list-card>
 			</template>
 			
           <ss-page 
@@ -948,11 +951,14 @@ wd.display.initGrowHigh('lmms${item2.bgmbid}','80px',{},null,false);
     //     return result; 
     // }
 	
-	const data = {
-		systemType: window.ss.dom.TYPE,
-	    listConfig:window.ss.dom.listConfig,
-		formElemConfig:window.ss.dom.formElemConfig,
-		<%-- 实际没用上,注释掉 Ben(20251225) btnElemConfig:window.ss.dom.btnElemConfig, --%>
+		const data = {
+			ssObjName:"${ssObjName}",
+			systemType: window.ss.dom.TYPE,
+		    listConfig:window.ss.dom.listConfig,
+			formElemConfig:window.ss.dom.formElemConfig,
+			cardGridKind: '', // 功能:卡片网格布局类型(none/photo/thumbnail) by xu 20260109
+			cardClickAction: "view", // 功能:卡片主体点击动作(view=查看;single=单选互斥;角标仍多选) by xu 20260109
+			<%-- 实际没用上,注释掉 Ben(20251225) btnElemConfig:window.ss.dom.btnElemConfig, --%>
 		
 		searchButtonConfigCheckId:'${management}',
 		searchButtonConfig:[
@@ -1023,22 +1029,34 @@ wd.display.initGrowHigh('lmms${item2.bgmbid}','80px',{},null,false);
             data(){
                 return data;
             },
-			methods: {
-				handlePageChange({pageNo, rowNumPer, rowNum}) {
-					// 更新隐藏表单值
-					document.getElementsByName('pageNo')[0].value = pageNo;
-					document.getElementsByName('rowNumPer')[0].value = rowNumPer;
-					document.getElementsByName('rowNum')[0].value = rowNum;
+				methods: {
+					// 功能:探测当前业务列表卡片类型,用于网格列最小宽度 by xu 20260109
+					detectCardGridKind() {
+						const all = []
+							.concat(this.listConfig?.draftbox || [])
+							.concat(this.listConfig?.list || []);
+						// 真实业务中形态一致;这里按“最大”优先:thumbnail > photo > none by xu 20260109
+						if (all.some(it => String(it?.thumbType || '').trim() === 'thumbnail')) return 'thumbnail';
+						if (all.some(it => !!it?.thumb || !!it?.thumbType)) return 'photo';
+						return 'none';
+					},
+					handlePageChange({pageNo, rowNumPer, rowNum}) {
+						// 更新隐藏表单值
+						document.getElementsByName('pageNo')[0].value = pageNo;
+						document.getElementsByName('rowNumPer')[0].value = rowNumPer;
+						document.getElementsByName('rowNum')[0].value = rowNum;
 					// 提交表单
 					document.getElementById('myForm').submit();
 				},
 				search(){
 					document.getElementById('myForm').submit();
 				}
-            },
-			mounted(){
-				// const self = this;
-                // 在这里可以使用 Vue 实例
+				},
+				mounted(){
+					// 初始化卡片网格类型(用于自动分列/宽度平分) by xu 20260109
+					this.cardGridKind = this.detectCardGridKind();
+					// const self = this;
+	                // 在这里可以使用 Vue 实例
                 // Object.entries(this.$data).forEach(([key, value]) => {
                     // 处理 objPicker
                 //     if (key.includes('ObjPicker')) {

+ 693 - 12
skin/easy/css/base.css

@@ -1810,6 +1810,8 @@ input::placeholder ,textarea::placeholder{
 .knowledge-item-container {
   /* width: 573px; 移除固定宽度 by xu 20260105 */
   min-width: 300px; /* 无图卡片最小宽度 by xu 20260105 */
+  /* 移除 max-width:宽度由容器网格按行平分(不锁死),同时不小于 min-width by xu 20260109 */
+  width: 100%; /* 功能:在 grid 下填满网格列宽 by xu 20260109 */
   height: 168px;
   /* box-shadow: 2px 2px 5px #e7e8e8; */
   background: #ffffff;
@@ -1834,14 +1836,17 @@ input::placeholder ,textarea::placeholder{
 /* 状态颜色 - 场地预定 by xu 20260105 */
 .knowledge-item-container.status-available {
   background: #d4fad4;
+  /* 移除 max-width:宽度由容器网格按行平分 by xu 20260109 */
 }
 
 .knowledge-item-container.status-unavailable {
   background: #fff5c8;
+  /* 移除 max-width:宽度由容器网格按行平分 by xu 20260109 */
 }
 
 .knowledge-item-container.status-disabled {
   background: #fadcdc;
+  /* 移除 max-width:宽度由容器网格按行平分 by xu 20260109 */
 }
 
 .knowledge-item-container:hover {
@@ -1936,6 +1941,11 @@ input::placeholder ,textarea::placeholder{
   font-size: 20px;
   line-height: 1em; /* 调整行高 by xu 20260105 */
   margin-bottom: 16px; /* header 和 body 之间 16px 间距 by xu 20260105 */
+  /* 标题单行省略(超出 ...) by xu 20260108 */
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  max-width: 100%;
 }
 
 .knowledge-item-container .box-body {
@@ -1945,7 +1955,8 @@ input::placeholder ,textarea::placeholder{
   display: flex;
   flex-direction: row;
   gap: 16px; /* 图片和文字之间 16px 间距 by xu 20260105 */
-  align-items: flex-end;
+  align-items: flex-start; /* 功能:右侧文字区垂直居上 by xu 20260108 */
+  min-width: 0; /* 功能:允许内部 right 收缩,触发换行/省略 by xu 20260108 */
   --right-padding-left: 0; /* 使用 gap 代替 padding by xu 20260105 */
   --right-width: calc(100% - 73px - 16px); /* 证件照宽度 73px + 16px 间距 by xu 20260105 */
 }
@@ -1982,24 +1993,181 @@ input::placeholder ,textarea::placeholder{
   display: block;
 }
 
+/* objList 缩略图/证件照默认占位(无图时显示 biz icon) by xu 20260109 */
+.knowledge-item-container .left.ss-objlist-thumbPlaceholder{
+  background: #f2f3f4;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.knowledge-item-container .left .ss-objlist-thumbIcon{
+  font-family: icon-biz;
+  font-size: 48px;
+  color: #565d6d;
+} /* 功能说明:一级列表缩略图默认 icon by xu 20260109 */
+
 .knowledge-item-container .right {
   width: var(--right-width);
   padding-left: var(--right-padding-left);
   /* padding-top: 5px; */
+  position: relative; /* 功能:右侧文字区 hover 浮层定位 by xu 20260108 */
+  flex: 1; /* 功能:与 left 配合,保证宽度约束生效 by xu 20260108 */
+  min-width: 0; /* 功能:允许文本触发省略/换行 by xu 20260108 */
 }
 
-.knowledge-item-container .right .title {
-  font-size: 16px;
-  color: #666666;
-  line-height: 2em;
-  /* padding-right: 1em; */
+/* ss-list-card 右侧文字区(4 行布局) by xu 20260108 */
+.knowledge-item-container .right .ss-card-text{
+  position: relative;
+  width: 100%;
+  /* 4 行固定显示;行高由各块内部控制 by xu 20260108 */
+  max-height: 96px; /* 4 * 24px */
+  overflow: hidden;
+  display: flex;
+  flex-direction: column;
+  gap: 0;
+}
+.knowledge-item-container .right .ss-card-text__line{
+  position: relative; /* ... 命中区域定位 by xu 20260108 */
+}
+.knowledge-item-container .right .ss-card-text__secondBlock{
+  height: 72px; /* 第二部分固定占 3 行 by xu 20260108 */
+}
+.knowledge-item-container .right .ss-card-text__secondFullBlock{
+  height: 96px; /* 功能:仅标签时第二部分占满 4 行(不留空行) by xu 20260109 */
+}
+.knowledge-item-container .right .ss-card-text__thirdLineWrap{
+  height: 24px; /* 第三部分默认 1 行 by xu 20260108 */
+}
+.knowledge-item-container .right .ss-card-text__thirdFullBlock{
+  height: 96px; /* 第二部分为空时,第三部分占满 4 行 by xu 20260108 */
+}
+.knowledge-item-container .right .ss-card-text__ellipsisHit{
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  width: 32px; /* 功能:扩大命中区(更好 hover 到) by xu 20260109 */
+  height: 24px;
+  cursor: pointer;
+  background: transparent;
+  z-index: 3; /* 修复:高于 card-icon(z=2),避免 hover/click 事件被覆盖吞掉 by xu 20260109 */
+  display: none; /* 功能:只有真实出现 ... 才显示命中区 by xu 20260109 */
+  pointer-events: auto;
+} /* 功能说明:仅 ... 区域可 hover by xu 20260108 */
+.knowledge-item-container .right .ss-card-text__ellipsisHit.is-on{
+  display: block;
+} /* 功能说明:真实出现 ... 时才显示命中区 by xu 20260109 */
+.knowledge-item-container .right .ss-card-text__ellipsisHit--second{
+  right: 0;
+} /* 功能说明:第二部分 ... 命中区贴右即可 by xu 20260109 */
+.knowledge-item-container .right .ss-card-text__ellipsisHit--third{
+  right: 0; /* 修复:第三部分 hover 必须对齐可见 ...,不应左移导致“移到更左才触发” by xu 20260109 */
+  width: 24px; /* 修复:命中区贴合 ...,减少与右下角选择 icon 冲突 by xu 20260109 */
+} /* 功能说明:第三部分 ... 命中区避让 by xu 20260109 */
+
+/* 第二部分:摘要(优先)/物品参数(tags) by xu 20260108 */
+.knowledge-item-container .right .ss-card-text__secondSummary{
+  font-size: 18px;
+  color: #666;
   line-height: 24px;
+  padding-right: 0; /* 修复:摘要不应整体右缩;... 由命中区覆盖处理 by xu 20260109 */
   display: -webkit-box;
   overflow: hidden;
   text-overflow: ellipsis;
-  -webkit-line-clamp: 1;
+  -webkit-line-clamp: 3; /* 第二部分最多 3 行 by xu 20260108 */
   -webkit-box-orient: vertical;
 }
+.knowledge-item-container .right .ss-card-text__secondTags{
+  font-size: 18px;
+  color: #666;
+  line-height: 24px;
+  padding-right: 0; /* 修复:不压缩内容宽度(避免提前 ... / 影响 UI) by xu 20260109 */
+  display: flex;
+  flex-direction: column;
+  gap: 0;
+}
+.knowledge-item-container .right .ss-card-text__tagLine{
+  font-size: 18px;
+  color: #666;
+  line-height: 24px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: clip; /* 功能:非最后一行不出现 ...,避免误导 by xu 20260109 */
+}
+.knowledge-item-container .right .ss-card-text__tagLine.is-last{
+  text-overflow: ellipsis; /* 功能:仅最后一行允许出现 ... by xu 20260109 */
+}
+.knowledge-item-container .right .ss-card-text__tagLine.is-last{
+  word-spacing: 10px; /* 功能:最后一行平铺时空隙更大 by xu 20260108 */
+}
+
+/* 第三部分:默认 1 行(对象号优先/否则类目串) by xu 20260108 */
+.knowledge-item-container .right .ss-card-text__thirdLine{
+  font-size: 18px;
+  color: #333;
+  line-height: 24px;
+  padding-right: 0; /* 修复:不压缩内容宽度(避免提前 ... / 影响 UI) by xu 20260109 */
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+/* 第三部分占满 4 行(第二部分为空时) by xu 20260108 */
+.knowledge-item-container .right .ss-card-text__thirdFull{
+  font-size: 18px;
+  color: #333;
+  line-height: 24px;
+  padding-right: 0; /* 修复:不压缩内容宽度(避免提前 ... / 影响 UI) by xu 20260109 */
+  white-space: normal;
+  word-break: break-word;
+  display: -webkit-box;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -webkit-line-clamp: 4;
+  -webkit-box-orient: vertical;
+}
+
+/* hover 展开浮层:宽度=右侧文字区,高度随内容,向上展开并带阴影 by xu 20260108 */
+.knowledge-item-container .right .ss-card-text-popover{
+  position: absolute;
+  left: 0;
+  right: 0;
+  bottom: 0; /* 贴底,向上长 by xu 20260108 */
+  background: #fff;
+  border: 1px solid #e4e5e8;
+  border-radius: 4px;
+  box-shadow: 0 10px 28px rgba(0, 0, 0, 0.18);
+  padding: 8px 10px;
+  z-index: 5;
+  box-sizing: border-box;
+}
+.knowledge-item-container .right .ss-card-text-popover__summary{
+  font-size: 18px;
+  color: #666;
+  line-height: 24px;
+  white-space: normal; /* 展开态允许换行 by xu 20260108 */
+  word-break: break-word;
+}
+.knowledge-item-container .right .ss-card-text-popover__kvlist{
+  margin-top: 4px;
+  display: flex;
+  flex-direction: column;
+  gap: 0;
+}
+.knowledge-item-container .right .ss-card-text-popover__kv{
+  font-size: 18px;
+  color: #666;
+  line-height: 24px;
+  white-space: normal; /* 展开态允许换行 by xu 20260108 */
+  word-break: break-word;
+}
+.knowledge-item-container .right .ss-card-text-popover__objno{
+  margin-top: 4px;
+  font-size: 18px;
+  color: #333;
+  line-height: 24px;
+  white-space: normal; /* 展开态允许换行 by xu 20260108 */
+  word-break: break-word;
+}
 
 /* 右下角卡片选择图标 by xu 20260105 */
 .knowledge-item-container .card-icon {
@@ -2618,7 +2786,7 @@ input::placeholder ,textarea::placeholder{
 }
 
 .form-container .content-box .content-div{
-  height: 100% !important;
+  height: auto !important;
   overflow: hidden !important;
 }
 
@@ -4521,14 +4689,28 @@ input::placeholder ,textarea::placeholder{
   height: calc(100% - 75px);
   width: 100%;
   /* margin-top: 10px; */
-  padding: 0 0 100px 20px;
-  display: flex;
-  flex-wrap: wrap;
-  align-content: flex-start;
+  padding: 0 20px 100px 20px;
+  /* 宽度分配:按最小宽度自动分列,剩余宽度平分(不锁死 max-width) by xu 20260109 */
+  display: grid;
+  grid-template-columns: repeat(auto-fill, minmax(var(--ss-card-min, 300px), 1fr));
+  gap: 20px;
+  align-content: start;
   overflow-y: auto;
   --project-detail-width: 370px;
 }
 
+/* objList 卡片列最小宽度(同一业务列表缩略图形态一致) by xu 20260109 */
+.page-container .item-content-area.ss-card-grid--none{ --ss-card-min: 300px; }
+.page-container .item-content-area.ss-card-grid--photo{ --ss-card-min: 320px; }
+.page-container .item-content-area.ss-card-grid--thumbnail{ --ss-card-min: 400px; }
+
+/* 分页在 grid 中必须独占一行(不跟卡片并排) by xu 20260109 */
+.page-container .item-content-area .pager-container,
+.page-container .item-content-area .pager-bar{
+  grid-column: 1 / -1;
+  width: 100%;
+} /* 功能说明:分页单独一行 by xu 20260109 */
+
 .page-container .content-area .pager-bar {
   width: 100%;
   height: 80px;
@@ -4710,6 +4892,505 @@ input::placeholder ,textarea::placeholder{
 
 /* 一级页面右边信息栏结束 */
 
+/* ss-sidebar 右侧边栏(objList 右侧区域) by xu 20260106 */
+.ss-sidebar{
+  width: 380px;
+  height: 100%;
+  box-shadow: 2px 2px 5px #e7e8e8;
+  /* 右侧边栏整体白底 + 统一左右内边距 by xu 20260106 */
+  background: #ffffff;
+  border-radius: 2px;
+  border: 1px solid #dddfe6;
+  /* 允许内部下拉/弹层溢出显示(ss-objp popup-win 等) by xu 20260106 */
+  overflow: visible;
+  display: flex;
+  flex-direction: column;
+  min-height: 0;
+  user-select: text;
+}
+.ss-sidebar__inner{
+  padding: 0 10px;
+  /* 右侧边栏主滚动容器:允许滚动但隐藏滚动条 by xu 20260106 */
+  overflow-y: auto;
+  flex: 1;
+  min-height: 0;
+  scrollbar-width: none; /* Firefox */
+  -ms-overflow-style: none; /* IE/Edge */
+  display: flex;
+  flex-direction: column;
+  gap: 12px;
+  box-sizing: border-box;
+}
+.ss-sidebar__inner::-webkit-scrollbar{
+  width: 0;
+  height: 0;
+}
+.ss-sidebar-sections{
+  display: flex;
+  flex-direction: column;
+  /* gap 使用独立拖拽槽位 .ss-sidebar-gap 实现 by xu 20260106 */
+  gap: 0;
+  /* 抵消 .ss-sidebar__inner 的左右 padding,让 gap 占满 100% 宽度 by xu 20260106 */
+  margin: 0 -10px;
+}
+.ss-sidebar-section{
+  display: block;
+  /* 高度由拖拽调整(inline style) by xu 20260106 */
+  overflow: visible;
+}
+.ss-sidebar-section__content{
+  /* 业务面板内容区恢复左右 padding by xu 20260106 */
+  padding: 0 10px;
+  height: 100%;
+}
+.ss-sidebar-gap{
+  width: 100%;
+  height: 6px;
+  background: transparent;
+  cursor: row-resize;
+}
+.ss-sidebar-gap.is-active{
+  background: #d8dae1; /* 长按约0.5s进入拖拽态才变色 by xu 20260106 */
+}
+.ss-sidebar-actions{
+  /* 顶部按钮栏右对齐 by xu 20260106 */
+  padding: 16px 10px 16px;
+  display: flex;
+  flex-wrap: wrap;
+  gap: 5px;
+  justify-content: flex-end;
+  position: sticky;
+  top: 0;
+  background: #ffffff;
+  z-index: 2;
+  height: 60px;
+  box-sizing: border-box;
+}
+/* 顶部按钮复用 ss-search-button(.ss-drop-button) by xu 20260106 */
+.ss-sidebar-actions .ss-drop-button{
+  height: 32px;
+  padding: 0 12px;
+  margin: 0;
+  cursor: pointer;
+  background: #ffffff;
+  color: #333;
+  border: 1px solid #c4c7cc;
+}
+.ss-sidebar-actions .ss-drop-button:hover{
+  border-color: transparent;
+  color: #fff;
+  background: #393d51;
+}
+.ss-sidebar-panel{
+  background: #fff;
+  border: 1px solid #e7e8e8;
+  /* header 内可能有下拉弹层,允许溢出 by xu 20260106 */
+  overflow: visible;
+  /* 淡淡阴影 by xu 20260106 */
+  box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.1);
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+}
+.ss-sidebar-panel__header{
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  /* header 样式细调(更贴近设计稿) by xu 20260106 */
+  padding: 0 8px 0 15px;
+  height: 35px;
+  background: #f2f3f4;
+  border-bottom: 1px solid #efefef;
+}
+.ss-sidebar-panel__title{
+  display: flex;
+  align-items: center;
+  gap: 5px;
+  color: #4d4d4d;
+  font-size: 16px;
+}
+.ss-sidebar-panel__icon{
+  color: #4d4d4d;
+  width: 24px;
+  height: 24px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.ss-sidebar-panel__icon.icon-container{
+  font-size: 18px;
+}
+.ss-sidebar-panel__count{
+  color: #4d4d4d;
+  font-size: 16px;
+}
+.ss-sidebar-panel__tools{
+  display: flex;
+  align-items: center;
+  gap: 6px;
+}
+.ss-sidebar-panel__filters{
+  display: flex;
+  align-items: center;
+  gap: 6px;
+}
+/* header 条件使用封装组件(ss-search-input/ss-objp/ss-search-date-picker) by xu 20260106 */
+.ss-sidebar-panel__filters > .input{
+  border: 1px solid #dcdfe6;
+  border-radius: 4px;
+  background: #ffffff;
+  height: 32px;
+  display: flex;
+  align-items: center;
+  box-sizing: border-box;
+}
+.ss-sidebar-panel__filters > .input > input{
+  height: 100%;
+  width: 100%;
+  padding: 0 10px;
+  margin: 0;
+  outline: none;
+  border: none;
+  background: transparent;
+  font-size: 14px;
+  box-sizing: border-box;
+}
+.ss-sidebar-panel__filters .input{
+  width: auto;
+}
+.ss-sidebar-panel__filters .input input{
+  height: 32px;
+}
+.ss-sidebar-panel__filters .select-container{
+  height: 32px;
+}
+.ss-sidebar-panel__filters .select-container input{
+  height: 32px;
+}
+.ss-sidebar-panel__filters .select-container .suffix>div{
+  width: 32px !important;
+  height: 32px !important;
+}
+.ss-sidebar-panel__filters .ss-date-picker{
+  height: 32px;
+}
+.ss-sidebar-panel__searchInline{
+  display: flex;
+  align-items: center;
+}
+.ss-sidebar-panel__search{
+  padding: 8px 10px;
+  border-bottom: 1px solid #edf1f5;
+  background: #ffffff;
+}
+.ss-sidebar-search{
+  height: 32px;
+  border: 1px solid #dcdfe6;
+  border-radius: 4px;
+  display: flex;
+  align-items: center;
+  gap: 6px;
+  padding: 0 8px;
+  box-sizing: border-box;
+}
+.ss-sidebar-search.is-inline{
+  height: 28px;
+  background: #ffffff;
+}
+.ss-sidebar-search__prefix{
+  color: #909399;
+}
+.ss-sidebar-search__input{
+  border: none;
+  outline: none;
+  flex: 1;
+  height: 100%;
+  font-size: 14px;
+  background: transparent;
+}
+.ss-sidebar-list{
+  /* 列表内容左右留白,不贴边 by xu 20260106 */
+  padding: 0 10px;
+  /* 无数据时也保留最小高度(避免只剩 header) by xu 20260106 */
+  min-height: 48px;
+  overflow-y: auto;
+  scrollbar-width: none;
+  -ms-overflow-style: none;
+  border-bottom-left-radius: 4px;
+  border-bottom-right-radius: 4px;
+  flex: 1;
+}
+.ss-sidebar-list::-webkit-scrollbar{
+  width: 0;
+  height: 0;
+}
+.ss-sidebar-list-item{
+  display: flex;
+  gap: 10px;
+  /* 列表项默认垂直居中,视觉更接近设计稿 by xu 20260106 */
+  align-items: center;
+  justify-content: space-between;
+  /* item 不占满整块,左右由 list padding 控制;自身不再额外左右 padding by xu 20260106 */
+  /* padding: 10px 0; */
+  /* 一行高度 48px,无分割线 by xu 20260106 */
+  min-height: 48px;
+  border-top: none;
+}
+.ss-sidebar-list-item:hover{
+  background: #d8dae1;
+}
+.ss-sidebar-list-item.has-tags{
+  /* 多行内容时顶对齐 by xu 20260106 */
+  align-items: flex-start;
+}
+.ss-sidebar-list-item .ss-sidebar-icon-btn{
+  opacity: 0;
+  pointer-events: none;
+  transition: opacity 0.15s;
+}
+.ss-sidebar-list-item:hover .ss-sidebar-icon-btn{
+  opacity: 1;
+  pointer-events: auto;
+}
+.ss-sidebar-list-item .ss-sidebar-item-btn{
+  opacity: 0;
+  pointer-events: none;
+  transition: opacity 0.15s;
+}
+.ss-sidebar-list-item:hover .ss-sidebar-item-btn{
+  opacity: 1;
+  pointer-events: auto;
+}
+.ss-sidebar-list-item.is-first{
+  border-top: none;
+}
+.ss-sidebar-list-item__main{
+  flex: 1;
+  min-width: 0;
+  /* 文本对齐到 header 标题位置(header padding 10 + icon 24 + gap 5 = 39px) by xu 20260106 */
+  padding-left: 35px;
+}
+.ss-sidebar-list-item__title{
+  /* 字体 20px,黑色 by xu 20260106 */
+  color: #000;
+  font-size: 18px;
+  font-weight: 500;
+  line-height: 24px;
+  min-width: 0; /* 功能:允许在 grid/flex 中触发省略,避免与 meta 重叠 by xu 20260109 */
+  overflow: hidden; /* 功能:长标题不与右侧槽位叠加 by xu 20260109 */
+}
+.ss-sidebar-list-item__title > span{
+  display: block; /* 修复:inline span 的 overflow 不生效,导致文字叠加 by xu 20260109 */
+  min-width: 0;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+} /* 功能说明:标题单行省略 by xu 20260109 */
+.ss-sidebar-list-item__meta{
+  color: #000;
+  font-size: 18px;
+  font-weight: 500;
+  flex: none;
+  min-width: 0; /* 功能:固定槽位内允许省略 by xu 20260109 */
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+} 
+.ss-sidebar-list-item.is-person{
+  /* 人员布局:名称(左) + 人员号(中) + 操作(右) by xu 20260106 */
+  display: grid;
+  grid-template-columns: 1fr 110px 48px;
+  align-items: center;
+  gap: 10px;
+}
+.ss-sidebar-list-item.is-person .ss-sidebar-list-item__main{
+  padding-left: 29px;
+}
+.ss-sidebar-list-item.is-person .ss-sidebar-list-item__meta{
+  text-align: left;
+  color: #606266;
+}
+.ss-sidebar-list-item__tags{
+  margin-top: 6px;
+  display: flex;
+  flex-wrap: wrap;
+  gap: 6px;
+}
+.ss-sidebar-tag{
+  font-size: 12px;
+  color: #606266;
+  background: #f5f7fa;
+  border: 1px solid #ebeef5;
+  padding: 2px 6px;
+  border-radius: 4px;
+  max-width: 100%;
+}
+.ss-sidebar-icon-btn{
+  /* header 按钮(搜索/清空)固定 32x32 by xu 20260106 */
+  width: 32px;
+  height: 32px;
+  border-radius: 4px;
+  border: 1px solid #dcdfe6;
+  background: #ffffff;
+  cursor: pointer;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  color: #606266;
+}
+.ss-sidebar-header-btn .icon-container{
+  font-size: 16px;
+}
+.ss-sidebar-item-btn{
+  /* item 操作按钮区域:48x48,默认无背景/无边框 by xu 20260106 */
+  width: 48px;
+  height: 48px;
+  border: none;
+  background: transparent;
+  cursor: pointer;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  color: #000;
+}
+.ss-sidebar-item-btn .icon-container{
+  font-size: 22px; /* item 图标 22px by xu 20260106 */
+}
+.ss-sidebar-item-btn:hover{
+  background: #393d51;
+  color: #fff;
+}
+.ss-sidebar-item-btn:hover .icon-container{
+  color: #fff;
+}
+.ss-sidebar-icon-btn:hover{
+  border-color: transparent;
+  color: #fff;
+  background: #393d51;
+}
+.ss-sidebar-icon-btn.is-danger:hover{
+  border-color: transparent;
+  color: #fff;
+  background: #e74c3c;
+}
+
+/* ss-sidebar 统计图 hover 大图预览(左侧弹出 + 图钉/全屏) by xu 20260108 */
+.ss-sidebar-chart-hover{
+  position: relative;
+}
+.ss-sidebar-chart-hover__trigger{
+  width: 100%;
+}
+.ss-sidebar-chart-preview{
+  background: #ffffff;
+  border: 1px solid #e4e5e8; /* 弹窗边框 by xu 20260108 */
+  border-radius: 4px; /* 弹窗圆角 by xu 20260108 */
+  box-shadow: 6px 6px 2px rgba(0, 0, 0, 0.18);
+  display: flex;
+  flex-direction: column;
+  overflow: hidden;
+  pointer-events: auto;
+}
+.ss-sidebar-chart-preview.is-pinned{
+  border-color: #e4e5e8; /* 固定态通过图标区分,不改边框颜色 by xu 20260108 */
+}
+.ss-sidebar-chart-preview__header{
+  background: #ffffff;
+  height: 48px;
+  border-bottom: 1px solid #e2e4ec;
+  /* 右侧工具按钮不要贴边(right/bottom 更松一点) by xu 20260108 */
+  padding-right: 0px;
+  box-sizing: border-box;
+} /* 功能说明:hover 大图 header 规范 by xu 20260108 */
+.ss-sidebar-chart-preview__header .ss-sidebar-panel__icon{
+  width: 20px;
+  height: 20px;
+} /* 功能说明:左侧图标 20px by xu 20260108 */
+.ss-sidebar-chart-preview__header .ss-sidebar-panel__icon.icon-container{
+  font-size: 20px;
+}
+.ss-sidebar-chart-preview__header .ss-sidebar-panel__title{
+  font-size: 18px;
+  color: #000;
+} /* 功能说明:标题 18px by xu 20260108 */
+.ss-sidebar-chart-preview__header--simple{
+  height: 48px;
+  background: #ffffff;
+  border-bottom: 1px solid #e2e4ec;
+  padding: 0 12px;
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+  box-sizing: border-box;
+} /* 功能说明:无标题时预览只显示右侧工具 by xu 20260108 */
+.ss-sidebar-chart-preview__body{
+  flex: 1;
+  min-height: 0;
+}
+.ss-sidebar-chart-tool{
+  /* 右侧操作按钮:48x48,无边框 by xu 20260108 */
+  width: 48px;
+  height: 48px;
+  border-radius: 0; /* 功能说明:右上角图标按钮不需要圆角 by xu 20260108 */
+  border: none;
+  background: transparent;
+  cursor: pointer;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  color: #606266;
+  padding: 0;
+}
+.ss-sidebar-chart-tool .icon-container{
+  font-size: 20px;
+} /* 功能说明:右侧操作图标 20px by xu 20260108 */
+.ss-sidebar-chart-tool.is-active{
+  /* 固定态仅靠 icon-fix-bold 区分,不额外加边框 by xu 20260108 */
+  color: #606266;
+}
+.ss-sidebar-chart-tool:hover{
+  background: #393d51;
+  color: #fff;
+}
+.ss-sidebar-chart-tool:hover .icon-container{
+  color: #fff;
+} /* 功能说明:hover 图标变白 by xu 20260108 */
+.ss-sidebar-chart-fullscreen{
+  /* 全屏:使用浏览器 Fullscreen API,不再使用遮罩弹窗 by xu 20260108 */
+  width: 100%;
+  height: 100%;
+  background: #ffffff;
+  display: flex;
+  flex-direction: column;
+  overflow: hidden;
+}
+.ss-sidebar-chart-fullscreen__body{
+  flex: 1;
+  min-height: 0;
+}
+.ss-sidebar-chart-fullscreen__header{
+  flex: none;
+} /* 功能说明:全屏 header 复用 ss-sidebar-panel__header by xu 20260108 */
+.ss-sidebar-chart-fullscreen__header{
+  background: #ffffff;
+  height: 48px;
+  border-bottom: 1px solid #e2e4ec;
+  /* 右侧工具按钮不要贴边(right/bottom 更松一点) by xu 20260108 */
+  padding-right: 0;
+  box-sizing: border-box;
+} /* 功能说明:全屏 header 规范 by xu 20260108 */
+.ss-sidebar-chart-fullscreen__header .ss-sidebar-panel__icon{
+  width: 20px;
+  height: 20px;
+}
+.ss-sidebar-chart-fullscreen__header .ss-sidebar-panel__icon.icon-container{
+  font-size: 20px;
+}
+.ss-sidebar-chart-fullscreen__header .ss-sidebar-panel__title{
+  font-size: 18px;
+  color: #000;
+}
+
 /* 统计图 */
 .page-statistics .content-area {
   padding: 20px;

+ 8 - 0
skin/easy/css/icon-base/iconfont.css

@@ -13,6 +13,14 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.icon-tuichuquanping:before {
+  content: "\e669";
+}
+
+.icon-a-quanping_xi:before {
+  content: "\e666";
+}
+
 .icon-fujian:before {
   content: "\e668";
 }

+ 4 - 4
skin/easy/css/iconfont.css

@@ -162,17 +162,17 @@
   content: "\e6cd";
 }
 
-.icon-a-quanping_xi:before {
+/* .icon-a-quanping_xi:before {
   content: "\e6ca";
-}
+} */
 
-.icon-tuichuquanping:before {
+/* .icon-tuichuquanping:before {
   content: "\e6cb";
 }
 
 .icon-tuichuquanping_xi:before {
   content: "\e6cc";
-}
+} */
 
 .icon-fansuojin:before {
   content: "\e6c9";

BIN
skin/easy/fonts/icon-base/iconfont.ttf


BIN
skin/easy/fonts/icon-base/iconfont.woff


BIN
skin/easy/fonts/icon-base/iconfont.woff2


Некоторые файлы не были показаны из-за большого количества измененных файлов