团队冲刺7

王皓扬
今日代码
package com.example.hrmanagementapp.activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.hrmanagementapp.database.HRDatabaseHelper;
import com.example.hrmanagementapp.model.Role;
import com.example.hrmanagementapp.R;
public class OnboardingActivity extends AppCompatActivity {
private EditText etName, etDepartment;
private Button btnSave;
private Role currentRole;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_onboarding);
etName = findViewById(R.id.et_newcomer_name);
etDepartment = findViewById(R.id.et_newcomer_department);
btnSave = findViewById(R.id.btn_onboarding_save);
currentRole = getIntent().getParcelableExtra("role");
if (currentRole != null && "人力资源部".equals(currentRole.getDepartment().getName()) && currentRole.getLevelSystem().getId() >= 2) {
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = etName.getText().toString();
String department = etDepartment.getText().toString();
if (!name.isEmpty() && !department.isEmpty()) {
saveNewcomer(name, department);
Toast.makeText(OnboardingActivity.this, "新人入职信息保存成功", Toast.LENGTH_SHORT).show();
finish();
} else {
Toast.makeText(OnboardingActivity.this, "请输入新人名称和部门", Toast.LENGTH_SHORT).show();
}
}
});
} else {
btnSave.setEnabled(false);
Toast.makeText(this, "你没有权限进行此操作", Toast.LENGTH_SHORT).show();
}
}
private void saveNewcomer(String name, String department) {
HRDatabaseHelper dbHelper = new HRDatabaseHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
String insertQuery = "INSERT INTO " + HRDatabaseHelper.TABLE_EMPLOYEES + " (" +
HRDatabaseHelper.COLUMN_NAME + ", " +
HRDatabaseHelper.COLUMN_DEPARTMENT + ", " +
HRDatabaseHelper.COLUMN_PASSWORD + ", " +
HRDatabaseHelper.COLUMN_LEVEL + ") VALUES ('" +
name + "', '" +
department + "', '1234', 1);";
db.execSQL(insertQuery);
db.close();
}
}package com.example.hrmanagementapp.activity;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.hrmanagementapp.R;
public class OnboardingDevelopmentActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_onboarding_development);
@SuppressLint({"MissingInflatedId", "LocalSuppress"}) Button btnNewcomerOnboarding = findViewById(R.id.btn_onboarding);
btnNewcomerOnboarding.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(OnboardingDevelopmentActivity.this, OnboardingActivity.class);
startActivity(intent);
}
});
Button btnNewcomerGrowth = findViewById(R.id.btn_newcomer_growth);
btnNewcomerGrowth.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(OnboardingDevelopmentActivity.this, NewcomerGrowthActivity.class);
startActivity(intent);
}
});
Button btnProbationRequest = findViewById(R.id.btn_probation_request);
btnProbationRequest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(OnboardingDevelopmentActivity.this, ProbationRequestActivity.class);
startActivity(intent);
}
});
}
}package com.example.hrmanagementapp.activity;
import android.annotation.SuppressLint;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.hrmanagementapp.database.HRDatabaseHelper;
import com.example.hrmanagementapp.model.Role;
import java.util.ArrayList;
import java.util.List;
import com.example.hrmanagementapp.R;
public class TransferManagementActivity extends AppCompatActivity {
private ListView lvEmployees;
private Role currentRole;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transfer_management);
lvEmployees = findViewById(R.id.lv_employees);
currentRole = getIntent().getParcelableExtra("role");
if (currentRole != null && "人力资源部".equals(currentRole.getDepartment().getName()) && currentRole.getLevelSystem().getId() == 3) {
List<String> employees = getEmployees();
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, employees);
lvEmployees.setAdapter(adapter);
} else {
Toast.makeText(this, "你没有权限查看此界面", Toast.LENGTH_SHORT).show();
finish();
}
}
private List
List
HRDatabaseHelper dbHelper = new HRDatabaseHelper(this);
SQLiteDatabase db = dbHelper.getReadableDatabase();
String query = "SELECT " + HRDatabaseHelper.COLUMN_NAME + ", " + HRDatabaseHelper.COLUMN_DEPARTMENT +
" FROM " + HRDatabaseHelper.TABLE_EMPLOYEES + ";";
Cursor cursor = db.rawQuery(query, null);
if (cursor.moveToFirst()) {
do {
@SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex(HRDatabaseHelper.COLUMN_NAME));
@SuppressLint("Range") String department = cursor.getString(cursor.getColumnIndex(HRDatabaseHelper.COLUMN_DEPARTMENT));
employees.add(name + " - " + department);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return employees;
}
}

熊磊
今天的成就:
今天结合了组员的代码,再加上自己的改进和对我的编码工具的适配,完成了企业信息和组织架构模块(组织架构有些功能未完成)
相关代码:
// 加载部门管理内容
function loadDepartmentManagement(container) {
container.innerHTML = <div class="department-management"> <h3 style="font-size: 1.5rem;">部门管理</h3> <div id="departmentContent"></div> </div> ;
// 获取部门数据
fetch('/api/department/all')
.then(response => response.json())
.then(departments => {
// 获取小部门数据
fetch('/api/subdepartments/all')
.then(response => response.json())
.then(subDepartments => {
renderOrganizationChart(container, departments, subDepartments);
})
.catch(error => {
console.error('获取小部门数据失败:', error);
document.getElementById('departmentContent').innerHTML = '<p style="color: red; font-size: 1.2rem;">获取小部门数据失败,请刷新重试</p>';
});
})
.catch(error => {
console.error('获取部门数据失败:', error);
document.getElementById('departmentContent').innerHTML = '<p style="color: red; font-size: 1.2rem;">获取部门数据失败,请刷新重试</p>';
});
}
// 渲染组织架构图
function renderOrganizationChart(container, departments, subDepartments) {
const departmentContent = document.getElementById('departmentContent');
departmentContent.innerHTML = '';
// 创建组织架构图的 HTML 结构
let orgChartHTML = `
<div class="org-chart">
<div class="level">
<div class="department-box">公司</div>
</div>
<div class="level" id="departmentLevel"></div>
<div class="level" id="subDepartmentLevel"></div>
</div>
`;
departmentContent.innerHTML = orgChartHTML;
// 填充部门数据
const departmentLevel = document.getElementById('departmentLevel');
departments.forEach(dept => {
departmentLevel.innerHTML += `
<div class="department-box" data-department-id="${dept.departmentId}">
${dept.departmentName}
</div>
`;
});
// 填充小部门数据
const subDepartmentLevel = document.getElementById('subDepartmentLevel');
subDepartments.forEach(subDept => {
subDepartmentLevel.innerHTML += `
<div class="sub-department-box" data-department-id="${subDept.departmentId}">
${subDept.name}
</div>
`;
});
// 添加连线
addConnections();
}
// 添加连线
function addConnections() {
// 为每个小部门添加连线到对应的部门
const subDepartmentBoxes = document.querySelectorAll('.sub-department-box');
subDepartmentBoxes.forEach(box => {
const departmentId = box.getAttribute('data-department-id');
const departmentBox = document.querySelector(.department-box[data-department-id="${departmentId}"]);
if (departmentBox) {
// 创建连线
const connection = document.createElement('div');
connection.className = 'connection';
connection.style.position = 'absolute';
connection.style.top = `${box.offsetTop - 10}px`;
connection.style.left = `${box.offsetLeft + box.offsetWidth / 2}px`;
connection.style.width = '1px';
connection.style.height = '10px';
connection.style.backgroundColor = '#ccc';
connection.style.zIndex = '-1';
document.getElementById('departmentContent').appendChild(connection);
}
});
}
// 加载企业信息管理内容
function loadEnterpriseInfoManagement(container) {
container.innerHTML = <div class="enterprise-info-management"> <h3 style="font-size: 1.5rem;">企业信息管理</h3> <div id="enterpriseInfoContent"></div> </div> ;
const enterpriseInfoContent = document.getElementById('enterpriseInfoContent');
enterpriseInfoContent.innerHTML = `
<div id="formContainer" class="form-container"></div>
`;
// 初始加载时显示企业信息
loadEnterpriseInfo();
}
// 加载企业信息
function loadEnterpriseInfo() {
fetch('/api/enterprise/info')
.then(response => {
if (!response.ok) {
throw new Error('网络响应失败');
}
return response.json();
})
.then(data => {
const formContainer = document.getElementById('formContainer');
if (!data) {
// 显示新建按钮
formContainer.innerHTML = <button onclick="showEmptyForm()" class="btn btn-primary">新建</button> ;
return;
}
// 隐藏新建按钮,显示表单和按钮
let infoHtml = `
<form id="enterpriseInfoForm" class="enterprise-info-form" onsubmit="return false;">
<div class="form-row">
<div class="form-group col-md-6">
<label for="companyName">公司名称</label>
<input type="text" id="companyName" class="form-control" value="${data.companyName || ''}">
</div>
<div class="form-group col-md-6">
<label for="creditCode">统一信用代码</label>
<input type="text" id="creditCode" class="form-control" value="${data.creditCode || ''}">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="legalRepresentative">法人代表</label>
<input type="text" id="legalRepresentative" class="form-control" value="${data.legalRepresentative || ''}">
</div>
<div class="form-group col-md-6">
<label for="registeredAddress">注册地址</label>
<input type="text" id="registeredAddress" class="form-control" value="${data.registeredAddress || ''}">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="establishmentDate">成立日期</label>
<input type="date" id="establishmentDate" class="form-control" value="${data.establishmentDate ? new Date(data.establishmentDate).toISOString().split('T')[0] : ''}">
</div>
<div class="form-group col-md-6">
<label for="registeredCapital">注册资本</label>
<input type="text" id="registeredCapital" class="form-control" value="${data.registeredCapital || ''}">
</div>
</div>
<div class="form-group">
<label for="businessScope">经营范围</label>
<textarea id="businessScope" class="form-control" rows="3">${data.businessScope || ''}</textarea>
</div>
<div class="button-container">
<button type="button" onclick="submitEnterpriseInfo()" class="btn btn-primary">更新</button>
<button type="button" onclick="showHistory(event)" class="btn btn-secondary">历史记录</button>
</div>
</form>
`;
formContainer.innerHTML = infoHtml;
})
.catch(error => {
console.error('获取企业信息出错:', error);
document.getElementById('formContainer').innerHTML = '<p style="color: red; font-size: 1.2rem;">获取企业信息失败,请刷新重试</p>';
});
}
// 显示历史记录
function showHistory(event) {
event.stopPropagation(); // 阻止事件冒泡
console.log("showHistory 被调用");
fetch('/api/enterprise/history')
.then(response => {
if (!response.ok) {
throw new Error('网络响应失败');
}
return response.json();
})
.then(data => {
console.log("历史记录数据:", data);
if (data.length === 0) {
alert("没有历史记录");
return;
}
const historyHtml = data.map(item => <div style="border: 1px solid #ccc; padding: 10px; margin-bottom: 10px;"> <p><strong>企业ID:</strong>${item.enterpriseId}</p> <p><strong>公司名称:</strong>${item.companyName}</p> <p><strong>统一信用代码:</strong>${item.creditCode}</p> <p><strong>法人代表:</strong>${item.legalRepresentative}</p> <p><strong>注册地址:</strong>${item.registeredAddress}</p> <p><strong>成立日期:</strong>${item.establishmentDate}</p> <p><strong>注册资本:</strong>${item.registeredCapital}</p> <p><strong>经营范围:</strong>${item.businessScope}</p> <p><strong>创建时间:</strong>${item.createTime}</p> <p><strong>更新时间:</strong>${item.updateTime}</p> </div> ).join('');
// 创建历史记录窗口
const historyModal = document.createElement('div');
historyModal.id = 'historyModal';
historyModal.style.position = 'fixed';
historyModal.style.top = '0';
historyModal.style.left = '0';
historyModal.style.width = '100%';
historyModal.style.height = '100%';
historyModal.style.background = 'rgba(0, 0, 0, 0.5)';
historyModal.style.display = 'flex';
historyModal.style.justifyContent = 'center';
historyModal.style.alignItems = 'center';
historyModal.style.zIndex = '1000';
// 创建历史记录内容
const historyContent = document.createElement('div');
historyContent.style.background = 'white';
historyContent.style.padding = '20px';
historyContent.style.borderRadius = '8px';
historyContent.style.width = '80%';
historyContent.style.maxHeight = '80%';
historyContent.style.overflowY = 'auto';
// 添加标题和内容
historyContent.innerHTML = `
<h3>企业信息历史记录</h3>
<div id="historyContent">${historyHtml}</div>
<button onclick="closeHistoryModal()" class="btn btn-primary" style="margin-top: 20px;">关闭</button>
`;
// 将内容添加到窗口
historyModal.appendChild(historyContent);
document.body.appendChild(historyModal);
})
.catch(error => {
console.error('获取企业信息历史记录失败:', error);
alert('获取企业信息历史记录失败,请重试');
});
}
// 关闭历史记录窗口
function closeHistoryModal() {
const historyModal = document.getElementById('historyModal');
if (historyModal) {
document.body.removeChild(historyModal);
}
}
// 显示空表单
function showEmptyForm() {
const formContainer = document.getElementById('formContainer');
formContainer.innerHTML = <form id="enterpriseInfoForm" onsubmit="return false;"> <div class="form-row"> <div class="form-group col-md-6"> <label for="companyName">公司名称</label> <input type="text" id="companyName" class="form-control"> </div> <div class="form-group col-md-6"> <label for="creditCode">统一信用代码</label> <input type="text" id="creditCode" class="form-control"> </div> </div> <div class="form-row"> <div class="form-group col-md-6"> <label for="legalRepresentative">法人代表</label> <input type="text" id="legalRepresentative" class="form-control"> </div> <div class="form-group col-md-6"> <label for="registeredAddress">注册地址</label> <input type="text" id="registeredAddress" class="form-control"> </div> </div> <div class="form-row"> <div class="form-group col-md-6"> <label for="establishmentDate">成立日期</label> <input type="date" id="establishmentDate" class="form-control"> </div> <div class="form-group col-md-6"> <label for="registeredCapital">注册资本</label> <input type="text" id="registeredCapital" class="form-control"> </div> </div> <div class="form-group"> <label for="businessScope">经营范围</label> <textarea id="businessScope" class="form-control" rows="3"></textarea> </div> <button type="button" onclick="submitEnterpriseInfo()" class="btn btn-primary">提交</button> </form> ;
}
// 提交企业信息
function submitEnterpriseInfo() {
const companyName = document.getElementById('companyName').value;
const creditCode = document.getElementById('creditCode').value;
const legalRepresentative = document.getElementById('legalRepresentative').value;
const registeredAddress = document.getElementById('registeredAddress').value;
const establishmentDate = document.getElementById('establishmentDate').value;
const registeredCapital = document.getElementById('registeredCapital').value;
const businessScope = document.getElementById('businessScope').value;
fetch('/api/enterprise/save', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
companyName: companyName,
creditCode: creditCode,
legalRepresentative: legalRepresentative,
registeredAddress: registeredAddress,
establishmentDate: establishmentDate,
registeredCapital: registeredCapital,
businessScope: businessScope
})
})
.then(response => {
if (!response.ok) {
throw new Error('网络响应失败');
}
return response.json();
})
.then(data => {
alert('企业信息保存成功!');
// 刷新页面以显示新状态
location.reload();
})
.catch(error => {
console.error('保存企业信息失败:', error);
alert('保存企业信息失败,请重试');
});
}
遇到的困难:
困难主要是在于我与组员的开发环境和配置版本不同,这导致我不能直接使用其代码,只能一边改,一边添加。
另外再编码的过程里也遇见困难,比如:再写企业信息的历史记录时,按计划是会出现个窗口显示,但当时出错,导致出现窗口后立即回到主界面,导致窗口被覆盖。在排查至少半小时后才解决这个问题。
今天的任务:
将组织架构剩下的内容全部按要求完成,再利用剩下的时间继续完成编制管理和部门管理模块。

浙公网安备 33010602011771号