前端公共插件
components/QueryPop
<template>
<div id="querypop">
<div class="left">
{{props.title}}:
<input
type="text" v-model="state.idNumber" />
<input type="button" value="查詢" @click="selectPerson()" />
<!-- showpop是否顯示同戶查詢,只有修改時(shí)showpop=0-->
<input type="button" value="同戶查詢" @click="selectPersonAll()" v-show="props.showpop!=0"/>
</div>
<table width="100%" border="1" cellspacing="0" cellpadding="0" align="center" bordercolor="#dadada">
<tr align="center" >
<th width="15%" height="25" valign="middle">戶口類別</th>
<th width="10%" height="25" valign="middle">戶號(hào)</th>
<th width="10%" height="25" valign="middle">關(guān)系</th>
<th width="10%" height="25" valign="middle">姓名</th>
<th width="5%" height="25" valign="middle">性別</th>
<th width="10%" height="25" valign="middle">生日</th>
<th width="5%" height="25" valign="middle">民族</th>
<th width="15%" height="25" valign="middle">證件號(hào)</th>
<th width="15%" height="25" valign="middle" v-if="props.operate='del'">操作</th>
</tr>
<tr align="center" v-for="item in state.list" :key="item.id">
<td height="25" valign="middle">{{item.populationType}}</td>
<td height="25" valign="middle">{{item.populationId}}</td>
<td height="25" valign="middle">{{item.relation}}</td>
<td height="25" valign="middle">{{item.name}}</td>
<td height="25" valign="middle">{{item.sex}}</td>
<td height="25" valign="middle">{{item.birthday}}</td>
<td height="25" valign="middle">{{item.nation}}</td>
<td height="25" valign="middle">{{item.idNumber}}</td>
<td height="25" valign="middle" v-if="props.operate='del'">
<button @click="del(item.idNumber)">刪除</button>
</td>
</tr>
</table>
</div>
</template>
<script setup>
import axios from 'axios';
import qs from 'qs';
let emit=defineEmits(['getPop'])
//showpop是否顯示同步查詢按鈕
let props=defineProps(['title','showpop','operate'])
import {reactive} from 'vue';
let state = reactive({
idNumber: undefined,
list: [],
populationId: undefined,
})
function del(idNumber){
//alert(idNumber)
let flag=confirm('確定要?jiǎng)h除么')
if(flag){
axios.get("http://localhost:8081/ssmstudy/population/del?idNumber=" + state.idNumber)
}
}
function selectPerson() {
axios.get("http://localhost:8081/ssmstudy/population/findByIdNumber?idNumber=" + state.idNumber)
.then(res => {
state.list = res.data;
state.populationId = res.data[0].populationId;
emit('getPop',state.list)
})
}
function selectPersonAll() {
axios.get("http://localhost:8081/ssmstudy/population/findAll?idNumber=" + state.idNumber)
.then(res => {
state.list = res.data;
state.populationId = res.data[0].populationId;
emit('getPop',state.list)
})
}
</script>
<style scoped>
.strong {
font-weight: 600;
}
.left {
text-align: left;
}
.right {
text-align: right;
}
h3 {
display: flex;
justify-content: center;
align-items: center;
}
.mid {
text-align: center;
}
</style>
components/Regist
<template>
<div class="regist">
<h3>{{title}}</h3>
<table border="0" cellspacing="10px" cellpadding="0" width="90%">
<tr>
<td class="strong right" width="10%">姓 名:</td>
<td width="20%" class="left">
<input type="text" v-model="state.form.name" />
</td>
<td class="strong right" width="10%">性 別:</td>
<td width="20%" class="left">
<select v-model="state.form.sex" >
<option v-for="item in state.dictList.xb" :key="item.id" :value="item.id">{{item.constantName}}</option>
</select>
</td>
<td class="strong right" width="10%">與戶主關(guān)系:</td>
<td width="30%" class="left">
<select v-model="state.form.relation">
<option v-for="item in state.dictList.hzgx" :key="item.id" :value="item.id">{{item.constantName}}</option>
</select>
</td>
</tr>
<tr>
<td class="strong right">出生日期:</td>
<td class="left">
<input type="date" v-model="state.form.birthday" />
</td>
<td class="strong right">身份證號(hào):</td>
<td class="left">
<input type="text" v-model="state.form.idNumber" />
</td>
<td class="strong right">宗教信仰:</td>
<td class="left">
<input type="text" v-model="state.form.religiousBelief" />
</td>
</tr>
<tr>
<td class="strong right" width="12%">文化程度:</td>
<td width="18%" class="left">
<select v-model="state.form.educationalLevel">
<option v-for="item in state.dictList.whcd" :key="item.id" :value="item.id">{{item.constantName}}</option>
</select>
</td>
<td class="strong right" width="12%">婚姻狀況:</td>
<td width="18%" class="left">
<select v-model="state.form.marriage">
<option v-for="item in state.dictList.hyzk" :key="item.id" :value="item.id">{{item.constantName}}</option>
</select>
</td>
<td class="strong right" width="12%">兵役情況:</td>
<td width="28%" class="left">
<select v-model="state.form.militaryService">
<option v-for="item in state.dictList.byqk" :key="item.id" :value="item.id">{{item.constantName}}</option>
</select>
</td>
</tr>
<tr>
<td class="strong right" width="12%">民 族:</td>
<td width="18%" class="left">
<select v-model="state.form.nation">
<option v-for="item in state.dictList.mz" :key="item.id" :value="item.id">{{item.constantName}}</option>
</select>
</td>
<td class="strong right" width="12%">血 型:</td>
<td width="18%" class="left">
<select v-model="state.form.bloodType">
<option v-for="item in state.dictList.xx" :key="item.id" :value="item.id">{{item.constantName}}</option>
</select>
</td>
<td class="strong right" width="12%">職 業(yè):</td>
<td width="28%" class="left">
<input type="text" v-model="state.form.job" />
</td>
</tr>
<tr>
<td class="strong right" width="12%">住 址:</td>
<td width="18%" class="left">
<input type="text" v-model="state.form.address" />
</td>
<td class="strong right" width="12%">戶口類型:</td>
<td width="18%" class="left">
<select v-model="state.form.populationType">
<option v-for="item in state.dictList.hklx" :key="item.id" :value="item.id">{{item.constantName}}</option>
</select>
</td>
<td class="strong right" width="12%">戶主姓名</td>
<td width="28%" class="left">
<input type="text" v-model="state.form.houseHolder" />
</td>
</tr>
<tr>
<td colspan="6" class="mid">
<input type="button" value="保存" @click="regist()" />
</td>
</tr>
</table>
<div v-show="state.flag">{{state.resultMsg}}</div>
</div>
</template>
<script setup>
import {onMounted, onUpdated, reactive} from 'vue';
import axios from 'axios';
import qs from 'qs';
//backup01后臺(tái)用的 = 0-立戶 1-出生申報(bào) 2-夫妻投靠 3-父母投靠子女
//title 前臺(tái)的 populationId 存到哪個(gè)戶口下
const myProps = defineProps(['title','populationId','operate','population'])
//1,性別數(shù)據(jù)開始時(shí)置空
let state =reactive({flag:false,resultMsg:'',dictList:{},
form:{
id:undefined,
name: undefined,
sex: undefined,
relation: undefined,
birthday: undefined,
idNumber: undefined,
educationalLevel: undefined,
marriage: undefined,
militaryService: undefined,
nation: undefined,
bloodType: undefined,
job: undefined,
populationId: undefined,
religiousBelief: undefined,
address: undefined,
populationType:undefined,//戶口類型,城鎮(zhèn) 非城鎮(zhèn)
houseHolder:undefined,//戶主姓名,
operate:undefined
}
})
function regist() {
//把operate補(bǔ)全
state.form.operate=myProps.operate;
//補(bǔ)全戶號(hào)
//alert("戶號(hào)"+myProps.populationId)
if(myProps.populationId!=undefined){
state.form.populationId=myProps.populationId;
}
axios.post("http://localhost:8081/ssmstudy/population/save",qs.stringify(state.form))
.then(res=>{
state.flag=true;
state.resultMsg=res.data.message
})
}
onMounted(()=>{
axios.get("http://localhost:8081/ssmstudy/constantType/findAll")
.then(res=>{
//console.log(res.data)
state.dictList=res.data
})
//如果是修改信息的話,把原始信息加載進(jìn)來(lái)
//state.form=myProps.population
})
onUpdated(()=>{
//console.log("myProps.population",myProps.population)
//alert("onUpdated-populationId "+myProps.populationId)
if(myProps.population!=null){
state.form=myProps.population
}
})
</script>
<style scoped>
.strong {
font-weight: 600;
}
.left {
text-align: left;
}
.right {
text-align: right;
}
h3 {
display: flex;
justify-content: center;
align-items: center;
}
.mid {
text-align: center;
}
</style>
頁(yè)面
app.vue
/views/population/Login
<template>
<!--路由出口,變動(dòng)的是這部分內(nèi)容 -->
<router-view/>
</template>
<style>
body{
margin:0;
padding:0;
}
input[type='button']:link,input[type='button']:visited{
text-decoration: none;
color:#BFC0B3;
font-size: 14px;
}
input[type='button']:hover{
background-color: #419efe;
border: none;
}
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
}
nav {
padding: 30px;
}
nav a {
font-weight: bold;
color: #2c3e50;
}
nav a.router-link-exact-active {
color: #42b983;
}
</style>
/views/population/Index
<template>
<div class="container">
<div class="left">
<ul>
<li>
<router-link to="/populationAdd">戶口立戶</router-link>
</li>
<li>
<router-link to="/born">出生申報(bào)</router-link>
</li>
<li>
<router-link to="/spouse">夫妻投靠</router-link>
</li>
<li>
<router-link to="/parents">父母投靠子女</router-link>
</li>
<li>
<router-link to="/update">修改信息</router-link>
</li>
<li>
<router-link to="/del">注銷戶口</router-link>
</li>
</ul>
</div>
<div class="right">
<!-- 路由出口-->
<router-view></router-view>
</div>
</div>
</template>
<script>
</script>
<style scoped>
body {
margin: 0;
}
.container {
width: 100vw;
height: 100vh;
background-color: #fff;
display: flex;
}
.left {
flex: 2;
background-color: #304156;
}
.right {
flex: 10;
background-color: #fff;
}
ul {
list-style: none;
}
a:link, a:visited {
text-decoration: none;
color: #BFC0B3;
font-size: 14px;
}
a:hover {
background-color: #419efe;
border: none;
}
</style>
/views/population/PopulationAdd
<template>
<div id="populationadd">
<!-- operate 0-立戶 1-出生申報(bào) 2-夫妻投靠 3-父母投靠子女 4-修改 -->
<regist title="戶口立戶" operate="0" ></regist>
</div>
</template>
<script setup>
import regist from '@/components/Regist'
</script>
<style>
</style>
/views/population/Born
<template>
<div class="regist">
<querypop @getPop="getPop" title="監(jiān)護(hù)人身份證號(hào)"></querypop>
<regist title="出生申報(bào)" :populationId="state.populationId" operate=1 ></regist>
</div>
</template>
<script setup>
import { reactive } from 'vue';
import regist from '@/components/Regist'
import querypop from '@/components/QueryPop'
let state=reactive({populationId:undefined})
function getPop(list){
//alert(list[0].populationId)
state.populationId=list[0].populationId;
}
</script>
/views/population/Spouse
<template>
<div class="regist">
<querypop @getPop="getPop" title="被投靠人身份證號(hào)"></querypop>
<regist title="夫妻投靠" :populationId="state.populationId" operate=2 ></regist>
</div>
</template>
<script setup>
import { reactive } from 'vue';
import regist from '@/components/Regist'
import querypop from '@/components/QueryPop'
let state=reactive({populationId:undefined})
function getPop(list){
//alert(list[0].populationId)
state.populationId=list[0].populationId;
}
</script>
/views/population/Parents
<template>
<div class="regist">
<querypop @getPop="getPop" title="被投靠人身份證號(hào)"></querypop>
<regist title="父母投靠" :populationId="state.populationId" operate=3 ></regist>
</div>
</template>
<script setup>
import { reactive } from 'vue';
import regist from '@/components/Regist'
import querypop from '@/components/QueryPop'
let state=reactive({populationId:undefined})
function getPop(list){
//alert(list[0].populationId)
state.populationId=list[0].populationId;
}
</script>
/views/population/Update
<template>
<div class="regist">
<querypop @getPop="getPop" title="身份證號(hào)" showpop="0"></querypop>
<regist title="修改信息" :population="state.population" operate=4 ></regist>
</div>
</template>
<script setup>
import { reactive } from 'vue';
import regist from '@/components/Regist'
import querypop from '@/components/QueryPop'
let state=reactive({population:undefined})
function getPop(list){
state.population=list[0];
}
</script>
/views/population/Del
<template>
<div class="del">
<querypop title="身份證號(hào)" operate="del"></querypop>
</div>
</template>
<script setup>
import { reactive } from 'vue';
import regist from '@/components/Regist'
import querypop from '@/components/QueryPop'
</script>
后端
1、后端實(shí)體類 com.neuedu.po
import lombok.Data;
package com.neuedu.po;
import lombok.Data;
@Data
public class ConstantType {
private Integer id;
private String constantTypeCode;
private String constantTypeName;
}
@Data
public class ConstantItem {
private Integer id;
private String constantName;
private Integer constantTypeId;
}
@Data
public class Person {
private Integer id;
private String name;
private Integer sex;
private Integer relation;
private String birthday;
private String idNumber;
private Integer educationalLevel;
private Integer marriage;
private Integer militaryService;
private Integer nation;
private Integer bloodType;
private String job;
private String populationId;
private String religiousBelief;
}
@Data
public class PersonLog {
private Integer id;
private String populationId;
private Integer personId;
private String operateType;
private String operateDetail;
private String operateTime;
private Integer operateUser;
}
@Data
public class Population {
private String id;
private String populationType;
private String houseHolder;
private String address;
}
@Data
public class PopulationLog {
private Integer id;
private String populationId;
private String operateType;
private String operateDetail;
private String operateTime;
private Integer operateUser;
}
@Data
public class ResultMsg {
//返回碼 0-成功 -1 用戶名錯(cuò)誤 -2密碼錯(cuò)誤
int code;
//描述 成功/錯(cuò)誤原因
String message;
}
@Data
public class User {
private int id;
private String userName;
private String password;
private String role;
}
2、后端 controller
@RestController
@RequestMapping("/constantType")
public class ConstantTypeController {
@Autowired
IConstantTypeService service;
@RequestMapping("/findAll")
public Map<String,List<ConstantItem>> findAll(){
Map<String,List<ConstantItem>> map=service.findAll();
return map;
}
}
@RestController
@RequestMapping("population")
public class PopulationController {
@Autowired
IPopulationService service;
@PostMapping("save")
public ResultMsg save(Person person,Population population,String operate){
System.out.println(person);
System.out.println(population);
//System.out.println(operate);
ResultMsg msg=service.save(person,population,operate);
return msg;
}
@RequestMapping("/findByIdNumber")
public List<Map<String,Object>> findByIdNumber(String idNumber){
List<Map<String,Object>> list = service.findByIdNumber(idNumber);
return list;
}
@RequestMapping("/findAll")
public List<Map<String,Object>> findAll(String idNumber){
List<Map<String,Object>> list = service.findAll(idNumber);
return list;
}
@RequestMapping("/del")
public int del(String idNumber){
int result =service.del(idNumber);
return result;
}
}
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
IUserService service;
@RequestMapping("/login")
public ResultMsg login(@RequestBody User user){
return service.login(user);
}
}
3 后端 service##
@Service
public class UserServiceImpl implements IUserService {
@Autowired
UserMapper mapper;
@Override
public ResultMsg login(User user) {
//根據(jù)用戶名查詢用戶
User db_user=mapper.getUserByUserName(user.getUserName());
//如果沒(méi)有查詢到,直接回復(fù)用戶名不存在
ResultMsg rm=new ResultMsg();
if(db_user==null){
rm.setCode(-1);
rm.setMessage("用戶名錯(cuò)誤");
}else if(!db_user.getPassword().equals(user.getPassword())){
//如果查詢到,比對(duì)數(shù)據(jù)庫(kù)里的密碼與傳過(guò)來(lái)的密碼是否一致
//如果不一致,直接回復(fù)密碼錯(cuò)誤
rm.setCode(-2);
rm.setMessage("密碼錯(cuò)誤");
//如果一致,返回成功
}else{
rm.setCode(0);
rm.setMessage("登錄成功");
}
return rm;
}
}
@Transactional
@Service
public class PopulationServiceImpl implements IPopulationService {
@Autowired
PersonMapper personMapper;
@Autowired
PersonLogMapper personLogMapper;
@Autowired
PopulationMapper populationMapper;
@Autowired
PopulationLogMapper populationLogMapper;
@Autowired
PersonHistoryMapper personHistoryMapper;
@Autowired
PopulationHistoryMapper populationHistoryMapper;
public void getLog(Person person,Population population,String operate){
PersonLog personLog = new PersonLog();
personLog.setPersonId(person.getId());
personLog.setPopulationId(person.getPopulationId());
personLog.setOperateType(operate);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(new Date());
personLog.setOperateTime(date);
personLog.setOperateUser(1);
personLog.setOperateDetail("xxxx");
int restult3 = personLogMapper.save(personLog);
PopulationLog populationLog = new PopulationLog();
populationLog.setPopulationId(person.getPopulationId());
populationLog.setOperateType(operate);
populationLog.setOperateDetail("xxxxx");
populationLog.setOperateTime(date);
populationLog.setOperateUser(1);
int restult4 = populationLogMapper.save(populationLog);
}
@Override
public ResultMsg save(Person person, Population population, String operate) {
ResultMsg msg = new ResultMsg();
if (operate.equals("0")) {
String populationId = UuidGenerate.get();
person.setPopulationId(populationId);
population.setId(populationId);
int restult1 = populationMapper.save(population);
if (restult1 > 0) {
int restult2 = personMapper.save(person);
if (restult2 > 0) {
PopulationServiceImpl service = new PopulationServiceImpl();
service.getLog(person, population, operate);
}
}
msg.setCode(0);
msg.setMessage("立戶成功");
}else if(operate.equals("1")||operate.equals("2")||operate.equals("3")){
int restult1 = personMapper.save(person);
PopulationServiceImpl service = new PopulationServiceImpl();
service.getLog(person, population, operate);
if(restult1>0){
msg.setCode(0);
msg.setMessage("操作成功");
}
}else if("4".equals(operate)){
//修改
//修改人員信息
//修改戶口信息
//添加人員操作日志
//添加戶口操作日志
population.setId(person.getPopulationId());
int result1 =populationMapper.update(population);
if(result1>0){
int result2 = personMapper.update(person);
if(result2>0){
PopulationServiceImpl service = new PopulationServiceImpl();
service.getLog(person, population, operate);
}
}
msg.setCode(0);
msg.setMessage("成功");
}
return msg;
}
@Override
public List<Map<String, Object>> findByIdNumber(String idNumber) {
List<Map<String, Object>> list = personMapper.findByIdNumber(idNumber);
return list;
}
@Override
public List<Map<String, Object>> findAll(String idNumber) {
List<Map<String, Object>> list = personMapper.findAll(idNumber);
return list;
}
@Override
public int del(String idNumber) {
int count=personMapper.selectAll(idNumber);
if(count==1){
int result4 = populationHistoryMapper.add(idNumber);
int result3=personHistoryMapper.add(idNumber);
int result =personMapper.del(idNumber);
int result2 =populationMapper.del(idNumber);
}else{
int result3=personHistoryMapper.add(idNumber);
int result =personMapper.del(idNumber);
}
return 1;
}
}
@Service
public class ConstantTypeServiceImpl implements IConstantTypeService {
@Autowired
ConstantTypeMapper mapper;
@Autowired
ConstantItemMapper itemMapper;
@Override
public Map<String, List<ConstantItem>> findAll() {
List<ConstantType> list=mapper.findAll();
Map<String,List<ConstantItem>> map=new HashMap();
for(ConstantType type:list){
//獲取分類代碼
int typeId=type.getId();
//根據(jù)typeId去查詢下面的項(xiàng)目
List<ConstantItem> itemList=itemMapper.findByTypeId(typeId);
map.put(type.getConstantTypeCode(),itemList);
}
return map;
}
}
mapper
public interface UserMapper {
@Select("select * from user where userName=#{userName}")
User getUserByUserName(String userName);
}
public interface ConstantTypeMapper {
@Select("select * from constanttype")
List<ConstantType> findAll();
}
public interface ConstantItemMapper {
@Select("select * from constantitem where constantTypeId=#{typeId}")
List<ConstantItem> findByTypeId(int typeId);
}
public interface PersonMapper {
@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert("insert into person values "
+ "(null,#{name},#{sex},#{relation},#{birthday},"
+ "#{idNumber},#{educationalLevel},#{marriage},"
+ "#{militaryService},#{nation},#{bloodType},#{job},"
+ "#{populationId},#{religiousBelief},null)")
int save(Person person);
@Select("select a.*,b.populationType,b.houseHolder,b.address "
+" from person a,population b "
+" where a.populationId = b.id "
+" and a.idNumber =#{idNumber}")
List<Map<String, Object>> findByIdNumber(String idNumber);
@Select("select a.*,b.populationType,b.houseHolder,b.address "
+" from person a,population b "
+" where a.populationId = b.id "
+" and a.populationId = (select populationId from person where idNumber = #{idNumber})")
List<Map<String, Object>> findAll(String idNumber);
@Update("update person set name=#{name},sex=#{sex},relation=#{relation},"
+ "educationalLevel=#{educationalLevel},marriage=#{marriage},"
+ "populationId=#{populationId},religiousBelief=#{religiousBelief} where idNumber=#{idNumber}")
int update(Person person);
@Delete("delete from person where idNumber=#{idNumber}")
int del(String idNumber);
@Select("select count(*) from person where populationId=(select populationId from person where idNumber=#{idNumber})")
int selectAll(String idNumber);
}
public interface PersonHistoryMapper {
@Insert("insert into person_history select * from person where idNumber = #{idNumber} "
+ " and not EXISTS(select * from person_history where idNumber=#{idNumber})")
int add(String idNumber);
}
public interface PersonLogMapper {
@Insert("insert into person_log values (null,#{populationId},#{personId},#{operateType},#{operateTime},#{operateUser},#{operateDetail})")
int save(PersonLog personLog);
}
public interface PopulationMapper {
int save(Population population);
@Update("update population set populationType=#{populationType},"
+ "houseHolder=#{houseHolder},address=#{address} where id=#{id}")
int update(Population population);
@Delete("delete from population where id=(select populationId from person_history where idNumber=#{idNumber})")
int del(String idNumber);
}
public interface PopulationHistoryMapper {
@Insert("insert into population_history select * from population"
+ " where id = (select populationId from person where idNumber = #{idNumber}) ")
int add(String idNumber);
}
public interface PopulationHistoryMapper {
@Insert("insert into population_history select * from population"
+ " where id = (select populationId from person where idNumber = #{idNumber}) ")
int add(String idNumber);
}