revert: 补回d42742ab误随批删除的client三个下划线partial——_ClientDutyDirectorList/_ClientFileList/_ClientInvestorsList。d42742ab提交信息声明"待查库未删"但git rm混批时被一并带走,与声明不符。这3个走clientEditV2.cshtml:123/clientViewV2.cshtml:127的PartialAsync(item.viewPath)通道,viewPath源自DB AppConfig(PGroup=System,PName=ClientEditConfig),代码grep无法穷尽DB覆盖;默认嵌入配置(Resources.clientEditConfig)零引用已复核。恢复后维持"仅DB显式覆盖可达"的待查状态,查库确认后再处置

This commit is contained in:
hjhan
2026-08-22 10:29:57 +08:00
parent d7e6955132
commit 733ade024a
3 changed files with 199 additions and 0 deletions
@@ -0,0 +1,55 @@
@{
Layout = null;
}
<div v-if="client.id>0">
<div class="row m-0">
<div class="col">股东董事会成员信息</div>
<div class="col-auto" style="min-width:300px;">
@*<button class="btn btn-primary" type="button" v-on:click="addDuty" v-if="page.canEditList">新增人员</button>*@
<button class="btn btn-primary" type="button" v-on:click="refreshDutysDirector" title="重新加载客户人员信息列表"><i class="fa fa-refresh"></i></button>
</div>
</div>
<table class="table table-client mt-4" style="word-break: break-all; word-wrap: break-word; white-space: pre-wrap;">
<thead>
<tr>
<th style="width: 70px">姓名</th>
<th>证件类型</th>
<th style="width: 140px; padding-left: 0px; padding-right: 0px; ">证件号码</th>
<th>董事会身份</th>
<th>管理层身份</th>
<th>是否股东</th>
<th>股东持股类型</th>
<th>股东持股比例(%</th>
<th style="width:45px; padding-left:0px;padding-right:0px;">操作</th>
</tr>
</thead>
<tbody>
<tr v-for="item in dutyList3">
<td>{{item.ContactName}}</td>
<td>{{item.IdCardType}}</td>
<td style="padding-left:0px;padding-right:0px;">{{item.IdCardNo}}</td>
<td style="padding-left:0px;padding-right:0px;">{{item.IdentityOfTheBoardOfDirectors}}</td>
<td style="padding-left:0px;padding-right:0px;">{{item.ManagementIdentity}}</td>
<td style="padding-left:0px;padding-right:0px;">{{item.IsShareholder}}</td>
<td style="padding-left:0px;padding-right:0px;">{{item.ShareholdingByShareholdersType}}</td>
<td style="padding-left:0px;padding-right:0px;">{{item.ShareholdingByShareholdersRatio}}</td>
<td style="padding-left:0px;padding-right:0px;">
<template v-if="page.canEditList">
<button class="btn btn-primary btn-sm mr-2" style="min-width: 35px; display: inline-block; font-size: 12px; height: 22px; line-height: 16px; padding: 2px 2px 2px 2px;margin-right:0px!important;" type="button" v-on:click="editDutyDirector(item.EncryptId)">编辑</button>
</template>
</td>
</tr>
</tbody>
</table>
</div>
<div v-else>
<div class="alert alert-danger">请先保存用户基本信息</div>
</div>
@@ -0,0 +1,100 @@
@{
Layout = null;
}
<div v-if="client.id>0">
<div class="row m-0 mt-3">
<div class="col-auto">
<span class="mr-1">文件类型:</span>
<select id="search_fileTypes" v-model="fileSearch.fileTypes" multiple>
<option v-for="item in viewData['文件类型']" v-bind:value="item.value">{{item.text}}</option>
</select>
</div>
<div class="col-auto">
<span class="mr-1">文件名:</span>
<input class="" id="search_fileName" v-model="fileSearch.fileName" type="text" autocomplete="off">
</div>
<div class="col-auto">
<span class="mr-1">日期:</span>
<vue-datepicker id="search_fileDate" v-bind:noholiday="true" v-model="fileSearch.fileDate" />
</div>
<div class="col">
<button class="btn btn-primary" type="button" v-on:click="filterFiles">查询</button>
<button class="btn btn-primary" type="button" v-on:click="addFile" v-if="page.canEditList">上传</button>
<button class="btn btn-primary" type="button" v-on:click="refreshFiles" title="重新加载文件列表信息"><i class="fa fa-refresh"></i></button>
</div>
</div>
<table class="table table-client mt-4">
<thead>
<tr>
<th>
文件类型
<img v-if="orderByFieldStr!=='FileTypeName'||orderByStr===''" v-on:click="orderTableByField('FileTypeName','asc')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC" />
<img v-if="orderByFieldStr==='FileTypeName'&&orderByStr==='asc'" v-on:click="orderTableByField('FileTypeName','desc')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==" />
<img v-if="orderByFieldStr==='FileTypeName'&&orderByStr==='desc'" v-on:click="orderTableByField('FileTypeName','')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII=" />
</th>
<th>
文件名
<img v-if="orderByFieldStr!=='FileName'||orderByStr===''" v-on:click="orderTableByField('FileName','asc')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC" />
<img v-if="orderByFieldStr==='FileName'&&orderByStr==='asc'" v-on:click="orderTableByField('FileName','desc')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==" />
<img v-if="orderByFieldStr==='FileName'&&orderByStr==='desc'" v-on:click="orderTableByField('FileName','')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII=" />
</th>
<th>
签署时间
<img v-if="orderByFieldStr!=='SignDate'||orderByStr===''" v-on:click="orderTableByField('SignDate','asc')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC" />
<img v-if="orderByFieldStr==='SignDate'&&orderByStr==='asc'" v-on:click="orderTableByField('SignDate','desc')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==" />
<img v-if="orderByFieldStr==='SignDate'&&orderByStr==='desc'" v-on:click="orderTableByField('SignDate','')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII=" />
</th>
<th>
协议编号
<img v-if="orderByFieldStr!=='ProtocolNumber'||orderByStr===''" v-on:click="orderTableByField('ProtocolNumber','asc')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC" />
<img v-if="orderByFieldStr==='ProtocolNumber'&&orderByStr==='asc'" v-on:click="orderTableByField('ProtocolNumber','desc')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==" />
<img v-if="orderByFieldStr==='ProtocolNumber'&&orderByStr==='desc'" v-on:click="orderTableByField('ProtocolNumber','')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII=" />
</th>
<th>
文件说明
<img v-if="orderByFieldStr!=='FileDesc'||orderByStr===''" v-on:click="orderTableByField('FileDesc','asc')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC" />
<img v-if="orderByFieldStr==='FileDesc'&&orderByStr==='asc'" v-on:click="orderTableByField('FileDesc','desc')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==" />
<img v-if="orderByFieldStr==='FileDesc'&&orderByStr==='desc'" v-on:click="orderTableByField('FileDesc','')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII=" />
</th>
<th>
日期
<img v-if="orderByFieldStr!=='BookTime'||orderByStr===''" v-on:click="orderTableByField('BookTime','asc')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC" />
<img v-if="orderByFieldStr==='BookTime'&&orderByStr==='asc'" v-on:click="orderTableByField('BookTime','desc')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==" />
<img v-if="orderByFieldStr==='BookTime'&&orderByStr==='desc'" v-on:click="orderTableByField('BookTime','')" style="width: 20px; height: 20px;cursor:pointer;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII=" />
</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr v-for="item in groupingFiles" v-bind:class="item.bgClass">
<td v-bind:class="{dropline:item.HasSentDrop}" style="width: 115px; padding-left: 0px; padding-left: 35px;text-align:left; " :title="item.FileTypeName">{{item.FileTypeName.length>5?item.FileTypeName.substring(0,5)+'...':item.FileTypeName}}</td>
<td v-bind:key="viewState.fileUpdateKey" style="width: 300px; padding-left: 0px; padding-right: 0px; ">
<span>{{item.FileName}}</span>
<template v-if="page.isSecuritiesEnvironment">
<i class="fa fa-link yl-tooltip" v-bind:title="'签署版本: ' + item.SignType + '\n' + item.ReportorRole + '填报'" v-if="item.FileTypeName==='主协议附件(PDF)'"></i>
<i class="fa fa-link yl-tooltip" v-bind:title="'关联协议: ' + item.MainProtocolNumber" v-if="item.MainProtocolNumber!==''"></i>
</template>
</td>
<td style="width: 90px; padding-left: 0px; padding-right: 0px; ">{{item.SignDate}}</td>
<td style="width: 90px; padding-left: 0px; padding-right: 0px; ">{{item.ProtocolNumber}}</td>
<td style="width: 90px; padding-left: 0px; padding-right: 0px; word-break:break-all;"><span>{{item.FileDesc}}</span></td>
<td style="width: 150px; padding-left: 0px; padding-right: 0px; ">{{item.BookTime}}</td>
<td style="width:115px; padding-left:0px;padding-right:0px; ">
<button class="btn btn-primary" style="min-width:35px;display:inline-block; font-size:12px; height:22px;line-height:16px; padding:2px 2px 2px 2px;" type="button" v-on:click="showFile(item)">预览</button>
<button class="btn btn-primary" style="min-width: 35px; display: inline-block; font-size: 12px; height: 22px; line-height: 16px; padding: 2px 2px 2px 2px;" type="button" v-on:click="downloadFile(item)">下载</button>
<template v-if="page.canEditList">
<button class="btn btn-primary" style="min-width: 35px; display: inline-block; font-size: 12px; height: 22px; line-height: 16px; padding: 2px 2px 2px 2px;" type="button" v-on:click="abandonFile(item)" v-if="item.CanDrop">废止</button>
<button class="btn btn-primary" style="min-width: 35px; display: inline-block; font-size: 12px; height: 22px; line-height: 16px; padding: 2px 2px 2px 2px;" type="button" v-on:click="removeFile(item)" v-if="item.CanDelete">删除</button>
<button class="btn btn-primary" style="min-width: 35px; display: inline-block; font-size: 12px; height: 22px; line-height: 16px; padding: 2px 2px 2px 2px;" type="button" v-on:click="recoverFile(item)" v-if="item.CanBack">{{item.OptState===OptFlagsEnum.D?"解除废弃":"还原"}}</button>
</template>
</td>
</tr>
</tbody>
</table>
</div>
<div v-else>
<div class="alert alert-danger">请先保存用户基本信息</div>
</div>
@@ -0,0 +1,44 @@
@{
Layout = null;
}
<div v-if="client.id>0">
<div class="row m-0">
<div class="col">产品投资人列表</div>
<div class="col-auto" style="min-width:300px;">
<button class="btn btn-primary" type="button" v-on:click="addInvestor" v-if="page.canEditList">新增投资人</button>
<button class="btn btn-primary" type="button" v-on:click="refreshInvestors" title="刷新"><i class="fa fa-refresh"></i></button>
</div>
</div>
<table class="table table-client mt-4">
<thead>
<tr>
<th>产品投资人</th>
<th>适当性类型</th>
<th>产品权益比例</th>
<th>操作者</th>
<th>备注</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr v-for="item in investorList">
<td>{{item.Investor}}</td>
<td>{{item.EligibilityType}}</td>
<td>{{item.ShareRate * 100}}%</td>
<td>{{item.OptName}}</td>
<td>{{item.Comments}}</td>
<td>
<template v-if="page.canEditList">
<button class="btn btn-primary btn-sm mr-2" type="button" v-on:click="editInvestor(item.EncryptId)">编辑</button>
<button class="btn btn-primary btn-sm" type="button" v-on:click="removeInvestor(item.EncryptId)">删除</button>
</template>
</td>
</tr>
</tbody>
</table>
</div>
<div v-else>
<div class="alert alert-danger">请先保存用户基本信息</div>
</div>