638 lines
32 KiB
HTML
638 lines
32 KiB
HTML
{% load tags %}
|
||
<form id="addEditForm" method="post" enctype="multipart/form-data">
|
||
{% csrf_token %}
|
||
{% if form.instance.pk %}
|
||
<input type="hidden" name="id" value="{{ form.instance.pk }}">
|
||
{% endif %}
|
||
<div class="card-body">
|
||
<div class="row">
|
||
<div class="col-md-6">
|
||
{% for field in form %}
|
||
{% if forloop.counter0|divisibleby:2 %}
|
||
<div class="mb-3">
|
||
<label class="form-label" for="{{ field.id_for_label }}">{{ field.label }}</label>
|
||
{% if field.field.widget.input_type == "text" %}
|
||
<input type="text" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|default_if_none:'' }}"
|
||
placeholder="{{ field.field.widget.attrs.placeholder|default:field.label }}">
|
||
{% elif field.field.widget.input_type == "number" %}
|
||
<input type="number" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|default_if_none:'' }}"
|
||
placeholder="{{ field.label }}">
|
||
{% elif field.field.widget.input_type == "select" %}
|
||
<select class="form-control" id="{{ field.id_for_label }}" name="{{ field.name }}">
|
||
{% for choice in field.field.choices %}
|
||
<option value="{{ choice.0 }}"
|
||
{% if choice.0 == field.value %}selected{% endif %}>{{ choice.1 }}</option>
|
||
{% endfor %}
|
||
</select>
|
||
{% elif field|is_input_type:"textarea" %}
|
||
<textarea class="form-control" id="{{ field.id_for_label }}" name="{{ field.name }}"
|
||
rows="3"
|
||
placeholder="{{ field.field.widget.attrs.placeholder|default:'请输入内容' }}">{{ field.value|default_if_none:'' }}</textarea>
|
||
{% elif field.field.widget.input_type == "date" %}
|
||
<input type="date" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|date:"Y-m-d" }}">
|
||
{% elif field.field.widget.input_type == "datetime-local" %}
|
||
<input type="datetime-local" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|date:"Y-m-d\TH:i" }}">
|
||
{% elif field.field.widget.input_type == "email" %}
|
||
<input type="email" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|default_if_none:'' }}"
|
||
placeholder="{{ field.label }}">
|
||
{% elif field.field.widget.input_type == "month" %}
|
||
<input type="month" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|date:"Y-m" }}">
|
||
{% elif field.field.widget.input_type == "password" %}
|
||
<input type="password" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" placeholder="{{ field.label }}">
|
||
{% elif field.field.widget.input_type == "year" %}
|
||
<input type="text" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|default_if_none:'选择年份' }}">
|
||
{% elif field.field.widget.input_type == "checkbox" %}
|
||
<div class="form-check">
|
||
<input type="checkbox" class="form-check-input" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" {% if field.value %}checked{% endif %}>
|
||
<label class="form-check-label"
|
||
for="{{ field.id_for_label }}">{{ field.label }}</label>
|
||
</div>
|
||
{% else %}
|
||
{{ field }}
|
||
{% endif %}
|
||
{% if field.help_text %}
|
||
<small class="form-text text-muted">{{ field.help_text }}</small>
|
||
{% endif %}
|
||
{% for error in field.errors %}
|
||
<div class="text-danger">{{ error }}</div>
|
||
{% endfor %}
|
||
</div>
|
||
{% endif %}
|
||
{% endfor %}
|
||
</div>
|
||
<div class="col-md-6">
|
||
{% for field in form %}
|
||
{% if not forloop.counter0|divisibleby:2 %}
|
||
<div class="mb-3">
|
||
<label class="form-label" for="{{ field.id_for_label }}">{{ field.label }}</label>
|
||
{% if field.field.widget.input_type == "text" %}
|
||
<input type="text" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|default_if_none:'' }}"
|
||
placeholder="{{ field.field.widget.attrs.placeholder|default:field.label }}">
|
||
{% elif field.field.widget.input_type == "number" %}
|
||
<input type="number" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|default_if_none:'' }}"
|
||
placeholder="{{ field.label }}">
|
||
{% elif field.field.widget.input_type == "select" %}
|
||
<select class="form-control" id="{{ field.id_for_label }}" name="{{ field.name }}">
|
||
{% for choice in field.field.choices %}
|
||
<option value="{{ choice.0 }}"
|
||
{% if choice.0 == field.value %}selected{% endif %}>{{ choice.1 }}</option>
|
||
{% endfor %}
|
||
</select>
|
||
{% elif field|is_input_type:"textarea" %}
|
||
<textarea class="form-control" id="{{ field.id_for_label }}" name="{{ field.name }}"
|
||
rows="3"
|
||
placeholder="{{ field.field.widget.attrs.placeholder|default:'请输入内容' }}">{{ field.value|default_if_none:'' }}</textarea>
|
||
{% elif field.field.widget.input_type == "date" %}
|
||
<input type="date" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|date:"Y-m-d" }}">
|
||
{% elif field.field.widget.input_type == "datetime-local" %}
|
||
<input type="datetime-local" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|date:"Y-m-d\TH:i" }}">
|
||
{% elif field.field.widget.input_type == "month" %}
|
||
<input type="month" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|date:"Y-m" }}">
|
||
{% elif field.field.widget.input_type == "year" %}
|
||
<input type="text" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|default_if_none:'选择年份' }}">
|
||
{% elif field.field.widget.input_type == "email" %}
|
||
<input type="email" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" value="{{ field.value|default_if_none:'' }}"
|
||
placeholder="{{ field.label }}">
|
||
{% elif field.field.widget.input_type == "password" %}
|
||
<input type="password" class="form-control" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" placeholder="{{ field.label }}">
|
||
{% elif field.field.widget.input_type == "checkbox" %}
|
||
<div class="form-check">
|
||
<input type="checkbox" class="form-check-input" id="{{ field.id_for_label }}"
|
||
name="{{ field.name }}" {% if field.value %}checked{% endif %}>
|
||
<label class="form-check-label"
|
||
for="{{ field.id_for_label }}">{{ field.label }}</label>
|
||
</div>
|
||
{% else %}
|
||
{{ field }}
|
||
{% endif %}
|
||
{% if field.help_text %}
|
||
<small class="form-text text-muted">{{ field.help_text }}</small>
|
||
{% endif %}
|
||
{% for error in field.errors %}
|
||
<div class="text-danger">{{ error }}</div>
|
||
{% endfor %}
|
||
</div>
|
||
{% endif %}
|
||
{% endfor %}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="modal-footer" style="padding: 10px 5px 5px 5px;">
|
||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
|
||
<button type="submit" class="btn btn-primary" id="submitForm">保存</button>
|
||
</div>
|
||
</form>
|
||
|
||
<script type="text/javascript">
|
||
$(document).ready(function () {
|
||
function toggleSelect2() {
|
||
var actionUrl = $('#hiddenActionLink').attr('href');
|
||
// 假设如果URL中包含某特定关键字则使用select2
|
||
if (actionUrl.includes('proj_ledger')) {
|
||
if ($('#id_project_name').data('select2')) {
|
||
$('#id_project_name').select2('destroy');
|
||
}
|
||
// 确保使用原生input
|
||
$('#id_project_name').attr('type', 'text');
|
||
|
||
function initSelectors() {
|
||
var initialProvince = $('#id_province').val();
|
||
var initialCity = $('#id_city').val();
|
||
var initialDistrict = $('#id_district').val();
|
||
|
||
// 替换 input 元素为 select 元素
|
||
$('#id_province').replaceWith('<select id="id_province" name="province" class="form-control"></select>');
|
||
$('#id_city').replaceWith('<select id="id_city" name="city" class="form-control"></select>');
|
||
$('#id_district').replaceWith('<select id="id_district" name="district" class="form-control"></select>');
|
||
|
||
var provinceSelect = $('#id_province');
|
||
var citySelect = $('#id_city');
|
||
var districtSelect = $('#id_district');
|
||
|
||
// 初始化省份选择框
|
||
provinceSelect.empty().append($('<option>', {value: "", text: "---请选择省份---"}));
|
||
province.forEach(function (prov) {
|
||
provinceSelect.append($('<option>', {
|
||
value: prov.name,
|
||
text: prov.name
|
||
}));
|
||
});
|
||
|
||
// 当省份选择变化时更新城市选择框
|
||
provinceSelect.change(function () {
|
||
var selectedProvince = $(this).val();
|
||
citySelect.empty().append($('<option>', {value: "", text: "---请选择市---"}));
|
||
districtSelect.empty().append($('<option>', {value: "", text: "---请选择区县---"}));
|
||
if (selectedProvince) {
|
||
var cities = province.find(p => p.name === selectedProvince).city;
|
||
cities.forEach(function (city) {
|
||
citySelect.append($('<option>', {
|
||
value: city.name,
|
||
text: city.name
|
||
}));
|
||
});
|
||
}
|
||
});
|
||
|
||
// 当城市选择变化时更新区县选择框
|
||
citySelect.change(function () {
|
||
var selectedCity = $(this).val();
|
||
districtSelect.empty().append($('<option>', {value: "", text: "---请选择区县---"}));
|
||
if (selectedCity) {
|
||
var selectedProvince = province.find(p => p.name === provinceSelect.val());
|
||
var selectedCityObject = selectedProvince.city.find(c => c.name === selectedCity);
|
||
selectedCityObject.districtAndCounty.forEach(function (district) {
|
||
districtSelect.append($('<option>', {
|
||
value: district,
|
||
text: district
|
||
}));
|
||
});
|
||
}
|
||
});
|
||
|
||
// 设置初始值
|
||
if (initialProvince) {
|
||
provinceSelect.val(initialProvince).trigger('change');
|
||
if (initialCity) {
|
||
citySelect.val(initialCity).trigger('change');
|
||
if (initialDistrict) {
|
||
districtSelect.val(initialDistrict);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 调用初始化函数
|
||
initSelectors();
|
||
} else {
|
||
// 实现项目名称关键字查询和下拉框选择
|
||
$('#id_project_name').select2({
|
||
placeholder: "选择或搜索项目名称",
|
||
allowClear: true,
|
||
dropdownParent: $('#addEditModal'),
|
||
width: '100%'
|
||
});
|
||
}
|
||
}
|
||
|
||
$('#id_invoice').select2({
|
||
placeholder: "选择或搜索发票号码",
|
||
allowClear: true,
|
||
dropdownParent: $('#addEditModal'),
|
||
width: '100%'
|
||
})
|
||
|
||
toggleSelect2();
|
||
|
||
// 当选择改变时触发的事件
|
||
$('#id_project_name').on('select2:select', function (e) {
|
||
var projectName = e.params.data.id; // 获取选择的项目名称
|
||
if (projectName) {
|
||
$.ajax({
|
||
url: '/basic_data/pjm/project_detail/',
|
||
method: 'GET', // 明确指定使用 GET 请求
|
||
data: {
|
||
'project_name': projectName
|
||
},
|
||
success: function (data) {
|
||
if (data.error) {
|
||
alert(data.error);
|
||
} else {
|
||
$('#id_primary_department').val(data.primary_department);
|
||
$('#id_project_manager').val(data.project_leader);
|
||
$('#id_nature').val(data.project_nature);
|
||
$('#id_revenue').val(data.revenue);
|
||
}
|
||
},
|
||
error: function (xhr, status, error) {
|
||
alert('An error occurred: ' + xhr.responseText);
|
||
}
|
||
});
|
||
}
|
||
});
|
||
|
||
// 一二级部门联动
|
||
function updateSecondaryDepartments(primaryDepartment, selectedSecondaryDepartment = null) {
|
||
var url = "{% url 'load_secondary_departments' %}";
|
||
$.ajax({
|
||
url: url,
|
||
data: {
|
||
'primary_department': primaryDepartment
|
||
},
|
||
success: function (html) {
|
||
$('#id_secondary_department').html(html);
|
||
if (selectedSecondaryDepartment) {
|
||
$('#id_secondary_department').val(selectedSecondaryDepartment);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
// 监听一级部门变化
|
||
$('#id_primary_department').change(function () {
|
||
var primaryDepartment = $(this).val();
|
||
if (primaryDepartment) {
|
||
updateSecondaryDepartments(primaryDepartment);
|
||
} else {
|
||
$('#id_secondary_department').html('<option value="">---------</option>');
|
||
}
|
||
});
|
||
|
||
// 如果在页面加载时已选择一级部门,则加载相应的二级部门
|
||
var initialPrimaryDepartment = $('#id_primary_department').val();
|
||
var initialSecondaryDepartment = $('#id_secondary_department').val();
|
||
if (initialPrimaryDepartment) {
|
||
updateSecondaryDepartments(initialPrimaryDepartment, initialSecondaryDepartment);
|
||
}
|
||
|
||
// 动态生成id_seal_type的select选项
|
||
var sealTypeOptions = [
|
||
{value: '公章', text: '公章'},
|
||
{value: '法人章', text: '法人章'},
|
||
{value: '合同章', text: '合同章'},
|
||
{value: '财务章', text: '财务章'},
|
||
{value: '其他', text: '其他'}
|
||
];
|
||
|
||
var $sealTypeSelect = $('<select>', {
|
||
class: 'form-control',
|
||
id: 'id_seal_type',
|
||
name: 'seal_type'
|
||
});
|
||
|
||
$.each(sealTypeOptions, function (index, option) {
|
||
$sealTypeSelect.append($('<option>', {
|
||
value: option.value,
|
||
text: option.text
|
||
}));
|
||
});
|
||
|
||
// 替换现有的#id_seal_type元素
|
||
$('#id_seal_type').replaceWith($sealTypeSelect);
|
||
|
||
// 使用年相关组件
|
||
$('#id_year').datepicker({
|
||
format: "yyyy",
|
||
viewMode: "years",
|
||
minViewMode: "years",
|
||
autoclose: true
|
||
});
|
||
|
||
// 监听项目类型实现级联选择项目明细
|
||
$(document).on('change', '#id_expense_type', function () {
|
||
var expenseType = $(this).find("option:selected").text();
|
||
var expenseDetailSelect = document.getElementById('id_expense_detail');
|
||
expenseDetailSelect.innerHTML = '<option value="">请选择</option>'; // 清空之前的选项
|
||
|
||
if (expenseType) {
|
||
fetch(`/basic_data/fm/get_expense_details?expense_type=${expenseType}`)
|
||
.then(response => response.json())
|
||
.then(data => {
|
||
data.forEach(function (detail) {
|
||
var option = document.createElement('option');
|
||
option.value = detail.detail_id;
|
||
option.textContent = detail.expense_detail;
|
||
expenseDetailSelect.appendChild(option);
|
||
});
|
||
})
|
||
.catch(error => console.error('Error fetching expense details:', error));
|
||
}
|
||
});
|
||
|
||
// 纳税记录表-根据纳税频率动态更新纳税所属期
|
||
function updateTaxPeriodOptions(taxFrequency, selectedTaxPeriod = null) {
|
||
var taxPeriodSelect = document.getElementById('id_tax_period');
|
||
taxPeriodSelect.innerHTML = '<option value="">---------</option>'; // 清空之前的选项
|
||
|
||
if (taxFrequency === '月度') {
|
||
for (var i = 1; i <= 12; i++) {
|
||
var option = document.createElement('option');
|
||
option.value = i + '月';
|
||
option.textContent = i + '月';
|
||
taxPeriodSelect.appendChild(option);
|
||
}
|
||
} else if (taxFrequency === '季度') {
|
||
var quarters = ['一季度', '二季度', '三季度', '四季度'];
|
||
quarters.forEach(function (quarter) {
|
||
var option = document.createElement('option');
|
||
option.value = quarter;
|
||
option.textContent = quarter;
|
||
taxPeriodSelect.appendChild(option);
|
||
});
|
||
} else if (taxFrequency === '半年度') {
|
||
var quarters = ['上半年', '下半年'];
|
||
quarters.forEach(function (quarter) {
|
||
var option = document.createElement('option');
|
||
option.value = quarter;
|
||
option.textContent = quarter;
|
||
taxPeriodSelect.appendChild(option);
|
||
});
|
||
}
|
||
|
||
if (selectedTaxPeriod) {
|
||
taxPeriodSelect.value = selectedTaxPeriod;
|
||
}
|
||
}
|
||
|
||
// 监听纳税频率
|
||
$(document).on('change', '#id_tax_frequency', function () {
|
||
var taxFrequency = this.value;
|
||
updateTaxPeriodOptions(taxFrequency);
|
||
});
|
||
|
||
// 如果在页面加载时已选择纳税频率和纳税所属期,则初始化它们
|
||
var initialTaxFrequency = $('#id_tax_frequency').val();
|
||
var initialTaxPeriod = "{{ form.tax_period.value }}";
|
||
if (initialTaxFrequency) {
|
||
updateTaxPeriodOptions(initialTaxFrequency, initialTaxPeriod);
|
||
}
|
||
|
||
// 账号运营管理记录-监听所属平台-获取该平台下所有的账号名称
|
||
$('#id_platform').change(function () {
|
||
var platform = $(this).val();
|
||
$.ajax({
|
||
url: '{% url "get_account_names" %}',
|
||
data: {
|
||
'platform': platform
|
||
},
|
||
success: function (data) {
|
||
var $accountName = $('#id_account_name');
|
||
$accountName.empty();
|
||
$accountName.append('<option value="">---------</option>');
|
||
$.each(data.account_names, function (key, value) {
|
||
$accountName.append('<option value="' + value + '">' + value + '</option>');
|
||
});
|
||
}
|
||
});
|
||
});
|
||
|
||
// 合同管理台账-监听合同类别-如为业务类-项目名称可以下拉选择
|
||
var $contractType = $('#id_contract_type');
|
||
var $projectName = $('#id_project_name');
|
||
var $projectNameSelect = $('<select id="id_project_name_select" name="project_name" class="form-control"></select>');
|
||
var $primaryDepartment = $('#id_primary_department');
|
||
var $projectLeader = $('#id_project_leader');
|
||
|
||
// 初始隐藏项目名称下拉框
|
||
$projectNameSelect.hide();
|
||
$projectName.after($projectNameSelect);
|
||
|
||
$contractType.change(function () {
|
||
if ($(this).val() === '业务类') {
|
||
$projectName.hide();
|
||
$projectNameSelect.show();
|
||
loadProjects();
|
||
} else {
|
||
$projectName.show();
|
||
$projectNameSelect.hide();
|
||
}
|
||
});
|
||
|
||
// 初始化项目名称下拉框
|
||
function loadProjects() {
|
||
$.ajax({
|
||
url: '{% url "get_project_details" %}',
|
||
success: function (data) {
|
||
$projectNameSelect.empty();
|
||
$projectNameSelect.append('<option value="">---------</option>');
|
||
$.each(data, function (index, project) {
|
||
$projectNameSelect.append('<option value="' + project.project_name + '">' + project.project_name + '</option>');
|
||
});
|
||
}
|
||
});
|
||
}
|
||
|
||
// 监听项目名称的变化-并且通过项目名称为一级部门和项目负责人赋值
|
||
$projectNameSelect.change(function () {
|
||
var selectedProject = $(this).val();
|
||
if (selectedProject) {
|
||
$.ajax({
|
||
url: '{% url "get_project_details" %}',
|
||
data: {
|
||
'project_name': selectedProject
|
||
},
|
||
success: function (data) {
|
||
$projectName.val(selectedProject);
|
||
$primaryDepartment.val(data.primary_department);
|
||
$projectLeader.val(data.project_leader);
|
||
}
|
||
});
|
||
}
|
||
});
|
||
|
||
// 初始化时执行一次
|
||
$contractType.trigger('change');
|
||
|
||
// 客户表-根据是否录入项目信息判断合作项目能否编辑
|
||
var $cooperation = $('#id_cooperation');
|
||
var $project = $('#id_project');
|
||
|
||
function updateProjectField() {
|
||
if ($cooperation.val() === '是') {
|
||
$project.prop('disabled', false);
|
||
$project.attr('placeholder', '请输入合作项目');
|
||
} else {
|
||
$project.prop('disabled', true);
|
||
$project.val(''); // 清空输入
|
||
$project.attr('placeholder', '项目不可编辑');
|
||
}
|
||
}
|
||
|
||
// 初始化时设置项目字段状态
|
||
updateProjectField();
|
||
|
||
// 监听 cooperation 字段的变化
|
||
$cooperation.change(updateProjectField);
|
||
|
||
// 固定资产清单-监听入账日期、折旧月份、折旧方法、资产原值、残值、折旧年限、账面价值
|
||
var $recordedDate = $('#id_recorded_date');
|
||
var $depreciationMonths = $('#id_depreciation_months');
|
||
var $depreciationMethod = $('#id_depreciation_method');
|
||
var $originalValue = $('#id_original_value');
|
||
var $residualValue = $('#id_residual_value');
|
||
var $depreciationYears = $('#id_depreciation_years');
|
||
var $bookValue = $('#id_book_value');
|
||
$depreciationMonths.prop('readonly', true);
|
||
|
||
// 根据入账日期计算折旧月数
|
||
function calculateDepreciationMonths() {
|
||
var recordedDate = new Date($recordedDate.val());
|
||
var currentDate = new Date();
|
||
var months = (currentDate.getFullYear() - recordedDate.getFullYear()) * 12;
|
||
months -= recordedDate.getMonth();
|
||
months += currentDate.getMonth();
|
||
$depreciationMonths.val(months);
|
||
|
||
}
|
||
|
||
// 计算账面价值=资产原值-(资产原值-残值)*折旧月数/(折旧年限*12)
|
||
function calculateBookValue() {
|
||
var method = $depreciationMethod.val();
|
||
if (method === '年限平均法') {
|
||
var originalValue = parseFloat($originalValue.val()) || 0;
|
||
var residualValue = parseFloat($residualValue.val()) || 0;
|
||
var depreciationMonths = parseInt($depreciationMonths.val()) || 0;
|
||
var depreciationYears = parseInt($depreciationYears.val()) || 0;
|
||
|
||
var bookValue = originalValue - (originalValue - residualValue) * depreciationMonths / (depreciationYears * 12);
|
||
$bookValue.val(bookValue.toFixed(2));
|
||
$bookValue.prop('readonly', true);
|
||
} else {
|
||
$bookValue.val('');
|
||
$bookValue.prop('readonly', false);
|
||
}
|
||
}
|
||
|
||
$recordedDate.change(function () {
|
||
calculateDepreciationMonths();
|
||
calculateBookValue();
|
||
});
|
||
|
||
$depreciationMethod.change(calculateBookValue);
|
||
|
||
// 当其他相关字段改变时,也重新计算账面价值
|
||
$originalValue.change(calculateBookValue);
|
||
$residualValue.change(calculateBookValue);
|
||
$depreciationYears.change(calculateBookValue);
|
||
$depreciationMonths.change(calculateBookValue);
|
||
|
||
// 项目进度
|
||
var departmentSelect = document.getElementById('id_department');
|
||
var projectTypeSelect = document.getElementById('id_project_type');
|
||
|
||
var options = {
|
||
"天信": ['cbc', '债拍', '其他'],
|
||
'混改': ['cbc', '债拍', '其他'],
|
||
'艾力芬特': ['承销', '贸易', '其他'],
|
||
'星河': ['咨询', '科技', '新媒体', '其他'],
|
||
'星海': ['非标', '贸易', '其他']
|
||
};
|
||
|
||
function updateProjectTypeOptions() {
|
||
var department = departmentSelect.options[departmentSelect.selectedIndex].text;
|
||
|
||
// 获取当前选中的项目类型
|
||
var selectedProjectType = projectTypeSelect.getAttribute('data-selected') || '{{ selected_project_type }}';
|
||
|
||
// 清空现有选项
|
||
projectTypeSelect.innerHTML = '<option value="">---------</option>';
|
||
|
||
if (department in options) {
|
||
options[department].forEach(function (option) {
|
||
var newOption = document.createElement('option');
|
||
newOption.value = option;
|
||
newOption.textContent = option;
|
||
if (option === selectedProjectType) {
|
||
newOption.selected = true;
|
||
}
|
||
projectTypeSelect.appendChild(newOption);
|
||
});
|
||
}
|
||
}
|
||
|
||
// 监听部门选择变化
|
||
departmentSelect.addEventListener('change', function() {
|
||
projectTypeSelect.setAttribute('data-selected', ''); // 清除之前的选择
|
||
updateProjectTypeOptions();
|
||
});
|
||
|
||
// 初始加载时调用一次以确保正确显示默认值
|
||
updateProjectTypeOptions();
|
||
|
||
// 计算税金和总金额:价税合计金额 = 不含税金额 / 税率; 税额 = 价税合计金额 - 不含税金额
|
||
$('#id_amount_excluding_tax, #id_tax_rate').on('input', function () {
|
||
var amountExcludingTaxElement = document.getElementById('id_amount_excluding_tax');
|
||
var taxRateElement = document.getElementById('id_tax_rate');
|
||
var taxAmountElement = document.getElementById('id_tax_amount');
|
||
var totalAmountElement = document.getElementById('id_total_amount');
|
||
|
||
var amountExcludingTax = parseFloat(amountExcludingTaxElement.value) || 0;
|
||
var taxRate = parseFloat(taxRateElement.value) || 0;
|
||
|
||
var taxAmount = amountExcludingTax * (taxRate / 100);
|
||
var totalAmount = amountExcludingTax + taxAmount;
|
||
|
||
taxAmountElement.value = taxAmount.toFixed(2); // 保留两位小数
|
||
totalAmountElement.value = totalAmount.toFixed(2); // 保留两位小数
|
||
});
|
||
|
||
// 根据费用类型获取费用明细
|
||
document.getElementById('expense_type').addEventListener('change', function () {
|
||
var expenseType = this.value;
|
||
var expenseDetailSelect = document.getElementById('expense_detail');
|
||
expenseDetailSelect.innerHTML = '<option value="">请选择</option>'; // 清空之前的选项
|
||
|
||
if (expenseType) {
|
||
fetch(`/basic_data/fm/get_expense_details?expense_type=${expenseType}`)
|
||
.then(response => response.json())
|
||
.then(data => {
|
||
data.forEach(function (detail) {
|
||
var option = document.createElement('option');
|
||
option.value = detail.expense_detail;
|
||
option.textContent = detail.expense_detail;
|
||
expenseDetailSelect.appendChild(option);
|
||
});
|
||
})
|
||
.catch(error => console.error('Error fetching expense details:', error));
|
||
}
|
||
});
|
||
});
|
||
</script>
|