public/components/frame/privilegeTree/privilegeTree.js
@@ -160,8 +160,11 @@ // 获取当前页面的参数 let pgId = vc.component.privilegeTreeInfo._currentPgId; let communityId = vc.getCurrentCommunity().communityId; // 获取权限名称 let nodeData = $('#jstree_privilege').jstree('get_node', nodeId); let pName = nodeData ? nodeData.text : ''; // 跳转到role-a页面,传递所有参数 let params = 'pId=' + pId + '&pgId=' + pgId + '&communityId=' + communityId + '&type=all'; let params = 'pId=' + pId + '&pgId=' + pgId + '&communityId=' + communityId + '&type=all&pName=' + encodeURIComponent(pName); vc.jumpToPage('/#/pages/frame/role/role-a?' + params); }); // 将按钮插入到节点后面 public/css/vc.css
@@ -1366,25 +1366,14 @@ transition: all 0.3s; } .cost-detail-container .action-buttons .add-btn { .cost-detail-container .action-buttons .add-btn, .cost-detail-container .action-buttons .import-btn{ background: #1677ff; color: #fff; border: 1px solid #1677ff; } .cost-detail-container .action-buttons .add-btn:hover { .cost-detail-container .action-buttons .add-btn:hover, .cost-detail-container .action-buttons .import-btn:hover { background: #4096ff; } .cost-detail-container .action-buttons .import-btn { background: #fff; color: #333; border: 1px solid #d9d9d9; } .cost-detail-container .action-buttons .import-btn:hover { background: #f5f5f5; border-color: #bfbfbf; } .cost-detail-container table { @@ -1628,23 +1617,111 @@ #button-container .role-a-checkbox, #data-container .role-a-checkbox { flex: 0 0 calc(20% - 8px); flex: 0 0 calc((100% - 70px) / 8); min-width: 0; box-sizing: border-box; } @media (max-width: 1200px) { @media (max-width: 1400px) { #button-container .role-a-checkbox, #data-container .role-a-checkbox { flex: 0 0 calc(25% - 8px); flex: 0 0 calc((100% - 60px) / 7); } } @media (max-width: 1200px) { #button-container .role-a-checkbox, #data-container .role-a-checkbox { flex: 0 0 calc((100% - 50px) / 6); } } @media (max-width: 992px) { #button-container .role-a-checkbox, #data-container .role-a-checkbox { flex: 0 0 calc((100% - 40px) / 5); } } @media (max-width: 768px) { #button-container .role-a-checkbox, #data-container .role-a-checkbox { flex: 0 0 calc(50% - 8px); flex: 0 0 calc((100% - 20px) / 2); } } .role-a-checkbox label { padding-top: 5px; } .cost-detail-container .action-buttons .download-btn { border: 1px solid #1677ff; background: #fff; color: #1677ff; } /* 编辑公共收益金弹窗样式 */ .edit-public-income-modal .edit-form-group { display: flex; align-items: center; } .edit-public-income-modal .edit-form-label { min-width: 120px; margin: 0; padding: 0; font-weight: normal; color: #333; } .edit-public-income-modal .edit-input-wrapper { display: flex; align-items: center; flex: 1; } .edit-public-income-modal .edit-input { flex: 1; margin: 0; } .edit-public-income-modal .edit-input-unit { margin-left: 10px; color: #333; } .edit-public-income-modal .edit-radio-group { display: flex; align-items: center; flex: 1; } .edit-public-income-modal .edit-radio-label { margin: 0 20px 0 0; padding: 0; font-weight: normal; cursor: pointer; display: inline-flex; align-items: center; } .edit-public-income-modal .edit-radio-label:last-child { margin-right: 0; } .edit-public-income-modal .edit-radio-label input[type="radio"] { margin-right: 5px; cursor: pointer; } /* 确保编辑公共收益金弹窗居中显示 */ #editPublicIncomeModal { display: flex !important; align-items: center; justify-content: center; } #editPublicIncomeModal .modal-dialog { margin: 0; position: relative; width: auto; } public/pages/common/enterCommunity/enterCommunity.html
@@ -7,7 +7,7 @@ <span><vc:i18n name="我的小区" namespace="enterCommunity"></vc:i18n></span> </h5> <div class="ibox-tools" style="top:10px;"> <button type="button" class="btn btn-primary btn-sm" v-on:click="_showHcUse()"> <button type="button" class="btn btn-primary btn-sm" v-on:click="_showHcUse()" v-show="_hasPrivilegePIds('1500201904008')"> <i class="fa fa-plus"></i> <span><vc:i18n name="商用流程" namespace="enterCommunity"></vc:i18n></span> </button> @@ -17,34 +17,34 @@ <table class="footable table table-stripped toggle-arrow-tiny" data-page-size="15"> <thead> <tr> <th data-hide="phone" class="text-center"> <th data-hide="phone" class="text-center" v-show="_hasPrivilegePIds('1500201904009')"> <span><vc:i18n name="省份" namespace="enterCommunity"></vc:i18n></span> </th> <th data-hide="phone" class="text-center"> <th data-hide="phone" class="text-center" v-show="_hasPrivilegePIds('1500201904010')"> <span><vc:i18n name="市/州" namespace="enterCommunity"></vc:i18n></span> </th> <th data-hide="phone" width="150px" class="text-center"> <th data-hide="phone" width="150px" class="text-center" v-show="_hasPrivilegePIds('1500201904011')"> <span><vc:i18n name="区/县" namespace="enterCommunity"></vc:i18n></span> </th> <th data-hide="phone" width="200px" class="text-center"> <th data-hide="phone" width="200px" class="text-center" v-show="_hasPrivilegePIds('1500201904012')"> <span><vc:i18n name="小区名称" namespace="enterCommunity"></vc:i18n></span> </th> <!-- <th data-hide="phone"> <span><vc:i18n name="小区地址" namespace="enterCommunity"></vc:i18n></span> </th> --> <th class="text-center"> <th class="text-center" v-show="_hasPrivilegePIds('1500201904013')"> <span><vc:i18n name="小区编码" namespace="enterCommunity"></vc:i18n></span> </th> <th data-hide="phone" class="text-center"> <th data-hide="phone" class="text-center" v-show="_hasPrivilegePIds('1500201904014')"> <span><vc:i18n name="客服电话" namespace="enterCommunity"></vc:i18n></span> </th> <th data-hide="phone" class="text-center"> <th data-hide="phone" class="text-center" v-show="_hasPrivilegePIds('1500201904015')"> <span><vc:i18n name="面积" namespace="enterCommunity"></vc:i18n></span> </th> <th data-hide="phone" class="text-center"> <th data-hide="phone" class="text-center" v-show="_hasPrivilegePIds('1500201904016')"> <span><vc:i18n name="开始时间" namespace="enterCommunity"></vc:i18n></span> </th> <th data-hide="phone" class="text-center"> <th data-hide="phone" class="text-center" v-show="_hasPrivilegePIds('1500201904017')"> <span><vc:i18n name="结束时间" namespace="enterCommunity"></vc:i18n></span> </th> <!-- <th data-hide="phone,tablet" > @@ -60,34 +60,34 @@ </thead> <tbody> <tr v-for="community in communityInfo.enterCommunityInfo"> <td class="text-center"> <td class="text-center" v-show="_hasPrivilegePIds('1500201904009')"> {{community.provName}} </td> <td class="text-center"> <td class="text-center" v-show="_hasPrivilegePIds('1500201904010')"> {{community.cityName}} </td> <td class="text-center"> <td class="text-center" v-show="_hasPrivilegePIds('1500201904011')"> {{community.areaName}} </td> <td class="text-center"> <td class="text-center" v-show="_hasPrivilegePIds('1500201904012')"> {{community.name}} </td> <!-- <td> {{community.address}} </td> --> <td class="text-center"> <td class="text-center" v-show="_hasPrivilegePIds('1500201904013')"> {{community.communityId}} </td> <td class="text-center"> <td class="text-center" v-show="_hasPrivilegePIds('1500201904014')"> {{community.tel}} </td> <td class="text-center"> <td class="text-center" v-show="_hasPrivilegePIds('1500201904015')"> {{community.communityArea}} </td> <td class="text-center"> <td class="text-center" v-show="_hasPrivilegePIds('1500201904016')"> {{community.startTime}} </td> <td class="text-center"> <td class="text-center" v-show="_hasPrivilegePIds('1500201904017')"> {{community.endTime}} </td> <!-- <td> @@ -100,7 +100,7 @@ {{_showCommunityStatus(community.auditStatusCd)}} </td> <td class="text-center"> <div class="btn-group" v-if="community.auditStatusCd == '1100' "> <div class="btn-group" v-if="community.auditStatusCd == '1100' && _hasPrivilegePIds('1500201904018')"> <button class="btn-white btn btn-xs" v-on:click="_openUpdateCommunityModel(community)"> <span><vc:i18n name="修改" namespace="enterCommunity"></vc:i18n></span> public/pages/common/enterCommunity/enterCommunity.js
@@ -7,10 +7,12 @@ communityInfo: { enterCommunityInfo: [], showPage: 'myCommunity' } }, privilegePIds: [] // 存储权限ID数组 }, _initMethod: function () { vc.component.listMyCommunity(); vc.component._loadPrivilegePIds(); }, _initEvent: function () { vc.on('enterCommunity', 'listMyCommunity', function (_param) { @@ -61,6 +63,57 @@ }, _goBack: function () { $that.communityInfo.showPage = 'myCommunity'; }, _loadPrivilegePIds: function () { var userInfo = vc.getData('/nav/getUserInfo'); console.log(userInfo); var param = { params: { // pgId: userInfo ? userInfo.pgId : '', pgId: '6002025062697550342', communityId: '20250723478310237', pId: '500201904008', type: 'all' } }; vc.http.apiGet('/query.privilegeGroup.noAddPrivilege', param, function (json, res) { try { var data = typeof json === 'string' ? JSON.parse(json) : json; if (data && Array.isArray(data)) { vc.component.privilegePIds = data .filter(function(item) { return item.pgId != null && item.pgId !== ''; }) .map(function(item) { return item.pId; }); } else if (data && data.data && Array.isArray(data.data)) { vc.component.privilegePIds = data.data .filter(function(item) { return item.pgId != null && item.pgId !== ''; }) .map(function(item) { return item.pId; }); } } catch (e) { console.error('解析权限数据失败:', e); console.error('原始数据:', json); } }, function (errInfo, error) { console.log('获取权限数据失败'); } ); }, _hasPrivilegePIds: function (pId) { // 检查权限ID是否在privilegePIds数组中 if (!vc.component.privilegePIds || !Array.isArray(vc.component.privilegePIds)) { return false; } return vc.component.privilegePIds.indexOf(pId) !== -1; } } }); public/pages/frame/role/role-a/role-a.html
@@ -1,24 +1,36 @@ <h1 style="font-weight: 600;">页面权限配置</h1> <div class="role-a-container"> <h3>全部</h3> <div class="role-a-checkbox"> <label>全部</label> <input type="checkbox" name="all" id="all"> </div> <h3>按钮</h3> <div class="role-a-checkbox" style="gap: 10px; display: flex; align-items: center;"> <label>全部</label> <input type="checkbox" id="button-all"> <h3 style="margin: 0;">全部</h3> <input type="checkbox" name="all" id="all" checked> <label style="padding-top: 8px;">全部</label> </div> <div id="button-container"></div> <h3>表头</h3> <div class="role-a-checkbox" style="gap: 10px; display: flex; align-items: center;"> <div class="role-a-checkbox" style="border: 1px solid #e7eaec;"></div> <div class="role-a-checkbox" style="gap: 10px; display: flex; align-items: center; margin-top: 20px;" v-show="buttonPrivileges.length > 0"> <h3 style="margin: 0;">按钮权限</h3> <input type="checkbox" id="button-all" checked> <label>全部</label> <input type="checkbox" id="data-all"> </div> <div id="data-container"></div> <div class="role-a-buttons"> <div id="button-container" style="margin: 0 0 0 74px;"></div> <div class="role-a-checkbox" style="gap: 10px; display: flex; align-items: center; margin-top: 20px;" v-show="labelPrivileges.length > 0"> <h3 style="margin: 0;">标签权限</h3> <input type="checkbox" id="label-all" checked> <label>全部</label> </div> <div id="label-container" style="margin: 0 0 0 74px;"></div> <div class="role-a-checkbox" style="gap: 10px; display: flex; align-items: center; margin-top: 20px;" v-show="dataPrivileges.length > 0"> <h3 style="margin: 0;">表头权限</h3> <input type="checkbox" id="data-all" checked> <label>全部</label> </div> <div id="data-container" style="margin: 0 0 0 74px;"></div> <div class="role-a-buttons" style="width: 100%; display: flex; justify-content: flex-end; gap: 10px; margin-top: 100px;"> <button type="button" class="btn btn-primary" id="save">保存</button> <button type="button" class="btn btn-primary" id="cancel" v-on:click="goBack">返回</button> <button type="button" class="btn btn-primary" id="reset">重置</button> <button type="button" class="btn btn-primary" id="cancel" v-on:click="goBack" style="margin-right: 100px;">取消</button> </div> </div> </div> public/pages/frame/role/role-a/role-a.js
@@ -7,7 +7,11 @@ header: false }, pgId: '', // 保存角色编码 privilegeData: [] // 保存权限数据 privilegeData: [], // 保存权限数据 pName: '全部', // 保存权限名称,默认为"全部" buttonPrivileges: [], // 保存按钮权限 labelPrivileges: [], // 保存标签权限 dataPrivileges: [], // 保存数据权限 }, _initMethod: function () { // 获取URL参数 @@ -15,6 +19,7 @@ let pgId = ''; let communityId = ''; let type = ''; let pName = '全部'; // 默认值为"全部" // 优先从 hash 中获取参数(单页应用使用 hash 路由) const hash = location.hash; @@ -36,6 +41,8 @@ communityId = value; } else if (key === 'type') { type = value; } else if (key === 'pName') { pName = value; } } } @@ -53,14 +60,25 @@ if (!type) { type = vc.getParam('type') || ''; } if (pName === '全部') { pName = vc.getParam('pName') || '全部'; } // 如果缺少必要参数,使用默认值或从当前社区获取 if (!communityId) { communityId = vc.getCurrentCommunity().communityId; } // 保存 pgId 到 data 中 // 保存 pgId、pId 和 pName 到 data 中 vc.component.pgId = pgId; vc.component.pId = pId; vc.component.pName = pName; // 更新页面标题 const titleElement = document.querySelector('.role-a-container h3'); if (titleElement) { titleElement.textContent = pName; } // 调用接口 if (pgId && communityId) { @@ -81,6 +99,9 @@ // 判断 json 的类型,如果已经是对象则直接使用,否则进行解析 let data = typeof json === 'string' ? JSON.parse(json) : json; vc.component.privilegeData = data; vc.component.buttonPrivileges = data.filter(item => item.type === '按钮'); vc.component.labelPrivileges = data.filter(item => item.type === '标签'); vc.component.dataPrivileges = data.filter(item => item.type === '数据'); vc.component.renderPrivileges(data); vc.component.initCheckboxEvents(); } catch (e) { @@ -106,10 +127,12 @@ // 渲染权限复选框 renderPrivileges: function (data) { const buttonContainer = document.getElementById('button-container'); const labelContainer = document.getElementById('label-container'); const dataContainer = document.getElementById('data-container'); // 清空容器 if (buttonContainer) buttonContainer.innerHTML = ''; if (labelContainer) labelContainer.innerHTML = ''; if (dataContainer) dataContainer.innerHTML = ''; // 遍历数据,根据 type 创建对应的复选框 @@ -122,6 +145,7 @@ const label = document.createElement('label'); label.textContent = item.pName; label.style.paddingTop = '8px'; const checkbox = document.createElement('input'); checkbox.type = 'checkbox'; @@ -129,14 +153,19 @@ checkbox.value = item.pId; checkbox.setAttribute('data-pid', item.pId); checkbox.setAttribute('data-type', item.type); checkbox.checked = true; checkboxDiv.appendChild(label); checkboxDiv.appendChild(checkbox); checkboxDiv.appendChild(label); // 根据 type 添加到对应容器 if (item.type === '按钮') { if (buttonContainer) { buttonContainer.appendChild(checkboxDiv); } } else if (item.type === '标签') { if (labelContainer) { labelContainer.appendChild(checkboxDiv); } } else if (item.type === '数据') { if (dataContainer) { @@ -161,8 +190,10 @@ }); // 同时更新按钮和数据区域的"全部"复选框 const buttonAll = document.getElementById('button-all'); const labelAll = document.getElementById('label-all'); const dataAll = document.getElementById('data-all'); if (buttonAll) buttonAll.checked = isChecked; if (labelAll) labelAll.checked = isChecked; if (dataAll) dataAll.checked = isChecked; }); } @@ -181,7 +212,22 @@ self.updateAllCheckbox(); }); } // 标签区域全部复选框 const labelAllCheckbox = document.getElementById('label-all'); if (labelAllCheckbox) { labelAllCheckbox.addEventListener('change', function () { const isChecked = this.checked; // 选中标签区域所有复选框 const labelCheckboxes = document.querySelectorAll('#label-container input[type="checkbox"][name="privilege"]'); labelCheckboxes.forEach(function (cb) { cb.checked = isChecked; }); // 检查是否需要更新"全部"复选框 self.updateAllCheckbox(); }); } // 数据区域全部复选框 const dataAllCheckbox = document.getElementById('data-all'); if (dataAllCheckbox) { @@ -213,6 +259,27 @@ self.savePrivileges(); }); } // 重置按钮事件 const resetButton = document.getElementById('reset'); if (resetButton) { resetButton.addEventListener('click', function () { // 选中所有权限复选框 const allCheckboxes = document.querySelectorAll('input[type="checkbox"][name="privilege"]'); allCheckboxes.forEach(function (cb) { cb.checked = true; }); // 选中所有"全部"复选框 const allCheckbox = document.getElementById('all'); const buttonAll = document.getElementById('button-all'); const labelAll = document.getElementById('label-all'); const dataAll = document.getElementById('data-all'); if (allCheckbox) allCheckbox.checked = true; if (buttonAll) buttonAll.checked = true; if (labelAll) labelAll.checked = true; if (dataAll) dataAll.checked = true; }); } }, // 更新"全部"复选框状态 updateAllCheckbox: function () { @@ -237,6 +304,16 @@ buttonAll.checked = buttonAllChecked; } // 更新标签区域 const labelCheckboxes = document.querySelectorAll('#label-container input[type="checkbox"][name="privilege"]'); const labelAllChecked = labelCheckboxes.length > 0 && Array.from(labelCheckboxes).every(function (cb) { return cb.checked; }); const labelAll = document.getElementById('label-all'); if (labelAll) { labelAll.checked = labelAllChecked; } // 更新数据区域 const dataCheckboxes = document.querySelectorAll('#data-container input[type="checkbox"][name="privilege"]'); const dataAllChecked = dataCheckboxes.length > 0 && Array.from(dataCheckboxes).every(function (cb) { @@ -263,6 +340,7 @@ const requestData = { pgId: vc.component.pgId, parentId: vc.component.pId, pIds: pIds }; public/pages/property/costDetail/add/add.html
@@ -79,24 +79,32 @@ <div class="form-row"> <label class="form-label">基金与设施</label> <div class="radio-group"> <input type="radio" id="fundRepair" name="fundType" checked> <input type="radio" id="fundRepair" name="fundType" value="repair" v-model="fundType"> <label for="fundRepair" style="margin-top: 8px;">维修资金</label> </div> <label class="form-label" for="ownerScope">业主大会范围</label> <select id="ownerScope" class="form-select"> <option value="multi">多选</option> </select> <label class="form-label" for="buildingScope">门牌幢范围</label> <select id="buildingScope" class="form-select"> <option value="multi">多选</option> </select> <div class="radio-group" style="margin-left: 100px;" v-if="fundType === 'repair'"> <label class="form-label" for="ownerScope">业主大会范围</label> <select id="ownerScope" class="form-select"> <option value="multi">多选</option> </select> <label class="form-label" for="buildingScope">门牌幢范围</label> <select id="buildingScope" class="form-select"> <option value="multi">多选</option> </select> </div> </div> <div class="form-row"> <div class="radio-group" style="margin-left: 100px;"> <input type="radio" id="fundPublic" name="fundType"> <input type="radio" id="fundPublic" name="fundType" value="public" v-model="fundType"> <label for="fundPublic" style="margin-top: 8px;">公共收益</label> </div> <div class="radio-group" style="margin-left: 100px;" v-if="fundType === 'public'"> <input type="radio" id="fundSystemOut" name="fundSystemType" value="out" v-model="fundSystemType"> <label for="fundSystemOut" style="margin-top: 8px;">系统外</label> <input type="radio" id="fundSystemIn" name="fundSystemType" value="in" v-model="fundSystemType"> <label for="fundSystemIn" style="margin-top: 8px;">系统内</label> </div> </div> <!-- 按钮组 --> public/pages/property/costDetail/add/add.js
@@ -0,0 +1,10 @@ (function (vc) { vc.extends({ data: { fundType: 'repair', // 默认选中维修资金 fundSystemType: 'out' // 默认选中系统外 } }); })(window.vc); public/pages/property/costDetail/costDetail.html
@@ -21,10 +21,9 @@ <button type="button" class="query-btn" v-on:click="_queryCostDetails()" style="line-height: 0px;">查询</button> <button type="button" class="reset-btn" v-on:click="_resetQuery()" style="line-height: 0px;">重置</button> <div class="action-buttons"> <button type="button" class="add-btn" v-on:click="_addCostDetail()" style="line-height: 0px;"> 添加 </button> <button type="button" class="download-btn" v-on:click="_downloadTemplate()" style="line-height: 0px; ">模板下载</button> <button type="button" class="import-btn" v-on:click="_importCostDetail()" style="line-height: 0px;">费用导入</button> <button type="button" class="add-btn" v-on:click="_addCostDetail()" style="line-height: 0px;">添加</button> </div> </div> @@ -70,6 +69,7 @@ <td>{{item.buildingType || '-'}}</td> <td>{{item.maintenanceType || '-'}}</td> <td> <a href="javascript:void(0)" v-on:click="_viewCostDetail(item)">详情</a> <a href="javascript:void(0)" v-on:click="_viewMore(item)">更多</a> <a href="javascript:void(0)" v-on:click="_editCostDetail(item)">编辑</a> <a href="javascript:void(0)" v-on:click="_deleteCostDetail(item)">删除</a> public/pages/property/costDetail/costDetail.js
@@ -203,18 +203,26 @@ } $that._listCostDetails(page, $that.costDetailInfo.paginationInfo.rows); }, _addCostDetail: function () { // 跳转到添加页面或打开添加弹窗 vc.jumpToPage('/#/pages/property/costDetail/add'); _downloadTemplate: function () { // 下载模板 vc.toast('模板下载功能'); }, _importCostDetail: function () { // 打开导入弹窗或跳转到导入页面 // 打开本地文件 vc.toast('费用导入功能'); }, _viewMore: function (_item) { _addCostDetail: function () { // 跳转到添加页面 vc.jumpToPage('/#/pages/property/costDetail/add'); }, _viewCostDetail: function (_item) { // 查看详情 vc.jumpToPage('/#/pages/property/costDetail/detail?costDetailId=' + _item.costDetailId); }, _viewMore: function (_item) { // 查看更多 vc.jumpToPage('/#/pages/property/costDetail/more?costDetailId=' + _item.costDetailId); }, _editCostDetail: function (_item) { // 编辑 vc.jumpToPage('/#/pages/property/costDetail/edit?costDetailId=' + _item.costDetailId); public/pages/property/costDetail/detail/detail.html
@@ -0,0 +1,88 @@ <div class="form-container"> <h2 style="font-weight: 600;">添加</h2> <form> <!-- 流转编码 + 日期 --> <div class="form-row"> <label class="form-label" for="flowCode">流转编码</label> <p>{{costDetailInfo.flowCode || '-'}}</p> <label class="form-label" for="date">日期</label> <p>{{costDetailInfo.date || '-'}}</p> </div> <!-- 小区名称 + 小区编码(带备注) --> <div class="form-row"> <label class="form-label" for="communityName">小区名称</label> <p>{{costDetailInfo.communityName || '-'}}</p> <label class="form-label">小区编码</label> <p>{{costDetailInfo.communityCode || '-'}}</p> </div> <!-- 工程内容 --> <div class="form-row"> <label class="form-label" for="projectContent">工程内容</label> <p>{{costDetailInfo.projectContent || '-'}}</p> </div> <!-- 管理处金额 + 是否盖章 --> <div class="form-row"> <label class="form-label" for="mgmtAmount">管理处金额</label> <p>{{costDetailInfo.managementAmount || '-'}}</p> <span>元</span> <label class="form-label">是否盖章</label> <div class="radio-group"> <p>{{costDetailInfo.managementStamped == '1' ? '是' : '否'}}</p> </div> </div> <!-- 业委会金额 + 审价金额 + 是否盖章 + 签报部门 --> <div class="form-row"> <label class="form-label" for="committeeAmount">业委会金额</label> <p>{{costDetailInfo.committeeAmount || '-'}}</p> <span>元</span> <label class="form-label" for="auditAmount">审价金额</label> <p>{{costDetailInfo.appraisalAmount || '-'}}</p> <span>元</span> <label class="form-label">是否盖章</label> <div class="radio-group"> <p>{{costDetailInfo.committeeStamped == '1' ? '是' : '否'}}</p> </div> <label class="form-label" for="approveDept">签报部门</label> <p>{{costDetailInfo.approvalDepartment || '-'}}</p> </div> <!-- 分摊范围 + 维修类型 --> <div class="form-row"> <label class="form-label">分摊范围</label> <div class="radio-group"> <p>{{costDetailInfo.buildingType == '1' ? '幢' : '全体'}}</p> </div> <label class="form-label" for="repairType">维修类型</label> <p>{{costDetailInfo.maintenanceType || '-'}}</p> </div> <!-- 基金与设施 + 业主大会范围 + 门牌幢范围 --> <div class="form-row"> <label class="form-label">基金与设施</label> <div class="radio-group"> <p>{{costDetailInfo.fundTypeLevel1 == '1' ? '维修资金' : '公共收益'}}</p> <label for="fundRepair" style="margin-top: 8px;">维修资金</label> </div> <label class="form-label" for="ownerScope">业主大会范围</label> <p>{{costDetailInfo.ownerScope || '-'}}</p> <label class="form-label" for="buildingScope">门牌幢范围</label> <p>{{costDetailInfo.buildingScope || '-'}}</p> </div> <div class="form-row"> <div class="radio-group" style="margin-left: 100px;"> <p>{{costDetailInfo.fundTypeLevel2 == '1' ? '公共收益' : '维修资金'}}</p> </div> </div> <!-- 按钮组 --> <div class="btn-group"> <button type="button" class="btn-cancel">取消</button> <button type="button" class="btn-save">保存</button> </div> </form> </div> public/pages/property/costDetail/edit/edit.html
@@ -79,24 +79,32 @@ <div class="form-row"> <label class="form-label">基金与设施</label> <div class="radio-group"> <input type="radio" id="fundRepair" name="fundType" checked> <input type="radio" id="fundRepair" name="fundType" value="repair" v-model="fundType"> <label for="fundRepair" style="margin-top: 8px;">维修资金</label> </div> <label class="form-label" for="ownerScope">业主大会范围</label> <select id="ownerScope" class="form-select"> <option value="multi">多选</option> </select> <label class="form-label" for="buildingScope">门牌幢范围</label> <select id="buildingScope" class="form-select"> <option value="multi">多选</option> </select> <div class="radio-group" style="margin-left: 100px;" v-if="fundType === 'repair'"> <label class="form-label" for="ownerScope">业主大会范围</label> <select id="ownerScope" class="form-select"> <option value="multi">多选</option> </select> <label class="form-label" for="buildingScope">门牌幢范围</label> <select id="buildingScope" class="form-select"> <option value="multi">多选</option> </select> </div> </div> <div class="form-row"> <div class="radio-group" style="margin-left: 100px;"> <input type="radio" id="fundPublic" name="fundType"> <input type="radio" id="fundPublic" name="fundType" value="public" v-model="fundType"> <label for="fundPublic" style="margin-top: 8px;">公共收益</label> </div> <div class="radio-group" style="margin-left: 100px;" v-if="fundType === 'public'"> <input type="radio" id="fundSystemOut" name="fundSystemType" value="out" v-model="fundSystemType"> <label for="fundSystemOut" style="margin-top: 8px;">系统外</label> <input type="radio" id="fundSystemIn" name="fundSystemType" value="in" v-model="fundSystemType"> <label for="fundSystemIn" style="margin-top: 8px;">系统内</label> </div> </div> <!-- 按钮组 --> public/pages/property/costDetail/edit/edit.js
@@ -0,0 +1,10 @@ (function (vc) { vc.extends({ data: { fundType: 'repair', // 默认选中维修资金 fundSystemType: 'out' // 默认选中系统外 } }); })(window.vc); public/pages/property/costDetail/more/more.html
@@ -8,9 +8,9 @@ <input type="date" class="form-control endDate" placeholder="请选择结束日期" v-model="moreInfo.conditions.endDate" /> </div> <div class="action-buttons"> <button type="button" class="download-btn" v-on:click="_downloadTemplate()" style="line-height: 0px;">下载模板</button> <button type="button" class="edit-btn" v-on:click="_editPublicIncome()" style="line-height: 0px;">编辑</button> <button type="button" class="add-btn" v-on:click="_add()" style="line-height: 0px;">添加</button> <button type="button" class="import-btn" v-on:click="_export()" style="line-height: 0px;">导出</button> <button type="button" class="import-btn" v-on:click="_export()" style="line-height: 0px; background-color: white; color: #333; border: 1px solid #e8e8e8;">导出</button> </div> </div> @@ -84,8 +84,8 @@ <td>{{item.publishedStartDate || '-'}}</td> <td>{{item.publishedEndDate || '-'}}</td> <td> <a href="javascript:void(0)" v-on:click="_viewDetail(item)">详情</a> <a href="javascript:void(0)" v-on:click="_edit(item)">编辑</a> <a href="javascript:void(0)" v-on:click="_viewDetailPublicIncome(item)">详情</a> <a href="javascript:void(0)" v-on:click="_editPublicIncome(item)">编辑</a> <a href="javascript:void(0)" v-on:click="_delete(item)">删除</a> </td> </tr> @@ -450,3 +450,50 @@ </div> </div> <!-- 编辑公共收益金 Modal --> <div class="modal fade" id="editPublicIncomeModal" inert aria-hidden="true" tabindex="-1" style="position: relative; top: 50%; left: 50%; transform: translate(-50%, -30%);"> <div class="modal-dialog"> <div class="modal-content" style="border-radius: 10px;"> <div class="modal-header"> <h4 class="modal-title">编辑</h4> <button type="button" class="close" v-on:click="_hideEditPublicModal()" aria-label="Close"><span aria-hidden="true">×</span></button> </div> <div class="modal-body edit-public-income-modal"> <div class="form-group edit-form-group"> <label class="edit-form-label">额度</label> <div class="edit-input-wrapper"> <input type="text" class="form-control edit-input" v-model.trim="moreInfo.editForm.amount" placeholder="请输入名称"> <span class="edit-input-unit">元</span> </div> </div> <div class="form-group edit-form-group"> <label class="edit-form-label">业委会大会决议</label> <div class="edit-radio-group"> <label class="edit-radio-label"> <input type="radio" name="meetingResolution" value="1" v-model="moreInfo.editForm.meetingResolution"> 是 </label> <label class="edit-radio-label"> <input type="radio" name="meetingResolution" value="0" v-model="moreInfo.editForm.meetingResolution"> 否 </label> </div> </div> <div class="form-group edit-form-group"> <label class="edit-form-label">业委会征询表</label> <div class="edit-radio-group"> <label class="edit-radio-label"> <input type="radio" name="consultationForm" value="1" v-model="moreInfo.editForm.consultationForm"> 是 </label> <label class="edit-radio-label"> <input type="radio" name="consultationForm" value="0" v-model="moreInfo.editForm.consultationForm"> 否 </label> </div> </div> </div> <div style="display: flex; justify-content: center; padding-bottom: 20px; gap: 20px;"> <button type="button" class="btn btn-white" v-on:click="_hideEditPublicModal()">取消</button> <button type="button" class="btn btn-primary" v-on:click="_saveEditPublicIncome()">确认</button> </div> </div> </div> </div> public/pages/property/costDetail/more/more.js
@@ -17,10 +17,16 @@ pageList: [] }, jumpPage: 1, currentTab: 'convention', currentTab: 'publicIncome', conditions: { startDate: '', endDate: '' }, editForm: { id: '', amount: '', meetingResolution: '1', consultationForm: '1' } } }, @@ -57,7 +63,7 @@ todayBtn: true, clearBtn: true }); // 设置默认日期为当前月份 var now = new Date(); var year = now.getFullYear(); @@ -65,12 +71,12 @@ var startDateStr = year + '-' + (month < 10 ? '0' + month : month) + '-01'; var endDate = new Date(year, month, 0); // 获取当月最后一天 var endDateStr = year + '-' + (month < 10 ? '0' + month : month) + '-' + endDate.getDate(); $that.moreInfo.conditions.startDate = startDateStr; $that.moreInfo.conditions.endDate = endDateStr; $(".startDate").val(startDateStr); $(".endDate").val(endDateStr); $('.startDate').datetimepicker() .on('changeDate', function (ev) { var value = $(".startDate").val(); @@ -89,17 +95,17 @@ $that.moreInfo.conditions.endDate = value; } }); // 防止多次点击时间插件失去焦点 var startDateElements = document.getElementsByClassName('form-control startDate'); if (startDateElements.length > 0) { startDateElements[0].addEventListener('click', function(e) { startDateElements[0].addEventListener('click', function (e) { e.currentTarget.blur(); }); } var endDateElements = document.getElementsByClassName('form-control endDate'); if (endDateElements.length > 0) { endDateElements[0].addEventListener('click', function(e) { endDateElements[0].addEventListener('click', function (e) { e.currentTarget.blur(); }); } @@ -149,7 +155,7 @@ var currentPage = $that.moreInfo.paginationInfo.currentPage; var total = $that.moreInfo.paginationInfo.total; var pageList = []; if (total <= 7) { // 总页数小于等于7,显示所有页码 for (var i = 1; i <= total; i++) { @@ -230,7 +236,7 @@ }); } } $that.moreInfo.paginationInfo.pageList = pageList; }, _changePageSize: function () { @@ -260,13 +266,58 @@ // 导出功能 vc.toast('导出功能'); }, _viewDetail: function (_item) { _viewDetailPublicIncome: function (_item) { // 查看详情 vc.toast('查看详情功能'); }, _edit: function (_item) { // 编辑 vc.toast('编辑功能'); _showEditPublicModal: function () { const modal = document.getElementById('editPublicIncomeModal'); modal.classList.add('show'); modal.style.display = 'block'; modal.removeAttribute('inert'); modal.removeAttribute('aria-hidden'); modal.setAttribute('aria-modal', 'true'); modal.focus(); }, _hideEditPublicModal: function () { const modal = document.getElementById('editPublicIncomeModal'); modal.classList.remove('show'); modal.style.display = 'none'; modal.setAttribute('inert', ''); modal.setAttribute('aria-hidden', 'true'); modal.removeAttribute('aria-modal'); }, _editPublicIncome: function (_item) { // 编辑 - 填充表单数据 // $that.moreInfo.editForm.id = _item.id || ''; // $that.moreInfo.editForm.amount = _item.amount || ''; // $that.moreInfo.editForm.meetingResolution = _item.meetingResolution || '1'; // $that.moreInfo.editForm.consultationForm = _item.consultationForm || '1'; // 打开弹窗 $that._showEditPublicModal(); }, _saveEditPublicIncome: function () { // 保存编辑 var param = { params: { id: $that.moreInfo.editForm.id, amount: $that.moreInfo.editForm.amount, meetingResolution: $that.moreInfo.editForm.meetingResolution, consultationForm: $that.moreInfo.editForm.consultationForm, communityId: vc.getCurrentCommunity().communityId } }; vc.http.apiPost('/costDetail/updatePublicIncome', param, function (json, res) { vc.toast('保存成功'); $that._hideEditPublicModal(); $that._listData($that.moreInfo.paginationInfo.currentPage, $that.moreInfo.paginationInfo.rows); }, function (errInfo, error) { vc.message(errInfo); } ); }, _delete: function (_item) { vc.confirm('确定要删除这条记录吗?', function () {