You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

513 lines
14 KiB

<template>
<uni-forms ref="form" :modelValue="formData" :rules="rules" label-width="210rpx" class="wrapper">
<view class="container">
<view class="title">办理信息</view>
<uni-forms-item label="申请时间" name="applyDate" required>
<uni-datetime-picker type="date" v-model="formData.applyDate" :border="false" placeholder="请选择申请时间" />
</uni-forms-item>
<uni-forms-item label="是否本人申请" name="isSelf" required>
<uni-data-checkbox v-model="formData.isSelf" :localdata="isSelf" @change="handleIsSelfChange" />
</uni-forms-item>
<uni-forms-item label="代理人姓名" name="agentName" required v-if="formData.isSelf === '0'">
<uni-easyinput :input-border="false" placeholder="代理人姓名" v-model="formData.agentName" />
</uni-forms-item>
<uni-forms-item label="关系" name="relation" required v-if="formData.isSelf === '0'">
<uni-data-checkbox v-model="formData.relation" :localdata="relation" />
</uni-forms-item>
</view>
<view class="container">
<view class="title">申请人信息</view>
<uni-forms-item label="申请人姓名" name="applicantEmpName" required>
<uni-easyinput :input-border="false" placeholder="申请人姓名" v-model="formData.applicantEmpName" />
</uni-forms-item>
<uni-forms-item label="性别" name="sex" required>
<uni-data-checkbox v-model="formData.sex" :localdata="sex" />
</uni-forms-item>
<uni-forms-item label="警号" name="empNo" required>
<uni-easyinput :input-border="false" placeholder="警号" v-model="formData.empNo" />
</uni-forms-item>
<uni-forms-item label="单位" name="departId" required>
<uni-data-picker :localdata="departs" placeholder="请选择单位" :border="false"
:map="{text:'shortName', value: 'id'}" v-model="formData.departId" />
</uni-forms-item>
<uni-forms-item label="身份证" name="idCode" required>
<uni-easyinput :input-border="false" placeholder="身份证" v-model="formData.idCode" />
</uni-forms-item>
<uni-forms-item label="出生年月" name="birthday">
<uni-datetime-picker type="date" v-model="formData.birthday" :border="false" placeholder="请选择出生年月" />
</uni-forms-item>
<uni-forms-item label="联系电话" name="mobile" required>
<uni-easyinput :input-border="false" placeholder="联系电话" v-model="formData.mobile" />
</uni-forms-item>
<uni-forms-item label="职务" name="job" >
<uni-easyinput :input-border="false" placeholder="职务" v-model="formData.job" />
</uni-forms-item>
<uni-forms-item label="警衔" name="policeRank" >
<uni-easyinput :input-border="false" placeholder="警衔" v-model="formData.policeRank" />
</uni-forms-item>
<uni-forms-item label="文化程度" name="levelEducation">
<uni-data-select
v-model="formData.levelEducation"
:localdata="levelEducation"
></uni-data-select>
</uni-forms-item>
<uni-forms-item label="政治面貌" name="politicCountenance" >
<uni-data-select
v-model="formData.politicCountenance"
:localdata="politicCountenance"
></uni-data-select>
</uni-forms-item>
<uni-forms-item label="开户行" name="bankCard" required>
<uni-data-select
v-model="formData.bankCard"
:localdata="bank.map(item => {
return {
text: item.dictLabel,
value: item.dictValue
}
})"
></uni-data-select>
</uni-forms-item>
<uni-forms-item label="所属支行" name="bankBranch" required>
<uni-easyinput :input-border="false" placeholder="所属支行" v-model="formData.bankBranch" />
</uni-forms-item>
<uni-forms-item label="银行账号" name="bankCardAccount" required>
<uni-easyinput :input-border="false" placeholder="银行账号" v-model="formData.bankCardAccount" />
</uni-forms-item>
</view>
<view class="container">
<view class="title">案发情况</view>
<uni-forms-item label="事发时间" name="happenTime" required>
<uni-datetime-picker type="datetime" v-model="formData.happenTime" :border="false" placeholder="请选择事发时间" />
</uni-forms-item>
<uni-forms-item label="事实与理由" name="factReason" required>
<uni-easyinput type="textarea" :input-border="false" placeholder="事实与理由" v-model="formData.factReason" />
</uni-forms-item>
<uni-forms-item label="案发环节" name="incidentLink" required>
<uni-data-select
v-model="formData.incidentLink"
:localdata="incidentLink.map(item => {
return {
text: item.dictLabel,
value: item.dictValue
}
})"
@change="(val) => {
formData.incidentLinkName = getDictLabel(incidentLink, val)
}"
></uni-data-select>
</uni-forms-item>
<uni-forms-item label="受伤程度" name="injurySeverity" required>
<uni-data-select
v-model="formData.injurySeverity"
:localdata="injurySeverity.map(item => {
return {
text: item.dictLabel,
value: item.dictValue
}
})"
@change="(val) => {
formData.injurySeverityName = getDictLabel(injurySeverity, val)
}"
></uni-data-select>
</uni-forms-item>
<uni-forms-item label="侵权形式" name="formsOfTort" required>
<uni-data-picker :localdata="formsOfTort" placeholder="侵权形式" :border="false" :map="{text:'dictLabel', value: 'dictValue'}" v-model="formData.formsOfTort"
@change="(val) => {
formData.formsOfTortName = detail.value[0].text
}"
/>
</uni-forms-item>
<uni-forms-item label="侵权人姓名" name="infringerName">
<uni-easyinput :input-border="false" placeholder="侵权人姓名" v-model="formData.infringerName" />
</uni-forms-item>
<uni-forms-item label="处理方式" name="infringerHandle" required>
<uni-data-checkbox v-model="formData.infringerHandle" :localdata="infringerHandle" />
</uni-forms-item>
</view>
<view class="container">
<view class="title">佐证材料</view>
<uni-forms-item label="附件" name="documentFile" label-position="top" required>
<upload v-model="formData.documentFile" />
</uni-forms-item>
</view>
<view class="container">
<view class="title">呈报审批</view>
<uni-forms-item label="主办单位" name="handleDepartId" required>
<uni-data-picker :localdata="secondDeparts" placeholder="请选择主办单位" :border="false"
:map="{text:'shortName', value: 'id'}" v-model="formData.handleDepartId" />
</uni-forms-item>
<uni-forms-item label="审批人" name="approverEmpNo" required>
<view>{{ formData.approver }}</view>
</uni-forms-item>
</view>
</uni-forms>
<view class="footer col-24 flex gap-8">
<button class="col-12" @tap="back">取消</button>
<button type="primary" @tap="submit" class="col-12">确定</button>
</view>
</template>
<script>
import { getDictLabel } from '@/common/util'
import moment from 'moment'
import store from '@/store'
import { getDictOptions } from '@/common/dict'
import {
departTree, secondList
} from '@/api/depart'
import {
addComfort,
listRightPersonByDepartId
} from '@/api/comfort'
let _this;
export default {
data() {
return {
formData: {
applyDate: moment().format('YYYY-MM-DD'),
documentFile: [],
},
departs: [],
secondDeparts: [],
rules: {
applyDate: {
rules: [{
required: true,
errorMessage: '请选择申请时间',
}]
},
isSelf: {
rules: [{
required: true,
errorMessage: '请选择是否本人申请',
}]
},
agentName: {
rules: [{
required: true,
errorMessage: '请输入代理人姓名',
}]
},
relation: {
rules: [{
required: true,
errorMessage: '请选择代理人关系',
}]
},
applicantEmpName: {
rules: [{
required: true,
errorMessage: '请输入申请人姓名',
}]
},
sex: {
rules: [{
required: true,
errorMessage: '请选择性别',
}]
},
empNo: {
rules: [{
required: true,
errorMessage: '请输入警号',
}]
},
departId: {
rules: [{
required: true,
errorMessage: '请选择单位',
}]
},
idCode: {
rules: [{
required: true,
errorMessage: '请输入身份证',
}]
},
mobile: {
rules: [{
required: true,
errorMessage: '请输入联系方式',
}]
},
bankCard: {
rules: [{
required: true,
errorMessage: '请选择开户行',
}]
},
bankBranch: {
rules: [{
required: true,
errorMessage: '请输入所属支行',
}]
},
bankCardAccount: {
rules: [{
required: true,
errorMessage: '请输入银行账号',
}]
},
happenTime: {
rules: [{
required: true,
errorMessage: '请选择事发时间',
}]
},
factReason: {
rules: [{
required: true,
errorMessage: '请输入事实与理由',
}]
},
incidentLink: {
rules: [{
required: true,
errorMessage: '请选择案发环节',
}]
},
injurySeverity: {
rules: [{
required: true,
errorMessage: '请选择受伤程度',
}]
},
formsOfTort: {
rules: [{
required: true,
errorMessage: '请选择侵权形式',
}]
},
infringerHandle: {
rules: [{
required: true,
errorMessage: '请选择处理方式',
}]
},
handleDepartId: {
rules: [{
required: true,
errorMessage: '请选择主办单位',
}]
},
approverEmpNo: {
rules: [{
required: true,
errorMessage: '未配置审批人,当前主办单位的未配置维权专干(请联系系统管理员)',
}]
},
// documentFile: {
// rules: [{
// validateFunction: function(rule,value,data,callback){
// if (!value || value.length === 0) {
// callback('请上传附件')
// }
// return true
// }
// }]
// },
},
isSelf: [
{
text: '是',
value: '1'
},
{
text: '否',
value: '0'
}
],
relation: [
{
text: '同事',
value: '1'
},
{
text: '亲属',
value: '2'
}
],
sex: [
{
text: '男',
value: '0'
},
{
text: '女',
value: '1'
}
],
levelEducation: [
{
text: '高中',
value: '高中'
},
{
text: '大专',
value: '大专'
},
{
text: '本科',
value: '本科'
},
{
text: '研究生及以上',
value: '研究生及以上'
}
],
politicCountenance: [
{
text: '群众',
value: '群众'
},
{
text: '团员',
value: '团员'
},
{
text: '预备党员',
value: '预备党员'
},
{
text: '党员',
value: '党员'
}
],
infringerHandle: [
{
text: '行政处罚',
value: '行政处罚'
},
{
text: '刑事处罚',
value: '刑事处罚'
},
]
}
},
watch : {
'formData.handleDepartId': function(val) {
listRightPersonByDepartId(val).then((data) => {
if (data.length) {
this.formData.approverEmpNo = data.map((item) => item.empNo);
this.formData.approver = data
.map((item) => item.empName)
.join("、");
} else {
delete this.formData.approverEmpNo;
delete this.formData.approver;
}
});
},
},
setup() {
const formsOfTort = getDictOptions('formsOfTort')
const injurySeverity = getDictOptions('injurySeverity')
const incidentLink = getDictOptions('incidentLink')
const bank = getDictOptions('bank')
return {
formsOfTort,
injurySeverity,
incidentLink,
bank,
getDictLabel
}
},
onLoad() {
_this = this;
departTree().then(data => {
this.departs = data[0].children
})
secondList().then(data => {
this.secondDeparts = data
})
},
methods: {
submit() {
this.$refs.form.validate().then(res => {
this.formData.happenTime = moment(this.formData.happenTime, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DD HH:mm')
addComfort(this.formData).then(data => {
_this.formData = {
applyDate: moment().format('YYYY-MM-DD'),
documentFile: [],
}
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 3000
})
uni.navigateBack({
});
})
}).catch(err => {
uni.showToast({
title: '请检查表单必填项',
icon: 'none',
duration: 3000
})
})
},
back() {
uni.navigateBack({
});
},
handleIsSelfChange() {
console.log('handleIsSelfChange')
if (this.formData.isSelf === '1') {
this.formData.applicantEmpName = store.state.user.nickName
this.formData.empNo = store.state.user.empNo
this.formData.idCode = store.state.user.userName
this.formData.mobile = store.state.user.mobile
this.formData.departId = store.state.user.departId
if (store.state.user.userName.length === 18) {
this.formData.birthday = moment(store.state.user.userName.substr(6, 8), 'YYYYMMDD').format('YYYY-MM-DD')
this.formData.sex = getSex(store.state.user.userName)
}
}
}
}
}
function getSex(idCard) {
let res = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
if (idCard && res.test(idCard)) {
let genderCode = idCard.charAt(16);
if (parseInt(genderCode) % 2 == 0) {
return '1';
}
return '0';
}
return '';
}
</script>
<style lang="scss" scoped>
.wrapper {
background-color: #f5f5f5;
padding-bottom: 72px;
}
.container {
background-color: #fff;
margin-bottom: 24rpx;
}
.footer {
background-color: #fff;
border-top: 1px solid #eee;
}
.title {
margin-bottom: 16rpx;
}
</style>