|
@@ -1999,9 +1999,9 @@
|
|
|
<dt><a href="javascript: void(0);" class="acc-btn" data-groupid="<%- idx %>" data-type="hide"><i class="fa fa-plus-square"></i></a> <%- group.groupName %></dt>
|
|
<dt><a href="javascript: void(0);" class="acc-btn" data-groupid="<%- idx %>" data-type="hide"><i class="fa fa-plus-square"></i></a> <%- group.groupName %></dt>
|
|
|
<div class="dd-content" data-toggleid="<%- idx %>">
|
|
<div class="dd-content" data-toggleid="<%- idx %>">
|
|
|
<% group.groupList.forEach(item => { %>
|
|
<% group.groupList.forEach(item => { %>
|
|
|
- <% if (item.id !== ctx.tender.data.user_id) {
|
|
|
|
|
|
|
+ <% if (item.id !== ctx.tender.data.user_id) {
|
|
|
const isScheduled = tourists.some(sa => sa.user_id === item.id);
|
|
const isScheduled = tourists.some(sa => sa.user_id === item.id);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
%>
|
|
%>
|
|
|
<%
|
|
<%
|
|
|
let markStyle = ' style="display:none;"';
|
|
let markStyle = ' style="display:none;"';
|
|
@@ -2260,7 +2260,7 @@
|
|
|
const newVal = $(this).val();
|
|
const newVal = $(this).val();
|
|
|
let html = '';
|
|
let html = '';
|
|
|
|
|
|
|
|
- const currentSelectedIds = new Set();
|
|
|
|
|
|
|
+ const currentSelectedIds = new Set();
|
|
|
$('#tourist-users tr').each(function() {
|
|
$('#tourist-users tr').each(function() {
|
|
|
const rowUserId = parseInt($(this).data('id'), 10);
|
|
const rowUserId = parseInt($(this).data('id'), 10);
|
|
|
if (!isNaN(rowUserId)) {
|
|
if (!isNaN(rowUserId)) {
|
|
@@ -2271,14 +2271,14 @@
|
|
|
|
|
|
|
|
if (newVal && newVal === oldSearchVal2) {
|
|
if (newVal && newVal === oldSearchVal2) {
|
|
|
accountList.filter(item => item && item.id !== cur_tender_uid && (item.name.indexOf(newVal) !== -1 || (item.mobile && item.mobile.indexOf(newVal) !== -1))).forEach(item => {
|
|
accountList.filter(item => item && item.id !== cur_tender_uid && (item.name.indexOf(newVal) !== -1 || (item.mobile && item.mobile.indexOf(newVal) !== -1))).forEach(item => {
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
const isSelected = currentSelectedIds.has(item.id);
|
|
const isSelected = currentSelectedIds.has(item.id);
|
|
|
const markDisplayStyle = isSelected ? '' : ' style="display:none;"';
|
|
const markDisplayStyle = isSelected ? '' : ' style="display:none;"';
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
html += `<dd class="border-bottom p-2 mb-0 " data-id="${item.id}" >
|
|
html += `<dd class="border-bottom p-2 mb-0 " data-id="${item.id}" >
|
|
|
<p class="mb-0 d-flex"><span class="text-primary">${item.name}</span><span
|
|
<p class="mb-0 d-flex"><span class="text-primary">${item.name}</span><span
|
|
|
class="ml-auto">${item.mobile || ''}</span>
|
|
class="ml-auto">${item.mobile || ''}</span>
|
|
|
- <span class="selected-mark text-success ml-2"${markDisplayStyle}><i class="fa fa-check"></i></span>
|
|
|
|
|
|
|
+ <span class="selected-mark text-success ml-2"${markDisplayStyle}><i class="fa fa-check"></i></span>
|
|
|
</p>
|
|
</p>
|
|
|
<span class="text-muted">${item.role || ''}</span>
|
|
<span class="text-muted">${item.role || ''}</span>
|
|
|
</dd>`
|
|
</dd>`
|
|
@@ -2374,7 +2374,7 @@
|
|
|
const userIdToAddMark = id;
|
|
const userIdToAddMark = id;
|
|
|
const $targetMarkSpan = $('#tourist_dropdownMenu dl dd[data-id="' + userIdToAddMark + '"] .selected-mark');
|
|
const $targetMarkSpan = $('#tourist_dropdownMenu dl dd[data-id="' + userIdToAddMark + '"] .selected-mark');
|
|
|
if ($targetMarkSpan.length > 0) {
|
|
if ($targetMarkSpan.length > 0) {
|
|
|
- $targetMarkSpan.css('display', '');
|
|
|
|
|
|
|
+ $targetMarkSpan.css('display', '');
|
|
|
} else {
|
|
} else {
|
|
|
console.warn('Warning: Could not find the selected-mark span for user ID:', userIdToAddMark);
|
|
console.warn('Warning: Could not find the selected-mark span for user ID:', userIdToAddMark);
|
|
|
}
|
|
}
|
|
@@ -3094,275 +3094,6 @@
|
|
|
})
|
|
})
|
|
|
</script>
|
|
</script>
|
|
|
<% } %>
|
|
<% } %>
|
|
|
-<% if (ctx.subProject.page_show.xxjd && ctx.session.sessionUser.is_admin) { %>
|
|
|
|
|
- <!--标段设置-投资进度-->
|
|
|
|
|
- <div class="modal fade" id="xxjd-set" data-backdrop="static">
|
|
|
|
|
- <div class="modal-dialog" role="document">
|
|
|
|
|
- <div class="modal-content">
|
|
|
|
|
- <div class="modal-header">
|
|
|
|
|
- <h5 class="modal-title">投资进度</h5>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="modal-body">
|
|
|
|
|
- <div class="alert alert-warning">设置可使用「投资进度」用户</div>
|
|
|
|
|
- <div class="dropdown">
|
|
|
|
|
- <button class="btn btn-outline-primary btn-sm dropdown-toggle" type="button" id="xxjd_dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
|
|
|
- 添加用户
|
|
|
|
|
- </button>
|
|
|
|
|
- <div class="dropdown-menu" id="xxjd_dropdownMenu" aria-labelledby="xxjd_dropdownMenuButton" style="width:220px">
|
|
|
|
|
- <div class="mb-2 p-2"><input class="form-control form-control-sm gr-search"
|
|
|
|
|
- placeholder="姓名/手机 检索" autocomplete="off"></div>
|
|
|
|
|
- <dl class="list-unstyled book-list">
|
|
|
|
|
- <% accountGroup.forEach((group, idx) => { %>
|
|
|
|
|
- <dt><a href="javascript: void(0);" class="acc-btn" data-groupid="<%- idx %>" data-type="hide"><i class="fa fa-plus-square"></i></a> <%- group.groupName %></dt>
|
|
|
|
|
- <div class="dd-content" data-toggleid="<%- idx %>">
|
|
|
|
|
- <% group.groupList.forEach(item => { %>
|
|
|
|
|
- <% if (item.id !== ctx.tender.data.user_id) {
|
|
|
|
|
- const isScheduled = scheduleAuditList.some(sa => sa.audit_id === item.id);
|
|
|
|
|
- %>
|
|
|
|
|
- <%
|
|
|
|
|
- let markStyle = ' style="display:none;"';
|
|
|
|
|
- if (isScheduled) {
|
|
|
|
|
- markStyle = '';
|
|
|
|
|
- }
|
|
|
|
|
- %>
|
|
|
|
|
- <dd class="border-bottom p-2 mb-0 user-item" data-id="<%- item.id %>" >
|
|
|
|
|
- <p class="mb-0 d-flex"><span class="text-primary"><%- item.name %></span><span
|
|
|
|
|
- class="ml-auto"><%- item.mobile %></span>
|
|
|
|
|
-
|
|
|
|
|
- <span class="selected-mark text-success ml-2"<%- markStyle %>><i class="fa fa-check"></i></span>
|
|
|
|
|
- </p>
|
|
|
|
|
- <span class="text-muted"><%- item.role %></span>
|
|
|
|
|
- </dd>
|
|
|
|
|
- <% } %>
|
|
|
|
|
- <% });%>
|
|
|
|
|
- </div>
|
|
|
|
|
- <% }) %>
|
|
|
|
|
- </dl>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="mt-1" style="max-height: 300px;overflow: auto">
|
|
|
|
|
- <table class="table table-bordered">
|
|
|
|
|
- <tr><th>用户</th><th>查看</th><th>修改</th><th>移除</th></tr>
|
|
|
|
|
- <tbody id="schedule-users">
|
|
|
|
|
- <% for (const sa of scheduleAuditList) { %>
|
|
|
|
|
- <% const audit = ctx.helper._.find(accountList, { id : sa.audit_id }); %>
|
|
|
|
|
- <% if (audit) { %>
|
|
|
|
|
- <tr data-id="<%- audit.id %>"><td><p class="mb-0 d-flex"><b class="col-5 pl-0"><%- audit.name %></b> <span class="text-muted"><%- audit.mobile %></span><p class="text-muted mb-0"><%- audit.role %></p></td><td>
|
|
|
|
|
- <div class="custom-control custom-checkbox mb-2">
|
|
|
|
|
- <input type="checkbox" data-zhi="<%- scPermission.show %>" data-id="<%- sa.id %>" id="<%- sa.id %>_customRadio41" name="customCheckbox" class="custom-control-input" <% if (sa.permission !== scPermission.no) { %>checked<% } %>>
|
|
|
|
|
- <label class="custom-control-label" for="<%- sa.id %>_customRadio41"></label>
|
|
|
|
|
- </div>
|
|
|
|
|
- </td><td>
|
|
|
|
|
- <div class="custom-control custom-checkbox mb-2">
|
|
|
|
|
- <input type="checkbox" data-zhi="<%- scPermission.edit %>" data-id="<%- sa.id %>" id="<%- sa.id %>_customRadio42" name="customCheckbox" class="custom-control-input" <% if (sa.permission === scPermission.edit) { %>checked<% } %>>
|
|
|
|
|
- <label class="custom-control-label" for="<%- sa.id %>_customRadio42"></label>
|
|
|
|
|
- </div>
|
|
|
|
|
- </td>
|
|
|
|
|
- <td><a href="javascript:void(0);" class="text-danger remove-schedule-user" data-remove="<%- audit.id %>" data-id="<%- sa.id %>">移除</a></td>
|
|
|
|
|
- </tr>
|
|
|
|
|
- <% } %>
|
|
|
|
|
- <% } %>
|
|
|
|
|
- </tbody>
|
|
|
|
|
- </table>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="modal-footer">
|
|
|
|
|
- <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <script>
|
|
|
|
|
- $(function () {
|
|
|
|
|
- const scPermission = JSON.parse(unescape('<%- escape(JSON.stringify(scPermission)) %>'));
|
|
|
|
|
- // 投资进度
|
|
|
|
|
- let timer = null;
|
|
|
|
|
- let oldSearchVal = null;
|
|
|
|
|
- $('body').on('input propertychange', '#xxjd_dropdownMenu .gr-search', function(e) {
|
|
|
|
|
- oldSearchVal = e.target.value;
|
|
|
|
|
- timer && clearTimeout(timer);
|
|
|
|
|
- timer = setTimeout(() => {
|
|
|
|
|
- const newVal = $(this).val();
|
|
|
|
|
- let html = '';
|
|
|
|
|
- const currentSelectedIds = new Set();
|
|
|
|
|
- $('#schedule-users tr').each(function() {
|
|
|
|
|
- const rowUserId = parseInt($(this).data('id'), 10);
|
|
|
|
|
- if (!isNaN(rowUserId)) {
|
|
|
|
|
- currentSelectedIds.add(rowUserId);
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- if (newVal && newVal === oldSearchVal) {
|
|
|
|
|
- accountList.filter(item => item && item.id !== cur_tender_uid && (item.name.indexOf(newVal) !== -1 || (item.mobile && item.mobile.indexOf(newVal) !== -1))).forEach(item => {
|
|
|
|
|
-
|
|
|
|
|
- const isSelected = currentSelectedIds.has(item.id);
|
|
|
|
|
- const markDisplayStyle = isSelected ? '' : ' style="display:none;"';
|
|
|
|
|
-
|
|
|
|
|
- html += `<dd class="border-bottom p-2 mb-0 " data-id="${item.id}" >
|
|
|
|
|
- <p class="mb-0 d-flex"><span class="text-primary">${item.name}</span><span
|
|
|
|
|
- class="ml-auto">${item.mobile || ''}</span>
|
|
|
|
|
- <span class="selected-mark text-success ml-2"${markDisplayStyle}><i class="fa fa-check"></i></span>
|
|
|
|
|
- </p>
|
|
|
|
|
- <span class="text-muted">${item.role || ''}</span>
|
|
|
|
|
- </dd>`
|
|
|
|
|
- });
|
|
|
|
|
- $('#xxjd_dropdownMenu .book-list').empty();
|
|
|
|
|
- $('#xxjd_dropdownMenu .book-list').append(html);
|
|
|
|
|
- } else {
|
|
|
|
|
- if (!$('#xxjd_dropdownMenu .acc-btn').length) {
|
|
|
|
|
- accountGroup.forEach((group, idx) => {
|
|
|
|
|
- if (!group) return;
|
|
|
|
|
- html += `<dt><a href="javascript: void(0);" class="acc-btn" data-groupid="${idx}" data-type="hide"><i class="fa fa-plus-square"></i>
|
|
|
|
|
- </a> ${group.groupName}</dt>
|
|
|
|
|
- <div class="dd-content" data-toggleid="${idx}">`;
|
|
|
|
|
- group.groupList.forEach(item => {
|
|
|
|
|
- if (item.id !== cur_tender_uid) {
|
|
|
|
|
-
|
|
|
|
|
- const isSelected = currentSelectedIds.has(item.id);
|
|
|
|
|
- const markDisplayStyle = isSelected ? '' : ' style="display:none;"';
|
|
|
|
|
-
|
|
|
|
|
- html += `<dd class="border-bottom p-2 mb-0 " data-id="${item.id}" >
|
|
|
|
|
- <p class="mb-0 d-flex"><span class="text-primary">${item.name}</span><span
|
|
|
|
|
- class="ml-auto">${item.mobile || ''}</span>
|
|
|
|
|
- <span class="selected-mark text-success ml-2"${markDisplayStyle}><i class="fa fa-check"></i></span>
|
|
|
|
|
- </p>
|
|
|
|
|
- <span class="text-muted">${item.role || ''}</span>
|
|
|
|
|
- </dd>`;
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- html += '</div>';
|
|
|
|
|
- });
|
|
|
|
|
- $('#xxjd_dropdownMenu .book-list').empty();
|
|
|
|
|
- $('#xxjd_dropdownMenu .book-list').append(html);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }, 400);
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- // 添加审批流程按钮逻辑
|
|
|
|
|
- $('body').on('click', '#xxjd_dropdownMenu .book-list dt', function () {
|
|
|
|
|
- const idx = $(this).find('.acc-btn').attr('data-groupid');
|
|
|
|
|
- const type = $(this).find('.acc-btn').attr('data-type');
|
|
|
|
|
- if (type === 'hide') {
|
|
|
|
|
- $(this).parent().find(`div[data-toggleid="${idx}"]`).show(() => {
|
|
|
|
|
- $(this).children().find('i').removeClass('fa-plus-square').addClass('fa-minus-square-o');
|
|
|
|
|
- $(this).find('.acc-btn').attr('data-type', 'show');
|
|
|
|
|
-
|
|
|
|
|
- })
|
|
|
|
|
- } else {
|
|
|
|
|
- $(this).parent().find(`div[data-toggleid="${idx}"]`).hide(() => {
|
|
|
|
|
- $(this).children().find('i').removeClass('fa-minus-square-o').addClass('fa-plus-square');
|
|
|
|
|
- $(this).find('.acc-btn').attr('data-type', 'hide');
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
- return false;
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- // 选中用户
|
|
|
|
|
- $('body').on('click', '#xxjd_dropdownMenu dl dd', function (e) {
|
|
|
|
|
- const id = parseInt($(this).data('id'));
|
|
|
|
|
- if (id) {
|
|
|
|
|
- const user = _.find(accountList, function (item) {
|
|
|
|
|
- return item.id === id;
|
|
|
|
|
- });
|
|
|
|
|
- const saIdList = [];
|
|
|
|
|
- for (let i = 0; i < $('#schedule-users tr').length; i++) {
|
|
|
|
|
- saIdList.push(parseInt($('#schedule-users tr').eq(i).data('id')));
|
|
|
|
|
- }
|
|
|
|
|
- if (_.includes(saIdList, id)) {
|
|
|
|
|
- toastr.error('该用户已存在列表中,无需重复添加');
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- const prop = {
|
|
|
|
|
- audit_id: id,
|
|
|
|
|
- type: 'add',
|
|
|
|
|
- };
|
|
|
|
|
- postData('/tender/' + cur_tenderid + '/schedule/audit/save', prop, function (data) {
|
|
|
|
|
- const html = '<tr data-id="'+ user.id + '"><td><p class="mb-0 d-flex"><b class="col-5 pl-0">'+ user.name + '</b> <span class="text-muted">'+ user.mobile + '</span><p class="text-muted mb-0">'+ user.role + '</p></td><td>\n' +
|
|
|
|
|
- ' <div class="custom-control custom-checkbox mb-2">\n' +
|
|
|
|
|
- ' <input type="checkbox" data-zhi="'+ scPermission.show +'" data-id="'+ data.id + '" id="'+ data.id + '_customRadio41" name="customCheckbox" class="custom-control-input" checked>\n' +
|
|
|
|
|
- ' <label class="custom-control-label" for="'+ data.id + '_customRadio41"></label>\n' +
|
|
|
|
|
- ' </div>\n' +
|
|
|
|
|
- ' </td><td>\n' +
|
|
|
|
|
- ' <div class="custom-control custom-checkbox mb-2">\n' +
|
|
|
|
|
- ' <input type="checkbox" data-zhi="'+ scPermission.edit +'" data-id="'+ data.id + '" id="'+ data.id + '_customRadio42" name="customCheckbox" class="custom-control-input">\n' +
|
|
|
|
|
- ' <label class="custom-control-label" for="'+ data.id + '_customRadio42"></label>\n' +
|
|
|
|
|
- ' </div>\n' +
|
|
|
|
|
- ' </td>\n' +
|
|
|
|
|
- ' <td><a href="javascript:void(0);" class="text-danger remove-schedule-user" data-remove="'+ user.id + '" data-id="'+ data.id + '">移除</a></td>\n' +
|
|
|
|
|
- ' </tr>';
|
|
|
|
|
- $('#schedule-users').append(html);
|
|
|
|
|
- const userIdToAddMark = id;
|
|
|
|
|
- const $targetMarkSpan = $('#xxjd_dropdownMenu dl dd[data-id="' + userIdToAddMark + '"] .selected-mark');
|
|
|
|
|
- if ($targetMarkSpan.length > 0) {
|
|
|
|
|
- $targetMarkSpan.css('display', '');
|
|
|
|
|
- } else {
|
|
|
|
|
- console.warn('Warning: Could not find the selected-mark span for user ID:', userIdToAddMark);
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
- e.stopPropagation();
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- // 移除用户
|
|
|
|
|
- $('body').on('click', '#schedule-users .remove-schedule-user', function () {
|
|
|
|
|
- const id = parseInt($(this).data('id'));
|
|
|
|
|
- const removeId = parseInt($(this).data('remove'));
|
|
|
|
|
- if (id) {
|
|
|
|
|
- const prop = {
|
|
|
|
|
- id,
|
|
|
|
|
- type: 'del',
|
|
|
|
|
- };
|
|
|
|
|
- const _self = $(this);
|
|
|
|
|
- postData('/tender/' + cur_tenderid + '/schedule/audit/save', prop, function (data) {
|
|
|
|
|
- _self.parents('tr').remove();
|
|
|
|
|
-
|
|
|
|
|
- const userIdToRemoveMark = removeId;
|
|
|
|
|
- console.log('Removing mark for user ID:', userIdToRemoveMark);
|
|
|
|
|
- const $targetMarkSpanToRemove = $('#xxjd_dropdownMenu dl dd[data-id="' + userIdToRemoveMark + '"] .selected-mark');
|
|
|
|
|
- if ($targetMarkSpanToRemove.length > 0) {
|
|
|
|
|
- $targetMarkSpanToRemove.css('display', 'none');
|
|
|
|
|
- } else {
|
|
|
|
|
- console.warn('Warning: Could not find the selected-mark span for user ID:', userIdToRemoveMark, 'to hide.');
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- // 权限更改
|
|
|
|
|
- $('body').on('click', '#schedule-users input[type="checkbox"]', function () {
|
|
|
|
|
- let permission = scPermission.no;
|
|
|
|
|
- const value = parseInt($(this).data('zhi'));
|
|
|
|
|
- if ($(this).is(':checked')) {
|
|
|
|
|
- if (value === scPermission.edit) {
|
|
|
|
|
- permission = scPermission.edit;
|
|
|
|
|
- $(this).parents('td').siblings().find('input').prop('checked', true);
|
|
|
|
|
- } else if (value === scPermission.show) {
|
|
|
|
|
- permission = scPermission.show;
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- if (value === scPermission.edit) {
|
|
|
|
|
- permission = scPermission.show;
|
|
|
|
|
- } else if (value === scPermission.show) {
|
|
|
|
|
- permission = scPermission.no;
|
|
|
|
|
- $(this).parents('td').siblings().find('input').prop('checked', false);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- const id = parseInt($(this).data('id'));
|
|
|
|
|
- const prop = {
|
|
|
|
|
- id,
|
|
|
|
|
- permission,
|
|
|
|
|
- type: 'edit',
|
|
|
|
|
- };
|
|
|
|
|
- const _self = $(this);
|
|
|
|
|
- postData('/tender/' + cur_tenderid + '/schedule/audit/save', prop, function (data) {
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- })
|
|
|
|
|
- </script>
|
|
|
|
|
-<% } %>
|
|
|
|
|
|
|
|
|
|
<!--在建状态-->
|
|
<!--在建状态-->
|
|
|
<% if (ctx.tender.data.build_status === buildStatus.status.build) { %>
|
|
<% if (ctx.tender.data.build_status === buildStatus.status.build) { %>
|