材料分类界面修改 及报销单模块处理

This commit is contained in:
jia 2024-01-05 16:16:38 +08:00
parent 25e6a92261
commit c1fa3f236d
3 changed files with 120 additions and 58 deletions

View File

@ -8,10 +8,12 @@
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="父级分类" prop="pid"> <el-form-item label="父级分类" prop="pid">
<el-select class="w-[280px]" v-model="formData.pid" clearable placeholder="请选择父级分类"> <!-- <el-select class="w-[280px]" v-model="formData.pid" clearable placeholder="请选择父级分类">
<el-option label="全部" :value="0"></el-option> <el-option label="全部" :value="0"></el-option>
<el-option v-for="(item, index) in imaterialList" :key="index" :label="item.name" :value="item.id" /> <el-option v-for="(item, index) in imaterialList" :key="index" :label="item.name" :value="item.id" />
</el-select> </el-select> -->
<el-cascader :props="props" clearable v-model="formData.pid" :show-all-levels="false" />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -37,7 +39,7 @@
<script lang="ts" setup name="projectEdit"> <script lang="ts" setup name="projectEdit">
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { apimaterialLists, apimaterialAdd, apimaterialEdit, apimaterialDetail } from '@/api/material_classify' import { apimaterialLists, apimaterialAdd, apimaterialEdit, apimaterialDetail, apimaterialDatas } from '@/api/material_classify'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import { isEmail, isIdCard, isPhone } from '@/utils/validate' import { isEmail, isIdCard, isPhone } from '@/utils/validate'
import type { PropType } from 'vue' import type { PropType } from 'vue'
@ -45,7 +47,6 @@ import configs from "@/config"
import useUserStore from "@/stores/modules/user"; import useUserStore from "@/stores/modules/user";
const base_url = configs.baseUrl + configs.urlPrefix const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore(); const userStore = useUserStore();
const imaterialList = ref([])
defineProps({ defineProps({
dictData: { dictData: {
type: Object as PropType<Record<string, any[]>>, type: Object as PropType<Record<string, any[]>>,
@ -69,31 +70,68 @@ const formData = reactive({
name: '' name: ''
}) })
//
const props = {
lazy: true,
checkStrictly: true,
async lazyLoad(node: any, resolve: any) {
if (node.level == 0) {
apimaterialLists({ page_no: 1, page_size: 9999 }).then((res) => {
// console.log(res)
let nodes = res.lists.map((item: any) => ({
value: item.id,
label: item.name
}))
resolve(nodes)
})
} else {
apimaterialDatas({ 'pid': node.value })
.then((res) => {
//
let nodes = res.map((item: any) => ({
value: item.id,
label: item.name,
}));
// resolve
resolve(nodes);
})
.catch((error) => {
console.log(error);
});
}
}
}
// //
const formRules = reactive<any>({ const formRules = reactive<any>({
}) })
//
const imateriallist = () => {
apimaterialLists({ page_no: 1, page_size: 9999 }).then((res) => {
console.log(res)
imaterialList.value = res.lists
})
}
// //
const setFormData = async (data: Record<any, any>) => { const setFormData = async (data: Record<any, any>) => {
for (const key in formData) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
formData[key] = data[key] formData[key] = data[key]
} }
} }
if (data.all_pid && data.all_pid.length > 0) {
const data1 = data.all_pid.reverse()
data1.push(data.id)
console.log(data1, '11111')
formData.pid = data1
} else {
const data1 = data.all_pid
data1.push(data.id)
formData.pid = data1
}
@ -109,12 +147,11 @@ const getDetail = async (row: Record<string, any>) => {
// //
const handleSubmit = async () => { const handleSubmit = async () => {
if (formData.pid.length > 0) {
formData.pid = formData.pid[formData.pid.length - 1]
}
console.log(formData)
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData } const data = { ...formData }
mode.value == 'edit' mode.value == 'edit'
? await apimaterialEdit(data) ? await apimaterialEdit(data)
@ -125,7 +162,6 @@ const handleSubmit = async () => {
// //
const open = (type = 'add') => { const open = (type = 'add') => {
imateriallist()
mode.value = type mode.value = type
popupRef.value?.open() popupRef.value?.open()

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose"> <popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules" inline> <el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules" inline>
<div style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;"> <div style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<el-select class="w-[180px]" v-model="formData.dept_id" clearable placeholder="请选择部门"> <el-select class="w-[180px]" v-model="formData.dept_id" clearable placeholder="请选择部门">
@ -13,23 +13,23 @@
</div> </div>
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="客户" prop="customer_id" :rules="[{ required: true, message: '不可为空', trigger: 'change' }]"> <el-form-item label="客户" prop="custom_id" :rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="customer_name" clearable placeholder="请输入客户" readonly @click="showDialog = true" /> <el-input v-model="customer_name" clearable placeholder="请输入客户" readonly @click="showDialog = true" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="报价日期" prop="quotation_date"> <el-form-item label="报价日期" prop="quotation_date">
<el-date-picker class="flex-1 !flex" v-model="formData.quotation_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择报价日期"> <el-date-picker class="flex-1 !flex" v-model="formData.quotation_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择报价日期">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="联系人" prop="contacts"> <el-form-item label="联系人" prop="custom_master_name">
<el-input v-model="formData.contacts" clearable placeholder="请输入联系人" /> <el-input v-model="formData.custom_master_name" clearable placeholder="请输入联系人" />
</el-form-item></el-col> </el-form-item></el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="联系电话" prop="contacts_phone" :rules="[{ required: true, message: '请输入手机号码', trigger: 'blur' }, { validator: isMobileNumber, trigger: 'blur' }]"> <el-form-item label="联系电话" prop="custom_master_phone" :rules="[{ validator: isMobileNumber, trigger: 'blur' }]">
<el-input v-model="formData.contacts_phone" clearable placeholder="请输入联系电话" :regex="/^ 1[3 - 9]\d{ 9}$ /" /> <el-input v-model="formData.custom_master_phone" clearable placeholder="请输入联系电话" :regex="/^ 1[3 - 9]\d{ 9}$ /" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@ -46,19 +46,32 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> <el-col :span="8"> </el-col> <el-col :span="8">
<el-form-item label="含税金额" prop="amount_including_tax"> <el-form-item label="含税金额" prop="amount_including_tax" :rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="formData.amount_including_tax" clearable placeholder="请输入含税金额" /> <el-input v-model="formData.amount_including_tax" clearable placeholder="请输入含税金额" @input="amountinput" />
</el-form-item></el-col><el-col :span="8"> </el-form-item></el-col>
<el-form-item label="运费" prop="freight"> <el-col :span="8">
<el-form-item label="含税金额大写" prop="amount_including_tax" :rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="amount_including_daxie" disabled clearable placeholder="请输入含税金额大写" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="运费" prop="freight" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.freight" clearable placeholder="请输入运费" /> <el-input v-model="formData.freight" clearable placeholder="请输入运费" />
</el-form-item></el-col><el-col :span="8"> </el-form-item></el-col><el-col :span="8">
<el-form-item label="其他费用" prop="other_fee"> <el-form-item label="其他费用" prop="other_fee" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.other_fee" clearable placeholder="请输入其他费用" /> <el-input v-model="formData.other_fee" clearable placeholder="请输入其他费用" />
</el-form-item></el-col><el-col :span="8"> </el-form-item></el-col>
<el-col :span="8">
<el-form-item label="合计金额" prop="total_amount"> <el-form-item label="合计金额" prop="total_amount">
<el-input v-model="formData.total_amount" clearable placeholder="请输入合计金额" /> <el-input v-model="formData.total_amount" clearable placeholder="请输入合计金额" @input="amountinput1" />
</el-form-item></el-col><el-col :span="8"> </el-form-item></el-col>
<el-form-item label="客户需求" prop="customer_require"> <el-col :span="8">
<el-form-item label="合计金额大写" prop="total_amount">
<el-input v-model="total_amount_daxie" clearable disabled placeholder="请输入合计金额大写" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="客户需求" prop="customer_require" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.customer_require" clearable placeholder="请输入客户需求" /> <el-input v-model="formData.customer_require" clearable placeholder="请输入客户需求" />
</el-form-item></el-col><el-col :span="8"> </el-form-item></el-col><el-col :span="8">
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
@ -176,6 +189,7 @@ import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { apiQuotationAdd, apiQuotationEdit, apiQuotationDetail } from '@/api/quotation' import { apiQuotationAdd, apiQuotationEdit, apiQuotationDetail } from '@/api/quotation'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import { toChinesNum } from "@/utils/util";
import customDialog1 from '@/components/product/index.vue' import customDialog1 from '@/components/product/index.vue'
import reviewprocess from '@/components/reviewprocess/index.vue' import reviewprocess from '@/components/reviewprocess/index.vue'
const list1 = reactive([]) const list1 = reactive([])
@ -196,6 +210,8 @@ const mode = ref('add')
const showDialog = ref(false) const showDialog = ref(false)
const showDialog1 = ref(false) const showDialog1 = ref(false)
const customer_name = ref('') const customer_name = ref('')
const amount_including_daxie = ref('')
const total_amount_daxie = ref('')
const tableData = ref([]) const tableData = ref([])
const formDataannex = reactive([]) const formDataannex = reactive([])
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
@ -241,6 +257,20 @@ const getlist = () => {
} }
}) })
} }
//
const amountinput = (e) => {
// console.log(e)
if (e && e > 0) {
amount_including_daxie.value = toChinesNum(e)
}
}
const amountinput1 = (e) => {
// console.log(e)
if (e && e > 0) {
total_amount_daxie.value = toChinesNum(e)
}
}
// //
const deptrmt = (e: any) => { const deptrmt = (e: any) => {
formData.dept_id = '' formData.dept_id = ''
@ -259,10 +289,10 @@ const formData = reactive({
dept_id: '', dept_id: '',
org_id: '', org_id: '',
approve_id: 1, approve_id: 1,
customer_id: '', custom_id: '',
quotation_date: '', quotation_date: '',
contacts: '', custom_master_name: '',
contacts_phone: '', custom_master_phone: '',
create_user: '', create_user: '',
invoice_type: '', invoice_type: '',
amount_including_tax: '', amount_including_tax: '',
@ -278,7 +308,7 @@ const formData = reactive({
}) })
const customEvent = (e: any) => { const customEvent = (e: any) => {
formData.customer_id = e.id; formData.custom_id = e.id;
customer_name.value = e.name; customer_name.value = e.name;
showDialog.value = false; showDialog.value = false;
}; };
@ -334,7 +364,13 @@ const setFormData = async (data: Record<any, any>) => {
if (data.dept_id) { if (data.dept_id) {
getlist1(data.org_id) getlist1(data.org_id)
} }
customer_name.value = data.custom.name if (data.total_amount && data.total_amount > 0) {
amountinput1(data.total_amount)
}
if (data.amount_including_tax && data.amount_including_tax > 0) {
amountinput(data.amount_including_tax)
}
customer_name.value = data.custom_name
for (const key in formData) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
@ -357,21 +393,11 @@ const getDetail = async (row: Record<string, any>) => {
setFormData(data) setFormData(data)
} }
const isMobileNumber = (rule: any, value: string | number | any[], callback: (arg0: Error | undefined) => void) => { const isMobileNumber = (rule: any, value: string | number | any[], callback: (arg0: Error | undefined) => void) => {
if (value) {
// return new Error(""); if (value && !/^1[3|4|5|7|8][0-9]{9}$/.test(value)) {
const reg = /^1[3|4|5|7|8][0-9]\d{8}$/; callback(new Error('请输入正确的手机号码'));
const isPhone = reg.test(value); } else {
value = Number(value); // callback()
if (typeof value === "number" && !isNaN(value)) {//
value = value.toString(); //
if (value.length < 0 || value.length > 12 || !isPhone) { //11
callback(new Error("手机号码格式如:138xxxx8754"));
} else {
callback();
}
} else {
callback(new Error("请输入电话号码"));
}
} }
}; };

View File

@ -51,11 +51,11 @@
<el-table-column label="运费" prop="freight" show-overflow-tooltip /> <el-table-column label="运费" prop="freight" show-overflow-tooltip />
<el-table-column label="其他费用" prop="other_fee" show-overflow-tooltip /> <el-table-column label="其他费用" prop="other_fee" show-overflow-tooltip />
<el-table-column label="合计金额" prop="total_amount" show-overflow-tooltip /> <el-table-column label="合计金额" prop="total_amount" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right"> <el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-perms="['quotation.quotation/edit']" type="primary" link @click="handleEdit(row)"> <!-- <el-button v-perms="['quotation.quotation/edit']" type="primary" link @click="handleEdit(row)">
编辑 编辑
</el-button> </el-button> -->
<el-button v-perms="['quotation.quotation/delete']" type="danger" link @click="handleDelete(row.id)"> <el-button v-perms="['quotation.quotation/delete']" type="danger" link @click="handleDelete(row.id)">
删除 删除
</el-button> </el-button>