Compare commits

..

2 Commits

Author SHA1 Message Date
guoyuepeng a830b6a4c7 1.相关方车辆入港申请 2025-07-23 09:32:58 +08:00
guoyuepeng dd244fc051 1.相关方app车辆申请 2025-07-21 15:32:28 +08:00
7 changed files with 220 additions and 39 deletions

View File

@ -57,6 +57,7 @@ export const setTaskSave = (params) => post('/app/Task/init', params) //八项
export const getCurrentNextOperation = (params) => post('/app/Task/getSupplementInfo', params) //获取当前任务的下一步操作 export const getCurrentNextOperation = (params) => post('/app/Task/getSupplementInfo', params) //获取当前任务的下一步操作
export const addFormInfo = (params) => post('/app/Task/addSupplementInfo', params) //审批过程中添加其他信息 export const addFormInfo = (params) => post('/app/Task/addSupplementInfo', params) //审批过程中添加其他信息
export const getDepartmentTree = (params) => post('/app/util/getDepartmentTree', params) //获取部门树 export const getDepartmentTree = (params) => post('/app/util/getDepartmentTree', params) //获取部门树
export const getTree = (params) => post('/app/util/getTree', params) //获取部门树
export const getUserList = (params) => post('/app/util/getUserList', params) //获取人员 export const getUserList = (params) => post('/app/util/getUserList', params) //获取人员
export const getToDoTaskList = (params) => post('/app/Task/getAllList', params) //获取待办列表 export const getToDoTaskList = (params) => post('/app/Task/getAllList', params) //获取待办列表
export const getTaskTechnologicalProcess = (params) => post('/app/Task/getAgencyList', params) //获取流程 export const getTaskTechnologicalProcess = (params) => post('/app/Task/getAgencyList', params) //获取流程
@ -86,3 +87,11 @@ export const compareUserExamFaceCertify = (params) => post('/app/user/compareExa
export const compareUserExamVideoFaceCertify = (params) => post('/app/user/compareExamVideoFace', params) // 考试视频人脸认证 export const compareUserExamVideoFaceCertify = (params) => post('/app/user/compareExamVideoFace', params) // 考试视频人脸认证
export const getClassInfoByParams = (params) => post("/app/stagestudentrelation/getClassInfoByParams", params ); // 获取班级信息 export const getClassInfoByParams = (params) => post("/app/stagestudentrelation/getClassInfoByParams", params ); // 获取班级信息
// ********************* end *********************** // ********************* end ***********************
export const goCheckLicenceNo = (params) => post("/vehiclemessage/goCheckLicenceNo", params);
export const getVehiclemessagePageList = (params) => post("/vehiclemessage/getPageList", params);
export const getVehiclemessageView = (params) => post("/vehiclemessage/showVehicleMessage", params);
export const setVehiclemessageSave = (params) => post("/vehiclemessage/addVehicleMessage", params);
export const setVehiclemessageUpdate = (params) => post("/vehiclemessage/updateVehicleMessage", params);
export const getAuditUserList = (params) => post("/sys/user/audit/user", params);
export const setVehiclemessageDelete = (params) => post("/vehiclemessage/deleteVehicleMessage", params);

View File

@ -9,16 +9,16 @@
:is-show-clear="isShowClear" :is-show-clear="isShowClear"
theme-color="#3377ff" theme-color="#3377ff"
page-height="92vh" page-height="92vh"
label-key="DEPARTMENT_NAME" label-key="name"
value-key="DEPARTMENT_ID" value-key="departmentId"
children-key="nodes" children-key="list"
@confirm="fnTreeConfirm" @confirm="fnTreeConfirm"
@cancel="$emit('update:visible', false)" @cancel="$emit('update:visible', false)"
/> />
</template> </template>
<script> <script>
import {getDepartmentTree} from "@/api"; import {getTree} from "@/api";
export default { export default {
props: { props: {
@ -34,6 +34,14 @@ export default {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
type:{
type: String,
default: "2",
},
corpId:{
type: String,
default: "",
}
}, },
data() { data() {
return { return {
@ -55,13 +63,12 @@ export default {
this.$emit("update:visible", false); this.$emit("update:visible", false);
}, },
async fnGetData() { async fnGetData() {
const resData = await getDepartmentTree({ const resData = await getTree({
loading: false, loading: false,
// postMethod: 'application/json', getDepByCorpType:1,
TYPE:'2', corpTypeList:[0,2]
CORP_ID:this.$store.getters.getUserInfo.CORPINFO_ID,
}); });
this.treeData = resData.tree.tree; this.treeData = resData.deptTree ;
} }
}, },
} }

View File

@ -23,6 +23,8 @@
:visible.sync="visible" :visible.sync="visible"
:value="id" :value="id"
:is-show-clear="isShowClear" :is-show-clear="isShowClear"
:type="type"
:corp-id="corpId"
@confirm="fnConfirm" @confirm="fnConfirm"
/> />
</view> </view>
@ -74,6 +76,14 @@ export default {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
type:{
type: String,
default: "2",
},
corpId:{
type: String,
default: "",
}
}, },
data() { data() {
return { return {
@ -83,8 +93,8 @@ export default {
methods: { methods: {
fnConfirm(event) { fnConfirm(event) {
if (event.length > 0) { if (event.length > 0) {
this.$emit('update:name', event[0].DEPARTMENT_NAME) this.$emit('update:name', event[0].name)
this.$emit('update:id', event[0].DEPARTMENT_ID) this.$emit('update:id', event[0].departmentId)
} else { } else {
this.$emit('update:name', '') this.$emit('update:name', '')
this.$emit('update:id', '') this.$emit('update:id', '')

View File

@ -18,7 +18,7 @@ export default {
return { return {
baseList: [ baseList: [
{ {
title: '股份公司车辆管理', title: '相关方车辆管理',
url: '/pages/door_access_control/vehicle_info/index' url: '/pages/door_access_control/vehicle_info/index'
}, },
] ]

View File

@ -15,19 +15,36 @@
<u-input v-model="form.VEHICLE_TYPE_NAME" border="none" readonly input-align="right"/> <u-input v-model="form.VEHICLE_TYPE_NAME" border="none" readonly input-align="right"/>
<u-icon name="arrow-right"></u-icon> <u-icon name="arrow-right"></u-icon>
</u-form-item> </u-form-item>
<app-department label="车辆所属部门" :id.sync="form.DEPARTMENT_ID" :name.sync="form.DEPARTMENT_NAME" <u-form-item label="范围" prop="portId" borderBottom required
:form.sync="form" prop="DEPARTMENT_ID" clear-key="USER_NAME,USER_ID"/> @click="fnSingleChoiceClick('portId')">
<app-personnel :id.sync="form.USER_ID" :name.sync="form.USER_NAME" :department-id="form.DEPARTMENT_ID" <u-input v-model="form.portName" border="none" readonly input-align="right"/>
prop="USER_ID" label="负责人"/> <u-icon name="arrow-right"></u-icon>
</u-form-item>
<u-cell title="车辆所属部门" :value="$store.getters.getUserInfo.DEPARTMENT_NAME"></u-cell>
<u-cell title="负责人" :value="$store.getters.getUserInfo.NAME"></u-cell>
<app-time v-model="form.VISIT_START_TIME" prop="VISIT_START_TIME" label="有效期开始"/> <app-time v-model="form.VISIT_START_TIME" prop="VISIT_START_TIME" label="有效期开始"/>
<app-time v-model="form.VISIT_END_TIME" prop="VISIT_END_TIME" label="有效期结束"/> <app-time v-model="form.VISIT_END_TIME" prop="VISIT_END_TIME" label="有效期结束"/>
<app-department label="审核部门" :id.sync="form.AUDITOR_DEPARTMENT_ID" :name.sync="form.AUDITOR_DEPARTMENT_NAME" <!-- <app-department label="审核公司" :id.sync="form.AUDITOR_DEPARTMENT_ID" :name.sync="form.AUDITOR_DEPARTMENT_NAME"-->
prop="AUDITOR_DEPARTMENT_ID"/> <!-- type='0'-->
<!-- prop="AUDITOR_DEPARTMENT_ID"/>-->
<u-form-item label="审核公司" prop="corpInfo" borderBottom required
@click="fnSingleChoiceClick('corpInfoList')">
<u-input v-model="form.corpInfoName" border="none" readonly input-align="right"/>
<u-icon name="arrow-right"></u-icon>
</u-form-item>
<u-form-item label="审批人" prop="QY_AUDITOR" borderBottom required
@click="fnSingleChoiceClick('QY_AUDITOR')">
<u-input v-model="form.QY_AUDITOR_NAME" border="none" readonly input-align="right"/>
<u-icon name="arrow-right"></u-icon>
</u-form-item>
</u-form> </u-form>
<view class="mt-10"> <view class="mt-10">
<u-button type="primary" text="提交" @click="$u.debounce(fnSubmit, 1000, true)"/> <u-button type="primary" text="提交" @click="$u.debounce(fnSubmit, 1000, true)"/>
</view> </view>
</view> </view>
<u-picker :show="picker.show" :columns="picker.columns" :keyName="picker.key" :key="picker.type"
:defaultIndex="picker.defaultIndex" @confirm="fnSingleChoiceConfirm" @cancel="fnSingleChoiceCancel" />
</view> </view>
</template> </template>
@ -35,7 +52,8 @@
import AppTime from "@/components/time/index.vue"; import AppTime from "@/components/time/index.vue";
import AppDepartment from "@/components/department/index.vue"; import AppDepartment from "@/components/department/index.vue";
import AppPersonnel from "@/components/personnel/index.vue"; import AppPersonnel from "@/components/personnel/index.vue";
import {addVehicleMessage,goCheckLicenceNo,getVehiclemessageView, setVehiclemessageSave,getCorpInfoList,
setVehiclemessageUpdate,getAuditUserList} from "@/api";
export default { export default {
components: { components: {
AppTime, AppTime,
@ -52,6 +70,11 @@ export default {
{id: '3', name: "绿牌"}, {id: '3', name: "绿牌"},
{id: '4', name: "黑牌"}, {id: '4', name: "黑牌"},
], ],
VEHICLE_PORT_LIST: [
{id: "0", name: "全部"},
{id: "1", name: "东港区"},
{id: "2", name: "西港区"},
],
VEHICLE_TYPE_LIST: [{id: '1', name: "轿车"}], VEHICLE_TYPE_LIST: [{id: '1', name: "轿车"}],
form: { form: {
LICENCE_TYPE: '', LICENCE_TYPE: '',
@ -67,6 +90,9 @@ export default {
VISIT_END_TIME: '', VISIT_END_TIME: '',
AUDITOR_DEPARTMENT_ID: '', AUDITOR_DEPARTMENT_ID: '',
AUDITOR_DEPARTMENT_NAME: '', AUDITOR_DEPARTMENT_NAME: '',
portId: '',
QY_AUDITOR:'',
QY_AUDITOR_NAME:''
}, },
rules: { rules: {
LICENCE_TYPE: [{type: 'string', required: true, message: '请选择车牌类型', trigger: ['blur', 'change']}], LICENCE_TYPE: [{type: 'string', required: true, message: '请选择车牌类型', trigger: ['blur', 'change']}],
@ -85,6 +111,7 @@ export default {
type: 'picker', type: 'picker',
defaultIndex: [] defaultIndex: []
}, },
corpInfoList: [],
} }
}, },
onLoad(event) { onLoad(event) {
@ -93,7 +120,9 @@ export default {
uni.setNavigationBarTitle({ uni.setNavigationBarTitle({
title: "重新申请", title: "重新申请",
}); });
this.getData();
} }
this.getCorpInfoList()
}, },
computed: { computed: {
userInfo() { userInfo() {
@ -109,6 +138,20 @@ export default {
if (event === 'VEHICLE_TYPE') { if (event === 'VEHICLE_TYPE') {
this.picker.columns = [this.VEHICLE_TYPE_LIST] this.picker.columns = [this.VEHICLE_TYPE_LIST]
} }
if (event === 'portId') {
this.picker.columns = [this.VEHICLE_PORT_LIST]
}
if (event === 'corpInfoList') {
this.picker.columns = [this.corpInfoList]
this.form.QY_AUDITOR = ''
this.form.QY_AUDITOR_NAME = ''
}
if (event === 'QY_AUDITOR') {
this.form.QY_AUDITOR = ''
this.form.QY_AUDITOR_NAME = ''
this.picker.columns = [this.userList]
}
this.picker.show = true this.picker.show = true
}, },
fnSingleChoiceConfirm(event) { fnSingleChoiceConfirm(event) {
@ -120,6 +163,21 @@ export default {
this.form.VEHICLE_TYPE = event.value[0].id this.form.VEHICLE_TYPE = event.value[0].id
this.form.VEHICLE_TYPE_NAME = event.value[0].name this.form.VEHICLE_TYPE_NAME = event.value[0].name
} }
if (this.picker.type === 'portId') {
this.form.portId = event.value[0].id
this.form.portName = event.value[0].name
}
console.info(' this.picker.type')
console.info( this.picker.type)
if (this.picker.type === 'corpInfoList') {
this.form.corpInfoId = event.value[0].corpinfo_ID
this.form.corpInfoName = event.value[0].name
this.getUserList(event.value[0].corpinfo_ID)
}
if (this.picker.type === 'QY_AUDITOR') {
this.form.QY_AUDITOR = event.value[0].userId
this.form.QY_AUDITOR_NAME = event.value[0].name
}
this.fnSingleChoiceCancel() this.fnSingleChoiceCancel()
}, },
fnSingleChoiceCancel() { fnSingleChoiceCancel() {
@ -128,16 +186,63 @@ export default {
async fnSubmit() { async fnSubmit() {
try { try {
await this.$refs.formRef.validate() await this.$refs.formRef.validate()
const checkRes = await goCheckLicenceNo({
LICENCE_NO: this.form.LICENCE_NO,
licenceType: this.form.LICENCE_TYPE,
VEHICLE_ID : this.VEHICLE_ID || ''
});
if (checkRes.exists === '1') {
uni.$u.toast('车牌号已存在')
return
}
const params = { const params = {
...this.form, ...this.form,
DEPARTMENT_ID: this.userInfo.DEPARTMENT_ID, DEPARTMENT_ID: this.userInfo.DEPARTMENT_ID,
USER_ID: this.userInfo.USER_ID, USER_ID: this.userInfo.USER_ID,
VEHICLE_DEPARTMENT_ID: this.userInfo.DEPARTMENT_ID,
VEHICLE_DEPARTMENT_NAME: this.userInfo.DEPARTMENT_NAME,
carForm:'2',
OLD_LICENCE_NO:this.form.LICENCE_NO
} }
console.log(params) // const resData = await addVehicleMessage(params);
this.VEHICLE_ID ? await setVehiclemessageUpdate(params) : await setVehiclemessageSave(params)
uni.navigateBack(); //
} catch { } catch {
uni.$u.toast('请补全必填项') uni.$u.toast('请补全必填项')
} }
} },
async getCorpInfoList() {
const resData = await getCorpInfoList()
this.corpInfoList = resData.list.corpInfoDos
},
async getUserList(corpinfoId) {
const resData = await getAuditUserList(
{corpinfoId: corpinfoId}
);
this.userList = resData.data;
},
async getData() {
const resData = await getVehiclemessageView({VEHICLE_ID: this.$route.query.VEHICLE_ID});
this.form = resData.pd;
const matchedItem = this.VEHICLE_LICENSE_PLATE_TYPE_LIST.find(item => item.id === resData.pd.LICENCE_TYPE.toString());
if (matchedItem) {
this.form.LICENCE_TYPE_NAME = matchedItem.name;
this.form.LICENCE_TYPE = resData.pd.LICENCE_TYPE.toString();
}
const vehicleType = this.VEHICLE_TYPE_LIST.find(item => item.id === resData.pd.VEHICLE_TYPE.toString());
if (vehicleType) {
this.form.VEHICLE_TYPE_NAME = vehicleType.name;
this.form.VEHICLE_TYPE = resData.pd.VEHICLE_TYPE.toString();
}
const vehiclePort = this.VEHICLE_PORT_LIST.find(item => item.id === resData.pd.portId.toString());
if (vehiclePort) {
this.form.portName = vehiclePort.name;
this.form.portId = resData.pd.portId.toString();
}
this.form.corpInfoName = this.form.QY_AUDITOR_CORP_NAME
this.form.corpInfoId = this.form.QY_AUDITOR_CORP_ID
},
}, },
} }
</script> </script>

View File

@ -25,17 +25,14 @@
<text>车辆类型{{ VEHICLE_TYPE_MAP[item.VEHICLE_TYPE] }}</text> <text>车辆类型{{ VEHICLE_TYPE_MAP[item.VEHICLE_TYPE] }}</text>
</view> </view>
<view class="flex-between mt-10 subtitle"> <view class="flex-between mt-10 subtitle">
<text>车辆所属部门{{ item.DEPT_NAME }}</text> <text>车辆所属部门{{ item.JG_DEPT_NAME }}</text>
<text>车辆责任{{ item.U_NAME }}</text> <text>车辆归属{{ item.JG_USER_NAME }}</text>
</view> </view>
<view class="flex-between mt-10 subtitle"> <view class="flex-between mt-10 subtitle">
<text>访问起始时间{{ item.VISIT_START_TIME }}</text> <text>车辆进/出港状态{{ item.vehicleArrivalStatus || '出港' }}</text>
</view> </view>
<view class="flex-between mt-10 subtitle"> <view class="flex-between mt-10 subtitle">
<text>访问结束时间{{ item.VISIT_END_TIME }}</text> <text>车辆来源{{ VEHICLE_OWNERSHIP_TYPE_MAP[item.CAR_FROM] }}</text>
</view>
<view class="flex-between mt-10 subtitle">
<text>审核状态{{ AUDIT_STATUS_MAP[item.IS_AUDIT] }}</text>
</view> </view>
<view class="mt-10 see_btn"> <view class="mt-10 see_btn">
<view class="wrap"> <view class="wrap">
@ -43,8 +40,12 @@
@click="fnNavigatorView(item.VEHICLE_ID)"></u-button> @click="fnNavigatorView(item.VEHICLE_ID)"></u-button>
</view> </view>
<view class="wrap ml-10"> <view class="wrap ml-10">
<u-button type="primary" text="重新申请" size="mini" <u-button type="primary" text="修改" size="mini"
@click="fnNavigatorView(item.VEHICLE_ID)"></u-button> @click="fnNavigatorAdd(item.VEHICLE_ID)"></u-button>
</view>
<view class="wrap ml-10">
<u-button type="error" text="删除" size="mini"
@click="fnDelete(item.VEHICLE_ID)"></u-button>
</view> </view>
</view> </view>
</view> </view>
@ -58,6 +59,7 @@
<script> <script>
import FabButton from '@/components/fab_button/index.vue' import FabButton from '@/components/fab_button/index.vue'
import {getVehiclemessagePageList, setVehiclemessageDelete} from "@/api";
export default { export default {
components: { components: {
FabButton, FabButton,
@ -81,6 +83,10 @@ export default {
2: "已审核", 2: "已审核",
3: "审核驳回", 3: "审核驳回",
}, },
VEHICLE_OWNERSHIP_TYPE_MAP: {
0: "员工车辆",
1: "单位车辆",
},
keyword: '', keyword: '',
pageSize: 10, pageSize: 10,
currentPage: 1, currentPage: 1,
@ -94,14 +100,29 @@ export default {
} }
}, },
onShow() { onShow() {
// this.resetList() this.resetList()
}, },
methods: { methods: {
async getData() { async getData() {
const resData = {} const resData = await getVehiclemessagePageList({ type: 1, CAR_FROM: 2, curPage: this.currentPage, limit: this.pageSize});
this.list = [...this.list, ...resData.varList]; this.list = [...this.list, ...resData.varList];
console.info(this.list)
this.totalPage = resData.page.totalPage; this.totalPage = resData.page.totalPage;
}, },
fnDelete(VEHICLE_ID) {
uni.showModal({
title: '提示',
content: '确定要删除这条记录?',
success: async res => {
if (res.confirm) {
await setVehiclemessageDelete({
VEHICLE_ID
})
this.resetList()
}
}
})
},
resetList() { resetList() {
this.pageSize = 10 this.pageSize = 10
this.currentPage = 1 this.currentPage = 1

View File

@ -2,18 +2,38 @@
<view class="content"> <view class="content">
<view class="card"> <view class="card">
<u-cell-group :border="false"> <u-cell-group :border="false">
<u-cell title="车牌号" :value="info.LICENCE_NO"></u-cell> <u-cell>
<u-cell title="车牌类型" :value="VEHICLE_LICENSE_PLATE_TYPE_MAP[info.LICENCE_TYPE]"></u-cell> <view slot="title" class="title">车牌号</view>
<u-cell title="车辆类型" :value="VEHICLE_TYPE_MAP[info.VEHICLE_TYPE]"></u-cell> <view slot="label" class="mt-10">{{ info.LICENCE_NO }}</view>
<u-cell title="范围" :value="VEHICLE_PORT_MAP[info.portId]"></u-cell> </u-cell>
<u-cell title="车辆所属部门" :value="info.DEPT_NAME"></u-cell> <u-cell>
<u-cell title="车辆归属人" :value="info.U_NAME"></u-cell> <view slot="title" class="title">车牌类型</view>
<view slot="label" class="mt-10">{{ VEHICLE_LICENSE_PLATE_TYPE_MAP[info.LICENCE_TYPE] }}</view>
</u-cell>
<u-cell>
<view slot="title" class="title">车辆类型</view>
<view slot="label" class="mt-10">{{ VEHICLE_TYPE_MAP[info.VEHICLE_TYPE] }}</view>
</u-cell>
<u-cell>
<view slot="title" class="title">范围</view>
<view slot="label" class="mt-10">{{ VEHICLE_PORT_MAP[info.portId] }}</view>
</u-cell>
<u-cell>
<view slot="title" class="title">车辆所属部门</view>
<view slot="label" class="mt-10">{{ info.DEPT_NAME }}</view>
</u-cell>
<u-cell>
<view slot="title" class="title">车辆归属人</view>
<view slot="label" class="mt-10">{{ info.U_NAME }}</view>
</u-cell>
</u-cell-group> </u-cell-group>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { getVehiclemessageView } from "@/api";
export default { export default {
data() { data() {
return { return {
@ -37,6 +57,15 @@ export default {
} }
} }
}, },
onShow() {
this.getData()
},
methods: {
async getData() {
const resData = await getVehiclemessageView({VEHICLE_ID: this.$route.query.VEHICLE_ID });
this.info = resData.pd;
},
}
} }
</script> </script>