车辆管理编号功能
This commit is contained in:
parent
4d09f9d0dc
commit
858111c596
@ -24,6 +24,32 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="编号选择" >
|
||||
<el-select
|
||||
v-model="formData.numberType"
|
||||
placeholder="请选择是否启用编号"
|
||||
@change="getNumberByType()"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.OA_NUMBERS_NUM)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" v-if="formData.numberType != 2">
|
||||
<el-form-item
|
||||
prop="serialNumber"
|
||||
:label="formData.numberType == 0 ? '流水号' : '文号'"
|
||||
>
|
||||
{{ formData.serialNumber }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="formData.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
@ -146,6 +172,39 @@
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="saveDraft" type="warning" :disabled="draftButton">存为草稿</el-button>
|
||||
<el-popover :visible="visible" placement="top" :width="300" trigger="click">
|
||||
<template #reference>
|
||||
<el-button
|
||||
v-if="formData.numberType == 1&&OpenNumber&&total>1"
|
||||
type="success"
|
||||
@click="visible=true"
|
||||
>
|
||||
选择文号
|
||||
</el-button>
|
||||
</template>
|
||||
<el-table
|
||||
:data="ListNumber"
|
||||
highlight-current-row
|
||||
:height="150"
|
||||
@current-change="handleCurrentChange"
|
||||
>
|
||||
<el-table-column width="60" label="序号" align="center" type="index" />
|
||||
<el-table-column label="文号" >
|
||||
<template #default="scope">
|
||||
{{
|
||||
(scope.row.fastCode || "") + (scope.row.fastBrackets || "") + (scope.row.year || "") +
|
||||
((scope.row.month != null&&scope.row.month!=0) ? scope.row.month.toString().padStart(2,"0") : "") +
|
||||
((scope.row.lastBrackets) || "") +
|
||||
((scope.row.docOrder || "").toString().padStart(scope.row.lengthSelection,"0")) +
|
||||
(scope.row.lastCode || "")
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div style="text-align: right;padding-top: 5px" >
|
||||
<el-button type="primary" @click="visible=false">确定</el-button>
|
||||
</div>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-card>
|
||||
<SelectCarForm ref="selectRef" @success="changeForm"/>
|
||||
@ -162,7 +221,7 @@ import {FormProcessMappingApi} from "@/api/bpm/formprocessmapping";
|
||||
import SelectCarForm from "@/views/Home/clnr/carinfo/SelectCarForm.vue";
|
||||
import SelectDriverForm from "@/views/Home/clnr/driver/SelectDriverForm.vue";
|
||||
import {Edit} from "@element-plus/icons-vue";
|
||||
|
||||
import {numbersApi, numbersVO} from "@/api/home/numbers";
|
||||
|
||||
/** 车辆管理 表单 */
|
||||
defineOptions({ name: 'ClglCreate' })
|
||||
@ -191,6 +250,8 @@ const formData = ref({
|
||||
carDriverInfo: undefined,
|
||||
carMileage: undefined,
|
||||
carStatus: undefined,
|
||||
serialNumber: undefined as string | undefined,
|
||||
numberType: undefined as number | undefined,
|
||||
carReason: undefined,
|
||||
carRemark: undefined,
|
||||
})
|
||||
@ -223,6 +284,17 @@ const formRules = reactive({
|
||||
carAddress: [{ required: true, message: '目的地不能为空', trigger: 'blur' }],
|
||||
carStatus: [{ required: true, message: '车辆状态不能为空', trigger: 'blur' }],
|
||||
carReason: [{ required: true, message: '用车原因不能为空', trigger: 'blur' }],
|
||||
numberType: [{ required: true, message: '编号类型不能为空', trigger: 'blur' }],
|
||||
serialNumber: [{
|
||||
required: true, message: '编号不能为空', trigger: 'blur',
|
||||
validator: (rule, value, callback) => {
|
||||
if (OpenNumber.value && !value) {
|
||||
callback(new Error('编号不能为空'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
}],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
@ -312,7 +384,10 @@ const submitForm = async () => {
|
||||
if ( processKey) {
|
||||
data.processDefinitionKey = processKey
|
||||
}
|
||||
|
||||
// 这里流水号正常保存 文号需要参数传递后保存
|
||||
if (formData.value.numberType == 0 || (formData.value.numberType&&OpenNumber.value)) {
|
||||
await numbersApi.updatenumbers(listNumbers.value)
|
||||
}
|
||||
await ClglApi.createClgl(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
delView(unref(currentRoute))
|
||||
@ -344,6 +419,98 @@ const getUserInfo = async () => {
|
||||
userInfo.value = formData.value.carUserName
|
||||
}
|
||||
}
|
||||
|
||||
const listNumbers = ref(); // 流水数据
|
||||
const ListNumber = ref<numbersVO[]>([]) // 列表数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
// 搜索数据vo
|
||||
const queryParamsNumbers = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
id: undefined,
|
||||
fastCode: undefined,
|
||||
fastBrackets: undefined,
|
||||
year: undefined,
|
||||
month: undefined,
|
||||
lastBrackets: undefined,
|
||||
docOrder: undefined,
|
||||
lastCode: undefined,
|
||||
enableMonth: undefined,
|
||||
numbersType: undefined as number | undefined,
|
||||
lengthSelection: undefined,
|
||||
mappingData1: undefined as string | undefined ,
|
||||
mappingData2: undefined,
|
||||
annotation: undefined,
|
||||
createTime: [],
|
||||
})
|
||||
const visible = ref(false) // 选择编号弹窗显示控制
|
||||
const OpenNumber = ref(false) // 假设流程传递参数
|
||||
|
||||
// 根据编号类型获取编号数据后更新数据
|
||||
const getNumberByType = async ()=> {
|
||||
listNumbers.value = formData.value.serialNumber = undefined;
|
||||
|
||||
queryParamsNumbers.numbersType = formData.value.numberType
|
||||
const data = await numbersApi.getnumbersPage(queryParamsNumbers)
|
||||
|
||||
// 流水号类型的时候是第一个,文号类型的时候一条就直接处理,多条的时候要选择
|
||||
if (formData.value.numberType == 0) {
|
||||
if (data.total == 0) {
|
||||
message.error("找不到流水号数据!请配置流水号")
|
||||
}
|
||||
listNumbers.value = data.list[0]
|
||||
await changeNumbers();
|
||||
} else if (formData.value.numberType == 1&&OpenNumber.value) {
|
||||
if (data.total == 0) {
|
||||
message.error("找不到文号数据!请配置文号!")
|
||||
}
|
||||
total.value = data.total;
|
||||
//判断条数,如果只有一条就和流水号一样直接处理
|
||||
if (data.total == 1 ) {
|
||||
listNumbers.value = data.list[0]
|
||||
await changeNumbers();
|
||||
} else {
|
||||
ListNumber.value = data.list;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取旧数据后对比数据后更新
|
||||
const changeNumbers = async ()=> {
|
||||
|
||||
const currentYear = new Date().getFullYear();
|
||||
const currentMonth = new Date().getMonth() + 1;
|
||||
|
||||
listNumbers.value.docOrder+=1
|
||||
|
||||
// 判断年份不同时 更新年份,顺序号归一
|
||||
if (currentYear != listNumbers.value.year) {
|
||||
listNumbers.value.year = currentYear;
|
||||
listNumbers.value.docOrder = 1;
|
||||
}
|
||||
|
||||
// 判断月份不同时,判断不是禁用月份的时候 更新月份,顺序号归一
|
||||
if (currentMonth != listNumbers.value.month && listNumbers.value.month!==0) {
|
||||
listNumbers.value.month = currentMonth;
|
||||
listNumbers.value.docOrder = 1;
|
||||
}
|
||||
|
||||
// 提取内部函数方便使用
|
||||
const {fastCode, fastBrackets, year, month, lastBrackets, docOrder, lengthSelection, lastCode } = listNumbers.value
|
||||
// 数据拼接
|
||||
formData.value.serialNumber =
|
||||
`${fastCode || ""}${fastBrackets || ""}${year || ""}`+
|
||||
`${(month != null&&month!=0) ? month.toString().padStart(2,"0") : ""}`+
|
||||
`${lastBrackets || ""}${(docOrder || "").toString().padStart(lengthSelection,"0")}${lastCode || ""}`;
|
||||
}
|
||||
|
||||
// 选择编号时赋值
|
||||
const handleCurrentChange = async (val: any | undefined) => {
|
||||
listNumbers.value = JSON.parse(JSON.stringify(val)); // 深拷贝
|
||||
formData.value.serialNumber = undefined
|
||||
await changeNumbers();
|
||||
}
|
||||
|
||||
/** 初始化 */
|
||||
onMounted(async () => {
|
||||
await getUserInfo()
|
||||
@ -360,6 +527,9 @@ onMounted(async () => {
|
||||
draftButton.value= true
|
||||
}
|
||||
}
|
||||
formData.value.numberType = 2;
|
||||
queryParamsNumbers.mappingData1 = curFullPath;
|
||||
await getNumberByType()
|
||||
|
||||
const processKey = await FormProcessMappingApi.selectProcessKey( curFullPath )
|
||||
|
||||
|
@ -25,6 +25,33 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="编号选择" prop="numberType">
|
||||
<el-select
|
||||
v-model="formData.numberType"
|
||||
placeholder="请选择是否启用编号"
|
||||
@change="getNumberByType()"
|
||||
:disabled="!isEditable('numberType')"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.OA_NUMBERS_NUM)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" v-if="formData.numberType != 2">
|
||||
<el-form-item
|
||||
prop="serialNumber"
|
||||
:label="formData.numberType == 0 ? '流水号' : '文号'"
|
||||
>
|
||||
{{formData.serialNumber}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="formData.title" placeholder="请输入标题" :disabled="!isEditable('title')" />
|
||||
</el-form-item>
|
||||
@ -115,6 +142,41 @@
|
||||
<el-input autosize v-model="formData.carRemark" type="textarea" placeholder="请输入备注" :disabled="!isEditable('carRemark')" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<!-- 数据多条时通过这个组件选择 -->
|
||||
<el-popover :visible="visible" placement="top" :width="300" trigger="click">
|
||||
<template #reference>
|
||||
<el-button
|
||||
v-if="formData.numberType == 1&&OpenNumber&&total>1"
|
||||
type="success"
|
||||
@click="visible=true"
|
||||
>
|
||||
选择文号
|
||||
</el-button>
|
||||
</template>
|
||||
<el-table
|
||||
:data="ListNumber"
|
||||
highlight-current-row
|
||||
@current-change="handleCurrentChange"
|
||||
>
|
||||
<el-table-column width="60" label="序号" align="center" type="index" />
|
||||
<el-table-column label="文号" >
|
||||
<template #default="scope">
|
||||
{{
|
||||
(scope.row.fastCode || "") + (scope.row.fastBrackets || "") + (scope.row.year || "") +
|
||||
((scope.row.month != null&&scope.row.month!=0) ? scope.row.month.toString().padStart(2,"0") : "") +
|
||||
((scope.row.lastBrackets) || "") +
|
||||
((scope.row.docOrder || "").toString().padStart(scope.row.lengthSelection,"0")) +
|
||||
(scope.row.lastCode || "")
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div style="text-align: right;padding-top: 5px" >
|
||||
<el-button type="primary" @click="visible=false">确定</el-button>
|
||||
</div>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-card>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
@ -124,6 +186,7 @@ import {propTypes} from "@/utils/propTypes";
|
||||
import {getUserProfile} from "@/api/system/user/profile";
|
||||
import * as TaskApi from "@/api/bpm/task";
|
||||
import {useUserStore} from "@/store/modules/user";
|
||||
import {numbersApi, numbersVO} from "@/api/home/numbers";
|
||||
|
||||
/** 车辆管理 表单 */
|
||||
defineOptions({ name: 'ClglDetail' })
|
||||
@ -153,12 +216,15 @@ const formData = ref({
|
||||
carDriverInfo: undefined,
|
||||
carMileage: undefined,
|
||||
carStatus: undefined,
|
||||
serialNumber: undefined as string | undefined,
|
||||
numberType: undefined as number | undefined,
|
||||
carReason: undefined,
|
||||
carRemark: undefined,
|
||||
})
|
||||
|
||||
//流程
|
||||
const { query } = useRoute() // 查询参数
|
||||
const { currentRoute } = useRouter() // 查询参数
|
||||
const props = defineProps({
|
||||
id: propTypes.number.def(undefined)
|
||||
})
|
||||
@ -228,6 +294,106 @@ const itemControl = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
const listNumbers = ref(); // 流水数据
|
||||
const ListNumber = ref<numbersVO[]>([]) // 列表数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
// 搜索数据vo
|
||||
const queryParamsNumbers = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
id: undefined,
|
||||
fastCode: undefined,
|
||||
fastBrackets: undefined,
|
||||
year: undefined,
|
||||
month: undefined,
|
||||
lastBrackets: undefined,
|
||||
docOrder: undefined,
|
||||
lastCode: undefined,
|
||||
enableMonth: undefined,
|
||||
numbersType: undefined as number | undefined,
|
||||
lengthSelection: undefined,
|
||||
mappingData1: undefined as string | undefined,
|
||||
mappingData2: undefined as string | undefined,
|
||||
annotation: undefined,
|
||||
createTime: [],
|
||||
})
|
||||
const visible = ref(false) // 选择编号弹窗显示控制
|
||||
const OpenNumber = ref(true) // 假设流程传递参数
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
// 根据编号类型获取编号数据后更新数据
|
||||
const getNumberByType = async ()=> {
|
||||
listNumbers.value = formData.value.serialNumber = undefined;
|
||||
|
||||
// 我这里只处理文号,因为流水号默认就有,这里不做流水号处理
|
||||
if (formData.value.numberType == 1&&OpenNumber.value) {
|
||||
//获取文号数据
|
||||
queryParamsNumbers.numbersType = formData.value.numberType
|
||||
const data = await numbersApi.getnumbersPage(queryParamsNumbers)
|
||||
if (data.total == 0) {
|
||||
message.error("找不到文号数据!请配置文号")
|
||||
}
|
||||
total.value = data.total;
|
||||
|
||||
//判断条数,如果只有一条就和流水号一样直接处理
|
||||
if (data.total == 1 ) {
|
||||
listNumbers.value = data.list[0]
|
||||
await changeNumbers();
|
||||
} else {
|
||||
// 两条数据,给用户挑选,然后处理
|
||||
ListNumber.value = data.list;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取旧数据后对比数据后更新
|
||||
const changeNumbers = async ()=> {
|
||||
const currentYear = new Date().getFullYear();
|
||||
const currentMonth = new Date().getMonth() + 1;
|
||||
|
||||
listNumbers.value.docOrder+=1
|
||||
|
||||
// 判断年份不同时 更新年份,顺序号归一
|
||||
if (currentYear != listNumbers.value.year) {
|
||||
listNumbers.value.year = currentYear;
|
||||
listNumbers.value.docOrder = 1;
|
||||
}
|
||||
|
||||
// 判断月份不同时,判断不是禁用月份的时候 更新月份,顺序号归一
|
||||
if (currentMonth != listNumbers.value.month&&listNumbers.value.month!==0) {
|
||||
listNumbers.value.month = currentMonth;
|
||||
listNumbers.value.docOrder = 1;
|
||||
}
|
||||
|
||||
// 提取内部函数方便使用
|
||||
const {fastCode, fastBrackets, year, month, lastBrackets, docOrder, lengthSelection, lastCode } = listNumbers.value
|
||||
// 数据拼接
|
||||
formData.value.serialNumber =
|
||||
`${fastCode || ""}${fastBrackets || ""}${year || ""}`+
|
||||
`${(month != null&&month!=0) ? month.toString().padStart(2,"0") : ""}`+
|
||||
`${lastBrackets || ""}${(docOrder || "").toString().padStart(lengthSelection,"0")}${lastCode || ""}`;
|
||||
}
|
||||
|
||||
// 选择编号时赋值
|
||||
const handleCurrentChange = async (val: any | undefined) => {
|
||||
listNumbers.value = JSON.parse(JSON.stringify(val)); // 深拷贝
|
||||
formData.value.serialNumber = undefined
|
||||
await changeNumbers();
|
||||
}
|
||||
|
||||
const numbersOpen = async ()=> {
|
||||
// 判断一下如果这里本来就有值不做任何改变
|
||||
if (!formData.value.serialNumber) {
|
||||
let curFullPath = currentRoute.value.fullPath
|
||||
// 获取路径部分
|
||||
if (curFullPath.includes("?")) {
|
||||
curFullPath = curFullPath.split("?")[0];
|
||||
}
|
||||
queryParamsNumbers.mappingData2 = "/Home/clnr/clgl/ClglDetail"; // 后续记得修改
|
||||
await getNumberByType()
|
||||
}
|
||||
}
|
||||
|
||||
const editableFields = ref<string[]>([])
|
||||
const isEditable = (field:string) => {
|
||||
return editableFields.value.includes(field); // 如果字段在 editableFields 中,则返回 true
|
||||
@ -239,6 +405,10 @@ const updateForm = async () => {
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
// 这里流水号正常保存 文号可以是组件选择后绑定事件内保存
|
||||
if (formData.value.numberType&&OpenNumber.value) {
|
||||
await numbersApi.updatenumbers(listNumbers.value)
|
||||
}
|
||||
const data = formData.value as unknown as ClglVO
|
||||
await ClglApi.updateClgl(data)
|
||||
} finally {
|
||||
@ -253,9 +423,20 @@ onMounted(async () => {
|
||||
await getUserInfo()
|
||||
await getInfo()
|
||||
await itemControl()
|
||||
await numbersOpen()
|
||||
})
|
||||
const formRules = reactive({
|
||||
// carUser: [{ required: true, message: '申请人不能为空', trigger: 'blur' }],
|
||||
serialNumber: [{
|
||||
required: true, message: '编号不能为空', trigger: 'blur',
|
||||
validator: (rule, value, callback) => {
|
||||
if (OpenNumber.value && !value) {
|
||||
callback(new Error('编号不能为空'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
}],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user